百度超级链XuperUnion合约部署(Ubuntu18.04)

一、合约编写(C++)

  • 合约示例:
#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");
    }
}

二、安装Docker CE

2.1 卸载已经存在的旧版Docker

sudo apt-get remove docker docker-engine docker-ce docker.io

百度超级链XuperUnion合约部署(Ubuntu18.04)_第1张图片

2.2 更新

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

2.3 安装以下包以使apt可以通过HTTPS使用存储库(repository)

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

2.4 添加Docker公共密钥

sudo curl -fsSL  https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add

在这里插入图片描述

2.5 设置版本库类型

sudo add-apt-repository "deb [arch=amd64]  https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 

百度超级链XuperUnion合约部署(Ubuntu18.04)_第2张图片

2.6 安装Docker CE

sudo apt-get update
sudo apt-get install docker-ce

三、合约编译

3.1 C++合约

cd xuperunion/contractsdk/cpp
sh build.sh

百度超级链XuperUnion合约部署(Ubuntu18.04)_第3张图片

四、合约部署

4.1 获取部署合约需要的费用

./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:编译好的合约。
百度超级链XuperUnion合约部署(Ubuntu18.04)_第4张图片

4.2 发起多重签名交易

加上参数--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

百度超级链XuperUnion合约部署(Ubuntu18.04)_第5张图片

4.3 对生成的交易做签名

创建合约账号时,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

百度超级链XuperUnion合约部署(Ubuntu18.04)_第6张图片

4.4 发送签名后的交易

./xchain-cli multisig send --tx deploy.out node1.sign,node2.sign,node3.sign node1.sign,node2.sign,node3.sign

在这里插入图片描述

五、调用合约

5.1 调用increase方法

  • 查询费用
./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

在这里插入图片描述

  • 让参数dong增加到7
    在这里插入图片描述

5.2 调用get方法

./xchain-cli wasm query -a '{"key":"dong"}' --method get -H localhost:37101 counter

在这里插入图片描述

你可能感兴趣的:(区块链)