首页 > 区块链 > 深度了解NEO3 Preview1的改进与优化

深度了解NEO3 Preview1的改进与优化

2019-10-01 20:00:20|浏览量:943|

深度了解NEO3 Preview1的改进与优化

NEO3的Preview1版本在系统架构、稳定性和性能等多个方面进行了优化与改进,同时对定价模型进行了重新设计,从而大大降低了开发成本。所有这些变更旨在全面支持基于NEO3的大规模商业应用的开发和落地。

下面总结了NEO3 Preview1中的一些特性。后续版本中将包含更多新功能,敬请期待。

NEO3 Preview1 部分特性简介?

「架构优化」

账户模型
智能合约

- 原生合约
- 合约Manifest与scriptHeader
- 新增的智能合约APIs

?交易

- 使用单一的交易类型实现与区块链的交互
- 有限作用域的见证人签名
- 存储合约执行结果
?区块
?NeoVM

「稳定性增强」
「性能增强」
「定价模型」
系统费
网络费
操作码费用
与NEO2.x的比较

架构优化

· 账户模型

NEO2.x中可以通过两种方式在NEO上创建资产。第一种是使用RegisterTransaction交易创建全局资产,第二种则是通过编写智能合约来创建合约资产。事实上,全局资产的使用是很少的,而合约资产因其灵活性与功能性成为了大多数应用程序的选择。由于全局资产没有与智能合约进行整合,要想在智能合约中对全局资产进行管理是非常困难的。

因此,在NEO3中,所有基于UTXO的全局资产都被移除并替换,取而代之的是基于合约的账户模型。NEO和GAS实现为原生合约同时符合NEP-5、NEP-10规范,从而统一了所有资产的操作方式。

· 智能合约

- 原生合约

原生合约是使用原生代码实现的,而不是在NeoVM中运行的opcode脚本,并以互操作服务的形式供NeoVM使用。原生合约公开其服务名称,供其他合约调用。当前包含NeoToken、GasToken与PolicyContract三种原生合约。

1. NeoToken,简称NEO,Neo的管理通证,用于执行对Neo网络的管理权,符合NEP-5标准。

2. GasToken,简称GAS,Neo的燃料通证,用于支付手续费,符合NEP-5标准。

3. PolicyContract,配置共识策略的合约,保存了共识过程中相关参数,包含区块最大交易数、低优先级交易数和大小限制、每字节的网络费等。

-? 合约Manifest 和scriptHeader

当前每个合约都需要提供一个Manifest文件来描述其相关属性,包括Groups, Features, ABI, Permissions, Trusts, SafeMethods等,如下所示:

1. Groups:声明合约所属的组。一个Group由一个公钥和合约哈希的签名组成。

2. Features:声明合约可用的特性。其中属性值storage表明合约可以访问存储区,payable表明合约可以接受资产的转入。

3. ABI:声明智能合约的接口信息,可以参考NEP-3。接口的基础属性包括:

- Hash:16进制编码的合约脚本哈希;
- EntryPoint:提供了合约入口方法的详细信息,包括方法名、方法参数以及方法返回值;
- Methods:由合约方法的详细信息构成的数组;
- Events:由合约事件构成的数组。

基于ABI信息,可实现合约间的相互调用。

4. Permissions:声明合约可调用的其他合约和方法。执行合约调用时,会检查Permission中配置的权限,若没有相应权限,则调用操作会执行失败。

5. Trusts:声明合约可以被哪些合约或者哪些合约组安全地调用。

6. SafeMethods:声明哪些方法是SafeMethod,SafeMethod通常是不会修改存储区,只读取区块链数据的方法,如果一个方法被标记为安全的,那么其他合约调用该方法时不会给用户接口返回警告信息。

-? 新增的智能合约APIs

新增System.Runtime.Notify,允许在合约之间传递消息。例如,考虑一个运行去中心化交易所的合约。当用户需要充值时,首先他会向该合约转入一定的NEP-5代币,然后调用其deposit方法进行充值。在deposit方法中,合约可以通过调用System.Runtime.Notify来确认用户是否真正地转账了代币。

此外,还添加了 Neo.Json.Serialize和Neo.Json.Deserialize接口,使合约能够处理JSON格式的数据,同时简化合约的开发。

· 交易

-? 使用单一的交易类型实现与区块链的交互

在NEO 2.x中,有9种不同的交易类型:

- MinerTransaction
- IssueTransaction
- ClaimTransaction
- EnrollmentTransaction
- RegisterTransaction
- ContractTransaction
- StateTransaction
- PublishTransaction
- InvocationTransaction

这些交易类型要么与特定的应用程序场景相关,要么提供更多的功能。但NEO3中只存在一种交易类型,格式如下:

