#include "xchain/xchain.h"
struct Counter : public xchain::Contract {};
DEFINE_METHOD(Counter, initialize) {
xchain::Context* ctx = self.context();
const std::string& creator = ctx->arg("creator");
if (creator.empty()) {
ctx->error("missing creator");
return;
}
ctx->put_object("creator", creator);
ctx->ok("initialize succeed");
}
DEFINE_METHOD(Counter, increase) {
xchain::Context* ctx = self.context();
const std::string& key = ctx->arg("key");
std::string value;
ctx->get_object(key, &value);
int cnt = 0;
cnt = atoi(value.c_str());
char buf[32];
snprintf(buf, 32, "%d", cnt + 1);
ctx->put_object(key, buf);
ctx->ok(buf);
}
DEFINE_METHOD(Counter, get) {
xchain::Context* ctx = self.context();
const std::string& key = ctx->arg("key");
std::string value;
if (ctx->get_object(key, &value)) {
ctx->ok(value);
} else {
ctx->error("key not found");
}
}
sudo apt-get remove docker docker-engine docker-ce docker.io
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install apt-transport-https
sudo apt-get install ca-certificates
sudo apt-get install curl
sudo apt-get install software-properties-common
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce
cd xuperunion/contractsdk/cpp
sh build.sh
./xchain-cli wasm deploy --account XC1572318884355000@xuper --cname counter --arg '{"creator": "counterwasm"}' -m --multiAddrs data/acl/addrs --output deploy.out --keys data/keys --name xuper -H localhost:37101 releate_file/counter.wasm
wasm deploy
:部署wasm合约的命令参数。
--account
:部署wasm合约的账号(只有合约账号才能进行合约的部署)。
--cname
:合约部署后在链上的名字(长度为4~16字符)。
--arg
:传入合约的参数,传给Initialize方法使用,counter合约需要传一个creator
参数(非必填)。
-m
:意为多重签名的方式,xchain需要以这种方式部署wasm合约。
-A
:需要收集签名的列表,默认为data/acl/addrs。
-o
:输出的tx文件名,默认为tx.out。
--keys
:此为部署发起者的密钥地址,默认为data/keys。
--name
:此为区块链名称,默认为xuper。
-H
:xchain服务的地址,默认为本机的37101端口。
counter.wasm
:编译好的合约。
加上参数--fee
:要支付的费用
./xchain-cli wasm deploy --account XC1572318884355000@xuper --cname newcounter --arg '{"creator": "counterwasm"}' -m --multiAddrs data/acl/addrs --output deploy.out --keys data/keys --name xuper -H localhost:37101 releate_file/counter.wasm --fee 145539
创建合约账号时,ACL里边有几个账号就需要几个签名。
./xchain-cli multisig sign --tx deploy.out --keys ../node1/data/keys/ --output node1.sign
./xchain-cli multisig sign --tx deploy.out --keys ../node2/data/keys/ --output node2.sign
./xchain-cli multisig sign --tx deploy.out --keys ../node3/data/keys/ --output node3.sign
./xchain-cli multisig send --tx deploy.out node1.sign,node2.sign,node3.sign node1.sign,node2.sign,node3.sign
./xchain-cli wasm invoke -a '{"key":"dong"}' --method increase -H localhost:37101 counter
-a
:传的参数。
--method
:调用的方法。
counter
:调用的合约名称。
./xchain-cli wasm invoke -a '{"key":"dong"}' --method increase -H localhost:37101 counter --fee 79
./xchain-cli wasm query -a '{"key":"dong"}' --method get -H localhost:37101 counter