EOS DApp 开发: 了解 EOS

28 Oct, 2018

本文主要讲解了与 EOS DApp 开发相关的 EOS 知识. 主要内容包含 EOS DApp 现状, EOS 共识算法, 账户系统, 资源模型以及官方对智能合约开发者的支持.

EOS DApp 开发: 了解 EOS

EOS 全称 Enterprise Operation System, 其目标是实现一个类似操作系统的支撑分布式应用程序的区块链架构. 如果按照白皮书所言, EOS 最终可以达到每秒数百万交易的量级.

EOS DApp 现状

截止 2018 年 10 月 25 日, EOS 24小时活跃用户数目为 93233 个, EOS 主网中 DApp 数量 为 129 个. 在 以太坊网络中, DApp 数量为 1043 个, 24小时活跃用户数目为 10568 个.

虽然 EOS 的 DApp 数量仅以太坊的十分之一左右, 但是 EOS 的 24小时活跃用户数目却达到了以太坊的 9 倍左右.

以太坊上线于 2015 年 7 月, EOS 主网上线于 2018 年 6 月, 虽说以太坊是 EOS 的老前辈了, 但是 EOS 的发展速度却远快于以太坊. 个人认为 EOS 发展速度更快的原因应该是 EOS 大大减少了交易的成本.

首先, EOS 相比于以太坊的交易确认时间大大减少, 从设计层面上看, EOS 每 0.5s 出块, 而以太坊为 12s; 其次, EOS 的交易确认不需要手续费, 而以太坊每笔交易都需要提供手续费, 如果希望更快的完成还需要付出更多的手续费.

即使 EOS DApp 的发展正向着较好的方向前进, 但是和目前的中心化应用相比, 不论是以太坊还是 EOS 都还处在非常初级的阶段.

EOS DApp 发展至今, 仍然有很大的发展潜力, 之所以没能普及开来, 个人认为很大程度上是因为对于普通用户而言, 进入 EOS 的门槛稍高, 这些门槛包括账号的创建, 钱包的使用以及账号的保护.

此外的一个重要的原因是至今还没有出现现象级的 DApp, 现在比较火热的 DApp 一般都归属于博彩和游戏类, 因此对于一般的用户而言, 使用 DApp 而非中心化应用的好处并不难么明显, 至少和付出的成本相比, 眼前的收益并不那么高.

EOS 仍是一个年轻的区块链项目, 抛开投机的目的, EOS 的愿景是值得肯定的, 如果 EOS DApp 能够减少用户进入的成本, 那么一定会有更多的用户尝试和使用 EOS DApp. 至于如何减少用户的成本, 离不开社区的努力以及 DApp 开发者的思考. 即使 DApp 是基于区块链的应用, 但是对于一般用户而言, 其本质依旧是工具, 用户使用工具的目的是为了让生活更便利和美好, 因此 DApp 开发者的目标应该是充分利用分布式应用的优势并力争超越现有的中心化应用.

EOS 的特征

EOS 是区块链的一种, 但是与它的老前辈比特币和以太坊相比它又有着与众不同的特点呢?

极短的出块时间

对于区块链而言, 出块时间是衡量区块链性能的重要特征.

比特币需要十分钟出一个块, 以太坊最优情况下 12s 出一个块, 而 EOS 则能做到 0.5s 出一个块.

出块时间越快, 那么交易确认时间就越短, DApp 的可用性就越高.

BFT-DPOS 共识算法

说起区块链的特征就不得不提共识机制.

比特币和以太坊的共识机制都是 PoW(Proof of Work), 即你的工作量证明你消息的可靠性.

EOS 的共识机制是 BFT-DPOS(拜占庭容错-委托权益证明), 即通过你持有的资产证明你消息的可靠性.

并行执行机制

EOS 另一个出彩的地方在于并行执行机制, EOS 提供账户级别的并行, 通过并行执行, 让 EOS 拥有了更快的出块速度.

