NEO改进协议提案7(NEP-7)

30次阅读

共计 1182 个字符,预计需要花费 3 分钟才能阅读完成。

文章目录

摘要
动机
原理
详述鉴权触发器 鉴权 R 触发器 应用触发器 应用 R 触发器

后兼容性
实现

摘要
触发器是一种触发智能合约执行的机制。本 NEP 定义四种类型的触发器,他们是鉴权触发器、鉴权 R 触发器、应用触发器、应用 R 触发器
动机
提供智能合约系统的区块链应当为其上运行的智能合约提供多种触发器来使其在不同环境中运行。
原理
当前,Neo 智能合约中有两种触发器:鉴权触发器和应用触发器这两种触发器使得智能合约能够验证交易和修改区块链的状态。但没有办法让智能合约拒绝一个交易,或在接受一个交易时修改区块链的状态。我们需要两种新的触发器来实现:鉴权 R 触发器和应用 R 触发器
详述
我们定义四种触发器:鉴权触发器、鉴权 R 触发器、应用触发器和应用触发器 R
鉴权触发器鉴权触发器代表合约作为鉴权函数被调用。鉴权函数能接收多个参数,并返回一个布尔值代表交易和区块的有效性如果合约由鉴权触发器触发,则将调用合约的入口函数:main(…); 合约的入口函数必需能够处理这种类型的调用。
鉴权 R 触发器鉴权 R 触发器代表合约作为鉴权函数被调用,因为他被指定为交易的输出。鉴权函数函数不接受任何参数,并应返回一个指示交易有效性的布尔值。如果合约由鉴权 R 触发器触发,则将调用合约的入口函数:main(“receiving”, new object[0]); 合约的入口函数必需能够处理这种类型的调用。receiving 函数需要有以下编程接口:public bool receiving()receiving 函数必需在合约从一个交易接收资产时被自动调用。
应用触发器应用触发器代表合约作为一个应用函数被调用。应用函数可以接收多个参数,改变区块链的状态和返回各种类型的值合约可以有任何格式的入口,但我们必需记住所有合约必需有以下入口:public byte[] main(string operation, params object[] args) 函数可以在创建一个 InvocationTransaction 时被调用。
应用 R 触发器应用 R 触发器代表函数的默认函数 received 函数正在被调用,因为它被指定为交易的输出。received 函数不接受任何参数,更改区块链的状态,和返回任何类型的值。当合约被鉴权 R 触发器触发时,会调用入口函数:main(“received”, new object[0]);received 函数需要有以下编程接口:public byte[] received()received 函数在合约从一个交易接收资产时被自动调用。
后兼容性
没有实现 receiving 和 received 函数的老合约在被鉴权 R 触发器和应用触发器触发时会导致虚拟机的 FAULT 状态。所以转给老合约的交易会被拒绝且没有状态会被改变
实现
https://github.com/neo-projec…
原文链接:https://github.com/neo-projec…

正文完
 0