当前位置:   article > 正文

使用 EIP-2535 “钻石” 升级智能合约代码和存储布局

eip-2535

1ace8f2267c500c985b9425a40c5d3e7.jpeg


介绍


以太坊智能合约代码是不可变的:部署后无法更改。这与区块链的去信任性密切相关,但阻碍了智能合约的开发和维护。除此之外,智能合约代码大小限制为 24 KB。


除了代码之外,每个智能合约都有自己的内部存储,即 256 位插槽阵列。 Solidity 是以太坊智能合约最流行的编程语言,它将状态变量分配给存储槽并处理低级细节。但是,在许多情况下,开发人员可能希望在部署后更改存储布局,例如添加变量或优化存储读/写操作。


为了缓解这些问题,EIP-2535 提出了一种复杂的代理模式,它允许添加、替换和删除功能,并实际上消除了对代码大小的任何限制;以及创新的存储布局,抗碰撞且非常灵活。


在以下部分中,我们将介绍 EIP-2535 的基础知识,以及它如何实现代码可升级性。然后,我们将看到它是如何实现存储布局升级的。最后,我将提出一些与升级动态字段任务相关的注意事项,并提出缓解措施。


EIP-2535 及升级功能


尽管智能合约具有不可变的代码,但它们可以调用其他智能合约的函数。特别是,他们也可以这样做,同时通过委托调用保留存储上下文。此功能是启用高级代理合约的基础。


EIP-2535 中提出的代理合约,即 Diamond,代码很少,完全通用。同时,所有特定于应用程序的功能都由称为 Facets 的合约实现。在构造时,钻石只公开两个函数:一个 diamondCut 函数,它允许钻石所有者添加、替换和/或删除函数实现,以及一个 fallback 函数,它动态地将函数调用无缝地分派到适当的方面。


EIP 还指定了一个名为 Diamond Loupe 的接口,它允许对可以通过 fallback 函数调用的函数进行自省。这对于测试升级时的开发人员和使钻石的

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/159664
推荐阅读
相关标签
  

闽ICP备14008679号