本文为 dfuse 与 EOS Studio 合作内容,原文由 EOS Studio 发布
我们将在近一段时间内陆续推出多期的系列教程,深度详解一些开源的 EOS 智能合约项目。我们将仔细挑选那些内容优质、设计精心、并可以成功构建的合约示例,其中的一些已经在 EOS 主网上广泛使用。通过本次系列教程,我们希望能为 EOSIO 上的 dApp 开发者提供更多的学习资料,并帮助他们了解更多智能合约的设计模式和应用场景。
我们要谈论的第一个智能合约是由 EOS Canada(dfuse 的开发团队)创建的 eosio.forum 。通过将提案及其相关投票存储在 EOS 链上的 RAM 资源中,eosio.forum 可以用来支持 EOS 的公投系统 EOS Referendum system 。目前,eosio.forum 已经被 EOS 主网作为了系统合约的一部分,专门用于实现一些定期的链上治理活动。
本期教程分为三部分,我们将分别介绍 eosio.forum 的动机和开发过程(第1部分),如何使用它创建提案和投票(第2部分),并整体详解他们的源代码(第3部分)。
「好人对于公众事务冷漠的代价就是,被邪恶的人奴役」– 柏拉图 (古希腊哲学家)
EOSIO 是一个崇尚自治的区块链公链,它鼓励其持币者通过提案和投票来分享自己的声音,来作为达成共识的一种手段。
Block.one 曾提议社区创建一个链上的论坛,用来将各种消息发布上去,并验证社区用户和持币者对这些消息的意见和看法。EOS Canada 则进一步意识到,如果我们能用这个消息传递系统来批准某项提案,一个全民公投系统 (EOS Referendum system) 的基础架构就有了。它可以用于对社区进行民意测验,调查有关某个主题或问题的公众意见。
作为高度自治的区块链,持币者可以使用其抵押的EOS 代币对提案进行投票,共同决定那些可能会影响到 EOS 底层的系统治理规则,架构级的李嘉图合约 (Ricardian Contracts) ,或 EOSIO 代码库变更等相关问题。有些简单的提议或投票,需要在不更改任何系统合约或底层代码的情况下,收集社区在具体细节方面的反馈。而一个提案,如果通过了公投,则应遵照社区持币者的共同决议,在 EOS 主网上生成一个执行层面的改动。
公投系统对于确保 EOSIO 区块链在保持去中心化的同时不断自我发展至关重要。 EOSIO 代码库,底层的系统治理规则,治理基金的使用情况等都需要在持币者们提出共识的基础上,以公投的方式在提案、投票和条约议定书中进行修改。该原则被写入在 EOS 用户协议中 EOS User Agreement, EUA :
Article IV Governing Documents —
所有对 EUA 和系统治理规则进行的修改都在 eosio.prods 中执行。这意味着,所有公投提案的修订草案都需要预先通过 eosio.forum 合约中的 eosio.prods 来进行拟定和发布。
Article VII Network Funds —
如需进行任何关于治理基金帐户中代币状态的更改,或进行任何关于可直接或间接控制治理基金账户的现存代码的改动,配置、执行方面的修改之前,都应预先通过 eosio.forum 合约中的 eosio.prods 来对改动进行具体描述,并拟定和发布提案。
EOS Canada 主导了 EOS 主网提议的公投系统的代码编写工作。他们采用了 Block.one 的示例合约,并对其进行重构以满足社区的需求。这种需求是通过与其他参与团队长期反复讨论过后发现的。2018 年 7 月,EOS Canada 首次将 beta 版本部署到了 eosforumdapp 账户中,并运行它来进行更进一步的测试和收集一些社区反馈。后来,这个智能合约被部署到了另一个帐户 eosforumrcpp ,代表着 EOS Forum 正式上线前的预先测试版本。 EOS Canada 还将该帐户的权限修改为共享多重签名,由 EOS Canada 和其他合作的超级节点共同设立。
经过数周的测试,eosio.forum 合约代码已经蓄势待发。EOS Canada 建议将该合同部署到 eosio.forum 的系统合约帐户中,以便所有用户都意识到这是他们可以信任的官方公投合约。部署完成后,这个智能合约的控制权也将完全交由所有的 EOS 超级节点,也就是 EOS 主网本身。
EOS 社区于 2019 年 1 月通过了该提议,eosio.forum 正式成为了 EOS 主网的官方公投系统。自那之后,EOS 的持币者们已经陆续在这条合约中提交了许多关于改善 EOS 主网治理能力和促进 EOS 主网发展的提案。例如,EOS 用户协议本身就是通过 2019 年 5 月在 eosio.forum 上进行的公投中通过的。
为了鼓励 EOS 持币者积极参与投票和社区治理,一些团队都创建了属于自己的用户界面,来帮助大家更方便的查看提案并进行投票。
这些团队包括:
与此同时,相同的智能合约也被采用在其他 EOSIO 侧链中。例如,BOSCore 部署了他们自己版本的 .forum 合约以支持其公投和 WPS 提案系统 (Worker Proposal System, WPS)。他们还根据公投系统启动了 BOS 发展激励计划 (BOS Development Incentive Program) ,以激励对其生态系统的技术贡献。
eosio.forum 合约可以在许多其他场景下使用。一个有趣的例子是,EOS 社区使用 eosio.forum 创建了一个名为 Novusphere 的链上 Reddit 替代品。其中,forum 合约类似于 Novusphere 的后端服务器,而在前端还另外有 Web 版的用户界面来方便用户轻松创建或阅读帖子。您可以访问他们的网站 https://discussions.app,并将这些帖子与 eosio.forum 上的交易记录进行比较。
如果您觉得本教程有帮助,请别忘了点赞或关注我们的微信公众号黑曜石实验室 (Obsidianlabs),币乎号 EOSStudio,我们会持续更新更多的产品信息、技术文章和精彩内容。
深度解析 EOS 合约:eosio.forum
- 第一部分: EOSIO 公投系统
- 第二部分: 投票的流程解析
- 第三部分: 源代码的深度解读
非常感谢 dfuse 团队为本期教程的编写提供的诸多帮助!