交易无手续费

相比于比特币和以太坊, EOS 的交易是免手续费的.

在比特币和以太坊中, 用户需要对每笔交易付出价格不定的手续费(越高的手续费能换来越快的订单确认时间).

而在 EOS 中, 通过设置一定的通胀率来增发 EOS Token, 并用这些增发的部分 EOS Token 来支付用户的交易手续费.

独特的账户系统

与比特币和以太坊基于地址的交易不同, EOS 的用户可以创建一个自定义用户名的 EOS 账户, 并且可以为账户创建并授予各种权限.

智能合约开发

对于 DApp 开发者而言, 相较于以太坊 DApp 的开发, EOS 的开发更加便捷, EOS 的智能合约使用 C/C++ 进行开发, 智能合约底层采用 WebAssembly JIT 虚拟机, 此外, 得益于社区的活跃, EOS 的官方库和文档支持也比以太坊更加丰富.

EOS 的技术特点

下面简单的了解一下 EOS 的技术细节.

BFT-DPOS

BFT-DPOS 可以看作是一个投票系统.

在 EOS 中, EOS 会选取得票最高的 21 个节点作为超级节点, 这些主节点负责确认和生产块.

当 21 个节点被选举出来后, 系统的确认路径就得到确定. 但是即使使用这样的机制, 确认时间依旧需要 1 分钟(每个超级节点每 0.5s 出一个块, 共出 6 个块), 因此 EOS 将 BFT(拜占庭容错) 机制引入了传统的 DPOS 中, 每当一个节点出块完成后会立即无序地广播给其他 20 个节点, 其余 20 个节点在 0.5s 内收到广播后就会给进行反馈, 只要超过 15 个节点确认了块,这个信息就不可逆了, 通过这样的方式将时间从 1min 缩短到了 0.5s.

EOS 的出块速度快, 很大程度上得益于超级节点, 因此超级节点的选举对 EOS 生态而言是一件非常重要的事.

对 EOS 有所了解的话就知道, 超级节点的竞争是很激烈的. 如果成为超级节点, 每当出块的时候就能获得 EOS Token 的奖励(这些 EOS Token 来自于增发的 EOS Token, 这便是 EOS 的奖励机制).

并行执行机制的细节

EOS 将一个区块分成了几个循环, 每个循环又分成了多个线程, 每个线程包含一个交易列表, 每个交易包含一组要传递的消息.

其中各线程可以并行执行, 同时消息中对某些账户的操作也可以并行地执行.

EOS 执行模型

此外, 对于无需更新状态的消息处理也是可以并行的,只要特定的只读消息处理程序被包含在特定的循环内的一个或多个线程中即可.

账户系统

EOS 的账户系统之前的区块链相比是狱中不同的.

在比特币中, 比特币地址就像一个物理地址或者电子邮件地址, 这是别人付给你比特币时你唯一需要提供的信息.然而一个重要的区别是,每个地址应该只用于单笔交易.

在以太坊中, 一个账户可以看成由一对公钥(账户地址)和私钥(加密过的密码)组成.

而在 EOS 中, 账户的概念被丰富了.

首先每个账户可以自定义一个独一无二的可读名称(长度为 12, 由小写字母及数字 1 - 5 组成).

其次, 每个账户都可以配置不同的权限执行不同的操作.

关于命名的权限系统即每个账户在创建时可以用 1 或 2 个密钥对设置 active 和 owner 权限, 通过这两个权限(一般只使用 active)就可以派生出其他的权限.

关于权限评估, 在白皮书中这样写道:

@alice@bob 提供了类型为 Action 的操作时,EOS 首先会检查 @alice 是否已经对 @bob.groupa.subgroup.Action 定义了权限映射. 如果没有将继续检查 @alice 是否定义了 @bob.groupa.subgroup@bob.groupa 的权限映射,最后检查是否定义了 @bob 的映射. 如果仍未找到匹配的映射,则假定的映射是权限组 @alice.active. 当找到了对应的权限映射后会使用阈值多签名检查和与命名权限相关联的权限来验证签名授权, 如果验证,则它将遍历父级权限直到 owner 权限 @alice.owner.

