主网启动进展
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团队的文章:
How do we propose / approve / execute actions after launch without eosio?
主网启动后,没有eosio我们如何发起/批准/执行指令?
Recently we've been testing different approaches to deploy, validate and stress a chain,but little attention was paid to the last steps, how to give up central control, and how to continue administration without central control.
The Main Steps of Launching are these:
最近我们用了多种多样的方式进行部署,验证区块链,进行压力测试,但是却很少关注最后一步,即,如何将中心化的控制权交出,如何在没有中心化控制的情况下,继续进行管理。
启动的主要步骤如下:
-
Run Bios node with fresh genesis and eosio key
-
Deploy BIOS contract with initial producers
-
Create system accounts
-
Deploy eosio.token and eosio.msig contracts
-
Create and issue tokens
-
Deploy system contract and add privileges for eosio.msig
-
Provide distribution RC20 tokens
-
Resign eosio
-
使用最新的 genesis 文件和 eosio 密钥运行Bios 节点
-
初始的节点会部署BIOS 合约
-
创建系统账号
-
部署系统合约 eosio.token, eosio.msig
-
创建和发行代币
-
部署系统合约,为 eosio.msig 增加权限
-
分发代币
-
重置 eosio
Resigning eosio means changing rights for account eosio and all other system accounts.
重置 eosio 意味着修改了账户eosio以及所有其他系统账户的权限。
That means that for user eosio, we set permission to eosio.prods@active . This is a system account with a list of active producers. You can check it with
/cleos.sh get account eosio.prods
具体而言,我们把 eosio的权限设定给 eosio.prods@active. 这是一个系统账号,由一组活跃的节点组成,可以用如下的命令查看:
/cleos.sh get account eosio.prods
For all system accounts (eosio.bpay, eosio.msig, eosio.names, eosio.ram, eosio.ramfee, eosio.saving, eosio.stake, eosio.token, eosio.vpay) set permission active and owner permission to account eosio.
把所有系统账户 (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
After resignation, any changes, transfers, and contract updates can be done by community approval.
重置之后,所有的更改,转账和合约更新,都可以在社区批准之后完成。
How to make a proposal for action without eosio
不用 eosio,如何创建提议指令
Lets do this with an example transaction, proposing to send a tranfer to user “someuser”.
我们来看个转账的例子,提议向用户"someuser"转账。
To make the proposal we will use cleos and multisig propose command.
我们会用到 cleos 程序和 multisig 的propose 命令来创建提议。
This command has these parameters:
有如下参数
proposal_name TEXT proposal name (string) (required)
requested_permissions TEXT The JSON string or filename defining requested permissions (required)
rx_permissions TEXT he JSON string or filename defining transaction permissions (required)
contract TEXT contract to wich deferred transaction should be delivered (required)
action TEXT action of deferred transaction (required)
data TEXT The JSON string or filename defining the action to propose (required)
proposer TEXT Account proposing the transaction
proposal_expiration Proposal expiration interval in hours
proposal_name TEXT 提议名称 (字符串类型) (必填)
requested_permissions TEXT 定义了请求权限的JSON 字符串或文件名(必填)
rx_permissions TEXT 定义了转账权限的JSON字符串或者文件名(必填)
contract TEXT 延迟交易所用到的智能合约 (必填)
action TEXT 延迟交易所用的指令 (必填)
data TEXT 定义指令所需要处理内容的 JSON 字符串或者文件名 (required)
proposer TEXT 发起提议的账户
proposal_expiration 提议的过期时长,单位是小时
Since it will be transfer from eosio we need to include all active producers in requested_permissions. To do this lets create simple bash script which will create a list automatically from
需要从账户 eosio 转账,因此我们需要把所有的活跃出块节点都列在 requested_permissions 之中。创建一个简单的bash 脚本,自动创建列表,如下
./cleos.sh get account eosio.prods –j
(Note: We were NOT able to simply use eosio.prods with requested_permissions. We had to generate the list with get account.)
注意: 我们需要先用 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
Next, we will make a proposal for transfer (it can be any action to any contract):
接下来,我们发起转账申请的提议(也可以是任何合约的任何指令)
CONTRACT="eosio.token"
ACTION="transfer"
DATA='{"from": "eosio", "to": "someuser", "quantity": "123.0000 EOS", "memo": "compensation"}'
The full command will be:
完整命令如下
./cleos.sh multisig propose "$proposalName" "$requestedPermissions" "$trxPermissions" $CONTRACT $ACTION "$DATA" $proposer $EXPIRATION_IN_H -p $proposer
The full example script which does all of the above is found here: https://github.com/CryptoLions/EOS-Boot-Steps-dawn4/blob/master/16_1_MSIG_TRANSFER_PROPOSE.sh
完整的脚本可以查看如下链接 https://github.com/CryptoLions/EOS-Boot-Steps-dawn4/blob/master/16_1_MSIG_TRANSFER_PROPOSE.sh
Approval
批准
After a proposal is made, block producers from list need to approve this transaction. The number of approvals required is determined by the threshold.
创建了提议之后,列表中的出块节点需要对交易审批。需要经过多少个节点批准,这一数量设定由 threshold 决定。
The approval command is:
批准的命令如下:
./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
Execution 执行
After sufficient approvals are made, the transfer can be executed:
得到足够数量的节点批准了提议之后,会执行转账:
./cleos.sh multisig exec $proposer "$proposalName" -p $proposer
例子: https://github.com/CryptoLions/EOS-Boot-Steps-dawn4/blob/master/16_3_MSIG_TRANSFER_EXEC.sh
List Proposals and approvals
列出来所有的提议和已审批通过的提议
You can list all proposals:
可以用如下命令列出所有的申请提议
./cleos.sh get table eosio.msig $ACCOUNT proposal
And all approvals:
用如下命令列出所有审批通过的提议:
./cleos.sh get table eosio.msig $ACCOUNT approvals
We hope this manual was useful for you.
我们希望这一文章对你有用。
All our Bootsteps examples can be found here: https://github.com/CryptoLions/EOS-Boot-Steps-dawn4
我们所拥有的启动步骤的示例,都可以参见: https://github.com/CryptoLions/EOS-Boot-Steps-dawn4
Lastly, we welcome everyone to Jungle testnetwok, to learn and test together: http://jungle.cryptolions.io/
欢迎各位访问 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
网友评论