Cosmos SDK升级指南:从v0.50.x到v0.53.x版本迁移详解

Cosmos SDK升级指南:从v0.50.x到v0.53.x版本迁移详解

cosmos-sdk :chains: A Framework for Building High Value Public Blockchains :sparkles: cosmos-sdk 项目地址: https://gitcode.com/gh_mirrors/co/cosmos-sdk

前言

本文为Cosmos SDK区块链开发者提供从v0.50.x版本升级到v0.53.x版本的完整指南。作为区块链基础设施的核心框架,Cosmos SDK的版本升级往往伴随着重要功能改进和架构调整。本文将详细介绍升级过程中的必改项和可选功能,帮助开发者顺利完成迁移。

升级概览

本次升级包含一个必须修改项和三个可选功能

必须修改项

  • 应用布线变更(App Wiring Changes)

可选功能

  1. 添加ProtocolPool模块
  2. 添加Epochs模块
  3. 启用无序交易支持

完成升级后,应用将获得上述新功能模块的支持。

一、必须修改项:应用布线变更

在v0.53.x版本中,x/auth模块新增了PreBlocker功能,开发者必须将其添加到模块管理器的SetOrderPreBlockers方法中。

app.ModuleManager.SetOrderPreBlockers(
    upgradetypes.ModuleName,
    authtypes.ModuleName, // 新增项
)

这项变更是为了确保在区块处理前正确执行账户相关的预处理逻辑。

二、可选功能:ProtocolPool模块

ProtocolPool模块提供了一个独立于传统分发模块的社区资金池管理方案。需要注意的是,启用此模块后,x/distribution模块中的相关功能将不再可用。

手动布线实现

  1. 导入必要包
import (
    "github.com/cosmos/cosmos-sdk/x/protocolpool"
    protocolpoolkeeper "github.com/cosmos/cosmos-sdk/x/protocolpool/keeper"
    protocolpooltypes "github.com/cosmos/cosmos-sdk/x/protocolpool/types"
)
  1. 设置模块账户权限
maccPerms = map[string][]string{
    protocolpooltypes.ModuleName:                nil,
    protocolpooltypes.ProtocolPoolEscrowAccount: nil,
}
  1. 初始化Keeper(需在分发模块之前):
app.ProtocolPoolKeeper = protocolpoolkeeper.NewKeeper(
    appCodec,
    runtime.NewKVStoreService(keys[protocolpooltypes.StoreKey]),
    app.AccountKeeper,
    app.BankKeeper,
    authtypes.NewModuleAddress(govtypes.ModuleName).String(),
)
  1. 将ProtocolPool Keeper传递给分发模块
app.DistrKeeper = distrkeeper.NewKeeper(
    // ...其他参数
    distrkeeper.WithExternalCommunityPool(app.ProtocolPoolKeeper),
)
  1. 模块顺序配置
app.ModuleManager.SetOrderBeginBlockers(
    distrtypes.ModuleName,
    protocolpooltypes.ModuleName,
)

依赖注入(DI)实现

使用依赖注入方式更简洁:

  1. 配置模块账户权限
moduleAccPerms = []*authmodulev1.ModuleAccountPermission{
    {Account: protocolpooltypes.ModuleName},
    {Account: protocolpooltypes.ProtocolPoolEscrowAccount},
}
  1. 模块配置
{
    Name:   protocolpooltypes.ModuleName,
    Config: appconfig.WrapAny(&protocolpoolmodulev1.Module{}),
}

三、可选功能:Epochs模块

Epochs模块提供了周期性的区块触发机制,适用于需要定期执行的任务。

手动布线实现

  1. 初始化Keeper
app.EpochsKeeper = epochskeeper.NewKeeper(
    runtime.NewKVStoreService(keys[epochstypes.StoreKey]),
    appCodec,
)
  1. 设置钩子函数
app.EpochsKeeper.SetHooks(
    epochstypes.NewMultiEpochHooks(
        app.SomeOtherModule, // 你的业务模块
    ),
)
  1. 模块顺序配置
app.ModuleManager.SetOrderBeginBlockers(
    epochstypes.ModuleName,
)

依赖注入实现

  1. 模块配置
{
    Name:   epochstypes.ModuleName,
    Config: appconfig.WrapAny(&epochsmodulev1.Module{}),
}

四、可选功能:无序交易支持

v0.53.x版本引入了无序交易支持,为交易处理提供了更大的灵活性。

启用方式

  1. 配置Account Keeper
app.AccountKeeper = authkeeper.NewAccountKeeper(
    // ...其他参数
    authkeeper.WithUnorderedTransactions(true),
)
  1. 注意事项
  • 无序交易的sequence值必须为0
  • 默认超时时间为10分钟
  • 默认gas费用为2240单位
  1. 自定义参数
ante.NewSigVerificationDecorator(
    options.AccountKeeper,
    options.SignModeHandler,
    ante.WithUnorderedTxGasCost(customGasCost),
    ante.WithMaxUnorderedTxTimeoutDuration(customDuration),
)

五、升级处理器实现

升级处理器需要为新模块添加存储升级配置:

storeUpgrades := storetypes.StoreUpgrades{
    Added: []string{
        epochstypes.ModuleName,    // 如未添加则移除
        protocolpooltypes.ModuleName, // 如未添加则移除
    },
}

结语

本文详细介绍了Cosmos SDK从v0.50.x升级到v0.53.x版本的关键步骤。开发者应根据自身业务需求选择性地实现可选功能。特别提醒,在升级生产环境前,务必在测试网充分验证所有变更,确保升级过程平稳顺利。

cosmos-sdk :chains: A Framework for Building High Value Public Blockchains :sparkles: cosmos-sdk 项目地址: https://gitcode.com/gh_mirrors/co/cosmos-sdk

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翟桔贞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值