微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NEAR协议-将Rust合约方法args声明为&mut self,...vs.&self,...会发生什么?

如何解决NEAR协议-将Rust合约方法args声明为&mut self,...vs.&self,...会发生什么?

最近,我复制粘贴了一些方法签名,并尝试为NEAR智能合约创建视图方法

pub fn get_credits(&mut self,account_id: AccountId) -> u128 {
    self.credits.get(&account_id).unwrap_or(0)
}

使用near-api-js调用此合同时,将引发错误提示不允许使用该方法env::attached_deposit()

您看到问题了吗?

解决方法

当用参数(&mut self,...)声明Rust中的方法时,您是在向编译器指示要更改合同状态(即“自我”)。

如果您尝试从Near-api-js将该方法作为viewMethod调用,则会收到错误消息。

解决方法是使用类似(&self,...)的参数声明视图方法,指示您不会通过调用此函数来更改合同的状态。

Rust和Near-SDK-RS的细微差别,但很重要!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。