shaneson.eth

Posted on May 27, 2022Read on Mirror.xyz

合约开发中的工厂设计模式(IDO- MISO为例)

这大半年研读和学习了超大量的合约代码。第一次看到全基于Template/工厂的合约价格代码,学习和记录一下,如果以后自己有幸参与项目组的IDO业务,也可以帮忙。

背景

MISO 是什麼,Minimal Initial Sushiswap Offering,也就是基於 Sushiswap 平台的IDO眾籌平台。MISO的功能有:

• 代币工厂(TokenFactory) —为项目创建代币的工厂; 固定供应的,可铸造的,Sushi代币。

• 发酵(Fermentation)——随时间推移锁定代币的Vault/托管选项

• 市场(Market)-初始代币发行合约; 固定价格众筹,批量拍卖(也称为IBCO)和荷兰式拍卖。

• 农场(Farm)-用户可以种植新的代币以获得奖励

• 启动器(Launcher)——易于迁移的流动性; 设置一部分募集资金以创建一个新的SushiSwap池并以无信任的方式迁移。

其实初步业务看起来没有什么区别,很其他的项目差别不大。但是,当我研读了源码了之后,我发现这代码非常的牛逼。

源码

代码的整体是以几个模块Factory为中心构建,包括:

  1. LauncherFactory。
  2. FermenterFactory。
  3. marketFactory。
  4. TokenFactory。
  5. FarmFactory。

Factory管理合约的方式是:所有的模版代码都是通过各种factory部署然后管理的。以FarmTemplate为例:

第一步要部署好template合约,然后再factory上增加这个模版

deploy和create都是一样的。不一样的是create多了callData的参数,可以合约初始化值。

比较重要的一点是,我们可以看到factory上有一个locked的控制开关。当触发了这个函数,就会调用createClone函数。赶紧template进行创建出Farm。

这样就完成了一个Factory对Farm的创建。

同理,也可以add/remove的操作。

总结,

如果合约逻辑需要,大批量的相同逻辑,最好是使用Factory来管理合约的方式。MISO所有的逻辑都是基于factory管理和创建的。Curve的Factory部分也是如此。这个是一很好的开发模版,学习了。部分细节因为时间关系就不细看了~~