Neo3 Preview2,加速开发创新ing

本期 Neo Live 邀请到了 NGD 协议组技术经理 卢川,向大家介绍 Neo3 Preview2 的新版本内容与性能亮点。
以下是全场活动的文字版内容实录:
距离上个版本发布,大概已有半年多。目前发布的 Preview2 相对稳定,底层的功能架构也基本确定。生态基础工具方,可以基于当前版本进行开发;个人开发者也可以基于当前版本体验 Neo3 的部分特性。
Neo3 进程

本次 Preview2 版本包含的内容,占 Neo3 总内容的 44%,当前开发进度完成 84%。

由于一些重要组件如 neofs β 版本、Oracle、新的治理机制,大部分已开发差不多,处于待集成状态,所以还未包含在本版本中,将陆续被包含在后续的版本中。基于当前的开发进度,我们预计 Neo3 会在下半年上线。

回到 Preview2 上,总共改动 228 处, VM 改动 48 处,core-64 处,编译器插件等改动 116 处,意味着 Neo3 每天都在前进。
下面我将从三个方面介绍 Preview2 的整体内容:架构重新设计、经济模型调整、开发体验提升。
架构重新设计

在架构上,Preview2 相当于重新设计的一条链。
四个方面有了较大的改进,分别是:
1. 性能稳定性
2. 稳定性
3. 安全性
4. 模块化
性能提升

Neo3-VM, 实际上是全新设计的 VM,其性能也有了较大改进。
我们引入了对象引用计数器,管理资源使用情况。这使得我们能够将之前的 6 项约束检查,减少到 4 项。并将其中最常检查项栈元素检查,从时间复杂度从 O(n) 提高到 O(1),整体执行效率提升 50%, 其中一部分常用指令提高了 16 倍。
实际上,VM 的性能提升远远比节点性能提升更难!

节点性能上面,我们优化了交易验证逻辑,缓存数据减少不必要的重复计算工作,并移除了费时的 C# Linq 语法等。
这些改进,对比 Preview1 性能提升了 4 倍。同时,当前我们还在进一步实验并行验签技术与其他改进方法(如 dBFT3.0, 新共识机制等),会进一步提升 TPS 数倍。
稳定性

在稳定性上:
1. 添加了自适应数据压缩机制,对于比较大数据传输进行自动传输,可节省其 90% 的带宽。
2. 区块同步机制引入了 ping/pong 定时同步区块高度机制,有效的提升了网络稳定性,避免了在之前网络上出现的同步卡顿现象。
3. 自 dBFT2.0 上线之后,测试网的出块稳定性比之前有了明显的改善,平均出块时间变得更加平稳。并在其基础上,添加了节点恢复机制,对于节点滞后或节点掉线,都可以自动恢复并加入到共识网络中。
安全

安全上,主要分为三块:
1. 共识算法是区块链数据一致性的最重要保证环节。来自国外的 NeoResearch 社区团队,在数学模型层面,首次证明了 dBFT2.0 的算法安全性,算法在理论层面不存在分叉风险,保证了 Neo 的 One Block One Finality (一个区块即确认)特性。

2. 从合约层面来看,合约漏洞已经是区块链上耳熟能详的名词,累计已有上亿资产因合约存在漏洞被盗。
合约安全,可以分为两类:
1. 开发者开发时候存在的漏洞,如数据溢出,方法漏洞等。
2. 潜在的合约机制问题,比如之前以太坊上面曾发生过 approve 的机制漏洞问题,导致资产丢失问题。
我们在 Neo3 上,引入了合约权限控制机制,赋予了开发者更加精细的控制力度,划分为两类:
1. Call 级别,内部合约在调用其他合约时,尤其是第三方提供的服务合约,可以对其加权限控制,限制其访问级别,如不允许修改状态,防止潜藏的第三方合约攻击漏洞等。
2. Manifest 级别,部署合约的时候,可以配置合约只允许被那些合约访问,以及访问什么方法。防止恶意用户通过其他合约绕过权限检查。
我们推荐用户在设置合约权限时,尽量严进宽出,后续涉及到权限变更时,可通过升级合约配置文件,来动态更改合约权限。

