全面理解复杂类型的存储布局
Ethernaut题库闯关连载第12篇题解
本篇文章是关于可升级智能合约的系列文章中的第二篇,深入探讨了Solidity的数据存储方法及使用代理合约的潜在问题。文章重点讲解了以太坊虚拟机(EVM)的存储模型,以及如何避免不同版本智能合约之间存储布局的碰撞,提供了一些最佳实践和解决方案,具有较高的技术深度和实用价值。
所有存储在区块链上都是公开可见的,包括合约的私有状态变量!所以不要在区块链上存储密码和私钥,而且对于确实需要存储的敏感数据尽量使用hash比对的存储密文hash。通过本文可以理解合约数据的存储,并学会访问合约的状态变量数据。
本次审计对 OffchainLabs/stylus-sdk-rs 仓库在特定 commit 进行了安全审计,发现了 36 个问题,包括严重、高、中、低风险问题。审计范围涵盖 stylus-proc, stylus-sdk, examples, mini-alloc 目录下的多个文件。审计结果表明该项目尚处于开发阶段,但团队积极解决问题,建议在问题解决和项目成熟后进行后续审计。
本文介绍了在使用 OpenZeppelin Upgrades 编写可升级合约时需要注意的关键事项,包括使用 initializer 代替 constructor,避免在字段声明中定义初始值,以及如何安全地修改合约存储结构。
本文档介绍了OpenZeppelin Upgrades Core库和CLI工具,用于检测智能合约的升级安全性及存储布局兼容性。重点介绍了CLI的validate命令,以及High-Level API和Low-Level API的使用方法,包括环境配置、参数说明和返回结果,方便开发者在开发流程中尽早发现和解决潜在的升级问题。
智能合约状态变量的存储体现
Solidity 瞬态存储的使用
本文介绍了OpenZeppelin Hardhat Upgrades插件如何通过.openzeppelin文件夹中的网络文件来跟踪已部署的合约版本。
.openzeppelin
本文档介绍了OpenZeppelin Contracts库在不同版本之间的向后兼容性保证,包括API和存储布局的兼容性。文章解释了在patch和minor版本更新中通常会保持向后兼容,但某些情况下可能会有例外,特别是涉及到安全问题或draft状态的ERC标准时。同时提醒了override函数、struct结构体以及错误处理等方面需要注意的问题,并强调了major版本更新通常不保证兼容性。