比特股區(qū)塊鏈上希望新增一個見證人的時候我們需要操作一系列的命令。當(dāng)這個人成為最新見證人后我們還需要在區(qū)塊鏈上進(jìn)行相關(guān)操作,以使這個見證人可以給區(qū)塊進(jìn)行簽名。
我們在之前的文章中已經(jīng)介紹過cli_wallet的大致使用情況了。下面會介紹如何將一個新注冊的賬戶升級成為見證人
#首先 先解鎖錢包 相關(guān)流程已經(jīng)介紹過了 這里就不多說了
#先獲得一個私鑰
suggest_brain_key
#這次我們的返回值是
#{
#"brain_priv_key": "LANGAHA CRUSTAL METEOR DARKLY PLUMIFY TANZEB LIMBUS DOWAGER PAINTER QUASHY SUNBEAM HOMILY DOURLY CHUNNER LAKER CREWEL",
#"wif_priv_key": "5JA6GtE9QtbziadKTGqL3u47w7qCqirFqaJ3VbczLbfsvVifqfD",
#"pub_key": "BDS77k8XrjxXU8t65wLgVsM5LAWsun7UB3GQJk5Ei13198jPESdDL"
#}
#我這條測試鏈的公鑰前綴是BDS
#下一步我們注冊賬戶
register_account "test.witness" BDS77k8XrjxXU8t65wLgVsM5LAWsun7UB3GQJk5Ei13198jPESdDL BDS77k8XrjxXU8t65wLgVsM5LAWsun7UB3GQJk5Ei13198jPESdDL bdsowner bdsowner 100 true
#隨后需要將test.witness這個賬戶導(dǎo)入
import_key "test.witness1" 5JA6GtE9QtbziadKTGqL3u47w7qCqirFqaJ3VbczLbfsvVifqfD
#我們需要給這個賬戶足夠的錢以便于這個賬戶能支付升級終身會員的手續(xù)費 (成為見證人的先決條件就是這個賬戶必須是終身會員)
transfer bdsowner "test.witness" 10000 BDS "" true
#升級終身會員
upgrade_account "test.witness" true true
#下一步是創(chuàng)建見證人 倒數(shù)第二個參數(shù)為 描述,請注意盡量不要使用中文,有可能出現(xiàn)解析問題
create_witness "test.witness" "http://www.alpha" true
當(dāng)上述操作完成后我們就能看見返回值了
{
"ref_block_num": 34751,
"ref_block_prefix": 3460952188,
"expiration": "2018-09-18T02:19:30",
"operations": [[
20,{
"fee": {
"amount": 500000000,
"asset_id": "1.3.0"
},
"witness_account": "1.2.23",
"url": "http://www.alpha",
"block_signing_key": "BDS7kADRE2Czw3XNG7nvpb7ZHU6rSRBdF3NS22QTQgWuHS1yV2M4a" # 這個公鑰是區(qū)塊鏈為這個見證人創(chuàng)建的隨機(jī)的一個公鑰,如果我們不希望使用這個公鑰,我們需要調(diào)用命令替換掉這個公鑰
}
]
],
"extensions": [],
"signatures": [
"1f3a3b61ca31797db37221207c3be3b28863d6de2114205df5e98771cc4072213130f3b6ae8e7e0807d860f76613bacd93a3b935f138963c1d793be5ba75686db7"
]
}
這時我們對這個公鑰并不滿意
# 更換見證人 所留網(wǎng)址或備注 簽名公鑰
update_witness "test.witness" "" BDS77k8XrjxXU8t65wLgVsM5LAWsun7UB3GQJk5Ei13198jPESdDL true
然后公鑰就會變成咱們創(chuàng)建賬戶時候的公鑰了
見證人的創(chuàng)建到這一步已經(jīng)全部做完了,下一步我們需要增加活躍見證人數(shù)量
# 構(gòu)建交易
begin_builder_transaction
# 這一步命令行會返回一個數(shù)字,接下來我們需要一直使用這個數(shù)字
在這里先中斷一下,因為我需要提前講解一下我們接下來要傳的參數(shù)的結(jié)構(gòu)
# 我們會把這個json數(shù)組作為參數(shù)傳入命令行中
[6, {
"fee": {
"amount": 0,
"asset_id": "1.3.0"
},# 這個字段可以直接傳 成死的 因為接下來我們會通過其他方式計算
"account": "1.2.6", # 投票的賬戶id 可以在之前通過 命令查到 必須提前導(dǎo)入賬戶私鑰
"new_options": {
"memo_key": "BDS7ANxNXLZG9eYFqsBkLvyJdj7b8VjZFq6tb52ucpvtj2gmJ35fT", # 區(qū)塊鏈給memo加密的公鑰
"voting_account": "1.2.5", # 代理投票賬戶 1.2.5 代表著自己
"num_witness": 12, # 希望存在的見證人數(shù)量 如果希望這個區(qū)塊鏈有12個見證人的話,需要填寫12 不能大于投票中見證人的數(shù)量
"num_committee": 12, # 希望存在的理事會成員數(shù)量 必須和自己的投票的理事會成員數(shù)量一致
"votes": ["1:1"],# 這個里面的"1:1" 可以有命令行查出
"extensions": []
},
"extensions": {}
}]
修改投票
# 首先需要查出希望投給哪些見證人 在這里我就只舉一個栗子
get_witness test.witness
返回值說明
{
"id": "1.6.12", # 見證人id
"witness_account": "1.2.19", # 見證人賬戶id
"last_aslot": 0,
"signing_key": "BDS77k8XrjxXU8t65wLgVsM5LAWsun7UB3GQJk5Ei13198jPESdDL",
"vote_id": "1:22", # 投票id
"total_votes": 0,
"url": "http://www.alpha",
"total_missed": 0,
"last_confirmed_block_num": 0
}
# 因為測試鏈原本有11個見證人 在這里我就設(shè)置12個了 其余見證人的投票id均已通過上述命令查出來過
add_operation_to_builder_transaction 0 [6,{"fee":{"amount":0,"asset_id":"1.3.0"},"account":"1.2.6","new_options":{"memo_key":"BDS7ANxNXLZG9eYFqsBkLvyJdj7b8VjZFq6tb52ucpvtj2gmJ35fT","voting_account":"1.2.5","num_witness":12,"num_committee":0,"votes":["1:0","1:1","1:2","1:3","1:4","1:5","1:6","1:7","1:8","1:9","1:10","1:22"],"extensions":[]},"extensions":{}}]
# 給這筆交易設(shè)置手續(xù)費
set_fees_on_builder_transaction 0 BDS
# 給這筆交易做簽名
sign_builder_transaction 0 true
# 把這筆交易移除
remove_builder_transaction 0
這一步需要注意,區(qū)塊鏈每一個周期都會做一次比較,會取出前一定數(shù)量的見證人作為活躍見證人,只有活躍見證人才擁有給區(qū)塊簽名的權(quán)利,所以在自有測試鏈,我們投票的賬戶必須是有錢的賬戶
等到下一個投票周期,我們就會發(fā)現(xiàn),這個見證人已經(jīng)成為活躍見證人了
我們最后需要做的事就是將這個見證人的簽名私鑰配置到見證節(jié)點上
修改見證節(jié)點的config.ini
在里面增加兩行
witness-id = "1.6.12"
private-key = ["BDS77k8XrjxXU8t65wLgVsM5LAWsun7UB3GQJk5Ei13198jPESdDL","5JA6GtE9QtbziadKTGqL3u47w7qCqirFqaJ3VbczLbfsvVifqfD"]
隨后在下一個事物周期我們就能看到 見證人 test.witness 產(chǎn)生區(qū)塊了