【发布时间】:2020-11-09 05:37:15
【问题描述】:
如何在合约之间的异步调用链中捕获和处理异常?
假设我的事务发起了以下调用:
contractA.run()
-> do changes in contractA
-> calls contractB.run()
-> do changes in contractB
-> then calls another method on contractA: contractA.callback()
* callback() crashes
在 Promise 中出现异常后,NEAR 不会回滚过去 Promise 中发生的更改。我也没有在near-sdk 中看到任何处理异常的方法。
一个想法是返回错误而不是抛出异常并创建一堆私有函数来更新错误值后的状态并添加/释放互斥锁。然而,这并不能解决有时我们无法控制的问题,例如在外部智能合约中(例如,如果contractB.do 在上面的示例中会出现恐慌)。
【问题讨论】:
-
是的,我们目前遇到了这个问题,即来自 Promise 的错误不会从运行时暴露出来。同样正如您所提到的,我们缺乏对合约状态的这种“更新”抽象。
标签: rust nearprotocol rust-wasm