From 0fd4949fbb54a90c418bf60b9ad1a808d0e2b21f Mon Sep 17 00:00:00 2001 From: John Letey Date: Wed, 13 Aug 2025 13:49:23 +0200 Subject: [PATCH 1/4] chore: bump dollar module --- api/generate.sh | 2 +- app.go | 1 + app.yaml | 2 -- go.mod | 2 +- go.sum | 4 ++-- upgrade/upgrade.go | 45 +++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 50 insertions(+), 6 deletions(-) diff --git a/api/generate.sh b/api/generate.sh index 89f26511..70144eee 100644 --- a/api/generate.sh +++ b/api/generate.sh @@ -9,7 +9,7 @@ buf export buf.build/cosmos/ibc:e69c8f372b127401762cb251bb7b60371b4cef29 --outpu buf export buf.build/noble-assets/aura:v2.0.0 --output api/proto buf export buf.build/noble-assets/authority:v1.0.3 --output api/proto buf export buf.build/noble-assets/cctp:4285c94ec19438ad1e05ba3e5106a5e7980cfffd --output api/proto -buf export buf.build/noble-assets/dollar:v2.1.0 --output api/proto +buf export buf.build/noble-assets/dollar:b025e05 --output api/proto buf export buf.build/noble-assets/fiattokenfactory:5f9bd9dd2c5b5336b94bae4a47195bdf035f04af --output api/proto buf export buf.build/noble-assets/florin:v2.0.0 --output api/proto buf export buf.build/noble-assets/forwarding:v2.0.2 --output api/proto diff --git a/app.go b/app.go index 5638fdf2..5555e3ee 100644 --- a/app.go +++ b/app.go @@ -471,6 +471,7 @@ func (app *App) RegisterUpgradeHandler() error { app.AccountKeeper.AddressCodec(), app.AuthorityKeeper, app.BankKeeper, + app.DollarKeeper, ), ) diff --git a/app.yaml b/app.yaml index 27b8a2c2..dc96f638 100644 --- a/app.yaml +++ b/app.yaml @@ -139,8 +139,6 @@ modules: denom: uusdn vaults_minimum_lock: 1e6 vaults_minimum_unlock: 1e6 - vaults_season_one_end_timestamp: 1754402400 # Aug 5th, 2025 @ 14:00 UTC - vaults_season_two_yield_collector: noble17m7dleu26hgwk842hrvfmh8mvrtp7p68k4zq8l - name: forwarding config: "@type": noble.forwarding.module.v1.Module diff --git a/go.mod b/go.mod index c404318e..e615e8f5 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( cosmossdk.io/x/evidence v0.1.1 cosmossdk.io/x/feegrant v0.1.1 cosmossdk.io/x/upgrade v0.1.4 - dollar.noble.xyz/v2 v2.1.0 + dollar.noble.xyz/v2 v2.1.1-0.20250813105000-b025e0501555 github.com/bcp-innovations/hyperlane-cosmos v1.0.1 github.com/circlefin/noble-cctp v0.0.0-20241031192117-4285c94ec194 github.com/circlefin/noble-fiattokenfactory v0.0.0-20250123235012-5f9bd9dd2c5b diff --git a/go.sum b/go.sum index 056fb1e1..6fda4ecc 100644 --- a/go.sum +++ b/go.sum @@ -227,8 +227,8 @@ cosmossdk.io/x/tx v0.13.8/go.mod h1:V6DImnwJMTq5qFjeGWpXNiT/fjgE4HtmclRmTqRVM3w= cosmossdk.io/x/upgrade v0.1.4 h1:/BWJim24QHoXde8Bc64/2BSEB6W4eTydq0X/2f8+g38= cosmossdk.io/x/upgrade v0.1.4/go.mod h1:9v0Aj+fs97O+Ztw+tG3/tp5JSlrmT7IcFhAebQHmOPo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -dollar.noble.xyz/v2 v2.1.0 h1:HUHo5aHAps/dxWe5N+0oEk0LbxXO++yCLI1pbuwFKf0= -dollar.noble.xyz/v2 v2.1.0/go.mod h1:ZPbvn4T4hu9aWBIXQVM3VsMUIWKPDNaKRDRVmXXFuGY= +dollar.noble.xyz/v2 v2.1.1-0.20250813105000-b025e0501555 h1:wcEiBRF7LbXUq+Mt38AUWG0eEwfYNB9OyZd3WPfxjA8= +dollar.noble.xyz/v2 v2.1.1-0.20250813105000-b025e0501555/go.mod h1:ZPbvn4T4hu9aWBIXQVM3VsMUIWKPDNaKRDRVmXXFuGY= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/4meepo/tagalign v1.3.4 h1:P51VcvBnf04YkHzjfclN6BbsopfJR5rxs1n+5zHt+w8= diff --git a/upgrade/upgrade.go b/upgrade/upgrade.go index 85b7678f..e0d03ffb 100644 --- a/upgrade/upgrade.go +++ b/upgrade/upgrade.go @@ -23,6 +23,8 @@ import ( "cosmossdk.io/core/address" "cosmossdk.io/log" upgradetypes "cosmossdk.io/x/upgrade/types" + dollarkeeper "dollar.noble.xyz/v2/keeper" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" @@ -36,6 +38,7 @@ func CreateUpgradeHandler( addressCodec address.Codec, authorityKeeper *authoritykeeper.Keeper, bankKeeper bankkeeper.Keeper, + dollarKeeper *dollarkeeper.Keeper, ) upgradetypes.UpgradeHandler { return func(ctx context.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { vm, err := mm.RunMigrations(ctx, cfg, vm) @@ -48,6 +51,11 @@ func CreateUpgradeHandler( return vm, err } + err = UpdateVaultsState(ctx, addressCodec, authorityKeeper, dollarKeeper) + if err != nil { + return vm, err + } + logger.Info(UpgradeASCII) return vm, nil @@ -85,3 +93,40 @@ func ClaimDistributionFunds(ctx context.Context, logger log.Logger, addressCodec return nil } + +// UpdateVaultsState sets state variables around Vaults Season One and Season +// Two. We do this so that we can remove these values from the app.yaml file, +// allowing us to ship one binary for both mainnet and testnet. +func UpdateVaultsState(ctx context.Context, addressCodec address.Codec, authorityKeeper *authoritykeeper.Keeper, dollarKeeper *dollarkeeper.Keeper) error { + switch sdk.UnwrapSDKContext(ctx).ChainID() { + case TestnetChainID: + err := dollarKeeper.VaultsSeasonOneEnded.Set(ctx, true) + if err != nil { + return errors.New("unable to mark vaults season one as ended") + } + + authority, err := authorityKeeper.Owner.Get(ctx) + if err != nil { + return errors.New("unable to get underlying authority address from state") + } + authorityBz, err := addressCodec.StringToBytes(authority) + if err != nil { + return errors.New("unable to decode underlying authority address") + } + err = dollarKeeper.VaultsSeasonTwoYieldCollector.Set(ctx, authorityBz) + if err != nil { + return errors.New("unable to set vaults season two yield collector") + } + case MainnetChainID: + // NOTE: Vaults Season One has already been marked as ended on mainnet + // via the v10.1 Ember upgrade, so we safely skip that update here. + + yieldCollector, _ := addressCodec.StringToBytes("noble17m7dleu26hgwk842hrvfmh8mvrtp7p68k4zq8l") + err := dollarKeeper.VaultsSeasonTwoYieldCollector.Set(ctx, yieldCollector) + if err != nil { + return errors.New("unable to set vaults season two yield collector") + } + } + + return nil +} From 68faa5f28847dd3bb513d41c1afc492f77f5475c Mon Sep 17 00:00:00 2001 From: John Letey Date: Mon, 25 Aug 2025 10:13:35 +0200 Subject: [PATCH 2/4] chore: review change, use tag --- api/generate.sh | 2 +- go.mod | 2 +- go.sum | 4 ++-- upgrade/upgrade.go | 7 +++++-- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/api/generate.sh b/api/generate.sh index 70144eee..128c0cc3 100644 --- a/api/generate.sh +++ b/api/generate.sh @@ -9,7 +9,7 @@ buf export buf.build/cosmos/ibc:e69c8f372b127401762cb251bb7b60371b4cef29 --outpu buf export buf.build/noble-assets/aura:v2.0.0 --output api/proto buf export buf.build/noble-assets/authority:v1.0.3 --output api/proto buf export buf.build/noble-assets/cctp:4285c94ec19438ad1e05ba3e5106a5e7980cfffd --output api/proto -buf export buf.build/noble-assets/dollar:b025e05 --output api/proto +buf export buf.build/noble-assets/dollar:v2.2.0-rc.0 --output api/proto buf export buf.build/noble-assets/fiattokenfactory:5f9bd9dd2c5b5336b94bae4a47195bdf035f04af --output api/proto buf export buf.build/noble-assets/florin:v2.0.0 --output api/proto buf export buf.build/noble-assets/forwarding:v2.0.2 --output api/proto diff --git a/go.mod b/go.mod index beb343a9..a77e6422 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( cosmossdk.io/x/evidence v0.1.1 cosmossdk.io/x/feegrant v0.1.1 cosmossdk.io/x/upgrade v0.1.4 - dollar.noble.xyz/v2 v2.1.1-0.20250813105000-b025e0501555 + dollar.noble.xyz/v2 v2.2.0-rc.0 github.com/bcp-innovations/hyperlane-cosmos v1.0.1 github.com/circlefin/noble-cctp v0.0.0-20241031192117-4285c94ec194 github.com/circlefin/noble-fiattokenfactory v0.0.0-20250123235012-5f9bd9dd2c5b diff --git a/go.sum b/go.sum index b33679a7..fca1ca33 100644 --- a/go.sum +++ b/go.sum @@ -645,8 +645,8 @@ cosmossdk.io/x/tx v0.13.8/go.mod h1:V6DImnwJMTq5qFjeGWpXNiT/fjgE4HtmclRmTqRVM3w= cosmossdk.io/x/upgrade v0.1.4 h1:/BWJim24QHoXde8Bc64/2BSEB6W4eTydq0X/2f8+g38= cosmossdk.io/x/upgrade v0.1.4/go.mod h1:9v0Aj+fs97O+Ztw+tG3/tp5JSlrmT7IcFhAebQHmOPo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -dollar.noble.xyz/v2 v2.1.1-0.20250813105000-b025e0501555 h1:wcEiBRF7LbXUq+Mt38AUWG0eEwfYNB9OyZd3WPfxjA8= -dollar.noble.xyz/v2 v2.1.1-0.20250813105000-b025e0501555/go.mod h1:ZPbvn4T4hu9aWBIXQVM3VsMUIWKPDNaKRDRVmXXFuGY= +dollar.noble.xyz/v2 v2.2.0-rc.0 h1:winjwoxv1jGELfXM6gR+ljdwh0MblCZyw1/1wG0u574= +dollar.noble.xyz/v2 v2.2.0-rc.0/go.mod h1:ZPbvn4T4hu9aWBIXQVM3VsMUIWKPDNaKRDRVmXXFuGY= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= diff --git a/upgrade/upgrade.go b/upgrade/upgrade.go index e0d03ffb..9989e848 100644 --- a/upgrade/upgrade.go +++ b/upgrade/upgrade.go @@ -121,8 +121,11 @@ func UpdateVaultsState(ctx context.Context, addressCodec address.Codec, authorit // NOTE: Vaults Season One has already been marked as ended on mainnet // via the v10.1 Ember upgrade, so we safely skip that update here. - yieldCollector, _ := addressCodec.StringToBytes("noble17m7dleu26hgwk842hrvfmh8mvrtp7p68k4zq8l") - err := dollarKeeper.VaultsSeasonTwoYieldCollector.Set(ctx, yieldCollector) + yieldCollector, err := addressCodec.StringToBytes("noble17m7dleu26hgwk842hrvfmh8mvrtp7p68k4zq8l") + if err != nil { + return errors.New("unable to decode vaults season two yield collector") + } + err = dollarKeeper.VaultsSeasonTwoYieldCollector.Set(ctx, yieldCollector) if err != nil { return errors.New("unable to set vaults season two yield collector") } From f2ba0010927e93fae646c9a4efc9c7ef9517535f Mon Sep 17 00:00:00 2001 From: John Letey Date: Mon, 25 Aug 2025 12:05:47 +0200 Subject: [PATCH 3/4] chore: update e2e genesis with new state --- e2e/utils.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/e2e/utils.go b/e2e/utils.go index 1aded93f..cda1b734 100644 --- a/e2e/utils.go +++ b/e2e/utils.go @@ -185,6 +185,9 @@ func modifyGenesisAll(nw *NobleWrapper, setupAllCircleRoles bool) func(cc ibc.Ch updatedGenesis = append(updatedGenesis, cosmos.NewGenesisKV("app_state.authority.owner", nw.Authority.FormattedAddress())) } + updatedGenesis = append(updatedGenesis, cosmos.NewGenesisKV("app_state.dollar.vaults.season_one_ended", true)) + updatedGenesis = append(updatedGenesis, cosmos.NewGenesisKV("app_state.dollar.vaults.season_two_yield_collector", nw.Authority.FormattedAddress())) + if setupAllCircleRoles { allFiatTFRoles := []cosmos.GenesisKV{ cosmos.NewGenesisKV("app_state.fiat-tokenfactory.masterMinter", fiattokenfactorytypes.MasterMinter{Address: nw.FiatTfRoles.MasterMinter.FormattedAddress()}), From 05cdd99c264abab05dc25a42672aad6409b2fd21 Mon Sep 17 00:00:00 2001 From: John Letey Date: Mon, 25 Aug 2025 12:18:42 +0200 Subject: [PATCH 4/4] chore: only update e2e genesis on v11+, fix localnet --- e2e/utils.go | 8 ++++++-- local_net/utils.sh | 2 ++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/e2e/utils.go b/e2e/utils.go index cda1b734..7046b39f 100644 --- a/e2e/utils.go +++ b/e2e/utils.go @@ -185,8 +185,12 @@ func modifyGenesisAll(nw *NobleWrapper, setupAllCircleRoles bool) func(cc ibc.Ch updatedGenesis = append(updatedGenesis, cosmos.NewGenesisKV("app_state.authority.owner", nw.Authority.FormattedAddress())) } - updatedGenesis = append(updatedGenesis, cosmos.NewGenesisKV("app_state.dollar.vaults.season_one_ended", true)) - updatedGenesis = append(updatedGenesis, cosmos.NewGenesisKV("app_state.dollar.vaults.season_two_yield_collector", nw.Authority.FormattedAddress())) + // Modify the genesis file with the appropriate Dollar Vaults Season One and Two state. + // For v10.1.0, we opt to not set this state as these values were hardcoded in the app wiring! + if cc.Images[0].Version != "v10.1.0" { + updatedGenesis = append(updatedGenesis, cosmos.NewGenesisKV("app_state.dollar.vaults.season_one_ended", true)) + updatedGenesis = append(updatedGenesis, cosmos.NewGenesisKV("app_state.dollar.vaults.season_two_yield_collector", nw.Authority.FormattedAddress())) + } if setupAllCircleRoles { allFiatTFRoles := []cosmos.GenesisKV{ diff --git a/local_net/utils.sh b/local_net/utils.sh index 6f78c5c3..b6cf1742 100644 --- a/local_net/utils.sh +++ b/local_net/utils.sh @@ -11,6 +11,8 @@ update_genesis() { touch $TEMP && jq '.app_state.bank.denom_metadata += [{ "description": "Hashnote US Yield Coin", "denom_units": [{ "denom": "uusyc", "exponent": 0, "aliases": ["microusyc"] }, { "denom": "usyc", "exponent": 6 }], "base": "uusyc", "display": "usyc", "name": "Hashnote US Yield Coin", "symbol": "USYC" }]' $HOME1/config/genesis.json > $TEMP && mv $TEMP $HOME1/config/genesis.json touch $TEMP && jq '.app_state.bank.denom_metadata += [{ "description": "Monerium EUR emoney", "denom_units": [{ "denom": "ueure", "exponent": 0, "aliases": ["microeure"] }, { "denom": "eure", "exponent": 6 }], "base": "ueure", "display": "eure", "name": "Monerium EUR emoney", "symbol": "EURe" }]' $HOME1/config/genesis.json > $TEMP && mv $TEMP $HOME1/config/genesis.json touch $TEMP && jq '.app_state.bank.denom_metadata += [{ "description": "Noble Dollar", "denom_units": [{ "denom": "uusdn", "exponent": 0, "aliases": ["microusdn"] }, { "denom": "usdn", "exponent": 6 }], "base": "uusdn", "display": "usdn", "name": "Noble Dollar", "symbol": "USDN" }]' $HOME1/config/genesis.json > $TEMP && mv $TEMP $HOME1/config/genesis.json + touch $TEMP && jq '.app_state.dollar.vaults.season_one_ended = true' $HOME1/config/genesis.json > $TEMP && mv $TEMP $HOME1/config/genesis.json + touch $TEMP && jq '.app_state.dollar.vaults.season_two_yield_collector = '$AUTHORITY'' $HOME1/config/genesis.json > $TEMP && mv $TEMP $HOME1/config/genesis.json touch $TEMP && jq '.app_state."fiat-tokenfactory".mintingDenom = { "denom": "uusdc" }' $HOME1/config/genesis.json > $TEMP && mv $TEMP $HOME1/config/genesis.json touch $TEMP && jq '.app_state."fiat-tokenfactory".paused.paused = false' $HOME1/config/genesis.json > $TEMP && mv $TEMP $HOME1/config/genesis.json touch $TEMP && jq '.app_state.staking.params.bond_denom = "ustake"' $HOME1/config/genesis.json > $TEMP && mv $TEMP $HOME1/config/genesis.json