美文网首页区块链研习社
【一五一十】启动主网的最后一步:社区如何获得eosio账户的控制

【一五一十】启动主网的最后一步:社区如何获得eosio账户的控制

作者: 荆凯_EOS42 | 来源:发表于2018-06-06 13:47 被阅读55次

主网启动进展

EOS 主网启动工作正在顺利进行,安全测试和软件功能测试也并行展开,来自全球的九十多个备选节点加入到测试之中,夜以继日的工作,为了主网安全顺利的上线而努力。

当前有两条测试网络并行存在,分别是EOS Bios 团队和 EOS Core(原ghost bustor)团队各自搭建的测试网络,简称B网和C网,最终采用那条测试网络,还是另外新建一条网络,还有待出块节点社群共同决定,不过,大家的目标是一致的,只承认一条主网为EOS,各团队也为这一目标而努力。

相信这几日内,主网启动应该就可以完成。关于 EOS 启动有新的进展,我也会尽快告知各位读者。

QQ图片20180515172850.jpg

主网启动必不可少的一环

当前对于快照,系统合约,系统账号等的创建和检测工作已经完成,对系统安全性和可用性的检测正在进行,不过,主网启动之前还有一点没有得到大家的注意,cryptoLions团队在steemit上面发布了一篇文章,介绍主网启动的重要一环,即,如何使用multisig库进行多签,在没有eosio的情况下,各个出块节点如何处理系统层的一些问题,比如更新合约,更新系统等问题。

eosio账户重新设定

将eosio这一账户的权限设置给一个系统账户,eosio.prods@active,这个系统账户是由活跃的出块节点来组成的;

然后,将系统账户 (eosio.bpay, eosio.msig, eosio.names, eosio.ram, eosio.ramfee, eosio.saving, eosio.stake, eosio.token, eosio.vpay) 的active 权限 和 owner 权限,设置给了eosio这一账户。

什么意思呢? 我尝试解释一下。

在这里,eosio相当于起到了一个中转的作用,出块节点比如EOS Cannon, EOS Asia,EOS Canada,CryptoLions等,他们都具有eosio.prods这个账户的active权限,一笔特殊的交易经过一定数量节点的共同签名,比如21个节点之中的15个的签名,一笔交易才能够有效;

eosio.prods对应的是eosio账户的权限,而eosio这个账户则可以控制多个系统账户,比如eosio.token等,简略来说,出块节点通过某种方式共同控制了eosio这个账户的权限,并通过eosio这个账户来实现对其他系统账户的控制权。

例子

举个例子,小明想要吃糖(发起更改系统合约的请求),得需要经过小明妈妈的批准(eosio的权限);而小明妈妈,把这个批准权授予了小明爸爸和小明奶奶(出块节点A,出块节点B)。

现在,小明妈妈出去旅游了(eosio这个账户无法直接控制),则,需要经过小明爸爸跟小明奶奶的共同同意,小明吃糖的申请才可以得到批准。

希望借助于此,能够让你有一个大概的理解。下文是翻译自 CryptoLions团队的文章:

https://steemit.com/eos/@cryptolions/the-last-launch-step-how-to-resign-rights-or-eosio-and-manage-the-change-without-them

主网启动后,没有eosio我们如何发起/批准/执行指令?

最近我们用了多种多样的方式进行部署,验证区块链,进行压力测试,但是却很少关注最后一步,即,如何将中心化的控制权交出,如何在没有中心化控制的情况下,继续进行管理。

启动的主要步骤如下:

  • 使用最新的 genesis 文件和 eosio 密钥运行Bios 节点
  • 初始的节点会部署BIOS 合约
  • 创建系统账号
  • 部署系统合约 eosio.token, eosio.msig
  • 创建和发行代币
  • 部署系统合约,为 eosio.msig 增加权限
  • 分发代币
  • 重置 eosio

重置 eosio 意味着修改了账户eosio以及所有其他系统账户的权限。

具体而言,我们把 eosio的权限设定给 eosio.prods@active. 这是一个系统账号,由一组活跃的节点组成,可以用如下的命令查看:

/cleos.sh get account eosio.prods

把所有系统账户 (eosio.bpay, eosio.msig, eosio.names, eosio.ram, eosio.ramfee, eosio.saving, eosio.stake, eosio.token, eosio.vpay) 的active 权限 和 owner 权限,设定给 eosio 账户.

Example of resign script: https://github.com/CryptoLions/EOS-Boot-Steps-dawn4/blob/master/08_RESIGN.sh

重置(resign) 脚本示例: https://github.com/CryptoLions/EOS-Boot-Steps-dawn4/blob/master/08_RESIGN.sh

重置之后,所有的更改,转账和合约更新,都可以在社区批准之后完成。

不用 eosio,如何创建提议指令

