🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
2018年4月6日,BM发布了EOSIO的全功能体验版Dawn 3.0。在发布公告[*EOSIO Dawn 3.0 Now Available*](https://medium.com/eosio/eosio-dawn-3-0-now-available-49a3b99242d7)中BM提到Dawn 3.0中甚至实现了一些白皮书中没有提及的功能,但是却可以让这个平台更高效、更灵活、更便于再次开发。究竟是如何做到更“高效、灵活、便于开发”的呢?只有Hacking一下才能一探究竟。 ps. 小强同学向我要一些区块链学习的资料, 网上资料太多,但作为程序员,看代码最直接有效。 希望更多的人加入我们一起Hacking(微信:muhaoying) 我们首先列举一下Dawn 3.0发布公告中的提到的一些特性,以便后续剖析代码时可以前后照应,更有导向性——**知其然,然后知其所以然**。 ### 1 可扩展性 可扩展性的目标是通过使用平行计算来扩大吞吐量,而不是硬分叉。 #### 1.1跨链通信Inter-Blockchain communication——可扩展性的终极武器。 其核心在于“轻客户端”的实现。 首先,该“客户端”要轻,能验证交易的有效性,而不需要处理整个区块链的信息。 其次,区块链需要验证该客户端的有效性。而且,如何验证“轻客户端有效性”的必须体现在最初的协议定义中。 #### 1.2 稀疏头部验证Sparse Header Verification——拜占庭容错稀疏头部验证 轻客户端只需要验证两类区块的头部。 第一类是当活跃生产节点集合发生变化时所产生的节点,第二类是包含了相关跨链信息的区块的头部。 #### 1.3 上下文无关Action——Context Free Actions 由于上下文无关的Action不依赖于区块链的状态,所以可以极大限度的利用并行计算的能力。它是跨链通信中的关键点之一。 #### 1.4 作为Event的上下文无关的inline Action——Context Free Inline Actions Inline Action是指由合约代码产生的并且作为交易的一部分被执行的Action。而上下文无关的Inline Action又可以被并行执行,并且手续费更低。 #### 1.5 交易压缩技术 交易数据压缩之后,处理效率、存储效率会更快,并且手续费会更低。 #### 1.6 解释器&实时编译 Dawn 2.0使用了 [Just-in-Time (JIT) ](https://github.com/WebAssembly/wasm-jit-prototype)编译器。Dawn 3.0 增加了[Binaryen WebAssemb](https://github.com/WebAssembly/binaryen)ly解释器,并且作为默认配置。也就是说,默认使用解释器,且可以切换至编译器。 #### 1.7 资源度量速率限制——Resource Metering Rate Limiting Dawn 3.0 采用复合计量方式,用户按照客观指令数量来付费,而区块生产者也可以设置合约执行主观时间限制。一方面可以防止客观付费机制被滥用,另一方面,一个blcok可以包含更多指令的交易,之前一个交易必须在1ms之内执行完,现在可以放宽到100ms #### 1.8 提速至500毫秒产出一个块,并实现了BFT DPOS 跨链通讯的情况下, 基于EOSIO的两个链之间的握手通信响应小于3秒,EOSIO链和以太坊链通信响应约需要9分钟,而与比特币链这需要超过3小时。(结合1.1,1.2,1.3思考) 但DFT DPOS作为非硬分叉优化功能,并未发布在Dawn 3.0中。它会出现在6月份即将发布的EOSIO 1.0中 #### 1.9 BIOS 架构——BIOS Architecture BIOS相当于EOSIO的固件,实现EOSIO区块链的权限系统,包括创建账户、发布合约、强制资源分配等功能。意味着这些功能无法更新(只能靠硬分叉)。 而实现DPOS,以及为实现DPOS而必须的代币、投票、权益分配等功能都在基于Web Assembly的系统合约中实现。意味着这些功能可以更新(不要分叉)。 ### 2 安全性 被黑客攻击的风险、硬件失效的风险、硬件丢失的风险、密码丢失的风险。 #### 2.1交易的安全延迟——Security Delayed Transactions 用户可以自主设置交易的延迟长度,在延迟期间,可以通过更高权限来取消延迟。 #### 2.2 丢失密码找回 每个账户都有两种权限:Active 和 Owner。 当Active的密码丢失时,Owner权限可以重置Active权限;而当Owner权限连续30天没有任何动作时,Active权限可以请求重置Owner权限。(完备?) #### 2.3 交易提议系统——Transaction Proposal System 在交易提议系统中,用户可以提议一个交易,其他参与方来批准。在提议之后及收到足够的批准之前,用户可以把交易撤回。 #### 2.4 对浮点运算的支持 #### 2.5 对C++ 标准模版库的支持 #### 2.6 定时交易 #### 2.7 作用域自动检测——Automatic Scope Detection 在Dawn3.0 中,生产节点有责任来检查交易对某个数据作用域是否有访问权限。而不是把这项任务交给用户、开发者或者其他节点。 #### 2.8 多重索引的数据库API ### 3 性能 #### 3.1 最差1000TPS #### 3.2 平均3000TPS #### 3.3 最优8000TPS #### 3.4 无限TPS——共享区块生产者的链越多,tps可达数百万。 以上为Dawn 3.0的特性,针对每个特性都请提一个问题:如何做到的?自己试着回答一下。