1.快速建链

1.1准备环境

XuperChain主要由Golang开发,需要首先准备编译运行的环境

  • 安装go语言编译环境,版本为1.13.12(不要使用1.14)

    下载地址:golang

  • 安装git

    下载地址:git

    安装 g++

    yum install gcc-c++

  • 打通防火墙端口37101,37102,37103

    ①sudo firewall-cmd --permanent --add-port=37101/tcp

    sudo firewall-cmd --permanent --add-port=37102/tcp

    sudo firewall-cmd --permanent --add-port=37103/tcp

    (如果想删除的话:sudo firewall-cmd --permanent --remove-port=xxx/tcp)
    –zone= public 不写也行,默认就是。
    ②重启防火墙:firewall-cmd --reload
    ③查看目前的设置:firewall-cmd --list-all

1.2编译XuperChain

  • 使用git下载源码到本地src文件夹

    • git clone https://github.com/xuperchain/xuperchain.git
  • 执行命令

    • cd $GOPATH/src/github.com/xuperchain/xuperchain
      make
      

      在output目录得到产出xchain和xchain-cli

在这里插入图片描述

1.3创建xuperunion

  • 在其他文件夹创建3个node文件夹可以在任意路径

    • mkdir node1 && mkdir node2 && mkdir node3
  • 将xuperchain/output的文件拷贝到3个node文件夹下

    • cp -r ../xuperchainsrc/xuperchain/output/* node1
      cp -r ../xuperchainsrc/xuperchain/output/* node2
      cp -r ../xuperchainsrc/xuperchain/output/* node3
      
  • 为了把node1/node2和node3分别开,因此需要修改conf/xchain.yaml部分数据

    node1:[port:37101 metricPort: 37200 port: 47101]

    node2:[port:37102 metricPort: 37202 port: 47102]

    node3:[port:37103 metricPort: 37203 port: 47103]

#将node2和node3文件夹下keys和netkeys文件夹删除,并重新生成公钥和私钥
rm -rf data/keys/ data/netkeys/
./xchain-cli account newkeys
./xchain-cli netURL gen

#修改conf/xchain.yaml的相关内容
tcpServer:
	port: :37101
	metricPort: :37200
...
p2pV2:
	port: 47101
	bootNodes://此配置由node1生成后填写到node2和node3中,node1可以不配置
		- "/ip4/192.168.x.x/tcp/47100/p2p/Qmdfasdfatersafd"
  • 创建修改node1节点的配置文件data/config/xuper.json

    ...
    "genesis_consensus": {
            "name": "tdpos",
            "config": {
                "timestamp": "1592386746000000000",//tdpos共识时间,建议设置一个过去不久的时间
                "proposer_num": "2",//每一轮出矿工的个数
                "period": "3000",
                "alternate_interval": "3000",
                "term_interval": "6000",
                "block_num": "20",
                "vote_unit_price": "1",
                //指定第一轮矿工,第一轮矿工必须和proposer_num相同
                "init_proposer": {
                    "1": ["dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN","VJXhSsFdtY3q4JukioFNocXtkfbhbCQG5"]
                }
            }
        }
    

1.4操作node1节点

#修改xuper.json文件,并创建xuper链:
./xchain-cli createChain

#后台守护启动节点,如果报错查看节点下nohup.out文件查看(vm=ixvm 用于虚拟机上)
rm -rf nohup.out && nohup ./xchain vm=ixvm &

#获取node1的节点url
./xchain-cli netURL get

#将返回的url地址配置到node2和node3节点的conf/xchain.yaml的bootNodes:上
#"/ip4/192.168.204.1/tcp/47101/p2p/QmVxeNubpg1ZQjQT8W5yZC9fD7ZB1ViArwvyGUB53sqf8e"
#并将node2和node3分别创建链并启动,注意可以使用与node1相同的xuper.json

1.5查看node2或node3节点的状态

./xchain-cli status -H 127.0.0.1:37102

在这里插入图片描述
当peers中出现其他两个节点的端口时,则说明节点配置成功

2.配置TDPOS的共识机制

2.1提名候选人

创建nominate.json文件到relatefile文件夹(自创建)下

{
    "module": "tdpos",
    "method": "nominate_candidate",
    "args": {
        "candidate": "WwLgfAatHyKx2mCJruRaML4oVf7Chzp42"//测试采用node3的address
    }
}

提名候选人#amout最少需要区块链总金额的十万分之一

./xchain-cli transfer --to=dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN --desc=./relatefile/nominate.json --amount=1100000000027440 --frozen=-1

查询提名者

./xchain-cli tdpos query-candidates

2.2投票候选人

创建vote.json文件到relatefile文件夹(自创建)下

{
    "module": "tdpos",
    "method": "vote",
    "args": {
        "candidates": ["VJXhSsFdtY3q4JukioFNocXtkfbhbCQG5","dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN"]
    }
}

投票候选人#amout代表投票的个数

./xchain-cli transfer --to=dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN --desc=./relatefile/vote.json --amount=100 --frozen=-1

#查询候选人信息:--name=$chain -H=$host后面省略
./xchain-cli tdpos query-candidates --name=$chain -H=$host

#查看某一轮的出块顺序
./xchain-cli tdpos query-checkResult -t=$term

#查询提名信息
./xchain-cli tdpos query-nominate-records -a=$address

#被提名查询:某个候选人被提名的记录
./xchain-cli tdpos query-nominee-record -a=$address

#某候选人被投票记录
./xchain-cli tdpos query-voted-records -a=$address

3.智能合约

3.1智能合约账号

3.1.1创建合约账号用于后期合约部署

./xchain-cli account new --account 1111111111111111 --fee 2000

返回情况如下:

在这里插入图片描述

给合约账号转账,作为基础费用

./xchain-cli transfer --to XC1111111111111111@xuper --amount 100000000

3.1.2通过account.json文件创建合约账户

{
    "module_name": "xkernel",
    "method_name": "NewAccount",
    "args": {
        "account_name": "1111555566661111",
        "acl": "{\"pm\": {\"rule\": 1,\"acceptValue\": 0.6},\"aksWeight\": {\"dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN\": 0.5,\"VJXhSsFdtY3q4JukioFNocXtkfbhbCQG5\": 0.5}}"
    }
}

创建账号命令

./xchain-cli account new --desc ./relatefile/account.json --fee=1000

在这里插入图片描述

创建./data/acl/addr文件,将以下数据写入

XC1111555566661111@xuper/dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN
XC1111555566661111@xuper/VJXhSsFdtY3q4JukioFNocXtkfbhbCQG5

为账户XC1111555566661111@xuper转账

./xchain-cli wasm deploy --account XC1111555566661111@xuper --cname math1 -m --multiAddrs=./data/acl/addrs --runtime go ./relatefile/math.wasm --fee 5510613

3.2合约编译

Go合约编译命令,在同一目录下生成

GOOS=js GOARCH=wasm go build -o counter counter.go

Go合约部署,添加–runtime go参数,完整参数如下:

./xchain-cli wasm deploy --account XC1111111111111111@xuper --cname math1 --runtime go ./relatefile/math.wasm --fee 5510613

Go合约调用

./xchain-cli wasm invoke math -a '{"action":"actionmove"}' --fee 100070

Go合约查询

./xchain-cli wasm query -a '{"action":"querytx","id":"7223a686b84739867f61cac7da3d655b761be36ec175d41ebd4886f36301525e"}' math

GO合约使用

./xchain-cli wasm invoke math -a '{"action":"actionmove"}' --method increase --fee $fee

4.Xuper-java-sdk

4.1下载帮助代码并配置

Xuper-java-sdk代码下载

git clone https://github.com/xuperchain/xuper-java-sdk

项目路径展示:

在这里插入图片描述

将node2中data/keys下private.key,public.key和address文件拷贝到resources/keys中作为备用

Logo

鸿蒙生态一站式服务平台。

更多推荐