我们来看个转账的例子,提议向用户"someuser"转账。

我们会用到 cleos 程序和 multisig 的propose 命令来创建提议。

有如下参数

proposal_name TEXT                提议名称 (字符串类型) (必填)
requested_permissions TEXT  定义了请求权限的JSON 字符串或文件名(必填)
rx_permissions TEXT      定义了转账权限的JSON字符串或者文件名(必填)
contract TEXT               延迟交易所用到的智能合约 (必填)
action TEXT                延迟交易所用的指令 (必填)
data TEXT                  定义指令所需要处理内容的 JSON 字符串或者文件名 (required)
proposer TEXT           发起提议的账户
proposal_expiration         提议的过期时长,单位是小时

需要从账户 eosio 转账,因此我们需要把所有的活跃出块节点都列在 requested_permissions 之中。创建一个简单的bash 脚本,自动创建列表,如下

./cleos.sh get account eosio.prods –j

注意: 我们需要先用 get account 命令生成列表之后,才能够使用 eosio.prods。

requestedPermissions="";
#Get list active producers from eosio.prods and building requestedPermissions
PRODUCERS=$(./cleos.sh get account eosio.prods -j)

for row in $(echo "${PRODUCERS}" | jq -r '.permissions[] | @base64'); do
    _jq() {
     echo ${row} | base64 --decode | jq -r ${1}
    }

    perm_name=$(_jq '.perm_name')
    if [ "$perm_name" == "active" ]; then

        data_=$(_jq '.required_auth')
        for accs in $(echo "${data_}" | jq -r '.accounts[] | @base64'); do
                _jq() {
                echo ${accs} | base64 --decode | jq -r ${1}
            }
            account=$(_jq '.permission.actor')
            permission=$(_jq '.permission.permission')

            #bp="$account@$permission"

            # Building requestedPermissions
            requestedPermission='{"actor": "'$account'", "permission": "'$permission'"}'
            if [ "$requestedPermissions" != "" ]; then
                requestedPermissions+=", "
            fi
            requestedPermissions+="$requestedPermission"
        done
        requestedPermissions="[$requestedPermissions]"
        #echo $requestedPermissions
    fi
done

接下来,我们发起转账申请的提议(也可以是任何合约的任何指令)

CONTRACT="eosio.token"
ACTION="transfer"
DATA='{"from": "eosio", "to": "someuser", "quantity": "123.0000 EOS", "memo": "compensation"}'

完整命令如下

./cleos.sh multisig propose "$proposalName" "$requestedPermissions" "$trxPermissions" $CONTRACT $ACTION "$DATA" $proposer $EXPIRATION_IN_H -p $proposer

完整的脚本可以查看如下链接 https://github.com/CryptoLions/EOS-Boot-Steps-dawn4/blob/master/16_1_MSIG_TRANSFER_PROPOSE.sh

批准

创建了提议之后,列表中的出块节点需要对交易审批。需要经过多少个节点批准,这一数量设定由 threshold 决定。

批准的命令如下:

./cleos.sh multisig approve $proposer $proposalName "$permissions" -p $ACCOUNT

完整的代码例子见: https://github.com/CryptoLions/EOS-Boot-Steps-dawn4/blob/master/16_2_MSIG_TRANSFER_APPROVE.sh

执行

得到足够数量的节点批准了提议之后,会执行转账:

./cleos.sh multisig exec $proposer "$proposalName" -p $proposer

例子: https://github.com/CryptoLions/EOS-Boot-Steps-dawn4/blob/master/16_3_MSIG_TRANSFER_EXEC.sh

列出来所有的提议和已审批通过的提议

可以用如下命令列出所有的提议:

./cleos.sh get table eosio.msig $ACCOUNT proposal

用如下命令列出所有审批通过的提议:

./cleos.sh get table eosio.msig $ACCOUNT approvals

我们希望这一文章对你有用。

我们所有的启动步骤的示例,都可以参见: https://github.com/CryptoLions/EOS-Boot-Steps-dawn4

最后,欢迎各位访问 Jungle 测试网络,一起学习和测试:http://jungle.cryptolions.io/

更多联系方式:

http://cryptolions.io/
https://github.com/CryptoLions
https://busy.org/@cryptolions
https://steemit.com/@cryptolions
https://twitter.com/EOS_CryptoLions
https://www.youtube.com/channel/UCB7F-KO0mmZ1yVBCq0_1gtA
Jungle Testnet Monitor: http://jungle.cryptolions.io/
General CryptoLions Chat: https://t.me/block_producer_candidate
Testnet Chat: https://t.me/jungletestnet

相关文章

网友评论

    本文标题:【一五一十】启动主网的最后一步:社区如何获得eosio账户的控制

    本文链接:https://www.haomeiwen.com/subject/ihebsftx.html