blockstackblockstack-Trans

naming-Clarity Smart Contracts-c

2019-08-05  本文已影响2人  空乱木

FROM : https://docs.blockstack.org/core/smart/sdk-quickstart.html

您可以使用software developer kit (SDK)来开发、测试和部署Clarity 智能合约。SDK超越了基本的测试环境,允许开发调用Clarity合约的Javascript或TypeScript客户端。

关于本教程和您需要的先决条件
任务1:生成一个初始的Clarity项目
任务2:调查生成的项目
任务三:试着扩大合同

Clarity在预发布中

Clarity及其附带的工具集和SDK都在预发行版中。如果您遇到有关Clarity的问题或有特性请求,请在blockstack/blockstack-core存储库上创建一个问题。要阅读以前的或加入正在进行的关于智能合约的讨论,特别是关于Clarity的讨论,请访问Blockstack论坛中的智能合约主题。

关于本教程和您需要的先决条件

对于本教程,您将使用npm来管理依赖项和脚本。本教程依赖于npm依赖关系管理器。在开始之前,请使用要验证的命令验证是否安装了npm。

$ which npm
/usr/local/bin/npm

如果在系统中没有找到npm,请安装它

使用npm安装Yeoman。Yeoman是一个通用的脚手架系统,帮助用户快速启动新项目,并简化现有项目的维护。使用which命令验证您已经安装了yo。

$ which yo
/usr/local/bin/yo

如果没有Yeoman,可以使用npm install -g yo命令安装它。

任务1:生成一个初始的Clarity项目

SDK使用Yeoman生成一个项目脚手架——一组初始目录和文件。

1.为项目创建一个新目录。

mkdir hello-clarity-sdk

2.切换到新的项目目录。

cd hello-clarity-sdk

3.使用npm命令初始化Clarity项目。

npm init yo clarity-dev
npx: installed 15 in 1.892s
create package.json
create .vscode/extensions.json
...
Project created at /private/tmp/hello-clarity-sdk
✔ create-yo ok!

根据您的连接速度,可能需要花费一些时间来构建脚手架。

任务2:调查生成的项目

你的项目应该包含三个目录:

目录 描述
contracts 这里包含.clar文件(Clarity合约文件)。
test 包含用于测试应用程序的文件
node_modules 包含项目所依赖的包。添加npm

合约目录在sample/hello-world中包含一个sample/hello-world.clar文件。

(define (say-hi)
"hello world")

(define (echo-number (val int))
val)

该合约公开了两个基本功能。say-hi返回一个hello world字符串。
increment-number : 打印 val。

该项目还包括tests/hello-world.ts文件。测试是用Typescript写的。您还可以用Javascript编写测试。

import { Client, Provider, ProviderRegistry, Result } from "@blockstack/clarity";
import { assert } from "chai";

describe("hello world contract test suite", () => {
let helloWorldClient: Client;
let provider: Provider;

before(async () => {
provider = await ProviderRegistry.createProvider();
helloWorldClient = new Client("hello-world", "sample/hello-world", provider);
});

it("should have a valid syntax", async () => {
await helloWorldClient.checkContract();
});

describe("deploying an instance of the contract", () => {
before(async () => {
await helloWorldClient.deployContract();
});
it("should return 'hello world'", async () => {
const query = helloWorldClient.createQuery({ method: { name: "say-hi", args: [] } });
const receipt = await helloWorldClient.submitQuery(query);
const result = Result.unwrap(receipt);
const parsedResult = Buffer.from(result.replace("0x", ""), "hex").toString();
assert.equal(parsedResult, "hello world");
});
it("should echo number", async () => {
const query = helloWorldClient.createQuery({
method: { name: "echo-number", args: ["123"] }
});
const receipt = await helloWorldClient.submitQuery(query);
const result = Result.unwrap(receipt);
assert.equal(result, "123");
});
});

after(async () => {
await provider.close();
});
});

hello-world.ts测试文件是一个运行hello-world.clar合约。测试对于智能合约来说是至关重要的,因为测试的目的是操纵资产及其所有权。这些操作在区块链中是不可逆的。在创建合约时,如果您在测试中花费的时间和代码比在契约目录中花费的时间更多,您应该不会感到惊讶。tests/hello-world.ts文件包含以下内容:

测试的第一部分(第1 -10行)设置测试环境。它定义了一个Clarity provider并启动它(第9行)。这个测试还检查客户端(第14行),然后启动它(第19行),这相当于用命令行运行clear -cli check。其余的测试代码执行契约。试着运行这个测试。
npm run test

hello-clarity-sdk@0.0.0 test /private/tmp/hello-clarity-sdk
mocha

hello world contract test suite
✓ should have a valid syntax
deploying an instance of the contract
✓ should print hello world message
✓ should echo number

3 passing (182ms)

在下一节中,尝试扩展hello-world。明白”计划。

任务3:试着扩大合约内容

在这个任务中,您将面临扩展contracts/hello-world.clar的挑战。使用您最喜欢的编辑器并打开contracts/hello-world.clar文件。如果使用Visual Studio代码,可以安装Blockstack Clarity扩展。该扩展提供语法着色和一些自动完成功能。

编辑hello-world.clar文件
;; Functions

(define (hello-world)
"hello world")

(define (echo-number (val int))
val)

使用+函数创建一个递增10的函数。
;; Functions

(define (say-hi)
"hello world")

(define (increment-number (number int))
(+ 1 number))

(define (increment-number-by-10 (number int))
(+ 10 number))

使用+和-函数创建用户定义的递减数方法。
;; Functions

(define (say-hi)
"hello world")

(define (increment-number (number int))
(+ 1 number))

(define (increment-number-by-10 (number int))
(+ 10 number))

(define (decrement-number (number int))
(- number 1))

最后,尝试添加counter变量,并确保存储它。在代码中增加counter并添加get-counter函数来返回结果。这里有一个提示,你可以添加一个var '到一个合约添加以下行(在函数之前):

;; Storage

(define-data-var internal-value int 0)

答案:
;; Storage

(define-data-var counter int 0)

;; Functions

(define (say-hi)
"hello world")

(define (increment-number (number int))
(+ 1 number))

(define (increment-number-by-10 (number int))
(+ 10 number))

(define (decrement-number (number int))
(- number 1))

(define (increment-counter)
(set-var! counter (+ 1 counter)))

(define (get-counter)
(counter))

要查看其他更长时间的示例程序,请访问clear -js-sdk存储库。

上一篇下一篇

猜你喜欢

热点阅读