比特股区块链上希望新增一个见证人的时候我们需要操作一系列的命令。当这个人成为最新见证人后我们还需要在区块链上进行相关操作,以使这个见证人可以给区块进行签名。
我们在之前的文章中已经介绍过cli_wallet的大致使用情况了。下面会介绍如何将一个新注册的账户升级成为见证人
#首先 先解锁钱包 相关流程已经介绍过了 这里就不多说了
#先获得一个私钥
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这个账户导入
import_key "test.witness1" 5JA6GtE9QtbziadKTGqL3u47w7qCqirFqaJ3VbczLbfsvVifqfD
#我们需要给这个账户足够的钱以便于这个账户能支付升级终身会员的手续费 (成为见证人的先决条件就是这个账户必须是终身会员)
transfer bdsowner "test.witness" 10000 BDS "" true
#升级终身会员
upgrade_account "test.witness" true true
#下一步是创建见证人 倒数第二个参数为 描述,请注意尽量不要使用中文,有可能出现解析问题
create_witness "test.witness" "http://www.alpha" true
当上述操作完成后我们就能看见返回值了
{
"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" # 这个公钥是区块链为这个见证人创建的随机的一个公钥,如果我们不希望使用这个公钥,我们需要调用命令替换掉这个公钥
}
]
],
"extensions": [],
"signatures": [
"1f3a3b61ca31797db37221207c3be3b28863d6de2114205df5e98771cc4072213130f3b6ae8e7e0807d860f76613bacd93a3b935f138963c1d793be5ba75686db7"
]
}
这时我们对这个公钥并不满意
# 更换见证人 所留网址或备注 签名公钥
update_witness "test.witness" "" BDS77k8XrjxXU8t65wLgVsM5LAWsun7UB3GQJk5Ei13198jPESdDL true
然后公钥就会变成咱们创建账户时候的公钥了
见证人的创建到这一步已经全部做完了,下一步我们需要增加活跃见证人数量
# 构建交易
begin_builder_transaction
# 这一步命令行会返回一个数字,接下来我们需要一直使用这个数字
在这里先中断一下,因为我需要提前讲解一下我们接下来要传的参数的结构
# 我们会把这个json数组作为参数传入命令行中
[6, {
"fee": {
"amount": 0,
"asset_id": "1.3.0"
},# 这个字段可以直接传 成死的 因为接下来我们会通过其他方式计算
"account": "1.2.6", # 投票的账户id 可以在之前通过 命令查到 必须提前导入账户私钥
"new_options": {
"memo_key": "BDS7ANxNXLZG9eYFqsBkLvyJdj7b8VjZFq6tb52ucpvtj2gmJ35fT", # 区块链给memo加密的公钥
"voting_account": "1.2.5", # 代理投票账户 1.2.5 代表着自己
"num_witness": 12, # 希望存在的见证人数量 如果希望这个区块链有12个见证人的话,需要填写12 不能大于投票中见证人的数量
"num_committee": 12, # 希望存在的理事会成员数量 必须和自己的投票的理事会成员数量一致
"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个见证人 在这里我就设置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":{}}]
# 给这笔交易设置手续费
set_fees_on_builder_transaction 0 BDS
# 给这笔交易做签名
sign_builder_transaction 0 true
# 把这笔交易移除
remove_builder_transaction 0
这一步需要注意,区块链每一个周期都会做一次比较,会取出前一定数量的见证人作为活跃见证人,只有活跃见证人才拥有给区块签名的权利,所以在自有测试链,我们投票的账户必须是有钱的账户
等到下一个投票周期,我们就会发现,这个见证人已经成为活跃见证人了
我们最后需要做的事就是将这个见证人的签名私钥配置到见证节点上
修改见证节点的config.ini
在里面增加两行
witness-id = "1.6.12"
private-key = ["BDS77k8XrjxXU8t65wLgVsM5LAWsun7UB3GQJk5Ei13198jPESdDL","5JA6GtE9QtbziadKTGqL3u47w7qCqirFqaJ3VbczLbfsvVifqfD"]
随后在下一个事物周期我们就能看到 见证人 test.witness 产生区块了
网友评论