文章目录摘要动机原理详述鉴权触发器 鉴权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…