事件和回滚

事件是指在合约代码内抛出的特定数据,会记录在区块链上。一旦事件发生,所有的区块链节点都能观察到这个数据。回调则是为合约中的事件绑 定处理方法,在接收到指定类型的事件时,则执行绑定的方法。官方钱包提供默认的 Script 脚本回调,也可以由用户根据自己的情况自定制。

Citizen 节点执行合约,触发某个事件,会将其一起打包入区块中,并进行广播。由于一个智能合约在不同的时间点或者不同的外部条件调用下,可 能会走入合约代码的不同分支,执行不同的代码逻辑。对于调用者来说,并不能很好地了解合约执行的状况,有了事件机制,用户就拥有了了解合约执 行中的状况,以及获取合约执行结果的能力。

拥有了这样的能力,用户可以根据接收到相应的事件,做出相关的反馈动作,比如说再次发起一笔交易,或者发起一个合约的调用,或者一些本地的 动作,比如说记录日志,或者记录数据库,或者进行一个 HTTP 请求等。甚至用户还可以制作一个具有决策能力的程序来对接到我们的区块链中,进行一些实务的决策,并根据决策结果来实施不同的反馈操作。