自2016年neo主网上线以来,neo平台的特性有着大幅度的增加,而随着下一代neo平台neo3中多种创新的实现,这种趋势今年仍在继续。本文重点介绍最近已经合并至github上master分支的一个创新特性,范围见证人。这一特性将对在neo3上保证资产转移的安全性起到重要作用。由于这些理由,我觉得手游传奇发布网的情况还比较乐观,市场还处于一片蓝海的阶段。
neo3中的资产将全部采用nep5资产类型(不再保留neo2的基于utxo的全局资产类型),这简化了对资产的管理,同时使得网络具有更强大的智能合约处理能力(如原生通证)。为了促进这些改进功能,核心执行引擎(称为applicationengine)必须用不同的方式处理各种逻辑。applicationengine的任务之一是验证交易的正确性。这意味着要检查凭证(称为见证人)是否验证通过,以及是否允许资产所有者进行资产转移。
对于neo2中基于utxo的全局资产,见证人验证是通过内部过程执行的,该过程可以安全地保证签名可以正确地验证通过,且如果合约是交易所指定的资金的发送方,则将调用合约的验证功能来决定是否允许资产转移。然而,在neo2中,智能合约不允许与原生资产直接交互以从智能合约中发起支付交易,它只能允许或拒绝交易。一言以蔽之,utxo全局资产使得智能合约无法直接实现资产的流动以及自动支付。而neo3允许智能合约直接处理原生的nep5资产(neo和gas),从而打破了这一限制。neo3使用相同的见证人体系来管理原生和非原生的(用户创建)资产。确保neo3上nep-5资产转移安全性的第一步是对传递的见证人添加限制。这些限制称为:见证人作用域。
neo3上有四种类型的作用域:calledbyentry、customcontracts、customgroups 和global。最基本(和安全)的作用域名为calledbyentry,它将见证人的使用范围限制在用户所传递的交易脚本这一最基本的级别。这意味着,与calledbyentry一起传递的见证人将仅在调用用户传递的脚本时使用,这对于所有类型的资产和通证都是100%安全的。下面的图片描述了这个过程。
calledbyentry作用域的关系图。用户交易附有见证人a签名,这只能由入口脚本直接调用的合约所使用(即合约b)。如果另一个合约(由第三方调用)尝试验证见证人a,将会执行失败(即合约c)。
与calledbyentry相反的是global作用域:允许在全局范围内使用见证人签名,而没有特定的限制条件。这在一个非常封闭的应用程序上仍然是安全的,同时可能会与neo3中另一个创新特性结合使用:manifest system(这部分将在后续文章中展开讨论)。其他两种模式(customcontracts和customgroups)允许将用户凭证作用域更细粒度地绑定到特定应用程序(和应用程序组)。这对于游戏以及其他一些应用场景而言是完美的解决方案,在这些场景中智能合约执行期间的多种情况下都需要数字资产,由此为用户凭证建立了非常简洁且具有描述性的限制。
本文不会深入探讨这些特性的技术细节,但我们欢迎感兴趣的开发人员直接与核心开发团队在github上对相关的issue进行讨论,以了解这些(和其他)有趣的新特性是如何协同作用的,从而使neo成为一个极具创新的区块链平台。