百度超级链的安装与示例合约的部署调用

一、环境准备

1. 安装golang-1.16.x

  1. 安装众多需要的包
    yum update -y && yum install -y git gcc-c++ wget make vim

  2. 获取golang安装包,当前是1.16版本(2021-07-20)
    wget https://studygolang.com/dl/golang/go1.16.6.linux-amd64.tar.gz

    建议不要使用最新版本,因为会发生go语言示例合约部署失败,需要安装go1.13.x版本,以下命令使用go1.13.x,输入记录未作修改,仍使用1.16版本

    wget https://golang.google.cn/dl/go1.13.14.linux-amd64.tar.gz
    结果:

    。。。
    Saving to: ‘go1.16.6.linux-amd64.tar.gz’
    
    100%[===================================================================================================================================================>] 129,049,323 11.8MB/s   in 9.2s
    。。。
    
    

    查看当前文件目录

    [root@localhost ~]# ll
    total 126032
    drwxr-xr-x. 2 root root         6 Jul 20 09:49 blockdata
    -rw-r--r--. 1 root root 129049323 Jul 13 06:21 go1.16.6.linux-amd64.tar.gz
    -rw-r--r--. 1 root root      1088 Jul 20 09:51 initblockdata.json
    
  3. 解压golang安装包,并设置环境

    # 逐条执行
    # 将go的安装包解压至/usr/local
    tar -C /usr/local -zxf go1.16.6.linux-amd64.tar.gz
    # 设置环境变量
    echo "export GOROOT=/usr/local/go" >> /etc/profile
    # 设置环境变量
    echo "export PATH=/usr/local/go/bin:$PATH" >> /etc/profile
    # 使环境变量生效
    source /etc/profile
    

    结果:
    /usr/local/目录下,有了go目录

    [root@localhost ~]# ll /usr/local/
    total 0
    drwxr-xr-x.  2 root root   6 Apr 11  2018 bin
    drwxr-xr-x.  2 root root   6 Apr 11  2018 etc
    drwxr-xr-x.  2 root root   6 Apr 11  2018 games
    drwxr-xr-x. 10 root root 272 Jul 13 04:01 go
    drwxr-xr-x.  2 root root   6 Apr 11  2018 include
    drwxr-xr-x.  2 root root   6 Apr 11  2018 lib
    drwxr-xr-x.  2 root root   6 Apr 11  2018 lib64
    drwxr-xr-x.  2 root root   6 Apr 11  2018 libexec
    drwxr-xr-x.  2 root root   6 Apr 11  2018 sbin
    drwxr-xr-x.  5 root root  49 Jul 19 11:02 share
    drwxr-xr-x.  2 root root   6 Apr 11  2018 src
    

    /etc/profile文件中,末尾出现如下内容:

    export GOROOT=/usr/local/go
    export PATH=/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    
  4. 使设置的环境变量生效
    source /etc/profile

  5. 验证生效
    go version

    设置编译时下载go依赖包的全局代理
    go env -w GOPROXY=https://goproxy.cn

    输出如下内容:

    [root@localhost ~]# go version
    go version go1.16.6 linux/amd64
    

二、 安装百度超级链

注意:官方开源文档版本落后

2.1 下载百度超级链的源码,本次使用v3.6版本

以下命令在/root/tools目录下执行。
git clone https://github.com/xuperchain/xuperchain.git
进入文件夹:
cd xuperchain
列出源码的所有分支:
git branch -a
切换到v3.6的分支:
git checkout -b v3.6
接着编译v3.6版本的百度超级链源码:
make
编译后的目录结构:

 build.sh
 CONTRIBUTING_CN.md
 CONTRIBUTING.md
 core
 Dockerfile
 event_client
 front
 go.mod
 go.sum
 LICENSE
 Makefile
 output
 README.md
 vendor
 visual

2.2 基本的命令

以下命令,在/root/tools/xuperchain/output目录下执行:

注意:新版的超级链output目录结构有变动,在以下命令中添加对应output目录下的bin目录

# 1.在启动超级链之前,要先创建xuper链,创世区块
./xchain-cli createChain

# 2.启动链服务
nohup ./xchain &

# 3. 查看超级链的运行状态
./xchain-cli status -H 127.0.0.1:37101

# 4. 创建新的普通账户
# 创建普通用户, 包含地址,公钥,私钥
./xchain-cli account newkeys --output data/bob
# 在bob目录下会看到文件address,publickey,privatekey生成

