SuperAPI AI 工具集

upgrade-stellar-contracts

编程与开发

查看项目

更新于 10-16 03:11

技能介绍

用途:帮助开发者将 Stellar/Soroban 智能合约改为可升级,并在升级 WASM 字节码的同时按需迁移存储。Soroban 的合约默认可变,协议层原生支持替换自身 WASM 字节码,无需 EVM 式代理合约;只要不提供升级函数,合约即不可变。新实现仅在当前调用结束后生效,因此升级与迁移不能在同一次调用内完成。

主要能力:OpenZeppelin Stellar Soroban 的 contract-utils 包提供 Upgradeable 与 UpgradeableMigratable 两个组件。仅更新 WASM 时用 Upgradeable;需同时修改存储条目时用 UpgradeableMigratable。推荐使用派生宏 #[derive(Upgradeable)] 与 #[derive(UpgradeableMigratable)],宏会生成必要函数,并把 Cargo.toml 中的 crate 版本写入 WASM 元数据(符合 SEP-49)。

使用方式:Upgradeable 需实现 UpgradeableInternal 的 _require_auth(e, operator) 做授权校验;UpgradeableMigratable 还需定义 MigrationData 类型并实现 _migrate。宏保证迁移只能在升级成功后调用。若需原子化升级加迁移,可用辅助合约 Upgrader 依次调用 upgrade 与 migrate,并用访问控制(如 Ownable 的 #[only_owner])保护 upgrade_and_migrate。

适用场景:需要在 Soroban 上迭代合约逻辑、修复缺陷或迁移存储的团队,尤其重视降低代理模式风险面的项目。

限制:该模块不内嵌访问控制,必须在 _require_auth 中自行实现授权,否则任何人都能替换合约代码。不调用新合约构造函数,初始化须经迁移或单独调用完成;不自动检查新合约是否保留升级机制,否则将永久失去可升级性;不验证存储一致性,不得删除或重命名已有存储键、不得更改其值类型,新增键是安全的。Soroban 无自动化存储兼容性校验,需在本地测试网部署验证。回滚可通过升级到定义回滚逻辑的较新版本并以迁移方式执行。可参考 stellar-contracts 仓库 examples/ 目录的完整示例。具体示例与命令行步骤资料中暂未提供完整细节。