@mutateState 装饰器在 NEAR 智能合约(网络程序集)中意味着什么?
What does the @mutateState decorator mean in a NEAR smart contract (web assembly)?
从一些使用 near-sdk-as
的示例中,我看到他们使用了 @mutateState
装饰器,但我不确定它的作用。
这是 Learn NEAR 上入门示例的片段:
// write the given value at the given key to account (contract) storage
@mutateState()
write(key: string, value: string): string {
storage.set(key, value)
return `✅ Data saved. ( ${this.storageReport()} )`
}
我从这个问题中看到:
If the method is decorated with @mutateState
then the instance is
written back to storage after the method call.
但我不知道那是什么意思。我认为 storage.set(key,value)
无需使用装饰器即可存储数据。感谢任何帮助
单身人士class很特别。是入口文件导出的class。它代表一个class,即合约的状态。在调用方法之前,class 的状态被加载并作为 this
传递。通常此方法将 运行 和 return。但是,如果合约的状态发生更改或变异,则需要添加此装饰器,以便在方法 returns 之前将状态写回存储。
在 Rust 中,这是由 self
的类型处理的。 &self
是不可变的,因此您无法更改合约的状态。 &mut self
是可变的,这个方法也会被写回存储。
您发布的示例也没有证明这一点。
@mutateState
setName(name: string): void {
this.name = name;
}
从一些使用 near-sdk-as
的示例中,我看到他们使用了 @mutateState
装饰器,但我不确定它的作用。
这是 Learn NEAR 上入门示例的片段:
// write the given value at the given key to account (contract) storage
@mutateState()
write(key: string, value: string): string {
storage.set(key, value)
return `✅ Data saved. ( ${this.storageReport()} )`
}
我从这个
If the method is decorated with
@mutateState
then the instance is written back to storage after the method call.
但我不知道那是什么意思。我认为 storage.set(key,value)
无需使用装饰器即可存储数据。感谢任何帮助
单身人士class很特别。是入口文件导出的class。它代表一个class,即合约的状态。在调用方法之前,class 的状态被加载并作为 this
传递。通常此方法将 运行 和 return。但是,如果合约的状态发生更改或变异,则需要添加此装饰器,以便在方法 returns 之前将状态写回存储。
在 Rust 中,这是由 self
的类型处理的。 &self
是不可变的,因此您无法更改合约的状态。 &mut self
是可变的,这个方法也会被写回存储。
您发布的示例也没有证明这一点。
@mutateState
setName(name: string): void {
this.name = name;
}