美文网首页区块链技术与金融区块链研习社
【一五一十说区块链】把宪法写到区块链上

【一五一十说区块链】把宪法写到区块链上

作者: 荆凯_EOS42 | 来源:发表于2018-05-17 21:58 被阅读33次

    前几天看EOS的源代码,发现thomas cox提交了一个pull request, 其中包含了宪法草案和bp准则两个治理文件。今天突然发现已经合并至主分支,这就意味着,在即将上线之前,EOS宪法已经大致确定,不会有太多的变更了。

    今天的文章就来谈一谈这部分内容。

    谈项目,看产品,我是荆凯,每天15:10,一五一十说区块链,与你相约。

    image

    在主分支根目录下,新增了一个governance文件夹,其中有两个文件,分别是:

    • bp_agreement.md, 定义了区块生产者需要遵守的准则;

    • constitution.md, 定义了EOS的区块链宪法规则。

    image

    这篇文章,我们来了解下这一变动。

    1. EOS宪法规则

    在constituion.md 文件中,thomas cox列出了十七条宪法条款,文本内容较多,就不在此一一贴出了。之前币乎的作者KK写了一篇文章对宪法规则进行解读和分组,可以参看,能够更清楚的明白 Thomas Cox的设计原则。

    图片来自 KK的文章: [进击的EOS]这么分类,EOS宪法不再让你抓狂

    image

    2. EOS的BP应该遵循什么规范?

    在bp_agreement.md这一文件中,thomas cox列出了十五条准则,作为出块节点,必须遵守的。IMEOS 5月16日发布了一篇文章介绍这十五条准则,可以阅读。

    https://mp.weixin.qq.com/s/3K4_bOFyUQPPOYSycFHGtg

    这十五条准则,主要分为这几部分(根据imeos的翻译整理):

    关于出块

    在相同高度或者相同的区块间隔内,只能生产或者签署一个区块(解读: 避免出块节点作伪)。

    只将良性交易放到区块中;

    并且,要删除区块池中的恶意交易,并公布原因。

    将交易写入区块的时候,出块节点不能够修改顺序,必须按照先进先出或者其他公开告知的方式来进行。不可以将信息强行插队。

    关于仲裁

    需要服从仲裁员的全部有效的命令,并且,只有得到有效指令授权之后,才可以冻结账户。(如果出块节点恶意操作,则会被投票剔除掉,原先的冻结的账户会解冻。)

    关于治理和技术

    提供不少于四个运行完整节点的公开端点;

    不可以删除诸如投票、制裁等跟治理有关的事务。

    3. 宪法及规则,如何与指令(action)绑定?

    截至目前,还没有相关的代码列出来如何将宪法跟相应的指令操作绑定,不过回顾白皮书的内容,提到:

    “每一笔在网络中广播的事务,其签名信息中必须包含宪法的哈希值,因此明确的将签名者绑定至合约。”

    可以猜测大致会是如下的方式:

    • 将governance之中的文本,进行hash化处理,形成hash字符串;

    • 在系统合约之中,约定每一笔指令,都需要附加上这一串hash字符串;

    • 出块节点审核每一笔交易时候,会对其中的治理相关的字符串进行检查,如果不符合系统的规定,则剔除这一笔交易;

    • 对于成功写入到区块之中的交易或指令,可以根据相关联的hash字符串的值,对比公开的文本的hash值。主要是用于出现冲突时候,进行仲裁和评价。

    4. 宪法如何修正?

    在白皮书之中,定义了变更宪法规则所需要经过的流程,来自之前我翻译的白皮书第二版中的内容(https://forums.eosgo.io/discussion/694/eos-io-%E6%8A%80%E6%9C%AF%E7%99%BD%E7%9A%AE%E4%B9%A6-%E7%AC%AC%E4%BA%8C%E7%89%88%E4%B8%AD%E6%96%87%E7%89%88#latest):

    区块生产者提出变更宪法的动议,获得出块者中 15/21 的投票通过。
    区块生产者对新 宪法的赞成态度,需要持续30天。
    所有的用户都需要表示接受新的宪法,作为未来的交易能够处理的条件。
    区块生产者采纳对源代码的变更以反应宪法的变化,并用新宪法的哈希值将变更提交到区块链上.
    区块生产者对新代码的赞成态度,需要维持持续30天.
    代码的修改7天之后生效, 源代码通过后,给非出块的全节点一周的时间进行更新。
    所有未升级代码的全节点,会自动关闭。

    根据EOS.IO 软件的默认配置,更新区块链增加新特性的过程往往耗时2~3个月,而只需要进行非关键问题的修复却不需要修改宪法的更新,需要1到2个月时间。

    现在代码之中还无法见到这一部分如何实现,后续会跟进更新。

    5. 番外篇:投票选举出块节点的李嘉图合约

    https://github.com/EOSIO/eos/blob/master/contracts/eosio.system/eosio.system.voteproducer-rc.md

    在主分支上,新增了投票的李嘉图合约。这一合约在每次调用voteproducer命令的时候,都会被写到指令之中,记录到区块链上。

    这部分合约规定了:

    • 投票意图:为30个节点投票,投票权重等于所抵押在cpu和带宽资源上的代币总和;

    • 如果是受人委托而投票的,则投票人必须得到了授权;

    • 投票人承诺,不会接受贿赂而投票,不然,愿意承担因为受贿所带来的没收代币等的惩罚;

    • 投票人承诺,使用任何系统进行自动投票,重新投票或者刷新选票,都是违背这一合约的;允许这类系统代表我或者代表其他人来投票,也是违反合约的。

    通过李嘉图合约,为每一笔投票附加上了人类可读的意图,这样子,如果一旦违反了这一合约,就只能够接受惩罚了。

    所以,接受贿赂,是有可能导致代币被没收的!

    相关文章

      网友评论

        本文标题:【一五一十说区块链】把宪法写到区块链上

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