Cadence update 合约升级指南

Tags
Published
Jun 29, 2022 12:16 PM
Language
notion image
Flow 主网已经在 2022-06-16 日完成了最近一次的 SPORK, 升级了 Secure Cadence 的执行版本,其中包含了 Cadence 的 breaking changes
同样更新也涉及到 SDK,请见文档 现有的主网合约将开启无许可更新的权限,也就是说所以的现存合约都可以无许可的进行升级操作。
本文旨在帮助合约开发者针对现有的主网合约进行升级的指南。

为什么要升级

Secure Cadence 的新版本将导致原已经存在主网的合约在某些程度上不可用,例如: NFT 标准合约中因为 Mapping 值类型的变化会导致无法进行正常的 NFT 链上查询操作,会报出脚本异常等错误。 这种影响会产生在 NFT 资产的查询和转账的脚本中,所以需要尽快的升级。
同样涉及到 Mapping 类型存储的取值都需要进行类型的转换和声明,否则 Secure Cadence 版本将会抛出运行时错误从而导致脚本执行失败(包含交易或查询的 Cadence 脚本)。
详细的类型转换请参阅 breaking changes 的文档或中文翻译 获取更多信息

升级流程

在升级之前需要遵循如下步骤:
  • 将 Flow Emulator 模拟器升级至最低: v0.36.0 的兼容 Secure cadence 的版本,尝试将升级之前的合约进行本地部署,会发现类型导致的错误提示。
  • 根据错误提示修改合约代码至本地模拟器部署不出现任何报错。
  • 针对涉及到改动和更新的代码在本地模拟器进行单元测试和用例测试
  • 测试后,可尝试将测试网进行升级使用 flow project deploy --network testnet --update 直接升级测试网合约
  • 观察升级过程,并在升级之后在测试网进行用例测试
  • 确认无误后,升级主网合约 flow project deploy --network mainnet --update
注意,本次升级只涉及到 Secure Cadence 的类型改变,如果涉及到对合约逻辑或其他的更新,请参阅合约升级指引

升级之后

如果合约之前被 Alchemy 等整合查询服务收录,则需要确保更新后的合约与 Alchemy 等服务的查询兼容正常。
关于 Alchemy 查询合约可以参考这里 如果有收录需求,那么可以在这里提交 PR
测试网的合约和主网的合约都要保持在最新,以便于第三方开发者或钱包服务商能够基于 Secure Cadence 的版本进行查询和展示。

未来

目前的升级只是 Stable Cadence 的中间过渡状态,我们仍需要关注之后的 Cadence 版本的破坏性更新和迭代,以确保合约的使用者(用户)可以正常的使用合约。
目前已经进入了主网无许可升级的阶段,Flow 网络将会在第三季度开启无许可主网的部署,任何开发者都可以自由的部署自己的 Cadence 合约。
届时保证主网合约与版本兼容能够帮助更多的开发者顺利的整合现有的合约。
2022-06-29