跳到主要内容

Diamond Proxy

Summary

EIP-2535“钻石”是模块化智能合约系统,可以在部署后升级/扩展,并且几乎没有大小限制。来自EIP:

钻石是具有外部功能的合约,这些外部功能由称为“facet”的合约提供。 Facet 是单独的、独立的合约,可以共享内部函数、库和状态变量。

钻石模式由中央Diamond.sol代理合约组成。除了其他存储之外,该合约还包含可以在称为构面的外部合约上调用的函数注册表。

Motivation

  • 单一地址可实现无限合约功能。使用单一地址来实现合约功能可以使部署、测试以及与其他智能合约、软件和用户界面的集成变得更加容易。
  • 您的合约超出了 24KB 最大合约大小。您可能具有将其保留在单个合约或单个合约地址中有意义的相关功能。钻石没有最大合约大小。
  • 钻石提供了一种组织合约代码和数据的方法。您可能想要构建一个具有很多功能的合同系统。钻石提供了一种系统的方法来隔离不同的功能,并将它们连接在一起,并根据需要以高效的方式在它们之间共享数据。
  • 钻石提供了一种升级功能的方法。可升级钻石可以升级以添加/替换/删除功能。由于钻石没有最大合约大小,因此随着时间的推移,可以添加到钻石的功能数量没有限制。钻石可以升级,而无需重新部署现有功能。可以添加/替换/删除钻石的某些部分,同时保留其他部分。
  • 钻石可以是不可变的。稍后可以部署不可变钻石或使可升级钻石不可变。
  • 钻石可以重复使用已部署的合约。无需将合约部署到区块链,现有的已部署链上合约可用于创建钻石。可以根据现有部署的合同创建定制钻石。这使得创建链上智能合约平台和库成为可能。

Refer

https://autifynetwork.com/exploring-erc-2535-the-diamond-standard-for-smart-contracts/ https://github.com/mudgen/diamond