快速搭建Xuperchain超級鏈

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章