最近我复制粘贴了一堆方法签名,并试图为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()
。
你看到问题了吗?
当Rust中的一个方法用args(&mut self, ...)
声明时,您向编译器指示您希望更改约定的状态;自我";。
如果您试图从api js附近将此方法作为viewMethod调用,则会收到一个错误。
修复方法是用像(&self, ...)
这样的参数声明视图方法,表明您不会通过调用此函数来更改约定的状态。
Rust和接近sdk-rs的细微差别,但很重要!