接近sdk作为合同-辛格尔顿风格vs功能袋



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

  1. 像梅姆博物馆这样的功能袋
  2. 像乐透这样的辛格尔顿风格

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

你什么时候应该使用一个而不是另一个?每种风格的优点/缺点是什么?

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

功能袋(BoF(

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

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

辛格尔顿

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

要使用的

Singleton为合同提供了一个很好的界面,通常更容易理解。但是,由于您在每次方法调用时都要从存储中读取数据,因此成本可能会更高。

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

然而,也可以将两者结合使用。

所以实际上,这是任何对你有意义的事情。

最新更新