XuperChain从节点部署到合约调用完整向导
Contents
XuperChain官网分别提供了节点部署、创建合约账户、调用合约等操作向导,但没有形成统一的文档进行串联,为了让大家快速入门XuperChain的合约部署调用操作,这里提供一个完整的向导供大家参考。
这里假设你已经下载源码,并且成功编译(执行make即可,这里不再做额外说明),进入到可执行文件xchain及xchain-cli所在目录下:
启动链
-
初始化链上配置:
1
./xchain-cli createChain
-
启动链
1
nohup ./xchain &
-
成功启动后可以通过以下命令查看链上状态:
1
./xchain-cli status
可在json类型的返回值中找到键为
height
,其值为当前链高
准备合约账户
-
调用cli命令创建一个合约账户:
1
./xchain-cli account new --account 1111111111111111 --fee 1000
这里指定账户名为
1111111111111111
,创建成功后相应的合约地址为XC1111111111111111@xuper
,其中xuper
为默认启动链时默认分配的链名称 -
通过如下命令查询并验证新生成的合约账户ACL相关信息:
1
xchain-cli acl query --account XC1111111111111111@xuper
-
准备符合权限的地址列表
首先在
data
目录下创建子目录acl
:1
mkdir data/acl
调用如下命令生成地址列表文件:
1
echo "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合约编译:
1
GOOS=js GOARCH=wasm go build counter.go
如果编译成功会生成一个名为counter的可执行文件
-
将可执行拷贝到xchain程序目录下:
1
cp 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 3
contract 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 3
contract 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 3
contract response: 2 The gas you cousume is: 100834 You need add fee