-? 有限作用域的见证人签名

当前交易签名是全局有效的,为了让用户能更细粒度地控制签名的作用范围,NEO3中对交易结构中的cosigners字段进行了变更,可实现签名只限于验证指定合约的功能。Cosigner的结构如下:

Scopes字段定义了签名的作用范围,包括以下四种类型:

-? 存储合约执行的结果

目前,交易执行的结果(成功或失败)也会被存储。可以通过查询交易信息来确认交易在NeoVM中是否执行成功,例如跨链交易的确认。

· 区块

目前,我们给区块和区块见证人的大小设置了上限MaxSize (以更好地防止垃圾交易攻击),并将区块时间戳的单位更改为毫秒,从而可用于物联网应用。

· NeoVM

NeoVM是用于执行智能合约的轻量级虚拟机。它的特点是启动快,资源消耗低,支持多种高级编程语言,允许开发人员使用熟悉的工具构建合约。

在NEO3.0中,通过将操作码费用的计算转移至ApplicationEngine并简化指令,来实现NeoVM与区块链的完全解耦,使其成为一个单纯的虚拟机。下列操作码已被弃用:APPCALL, TAILCALL, SHA1, SHA256, HASH160, HASH256, CHECKSIG, VERIFY, CHECKMULTISIG, CALL_I, CALL_E, CALL_ED,CALLET, `CALLEDT`等。

这样做具有以下几个优点:

- 简化原生合约的开发
- 增加NeoVM在区块链外的应用场景
- 将NeoVM平滑集成到任何IDE中,并轻松调试智能合约,而无需加载区块链数据

稳定性增强

委托拜占庭容错(dBFT)是专门为区块链设计的共识机制。通过投票选举出一组共识节点,并由这些节点共同生成和验证区块。由于共识节点需要在新区块上链之前达成一致,dBFT保证了一区块终局性,这意味着NEO区块链不会发生分叉,且交易是不可逆的。一旦交易在区块链上得到确认,就不能撤销或取消。对于金融应用来说,交易的终局性是必要的。

在dBFT2.0中,我们增加了一个恢复机制,大大提高了共识算法的稳定性。在极少数情况下发生网络故障或节点故障时,可以实现快速恢复。

性能增强

NEO3增加了P2P消息的自动压缩机制,节省了大量的存储空间和带宽,同时提高了TPS。

部分压缩样本如下:

定价模型

· 系统费

系统费是根据NeoVM要执行的指令计算得出的费用,请参考GitHub上NEO3开发指南中的操作码费用部分,了解每个操作码的具体费用。NEO3取消了每笔交易10 GAS的免费额度,系统费用总额受合约脚本的指令数量和指令类型影响。计算公式如下所示:

· 网络费

网络费是用户向NEO网络提交交易时支付的费用,作为共识节点的出块奖励。每笔交易的网络费存在一个基础值,计算公式如下所示。只有当用户支付的网络费大于或等于此基础费用时,才会执行交易。否则,交易将被认定为无效交易。

其中,VerificationCost为NeoVM验证交易签名执行的指令相对应的费用,tx.size为交易数据的字节长度,FeePerByte为交易每字节的费用,目前在PolicyContract定义为0.00001GAS。

· 操作码费用

NeoVM操作码费用降低为原来的1/1000左右,可以显着降低合约开发成本。

· 与NEO2.x的比较

NEO3 Preview1版本可在https://github.com/neo-project/neo-cli/releases/tag/v3.0.0-preview1上下载。

以下是申请NEO3 Preview1 GAS的链接:https://neo.org/testcoin/apply

参考文献:

[1] Roadmap of NEO 3.0 Development
https://medium.com/neo-smart-economy/roadmap-of-neo-3-0-development-e2ae64edf226

[2] Native Contracts in NEO 3.0
https://medium.com/neo-smart-economy/native-contracts-in-neo-3-0-e786100abf6e

[3] Some Details about Changes in NEO 3.0
https://github.com/neo-ngd/NEO3-Development-Guide/blob/master/README.md#changes-in-neo3

[4] dBFT2.0
https://medium.com/neo-smart-economy/dbft-2-0-3-months-no-sporks-e2ab9fe1065b

[5] Opcode fee in NEO3
https://github.com/neo-ngd/NEO3-Development-Guide/tree/master/en/NeoVM#instructions

文章标签: 合约 区块链 交易 费用 执行
本网所发布资讯来源网络,仅属作者个人主观观点,与本网无关。
?

专栏合作

欢迎您浏览龙bck体育扫码下载官网,有关资讯合作,投稿或其他疑问请联系 QQ:2698491281

开通专栏