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