From 28bc842ed691e6a7ecf284177fe1e7284f5678b3 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 6 Nov 2023 18:50:24 +0100 Subject: [PATCH] chore: prepare `v4.0.0` (backport #260) (#262) Co-authored-by: John Letey --- .changelog/epilogue.md | 2 +- .../bug-fixes/253-ledger-macos-sonoma.md | 1 - .../features/215-rosetta-support.md | 1 - .../v4.0.0/bug-fixes/252-simulation-tests.md | 1 + .../bug-fixes/253-ledger-macos-sonoma.md | 1 + .../dependencies/250-bump-ibc.md | 0 .../dependencies/250-bump-pfm.md | 0 .../v4.0.0/features/215-rosetta-support.md | 1 + .../improvements/241-ftf-interface-changes.md | 1 + .changelog/v4.0.0/summary.md | 5 ++ CHANGELOG.md | 28 +++++++- app/app.go | 3 +- app/upgrades/argon/constants.go | 6 -- app/upgrades/argon/upgrade.go | 52 ++++++++------- interchaintest/cctp_deposit_for_burn_test.go | 16 ++--- .../cctp_deposit_for_burn_with_caller_test.go | 16 ++--- interchaintest/cctp_receive_message_test.go | 8 +-- .../cctp_receive_message_with_caller_test.go | 8 +-- .../cctp_replace_deposit_for_burn_test.go | 4 +- interchaintest/genesis_test.go | 64 +++++-------------- interchaintest/ibc_bps_fee_test.go | 22 +++---- interchaintest/noble_test.go | 4 +- interchaintest/upgrade_argon_test.go | 11 ++-- interchaintest/upgrade_grand-1_test.go | 10 +-- interchaintest/upgrade_noble-1_test.go | 14 +++- 25 files changed, 140 insertions(+), 139 deletions(-) delete mode 100644 .changelog/unreleased/bug-fixes/253-ledger-macos-sonoma.md delete mode 100644 .changelog/unreleased/features/215-rosetta-support.md create mode 100644 .changelog/v4.0.0/bug-fixes/252-simulation-tests.md create mode 100644 .changelog/v4.0.0/bug-fixes/253-ledger-macos-sonoma.md rename .changelog/{unreleased => v4.0.0}/dependencies/250-bump-ibc.md (100%) rename .changelog/{unreleased => v4.0.0}/dependencies/250-bump-pfm.md (100%) create mode 100644 .changelog/v4.0.0/features/215-rosetta-support.md create mode 100644 .changelog/v4.0.0/improvements/241-ftf-interface-changes.md create mode 100644 .changelog/v4.0.0/summary.md diff --git a/.changelog/epilogue.md b/.changelog/epilogue.md index b9b22a21..a9e42616 100644 --- a/.changelog/epilogue.md +++ b/.changelog/epilogue.md @@ -2,4 +2,4 @@ ## Previous Changes -This changelog has yet to be fully initialized. For previous verions please refer to the release notes for a summary of changes. +This changelog has yet to be fully initialized. For previous versions please refer to the release notes for a summary of changes. diff --git a/.changelog/unreleased/bug-fixes/253-ledger-macos-sonoma.md b/.changelog/unreleased/bug-fixes/253-ledger-macos-sonoma.md deleted file mode 100644 index fdb5abac..00000000 --- a/.changelog/unreleased/bug-fixes/253-ledger-macos-sonoma.md +++ /dev/null @@ -1 +0,0 @@ -- Fix Ledger support for MacOS Sonoma. ([#253](https://github.com/strangelove-ventures/noble/pull/253)) diff --git a/.changelog/unreleased/features/215-rosetta-support.md b/.changelog/unreleased/features/215-rosetta-support.md deleted file mode 100644 index 6439d94b..00000000 --- a/.changelog/unreleased/features/215-rosetta-support.md +++ /dev/null @@ -1 +0,0 @@ -- Support for Coinbase's [Rosetta API](https://docs.cloud.coinbase.com/rosetta/docs/welcome). ([#215](https://github.com/strangelove-ventures/noble/pull/215)) diff --git a/.changelog/v4.0.0/bug-fixes/252-simulation-tests.md b/.changelog/v4.0.0/bug-fixes/252-simulation-tests.md new file mode 100644 index 00000000..03a18830 --- /dev/null +++ b/.changelog/v4.0.0/bug-fixes/252-simulation-tests.md @@ -0,0 +1 @@ +- Fix simulation tests. ([#252](https://github.com/strangelove-ventures/noble/pull/252)) diff --git a/.changelog/v4.0.0/bug-fixes/253-ledger-macos-sonoma.md b/.changelog/v4.0.0/bug-fixes/253-ledger-macos-sonoma.md new file mode 100644 index 00000000..0d102856 --- /dev/null +++ b/.changelog/v4.0.0/bug-fixes/253-ledger-macos-sonoma.md @@ -0,0 +1 @@ +- Fix Ledger support for macOS Sonoma. ([#253](https://github.com/strangelove-ventures/noble/pull/253)) diff --git a/.changelog/unreleased/dependencies/250-bump-ibc.md b/.changelog/v4.0.0/dependencies/250-bump-ibc.md similarity index 100% rename from .changelog/unreleased/dependencies/250-bump-ibc.md rename to .changelog/v4.0.0/dependencies/250-bump-ibc.md diff --git a/.changelog/unreleased/dependencies/250-bump-pfm.md b/.changelog/v4.0.0/dependencies/250-bump-pfm.md similarity index 100% rename from .changelog/unreleased/dependencies/250-bump-pfm.md rename to .changelog/v4.0.0/dependencies/250-bump-pfm.md diff --git a/.changelog/v4.0.0/features/215-rosetta-support.md b/.changelog/v4.0.0/features/215-rosetta-support.md new file mode 100644 index 00000000..fdc5d7da --- /dev/null +++ b/.changelog/v4.0.0/features/215-rosetta-support.md @@ -0,0 +1 @@ +- Include support for Coinbase's [Rosetta API](https://docs.cloud.coinbase.com/rosetta/docs/welcome). ([#215](https://github.com/strangelove-ventures/noble/pull/215)) diff --git a/.changelog/v4.0.0/improvements/241-ftf-interface-changes.md b/.changelog/v4.0.0/improvements/241-ftf-interface-changes.md new file mode 100644 index 00000000..940a4309 --- /dev/null +++ b/.changelog/v4.0.0/improvements/241-ftf-interface-changes.md @@ -0,0 +1 @@ +- Add `x/fiattokenfactory` interface changes required for CCTP. ([#241](https://github.com/strangelove-ventures/noble/pull/241)) diff --git a/.changelog/v4.0.0/summary.md b/.changelog/v4.0.0/summary.md new file mode 100644 index 00000000..f2997a08 --- /dev/null +++ b/.changelog/v4.0.0/summary.md @@ -0,0 +1,5 @@ +*Nov 6, 2023* + +This is the long awaited Argon major release of Noble. It introduces a new [`x/cctp`](https://github.com/circlefin/noble-cctp) module that implements Circle's [Cross Chain Transfer Protocol (CCTP)](https://www.circle.com/en/cross-chain-transfer-protocol), allowing native $USDC transfers between supported EVM networks and Noble (with many more networks to come). + +Along with the integration of the CCTP module, the following changes were made. diff --git a/CHANGELOG.md b/CHANGELOG.md index 72c80abc..0b9ed579 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,31 @@ # CHANGELOG +## v4.0.0 + +*Nov 6, 2023* + +This is the long awaited Argon major release of Noble. It introduces a new [`x/cctp`](https://github.com/circlefin/noble-cctp) module that implements Circle's [Cross Chain Transfer Protocol (CCTP)](https://www.circle.com/en/cross-chain-transfer-protocol), allowing native $USDC transfers between supported EVM networks and Noble (with many more networks to come). + +Along with the integration of the CCTP module, the following changes were made. + +### BUG FIXES + +- Fix simulation tests. ([#252](https://github.com/strangelove-ventures/noble/pull/252)) +- Fix Ledger support for macOS Sonoma. ([#253](https://github.com/strangelove-ventures/noble/pull/253)) + +### DEPENDENCIES + +- Bump IBC to [`v4.5.1`](https://github.com/cosmos/ibc-go/releases/tag/v4.5.1) ([#250](https://github.com/strangelove-ventures/noble/pull/250)) +- Bump Packet Forward Middleware to [`v4.1.1`](https://github.com/cosmos/ibc-apps/releases/tag/middleware%2Fpacket-forward-middleware%2Fv4.1.1) ([#250](https://github.com/strangelove-ventures/noble/pull/250), [#258](https://github.com/strangelove-ventures/noble/pull/258)) + +### FEATURES + +- Include support for Coinbase's [Rosetta API](https://docs.cloud.coinbase.com/rosetta/docs/welcome). ([#215](https://github.com/strangelove-ventures/noble/pull/215)) + +### IMPROVEMENTS + +- Add `x/fiattokenfactory` interface changes required for CCTP. ([#241](https://github.com/strangelove-ventures/noble/pull/241)) + ## v3.1.0 *Sep 15, 2023* @@ -20,5 +46,5 @@ In response to multiple IBC channels expiring on Noble's mainnet network, it was ## Previous Changes -This changelog has yet to be fully initialized. For previous verions please refer to the release notes for a summary of changes. +This changelog has yet to be fully initialized. For previous versions please refer to the release notes for a summary of changes. diff --git a/app/app.go b/app/app.go index a1846419..5e5d3983 100644 --- a/app/app.go +++ b/app/app.go @@ -892,9 +892,8 @@ func (app *App) setupUpgradeHandlers() { argon.CreateUpgradeHandler( app.mm, app.configurator, - app.FiatTokenFactoryKeeper, - app.ParamsKeeper, app.CCTPKeeper, + app.FiatTokenFactoryKeeper, ), ) diff --git a/app/upgrades/argon/constants.go b/app/upgrades/argon/constants.go index 7ec99c68..09ac6106 100644 --- a/app/upgrades/argon/constants.go +++ b/app/upgrades/argon/constants.go @@ -2,9 +2,3 @@ package argon // UpgradeName is the name of this specific software upgrade used on-chain. const UpgradeName = "argon" - -// TestnetChainID is the Chain ID of the Noble testnet (Grand). -const TestnetChainID = "grand-1" - -// MainnetChainID is the Chain ID of the Noble mainnet. -const MainnetChainID = "noble-1" diff --git a/app/upgrades/argon/upgrade.go b/app/upgrades/argon/upgrade.go index 8c755641..a7ae6ae9 100644 --- a/app/upgrades/argon/upgrade.go +++ b/app/upgrades/argon/upgrade.go @@ -1,51 +1,49 @@ package argon import ( - "fmt" - "cosmossdk.io/math" cctpkeeper "github.com/circlefin/noble-cctp/x/cctp/keeper" cctptypes "github.com/circlefin/noble-cctp/x/cctp/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - upgradeTypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" fiattokenfactorykeeper "github.com/strangelove-ventures/noble/x/fiattokenfactory/keeper" - paramauthoritykeeper "github.com/strangelove-ventures/paramauthority/x/params/keeper" ) func CreateUpgradeHandler( mm *module.Manager, configurator module.Configurator, - fiatTFKeeper *fiattokenfactorykeeper.Keeper, - paramauthoritykeeper paramauthoritykeeper.Keeper, cctpKeeper *cctpkeeper.Keeper, -) upgradeTypes.UpgradeHandler { - return func(ctx sdk.Context, _ upgradeTypes.Plan, vm module.VersionMap) (module.VersionMap, error) { - var cctpAuthority string - paramAuthority := paramauthoritykeeper.GetAuthority(ctx) - if ctx.ChainID() == TestnetChainID { - cctpAuthority = paramAuthority - } else { - owner, ok := fiatTFKeeper.GetOwner(ctx) - if !ok { - return nil, fmt.Errorf("fiat token factory owner not found") - } - - cctpAuthority = owner.Address + fiatTokenFactoryKeeper *fiattokenfactorykeeper.Keeper, +) upgradetypes.UpgradeHandler { + return func(ctx sdk.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + vm, err := mm.RunMigrations(ctx, configurator, vm) + if err != nil { + return vm, nil } - denom := fiatTFKeeper.GetMintingDenom(ctx) + cctpKeeper.SetOwner(ctx, "noble1ye45j5c5gks2r68z6s8k9aehma372r927nuze4") + cctpKeeper.SetAttesterManager(ctx, "noble1ak4d4dsrx5ec37h3qpsm8x6kg39xy0d0l8ptdq") + cctpKeeper.SetPauser(ctx, "noble1cnl6q0c7g3aq8fjgeh9ygy5p2gv83kxqp4pfw4") + cctpKeeper.SetTokenController(ctx, "noble1ye45j5c5gks2r68z6s8k9aehma372r927nuze4") + + // The below attesters are obtained from Circle's Iris API. + // https://iris-api.circle.com/v1/publicKeys + cctpKeeper.SetAttester(ctx, cctptypes.Attester{Attester: "0x04702317a335170cb26fef7577eeb5009451f72aca4ac5c03e330f68dd6a0d73728d2047346f216d9f3abc0337e77ed5e3b4995cd60cfa92f523faa29bce34e08b"}) + cctpKeeper.SetAttester(ctx, cctptypes.Attester{Attester: "0x0414f25da528fa94f46f081d4be46bcee81cb873297072cfcff0d60737e649d52158bebd0ed79f87959f152e0bb737de80574f79828b21c2b7e8a30b10fd6a56c5"}) + + denom := fiatTokenFactoryKeeper.GetMintingDenom(ctx) + cctpKeeper.SetPerMessageBurnLimit(ctx, cctptypes.PerMessageBurnLimit{ + Denom: denom.Denom, + Amount: math.NewInt(1_000_000_000_000), + }) - cctpKeeper.SetOwner(ctx, cctpAuthority) - cctpKeeper.SetAttesterManager(ctx, cctpAuthority) - cctpKeeper.SetPauser(ctx, cctpAuthority) - cctpKeeper.SetTokenController(ctx, cctpAuthority) - cctpKeeper.SetPerMessageBurnLimit(ctx, cctptypes.PerMessageBurnLimit{Denom: denom.Denom, Amount: math.NewInt(99999999)}) cctpKeeper.SetBurningAndMintingPaused(ctx, cctptypes.BurningAndMintingPaused{Paused: false}) cctpKeeper.SetSendingAndReceivingMessagesPaused(ctx, cctptypes.SendingAndReceivingMessagesPaused{Paused: false}) - cctpKeeper.SetMaxMessageBodySize(ctx, cctptypes.MaxMessageBodySize{Amount: 8000}) + + cctpKeeper.SetMaxMessageBodySize(ctx, cctptypes.MaxMessageBodySize{Amount: 8192}) cctpKeeper.SetSignatureThreshold(ctx, cctptypes.SignatureThreshold{Amount: 2}) - return mm.RunMigrations(ctx, configurator, vm) + return vm, nil } } diff --git a/interchaintest/cctp_deposit_for_burn_test.go b/interchaintest/cctp_deposit_for_burn_test.go index a0357fee..5dd0a11c 100644 --- a/interchaintest/cctp_deposit_for_burn_test.go +++ b/interchaintest/cctp_deposit_for_burn_test.go @@ -78,12 +78,12 @@ func TestCCTP_DepositForBurn(t *testing.T) { require.NoError(t, err, "failed to execute configure minter controller tx") _, err = nobleValidator.ExecTx(ctx, gw.fiatTfRoles.MinterController.KeyName(), - "fiat-tokenfactory", "configure-minter", gw.fiatTfRoles.Minter.FormattedAddress(), "1000000000000"+denomMetadataDrachma.Base, "-b", "block", + "fiat-tokenfactory", "configure-minter", gw.fiatTfRoles.Minter.FormattedAddress(), "1000000000000"+denomMetadataUsdc.Base, "-b", "block", ) require.NoError(t, err, "failed to execute configure minter tx") _, err = nobleValidator.ExecTx(ctx, gw.fiatTfRoles.Minter.KeyName(), - "fiat-tokenfactory", "mint", gw.extraWallets.User.FormattedAddress(), "1000000000000"+denomMetadataDrachma.Base, "-b", "block", + "fiat-tokenfactory", "mint", gw.extraWallets.User.FormattedAddress(), "1000000000000"+denomMetadataUsdc.Base, "-b", "block", ) require.NoError(t, err, "failed to execute mint to user tx") @@ -93,7 +93,7 @@ func TestCCTP_DepositForBurn(t *testing.T) { require.NoError(t, err, "failed to configure cctp minter controller") _, err = nobleValidator.ExecTx(ctx, gw.fiatTfRoles.MinterController.KeyName(), - "fiat-tokenfactory", "configure-minter", cctptypes.ModuleAddress.String(), "1000000000000"+denomMetadataDrachma.Base, "-b", "block", + "fiat-tokenfactory", "configure-minter", cctptypes.ModuleAddress.String(), "1000000000000"+denomMetadataUsdc.Base, "-b", "block", ) require.NoError(t, err, "failed to configure cctp minter") @@ -122,7 +122,7 @@ func TestCCTP_DepositForBurn(t *testing.T) { From: gw.fiatTfRoles.Owner.FormattedAddress(), RemoteDomain: 0, RemoteToken: burnToken, - LocalToken: denomMetadataDrachma.Base, + LocalToken: denomMetadataUsdc.Base, }) bCtx, bCancel := context.WithTimeout(ctx, 20*time.Second) @@ -137,7 +137,7 @@ func TestCCTP_DepositForBurn(t *testing.T) { require.NoError(t, err, "error configuring remote domain") require.Zero(t, tx.Code, "configuring remote domain failed: %s - %s - %s", tx.Codespace, tx.RawLog, tx.Data) - beforeBurnBal, err := noble.GetBalance(ctx, gw.extraWallets.User.FormattedAddress(), denomMetadataDrachma.Base) + beforeBurnBal, err := noble.GetBalance(ctx, gw.extraWallets.User.FormattedAddress(), denomMetadataUsdc.Base) require.NoError(t, err) mintRecipient := make([]byte, 32) @@ -146,7 +146,7 @@ func TestCCTP_DepositForBurn(t *testing.T) { depositForBurnNoble := &cctptypes.MsgDepositForBurn{ From: gw.extraWallets.User.FormattedAddress(), Amount: cosmossdk_io_math.NewInt(1000000), - BurnToken: denomMetadataDrachma.Base, + BurnToken: denomMetadataUsdc.Base, DestinationDomain: 0, MintRecipient: mintRecipient, } @@ -160,7 +160,7 @@ func TestCCTP_DepositForBurn(t *testing.T) { require.NoError(t, err, "error broadcasting msgDepositForBurn") require.Zero(t, tx.Code, "msgDepositForBurn failed: %s - %s - %s", tx.Codespace, tx.RawLog, tx.Data) - afterBurnBal, err := noble.GetBalance(ctx, gw.extraWallets.User.FormattedAddress(), denomMetadataDrachma.Base) + afterBurnBal, err := noble.GetBalance(ctx, gw.extraWallets.User.FormattedAddress(), denomMetadataUsdc.Base) require.NoError(t, err) require.Equal(t, afterBurnBal, beforeBurnBal-1000000) @@ -173,7 +173,7 @@ func TestCCTP_DepositForBurn(t *testing.T) { depositForBurn, ok := parsedEvent.(*cctptypes.DepositForBurn) require.True(t, ok) - expectedBurnToken := hex.EncodeToString(crypto.Keccak256([]byte(denomMetadataDrachma.Base))) + expectedBurnToken := hex.EncodeToString(crypto.Keccak256([]byte(denomMetadataUsdc.Base))) require.Equal(t, uint64(0), depositForBurn.Nonce) require.Equal(t, expectedBurnToken, depositForBurn.BurnToken) diff --git a/interchaintest/cctp_deposit_for_burn_with_caller_test.go b/interchaintest/cctp_deposit_for_burn_with_caller_test.go index 22cf4a18..37378481 100644 --- a/interchaintest/cctp_deposit_for_burn_with_caller_test.go +++ b/interchaintest/cctp_deposit_for_burn_with_caller_test.go @@ -78,12 +78,12 @@ func TestCCTP_DepositForBurnWithCaller(t *testing.T) { require.NoError(t, err, "failed to execute configure minter controller tx") _, err = nobleValidator.ExecTx(ctx, gw.fiatTfRoles.MinterController.KeyName(), - "fiat-tokenfactory", "configure-minter", gw.fiatTfRoles.Minter.FormattedAddress(), "1000000000000"+denomMetadataDrachma.Base, "-b", "block", + "fiat-tokenfactory", "configure-minter", gw.fiatTfRoles.Minter.FormattedAddress(), "1000000000000"+denomMetadataUsdc.Base, "-b", "block", ) require.NoError(t, err, "failed to execute configure minter tx") _, err = nobleValidator.ExecTx(ctx, gw.fiatTfRoles.Minter.KeyName(), - "fiat-tokenfactory", "mint", gw.extraWallets.User.FormattedAddress(), "1000000000000"+denomMetadataDrachma.Base, "-b", "block", + "fiat-tokenfactory", "mint", gw.extraWallets.User.FormattedAddress(), "1000000000000"+denomMetadataUsdc.Base, "-b", "block", ) require.NoError(t, err, "failed to execute mint to user tx") @@ -93,7 +93,7 @@ func TestCCTP_DepositForBurnWithCaller(t *testing.T) { require.NoError(t, err, "failed to configure cctp minter controller") _, err = nobleValidator.ExecTx(ctx, gw.fiatTfRoles.MinterController.KeyName(), - "fiat-tokenfactory", "configure-minter", cctptypes.ModuleAddress.String(), "1000000000000"+denomMetadataDrachma.Base, "-b", "block", + "fiat-tokenfactory", "configure-minter", cctptypes.ModuleAddress.String(), "1000000000000"+denomMetadataUsdc.Base, "-b", "block", ) require.NoError(t, err, "failed to configure cctp minter") @@ -122,7 +122,7 @@ func TestCCTP_DepositForBurnWithCaller(t *testing.T) { From: gw.fiatTfRoles.Owner.FormattedAddress(), RemoteDomain: 0, RemoteToken: burnToken, - LocalToken: denomMetadataDrachma.Base, + LocalToken: denomMetadataUsdc.Base, }) bCtx, bCancel := context.WithTimeout(ctx, 20*time.Second) @@ -137,7 +137,7 @@ func TestCCTP_DepositForBurnWithCaller(t *testing.T) { require.NoError(t, err, "error configuring remote domain") require.Zero(t, tx.Code, "configuring remote domain failed: %s - %s - %s", tx.Codespace, tx.RawLog, tx.Data) - beforeBurnBal, err := noble.GetBalance(ctx, gw.extraWallets.User.FormattedAddress(), denomMetadataDrachma.Base) + beforeBurnBal, err := noble.GetBalance(ctx, gw.extraWallets.User.FormattedAddress(), denomMetadataUsdc.Base) require.NoError(t, err) mintRecipient := make([]byte, 32) @@ -148,7 +148,7 @@ func TestCCTP_DepositForBurnWithCaller(t *testing.T) { depositForBurnWithCallerNoble := &cctptypes.MsgDepositForBurnWithCaller{ From: gw.extraWallets.User.FormattedAddress(), Amount: cosmossdk_io_math.NewInt(1000000), - BurnToken: denomMetadataDrachma.Base, + BurnToken: denomMetadataUsdc.Base, DestinationDomain: 0, MintRecipient: mintRecipient, DestinationCaller: destinationCaller, @@ -163,7 +163,7 @@ func TestCCTP_DepositForBurnWithCaller(t *testing.T) { require.NoError(t, err, "error broadcasting msgDepositForBurnWithCaller") require.Zero(t, tx.Code, "msgDepositForBurnWithCaller failed: %s - %s - %s", tx.Codespace, tx.RawLog, tx.Data) - afterBurnBal, err := noble.GetBalance(ctx, gw.extraWallets.User.FormattedAddress(), denomMetadataDrachma.Base) + afterBurnBal, err := noble.GetBalance(ctx, gw.extraWallets.User.FormattedAddress(), denomMetadataUsdc.Base) require.NoError(t, err) require.Equal(t, afterBurnBal, beforeBurnBal-1000000) @@ -176,7 +176,7 @@ func TestCCTP_DepositForBurnWithCaller(t *testing.T) { depositForBurn, ok := parsedEvent.(*cctptypes.DepositForBurn) require.True(t, ok) - expectedBurnToken := hex.EncodeToString(crypto.Keccak256([]byte(denomMetadataDrachma.Base))) + expectedBurnToken := hex.EncodeToString(crypto.Keccak256([]byte(denomMetadataUsdc.Base))) require.Equal(t, uint64(0), depositForBurn.Nonce) require.Equal(t, expectedBurnToken, depositForBurn.BurnToken) diff --git a/interchaintest/cctp_receive_message_test.go b/interchaintest/cctp_receive_message_test.go index f9adb2cf..327587cd 100644 --- a/interchaintest/cctp_receive_message_test.go +++ b/interchaintest/cctp_receive_message_test.go @@ -111,7 +111,7 @@ func TestCCTP_ReceiveMessage(t *testing.T) { From: gw.fiatTfRoles.Owner.FormattedAddress(), RemoteDomain: 0, RemoteToken: burnToken, - LocalToken: denomMetadataDrachma.Base, + LocalToken: denomMetadataUsdc.Base, }) bCtx, bCancel := context.WithTimeout(ctx, 20*time.Second) @@ -128,7 +128,7 @@ func TestCCTP_ReceiveMessage(t *testing.T) { t.Logf("Submitted add public keys tx: %s", tx.TxHash) - bCtx, bCancel = context.WithTimeout(ctx, 20*time.Second) + _, bCancel = context.WithTimeout(ctx, 20*time.Second) defer bCancel() nobleValidator := noble.Validators[0] @@ -141,7 +141,7 @@ func TestCCTP_ReceiveMessage(t *testing.T) { require.NoError(t, err, "failed to execute configure minter controller tx") _, err = nobleValidator.ExecTx(ctx, gw.fiatTfRoles.MinterController.KeyName(), - "fiat-tokenfactory", "configure-minter", cctpModuleAccount, "1000000"+denomMetadataDrachma.Base, "-b", "block", + "fiat-tokenfactory", "configure-minter", cctpModuleAccount, "1000000"+denomMetadataUsdc.Base, "-b", "block", ) require.NoError(t, err, "failed to execute configure minter tx") @@ -222,7 +222,7 @@ func TestCCTP_ReceiveMessage(t *testing.T) { t.Logf("CCTP burn message successfully received: %s", tx.TxHash) - balance, err := noble.GetBalance(ctx, nobleReceiver, denomMetadataDrachma.Base) + balance, err := noble.GetBalance(ctx, nobleReceiver, denomMetadataUsdc.Base) require.NoError(t, err) require.Equal(t, int64(1000000), balance) diff --git a/interchaintest/cctp_receive_message_with_caller_test.go b/interchaintest/cctp_receive_message_with_caller_test.go index fa974b41..baa4d976 100644 --- a/interchaintest/cctp_receive_message_with_caller_test.go +++ b/interchaintest/cctp_receive_message_with_caller_test.go @@ -111,7 +111,7 @@ func TestCCTP_ReceiveMessageWithCaller(t *testing.T) { From: gw.fiatTfRoles.Owner.FormattedAddress(), RemoteDomain: 0, RemoteToken: burnToken, - LocalToken: denomMetadataDrachma.Base, + LocalToken: denomMetadataUsdc.Base, }) bCtx, bCancel := context.WithTimeout(ctx, 20*time.Second) @@ -128,7 +128,7 @@ func TestCCTP_ReceiveMessageWithCaller(t *testing.T) { t.Logf("Submitted add public keys tx: %s", tx.TxHash) - bCtx, bCancel = context.WithTimeout(ctx, 20*time.Second) + _, bCancel = context.WithTimeout(ctx, 20*time.Second) defer bCancel() nobleValidator := noble.Validators[0] @@ -141,7 +141,7 @@ func TestCCTP_ReceiveMessageWithCaller(t *testing.T) { require.NoError(t, err, "failed to execute configure minter controller tx") _, err = nobleValidator.ExecTx(ctx, gw.fiatTfRoles.MinterController.KeyName(), - "fiat-tokenfactory", "configure-minter", cctpModuleAccount, "1000000"+denomMetadataDrachma.Base, "-b", "block", + "fiat-tokenfactory", "configure-minter", cctpModuleAccount, "1000000"+denomMetadataUsdc.Base, "-b", "block", ) require.NoError(t, err, "failed to execute configure minter tx") @@ -223,7 +223,7 @@ func TestCCTP_ReceiveMessageWithCaller(t *testing.T) { t.Logf("CCTP burn message successfully received: %s", tx.TxHash) - balance, err := noble.GetBalance(ctx, nobleReceiver, denomMetadataDrachma.Base) + balance, err := noble.GetBalance(ctx, nobleReceiver, denomMetadataUsdc.Base) require.NoError(t, err) require.Equal(t, int64(1000000), balance) diff --git a/interchaintest/cctp_replace_deposit_for_burn_test.go b/interchaintest/cctp_replace_deposit_for_burn_test.go index 5077fe12..12bf6555 100644 --- a/interchaintest/cctp_replace_deposit_for_burn_test.go +++ b/interchaintest/cctp_replace_deposit_for_burn_test.go @@ -119,7 +119,7 @@ func TestCCTP_ReplaceDepositForBurn(t *testing.T) { From: gw.fiatTfRoles.Owner.FormattedAddress(), RemoteDomain: 0, RemoteToken: burnToken, - LocalToken: denomMetadataDrachma.Base, + LocalToken: denomMetadataUsdc.Base, }) bCtx, bCancel := context.WithTimeout(ctx, 20*time.Second) @@ -146,7 +146,7 @@ func TestCCTP_ReplaceDepositForBurn(t *testing.T) { require.NoError(t, err, "failed to execute configure minter controller tx") _, err = nobleValidator.ExecTx(ctx, gw.fiatTfRoles.MinterController.KeyName(), - "fiat-tokenfactory", "configure-minter", cctpModuleAccount, "1000000"+denomMetadataDrachma.Base, "-b", "block", + "fiat-tokenfactory", "configure-minter", cctpModuleAccount, "1000000"+denomMetadataUsdc.Base, "-b", "block", ) require.NoError(t, err, "failed to execute configure minter tx") diff --git a/interchaintest/genesis_test.go b/interchaintest/genesis_test.go index 34d960d3..290bfdcf 100644 --- a/interchaintest/genesis_test.go +++ b/interchaintest/genesis_test.go @@ -56,55 +56,20 @@ var ( }, } - denomMetadataRupee = DenomMetadata{ - Display: "rupee", - Base: "urupee", - Name: "rupee", - Symbol: "RUPEE", + denomMetadataUsdc = DenomMetadata{ + Display: "usdc", + Name: "usdc", + Base: "uusdc", DenomUnits: []DenomUnit{ { - Denom: "urupee", + Denom: "uusdc", Aliases: []string{ - "microrupee", + "microusdc", }, Exponent: "0", }, { - Denom: "mrupee", - Aliases: []string{ - "millirupee", - }, - Exponent: "3", - }, - { - Denom: "rupee", - Exponent: "6", - }, - }, - } - - denomMetadataDrachma = DenomMetadata{ - Display: "drachma", - Base: "udrachma", - Name: "drachma", - Symbol: "DRACHMA", - DenomUnits: []DenomUnit{ - { - Denom: "udrachma", - Aliases: []string{ - "microdrachma", - }, - Exponent: "0", - }, - { - Denom: "mdrachma", - Aliases: []string{ - "millidrachma", - }, - Exponent: "3", - }, - { - Denom: "drachma", + Denom: "usdc", Exponent: "6", }, }, @@ -114,7 +79,7 @@ var ( defaultDistributionEntityShare = "1.0" defaultTransferBPSFee = "1" defaultTransferMaxFee = "5000000" - defaultTransferFeeDenom = denomMetadataDrachma.Base + defaultTransferFeeDenom = denomMetadataUsdc.Base relayerImage = relayer.CustomDockerImage("ghcr.io/cosmos/relayer", "v2.4.1", rly.RlyDefaultUidGid) ) @@ -324,7 +289,8 @@ func createTokenfactoryRoles(ctx context.Context, denomMetadata DenomMetadata, v func createParamAuthAtGenesis(ctx context.Context, val *cosmos.ChainNode) (ibc.Wallet, error) { chainCfg := val.Chain.Config() - wallet, err := val.Chain.BuildWallet(ctx, "authority", "") + // Test address: noble127de05h6z3a3rh5jf0rjepa48zpgxtesfywgtf + wallet, err := val.Chain.BuildWallet(ctx, "authority", "index grain inform faith cave know pluck avoid supply zoo retreat system perfect aware shuffle abuse fat security cash amount night return grape candy") if err != nil { return nil, fmt.Errorf("failed to create wallet: %w", err) } @@ -443,12 +409,12 @@ func preGenesisAll(ctx context.Context, gw *genesisWrapper, minSetupTf, minSetup return func(cc ibc.ChainConfig) (err error) { val := gw.chain.Validators[0] - gw.tfRoles, err = createTokenfactoryRoles(ctx, denomMetadataRupee, val, minSetupTf) + gw.tfRoles, err = createTokenfactoryRoles(ctx, denomMetadataFrienzies, val, minSetupTf) if err != nil { return err } - gw.fiatTfRoles, err = createTokenfactoryRoles(ctx, denomMetadataDrachma, val, minSetupFiatTf) + gw.fiatTfRoles, err = createTokenfactoryRoles(ctx, denomMetadataUsdc, val, minSetupFiatTf) if err != nil { return err } @@ -472,11 +438,11 @@ func modifyGenesisAll(gw *genesisWrapper, minSetupTf, minSetupFiatTf bool) func( return nil, fmt.Errorf("failed to unmarshal genesis file: %w", err) } - if err := modifyGenesisTokenfactory(g, "tokenfactory", denomMetadataRupee, gw.tfRoles, minSetupTf); err != nil { + if err := modifyGenesisTokenfactory(g, "tokenfactory", denomMetadataFrienzies, gw.tfRoles, minSetupTf); err != nil { return nil, err } - if err := modifyGenesisTokenfactory(g, "fiat-tokenfactory", denomMetadataDrachma, gw.fiatTfRoles, minSetupFiatTf); err != nil { + if err := modifyGenesisTokenfactory(g, "fiat-tokenfactory", denomMetadataUsdc, gw.fiatTfRoles, minSetupFiatTf); err != nil { return nil, err } @@ -570,7 +536,7 @@ func modifyGenesisCCTP(genbz map[string]interface{}, authority string) error { if err := dyno.Set(genbz, authority, "app_state", "cctp", "token_controller"); err != nil { return fmt.Errorf("failed to set cctp authority address in genesis json: %w", err) } - if err := dyno.Set(genbz, []CCTPPerMessageBurnLimit{{Amount: "99999999", Denom: denomMetadataDrachma.Base}}, "app_state", "cctp", "per_message_burn_limit_list"); err != nil { + if err := dyno.Set(genbz, []CCTPPerMessageBurnLimit{{Amount: "99999999", Denom: denomMetadataUsdc.Base}}, "app_state", "cctp", "per_message_burn_limit_list"); err != nil { return fmt.Errorf("failed to set cctp perMessageBurnLimit in genesis json: %w", err) } if err := dyno.Set(genbz, CCTPAmount{Amount: "8000"}, "app_state", "cctp", "max_message_body_size"); err != nil { diff --git a/interchaintest/ibc_bps_fee_test.go b/interchaintest/ibc_bps_fee_test.go index efcf3703..1a050528 100644 --- a/interchaintest/ibc_bps_fee_test.go +++ b/interchaintest/ibc_bps_fee_test.go @@ -89,18 +89,18 @@ func TestICS20BPSFees(t *testing.T) { require.NoError(t, err, "failed to execute configure minter controller tx") _, err = nobleValidator.ExecTx(ctx, gw.fiatTfRoles.MinterController.KeyName(), - "fiat-tokenfactory", "configure-minter", gw.fiatTfRoles.Minter.FormattedAddress(), "1000000000000"+denomMetadataDrachma.Base, "-b", "block", + "fiat-tokenfactory", "configure-minter", gw.fiatTfRoles.Minter.FormattedAddress(), "1000000000000"+denomMetadataUsdc.Base, "-b", "block", ) require.NoError(t, err, "failed to execute configure minter tx") _, err = nobleValidator.ExecTx(ctx, gw.fiatTfRoles.Minter.KeyName(), - "fiat-tokenfactory", "mint", gw.extraWallets.User.FormattedAddress(), "1000000000000"+denomMetadataDrachma.Base, "-b", "block", + "fiat-tokenfactory", "mint", gw.extraWallets.User.FormattedAddress(), "1000000000000"+denomMetadataUsdc.Base, "-b", "block", ) require.NoError(t, err, "failed to execute mint to user tx") - userBalance, err := noble.GetBalance(ctx, gw.extraWallets.User.FormattedAddress(), denomMetadataDrachma.Base) + userBalance, err := noble.GetBalance(ctx, gw.extraWallets.User.FormattedAddress(), denomMetadataUsdc.Base) require.NoError(t, err, "failed to get user balance") - require.Equalf(t, int64(1000000000000), userBalance, "failed to mint %s to user", denomMetadataDrachma.Base) + require.Equalf(t, int64(1000000000000), userBalance, "failed to mint %s to user", denomMetadataUsdc.Base) nobleChans, err := r.GetChannels(ctx, eRep, noble.Config().ChainID) require.NoError(t, err, "failed to get noble channels") @@ -119,7 +119,7 @@ func TestICS20BPSFees(t *testing.T) { // First, test BPS below max fees tx, err := noble.SendIBCTransfer(ctx, nobleChan.ChannelID, gw.extraWallets.User.KeyName(), ibc.WalletAmount{ Address: gaiaReceiver, - Denom: denomMetadataDrachma.Base, + Denom: denomMetadataUsdc.Base, Amount: 100000000, }, ibc.TransferOptions{}) require.NoError(t, err, "failed to send ibc transfer from noble") @@ -127,11 +127,11 @@ func TestICS20BPSFees(t *testing.T) { _, err = testutil.PollForAck(ctx, noble, height, height+10, tx.Packet) require.NoError(t, err, "failed to find ack for ibc transfer") - userBalance, err = noble.GetBalance(ctx, gw.extraWallets.User.FormattedAddress(), denomMetadataDrachma.Base) + userBalance, err = noble.GetBalance(ctx, gw.extraWallets.User.FormattedAddress(), denomMetadataUsdc.Base) require.NoError(t, err, "failed to get user balance") require.Equal(t, int64(999900000000), userBalance, "user balance is incorrect") - prefixedDenom := transfertypes.GetPrefixedDenom(nobleChan.Counterparty.PortID, nobleChan.Counterparty.ChannelID, denomMetadataDrachma.Base) + prefixedDenom := transfertypes.GetPrefixedDenom(nobleChan.Counterparty.PortID, nobleChan.Counterparty.ChannelID, denomMetadataUsdc.Base) denomTrace := transfertypes.ParseDenomTrace(prefixedDenom) ibcDenom := denomTrace.IBCDenom() @@ -141,14 +141,14 @@ func TestICS20BPSFees(t *testing.T) { require.Equal(t, int64(99990000), receiverBalance, "receiver balance incorrect") // of the 10000 taken as fees, 80% goes to distribution entity (8000) - distributionEntityBalance, err := noble.GetBalance(ctx, gw.paramAuthority.FormattedAddress(), denomMetadataDrachma.Base) + distributionEntityBalance, err := noble.GetBalance(ctx, gw.paramAuthority.FormattedAddress(), denomMetadataUsdc.Base) require.NoError(t, err, "failed to get distribution entity balance") require.Equal(t, int64(8000), distributionEntityBalance, "distribution entity balance incorrect") // Now test max fee tx, err = noble.SendIBCTransfer(ctx, nobleChan.ChannelID, gw.extraWallets.User.FormattedAddress(), ibc.WalletAmount{ Address: gaiaReceiver, - Denom: denomMetadataDrachma.Base, + Denom: denomMetadataUsdc.Base, Amount: 100000000000, }, ibc.TransferOptions{}) require.NoError(t, err, "failed to send ibc transfer from noble") @@ -157,7 +157,7 @@ func TestICS20BPSFees(t *testing.T) { require.NoError(t, err, "failed to find ack for ibc transfer") // 999900000000 user balance from prior test, now subtract 100000000000 = 899900000000 - userBalance, err = noble.GetBalance(ctx, gw.extraWallets.User.FormattedAddress(), denomMetadataDrachma.Base) + userBalance, err = noble.GetBalance(ctx, gw.extraWallets.User.FormattedAddress(), denomMetadataUsdc.Base) require.NoError(t, err, "failed to get user balance") require.Equal(t, int64(899900000000), userBalance, "user balance is incorrect") @@ -168,7 +168,7 @@ func TestICS20BPSFees(t *testing.T) { require.Equal(t, int64(100094990000), receiverBalance, "receiver balance incorrect") // prior balance 8000, add 80% of the 5000000 fee (4000000) = 4008000 - distributionEntityBalance, err = noble.GetBalance(ctx, gw.paramAuthority.FormattedAddress(), denomMetadataDrachma.Base) + distributionEntityBalance, err = noble.GetBalance(ctx, gw.paramAuthority.FormattedAddress(), denomMetadataUsdc.Base) require.NoError(t, err, "failed to get distribution entity balance") require.Equal(t, int64(4008000), distributionEntityBalance, "distribution entity balance incorrect") diff --git a/interchaintest/noble_test.go b/interchaintest/noble_test.go index c1f4875b..aedee98f 100644 --- a/interchaintest/noble_test.go +++ b/interchaintest/noble_test.go @@ -57,12 +57,12 @@ func TestNobleChain(t *testing.T) { t.Run("tokenfactory", func(t *testing.T) { t.Parallel() - nobleTokenfactory_e2e(t, ctx, "tokenfactory", denomMetadataRupee.Base, noble, gw.tfRoles, gw.extraWallets) + nobleTokenfactory_e2e(t, ctx, "tokenfactory", denomMetadataFrienzies.Base, noble, gw.tfRoles, gw.extraWallets) }) t.Run("fiat-tokenfactory", func(t *testing.T) { t.Parallel() - nobleTokenfactory_e2e(t, ctx, "fiat-tokenfactory", denomMetadataDrachma.Base, noble, gw.fiatTfRoles, gw.extraWallets) + nobleTokenfactory_e2e(t, ctx, "fiat-tokenfactory", denomMetadataUsdc.Base, noble, gw.fiatTfRoles, gw.extraWallets) }) } diff --git a/interchaintest/upgrade_argon_test.go b/interchaintest/upgrade_argon_test.go index a6fd8789..6ddf8755 100644 --- a/interchaintest/upgrade_argon_test.go +++ b/interchaintest/upgrade_argon_test.go @@ -27,7 +27,7 @@ import ( "github.com/stretchr/testify/require" ) -func testPostArgonUpgradeTestnet( +func testPostArgonUpgrade( t *testing.T, ctx context.Context, noble *cosmos.CosmosChain, @@ -90,6 +90,7 @@ func testPostArgonUpgradeTestnet( err = json.Unmarshal(queryRolesResults, &cctpRoles) require.NoError(t, err, "failed to unmarshall cctp roles") + // For CI testing purposes, the paramauthority and cctp owner are the same. require.Equal(t, paramAuthority.FormattedAddress(), cctpRoles.Owner) require.Equal(t, cctpAttesterManager.FormattedAddress(), cctpRoles.AttesterManager) require.Equal(t, cctpTokenController.FormattedAddress(), cctpRoles.TokenController) @@ -162,7 +163,7 @@ func testPostArgonUpgradeTestnet( From: cctpTokenController.FormattedAddress(), RemoteDomain: 0, RemoteToken: burnToken, - LocalToken: denomMetadataDrachma.Base, + LocalToken: denomMetadataUsdc.Base, }, ) require.NoError(t, err, "error submitting add token pair tx") @@ -172,7 +173,7 @@ func testPostArgonUpgradeTestnet( cctpModuleAccount := authtypes.NewModuleAddress(cctptypes.ModuleName).String() - // we don't have access to the fiat tokenfactory owner, so this fails. + // by using mock images `mock-v2.0.0` or `mock-v0.4.2`, we have access to the fiat-tokenfactory owner accout _, err = val.ExecTx(ctx, fiatOwner.KeyName(), "fiat-tokenfactory", "update-master-minter", fiatMasterMinter.FormattedAddress(), "-b", "block") require.NoError(t, err, "failed to execute update master minter tx") @@ -183,7 +184,7 @@ func testPostArgonUpgradeTestnet( require.NoError(t, err, "failed to execute configure minter controller tx") _, err = val.ExecTx(ctx, fiatMinterController.KeyName(), - "fiat-tokenfactory", "configure-minter", cctpModuleAccount, "1000000"+denomMetadataDrachma.Base, "-b", "block", + "fiat-tokenfactory", "configure-minter", cctpModuleAccount, "1000000"+denomMetadataUsdc.Base, "-b", "block", ) require.NoError(t, err, "failed to execute configure minter tx") @@ -268,7 +269,7 @@ func testPostArgonUpgradeTestnet( t.Logf("CCTP burn message successfully received: %s", tx.TxHash) - balance, err := noble.GetBalance(ctx, nobleReceiver, denomMetadataDrachma.Base) + balance, err := noble.GetBalance(ctx, nobleReceiver, denomMetadataUsdc.Base) require.NoError(t, err) require.Equal(t, int64(1000000), balance) diff --git a/interchaintest/upgrade_grand-1_test.go b/interchaintest/upgrade_grand-1_test.go index aa424600..cc53be6a 100644 --- a/interchaintest/upgrade_grand-1_test.go +++ b/interchaintest/upgrade_grand-1_test.go @@ -22,7 +22,9 @@ func TestGrand1ChainUpgrade(t *testing.T) { // As such, v0.4.2 was required to complete the upgrade, which changed the upgrade // name in the code to "v0.4.1" as a workaround. upgradeName: "v0.4.1", - image: ghcrImage("dan-neon-control-test"), //this is an adjusted version that gives us control of the fiat-tokenfactory owner + // this is a mock image that gives us control of the + // fiat-tokenfactory owner for testing purposes (postUpgrade tests) + image: ghcrImage("mock-v0.4.2"), }, { upgradeName: "radon", @@ -59,10 +61,10 @@ func TestGrand1ChainUpgrade(t *testing.T) { }, { upgradeName: "v4.0.0-rc0", - image: nobleImageInfo[0], - postUpgrade: testPostArgonUpgradeTestnet, + image: ghcrImage("v4.0.0-rc0"), + postUpgrade: testPostArgonUpgrade, }, } - testNobleChainUpgrade(t, grand1ChainID, grand1Genesis, denomMetadataDrachma, numVals, numFullNodes, grand1Upgrades) + testNobleChainUpgrade(t, grand1ChainID, grand1Genesis, denomMetadataUsdc, numVals, numFullNodes, grand1Upgrades) } diff --git a/interchaintest/upgrade_noble-1_test.go b/interchaintest/upgrade_noble-1_test.go index dd87fd32..8cf2039c 100644 --- a/interchaintest/upgrade_noble-1_test.go +++ b/interchaintest/upgrade_noble-1_test.go @@ -18,7 +18,9 @@ func TestNoble1ChainUpgrade(t *testing.T) { var noble1Upgrades = []chainUpgrade{ { upgradeName: "neon", - image: ghcrImage("v2.0.0"), + // this is a mock image that gives us control of the + // fiat-tokenfactory owner for testing purposes (postUpgrade tests) + image: ghcrImage("mock-v2.0.0"), }, { // omitting upgradeName due to huckleberry patch @@ -35,8 +37,14 @@ func TestNoble1ChainUpgrade(t *testing.T) { }, { upgradeName: "argon", - image: nobleImageInfo[0], - // NOTE: Add postUpgrade task once Neon mock image is created. + // this is a mock image that gives us control of the + // cctp owner for testing purposes (postUpgrade tests) + // (this is not needed for the `upgrade_grand-1_test` because + // the v4.0.0-alpha1 upgrade handler was only run in the testnet + // making the cctp owner the same as the paramauthority. This is + // not the case in mainnet; the cctp owner is a separate wallet) + image: ghcrImage("mock-v4.0.0"), + postUpgrade: testPostArgonUpgrade, }, }