百度超级链属于联盟链方案,但与其他联盟链方案最大的不同有两个,一个是有币的概念,但不能随意交易;另一个是开发者相对活跃,提供了很多实用的例程。本章主要是对百度超级链进行克隆。
这是我在参加2020年第四届中国区块链开发大赛时,因为采用指定的区块链可以加分,所以当时用的是百度超级链的方案。百度超级链属于联盟链方案,但与其他联盟链方案最大的不同有两个,一个是有币的概念,但不能随意交易;另一个是开发者相对活跃,提供了很多实用的例程。 可惜尽管进了复赛,但因为距离较远,来回费用比较高,再加上自己也没觉得做的东西多好,就放弃了。我将把当时一些资料整理一下,给大家公布一下。需要强调一点的是,因为当时搜集的资料注释基本就都是中文的,我增加的注释也是中文的,所以也忘了哪个内容是我加的,哪个内容是原来有的,特此声明。 本章主要是对百度超级链进行克隆。
首先是最简单的编译: 在ubuntu18环境下: apt update wget https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz tar -C /usr/local -xzf go1.13.4.linux-amd64.tar.gz nano /etc/profile 打开之后添加如下三行: export GOROOT=/usr/local/goo:p export PATH=$PATH:/usr/local/go/bin export GOPATH=/home/ubuntu/go source /etc/profile 输入go version,看是否是1.13 apt install git git clone -b v3.8 https://github.com/xuperchain/xuperchain.git cd xuperchain make 编译完毕后, cd ./output ./xchain-cli createChain(创立一个测试链) nohup ./xchain &(运行上面的测试链) ./xchain-cli status(查看区块链状态,可以反复运行)
xchain中,账号分为普通账号和“合约账号”,这里先介绍普通账号的创建,命令如下 创建普通用户, 包含地址,公钥,私钥 ./xchain-cli account newkeys --output data/bob 在bob目录下会看到文件address,publickey,privatekey生成
对于普通账号,可使用如下命令查询账号资源余额,其中 -H 参数为xchain服务的地址 ./xchain-cli account balance --keys data/keys -H 127.0.0.1:37101
转账操作需要提供源账号的私钥目录,也就类似“1.2.4.1”中生成的目录,这里注意到并不需要提供目标账号的任何密钥,只需要提供地址即可 --keys 从此地址 转给 --to地址 --amount 钱 ./xchain-cli transfer --to czojZcZ6cHSiDVJ4jFoZMB1PjKnfUiuFQ --amount 10 --keys data/keys/ -H 127.0.0.1:37101
通过以下命令可以查询交易的信息,包括交易状态、交易的源和目标账号、交易的金额、所在的区块(如果已上链)等内容 可查询上一步生成的txid的交易信息 ./xchain-cli tx query cbbda2606837c950160e99480049e2aec3e60689a280b68a2d253fdd8a6ce931 -H 127.0.0.1:37101
通过blockid可以查询区块的相关信息,包括区块内打包的交易、所在链的高度、前驱/后继区块的id等内容 可查询上一步交易所在的block id信息 ./xchain-cli block 0354240c8335e10d8b48d76c0584e29ab604cfdb7b421d973f01a2a49bb67fee -H 127.0.0.1:37101
目前超级链支持的监管合约主要有以下几个: 实名制合约: identity DApp封禁合约: banned 合规性检查合约: complianceCheck 交易封禁合约: forbidden
实名合约代码路径如下:core/contractsdk/cpp/reserved/identity.cc 实名合约实名的对象是一个具体的ak。 apt install docker.io(原教程里面没写) cd ./contractsdk/cpp ./build.sh 然后会在build文件夹里面出现很多编译后的结果。
./xchain-cli account new --account 1111111111111111 第一次会提示需要多少fee 然后再运行一次 ./xchain-cli account new --account 1111111111111111 –fee 1000
./xchain-cli transfer --to XC1111111111111111@xuper --amount 100000
通过 -a 的creator参数,可以初始化被实名的ak。 ./xchain-cli wasm deploy --account XC1111111111111111@xuper --cname identity -H localhost:37101 identity.wasm -a '{"creator":"addr1"}' 第一次运行显示需要多少gas。然后再运行一次,后面添加 –fee n(n就是多少gas)
这些环境变量有助于我们更方便的执行一些命令而不用指定命令的全路径。 export PATH=$HOME/xuperchain/output:$PATH export XDEV_ROOT=$HOME/xuperchain/core/contractsdk/cpp 启动xuperchain –vm ixvm参数是选择ixvm合约虚拟机,开发合约过程中使用ixvm虚拟机能加快合约部署 $ cd output
$ ./xchain-cli createChain
$ nohup ./xchain --vm ixvm &
合约账号用来进行合约管理,比如合约的权限控制等,要部署合约必须创建合约账号,同时合约账号里面需要有充足的xuper来部署合约。 创建合约账号XC1111111111111111@xuper. ./xchain-cli account new --account 1111111111111111 --fee 2000 ./xchain-cli transfer --to XC1111111111111111@xuper --amount 100000000 至此我们完成了所有的准备工作,包括编译xuperchain,创建链,启动节点,创建合约账号,后面我们开始体验怎么编译,部署和调用智能合约。
xdev提供了一个默认的c++合约工程模板 $ xdev init hello-cpp 这个命令创建了一个hello-cpp的合约工程 第一次编译的时间会长一点,因为xdev需要下载编译器镜像,以及编译超级链的标准库。 $ xdev build -o hello.wasm CC main.cc LD wasm 编译结果为hello.wasm,后面我们使用这个文件来部署合约 ./xchain-cli wasm deploy --account XC1111111111111111@xuper --cname hello --fee 5200000 --runtime c ./hello-cpp/hello.wasm 调用合约 $ ./xchain-cli wasm invoke --method hello --fee 110000 hello
下一篇文章对百度超级链做一些技术上的概述。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!