XuperChain从节点部署到合约调用完整向导
Contents
XuperChain官网分别提供了节点部署、创建合约账户、调用合约等操作向导,但没有形成统一的文档进行串联,为了让大家快速入门XuperChain的合约部署调用操作,这里提供一个完整的向导供大家参考。
这里假设你已经下载源码,并且成功编译(执行make即可,这里不再做额外说明),进入到可执行文件xchain及xchain-cli所在目录下:
启动链
-
初始化链上配置:
1./xchain-cli createChain -
启动链
1nohup ./xchain & -
成功启动后可以通过以下命令查看链上状态:
1./xchain-cli status可在json类型的返回值中找到键为
height,其值为当前链高
准备合约账户
-
调用cli命令创建一个合约账户:
1./xchain-cli account new --account 1111111111111111 --fee 1000这里指定账户名为
1111111111111111,创建成功后相应的合约地址为XC1111111111111111@xuper,其中xuper为默认启动链时默认分配的链名称 -
通过如下命令查询并验证新生成的合约账户ACL相关信息:
1xchain-cli acl query --account XC1111111111111111@xuper -
准备符合权限的地址列表
首先在
data目录下创建子目录acl:1mkdir data/acl调用如下命令生成地址列表文件:
1echo "XC1111111111111111@xuper/dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN" > data/acl/addrs -
向新生成的合约账户中转账
1./xchain-cli transfer --to XC1111111111111111@xuper --amount 100000000 --keys data/keys/ -
成功转账后可以查询合约账户中的余额
1./xchain-cli account balance XC1111111111111111@xuper这里会返回余额和步骤2中指定的
amount相同
编译合约
-
进入到合约代码所在位置,运行如下命令对go语言源码进行wasm合约编译:
1GOOS=js GOARCH=wasm go build counter.go如果编译成功会生成一个名为counter的可执行文件
-
将可执行拷贝到xchain程序目录下:
1cp counter [your path]/data/blockchain/xuper/wasm/
部署合约
-
通过如下命令进行试生成合约原始交易
1 2./xchain-cli wasm deploy --account XC1111111111111111@xuper --cname counter -m -a '{"creator": "xchain"}' -A data/acl/addrs -o tx.output --keys data/keys --name xuper --runtime go data/blockchain/xuper/wasm/counter如果试生成成功会返回如下响应消息:
1 2 3contract response: The gas you cousume is: 5182110 You need add fee -
添加步骤1中的返回fee值后重复步骤1中的命令:
1 2./xchain-cli wasm deploy --account XC1111111111111111@xuper --cname counter -m -a '{"creator": "xchain"}' -A data/acl/addrs -o tx.output --keys data/keys --name xuper --runtime go data/blockchain/xuper/wasm/counter --fee 5182110若成功在相同目录下生成名为
tx.output的文件 -
对步骤2中生成的原始交易签名
1./xchain-cli multisig sign --tx tx.output --output sign.out --keys data/keys/签名成功后在相同目录下生成对原始交易的签名文件
sign.out -
将原始交易及签名发送到链上
1./xchain-cli multisig send --tx tx.output sign.out sign.out发送成功后会返回交易的Hash值
-
查询合约账户验证部署结果
1./xchain-cli account contracts --account XC1111111111111111@xuper返回结果中包含刚才生成原始交易时指定的合约名则说明部署成功
调用合约
-
通过如下命令试生成合约调用的原始交易
1./xchain-cli wasm invoke counter -a '{"key":"counter"}' --method increase -m --output increase.out如果试生成成功,则会返回如下响应消息:
1 2 3contract response: 1 The gas you cousume is: 100662 You need add fee -
添加步骤1中的返回fee值后重复步骤1中的命令:
1./xchain-cli wasm invoke counter -a '{"key":"counter"}' --method increase -m --output increase.out --fee 100662若生成成功则会在相同目录下生成名为
increase.out的文件 -
对步骤2中生成的原始交易签名
1./xchain-cli multisig sign --tx increase.out --output increase.sign --keys data/keys/签名成功后在相同目录下生成对原始交易的签名文件
increase.sign -
将原始交易及签名发送到链上
1./xchain-cli multisig send --tx increase.out increase.sign increase.sign发送成功后会返回交易的Hash值
-
测试调用合约结果
1./xchain-cli wasm invoke counter -a '{"key":"counter"}' --method increase -m --output increase.out如上述命令所示,我们可以再次调用increase方法,通过合约试运行中返回结果查看存储于链上key为
counter对应的值变化情况。由于我们已经成功新增过一次计数,这里的返回值应该是2,以下为测试中返回的结果:1 2 3contract response: 2 The gas you cousume is: 100834 You need add fee