通知
FIBOS 的通知机制可以帮助智能合约之间的通讯,实现了异步解耦。当合约执行的时候,可以向指定的账户集发送通知,对应账户的合约接受通知的话,可以做相应处理。
发送通知
我们可以使用 action 模块中的 require_recipient
方法将指定的帐户添加到要通知的帐户集合。当该合约方法被执行时,就会向账户集合所有账户发送通知。
实例:
1 | exports.hi = v => { |
监听通知
当我们需要监听某个合约函数的通知,需要在合约中编写监听函数。函数名为需要监听的方法的名称前加 on_
。例如,上述例子中我们定义了一个名为 hi
的函数,并且在该函数中通过 require_recipient
发送通知。我们需要在合约创建一个名为 on_hi
的函数用以监听通知,其参数是其监听的函数的参数。
1 | exports.on_hi = v => { |
监听通知最常使用的场景是监听转账操作。Token 合约的转账方法 —— extransfer
函数中转账成功后会对转账的双方账户发送通知。开发者可以监听该函数,做到账后的处理,比如:给用户开通相关服务等。
1 | exports.on_extransfer = (from, to, quantity, memo) => { |
Tips:
- 一个合约向另一个合约发出的通知消息会被另一个合约收到,不管有没有 ABI 定义接口,都会在应用层收到。
- 一个合约向另一个合约发送的通知消息就是本合约收到的消息,包括
code
、action
和参数。- 账户处理处理通知信息和处理正常的消息一样,根据
code
、action
和参数进行逻辑处理。- 可以使用
has_recipient
函数来检查对应账户是否在通知账户集合中。