5.7 合约开发和部署的多种方式

Cocos-BCX合约开发说明:

合约开发语言:Lua
Cocos-BCX会直接把源码部署到链上去,没有中间码,直接源码

编写智能合约是开发区块链产品的过程中很重要的一步,以下是Cocos-BCX合约开发的3种方式:

1. Terminal中开发合约

合约管理功能非常方便开发者创建、更新合约,和直接执行合约接口。

1.1. 简单工具介绍
1.1.1 使用Terminal登录Cocos-BCX的账号
1.1.2 在左侧目录栏中点击合约管理可以查看此账号下已经存在的合约的各种信息,包括合约的基本信息,代码,接口信息,数据区(public_data)等,如下图:

1.2. 创建合约
1.2.1 点击添加合约即是创建新的合约

1.2.2 弹出界面填写合约名称,合约名长度为4-63位,由小写字母或数字构成且以"contract."开头,例如 "contract.testnew"

1.3 编辑合约代码,和更新已存在合约

function hello()
    chainhelper:log('Hello World! contract.testnew')
end

1.4 发布合约
1.4.1 点击“发布合约”按钮

1.4.2 点击随机生成, 若合约开启权限验证,则JS-SDK的app_keys配置项必须填入该key,建议复制保存

1.4.3 点击确定,合约创建需要一定的费用作为手续费

1.5 调用合约
1.5.1 发布合约后,可以在下图箭头位置看到合约的接口,点击接口填写参数可以执行接口

1.5.2 调用合约的需要一定的手续费

1.5.3 调用结果会在编辑区下方显示

1.6 更新合约
1.6.1 init_data()为初始化数据的方法

function hello()
    chainhelper:log('Hello World! contract.testnew')
end

function hello2(num,amount)
    chainhelper:log('=======loooooog starts=======');
    chainhelper:log('{"num": "'..num..'","amount":"'..amount..'"}');
    chainhelper:log('=======log ends=======');
end

function init_data()
    read_list = {public_data={initdata=true}}
    chainhelper:read_chain()
    public_data.initdata  = 98
    write_list = {public_data={initdata=true}}
    chainhelper:write_chain()
end

1.6.2 点击发布合约(已存在的合约就会被更新为最新),发布成功后必须调用init_data()接口,数据才可初始化

1.6.3 点击“数据”可现实初始化数据

2 cli_wallet开发部署合约

注意前提步骤:登录账户并导入资产,并解锁钱包

2.1 创建合约

  • 命令格式
    create_contract [合约拥有者] [合约名称] [合约权限(一对公私钥中的公钥publicKey)] [合约内容] [是否广播(true/false)]
  • 示例
    create_contract 1.2.17 contract.helloworld "COCOS1DE213......" "function hello() chainhelper:log('Hello World!') end" true
  • 原型
create_contract owner name contract_authority data broadcast
  • 结果

2.2 更新合约

  • 命令格式
    revise_contract [合约更新人用户名] [合约名称或ID] [合约内容] [是否广播(true/false)]
  • 示例
    revise_contract 1.2.17 contract.helloworld "function hello() chainhelper:log('Hello World!') chainhelper:log(date('%Y-%m-%dT%H:%M:%S', chainhelper:time())) end" true
  • 原型
revise_contract owner name contract_authority data broadcast
  • 结果

2.3 调用合约

  • 命令格式
    call_contract_function [用户名或ID] [合约名称或合约ID] [函数名] [参数列表] [是否广播(true/false)]
  • 示例
    call_contract_function 1.2.17 contract.helloworld [] true
  • 原型
call_contract_function account_id_or_name contract_id_or_name function_name value_list broadcast
  • 结果

3. 通过js-sdk开发合约

根据js-sdk demo的输入框,如下图:

合约的部署需要这几个参数。公私钥对很简单,在合约部署功能区的上面有生成公私钥对的按钮,点击生成即可。然后输入相应的合约名字,代码。点击确认创建合约即可。

此处如果出现错误一般有可能几个原因造成的:

  • 部署合约之前需要登录账号,你忘记登录了(直接在js-sdk demo里面登录)。
  • 登录的账号没有注册为开发者
  • 账号里面的COCOS不够支付费用
  • 部署合约的代码有错误,需要修正相应的错误,重新部署。
    另外,具体的错误,可以在chrome底下,用开发者工具,看js-sdk demo里面js的console输出,有非常丰富的错误输出信息。
    到此为止,我们已经将合约成功部署到链上去了。

4 查看合约

我们可以在terminal里面输入部署的合约名字,看到合约的各种信息,包括合约的基本信息,代码,接口信息,数据区(public_data),以及合约的统计信息

4.1 查看合约基本信息

4.2 合约统计
统计一些运营数据包括合约的调用次数,货币的转入转出数量,可以很方便得看到合约相关的各种操作的统计信息。

4.2.1 在Terminal 中还提供了热门合约的排名,可以清晰查看合约的调用次数,以及可以快速查看合约的详情,以及合约的执行结果。

4.2.2 点击合约进入可以查看合约代码、合约数据和合约统计。

Updated 10 months ago

5.7 合约开发和部署的多种方式


Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.