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的特性,针对每个特性都请提一个问题:如何做到的?自己试着回答一下。