至少有 3 种方法可以停止程序执行
panic!
assert!
(而且都是兄弟姐妹)env::panic
如何正确停止智能合约执行?
有没有首选的方法?什么时候应该有人使用env::panic
?
至少有 3 种方法可以停止程序执行
panic!
assert!
(而且都是兄弟姐妹)env::panic
如何正确停止智能合约执行?
有没有首选的方法?什么时候应该有人使用env::panic
?
他们最终都会打电话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
在可替代代币合约中查看它们示例的好地方。