【发布时间】:2020-11-08 01:06:06
【问题描述】:
至少有3种方法可以停止程序执行
panic!-
assert!(都是兄弟姐妹) env::panic
如何正确停止智能合约的执行?
有什么首选的方法吗?什么时候应该使用env::panic?
【问题讨论】:
标签: nearprotocol
至少有3种方法可以停止程序执行
panic!assert!(都是兄弟姐妹)env::panic如何正确停止智能合约的执行?
有什么首选的方法吗?什么时候应该使用env::panic?
【问题讨论】:
标签: nearprotocol
他们最终都会致电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/exampleslike the fungible token contract 中查看它们的示例的好地方。
【讨论】: