STEEM/HIVE 账户多签研究
从O哥的文章了解到,STEEM/HIVE存在多签的功能。
啥是多签呢?比如我一个操作,需要同时多个KEY签名才能签署,这样哪怕我自己的私钥泄露了,账户的钱也不会被盗。
怎么设置多签呢?来研究一下。
首先需要Account_update一下,我下面的操作是授权给我的两个小号sellcard和fishaa,在active里面加上这两个账号的公钥。
sellcard:STM6kFLtnuXQ5W7S2BTwxCQbzr9FhThXi2XXjn5b5cUNtgM1xnnBg
fishaa:STM6NtHNLWqbnEMiKBcYzQvaXMMcQFwDE1i67TVF7HbvFMwLCgDcc
from beem.steem import Steem
from beembase import operations
from beem.transactionbuilder import TransactionBuilder
from beembase.transactions import Signed_Transaction
from beem.account import Account
nodes = 'https://cn.steems.top'#节点
player="maiyude"
key="5Hq7xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"#我的activekey
s = Steem(keys=[key], node=nodes)
account = Account(player, steem_instance=s)
who={'weight_threshold': 2, 'account_auths': [], 'key_auths': [
['STM7rBbE4JfxsXyvpCGXGPPh7GeDftbCv4keE41ByiBg9ie3evk57', 1],#maiyude,权重1
['STM6kFLtnuXQ5W7S2BTwxCQbzr9FhThXi2XXjn5b5cUNtgM1xnnBg', 1], #sellcard,权重1
['STM6NtHNLWqbnEMiKBcYzQvaXMMcQFwDE1i67TVF7HbvFMwLCgDcc', 1]#fishaa,权重1
]}
op = operations.Account_update(
**{
"account": account["name"],
"json_metadata": account["json_metadata"],
"active": who,
"memo_key": account["memo_key"]
})
tx = TransactionBuilder(steem_instance=s)
tx.appendOps(op)
# 把签名添加并签名
tx.appendSigner(player, "active")
tx.sign()
#广播
tx.broadcast()
{'weight_threshold': 2, 'account_auths': [], 'key_auths': [
['STM7rBbE4JfxsXyvpCGXGPPh7GeDftbCv4keE41ByiBg9ie3evk57', 2],#maiyude,权重1
['STM6kFLtnuXQ5W7S2BTwxCQbzr9FhThXi2XXjn5b5cUNtgM1xnnBg', 1], #sellcard,权重1
['STM6NtHNLWqbnEMiKBcYzQvaXMMcQFwDE1i67TVF7HbvFMwLCgDcc', 1]#fishaa,权重1
]}
这里的weight_threshold是设置需要多大的权重才能操作,我设置为2。
我同时授权给了3个账户,每个账户权重设置为1,也就是需要2/3账户同时签名才能操作。
看看授权有没成功:
https://steemd.com/@maiyude
可以看到3个KEY已经好好的加上去了
好了,现在授权成功了。测试一下。
首先单用sellcard的私钥签名,试试,毫不意外的失败了。
再次使用sellcard加上fishaa两把私钥签名试试,以一个转账操作为例:
from beem.steem import Steem
from beembase import operations
from beem.transactionbuilder import TransactionBuilder
from beembase.transactions import Signed_Transaction
op = operations.Transfer(**{
"from": "maiyude",
"to": "sellcard",
"amount":"1.001 STEEM",
"memo":"test"
})
nodes = 'https://cn.steems.top'#节点
player2="sellcard"
key2="5J15L18xxxxxxxxxxxxxxxxxxxxxxxxxxxxf"#sellcard的KEY
player3="fishaa"
key3="5KTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxRQ"#fishaa的KEY
s = Steem(keys=[key2,key3], node=nodes)
tx = TransactionBuilder(steem_instance=s)
tx.appendOps(op)
#把签名添加
tx.appendSigner(player2, "active")
tx.appendSigner(player3, "active")
tx.sign()
#广播
tx.broadcast()
成功广播了出去:
https://steemd.com/tx/6430390a1ae5a0c5dbca4f689073dfa29e8fe508
可以看到下面是有两个签名的,多签成功。
这个功能开发得不错,对应现实中的是公款需要多个股东同时签名才能转帐!
改天找找steemjs版有没有这功能!
这功能好安心!支持鱼哥👏5⃣!shop
你好鸭,maiyude!

@annepink赠送1枚SHOP币给你!
目前你总共有: 1枚SHOP币
查看或者交易
无聊吗?跟我猜拳吧! **石头,剪刀,布~**SHOP币请到 steem-engine.com.这个比较有实用场景
话说,posting的话,里面的threshold比重有什么用处?
一样的,必须我设置threshold是3。
那么就需要几个签名加起来threshold大于等于3才能成功操作。
很厉害啊,这个得弄一下
啪啪啪啪