Near-sdk-as Contracts - 单例风格与功能包

Near-sdk-as Contracts - Singleton style vs Bag of functions

在汇编脚本中编写NEAR智能合约似乎有两种风格

  1. Meme Museum
  2. 这样的函数包
  3. Lottery这样的单例风格。

我想知道在什么情况下推荐一种风格而不是另一种风格。

什么时候应该用一个而不是另一个?每种款式的advantages/disadvantages是多少?

最大的区别在于合约的初始化。

函数包 (BoF)

对于第一种样式,通常在顶层声明一个持久化集合。每个文件中的所有顶级代码都放在一个函数中,一个启动函数调用每个。 Wasm 二进制格式允许指定启动函数,以便在任何时候实例化二进制文件(e.i。由运行时加载)在调用任何导出函数之前调用该函数。

对于持久集合,这意味着分配对象,但不需要从存储中获取数据,直到读取某些内容,包括集合的长度或大小。

单例

声明了合约的顶级实例。然后检查存储中的“STATE”键,其中包含实例的状态。如果存在,则读取存储并从存储中反序列化实例。然后合约的每个“方法”都是一个使用全局实例的导出函数,例如instance.method(...),将参数传递给方法。如果方法用 @mutateState 修饰,则实例在方法调用后写回存储。

使用哪个

Singleton 为合约提供了一个很好的接口,通常更容易理解。但是,由于您在每次方法调用时都从存储中读取数据,因此它可能会更昂贵。

BoF 的另一个优点是它更容易扩展,因为您可以从依赖项中导出更多功能。

不过,也可以将两者结合使用。

所以真的是任何对你有意义的东西。