From 2b308cda33ac57c829e4075712102a62ff14da84 Mon Sep 17 00:00:00 2001 From: Shrenuj Bansal Date: Fri, 27 Sep 2024 14:54:22 -0400 Subject: [PATCH 1/4] add upgrade handler for v7.1.0 --- protocol/app/upgrades.go | 15 ++- .../upgrades/v7.0.0/upgrade_container_test.go | 118 ------------------ protocol/app/upgrades/v7.1.0/constants.go | 17 +++ protocol/app/upgrades/v7.1.0/upgrade.go | 46 +++++++ .../upgrades/v7.1.0/upgrade_container_test.go | 80 ++++++++++++ 5 files changed, 150 insertions(+), 126 deletions(-) delete mode 100644 protocol/app/upgrades/v7.0.0/upgrade_container_test.go create mode 100644 protocol/app/upgrades/v7.1.0/constants.go create mode 100644 protocol/app/upgrades/v7.1.0/upgrade.go create mode 100644 protocol/app/upgrades/v7.1.0/upgrade_container_test.go diff --git a/protocol/app/upgrades.go b/protocol/app/upgrades.go index df4bf3eb38..c76c11b60d 100644 --- a/protocol/app/upgrades.go +++ b/protocol/app/upgrades.go @@ -3,7 +3,7 @@ package app import ( "fmt" - v7_0_0 "github.com/dydxprotocol/v4-chain/protocol/app/upgrades/v7.0.0" + v7_1_0 "github.com/dydxprotocol/v4-chain/protocol/app/upgrades/v7.1.0" upgradetypes "cosmossdk.io/x/upgrade/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -14,7 +14,7 @@ var ( // `Upgrades` defines the upgrade handlers and store loaders for the application. // New upgrades should be added to this slice after they are implemented. Upgrades = []upgrades.Upgrade{ - v7_0_0.Upgrade, + v7_1_0.Upgrade, } Forks = []upgrades.Fork{} ) @@ -22,16 +22,15 @@ var ( // setupUpgradeHandlers registers the upgrade handlers to perform custom upgrade // logic and state migrations for software upgrades. func (app *App) setupUpgradeHandlers() { - if app.UpgradeKeeper.HasHandler(v7_0_0.UpgradeName) { - panic(fmt.Sprintf("Cannot register duplicate upgrade handler '%s'", v7_0_0.UpgradeName)) + if app.UpgradeKeeper.HasHandler(v7_1_0.UpgradeName) { + panic(fmt.Sprintf("Cannot register duplicate upgrade handler '%s'", v7_1_0.UpgradeName)) } app.UpgradeKeeper.SetUpgradeHandler( - v7_0_0.UpgradeName, - v7_0_0.CreateUpgradeHandler( + v7_1_0.UpgradeName, + v7_1_0.CreateUpgradeHandler( app.ModuleManager, app.configurator, - app.PricesKeeper, - app.VaultKeeper, + app.ListingKeeper, ), ) } diff --git a/protocol/app/upgrades/v7.0.0/upgrade_container_test.go b/protocol/app/upgrades/v7.0.0/upgrade_container_test.go deleted file mode 100644 index e0df3171d7..0000000000 --- a/protocol/app/upgrades/v7.0.0/upgrade_container_test.go +++ /dev/null @@ -1,118 +0,0 @@ -//go:build all || container_test - -package v_7_0_0_test - -import ( - "testing" - - "github.com/cosmos/gogoproto/proto" - - v_7_0_0 "github.com/dydxprotocol/v4-chain/protocol/app/upgrades/v7.0.0" - "github.com/dydxprotocol/v4-chain/protocol/dtypes" - "github.com/dydxprotocol/v4-chain/protocol/testing/containertest" - "github.com/dydxprotocol/v4-chain/protocol/testutil/constants" - affiliatestypes "github.com/dydxprotocol/v4-chain/protocol/x/affiliates/types" - vaulttypes "github.com/dydxprotocol/v4-chain/protocol/x/vault/types" - "github.com/stretchr/testify/require" -) - -const ( - AliceBobBTCQuantums = 1_000_000 - CarlDaveBTCQuantums = 2_000_000 - CarlDaveETHQuantums = 4_000_000 -) - -func TestStateUpgrade(t *testing.T) { - testnet, err := containertest.NewTestnetWithPreupgradeGenesis() - require.NoError(t, err, "failed to create testnet - is docker daemon running?") - err = testnet.Start() - require.NoError(t, err) - defer testnet.MustCleanUp() - node := testnet.Nodes["alice"] - nodeAddress := constants.AliceAccAddress.String() - - preUpgradeSetups(node, t) - preUpgradeChecks(node, t) - - err = containertest.UpgradeTestnet(nodeAddress, t, node, v_7_0_0.UpgradeName) - require.NoError(t, err) - - postUpgradeChecks(node, t) -} - -func preUpgradeSetups(node *containertest.Node, t *testing.T) {} - -func preUpgradeChecks(node *containertest.Node, t *testing.T) { - // Add test for your upgrade handler logic below -} - -func postUpgradeChecks(node *containertest.Node, t *testing.T) { - // Add test for your upgrade handler logic below - postUpgradeVaultParamsCheck(node, t) - - // Check that the affiliates module has been initialized with the default tiers. - postUpgradeAffiliatesModuleTiersCheck(node, t) -} - -func postUpgradeVaultParamsCheck(node *containertest.Node, t *testing.T) { - // Check that a vault with quoting params is successfully migrated and the quoting params are - // successfully migrated to the vault params. - expectedQuotingParams := &vaulttypes.QuotingParams{ - Layers: 3, - SpreadMinPpm: 1500, - SpreadBufferPpm: 500, - SkewFactorPpm: 1000000, - OrderSizePctPpm: 50000, - OrderExpirationSeconds: 30, - ActivationThresholdQuoteQuantums: dtypes.NewIntFromUint64(500_000_000), - } - - checkVaultParams(node, t, 0, vaulttypes.VaultStatus_VAULT_STATUS_QUOTING, expectedQuotingParams) - - // Check that a vault without quoting params is successfully migrated and the quoting params are - // not set in the migrated vault params. - checkVaultParams(node, t, 1, vaulttypes.VaultStatus_VAULT_STATUS_QUOTING, nil) -} - -func checkVaultParams( - node *containertest.Node, - t *testing.T, - vaultNumber uint32, - expectedStatus vaulttypes.VaultStatus, - expectedQuotingParams *vaulttypes.QuotingParams, -) { - resp, err := containertest.Query( - node, - vaulttypes.NewQueryClient, - vaulttypes.QueryClient.VaultParams, - &vaulttypes.QueryVaultParamsRequest{ - Type: vaulttypes.VaultType_VAULT_TYPE_CLOB, - Number: vaultNumber, - }, - ) - require.NoError(t, err) - require.NotNil(t, resp) - - vaultParamsResp := vaulttypes.QueryVaultParamsResponse{} - err = proto.UnmarshalText(resp.String(), &vaultParamsResp) - require.NoError(t, err) - - require.Equal(t, expectedStatus, vaultParamsResp.VaultParams.Status) - require.Equal(t, expectedQuotingParams, vaultParamsResp.VaultParams.QuotingParams) -} - -func postUpgradeAffiliatesModuleTiersCheck(node *containertest.Node, t *testing.T) { - resp, err := containertest.Query( - node, - affiliatestypes.NewQueryClient, - affiliatestypes.QueryClient.AllAffiliateTiers, - &affiliatestypes.AllAffiliateTiersRequest{}, - ) - require.NoError(t, err) - require.NotNil(t, resp) - - affiliateTiersResp := affiliatestypes.AllAffiliateTiersResponse{} - err = proto.UnmarshalText(resp.String(), &affiliateTiersResp) - require.NoError(t, err) - require.Equal(t, affiliatestypes.DefaultAffiliateTiers, affiliateTiersResp.Tiers) -} diff --git a/protocol/app/upgrades/v7.1.0/constants.go b/protocol/app/upgrades/v7.1.0/constants.go new file mode 100644 index 0000000000..1b5b8ba185 --- /dev/null +++ b/protocol/app/upgrades/v7.1.0/constants.go @@ -0,0 +1,17 @@ +package v_7_1_0 + +import ( + store "cosmossdk.io/store/types" + "github.com/dydxprotocol/v4-chain/protocol/app/upgrades" +) + +const ( + UpgradeName = "v7.1.0" +) + +var Upgrade = upgrades.Upgrade{ + UpgradeName: UpgradeName, + StoreUpgrades: store.StoreUpgrades{ + Added: []string{}, + }, +} diff --git a/protocol/app/upgrades/v7.1.0/upgrade.go b/protocol/app/upgrades/v7.1.0/upgrade.go new file mode 100644 index 0000000000..76a6cfbb1d --- /dev/null +++ b/protocol/app/upgrades/v7.1.0/upgrade.go @@ -0,0 +1,46 @@ +package v_7_1_0 + +import ( + "context" + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + listingtypes "github.com/dydxprotocol/v4-chain/protocol/x/listing/types" + + upgradetypes "cosmossdk.io/x/upgrade/types" + "github.com/cosmos/cosmos-sdk/types/module" + "github.com/dydxprotocol/v4-chain/protocol/lib" + listingkeeper "github.com/dydxprotocol/v4-chain/protocol/x/listing/keeper" +) + +func initListingModuleState(ctx sdk.Context, listingKeeper listingkeeper.Keeper) { + // Set hard cap on listed markets + err := listingKeeper.SetMarketsHardCap(ctx, 500) + if err != nil { + panic(fmt.Sprintf("failed to set markets hard cap: %s", err)) + } + + // Set listing vault deposit params + err = listingKeeper.SetListingVaultDepositParams( + ctx, + listingtypes.DefaultParams(), + ) + if err != nil { + panic(fmt.Sprintf("failed to set listing vault deposit params: %s", err)) + } +} + +func CreateUpgradeHandler( + mm *module.Manager, + configurator module.Configurator, + listingKeeper listingkeeper.Keeper, +) upgradetypes.UpgradeHandler { + return func(ctx context.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + sdkCtx := lib.UnwrapSDKContext(ctx, "app/upgrades") + sdkCtx.Logger().Info(fmt.Sprintf("Running %s Upgrade...", UpgradeName)) + + initListingModuleState(sdkCtx, listingKeeper) + + return mm.RunMigrations(ctx, configurator, vm) + } +} diff --git a/protocol/app/upgrades/v7.1.0/upgrade_container_test.go b/protocol/app/upgrades/v7.1.0/upgrade_container_test.go new file mode 100644 index 0000000000..477028272e --- /dev/null +++ b/protocol/app/upgrades/v7.1.0/upgrade_container_test.go @@ -0,0 +1,80 @@ +package v_7_1_0_test + +import ( + "testing" + + v_7_1_0 "github.com/dydxprotocol/v4-chain/protocol/app/upgrades/v7.1.0" + listingtypes "github.com/dydxprotocol/v4-chain/protocol/x/listing/types" + + "github.com/cosmos/gogoproto/proto" + + "github.com/dydxprotocol/v4-chain/protocol/testing/containertest" + "github.com/dydxprotocol/v4-chain/protocol/testutil/constants" + "github.com/stretchr/testify/require" +) + +const ( + AliceBobBTCQuantums = 1_000_000 + CarlDaveBTCQuantums = 2_000_000 + CarlDaveETHQuantums = 4_000_000 +) + +func TestStateUpgrade(t *testing.T) { + testnet, err := containertest.NewTestnetWithPreupgradeGenesis() + require.NoError(t, err, "failed to create testnet - is docker daemon running?") + err = testnet.Start() + require.NoError(t, err) + defer testnet.MustCleanUp() + node := testnet.Nodes["alice"] + nodeAddress := constants.AliceAccAddress.String() + + preUpgradeSetups(node, t) + preUpgradeChecks(node, t) + + err = containertest.UpgradeTestnet(nodeAddress, t, node, v_7_1_0.UpgradeName) + require.NoError(t, err) + + postUpgradeChecks(node, t) +} + +func preUpgradeSetups(node *containertest.Node, t *testing.T) {} + +func preUpgradeChecks(node *containertest.Node, t *testing.T) { + // Add test for your upgrade handler logic below +} + +func postUpgradeChecks(node *containertest.Node, t *testing.T) { + // Add test for your upgrade handler logic below + postUpgradeListingModuleStateCheck(node, t) +} + +func postUpgradeListingModuleStateCheck(node *containertest.Node, t *testing.T) { + // Check that the listing module state has been initialized with the hard cap and default deposit params. + resp, err := containertest.Query( + node, + listingtypes.NewQueryClient, + listingtypes.QueryClient.ListingVaultDepositParams, + &listingtypes.QueryListingVaultDepositParams{}, + ) + require.NoError(t, err) + require.NotNil(t, resp) + + listingVaultDepositParamsResp := listingtypes.QueryListingVaultDepositParamsResponse{} + err = proto.UnmarshalText(resp.String(), &listingVaultDepositParamsResp) + require.NoError(t, err) + require.Equal(t, listingtypes.DefaultParams(), listingVaultDepositParamsResp.Params) + + resp, err = containertest.Query( + node, + listingtypes.NewQueryClient, + listingtypes.QueryClient.MarketsHardCap, + &listingtypes.QueryMarketsHardCap{}, + ) + require.NoError(t, err) + require.NotNil(t, resp) + + marketsHardCapResp := listingtypes.QueryMarketsHardCapResponse{} + err = proto.UnmarshalText(resp.String(), &marketsHardCapResp) + require.NoError(t, err) + require.Equal(t, uint32(500), marketsHardCapResp.HardCap) +} From 84da536c5474dac94a5fc23804cb81e98bb87ab7 Mon Sep 17 00:00:00 2001 From: Shrenuj Bansal Date: Fri, 27 Sep 2024 15:24:06 -0400 Subject: [PATCH 2/4] rename release --- protocol/app/upgrades/{v7.1.0 => v8.0.0}/constants.go | 2 +- protocol/app/upgrades/{v7.1.0 => v8.0.0}/upgrade.go | 2 +- .../upgrades/{v7.1.0 => v8.0.0}/upgrade_container_test.go | 8 +++++--- 3 files changed, 7 insertions(+), 5 deletions(-) rename protocol/app/upgrades/{v7.1.0 => v8.0.0}/constants.go (94%) rename protocol/app/upgrades/{v7.1.0 => v8.0.0}/upgrade.go (98%) rename protocol/app/upgrades/{v7.1.0 => v8.0.0}/upgrade_container_test.go (92%) diff --git a/protocol/app/upgrades/v7.1.0/constants.go b/protocol/app/upgrades/v8.0.0/constants.go similarity index 94% rename from protocol/app/upgrades/v7.1.0/constants.go rename to protocol/app/upgrades/v8.0.0/constants.go index 1b5b8ba185..ae364faff9 100644 --- a/protocol/app/upgrades/v7.1.0/constants.go +++ b/protocol/app/upgrades/v8.0.0/constants.go @@ -1,4 +1,4 @@ -package v_7_1_0 +package v_8_0_0 import ( store "cosmossdk.io/store/types" diff --git a/protocol/app/upgrades/v7.1.0/upgrade.go b/protocol/app/upgrades/v8.0.0/upgrade.go similarity index 98% rename from protocol/app/upgrades/v7.1.0/upgrade.go rename to protocol/app/upgrades/v8.0.0/upgrade.go index 76a6cfbb1d..f8e20a8e12 100644 --- a/protocol/app/upgrades/v7.1.0/upgrade.go +++ b/protocol/app/upgrades/v8.0.0/upgrade.go @@ -1,4 +1,4 @@ -package v_7_1_0 +package v_8_0_0 import ( "context" diff --git a/protocol/app/upgrades/v7.1.0/upgrade_container_test.go b/protocol/app/upgrades/v8.0.0/upgrade_container_test.go similarity index 92% rename from protocol/app/upgrades/v7.1.0/upgrade_container_test.go rename to protocol/app/upgrades/v8.0.0/upgrade_container_test.go index 477028272e..9da87d16d8 100644 --- a/protocol/app/upgrades/v7.1.0/upgrade_container_test.go +++ b/protocol/app/upgrades/v8.0.0/upgrade_container_test.go @@ -1,9 +1,11 @@ -package v_7_1_0_test +//go:build all || container_test + +package v_8_0_0_test import ( "testing" - v_7_1_0 "github.com/dydxprotocol/v4-chain/protocol/app/upgrades/v7.1.0" + v_8_0_0 "github.com/dydxprotocol/v4-chain/protocol/app/upgrades/v7.1.0" listingtypes "github.com/dydxprotocol/v4-chain/protocol/x/listing/types" "github.com/cosmos/gogoproto/proto" @@ -31,7 +33,7 @@ func TestStateUpgrade(t *testing.T) { preUpgradeSetups(node, t) preUpgradeChecks(node, t) - err = containertest.UpgradeTestnet(nodeAddress, t, node, v_7_1_0.UpgradeName) + err = containertest.UpgradeTestnet(nodeAddress, t, node, v_8_0_0.UpgradeName) require.NoError(t, err) postUpgradeChecks(node, t) From 9f4be28b27e4a01bcef4845fb15038847c6e3e12 Mon Sep 17 00:00:00 2001 From: Shrenuj Bansal Date: Fri, 27 Sep 2024 15:33:27 -0400 Subject: [PATCH 3/4] change version in upgrades.go Signed-off-by: Shrenuj Bansal --- protocol/app/upgrades.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/protocol/app/upgrades.go b/protocol/app/upgrades.go index c76c11b60d..5172477265 100644 --- a/protocol/app/upgrades.go +++ b/protocol/app/upgrades.go @@ -3,7 +3,7 @@ package app import ( "fmt" - v7_1_0 "github.com/dydxprotocol/v4-chain/protocol/app/upgrades/v7.1.0" + v8_0_0 "github.com/dydxprotocol/v4-chain/protocol/app/upgrades/v8.0.0" upgradetypes "cosmossdk.io/x/upgrade/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -14,7 +14,7 @@ var ( // `Upgrades` defines the upgrade handlers and store loaders for the application. // New upgrades should be added to this slice after they are implemented. Upgrades = []upgrades.Upgrade{ - v7_1_0.Upgrade, + v8_0_0.Upgrade, } Forks = []upgrades.Fork{} ) @@ -22,12 +22,12 @@ var ( // setupUpgradeHandlers registers the upgrade handlers to perform custom upgrade // logic and state migrations for software upgrades. func (app *App) setupUpgradeHandlers() { - if app.UpgradeKeeper.HasHandler(v7_1_0.UpgradeName) { - panic(fmt.Sprintf("Cannot register duplicate upgrade handler '%s'", v7_1_0.UpgradeName)) + if app.UpgradeKeeper.HasHandler(v8_0_0.UpgradeName) { + panic(fmt.Sprintf("Cannot register duplicate upgrade handler '%s'", v8_0_0.UpgradeName)) } app.UpgradeKeeper.SetUpgradeHandler( - v7_1_0.UpgradeName, - v7_1_0.CreateUpgradeHandler( + v8_0_0.UpgradeName, + v8_0_0.CreateUpgradeHandler( app.ModuleManager, app.configurator, app.ListingKeeper, From 8ab8baeb781dd10d3a3b23c2e4e0f71b1966b4c1 Mon Sep 17 00:00:00 2001 From: Shrenuj Bansal Date: Fri, 27 Sep 2024 15:36:23 -0400 Subject: [PATCH 4/4] moar changes --- protocol/app/upgrades/v8.0.0/constants.go | 2 +- protocol/app/upgrades/v8.0.0/upgrade_container_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/protocol/app/upgrades/v8.0.0/constants.go b/protocol/app/upgrades/v8.0.0/constants.go index ae364faff9..48f3e41292 100644 --- a/protocol/app/upgrades/v8.0.0/constants.go +++ b/protocol/app/upgrades/v8.0.0/constants.go @@ -6,7 +6,7 @@ import ( ) const ( - UpgradeName = "v7.1.0" + UpgradeName = "v8.0.0" ) var Upgrade = upgrades.Upgrade{ diff --git a/protocol/app/upgrades/v8.0.0/upgrade_container_test.go b/protocol/app/upgrades/v8.0.0/upgrade_container_test.go index 9da87d16d8..3526dbf25d 100644 --- a/protocol/app/upgrades/v8.0.0/upgrade_container_test.go +++ b/protocol/app/upgrades/v8.0.0/upgrade_container_test.go @@ -5,7 +5,7 @@ package v_8_0_0_test import ( "testing" - v_8_0_0 "github.com/dydxprotocol/v4-chain/protocol/app/upgrades/v7.1.0" + v_8_0_0 "github.com/dydxprotocol/v4-chain/protocol/app/upgrades/v8.0.0" listingtypes "github.com/dydxprotocol/v4-chain/protocol/x/listing/types" "github.com/cosmos/gogoproto/proto"