精华内容
参与话题
问答
  • XuperUnion: OS: ubuntu 16.04 Go: go version go1.12.9 linux/amd64 <p><strong>Repo steps curl -X POST http://127.0.0.1:37101/v1/get_block -d BlockID=a64926ebe7bf97f28fddf1aacd4d3338e1d84a44f69ccbb8...
  • 流程图

    流程图

    展开全文
  • 百度超级链github官方下载网址 官方指导手册网址 关键概念 官方学习视频(上)测试链环境测试 官方学习视频(下)测试链环境测试 1.环境部署: mkdir -p $GOPATH/src/github.com/xuperchain &&...

    编译后会生成一个output文件夹:

    tree output
    output
    ├── conf
    │   ├── plugins.conf
    │   ├── xchain.yaml
    │   └── xchain.yaml.sample
    ├── data
    │   ├── acl    
    │   ├── blockchain   
    │   ├── config
    │   │   ├── decay_demo.json
    │   │   ├── pmroot.json
    │   │   ├── pow.json
    │   │   ├── root_demo.json
    │   │   └── xuper.json
    │   ├── keys
    │   │   ├── address      //默认用户账户地址
    │   │   ├── private.key  //默认用户的私钥
    │   │   └── public.key   // 默认用户的公钥
    │   ├── netkeys
    │   │   └── net_private.key
    │   └── sample  //模板
    │       ├── set_account_acl.json
    │       └── set_method_acl.json
    ├── dump_chain
    ├── plugins
    │   ├── consensus  //共识插件,目前支持pow,single,tdpos三种共识方式
    │   │   ├── consensus-pow.so.1.0.0   
    │   │   ├── consensus-single.so.1.0.0
    │   │   └── consensus-tdpos.so.1.0.0
    │   ├── contract
    │   ├── crypto
    │   │   └── crypto-default.so.1.0.0
    │   └── kv
    │       ├── kv-badger.so.1.0.0
    │       ├── kv-ldb-multi.so.1.0.0
    │       └── kv-ldb-single.so.1.0.0
    ├── wasm2c     //智能合约部署二进制文件
    ├── xchain        //服务端二进制文件
    └── xchain-cli   //客户端二进制文件
    

    3.新建链上账户

    # 覆盖式创建账户
    rm -r data/keys
    ./xchain-cli account newkeys  
    #输出结果
    create account using crypto type default
    create account in ./data/keys

    查询账户余额:

    # 直接访问测试网,无需开启服务节点,我测试用的gas是向官方要的!
    cd output && ./xchain-cli account balance asiRErZLVLVLXNa9qgUttZ5b5ym3uedvJ -H 14.215.179.74:37101
    #输出结果
    4983890
    # asiRErZLVLVLXNa9qgUttZ5b5ym3uedvJ为你的账户地址, 14.215.179.74:37101为测试环境接入地址.

    查询测试网状态:

    ./xchain-cli status -H  14.215.179.74:37101
    
    #输出结果
    {
      "blockchains": [
        {
          "name": "xuper",
          "ledger": {
            "rootBlockid": "d7b5ddb8347c9f27fa7bad09ee610665e6b0ab8cd15fd7e82e9e79bcb092dff4",
            "tipBlockid": "53042cc2dfdec062b292625ad0489e492702d1a93dfa897feea3c705529e506d",
            "trunkHeight": 835635,  //当前区块的高度
            "maxBlockSize": 33554432
          },
          "utxo": {
            "latestBlockid": "53042cc2dfdec062b292625ad0489e492702d1a93dfa897feea3c705529e506d",
            "lockKeyList": null,
            "utxoTotal": "10000000000000000",
            "avgDelay": 727,
            "unconfirmed": 0
          }
        }
      ],
      "peers": [
        "10.117.130.40:6718", //集群中部署了4个节点
        "10.117.131.14:6718",
        "10.117.135.39:6718",
        "10.117.131.15:6718"
      ],
      "speeds": {
        "SumSpeeds": {
          "GetBalance": 1.5066298863960237,
          "GetSystemStatus": 67.10594216407269,
          "QueryAcl": 1.139123969332878,
          "QueryTx": 1.0290288260044227
        },
        "BcSpeeds": {
          "xuper": {
            "BcSpeed": {
              "PostTx": 1.868379453458055
            }
          }
        }
      }
    }
    

    4.创建的合约账户

    4.1创建合约账户

    mkdir userconfing &&cd userconfig && vim newcontractaccount.json
    #
    {
      "module_name": "xkernel",
      "method_name": "NewAccount",
      "args" : {
        "account_name": "1234098776890001",  //说明:16位数字组成的字符串
        "acl": "{\"pm\": {\"rule\": 1,\"acceptValue\": 1},\"aksWeight\": {\"asiRErZLVLVLXNa9qgUttZ5b5ym3uedvJ\": 1}}"  // 这里的address改成自己的address
      }
    }

    image

    Step1.设置黄反背书服务,初次使用都需要配置这个文件:

    # 创建文件,并添加内容,保存退出
    vim data/acl/addrs  
    #添加黄反服务地址
    SDnzqhbqm24NvHhFwThLXKpD9jFc9SzxH
    
    #查看添加之后的效果
    cat data/acl/addrs 
    输出:
    SDnzqhbqm24NvHhFwThLXKpD9jFc9SzxH

    Step2: 生成创建合约账号的原始交易,命令如下:

    ./xchain-cli multisig gen --desc ./userconfig/newcontractaccount.json  -H 14.215.179.74:37101 --fee 1000 --output ./userconfig/rawTx.out

    输出:

    ......
      "initiator": "asiRErZLVLVLXNa9qgUttZ5b5ym3uedvJ",
      "authRequire": [
        "SDnzqhbqm24NvHhFwThLXKpD9jFc9SzxH"   //指定使用了黄反服务的地址,所以需要黄反服务签名
      ],
      "initiatorSigns": null,
      "authRequireSigns": null,
      "receivedTimestamp:": 0
    

    Step3: 向黄反服务获取签名,命令如下:

    ./xchain-cli multisig get --tx ./userconfig/rawTx.out --host 14.215.179.74:37101 --output  ./userconfig/complianceCheck.out

    Step4: 自己对原始交易签名,命令如下:

    ./xchain-cli multisig sign --tx ./userconfig/rawTx.out --output ./userconfig/my.sign

    Step5: 将黄反服务交易签名输出,原始交易输出以及自己对原始交易的签名发送出去,命令如下:

    ./xchain-cli multisig send ./userconfig/my.sign ./userconfig/complianceCheck.out --tx ./userconfig/rawTx.out -H 14.215.179.74:37101

    Step6: 查询创建的合约账号,命令如下;

    ./xchain-cli account query --host 14.215.179.74:37101
    [
      "XC1234098776890001@xuper"
    ]
    
    查看ACL权限
    ./xchain-cli acl query --account XC1234098776890001@xuper --host 14.215.179.74:37101
    {
      "pm": {
        "rule": 1
      },
      "aksWeight": {
        "asiRErZLVLVLXNa9qgUttZ5b5ym3uedvJ": 1
      }
    }
    confirmed

    4.2 设置合约账户访问权限ACL

    在创建合约账户的时候就已经设置的ACL,那么再次设置ACL的意义何在?
    答:再次设置ACL仅仅是为了适用于需要修改合约账户访问权限的情况。再接下了的内容中,我将使用新的账户去更改原先的合约账户的所属账户的ACL权限。
    创建一个./xchain-cli account newkeys --output data/yzwaccount

    cat data/yzwaccount/address
    VFd5yGvm2WPdDd3AbygdpdFES1BKr2ZnW

    前提准备: 修改acl/addrs,添加权限设置:

    SDnzqhbqm24NvHhFwThLXKpD9jFc9SzxH
    XC1234098776890001@xuper/VFd5yGvm2WPdDd3AbygdpdFES1BKr2ZnW

    image
    Step1: 生成设置合约账号的原始交易,

    编写accountAclSet.json文件

    vim userconfig/accountAclSet.json
    # 模版如下:
    {
        "module_name": "xkernel",
        "method_name": "SetAccountAcl",
        "args" : { 
            "account_name": "XC1234098776890001@xuper",
            "acl": "{\"pm\": {\"rule\": 1,\"acceptValue\": 1},\"aksWeight\": {\"VFd5yGvm2WPdDd3AbygdpdFES1BKr2ZnW\": 1}}"
        }   
    }

    命令如下:

    ./xchain-cli multisig gen --desc  ./userconfig/accountAclSet.json -H 14.215.179.74:37101 --fee 10 --output  ./userconfig/rawTx.out

    输出结果:

    ......
     "initiator": "asiRErZLVLVLXNa9qgUttZ5b5ym3uedvJ",//合约发起者
      "authRequire": [
        "SDnzqhbqm24NvHhFwThLXKpD9jFc9SzxH",
        "XC1234098776890001@xuper/VFd5yGvm2WPdDd3AbygdpdFES1BKr2ZnW"  //合约账号及拥有权限的acl账户,此处已经修改过了
      ],
      "initiatorSigns": null,
      "authRequireSigns": null,
      "receivedTimestamp:": 0
     }

    Step2: 向黄反服务获取签名,命令如下:

    ./xchain-cli multisig get --tx ./userconfig/rawTx.out --host 14.215.179.74:37101 --output ./userconfig/complianceCheck.out

    Step3: 自己对原始交易签名,命令如下:

    ./xchain-cli multisig sign --tx ./userconfig/rawTx.out --output ./userconfig/my.sign

    Step4: 使用合约账号对合约acl原始交易输出签名

    ./xchain-cli multisig sign --tx ./userconfig/rawTx.out --keys ./data/yzwaccount/ --output verify.sign 

    Step5: 将原始交易以及签名发送出去,命令如下:

    ./xchain-cli multisig send ./userconfig/my.sign ./userconfig/complianceCheck.out,./userconfig/verify.sign --tx ./userconfig/rawTx.out -H 14.215.179.74:37101
    #输出交易ID
    Tx id: d547f983992464718455836eff12de9be54698ba40bdddc3e24b608420f5a7e2

    查看acl访问权限:

    ./xchain-cli acl query --account XC1234098776890001@xuper --host 14.215.179.74:37101
    {
      "pm": {
        "rule": 1,
        "acceptValue": 1
      },
      "aksWeight": {
        "VFd5yGvm2WPdDd3AbygdpdFES1BKr2ZnW": 1
      }
    }
    confirmed

    4.3 交易发起者向合约账户充入测试资源

    合约部署需要合约账户才能操作,因此会消耗合约账户的测试资源,需要开发者先将个人账户的测试资源转一部分给合约账户。

    去掉 data/acl/addrs中的一些权限属性,只留黄反服务,否则,会报错的.
    如:# cat data/acl/addrs
    SDnzqhbqm24NvHhFwThLXKpD9jFc9SzxH

    Step1: 生成测试资源转给合约账户的原始交易数据,命令如下:

    ./xchain-cli multisig gen --to XC1234098776890001@xuper --amount 300000 --output  ./userconfig/rawTx.out  --host 14.215.179.74:37101

    其中: --amount是转出的测试资源数量,--to是接收测试资源的账户名。如果转出方不是./data/keys下的默认地址,则可以使用--from指定转账来源账户,并将该来源地址的签名在multisig send时写在Initiator的位置。

    Step2: 向黄反服务获取签名,命令如下:

    ./xchain-cli multisig get --tx ./userconfig/rawTx.out --output ./userconfig/complianceCheck.out --host 14.215.179.74:37101

    Step3: 自己对原始交易签名,命令如下:

    ./xchain-cli multisig sign --tx ./userconfig/rawTx.out --output ./userconfig/my.sign

    Step4: 将原始交易以及签名发送出去,命令如下:

    ./xchain-cli multisig send ./userconfig/my.sign ./userconfig/complianceCheck.out --tx ./userconfig/rawTx.out -H 14.215.179.74:37101

    Step5: 查询合约账户的测试资源数额,确定转账成功:

    ./xchain-cli account balance XC1234098776890001@xuper -H 14.215.179.74:37101
    # 输出结果:
    300000

    5.合约部署

    5.1编译合约

    编译一个C++版本的智能合约

    cd contractsdk/cpp
    vim yzwcounter.cc
    #写入合约内容,合约最好是自定义的,见yzwcounter.cc
    
    #编译合约
    sh -x build.sh

    yzwcounter.cc

    #include "xchain/xchain.h"
    
    struct YzwCounter : public xchain::Contract {};
    
    DEFINE_METHOD(YzwCounter, 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(YzwCounter, 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(YzwCounter, 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");
        }
    }
    

    5.2 部署合约

    前提准备: 在步骤4.3我们修改访问控制权限,现在我们修改回来,修改acl/addrs,添加权限设置,如4.2所述:

    SDnzqhbqm24NvHhFwThLXKpD9jFc9SzxH
    XC1234098776890001@xuper/VFd5yGvm2WPdDd3AbygdpdFES1BKr2ZnW

    并将编译好的合约可执行文件拷贝到工作目录下userconfig,重命名。

    Step1: 生成部署合约的原始交易,命令如下:

    ./xchain-cli wasm deploy --account XC1234098776890001@xuper --cname  yzwcounter -H 14.215.179.74:37101 -m ./userconfig/counter --arg '{"creator":"xchain"}' --output ./userconfig/contractRawTx.out --fee 145000
    # 输出结果
    The gas you cousume is: 144198
    The fee you pay is: 145000

    Step2: 向黄反服务获取签名,命令如下:

    ./xchain-cli multisig get --tx ./userconfig/contractRawTx.out --host 14.215.179.74:37101 --output ./userconfig/complianceCheck.out

    Step3: 自己对原始交易签名,命令如下:

    ./xchain-cli multisig sign --tx ./userconfig/contractRawTx.out --output ./userconfig/my.sign

    Step4: 使用合约账号对合约原始交易输出签名,命令如下:

    ./xchain-cli multisig sign --tx ./userconfig/contractRawTx.out  --keys ./data/yzwaccount/ --output ./userconfig/verify.sign 

    Step5: 将原始交易以及签名发送出去,命令如下:

    ./xchain-cli multisig send ./userconfig/my.sign ./userconfig/complianceCheck.out,./userconfig/verify.sign --tx ./userconfig/contractRawTx.out -H 14.215.179.74:37101
    Tx id: dbf7fbc2b780ec8f2d7863aebb2c5cd7b06e22aa6a7707143eceb6d61d00d461

    5.3合约调用

    Step1: 生成合约调用的原始交易,命令有下面两种实现方式:

    ./xchain-cli multisig gen --desc counterIncrease.json -H 14.215.179.74:37101 --fee 90 --output  ./userconfig/rawTx.out 
    vim  counterIncrease.json
    #添加内容如下:
    {
        "module_name": "wasm",
        "contract_name": "yzwcounter",
        "method_name": "increase",
        "args":{
            "key":"counter"
        }
    }

    OR(我使用了方法2)

    ./xchain-cli wasm invoke -a '{"key":"counter"}' --method increase yzwcounter -H 14.215.179.74:37101 --fee 90 -m --output ./userconfig/rawTx.out
    输出
    The gas you cousume is: 86
    The fee you pay is: 90

    step2: 修改acl文件,修改结果如下

    cat data/acl/addrs 
    SDnzqhbqm24NvHhFwThLXKpD9jFc9SzxH  #添加了普通合约账户AK的地址
    XC1234098776890001@xuper/VFd5yGvm2WPdDd3AbygdpdFES1BKr2ZnW
    

    Step2: 向黄反服务获取签名,命令如下:

    ./xchain-cli multisig get --tx ./userconfig/rawTx.out --host 14.215.179.74:37101 --output ./userconfig/complianceCheck.out

    Step3: 自己对原始交易签名,命令如下:

    ./xchain-cli multisig sign --tx ./userconfig/rawTx.out --output ./userconfig/my.sign

    Step4: 使用合约账号对合约原始交易输出签名,命令如下:

    ./xchain-cli multisig sign --tx ./userconfig/rawTx.out  --keys ./data/yzwaccount/ --output ./userconfig/verify.sign 

    Step5: 将原始交易以及签名发送出去,命令如下:

    ./xchain-cli multisig send ./userconfig/my.sign ./userconfig/complianceCheck.out,./userconfig/verify.sign  --tx ./userconfig/rawTx.out -H 14.215.179.74:37101
    输出:
    Tx id: 72f3ab82df9d4b878c3442f7a50f39d90ad43d65b69815bb0339f381b23858d8

    Step6: 查询交易信息,命令如下:

    ./xchain-cli wasm query -a '{"key":"counter"}' --method get -H 14.215.179.74:37101 yzwcounter
    
    ./xchain-cli wasm query yzwcounter --args '{"key":"counter"}' -H 14.215.179.74:37101

    image
    image
    image

    报错处理

    执行sh build.sh报错docker: Error response from daemon: linux spec user: unable to find user --rm: no matching entries in passwd file.
    ERRO[0000] error waiting for container: context canceled

    报错处理:

    #将build.sh修改为
    docker run -u `id -u` --rm -v $(pwd):/src hub.baidubce.com/xchain/emcc emmake make

    编译成功后将在build目录下生成一个yzwcouter.wasm的文件,到当前目录build里,将编译好的合约二进制yzwcouter.wasm,重新命名为yzwcouter,放到某个目录下,比如刚才的目录是./output/

    问题

    go语言合约花费gas太高了

    展开全文
  • 一、ACL配置 ACL即访问控制列表,超级链中ACL配置格式如下: { "pm": { "rule": 1, "acceptValue": 0.6 }, "aksWeight": { "YFS2JNvTmgwLK14JNsyXQ5F6cYsY1i75V": 0.4, "Y4tr4K8w2zmQUcstmaYwKe9Ec3QjX8...

    一、ACL配置

    ACL即访问控制列表,超级链中ACL配置格式如下:

    {
    	"pm": {
    		"rule": 1,
    		"acceptValue": 0.6
    	},
    	"aksWeight": {
    		"YFS2JNvTmgwLK14JNsyXQ5F6cYsY1i75V": 0.4,
    		"Y4tr4K8w2zmQUcstmaYwKe9Ec3QjX8U8y": 0.3,
    		"SwFBN77Nq34ibFKkPHrHza3ESRcf1azro": 0.3
    	}
    }
    

    ACL可以规定合约账号背后各地址的权重占比aksWeight,只有当各地址的权重占比aksWeight之和大于或等于设定阈值acceptValue时操作才会有效地进行。

    二、创建合约账号

    • 创建配置文件account.json,内容如下:
    {
        "module_name":"xkernel",
        "method_name":"NewAccount",
        "args" : {
            "account_name":"1572318884355000",
            "acl": "{\"pm\":{\"rule\": 1,\"acceptValue\": 0.6},\"aksWeight\": {\"YFS2JNvTmgwLK14JNsyXQ5F6cYsY1i75V\": 0.4,\"Y4tr4K8w2zmQUcstmaYwKe9Ec3QjX8U8y\": 0.3,\"SwFBN77Nq34ibFKkPHrHza3ESRcf1azro\": 0.3}}"
        }
    }
    

    其中account_name为合约账号的名称,由16位数字组成。要注意acl配置中引号需要转义。

    • 看一下创建账号需要的费用
    ./xchain-cli account new --desc account.json
    

    在这里插入图片描述

    • 创建账号
    ./xchain-cli account new --desc ./releate_file/account.json --fee 1000
    

    在这里插入图片描述

    • 将合约账号acl的地址写入到data/acl/addrs中,用于后续签名,内容如下:
    XC1572318884355000@xuper/YFS2JNvTmgwLK14JNsyXQ5F6cYsY1i75V
    XC1572318884355000@xuper/Y4tr4K8w2zmQUcstmaYwKe9Ec3QjX8U8y
    XC1572318884355000@xuper/SwFBN77Nq34ibFKkPHrHza3ESRcf1azro
    

    注:快捷创建合约账号的方式

    ./xchain-cli account new --account 1572319456949000 --fee 1000
    

    此命令会创建一个名为 XC1572319456949000@xuper 的账号,但是因为没有配置ACL,所以ACL被默认设置为有权限的账号仅为当前节点。
    在这里插入图片描述

    三、操作合约账号

    以下文件位置与文件名按自己本机实际情况操作

    3.1 查询账号ACL

    ./xchain-cli acl query --account XC1572318884355000@xuper
    

    在这里插入图片描述

    3.2 转账

    ./xchain-cli transfer --to XC1572318884355000@xuper --amount 10000 --keys data/keys/ -H 127.0.0.1:37101
    

    在这里插入图片描述

    3.3 查询账号余额

    ./xchain-cli account balance XC1572318884355000@xuper -H 127.0.0.1:37101
    

    在这里插入图片描述

    3.4 修改账号ACL

    • 新的配置文件update.json,内容如下:
    {
        "module_name":"xkernel",
        "method_name":"SetAccountAcl", 
        "args" : {
            "account_name":"XC1572318884355000@xuper",
            "acl": "{\"pm\":{\"rule\": 1,\"acceptValue\":0.6},\"aksWeight\": {\"YFS2JNvTmgwLK14JNsyXQ5F6cYsY1i75V\":0.5,\"SwFBN77Nq34ibFKkPHrHza3ESRcf1azro\":0.5}}"
        }
    }
    

    其中method_name要修改为:SetAccountAcl

    • 查询生成多重签名交易需要的费用
    ./xchain-cli multisig gen --desc releate_file/update.json --from XC1572318884355000@xuper
    

    在这里插入图片描述

    • 生成多重签名交易
    ./xchain-cli multisig gen --desc releate_file/update.json --from XC1572318884355000@xuper --fee 1
    

    默认产生一个tx.out文件,可以指定文件名称:

    ./xchain-cli multisig gen --desc releate_file/update.json --from XC1572318884355000@xuper --fee 1 --output update.out
    

    在这里插入图片描述

    • 对生成的交易做签名
    ./xchain-cli multisig sign --tx update.out --keys data/keys/ 
    

    默认生成sign.out文件,可以指定文件名称:

    ./xchain-cli multisig sign --tx update.out --keys data/keys/ --output node1.sign
    ./xchain-cli multisig sign --tx update.out --keys ../node2/data/keys/ --output node2.sign
    

    在这里插入图片描述

    • 发送签名后的交易
    ./xchain-cli multisig send --tx update.out node1.sign,node2.sign node1.sign,node2.sign
    

    在这里插入图片描述

    • 修改ACL成功
      在这里插入图片描述
    展开全文
  • 一、合约编写(C++) 合约示例: #include "xchain/xchain.h" struct Counter : public xchain::Contract {}; DEFINE_METHOD(Counter, initialize) { xchain::Context* ctx = self.context();...

    一、合约编写(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
    

    在这里插入图片描述

    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" 
    

    在这里插入图片描述

    2.6 安装Docker CE

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

    三、合约编译

    3.1 C++合约

    cd xuperunion/contractsdk/cpp
    sh build.sh
    

    在这里插入图片描述

    四、合约部署

    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:编译好的合约。
    在这里插入图片描述

    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
    

    在这里插入图片描述

    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
    

    在这里插入图片描述

    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
    

    在这里插入图片描述

    展开全文
  • 一、使用pow共识创建链 将node1、node2和node3节点data/config/xuper.json文件中内容替换如下: { "version" : "1", "predistribution": [ {} ], "maxblocksize" : "128", "award" : "1000000", ...
  • 百度超级链XuperUnion三节点网络搭建将 将

空空如也

1 2 3
收藏数 49
精华内容 19
热门标签
关键字:

XuperUnion