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中作爲備用