美文网首页blockstackblockstack-Trans
naming-Clarity Smart Contracts-c

naming-Clarity Smart Contracts-c

作者: 空乱木 | 来源:发表于2019-08-05 12:08 被阅读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存储库。

    相关文章

      网友评论

        本文标题:naming-Clarity Smart Contracts-c

        本文链接:https://www.haomeiwen.com/subject/vcppdctx.html