赞
踩
介绍
以太坊智能合约代码是不可变的:部署后无法更改。这与区块链的去信任性密切相关,但阻碍了智能合约的开发和维护。除此之外,智能合约代码大小限制为 24 KB。
除了代码之外,每个智能合约都有自己的内部存储,即 256 位插槽阵列。 Solidity 是以太坊智能合约最流行的编程语言,它将状态变量分配给存储槽并处理低级细节。但是,在许多情况下,开发人员可能希望在部署后更改存储布局,例如添加变量或优化存储读/写操作。
为了缓解这些问题,EIP-2535 提出了一种复杂的代理模式,它允许添加、替换和删除功能,并实际上消除了对代码大小的任何限制;以及创新的存储布局,抗碰撞且非常灵活。
在以下部分中,我们将介绍 EIP-2535 的基础知识,以及它如何实现代码可升级性。然后,我们将看到它是如何实现存储布局升级的。最后,我将提出一些与升级动态字段任务相关的注意事项,并提出缓解措施。
EIP-2535 及升级功能
尽管智能合约具有不可变的代码,但它们可以调用其他智能合约的函数。特别是,他们也可以这样做,同时通过委托调用保留存储上下文。此功能是启用高级代理合约的基础。
EIP-2535 中提出的代理合约,即 Diamond,代码很少,完全通用。同时,所有特定于应用程序的功能都由称为 Facets 的合约实现。在构造时,钻石只公开两个函数:一个 diamondCut 函数,它允许钻石所有者添加、替换和/或删除函数实现,以及一个 fallback 函数,它动态地将函数调用无缝地分派到适当的方面。
EIP 还指定了一个名为 Diamond Loupe 的接口,它允许对可以通过 fallback 函数调用的函数进行自省。这对于测试升级时的开发人员和使钻石的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。