@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;
}