另外,我们在 VM 层面,原生的内置了不可变与可变数据类型,允许高层合约中定义常量类型,防止数据被篡改,增加了对数据安全的控制。
模块化

整体上,Neo3 的架构都是重新设计的,相比 Neo2,代码更加简洁与优化,比如 Neo3 中的交易类型只有统一的一种,而 2.x 上有 11 中类型的不同交易。
Neo3-VM 的核心代码只有 1300 行,184 个指令,但功能比 Neo2-VM 更加灵活,减轻了很多编译的工作。
另外,Neo3-VM 跟 Neo-core 是完全解耦,完全可以被集成到其他应用场景中,对于一些代码爱好者,我们非常鼓励大家可以看看 Neo3-VM 的代码,并用其他语言翻写。
同时,我们采用了模块化设计,独立出 RPC 模块,存储模块等。用户可根据需求更换存储方式,如使用 Leveldb,Rocksdb,内存等。也可以自定义模块拓展 Neo 功能。
经济模型

Neo3 上的链上治理和经济模型都有了较大的调整,当前 Preview2 版本中包含了部分经济模型调整。
合约费用调整
对于合约的存储,将只收取增量部分的费用,比如原先占据 10 个字节的长度,现在要扩大使用 13 字节的长度,此时费用只收取额外的3字节费用并附加一个字节的基础费。
整体来讲,Neo3 的收费比 Neo2.x 有了显著改善,在 Neo2.x 上部署一个合约需要花费 490 个 GAS,当前 Neo3 上只需要不到 0.04 GAS 的费用。
同时,在后续的版本中,还将进一步调整费用,使其在一个相对市场合理的收费机制。
GAS 收益调整
交易系统手续费上链之后,该部分费用将直接被烧掉,不再分给 NEO 的持有者。
相较于 2.x,NEO 持有者有两部分收益:一是可以去 claim 每个区块所释放的 GAS,另外一部分是交易的系统手续费。后者在 Neo3 中被直接烧掉,不再奖励。
开发友好性

开发友好性,体现在三个方面的改进:
Neo3-VM 提供了更加灵活的功能
1. 移除了旧的临时栈,并引入了变量槽,包含:全局变量槽,参数槽,局部变量槽,极大的减轻了编译器在解析全局变量,函数传参,局部变量的工作。
因为在之前,上述各种类型的数据,都只能通过计算栈和临时栈来操作实现,引入了槽之后,可以将对应的数据放在对应的区域上,极大减轻对数据栈的频繁操作。
2. 新增函数指针,可以用于动态回调,如迭代器的遍历,链上任务的回调处理等。
3. 添加了异常控制指令:ASSERT、ABORT,、TRY、ENDTRY 等,允许合约层面主动抛出异常,丰富合约的表达语义。

合约 API 丰富
在合约 API 上,提供了丰富的 API,并制定了 NEP11:NFT 的标准,以及增加了在合约层面对 JSON 的解析,GAS 剩余余额查询,迭代器,账户地址类型转换等。

实用功能
1. 交易超时机制,用户可以设置交易在多少个区块尚未上链则作废,减少无效等待,如交易所对用户提币的交易添加区块有效期。
2. 内部新增了合约计数器,给每个合约赋予 ID 编号,并用其绑定合约的数据存储区域,当合约升级时,主需要保留该 合约ID,实现了一种无须数据迁移就能完成合约的新升级方式。
3. 在着手设计轻节点,通过限制合约对太旧的交易或区块进行查询,为轻节点做准备。
综上,当前 Preview2 版本,聚焦在性能,安全,合约 API 的丰富上,都有比较大的提升和拓展。
在后续的版本中也将陆续集成各大组件(NNS、MPT、Oracle、NeoID、NeoFS 等),Neo3 的上线也越来越临近。
感谢大家对 Neo 的支持!