大致上的意思就是, EOS 会沿着权限链不断向上寻找对应的权限, 找到权限之后会使用阈值多签名机制进行验证.

所谓阈值多签名, 个人对此的理解是用户可以对一个权限绑定 N 个公钥, 如果需要使用这个权限则需要提供 N 个对应的私钥.

EOS Permission Control

除了权限控制之外, EOS 的每个账户都拥有一个私有的数据库(只能被自己的 Action 访问).

资源模型

EOS 基于 DPOS 的共识机制, 在 EOS 中, 持有 Token 的多少代表了对 EOS 资源使用能力的多少, 即如果拥有全网 10% 的 Token 就能使用 EOS 全网 10% 的资源.

在 EOS 中, 所谓的资源主要有 3 种:

  1. CPU 资源
  2. Bandwidth 资源
  3. RAM 资源

每个账户(合约) 希望执行操作就必须拥有资源(这也是目前 EOS 的门槛之一, 即使用户拥有了 EOS 账户也不一定就能进行交易等操作, 因为初始化账户时拥有的资源可能什么都做不了).

其中, RAM 资源是可以进行交易的(买卖间存在差价), 而 CPU 和 Bandwidth 资源则是通过抵押获得, 所谓抵押即冻结一定数量的 EOS 后获得一定的 CPU 和 Bandwidth 资源, 当你不需要这些资源的时候, 你可以选择返还资源并赎回 EOS.

在 EOS 白皮书中有一个概念: 接收方付费, 即服务的提供方应该承担用户使用资源的费用.

目前看来, 如果用户想要使用 DApp, 产生费用的地方主要有两个, 一是创建账号需要的资源, 二是 DApp 运行时占用的资源.

对于第二项费用由 DApp 开发者承担应该是没有什么好争议的, 就如同现在的中心化应用, 租用服务器和进行维护所需的开销都由开发者负担也是一件正常的事情, 开发者收回这些开销的方式取决于他们的赚钱策略而非强制要求用户付费.

至于第一点, 创建账户需要的费用, 目前看来, 创建一个账户(包含正常使用所需的最少 RAM, CPU 及 Bandwidth), 的花费 大概是 1 EOS(6$ - 42CNY 左右), 这是一笔说大不大说小不小的开销, 但是除了金钱的问题之外, 创建账户还有一点需要考虑的是创建 EOS 账户所需要的知识成本. 目前看来, 用户没有办法无痛地创建账户, 用户必须知道密钥对是重要的, 需要知道如何使用钱包应用, 也需要找到可靠的人帮助他完成账号的初始化.

虽然目前人人都拥有一个 EOS 账户似乎难以实现, 但是未来总会出现更好的账号创建策略, 只要账户的壁垒被破除了, 用户所需要的就是真正好用的应用.

DApp = UI + 智能合约

DApp 由用户友好的交互界面和智能合约组成.

EOS 内置 WebAssembly 虚拟机, 使用 C/C++ 开发智能合约, 并且封装了一套 API 用于智能合约的开发, 在开发者门户中提供了丰富的入门教程及文档, 对于入门 EOS 智能合约的开发非常有帮助. 同时, 随着版本迭代, EOS 的开发环境也越来越容易搭建和配置, 减少了搭建脚手架需要的时间.

除了对智能合约开发的支持, EOS 官方 还也提供了很多库来提升创建用户友好交互界面的效率.

参考资料

  1. EOS DApp 日活
  2. EOS.IO TechnicalWhitePaper
  3. EOSIO Developer Portal
  4. EOS 的并行执行机制
  5. 深入理解 EOS 的账户及其权限机制