处理NEAR区块链中的承诺链失败

时间:2020-09-24 20:24:55

标签: nearprotocol

我正在为NEAR区块链编写一组交互的智能合约。让我们想象一下以下情形

  1. 用户将令牌发送到交易所智能合约
  2. 代币智能合约呼叫交换智能合约
  3. 交换智能合约通话费智能合约
  4. Exchange智能合约调用另一个令牌合约,以发送回另一笔交易中的令牌

与单个分片的以太坊不同,NEAR确实以承诺方式进行了合约间的交叉交易。单个跳闸的require()会自动回滚到整个以太坊交易,但如果它们触发的承诺未能成功完成,则以NEAR智能合约的分片性质,它们本身负责回滚状态更改。

我的问题是如何安全地处理NEAR智能合约之间的承诺链中的失败

  • 有哪些失败模式(智能合约功能恐慌,目标帐户不包含代码,没钱了)
  • 如何捕获上述不同的错误并处理不同的错误模式
  • 是否已经存在一种模式,可以轻松简便地安全编写承诺链,类似于JavaScript await / async模型中的try {} catch {}
  • 我如何在不同的承诺之间进行跟踪,导致承诺链触发的最初的初始用户交易是什么
  • 智能合约如何转发天然气并确保有足够的天然气来完成整个承诺链

1 个答案:

答案 0 :(得分:3)

通常,您只能在不知道发生错误的情况下,才知道诺言是否成功。可以在https://github.com/near/core-contracts/blob/4f245101d7d029ffb3450c560770db244fc7b3ce/lockup/src/utils.rs#L7处找到这种检查的示例。对您想到的不同错误做出不同反应的用例是什么?