2

至少有 3 种方法可以停止程序执行

  1. panic!
  2. assert!(而且都是兄弟姐妹)
  3. env::panic

如何正确停止智能合约执行?

有没有首选的方法?什么时候应该有人使用env::panic

4

1 回答 1

3

他们最终都会打电话env::panic。从文档Terminates the execution of the program with the UTF-8 encoded message.。它是导入合约的主机函数的包装器。

至于其他两个,assert!检查布尔值并使用消息调用panic!。它们都支持fmt::Display特征,这意味着您可以使用“{}”标记字符串插值,以标记传递的字符串将按照它们出现的顺序出现在哪里。

例如

assert!(b, "{}", "oops");
/// is
if (b) {
  panic!("{}", "oops");
}
/// is equivalent to 
if (b) {
  env::panic(format!("{}", "oops"));
}

所以你可以使用任何你认为合适的。near-sdk-rs/examples 在可替代代币合约中查看它们示例的好地方。

于 2020-07-18T16:41:03.800 回答