我正在尝试在以太坊中编写可升级的智能合约。任何人都可以举一个以太坊中可升级的智能合约和访问数据的例子。
要编写可升级的智能合约,我建议您执行以下操作(对我有用(:
- 创建一个存储协定,您将在其中存储所有映射和变量。向函数更改状态添加修饰符。此修饰符应要求特定映射中必须存在地址(我们称之为授权(才能更改映射或变量的状态。将所有者的地址放在该地图中。
- 编写一个函数来授权存储合约上的外部地址
- 部署另一个包含应用逻辑的协定。
- 在存储协定上自动取消逻辑协定。 升级逻辑后,拒绝从逻辑协定访问存储协定
- ,部署升级后的逻辑并将新协定链接到存储。
Tadaa您现在拥有一组可升级的智能合约。
智能合约无法替换,但您可以创建一个智能合约代理,以便能够替换所有新智能合约函数的调用(以前的智能合约无法在主网络以太坊上删除(。
完整的解释和示例可以在这里看到
您可以实现遵循代理模式
博客
https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357
智能合约可升级性是一个最先进的领域。目前,有一些解决方案,但每种解决方案都有自己的优点和缺点。以下是带有示例的解决方案: https://consensys.github.io/smart-contract-best-practices/software_engineering/