# 5. 查看普通账户的address,publickey,privatekey
head data/commonAcc/** && echo

# 5.1 查看commonAcc这个账户的余额
./xchain-cli account balance --keys data/commonAcc -H 127.0.0.1:37101
输入: 0

# 6. 查询超级链的资源余额
./xchain-cli account balance --keys data/keys -H 127.0.0.1:37101
输出: 100000000000222000000  # 钱的数额会不断增加

# 7. 从源账户 转账 给目标账户
# --keys 从此地址 转给 --to地址 --amount 钱
./xchain-cli transfer --to SiT5HPVJqATtePfBCkyt6TsPQibjBZhYx --amount 10 --keys data/keys/ -H 127.0.0.1:37101

# 8. 查看转账交易详情
./xchain-cli tx query 0b79a1315220e590d8832fa1a8b3d88a74b540284d197246e65e3c59d605d817

# 9. 查看这笔交易的区块的详情
./xchain-cli  block d5eb4550cf8821fdd311ded9794b002fe068deb86925f0abe3851204a0cbc1ae -H 127.0.0.1:37101

# 10. 创建合约账户
./xchain-cli account new --account 1111111111111111 --fee 1000

# 11. 向合约账户转账钱币,用以后续合约部署的手续费
./xchain-cli transfer --to XC1111111111111111@xuper --amount 100000000000 --keys data/keys -H 127.0.0.1:37101

# 12. 查询合约账户的acl(访问控制权限)
./xchain-cli acl query --account XC1111111111111111@xuper --host 14.215.179.74:37101

# 13. 部署合约,native表示--如果本地搭建 XuperChain 环境,在部署、调用 native 合约之前,请先查看`conf/xchain.yaml` 中native一节,确保native合约功能开启
./xchain-cli native deploy --account XC1111111111111111@xuper --fee 15587517 --runtime go -a '{"creator":"XC1111111111111111@xuper"}'   --cname golangcounter ../core/contractsdk/go/example/counter/counter

三、超级链编译c++合约,需要docker容器

3.1 docker容器内 安装docker

  • 方式一:在docker容器内,按照菜鸟教程-docker教程的命令安装docker。
    缺点:

    • 1.在docker容器中再次安装docker,造成容器臃肿;
    • 2.经过安装测试,发现在启动容器内的docker服务时,会报错,如下:

    [root@06f8fa078a20 output]# systemctl start docker
    Job for docker.service failed because the control process exited with error code.
    See “systemctl status docker.service” and “journalctl -xe” for details.
    未解决

  • 方式二:通过宿主机的docker.sock,相当于将宿主机的docker指令映射到容器内
    参考博客:https://www.cnblogs.com/kingsonfu/p/11578073.html

3.2 编译C++合约与部署到本地链

可以参考官方开源文档,实测可以部署完成。

四、超级链编译go示例合约,并部署

在编译go语言合约时,出现了一些问题:

…500-50501-contract invoke failed+waiting native code start timeout…

经过查询官方git仓库的提问后,发现使用go1.13版本可以解决该问题,所以 make百度超级链源码,与编译go示例合约,建议使用go1.13.x版本。

4.1 具体的编译go合约与部署上链

根据官方开源文档中使用以下命令部署合约:
./xchain-cli native deploy --account XC1111111111111111@xuper --fee 15587517 --runtime go -a '{"creator":"XC1111111111111111@xuper"}' --cname golangcounter ../core/contractsdk/go/example/counter/counter
但是,在v3.6版本中./xchain-cli native deploy命令中,猜测历经版本迭代,已经缺少了很多的参数,如--account,--runtime等,所以要使用另一种构建go合约为wasm格式的合约,然后在部署上链的操作

编译go合约源码
GOOS=js GOARCH=wasm go build -o counter.wasm
输出的是counter.wasm 合约
然后,上链命令:
./xchain-cli wasm deploy --account XC1111111111111111@xuper --fee 15587517 --runtime go -a '{"creator":"XC1111111111111111@xuper"}' --cname golangcounter ../core/contractsdk/go/example/counter/counter.wasm
上链耗时几分钟,等待一会即可。

4.2 验证合约部署成功:

# 1.调用 合约中的方法,使用合约的别称 golang,计数加1
./xchain-cli wasm invoke --method Increase -a '{"key":"test"}' golangcounter --fee 1000000

# 2. 输出合约调用次数
./xchain-cli wasm query --method Get -a '{"key":"test"}' golangcounter
输出:contract response: 1
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值