From 36d745ce52a8a350f767d08cd05a6821c4e005c1 Mon Sep 17 00:00:00 2001 From: affan Date: Mon, 17 Jun 2024 15:53:53 -0400 Subject: [PATCH 01/17] update cosmwasm version --- protocol/Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/protocol/Dockerfile b/protocol/Dockerfile index 36f0fa052d..ecda6963a1 100644 --- a/protocol/Dockerfile +++ b/protocol/Dockerfile @@ -26,8 +26,7 @@ RUN --mount=type=cache,target=/root/.cache/go-build \ COPY . . # See https://github.com/CosmWasm/wasmvm/releases -ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.5.0/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a -RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep 2687afbdae1bc6c7c8b05ae20dfb8ffc7ddc5b4e056697d0f37853dfe294e913 +ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.5.2/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a # Copy the library you want to the final location that will be found by the linker flag `-lwasmvm_muslc` RUN cp /lib/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.a From eb4fc9218f8719ef32a4c092767b7193efe4c85f Mon Sep 17 00:00:00 2001 From: affan Date: Mon, 17 Jun 2024 16:56:27 -0400 Subject: [PATCH 02/17] add amd64 add check check update version remove debug fix fix fix tests --- protocol/Dockerfile | 12 ++-- protocol/app/app_test.go | 2 + protocol/app/module_accounts_test.go | 4 ++ protocol/app/msgs/all_msgs.go | 59 ++++++++++++++++++ protocol/app/msgs/normal_msgs.go | 60 +++++++++++++++++++ protocol/app/msgs/normal_msgs_test.go | 59 ++++++++++++++++++ .../app/testdata/default_genesis_state.json | 14 ++++- 7 files changed, 205 insertions(+), 5 deletions(-) diff --git a/protocol/Dockerfile b/protocol/Dockerfile index ecda6963a1..97ef383c69 100644 --- a/protocol/Dockerfile +++ b/protocol/Dockerfile @@ -12,6 +12,7 @@ ARG GOLANG_1_22_ALPINE_DIGEST="d1a601b64de09e2fa38c95e55838961811d5ca11062a8f423 FROM golang@sha256:${GOLANG_1_22_ALPINE_DIGEST} as builder ARG VERSION ARG COMMIT +ARG WASMVM_VERSION=v1.5.2 RUN set -eux; apk add --no-cache ca-certificates build-base; apk add git linux-headers bash binutils-gold @@ -26,10 +27,13 @@ RUN --mount=type=cache,target=/root/.cache/go-build \ COPY . . # See https://github.com/CosmWasm/wasmvm/releases -ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.5.2/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a - -# Copy the library you want to the final location that will be found by the linker flag `-lwasmvm_muslc` -RUN cp /lib/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.a +ADD https://github.com/CosmWasm/wasmvm/releases/download/${WASMVM_VERSION}/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a +ADD https://github.com/CosmWasm/wasmvm/releases/download/${WASMVM_VERSION}/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a +RUN rm -f /lib/libwasmvm_muslc.a +RUN cp "/lib/libwasmvm_muslc.$(uname -m).a" /lib/libwasmvm_muslc.a +# check that the file is there +RUN ls -l /lib/libwasmvm_muslc.a +RUN uname -m # Build dydxprotocold binary # force it to use static lib (from above) not standard libgo_cosmwasm.so file diff --git a/protocol/app/app_test.go b/protocol/app/app_test.go index 9bc21b9d88..fcd612f16f 100644 --- a/protocol/app/app_test.go +++ b/protocol/app/app_test.go @@ -9,6 +9,7 @@ import ( evidencemodule "cosmossdk.io/x/evidence" feegrantmodule "cosmossdk.io/x/feegrant/module" "cosmossdk.io/x/upgrade" + wasmmodule "github.com/CosmWasm/wasmd/x/wasm" "github.com/cosmos/cosmos-sdk/types/module" "github.com/cosmos/cosmos-sdk/x/auth" authzmodule "github.com/cosmos/cosmos-sdk/x/authz/module" @@ -214,6 +215,7 @@ func TestModuleBasics(t *testing.T) { epochsmodule.AppModuleBasic{}, ratelimitmodule.AppModuleBasic{}, vaultmodule.AppModuleBasic{}, + wasmmodule.AppModuleBasic{}, ) app := testapp.DefaultTestApp(nil) diff --git a/protocol/app/module_accounts_test.go b/protocol/app/module_accounts_test.go index 9c33061c7c..fa96e5f36e 100644 --- a/protocol/app/module_accounts_test.go +++ b/protocol/app/module_accounts_test.go @@ -3,6 +3,7 @@ package app_test import ( "testing" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" @@ -34,6 +35,7 @@ func TestModuleAccountsToAddresses(t *testing.T) { vestmoduletypes.CommunityTreasuryAccountName: "dydx15ztc7xy42tn2ukkc0qjthkucw9ac63pgp70urn", vestmoduletypes.CommunityVesterAccountName: "dydx1wxje320an3karyc6mjw4zghs300dmrjkwn7xtk", icatypes.ModuleName: "dydx1vlthgax23ca9syk7xgaz347xmf4nunefw3cnv8", + wasmtypes.ModuleName: "dydx1xds4f0m87ajl3a6az6s2enhxrd0wta48eljwng", } require.True(t, len(expectedModuleAccToAddresses) == len(app.GetMaccPerms())) @@ -72,6 +74,7 @@ func TestMaccPerms(t *testing.T) { "rewards_vester": nil, "community_treasury": nil, "community_vester": nil, + "wasm": {"burner"}, } require.Equal(t, expectedMaccPerms, maccPerms, "default macc perms list does not match expected") } @@ -92,6 +95,7 @@ func TestModuleAccountAddrs(t *testing.T) { "dydx1ltyc6y4skclzafvpznpt2qjwmfwgsndp458rmp": true, // x/rewards.vester "dydx15ztc7xy42tn2ukkc0qjthkucw9ac63pgp70urn": true, // x/vest.communityTreasury "dydx1wxje320an3karyc6mjw4zghs300dmrjkwn7xtk": true, // x/vest.communityVester + "dydx1xds4f0m87ajl3a6az6s2enhxrd0wta48eljwng": true, // wasm } require.Equal(t, expectedModuleAccAddresses, app.ModuleAccountAddrs()) diff --git a/protocol/app/msgs/all_msgs.go b/protocol/app/msgs/all_msgs.go index a790f8858b..2dba832a6d 100644 --- a/protocol/app/msgs/all_msgs.go +++ b/protocol/app/msgs/all_msgs.go @@ -342,6 +342,65 @@ var ( "/ibc.applications.interchain_accounts.controller.v1.MsgUpdateParamsResponse": {}, "/ibc.applications.interchain_accounts.host.v1.MsgUpdateParams": {}, "/ibc.applications.interchain_accounts.host.v1.MsgUpdateParamsResponse": {}, + + // wasm messages + "/cosmwasm.wasm.v1.AcceptedMessageKeysFilter": {}, + "/cosmwasm.wasm.v1.AcceptedMessagesFilter": {}, + "/cosmwasm.wasm.v1.AllowAllMessagesFilter": {}, + "/cosmwasm.wasm.v1.ClearAdminProposal": {}, + "/cosmwasm.wasm.v1.CombinedLimit": {}, + "/cosmwasm.wasm.v1.ContractExecutionAuthorization": {}, + "/cosmwasm.wasm.v1.ContractMigrationAuthorization": {}, + "/cosmwasm.wasm.v1.ExecuteContractProposal": {}, + "/cosmwasm.wasm.v1.InstantiateContract2Proposal": {}, + "/cosmwasm.wasm.v1.InstantiateContractProposal": {}, + "/cosmwasm.wasm.v1.MaxCallsLimit": {}, + "/cosmwasm.wasm.v1.MaxFundsLimit": {}, + "/cosmwasm.wasm.v1.MigrateContractProposal": {}, + "/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddresses": {}, + "/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddressesResponse": {}, + "/cosmwasm.wasm.v1.MsgClearAdmin": {}, + "/cosmwasm.wasm.v1.MsgClearAdminResponse": {}, + "/cosmwasm.wasm.v1.MsgExecuteContract": {}, + "/cosmwasm.wasm.v1.MsgExecuteContractResponse": {}, + "/cosmwasm.wasm.v1.MsgIBCCloseChannel": {}, + "/cosmwasm.wasm.v1.MsgIBCSend": {}, + "/cosmwasm.wasm.v1.MsgInstantiateContract": {}, + "/cosmwasm.wasm.v1.MsgInstantiateContract2": {}, + "/cosmwasm.wasm.v1.MsgInstantiateContract2Response": {}, + "/cosmwasm.wasm.v1.MsgInstantiateContractResponse": {}, + "/cosmwasm.wasm.v1.MsgMigrateContract": {}, + "/cosmwasm.wasm.v1.MsgMigrateContractResponse": {}, + "/cosmwasm.wasm.v1.MsgPinCodes": {}, + "/cosmwasm.wasm.v1.MsgPinCodesResponse": {}, + "/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddresses": {}, + "/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddressesResponse": {}, + "/cosmwasm.wasm.v1.MsgStoreAndInstantiateContract": {}, + "/cosmwasm.wasm.v1.MsgStoreAndInstantiateContractResponse": {}, + "/cosmwasm.wasm.v1.MsgStoreAndMigrateContract": {}, + "/cosmwasm.wasm.v1.MsgStoreAndMigrateContractResponse": {}, + "/cosmwasm.wasm.v1.MsgStoreCode": {}, + "/cosmwasm.wasm.v1.MsgStoreCodeResponse": {}, + "/cosmwasm.wasm.v1.MsgSudoContract": {}, + "/cosmwasm.wasm.v1.MsgSudoContractResponse": {}, + "/cosmwasm.wasm.v1.MsgUnpinCodes": {}, + "/cosmwasm.wasm.v1.MsgUnpinCodesResponse": {}, + "/cosmwasm.wasm.v1.MsgUpdateAdmin": {}, + "/cosmwasm.wasm.v1.MsgUpdateAdminResponse": {}, + "/cosmwasm.wasm.v1.MsgUpdateContractLabel": {}, + "/cosmwasm.wasm.v1.MsgUpdateContractLabelResponse": {}, + "/cosmwasm.wasm.v1.MsgUpdateInstantiateConfig": {}, + "/cosmwasm.wasm.v1.MsgUpdateInstantiateConfigResponse": {}, + "/cosmwasm.wasm.v1.MsgUpdateParams": {}, + "/cosmwasm.wasm.v1.MsgUpdateParamsResponse": {}, + "/cosmwasm.wasm.v1.PinCodesProposal": {}, + "/cosmwasm.wasm.v1.StoreAndInstantiateContractProposal": {}, + "/cosmwasm.wasm.v1.StoreCodeAuthorization": {}, + "/cosmwasm.wasm.v1.StoreCodeProposal": {}, + "/cosmwasm.wasm.v1.SudoContractProposal": {}, + "/cosmwasm.wasm.v1.UnpinCodesProposal": {}, + "/cosmwasm.wasm.v1.UpdateAdminProposal": {}, + "/cosmwasm.wasm.v1.UpdateInstantiateConfigProposal": {}, } // DisallowMsgs are messages that cannot be externally submitted. diff --git a/protocol/app/msgs/normal_msgs.go b/protocol/app/msgs/normal_msgs.go index 7808cf1c8e..431d88f6d1 100644 --- a/protocol/app/msgs/normal_msgs.go +++ b/protocol/app/msgs/normal_msgs.go @@ -3,6 +3,7 @@ package msgs import ( evidence "cosmossdk.io/x/evidence/types" feegrant "cosmossdk.io/x/feegrant" + wasm "github.com/CosmWasm/wasmd/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/authz" bank "github.com/cosmos/cosmos-sdk/x/bank/types" @@ -211,6 +212,65 @@ var ( // ica "/ibc.applications.interchain_accounts.v1.InterchainAccount": nil, + + // wasm + "/cosmwasm.wasm.v1.AcceptedMessageKeysFilter": nil, + "/cosmwasm.wasm.v1.AcceptedMessagesFilter": nil, + "/cosmwasm.wasm.v1.AllowAllMessagesFilter": nil, + "/cosmwasm.wasm.v1.ClearAdminProposal": nil, + "/cosmwasm.wasm.v1.CombinedLimit": nil, + "/cosmwasm.wasm.v1.ContractExecutionAuthorization": nil, + "/cosmwasm.wasm.v1.ContractMigrationAuthorization": nil, + "/cosmwasm.wasm.v1.ExecuteContractProposal": nil, + "/cosmwasm.wasm.v1.InstantiateContract2Proposal": nil, + "/cosmwasm.wasm.v1.InstantiateContractProposal": nil, + "/cosmwasm.wasm.v1.MaxCallsLimit": nil, + "/cosmwasm.wasm.v1.MaxFundsLimit": nil, + "/cosmwasm.wasm.v1.MigrateContractProposal": nil, + "/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddresses": &wasm.MsgAddCodeUploadParamsAddresses{}, + "/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddressesResponse": nil, + "/cosmwasm.wasm.v1.MsgClearAdmin": &wasm.MsgClearAdmin{}, + "/cosmwasm.wasm.v1.MsgClearAdminResponse": nil, + "/cosmwasm.wasm.v1.MsgExecuteContract": &wasm.MsgExecuteContract{}, + "/cosmwasm.wasm.v1.MsgExecuteContractResponse": nil, + "/cosmwasm.wasm.v1.MsgIBCCloseChannel": &wasm.MsgIBCCloseChannel{}, + "/cosmwasm.wasm.v1.MsgIBCSend": &wasm.MsgIBCSend{}, + "/cosmwasm.wasm.v1.MsgInstantiateContract": &wasm.MsgInstantiateContract{}, + "/cosmwasm.wasm.v1.MsgInstantiateContract2": &wasm.MsgInstantiateContract2{}, + "/cosmwasm.wasm.v1.MsgInstantiateContract2Response": nil, + "/cosmwasm.wasm.v1.MsgInstantiateContractResponse": nil, + "/cosmwasm.wasm.v1.MsgMigrateContract": &wasm.MsgMigrateContract{}, + "/cosmwasm.wasm.v1.MsgMigrateContractResponse": nil, + "/cosmwasm.wasm.v1.MsgPinCodes": &wasm.MsgPinCodes{}, + "/cosmwasm.wasm.v1.MsgPinCodesResponse": nil, + "/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddresses": &wasm.MsgRemoveCodeUploadParamsAddresses{}, + "/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddressesResponse": nil, + "/cosmwasm.wasm.v1.MsgStoreAndInstantiateContract": &wasm.MsgStoreAndInstantiateContract{}, + "/cosmwasm.wasm.v1.MsgStoreAndInstantiateContractResponse": nil, + "/cosmwasm.wasm.v1.MsgStoreAndMigrateContract": &wasm.MsgStoreAndMigrateContract{}, + "/cosmwasm.wasm.v1.MsgStoreAndMigrateContractResponse": nil, + "/cosmwasm.wasm.v1.MsgStoreCode": &wasm.MsgStoreCode{}, + "/cosmwasm.wasm.v1.MsgStoreCodeResponse": nil, + "/cosmwasm.wasm.v1.MsgSudoContract": &wasm.MsgSudoContract{}, + "/cosmwasm.wasm.v1.MsgSudoContractResponse": nil, + "/cosmwasm.wasm.v1.MsgUnpinCodes": &wasm.MsgUnpinCodes{}, + "/cosmwasm.wasm.v1.MsgUnpinCodesResponse": nil, + "/cosmwasm.wasm.v1.MsgUpdateAdmin": &wasm.MsgUpdateAdmin{}, + "/cosmwasm.wasm.v1.MsgUpdateAdminResponse": nil, + "/cosmwasm.wasm.v1.MsgUpdateContractLabel": &wasm.MsgUpdateContractLabel{}, + "/cosmwasm.wasm.v1.MsgUpdateContractLabelResponse": nil, + "/cosmwasm.wasm.v1.MsgUpdateInstantiateConfig": &wasm.MsgUpdateInstantiateConfig{}, + "/cosmwasm.wasm.v1.MsgUpdateInstantiateConfigResponse": nil, + "/cosmwasm.wasm.v1.MsgUpdateParams": &wasm.MsgUpdateParams{}, + "/cosmwasm.wasm.v1.MsgUpdateParamsResponse": nil, + "/cosmwasm.wasm.v1.PinCodesProposal": nil, + "/cosmwasm.wasm.v1.StoreAndInstantiateContractProposal": nil, + "/cosmwasm.wasm.v1.StoreCodeAuthorization": nil, + "/cosmwasm.wasm.v1.StoreCodeProposal": nil, + "/cosmwasm.wasm.v1.SudoContractProposal": nil, + "/cosmwasm.wasm.v1.UnpinCodesProposal": nil, + "/cosmwasm.wasm.v1.UpdateAdminProposal": nil, + "/cosmwasm.wasm.v1.UpdateInstantiateConfigProposal": nil, } // Custom modules diff --git a/protocol/app/msgs/normal_msgs_test.go b/protocol/app/msgs/normal_msgs_test.go index c5bba587c3..df7f692783 100644 --- a/protocol/app/msgs/normal_msgs_test.go +++ b/protocol/app/msgs/normal_msgs_test.go @@ -118,6 +118,65 @@ func TestNormalMsgs_Key(t *testing.T) { "/cosmos.upgrade.v1beta1.CancelSoftwareUpgradeProposal", "/cosmos.upgrade.v1beta1.SoftwareUpgradeProposal", + // wasm + "/cosmwasm.wasm.v1.AcceptedMessageKeysFilter", + "/cosmwasm.wasm.v1.AcceptedMessagesFilter", + "/cosmwasm.wasm.v1.AllowAllMessagesFilter", + "/cosmwasm.wasm.v1.ClearAdminProposal", + "/cosmwasm.wasm.v1.CombinedLimit", + "/cosmwasm.wasm.v1.ContractExecutionAuthorization", + "/cosmwasm.wasm.v1.ContractMigrationAuthorization", + "/cosmwasm.wasm.v1.ExecuteContractProposal", + "/cosmwasm.wasm.v1.InstantiateContract2Proposal", + "/cosmwasm.wasm.v1.InstantiateContractProposal", + "/cosmwasm.wasm.v1.MaxCallsLimit", + "/cosmwasm.wasm.v1.MaxFundsLimit", + "/cosmwasm.wasm.v1.MigrateContractProposal", + "/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddresses", + "/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddressesResponse", + "/cosmwasm.wasm.v1.MsgClearAdmin", + "/cosmwasm.wasm.v1.MsgClearAdminResponse", + "/cosmwasm.wasm.v1.MsgExecuteContract", + "/cosmwasm.wasm.v1.MsgExecuteContractResponse", + "/cosmwasm.wasm.v1.MsgIBCCloseChannel", + "/cosmwasm.wasm.v1.MsgIBCSend", + "/cosmwasm.wasm.v1.MsgInstantiateContract", + "/cosmwasm.wasm.v1.MsgInstantiateContract2", + "/cosmwasm.wasm.v1.MsgInstantiateContract2Response", + "/cosmwasm.wasm.v1.MsgInstantiateContractResponse", + "/cosmwasm.wasm.v1.MsgMigrateContract", + "/cosmwasm.wasm.v1.MsgMigrateContractResponse", + "/cosmwasm.wasm.v1.MsgPinCodes", + "/cosmwasm.wasm.v1.MsgPinCodesResponse", + "/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddresses", + "/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddressesResponse", + "/cosmwasm.wasm.v1.MsgStoreAndInstantiateContract", + "/cosmwasm.wasm.v1.MsgStoreAndInstantiateContractResponse", + "/cosmwasm.wasm.v1.MsgStoreAndMigrateContract", + "/cosmwasm.wasm.v1.MsgStoreAndMigrateContractResponse", + "/cosmwasm.wasm.v1.MsgStoreCode", + "/cosmwasm.wasm.v1.MsgStoreCodeResponse", + "/cosmwasm.wasm.v1.MsgSudoContract", + "/cosmwasm.wasm.v1.MsgSudoContractResponse", + "/cosmwasm.wasm.v1.MsgUnpinCodes", + "/cosmwasm.wasm.v1.MsgUnpinCodesResponse", + "/cosmwasm.wasm.v1.MsgUpdateAdmin", + "/cosmwasm.wasm.v1.MsgUpdateAdminResponse", + "/cosmwasm.wasm.v1.MsgUpdateContractLabel", + "/cosmwasm.wasm.v1.MsgUpdateContractLabelResponse", + "/cosmwasm.wasm.v1.MsgUpdateInstantiateConfig", + "/cosmwasm.wasm.v1.MsgUpdateInstantiateConfigResponse", + "/cosmwasm.wasm.v1.MsgUpdateParams", + "/cosmwasm.wasm.v1.MsgUpdateParamsResponse", + "/cosmwasm.wasm.v1.PinCodesProposal", + "/cosmwasm.wasm.v1.StoreAndInstantiateContractProposal", + "/cosmwasm.wasm.v1.StoreCodeAuthorization", + "/cosmwasm.wasm.v1.StoreCodeProposal", + "/cosmwasm.wasm.v1.SudoContractProposal", + "/cosmwasm.wasm.v1.UnpinCodesProposal", + "/cosmwasm.wasm.v1.UpdateAdminProposal", + "/cosmwasm.wasm.v1.UpdateInstantiateConfigProposal", + // clob "/dydxprotocol.clob.MsgBatchCancel", "/dydxprotocol.clob.MsgBatchCancelResponse", diff --git a/protocol/app/testdata/default_genesis_state.json b/protocol/app/testdata/default_genesis_state.json index 6840365fab..6f5636be45 100644 --- a/protocol/app/testdata/default_genesis_state.json +++ b/protocol/app/testdata/default_genesis_state.json @@ -483,5 +483,17 @@ "vester_account": "rewards_vester" } ] + }, + "wasm": { + "codes": [], + "contracts": [], + "params": { + "code_upload_access": { + "addresses": [], + "permission": "Everybody" + }, + "instantiate_default_permission": "Everybody" + }, + "sequences": [] } -} +} \ No newline at end of file From 172a60a55d5cf87f0efe9c08ea547c726004c285 Mon Sep 17 00:00:00 2001 From: affan Date: Tue, 18 Jun 2024 16:02:58 -0400 Subject: [PATCH 03/17] update sample pregenesis --- .../scripts/genesis/sample_pregenesis.json | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/protocol/scripts/genesis/sample_pregenesis.json b/protocol/scripts/genesis/sample_pregenesis.json index 1b5f17551d..28f8f31cb2 100644 --- a/protocol/scripts/genesis/sample_pregenesis.json +++ b/protocol/scripts/genesis/sample_pregenesis.json @@ -1,5 +1,4 @@ { - "app_hash": null, "app_name": "dydxprotocold", "app_state": { "assets": { @@ -521,7 +520,6 @@ } } }, - "consensus": null, "crisis": { "constant_fee": { "amount": "1000000000000000000", @@ -756,7 +754,6 @@ }, "gov": { "constitution": "", - "deposit_params": null, "deposits": [], "params": { "burn_proposal_deposit_prevote": false, @@ -788,9 +785,7 @@ }, "proposals": [], "starting_proposal_id": "1", - "tally_params": null, - "votes": [], - "voting_params": null + "votes": [] }, "govplus": {}, "ibc": { @@ -855,7 +850,6 @@ "port": "icahost" } }, - "params": null, "perpetuals": { "liquidity_tiers": [ { @@ -1834,9 +1828,21 @@ "vester_account": "rewards_vester" } ] + }, + "wasm": { + "codes": [], + "contracts": [], + "params": { + "code_upload_access": { + "addresses": [], + "permission": "Everybody" + }, + "instantiate_default_permission": "Everybody" + }, + "sequences": [] } }, - "app_version": "5.0.0-dev0-155-g6e95ca92", + "app_version": "5.0.0-dev0-167-gc13a8db9", "chain_id": "dydx-sample-1", "consensus": { "params": { From d20aed5f287c28896877d38acee22b04243c568d Mon Sep 17 00:00:00 2001 From: affan Date: Tue, 18 Jun 2024 16:19:08 -0400 Subject: [PATCH 04/17] clean up dockerfile --- protocol/Dockerfile | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/protocol/Dockerfile b/protocol/Dockerfile index 97ef383c69..4040d3076b 100644 --- a/protocol/Dockerfile +++ b/protocol/Dockerfile @@ -27,14 +27,15 @@ RUN --mount=type=cache,target=/root/.cache/go-build \ COPY . . # See https://github.com/CosmWasm/wasmvm/releases -ADD https://github.com/CosmWasm/wasmvm/releases/download/${WASMVM_VERSION}/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a -ADD https://github.com/CosmWasm/wasmvm/releases/download/${WASMVM_VERSION}/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a -RUN rm -f /lib/libwasmvm_muslc.a -RUN cp "/lib/libwasmvm_muslc.$(uname -m).a" /lib/libwasmvm_muslc.a -# check that the file is there -RUN ls -l /lib/libwasmvm_muslc.a -RUN uname -m - +RUN if [ "$(uname -m)" = "aarch64" ]; then \ + wget -O /lib/libwasmvm_muslc.a https://github.com/CosmWasm/wasmvm/releases/download/${WASMVM_VERSION}/libwasmvm_muslc.aarch64.a; \ + elif [ "$(uname -m)" = "x86_64" ]; then \ + wget -O /lib/libwasmvm_muslc.a https://github.com/CosmWasm/wasmvm/releases/download/${WASMVM_VERSION}/libwasmvm_muslc.x86_64.a; \ + else \ + echo "Unsupported architecture"; \ + fi + + # Build dydxprotocold binary # force it to use static lib (from above) not standard libgo_cosmwasm.so file RUN --mount=type=cache,target=/root/.cache/go-build \ From c58509241972fca3c3ed68b83d9e7d9cf9800176 Mon Sep 17 00:00:00 2001 From: affan Date: Tue, 18 Jun 2024 16:52:00 -0400 Subject: [PATCH 05/17] lint --- protocol/app/app.go | 3 ++- protocol/wasmbinding/bindings/queries.go | 4 +-- protocol/wasmbinding/msg_plugin.go | 33 ++++++++++-------------- protocol/wasmbinding/queries.go | 10 ++++--- 4 files changed, 24 insertions(+), 26 deletions(-) diff --git a/protocol/app/app.go b/protocol/app/app.go index 038969c596..5829e78920 100644 --- a/protocol/app/app.go +++ b/protocol/app/app.go @@ -1129,7 +1129,8 @@ func New( wasmOpts := []wasmmodulekeeper.Option{} - wasmOpts = append(wasmbinding.RegisterCustomPlugins(&app.PricesKeeper, &app.SendingKeeper, &app.SubaccountsKeeper, app.ClobKeeper), wasmOpts...) + wasmOpts = append(wasmbinding.RegisterCustomPlugins(&app.PricesKeeper, &app.SendingKeeper, + &app.SubaccountsKeeper, app.ClobKeeper), wasmOpts...) app.WasmKeeper = wasmmodulekeeper.NewKeeper( appCodec, diff --git a/protocol/wasmbinding/bindings/queries.go b/protocol/wasmbinding/bindings/queries.go index fcb5f89474..b634b5ad9c 100644 --- a/protocol/wasmbinding/bindings/queries.go +++ b/protocol/wasmbinding/bindings/queries.go @@ -3,7 +3,7 @@ package bindings import ( clobtypes "github.com/dydxprotocol/v4-chain/protocol/x/clob/types" pricestypes "github.com/dydxprotocol/v4-chain/protocol/x/prices/types" - subaccountstypes "github.com/dydxprotocol/v4-chain/protocol/x/subaccounts/types" + satypes "github.com/dydxprotocol/v4-chain/protocol/x/subaccounts/types" ) type MarketPriceRequestWrapper struct { @@ -11,7 +11,7 @@ type MarketPriceRequestWrapper struct { } type SubaccountRequestWrapper struct { - Subaccount subaccountstypes.QueryGetSubaccountRequest `json:"subaccount"` + Subaccount satypes.QueryGetSubaccountRequest `json:"subaccount"` } type PerpeutalClobDetailsRequestWrapper struct { diff --git a/protocol/wasmbinding/msg_plugin.go b/protocol/wasmbinding/msg_plugin.go index a1ff3e8acb..4c9b8e491e 100644 --- a/protocol/wasmbinding/msg_plugin.go +++ b/protocol/wasmbinding/msg_plugin.go @@ -20,7 +20,8 @@ import ( // TODO(OTE-409): add checks for contract addresses // CustomMessageDecorator returns decorator for custom CosmWasm bindings messages -func CustomMessageDecorator(sending *sendingkeeper.Keeper, clob *clobkeeper.Keeper) func(wasmkeeper.Messenger) wasmkeeper.Messenger { +func CustomMessageDecorator(sending *sendingkeeper.Keeper, + clob *clobkeeper.Keeper) func(wasmkeeper.Messenger) wasmkeeper.Messenger { return func(old wasmkeeper.Messenger) wasmkeeper.Messenger { return &CustomMessenger{ wrapped: old, @@ -39,7 +40,10 @@ type CustomMessenger struct { var _ wasmkeeper.Messenger = (*CustomMessenger)(nil) // DispatchMsg executes on the contractMsg. -func (m *CustomMessenger) DispatchMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) ([]sdk.Event, [][]byte, error) { +func (m *CustomMessenger) DispatchMsg(ctx sdk.Context, + contractAddr sdk.AccAddress, + contractIBCPortID string, + msg wasmvmtypes.CosmosMsg) ([]sdk.Event, [][]byte, error) { if msg.Custom != nil { // only handle the happy path where this is really creating / minting / swapping ... // leave everything else for the wrapped version @@ -68,7 +72,8 @@ func (m *CustomMessenger) DispatchMsg(ctx sdk.Context, contractAddr sdk.AccAddre return m.wrapped.DispatchMsg(ctx, contractAddr, contractIBCPortID, msg) } -func (m *CustomMessenger) createTransfer(ctx sdk.Context, contractAddr sdk.AccAddress, createTransfer *sendingtypes.MsgCreateTransfer) ([]sdk.Event, [][]byte, error) { +func (m *CustomMessenger) createTransfer(ctx sdk.Context, contractAddr sdk.AccAddress, + createTransfer *sendingtypes.MsgCreateTransfer) ([]sdk.Event, [][]byte, error) { if createTransfer == nil { return nil, nil, wasmvmtypes.InvalidRequest{Err: "Invalid create transfer request: No transfer data provided"} } @@ -76,7 +81,8 @@ func (m *CustomMessenger) createTransfer(ctx sdk.Context, contractAddr sdk.AccAd return nil, nil, err } -func (m *CustomMessenger) depositToSubaccount(ctx sdk.Context, contractAddr sdk.AccAddress, depositToSubaccount *sendingtypes.MsgDepositToSubaccount) ([]sdk.Event, [][]byte, error) { +func (m *CustomMessenger) depositToSubaccount(ctx sdk.Context, contractAddr sdk.AccAddress, + depositToSubaccount *sendingtypes.MsgDepositToSubaccount) ([]sdk.Event, [][]byte, error) { if depositToSubaccount == nil { return nil, nil, wasmvmtypes.InvalidRequest{Err: "Invalid deposit to subaccount request: No deposit data provided"} } @@ -85,26 +91,15 @@ func (m *CustomMessenger) depositToSubaccount(ctx sdk.Context, contractAddr sdk. return nil, nil, err } -func (m *CustomMessenger) withdrawFromSubaccount(ctx sdk.Context, contractAddr sdk.AccAddress, withdrawFromSubaccount *sendingtypes.MsgWithdrawFromSubaccount) ([]sdk.Event, [][]byte, error) { +func (m *CustomMessenger) withdrawFromSubaccount(ctx sdk.Context, contractAddr sdk.AccAddress, + withdrawFromSubaccount *sendingtypes.MsgWithdrawFromSubaccount) ([]sdk.Event, [][]byte, error) { if withdrawFromSubaccount == nil { - return nil, nil, wasmvmtypes.InvalidRequest{Err: "Invalid withdraw from subaccount request: No withdraw data provided"} + return nil, nil, wasmvmtypes.InvalidRequest{ + Err: "Invalid withdraw from subaccount request: No withdraw data provided"} } err := m.sending.ProcessWithdrawFromSubaccount(ctx, withdrawFromSubaccount) return nil, nil, err - -} - -func parseAddress(addr string) (sdk.AccAddress, error) { - parsed, err := sdk.AccAddressFromBech32(addr) - if err != nil { - return nil, err - } - err = sdk.VerifyAddressFormat(parsed) - if err != nil { - return nil, err - } - return parsed, nil } func (m *CustomMessenger) placeOrder( diff --git a/protocol/wasmbinding/queries.go b/protocol/wasmbinding/queries.go index ff1a83a850..e9baa29fb7 100644 --- a/protocol/wasmbinding/queries.go +++ b/protocol/wasmbinding/queries.go @@ -12,7 +12,7 @@ import ( clobtypes "github.com/dydxprotocol/v4-chain/protocol/x/clob/types" priceskeeper "github.com/dydxprotocol/v4-chain/protocol/x/prices/keeper" subaccountskeeper "github.com/dydxprotocol/v4-chain/protocol/x/subaccounts/keeper" - subaccountstypes "github.com/dydxprotocol/v4-chain/protocol/x/subaccounts/types" + satypes "github.com/dydxprotocol/v4-chain/protocol/x/subaccounts/types" ) type QueryPlugin struct { @@ -56,7 +56,7 @@ func (qp QueryPlugin) HandleSubaccountsQuery(ctx sdk.Context, queryData json.Raw return nil, errorsmod.Wrap(err, "Error parsing DydxGetClobQuery") } - parsedSubaccountId := subaccountstypes.SubaccountId{ + parsedSubaccountId := satypes.SubaccountId{ Owner: parsedQuery.Subaccount.Owner, Number: parsedQuery.Subaccount.Number, } @@ -76,10 +76,12 @@ func (qp QueryPlugin) HandlePerpetualClobDetailsQuery(ctx sdk.Context, queryData return nil, errorsmod.Wrap(err, "Error parsing DydxGetClobQuery") } - perpetualClobDetails, err := qp.clobKeeper.GetPerpetualClobDetails(ctx, clobtypes.ClobPairId(parsedQuery.PerpetualClobDetails.Id)) + perpetualClobDetails, err := qp.clobKeeper.GetPerpetualClobDetails(ctx, + clobtypes.ClobPairId(parsedQuery.PerpetualClobDetails.Id)) if err != nil { - return nil, errorsmod.Wrap(err, fmt.Sprintf("Error getting clob details for pair %d", parsedQuery.PerpetualClobDetails.Id)) + return nil, errorsmod.Wrap(err, + fmt.Sprintf("Error getting clob details for pair %d", parsedQuery.PerpetualClobDetails.Id)) } bz, err := json.Marshal(perpetualClobDetails) if err != nil { From 9d4cd6e4b72c381adeb2e93ddde3d4e7f6f78c7e Mon Sep 17 00:00:00 2001 From: affan Date: Tue, 18 Jun 2024 16:58:26 -0400 Subject: [PATCH 06/17] fix sim test --- protocol/app/simulation_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/protocol/app/simulation_test.go b/protocol/app/simulation_test.go index 5dd103c4be..16c63a2794 100644 --- a/protocol/app/simulation_test.go +++ b/protocol/app/simulation_test.go @@ -14,6 +14,7 @@ import ( "cosmossdk.io/store" evidencetypes "cosmossdk.io/x/evidence/types" feegranttypes "cosmossdk.io/x/feegrant" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" tmjson "github.com/cometbft/cometbft/libs/json" tmtypes "github.com/cometbft/cometbft/types" dbm "github.com/cosmos/cosmos-db" @@ -133,6 +134,7 @@ var genesisModuleOrder = []string{ rewardsmodule.ModuleName, epochstypes.ModuleName, blocktimetypes.ModuleName, + wasmtypes.ModuleName, } var skippedGenesisModules = map[string]interface{}{ From 7e9a3c390723fe6321f4b8c54108d088fc23bb59 Mon Sep 17 00:00:00 2001 From: affan Date: Thu, 20 Jun 2024 10:47:58 -0400 Subject: [PATCH 07/17] remove osmosis and fix container tests --- protocol/app/app.go | 2 +- protocol/app/upgrades/v5.0.0/constants.go | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/protocol/app/app.go b/protocol/app/app.go index 5829e78920..533e56746f 100644 --- a/protocol/app/app.go +++ b/protocol/app/app.go @@ -1125,7 +1125,7 @@ func New( // AllCapabilities returns all capabilities available with the current wasmvm // See https://github.com/CosmWasm/cosmwasm/blob/main/docs/CAPABILITIES-BUILT-IN.md - supportedFeatures := "iterator,staking,stargate,osmosis,cosmwasm_1_1,cosmwasm_1_2,cosmwasm_1_4,dydx" + supportedFeatures := "iterator,staking,stargate,cosmwasm_1_1,cosmwasm_1_2,cosmwasm_1_4,dydx" wasmOpts := []wasmmodulekeeper.Option{} diff --git a/protocol/app/upgrades/v5.0.0/constants.go b/protocol/app/upgrades/v5.0.0/constants.go index 468add34df..ac29c08ce7 100644 --- a/protocol/app/upgrades/v5.0.0/constants.go +++ b/protocol/app/upgrades/v5.0.0/constants.go @@ -4,6 +4,7 @@ import ( store "cosmossdk.io/store/types" "github.com/dydxprotocol/v4-chain/protocol/app/upgrades" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" vaulttypes "github.com/dydxprotocol/v4-chain/protocol/x/vault/types" ) @@ -18,6 +19,7 @@ var Upgrade = upgrades.Upgrade{ StoreUpgrades: store.StoreUpgrades{ Added: []string{ vaulttypes.StoreKey, + wasmtypes.StoreKey, }, }, } From 615834629ac368b1fb9e8eeaf8595e4d4b8ac9bd Mon Sep 17 00:00:00 2001 From: affan Date: Tue, 25 Jun 2024 10:59:09 -0400 Subject: [PATCH 08/17] changes --- protocol/app/upgrades.go | 18 +- .../upgrades/v.cosmwasm.0/config/client.toml | 17 + .../app/upgrades/v.cosmwasm.0/constants.go | 23 + protocol/app/upgrades/v.cosmwasm.0/upgrade.go | 94 +++ .../v.cosmwasm.0/upgrade_container_test.go | 185 +++++ .../upgrades/v5.0.0/upgrade_container_test.go | 362 --------- .../scripts/genesis/sample_pregenesis.json | 2 +- .../testing/containertest/containertest.sh | 2 +- .../containertest/preupgrade_genesis.json | 735 +++++------------- protocol/testing/containertest/testnet.go | 2 +- 10 files changed, 504 insertions(+), 936 deletions(-) create mode 100644 protocol/app/upgrades/v.cosmwasm.0/config/client.toml create mode 100644 protocol/app/upgrades/v.cosmwasm.0/constants.go create mode 100644 protocol/app/upgrades/v.cosmwasm.0/upgrade.go create mode 100644 protocol/app/upgrades/v.cosmwasm.0/upgrade_container_test.go delete mode 100644 protocol/app/upgrades/v5.0.0/upgrade_container_test.go diff --git a/protocol/app/upgrades.go b/protocol/app/upgrades.go index 5f3522879c..515ec3944e 100644 --- a/protocol/app/upgrades.go +++ b/protocol/app/upgrades.go @@ -3,7 +3,7 @@ package app import ( "fmt" - v5_0_0 "github.com/dydxprotocol/v4-chain/protocol/app/upgrades/v5.0.0" + v_upgrade_cosmwasm "github.com/dydxprotocol/v4-chain/protocol/app/upgrades/v.cosmwasm.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{ - v5_0_0.Upgrade, + v_upgrade_cosmwasm.Upgrade, } Forks = []upgrades.Fork{} ) @@ -22,19 +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(v5_0_0.UpgradeName) { - panic(fmt.Sprintf("Cannot register duplicate upgrade handler '%s'", v5_0_0.UpgradeName)) + if app.UpgradeKeeper.HasHandler(v_upgrade_cosmwasm.UpgradeName) { + panic(fmt.Sprintf("Cannot register duplicate upgrade handler '%s'", v_upgrade_cosmwasm.UpgradeName)) } app.UpgradeKeeper.SetUpgradeHandler( - v5_0_0.UpgradeName, - v5_0_0.CreateUpgradeHandler( + v_upgrade_cosmwasm.UpgradeName, + v_upgrade_cosmwasm.CreateUpgradeHandler( app.ModuleManager, app.configurator, - app.PerpetualsKeeper, - app.ClobKeeper, - app.SubaccountsKeeper, - app.ConsensusParamsKeeper, - app.VaultKeeper, + app.AccountKeeper, ), ) } diff --git a/protocol/app/upgrades/v.cosmwasm.0/config/client.toml b/protocol/app/upgrades/v.cosmwasm.0/config/client.toml new file mode 100644 index 0000000000..2a8569c81a --- /dev/null +++ b/protocol/app/upgrades/v.cosmwasm.0/config/client.toml @@ -0,0 +1,17 @@ +# This is a TOML config file. +# For more information, see https://github.com/toml-lang/toml + +############################################################################### +### Client Configuration ### +############################################################################### + +# The network chain ID +chain-id = "" +# The keyring's backend, where the keys are stored (os|file|kwallet|pass|test|memory) +keyring-backend = "os" +# CLI output format (text|json) +output = "text" +# : to CometBFT RPC interface for this chain +node = "tcp://localhost:26657" +# Transaction broadcasting mode (sync|async) +broadcast-mode = "sync" diff --git a/protocol/app/upgrades/v.cosmwasm.0/constants.go b/protocol/app/upgrades/v.cosmwasm.0/constants.go new file mode 100644 index 0000000000..2a61c8dc57 --- /dev/null +++ b/protocol/app/upgrades/v.cosmwasm.0/constants.go @@ -0,0 +1,23 @@ +package v_cosmwasm_0 + +import ( + store "cosmossdk.io/store/types" + "github.com/dydxprotocol/v4-chain/protocol/app/upgrades" + + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + vaulttypes "github.com/dydxprotocol/v4-chain/protocol/x/vault/types" +) + +const ( + UpgradeName = "v6.6.6" +) + +var Upgrade = upgrades.Upgrade{ + UpgradeName: UpgradeName, + StoreUpgrades: store.StoreUpgrades{ + Added: []string{ + vaulttypes.StoreKey, + wasmtypes.StoreKey, + }, + }, +} diff --git a/protocol/app/upgrades/v.cosmwasm.0/upgrade.go b/protocol/app/upgrades/v.cosmwasm.0/upgrade.go new file mode 100644 index 0000000000..f4759c02db --- /dev/null +++ b/protocol/app/upgrades/v.cosmwasm.0/upgrade.go @@ -0,0 +1,94 @@ +package v_cosmwasm_0 + +import ( + "context" + "fmt" + + "github.com/dydxprotocol/v4-chain/protocol/lib" + + upgradetypes "cosmossdk.io/x/upgrade/types" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" +) + +var ModuleAccsToInitialize = []string{ + wasmtypes.ModuleName, +} + +func InitializeModuleAccs(ctx sdk.Context, ak authkeeper.AccountKeeper) { + for _, modAccName := range ModuleAccsToInitialize { + // Get module account and relevant permissions from the accountKeeper. + addr, perms := ak.GetModuleAddressAndPermissions(modAccName) + if addr == nil { + panic(fmt.Sprintf( + "Did not find %v in `ak.GetModuleAddressAndPermissions`. This is not expected. Skipping.", + modAccName, + )) + } + + // Try to get the account in state. + acc := ak.GetAccount(ctx, addr) + if acc != nil { + // Account has been initialized. + macc, isModuleAccount := acc.(sdk.ModuleAccountI) + if isModuleAccount { + // Module account was correctly initialized. Skipping + ctx.Logger().Info(fmt.Sprintf( + "module account %+v was correctly initialized. No-op", + macc, + )) + continue + } + // Module account has been initialized as a BaseAccount. Change to module account. + // Note: We need to get the base account to retrieve its account number, and convert it + // in place into a module account. + baseAccount, ok := acc.(*authtypes.BaseAccount) + if !ok { + panic(fmt.Sprintf( + "cannot cast %v into a BaseAccount, acc = %+v", + modAccName, + acc, + )) + } + newModuleAccount := authtypes.NewModuleAccount( + baseAccount, + modAccName, + perms..., + ) + ak.SetModuleAccount(ctx, newModuleAccount) + ctx.Logger().Info(fmt.Sprintf( + "Successfully converted %v to module account in state: %+v", + modAccName, + newModuleAccount, + )) + continue + } + + // Account has not been initialized at all. Initialize it as module. + // Implementation taken from + // https://github.com/dydxprotocol/cosmos-sdk/blob/bdf96fdd/x/auth/keeper/keeper.go#L213 + newModuleAccount := authtypes.NewEmptyModuleAccount(modAccName, perms...) + maccI := (ak.NewAccount(ctx, newModuleAccount)).(sdk.ModuleAccountI) // this set the account number + ak.SetModuleAccount(ctx, maccI) + ctx.Logger().Info(fmt.Sprintf( + "Successfully initialized module account in state: %+v", + newModuleAccount, + )) + } +} + +func CreateUpgradeHandler( + mm *module.Manager, + configurator module.Configurator, + ak authkeeper.AccountKeeper, +) 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("Running %s Upgrade...", UpgradeName) + InitializeModuleAccs(sdkCtx, ak) + return mm.RunMigrations(ctx, configurator, vm) + } +} diff --git a/protocol/app/upgrades/v.cosmwasm.0/upgrade_container_test.go b/protocol/app/upgrades/v.cosmwasm.0/upgrade_container_test.go new file mode 100644 index 0000000000..abfc630fe7 --- /dev/null +++ b/protocol/app/upgrades/v.cosmwasm.0/upgrade_container_test.go @@ -0,0 +1,185 @@ +//go:build all || container_test + +package v_cosmwasm_0_test + +import ( + "testing" + + v_cosmwasm_0 "github.com/dydxprotocol/v4-chain/protocol/app/upgrades/v.cosmwasm.0" + "github.com/dydxprotocol/v4-chain/protocol/testing/containertest" + "github.com/dydxprotocol/v4-chain/protocol/testutil/constants" + clobtypes "github.com/dydxprotocol/v4-chain/protocol/x/clob/types" + satypes "github.com/dydxprotocol/v4-chain/protocol/x/subaccounts/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_cosmwasm_0.UpgradeName) + require.NoError(t, err) + + postUpgradeChecks(node, t) +} + +func preUpgradeSetups(node *containertest.Node, t *testing.T) { + placeOrders(node, t) +} + +func preUpgradeChecks(node *containertest.Node, t *testing.T) { +} + +func postUpgradeChecks(node *containertest.Node, t *testing.T) { +} + +func placeOrders(node *containertest.Node, t *testing.T) { + require.NoError(t, containertest.BroadcastTx( + node, + &clobtypes.MsgPlaceOrder{ + Order: clobtypes.Order{ + OrderId: clobtypes.OrderId{ + ClientId: 0, + SubaccountId: satypes.SubaccountId{ + Owner: constants.AliceAccAddress.String(), + Number: 0, + }, + ClobPairId: 0, + }, + Side: clobtypes.Order_SIDE_BUY, + Quantums: AliceBobBTCQuantums, + Subticks: 5_000_000, + GoodTilOneof: &clobtypes.Order_GoodTilBlock{ + GoodTilBlock: 20, + }, + }, + }, + constants.AliceAccAddress.String(), + )) + require.NoError(t, containertest.BroadcastTx( + node, + &clobtypes.MsgPlaceOrder{ + Order: clobtypes.Order{ + OrderId: clobtypes.OrderId{ + ClientId: 0, + SubaccountId: satypes.SubaccountId{ + Owner: constants.BobAccAddress.String(), + Number: 0, + }, + ClobPairId: 0, + }, + Side: clobtypes.Order_SIDE_SELL, + Quantums: AliceBobBTCQuantums, + Subticks: 5_000_000, + GoodTilOneof: &clobtypes.Order_GoodTilBlock{ + GoodTilBlock: 20, + }, + }, + }, + constants.BobAccAddress.String(), + )) + require.NoError(t, containertest.BroadcastTx( + node, + &clobtypes.MsgPlaceOrder{ + Order: clobtypes.Order{ + OrderId: clobtypes.OrderId{ + ClientId: 0, + SubaccountId: satypes.SubaccountId{ + Owner: constants.CarlAccAddress.String(), + Number: 0, + }, + ClobPairId: 0, + }, + Side: clobtypes.Order_SIDE_BUY, + Quantums: CarlDaveBTCQuantums, + Subticks: 5_000_000, + GoodTilOneof: &clobtypes.Order_GoodTilBlock{ + GoodTilBlock: 20, + }, + }, + }, + constants.CarlAccAddress.String(), + )) + require.NoError(t, containertest.BroadcastTx( + node, + &clobtypes.MsgPlaceOrder{ + Order: clobtypes.Order{ + OrderId: clobtypes.OrderId{ + ClientId: 0, + SubaccountId: satypes.SubaccountId{ + Owner: constants.DaveAccAddress.String(), + Number: 0, + }, + ClobPairId: 0, + }, + Side: clobtypes.Order_SIDE_SELL, + Quantums: CarlDaveBTCQuantums, + Subticks: 5_000_000, + GoodTilOneof: &clobtypes.Order_GoodTilBlock{ + GoodTilBlock: 20, + }, + }, + }, + constants.DaveAccAddress.String(), + )) + require.NoError(t, containertest.BroadcastTx( + node, + &clobtypes.MsgPlaceOrder{ + Order: clobtypes.Order{ + OrderId: clobtypes.OrderId{ + ClientId: 0, + SubaccountId: satypes.SubaccountId{ + Owner: constants.CarlAccAddress.String(), + Number: 0, + }, + ClobPairId: 1, + }, + Side: clobtypes.Order_SIDE_BUY, + Quantums: CarlDaveETHQuantums, + Subticks: 5_000_000, + GoodTilOneof: &clobtypes.Order_GoodTilBlock{ + GoodTilBlock: 20, + }, + }, + }, + constants.CarlAccAddress.String(), + )) + require.NoError(t, containertest.BroadcastTx( + node, + &clobtypes.MsgPlaceOrder{ + Order: clobtypes.Order{ + OrderId: clobtypes.OrderId{ + ClientId: 0, + SubaccountId: satypes.SubaccountId{ + Owner: constants.DaveAccAddress.String(), + Number: 0, + }, + ClobPairId: 1, + }, + Side: clobtypes.Order_SIDE_SELL, + Quantums: CarlDaveETHQuantums, + Subticks: 5_000_000, + GoodTilOneof: &clobtypes.Order_GoodTilBlock{ + GoodTilBlock: 20, + }, + }, + }, + constants.DaveAccAddress.String(), + )) + err := node.Wait(2) + require.NoError(t, err) +} diff --git a/protocol/app/upgrades/v5.0.0/upgrade_container_test.go b/protocol/app/upgrades/v5.0.0/upgrade_container_test.go deleted file mode 100644 index 065f40701d..0000000000 --- a/protocol/app/upgrades/v5.0.0/upgrade_container_test.go +++ /dev/null @@ -1,362 +0,0 @@ -//go:build all || container_test - -package v_5_0_0_test - -import ( - "testing" - - consensus "github.com/cosmos/cosmos-sdk/x/consensus/types" - "github.com/cosmos/gogoproto/proto" - v_5_0_0 "github.com/dydxprotocol/v4-chain/protocol/app/upgrades/v5.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" - clobtypes "github.com/dydxprotocol/v4-chain/protocol/x/clob/types" - perpetuals "github.com/dydxprotocol/v4-chain/protocol/x/perpetuals/types" - satypes "github.com/dydxprotocol/v4-chain/protocol/x/subaccounts/types" - vaulttypes "github.com/dydxprotocol/v4-chain/protocol/x/vault/types" - "github.com/stretchr/testify/assert" - "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_5_0_0.UpgradeName) - require.NoError(t, err) - - postUpgradeChecks(node, t) -} - -func preUpgradeSetups(node *containertest.Node, t *testing.T) { - placeOrders(node, t) -} - -func preUpgradeChecks(node *containertest.Node, t *testing.T) { - preUpgradeCheckPerpetualMarketType(node, t) - preUpgradeCheckVoteExtensions(node, t) - // Add test for your upgrade handler logic below -} - -func postUpgradeChecks(node *containertest.Node, t *testing.T) { - postUpgradecheckPerpetualMarketType(node, t) - postUpgradeCheckLiquidityTiers(node, t) - postUpgradePerpetualOIs(node, t) - postUpgradeCheckVoteExtensions(node, t) - postUpgradeCheckVaultParams(node, t) - // Add test for your upgrade handler logic below -} - -func preUpgradeCheckVoteExtensions(node *containertest.Node, t *testing.T) { - consensusParams := &consensus.QueryParamsResponse{} - resp, err := containertest.Query( - node, - consensus.NewQueryClient, - consensus.QueryClient.Params, - &consensus.QueryParamsRequest{}, - ) - require.NoError(t, err) - err = proto.UnmarshalText(resp.String(), consensusParams) - require.NoError(t, err) - assert.Equal(t, int64(0), consensusParams.Params.Abci.VoteExtensionsEnableHeight) -} - -func placeOrders(node *containertest.Node, t *testing.T) { - require.NoError(t, containertest.BroadcastTx( - node, - &clobtypes.MsgPlaceOrder{ - Order: clobtypes.Order{ - OrderId: clobtypes.OrderId{ - ClientId: 0, - SubaccountId: satypes.SubaccountId{ - Owner: constants.AliceAccAddress.String(), - Number: 0, - }, - ClobPairId: 0, - }, - Side: clobtypes.Order_SIDE_BUY, - Quantums: AliceBobBTCQuantums, - Subticks: 5_000_000, - GoodTilOneof: &clobtypes.Order_GoodTilBlock{ - GoodTilBlock: 20, - }, - }, - }, - constants.AliceAccAddress.String(), - )) - require.NoError(t, containertest.BroadcastTx( - node, - &clobtypes.MsgPlaceOrder{ - Order: clobtypes.Order{ - OrderId: clobtypes.OrderId{ - ClientId: 0, - SubaccountId: satypes.SubaccountId{ - Owner: constants.BobAccAddress.String(), - Number: 0, - }, - ClobPairId: 0, - }, - Side: clobtypes.Order_SIDE_SELL, - Quantums: AliceBobBTCQuantums, - Subticks: 5_000_000, - GoodTilOneof: &clobtypes.Order_GoodTilBlock{ - GoodTilBlock: 20, - }, - }, - }, - constants.BobAccAddress.String(), - )) - require.NoError(t, containertest.BroadcastTx( - node, - &clobtypes.MsgPlaceOrder{ - Order: clobtypes.Order{ - OrderId: clobtypes.OrderId{ - ClientId: 0, - SubaccountId: satypes.SubaccountId{ - Owner: constants.CarlAccAddress.String(), - Number: 0, - }, - ClobPairId: 0, - }, - Side: clobtypes.Order_SIDE_BUY, - Quantums: CarlDaveBTCQuantums, - Subticks: 5_000_000, - GoodTilOneof: &clobtypes.Order_GoodTilBlock{ - GoodTilBlock: 20, - }, - }, - }, - constants.CarlAccAddress.String(), - )) - require.NoError(t, containertest.BroadcastTx( - node, - &clobtypes.MsgPlaceOrder{ - Order: clobtypes.Order{ - OrderId: clobtypes.OrderId{ - ClientId: 0, - SubaccountId: satypes.SubaccountId{ - Owner: constants.DaveAccAddress.String(), - Number: 0, - }, - ClobPairId: 0, - }, - Side: clobtypes.Order_SIDE_SELL, - Quantums: CarlDaveBTCQuantums, - Subticks: 5_000_000, - GoodTilOneof: &clobtypes.Order_GoodTilBlock{ - GoodTilBlock: 20, - }, - }, - }, - constants.DaveAccAddress.String(), - )) - require.NoError(t, containertest.BroadcastTx( - node, - &clobtypes.MsgPlaceOrder{ - Order: clobtypes.Order{ - OrderId: clobtypes.OrderId{ - ClientId: 0, - SubaccountId: satypes.SubaccountId{ - Owner: constants.CarlAccAddress.String(), - Number: 0, - }, - ClobPairId: 1, - }, - Side: clobtypes.Order_SIDE_BUY, - Quantums: CarlDaveETHQuantums, - Subticks: 5_000_000, - GoodTilOneof: &clobtypes.Order_GoodTilBlock{ - GoodTilBlock: 20, - }, - }, - }, - constants.CarlAccAddress.String(), - )) - require.NoError(t, containertest.BroadcastTx( - node, - &clobtypes.MsgPlaceOrder{ - Order: clobtypes.Order{ - OrderId: clobtypes.OrderId{ - ClientId: 0, - SubaccountId: satypes.SubaccountId{ - Owner: constants.DaveAccAddress.String(), - Number: 0, - }, - ClobPairId: 1, - }, - Side: clobtypes.Order_SIDE_SELL, - Quantums: CarlDaveETHQuantums, - Subticks: 5_000_000, - GoodTilOneof: &clobtypes.Order_GoodTilBlock{ - GoodTilBlock: 20, - }, - }, - }, - constants.DaveAccAddress.String(), - )) - err := node.Wait(2) - require.NoError(t, err) -} - -func preUpgradeCheckPerpetualMarketType(node *containertest.Node, t *testing.T) { - perpetualsList := &perpetuals.QueryAllPerpetualsResponse{} - resp, err := containertest.Query( - node, - perpetuals.NewQueryClient, - perpetuals.QueryClient.AllPerpetuals, - &perpetuals.QueryAllPerpetualsRequest{}, - ) - require.NoError(t, err) - err = proto.UnmarshalText(resp.String(), perpetualsList) - require.NoError(t, err) - for _, perpetual := range perpetualsList.Perpetual { - assert.Equal(t, perpetuals.PerpetualMarketType_PERPETUAL_MARKET_TYPE_UNSPECIFIED, perpetual.Params.MarketType) - } -} - -func postUpgradeCheckVoteExtensions(node *containertest.Node, t *testing.T) { - consensusParams := &consensus.QueryParamsResponse{} - resp, err := containertest.Query( - node, - consensus.NewQueryClient, - consensus.QueryClient.Params, - &consensus.QueryParamsRequest{}, - ) - require.NoError(t, err) - err = proto.UnmarshalText(resp.String(), consensusParams) - require.NoError(t, err) - // testnet_utils.go::UpgradeTesnet has a Plan for upgrading on height 10 - assert.Equal(t, int64(10)+v_5_0_0.VEEnableHeightDelta, consensusParams.Params.Abci.VoteExtensionsEnableHeight) -} - -func postUpgradecheckPerpetualMarketType(node *containertest.Node, t *testing.T) { - perpetualsList := &perpetuals.QueryAllPerpetualsResponse{} - resp, err := containertest.Query( - node, - perpetuals.NewQueryClient, - perpetuals.QueryClient.AllPerpetuals, - &perpetuals.QueryAllPerpetualsRequest{}, - ) - require.NoError(t, err) - err = proto.UnmarshalText(resp.String(), perpetualsList) - require.NoError(t, err) - for _, perpetual := range perpetualsList.Perpetual { - assert.Equal(t, perpetuals.PerpetualMarketType_PERPETUAL_MARKET_TYPE_CROSS, perpetual.Params.MarketType) - } -} - -func postUpgradePerpetualOIs(node *containertest.Node, t *testing.T) { - resp, err := containertest.Query( - node, - perpetuals.NewQueryClient, - perpetuals.QueryClient.AllPerpetuals, - &perpetuals.QueryAllPerpetualsRequest{}, - ) - require.NoError(t, err) - - allPerpsResp := &perpetuals.QueryAllPerpetualsResponse{} - err = proto.UnmarshalText(resp.String(), allPerpsResp) - require.NoError(t, err) - - for _, perp := range allPerpsResp.Perpetual { - expectedOI := 0 - if perp.Params.Id == 0 { - expectedOI = AliceBobBTCQuantums + CarlDaveBTCQuantums - } else if perp.Params.Id == 1 { - expectedOI = CarlDaveETHQuantums - } - assert.Equalf(t, - dtypes.NewInt(int64(expectedOI)), - perp.OpenInterest, - "expected: %v, got: %v", - dtypes.NewInt(int64(expectedOI)), - perp.OpenInterest, - ) - } -} - -func postUpgradeCheckLiquidityTiers(node *containertest.Node, t *testing.T) { - resp, err := containertest.Query( - node, - perpetuals.NewQueryClient, - perpetuals.QueryClient.AllLiquidityTiers, - &perpetuals.QueryAllLiquidityTiersRequest{}, - ) - require.NoError(t, err) - - liquidityTiersResponse := &perpetuals.QueryAllLiquidityTiersResponse{} - err = proto.UnmarshalText(resp.String(), liquidityTiersResponse) - require.NoError(t, err) - - assert.Equal(t, 4, len(liquidityTiersResponse.LiquidityTiers)) - assert.Equal(t, perpetuals.LiquidityTier{ - Id: 0, - Name: "Large-Cap", - InitialMarginPpm: 50_000, - MaintenanceFractionPpm: 600_000, - ImpactNotional: 10_000_000_000, - OpenInterestLowerCap: uint64(0), - OpenInterestUpperCap: uint64(0), - }, liquidityTiersResponse.LiquidityTiers[0]) - - assert.Equal(t, perpetuals.LiquidityTier{ - Id: 1, - Name: "Mid-Cap", - InitialMarginPpm: 100_000, - MaintenanceFractionPpm: 500_000, - ImpactNotional: 5_000_000_000, - OpenInterestLowerCap: uint64(20_000_000_000_000), - OpenInterestUpperCap: uint64(50_000_000_000_000), - }, liquidityTiersResponse.LiquidityTiers[1]) - - assert.Equal(t, perpetuals.LiquidityTier{ - Id: 2, - Name: "Long-Tail", - InitialMarginPpm: 200_000, - MaintenanceFractionPpm: 500_000, - ImpactNotional: 2_500_000_000, - OpenInterestLowerCap: uint64(5_000_000_000_000), - OpenInterestUpperCap: uint64(10_000_000_000_000), - }, liquidityTiersResponse.LiquidityTiers[2]) - - assert.Equal(t, perpetuals.LiquidityTier{ - Id: 3, - Name: "Safety", - InitialMarginPpm: 1_000_000, - MaintenanceFractionPpm: 200_000, - ImpactNotional: 2_500_000_000, - OpenInterestLowerCap: uint64(2_000_000_000_000), - OpenInterestUpperCap: uint64(5_000_000_000_000), - }, liquidityTiersResponse.LiquidityTiers[3]) -} - -func postUpgradeCheckVaultParams(node *containertest.Node, t *testing.T) { - resp, err := containertest.Query( - node, - vaulttypes.NewQueryClient, - vaulttypes.QueryClient.Params, - &vaulttypes.QueryParamsRequest{}, - ) - require.NoError(t, err) - - paramsResponse := &vaulttypes.QueryParamsResponse{} - err = proto.UnmarshalText(resp.String(), paramsResponse) - require.NoError(t, err) - - assert.Equal(t, vaulttypes.DefaultParams(), paramsResponse.Params) -} diff --git a/protocol/scripts/genesis/sample_pregenesis.json b/protocol/scripts/genesis/sample_pregenesis.json index 28f8f31cb2..039ddd59c7 100644 --- a/protocol/scripts/genesis/sample_pregenesis.json +++ b/protocol/scripts/genesis/sample_pregenesis.json @@ -1842,7 +1842,7 @@ "sequences": [] } }, - "app_version": "5.0.0-dev0-167-gc13a8db9", + "app_version": "5.0.0-dev0-164-g7e9a3c39", "chain_id": "dydx-sample-1", "consensus": { "params": { diff --git a/protocol/testing/containertest/containertest.sh b/protocol/testing/containertest/containertest.sh index d64459628a..6f04efe3e8 100755 --- a/protocol/testing/containertest/containertest.sh +++ b/protocol/testing/containertest/containertest.sh @@ -7,7 +7,7 @@ set -eo pipefail source "./genesis.sh" CHAIN_ID="localdydxprotocol" -PREUPGRADE_VERSION="v4.1.0" +PREUPGRADE_VERSION="v5.0.0" # Define mnemonics for all validators. MNEMONICS=( diff --git a/protocol/testing/containertest/preupgrade_genesis.json b/protocol/testing/containertest/preupgrade_genesis.json index df7a3768ec..039ddd59c7 100644 --- a/protocol/testing/containertest/preupgrade_genesis.json +++ b/protocol/testing/containertest/preupgrade_genesis.json @@ -1,10 +1,5 @@ { "app_name": "dydxprotocold", - "app_version": "4.0.0-rc3", - "genesis_time": "2023-01-01T00:00:00Z", - "chain_id": "localdydxprotocol", - "initial_height": 1, - "app_hash": null, "app_state": { "assets": { "assets": [ @@ -20,178 +15,54 @@ ] }, "auth": { + "accounts": [], "params": { "max_memo_characters": "256", - "tx_sig_limit": "7", - "tx_size_cost_per_byte": "10", "sig_verify_cost_ed25519": "590", - "sig_verify_cost_secp256k1": "1000" - }, - "accounts": [ - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "dydx199tqg4wdlnu4qjlxchpd7seg454937hjrknju4", - "pub_key": null, - "account_number": "0", - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "dydx10fx7sy6ywd5senxae9dwytf8jxek3t2gcen2vs", - "pub_key": null, - "account_number": "1", - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "dydx1fjg6zp6vv8t9wvy4lps03r5l4g7tkjw9wvmh70", - "pub_key": null, - "account_number": "2", - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "dydx1wau5mja7j7zdavtfq9lu7ejef05hm6ffenlcsn", - "pub_key": null, - "account_number": "3", - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "dydx1nzuttarf5k2j0nug5yzhr6p74t9avehn9hlh8m", - "pub_key": null, - "account_number": "4", - "sequence": "0" - } - ] + "sig_verify_cost_secp256k1": "1000", + "tx_sig_limit": "7", + "tx_size_cost_per_byte": "10" + } }, "authz": { "authorization": [] }, "bank": { - "params": { - "send_enabled": [], - "default_send_enabled": true - }, "balances": [ { "address": "dydx1zlefkpe3g0vvm9a4h0jf9000lmqutlh9jwjnsv", "coins": [ { - "denom": "adv4tnt", - "amount": "795000000000000000000000000" - } - ] - }, - { - "address": "dydx199tqg4wdlnu4qjlxchpd7seg454937hjrknju4", - "coins": [ - { - "denom": "adv4tnt", - "amount": "1000000000000000000000000" - }, - { - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "amount": "100000000000000000" - } - ] - }, - { - "address": "dydx1fjg6zp6vv8t9wvy4lps03r5l4g7tkjw9wvmh70", - "coins": [ - { - "denom": "adv4tnt", - "amount": "1000000000000000000000000" - }, - { - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "amount": "100000000000000000" - } - ] - }, - { - "address": "dydx1v88c3xv9xyv3eetdx0tvcmq7ung3dywp5upwc6", - "coins": [ - { - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "amount": "1300000000000000000" - } - ] - }, - { - "address": "dydx1wau5mja7j7zdavtfq9lu7ejef05hm6ffenlcsn", - "coins": [ - { - "denom": "adv4tnt", - "amount": "1000000000000000000000000" - }, - { - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "amount": "100000000000000000" - } - ] - }, - { - "address": "dydx10fx7sy6ywd5senxae9dwytf8jxek3t2gcen2vs", - "coins": [ - { - "denom": "adv4tnt", - "amount": "1000000000000000000000000" - }, - { - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "amount": "100000000000000000" - } - ] - }, - { - "address": "dydx1nzuttarf5k2j0nug5yzhr6p74t9avehn9hlh8m", - "coins": [ - { - "denom": "adv4tnt", - "amount": "1000000000000000000000000" - }, - { - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "amount": "900000000000000000" - } - ] - }, - { - "address": "dydx1ltyc6y4skclzafvpznpt2qjwmfwgsndp458rmp", - "coins": [ - { - "denom": "adv4tnt", - "amount": "200000000000000000000000000" + "amount": "1000000000000000000000000000", + "denom": "asample" } ] } ], - "supply": [], "denom_metadata": [ { - "description": "The native token of the network", + "base": "asample", "denom_units": [ { - "denom": "adv4tnt", - "exponent": 0, - "aliases": [] + "denom": "asample" }, { - "denom": "dv4tnt", - "exponent": 18, - "aliases": [] + "denom": "sample", + "exponent": 18 } ], - "base": "adv4tnt", - "display": "dv4tnt", - "name": "dYdX V4 Testnet Token", - "symbol": "dv4tnt", - "uri": "", - "uri_hash": "" + "description": "The native token of the network", + "display": "sample", + "name": "Sample Coin Name", + "symbol": "sample" } ], - "send_enabled": [] + "params": { + "default_send_enabled": true, + "send_enabled": [] + }, + "send_enabled": [], + "supply": [] }, "blocktime": { "params": { @@ -203,13 +74,13 @@ }, "bridge": { "acknowledged_event_info": { - "eth_block_height": 4322136, - "next_id": 5 + "eth_block_height": 99999, + "next_id": 99 }, "event_params": { - "denom": "adv4tnt", - "eth_address": "0xf75012c350e4ad55be2048bd67ce6e03b20de82d", - "eth_chain_id": 11155111 + "denom": "asample", + "eth_address": "0xsampleaddress", + "eth_chain_id": 9 }, "propose_params": { "max_bridges_per_block": 10, @@ -228,18 +99,14 @@ }, "clob": { "block_rate_limit_config": { - "max_short_term_order_cancellations_per_n_blocks": [ + "max_short_term_order_cancellations_per_n_blocks": [], + "max_short_term_orders_and_cancels_per_n_blocks": [ { - "limit": 200, - "num_blocks": 1 - } - ], - "max_short_term_orders_per_n_blocks": [ - { - "limit": 200, + "limit": 400, "num_blocks": 1 } ], + "max_short_term_orders_per_n_blocks": [], "max_stateful_orders_per_n_blocks": [ { "limit": 2, @@ -258,7 +125,7 @@ "perpetual_id": 0 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 100000 }, @@ -268,7 +135,7 @@ "perpetual_id": 1 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 100000 }, @@ -278,7 +145,7 @@ "perpetual_id": 2 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -288,7 +155,7 @@ "perpetual_id": 3 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -298,7 +165,7 @@ "perpetual_id": 4 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -308,7 +175,7 @@ "perpetual_id": 5 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -318,7 +185,7 @@ "perpetual_id": 6 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -328,7 +195,7 @@ "perpetual_id": 7 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -338,7 +205,7 @@ "perpetual_id": 8 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -348,7 +215,7 @@ "perpetual_id": 9 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -358,7 +225,7 @@ "perpetual_id": 10 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -368,7 +235,7 @@ "perpetual_id": 11 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -378,7 +245,7 @@ "perpetual_id": 12 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -388,7 +255,7 @@ "perpetual_id": 13 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -398,7 +265,7 @@ "perpetual_id": 14 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -408,7 +275,7 @@ "perpetual_id": 15 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -418,7 +285,7 @@ "perpetual_id": 16 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -428,7 +295,7 @@ "perpetual_id": 17 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -438,7 +305,7 @@ "perpetual_id": 18 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -448,7 +315,7 @@ "perpetual_id": 19 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -458,7 +325,7 @@ "perpetual_id": 20 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -468,7 +335,7 @@ "perpetual_id": 21 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -478,7 +345,7 @@ "perpetual_id": 22 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -488,7 +355,7 @@ "perpetual_id": 23 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -498,7 +365,7 @@ "perpetual_id": 24 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -508,7 +375,7 @@ "perpetual_id": 25 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -518,7 +385,7 @@ "perpetual_id": 26 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -528,7 +395,7 @@ "perpetual_id": 27 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -538,7 +405,7 @@ "perpetual_id": 28 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -548,7 +415,7 @@ "perpetual_id": 29 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -558,7 +425,7 @@ "perpetual_id": 30 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -568,7 +435,7 @@ "perpetual_id": 31 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 }, @@ -578,7 +445,7 @@ "perpetual_id": 32 }, "quantum_conversion_exponent": -9, - "status": "STATUS_ACTIVE", + "status": "STATUS_INITIALIZING", "step_base_quantums": 1000000, "subticks_per_tick": 1000000 } @@ -655,14 +522,14 @@ }, "crisis": { "constant_fee": { - "amount": "1000", - "denom": "adv4tnt" + "amount": "1000000000000000000", + "denom": "asample" } }, "delaymsg": { "delayed_messages": [ { - "block_height": 378000, + "block_height": 6912000, "id": 0, "msg": { "@type": "/dydxprotocol.feetiers.MsgUpdatePerpetualFeeParams", @@ -758,7 +625,7 @@ "params": { "base_proposer_reward": "0.000000000000000000", "bonus_proposer_reward": "0.000000000000000000", - "community_tax": "0.020000000000000000", + "community_tax": "0.0", "withdraw_addr_enabled": true }, "previous_proposer": "", @@ -883,256 +750,7 @@ } }, "genutil": { - "gen_txs": [ - { - "body": { - "messages": [ - { - "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", - "description": { - "moniker": "alice", - "identity": "", - "website": "", - "security_contact": "", - "details": "" - }, - "commission": { - "rate": "1.000000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "dydx199tqg4wdlnu4qjlxchpd7seg454937hjrknju4", - "validator_address": "dydxvaloper199tqg4wdlnu4qjlxchpd7seg454937hjxg9yhy", - "pubkey": { - "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "YiARx8259Z+fGFUxQLrz/5FU2RYRT6f5yzvt7D7CrQM=" - }, - "value": { - "denom": "adv4tnt", - "amount": "500000000000000000000000" - } - } - ], - "memo": "17e5e45691f0d01449c84fd4ae87279578cdd7ec@172.17.0.2:26656", - "timeout_height": "0", - "extension_options": [], - "non_critical_extension_options": [] - }, - "auth_info": { - "signer_infos": [ - { - "public_key": { - "@type": "/cosmos.crypto.secp256k1.PubKey", - "key": "A0iQ+HpUfJGcgcH7iiEzY9VwCYWCTwg5LsTjc/q1XwSc" - }, - "mode_info": { - "single": { - "mode": "SIGN_MODE_DIRECT" - } - }, - "sequence": "0" - } - ], - "fee": { - "amount": [], - "gas_limit": "200000", - "payer": "", - "granter": "" - }, - "tip": null - }, - "signatures": [ - "OPf+X9U5GJwJOeTpBgW4HBpEP9PEivbMoUzy3WZiriMEghRJLuP3LGVpp4ePr8tEBoEEDFFu11ThiiyzjcmxIQ==" - ] - }, - { - "body": { - "messages": [ - { - "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", - "description": { - "moniker": "carl", - "identity": "", - "website": "", - "security_contact": "", - "details": "" - }, - "commission": { - "rate": "1.000000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "dydx1fjg6zp6vv8t9wvy4lps03r5l4g7tkjw9wvmh70", - "validator_address": "dydxvaloper1fjg6zp6vv8t9wvy4lps03r5l4g7tkjw9tjdp47", - "pubkey": { - "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "ytLfs1W6E2I41iteKC/YwjyZ/51+CAYCHYxmRHiBeY4=" - }, - "value": { - "denom": "adv4tnt", - "amount": "500000000000000000000000" - } - } - ], - "memo": "47539956aaa8e624e0f1d926040e54908ad0eb44@172.17.0.2:26656", - "timeout_height": "0", - "extension_options": [], - "non_critical_extension_options": [] - }, - "auth_info": { - "signer_infos": [ - { - "public_key": { - "@type": "/cosmos.crypto.secp256k1.PubKey", - "key": "AkA1fsLUhCSWbnemBIAR9CPkK1Ra1LlYZcrAKm/Ymvqn" - }, - "mode_info": { - "single": { - "mode": "SIGN_MODE_DIRECT" - } - }, - "sequence": "0" - } - ], - "fee": { - "amount": [], - "gas_limit": "200000", - "payer": "", - "granter": "" - }, - "tip": null - }, - "signatures": [ - "IWmBNPto7CR7GE5Qc/Vce6uRJvgmxAifUfnqsuk/9bU0a/efjPl9wCVqXoV4tBN5h8YUJTwtU7Ll2Lwiq7z9ew==" - ] - }, - { - "body": { - "messages": [ - { - "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", - "description": { - "moniker": "dave", - "identity": "", - "website": "", - "security_contact": "", - "details": "" - }, - "commission": { - "rate": "1.000000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "dydx1wau5mja7j7zdavtfq9lu7ejef05hm6ffenlcsn", - "validator_address": "dydxvaloper1wau5mja7j7zdavtfq9lu7ejef05hm6ffudfwmz", - "pubkey": { - "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "yG29kRfZ/hgAE1I7uWjbKQJJL4/gX/05XBnfB+m196A=" - }, - "value": { - "denom": "adv4tnt", - "amount": "500000000000000000000000" - } - } - ], - "memo": "5882428984d83b03d0c907c1f0af343534987052@172.17.0.2:26656", - "timeout_height": "0", - "extension_options": [], - "non_critical_extension_options": [] - }, - "auth_info": { - "signer_infos": [ - { - "public_key": { - "@type": "/cosmos.crypto.secp256k1.PubKey", - "key": "A87MchHGMj7i1xBwUfECtXzXJIgli/JVFoSaxUqIN86R" - }, - "mode_info": { - "single": { - "mode": "SIGN_MODE_DIRECT" - } - }, - "sequence": "0" - } - ], - "fee": { - "amount": [], - "gas_limit": "200000", - "payer": "", - "granter": "" - }, - "tip": null - }, - "signatures": [ - "PbkEltEhqvhavA99UFdnI1IoRPw/8mKAR/Wif4zNRDwCPs19Yu0GitohSQVAxJGs3xK9whKmGIJoQQd8cYQz+Q==" - ] - }, - { - "body": { - "messages": [ - { - "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", - "description": { - "moniker": "bob", - "identity": "", - "website": "", - "security_contact": "", - "details": "" - }, - "commission": { - "rate": "1.000000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "dydx10fx7sy6ywd5senxae9dwytf8jxek3t2gcen2vs", - "validator_address": "dydxvaloper10fx7sy6ywd5senxae9dwytf8jxek3t2ga89u8p", - "pubkey": { - "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "+P8YiogqqQY+iD96yEa9OJx6EgieU95u9eR3pzxfDp0=" - }, - "value": { - "denom": "adv4tnt", - "amount": "500000000000000000000000" - } - } - ], - "memo": "b69182310be02559483e42c77b7b104352713166@172.17.0.2:26656", - "timeout_height": "0", - "extension_options": [], - "non_critical_extension_options": [] - }, - "auth_info": { - "signer_infos": [ - { - "public_key": { - "@type": "/cosmos.crypto.secp256k1.PubKey", - "key": "AlamQtNuTEHlCbn4ZQ20em/bbQNcaAJO54yMOCoE8OTy" - }, - "mode_info": { - "single": { - "mode": "SIGN_MODE_DIRECT" - } - }, - "sequence": "0" - } - ], - "fee": { - "amount": [], - "gas_limit": "200000", - "payer": "", - "granter": "" - }, - "tip": null - }, - "signatures": [ - "Hoo2es537f4zoxDFfrIbhPPBvWIiWudssh34cdidg7NnckC8bl8o+cWsdRP8BO/JkwT67Tn7vQXV+RHU6H5opw==" - ] - } - ] + "gen_txs": [] }, "gov": { "constitution": "", @@ -1144,26 +762,26 @@ "expedited_min_deposit": [ { "amount": "50000000", - "denom": "adv4tnt" + "denom": "asample" } ], "expedited_threshold": "0.75000", - "expedited_voting_period": "60s", - "max_deposit_period": "300s", + "expedited_voting_period": "86400s", + "max_deposit_period": "172800s", "min_deposit": [ { - "amount": "10000000", - "denom": "adv4tnt" + "amount": "10000000000000000000000", + "denom": "asample" } ], "min_deposit_ratio": "0.010000000000000000", "min_initial_deposit_ratio": "0.20000", "proposal_cancel_dest": "", "proposal_cancel_ratio": "1", - "quorum": "0.334000000000000000", - "threshold": "0.500000000000000000", - "veto_threshold": "0.334000000000000000", - "voting_period": "300s" + "quorum": "0.33400", + "threshold": "0.50000", + "veto_threshold": "0.33400", + "voting_period": "345600s" }, "proposals": [], "starting_proposal_id": "1", @@ -1240,7 +858,9 @@ "impact_notional": 10000000000, "initial_margin_ppm": 50000, "maintenance_fraction_ppm": 600000, - "name": "Large-Cap" + "name": "Large-Cap", + "open_interest_lower_cap": 0, + "open_interest_upper_cap": 0 }, { "base_position_notional": 250000000000, @@ -1248,7 +868,9 @@ "impact_notional": 5000000000, "initial_margin_ppm": 100000, "maintenance_fraction_ppm": 500000, - "name": "Mid-Cap" + "name": "Mid-Cap", + "open_interest_lower_cap": 20000000000000, + "open_interest_upper_cap": 50000000000000 }, { "base_position_notional": 100000000000, @@ -1256,7 +878,9 @@ "impact_notional": 2500000000, "initial_margin_ppm": 200000, "maintenance_fraction_ppm": 500000, - "name": "Long-Tail" + "name": "Long-Tail", + "open_interest_lower_cap": 5000000000000, + "open_interest_upper_cap": 10000000000000 }, { "base_position_notional": 1000000000, @@ -1264,7 +888,9 @@ "impact_notional": 2500000000, "initial_margin_ppm": 1000000, "maintenance_fraction_ppm": 200000, - "name": "Safety" + "name": "Safety", + "open_interest_lower_cap": 2000000000000, + "open_interest_upper_cap": 5000000000000 } ], "params": { @@ -1280,6 +906,7 @@ "id": 0, "liquidity_tier": 0, "market_id": 0, + "market_type": 1, "ticker": "BTC-USD" } }, @@ -1290,6 +917,7 @@ "id": 1, "liquidity_tier": 0, "market_id": 1, + "market_type": 1, "ticker": "ETH-USD" } }, @@ -1300,6 +928,7 @@ "id": 2, "liquidity_tier": 1, "market_id": 2, + "market_type": 1, "ticker": "LINK-USD" } }, @@ -1310,6 +939,7 @@ "id": 3, "liquidity_tier": 1, "market_id": 3, + "market_type": 1, "ticker": "MATIC-USD" } }, @@ -1320,6 +950,7 @@ "id": 4, "liquidity_tier": 1, "market_id": 4, + "market_type": 1, "ticker": "CRV-USD" } }, @@ -1330,6 +961,7 @@ "id": 5, "liquidity_tier": 1, "market_id": 5, + "market_type": 1, "ticker": "SOL-USD" } }, @@ -1340,6 +972,7 @@ "id": 6, "liquidity_tier": 1, "market_id": 6, + "market_type": 1, "ticker": "ADA-USD" } }, @@ -1350,6 +983,7 @@ "id": 7, "liquidity_tier": 1, "market_id": 7, + "market_type": 1, "ticker": "AVAX-USD" } }, @@ -1360,6 +994,7 @@ "id": 8, "liquidity_tier": 1, "market_id": 8, + "market_type": 1, "ticker": "FIL-USD" } }, @@ -1370,6 +1005,7 @@ "id": 9, "liquidity_tier": 1, "market_id": 9, + "market_type": 1, "ticker": "LTC-USD" } }, @@ -1380,6 +1016,7 @@ "id": 10, "liquidity_tier": 1, "market_id": 10, + "market_type": 1, "ticker": "DOGE-USD" } }, @@ -1390,6 +1027,7 @@ "id": 11, "liquidity_tier": 1, "market_id": 11, + "market_type": 1, "ticker": "ATOM-USD" } }, @@ -1400,6 +1038,7 @@ "id": 12, "liquidity_tier": 1, "market_id": 12, + "market_type": 1, "ticker": "DOT-USD" } }, @@ -1410,6 +1049,7 @@ "id": 13, "liquidity_tier": 1, "market_id": 13, + "market_type": 1, "ticker": "UNI-USD" } }, @@ -1420,6 +1060,7 @@ "id": 14, "liquidity_tier": 1, "market_id": 14, + "market_type": 1, "ticker": "BCH-USD" } }, @@ -1430,6 +1071,7 @@ "id": 15, "liquidity_tier": 1, "market_id": 15, + "market_type": 1, "ticker": "TRX-USD" } }, @@ -1440,6 +1082,7 @@ "id": 16, "liquidity_tier": 1, "market_id": 16, + "market_type": 1, "ticker": "NEAR-USD" } }, @@ -1450,6 +1093,7 @@ "id": 17, "liquidity_tier": 2, "market_id": 17, + "market_type": 1, "ticker": "MKR-USD" } }, @@ -1460,6 +1104,7 @@ "id": 18, "liquidity_tier": 1, "market_id": 18, + "market_type": 1, "ticker": "XLM-USD" } }, @@ -1470,6 +1115,7 @@ "id": 19, "liquidity_tier": 1, "market_id": 19, + "market_type": 1, "ticker": "ETC-USD" } }, @@ -1480,6 +1126,7 @@ "id": 20, "liquidity_tier": 2, "market_id": 20, + "market_type": 1, "ticker": "COMP-USD" } }, @@ -1490,6 +1137,7 @@ "id": 21, "liquidity_tier": 1, "market_id": 21, + "market_type": 1, "ticker": "WLD-USD" } }, @@ -1500,6 +1148,7 @@ "id": 22, "liquidity_tier": 2, "market_id": 22, + "market_type": 1, "ticker": "APE-USD" } }, @@ -1510,6 +1159,7 @@ "id": 23, "liquidity_tier": 1, "market_id": 23, + "market_type": 1, "ticker": "APT-USD" } }, @@ -1520,6 +1170,7 @@ "id": 24, "liquidity_tier": 1, "market_id": 24, + "market_type": 1, "ticker": "ARB-USD" } }, @@ -1530,6 +1181,7 @@ "id": 25, "liquidity_tier": 2, "market_id": 25, + "market_type": 1, "ticker": "BLUR-USD" } }, @@ -1540,6 +1192,7 @@ "id": 26, "liquidity_tier": 2, "market_id": 26, + "market_type": 1, "ticker": "LDO-USD" } }, @@ -1550,6 +1203,7 @@ "id": 27, "liquidity_tier": 1, "market_id": 27, + "market_type": 1, "ticker": "OP-USD" } }, @@ -1560,6 +1214,7 @@ "id": 28, "liquidity_tier": 1, "market_id": 28, + "market_type": 1, "ticker": "PEPE-USD" } }, @@ -1570,6 +1225,7 @@ "id": 29, "liquidity_tier": 2, "market_id": 29, + "market_type": 1, "ticker": "SEI-USD" } }, @@ -1580,6 +1236,7 @@ "id": 30, "liquidity_tier": 1, "market_id": 30, + "market_type": 1, "ticker": "SHIB-USD" } }, @@ -1590,6 +1247,7 @@ "id": 31, "liquidity_tier": 1, "market_id": 31, + "market_type": 1, "ticker": "SUI-USD" } }, @@ -1600,6 +1258,7 @@ "id": 32, "liquidity_tier": 1, "market_id": 32, + "market_type": 1, "ticker": "XRP-USD" } } @@ -2087,10 +1746,10 @@ }, "rewards": { "params": { - "denom": "adv4tnt", + "denom": "asample", "denom_exponent": -18, - "fee_multiplier_ppm": 990000, - "market_id": 11, + "fee_multiplier_ppm": 0, + "market_id": 1, "treasury_account": "rewards_treasury" } }, @@ -2098,11 +1757,11 @@ "slashing": { "missed_blocks": [], "params": { - "downtime_jail_duration": "60s", - "min_signed_per_window": "0.050000000000000000", - "signed_blocks_window": "3000", - "slash_fraction_double_sign": "0.000000000000000000", - "slash_fraction_downtime": "0.000000000000000000" + "downtime_jail_duration": "7200s", + "min_signed_per_window": "0.2", + "signed_blocks_window": "8192", + "slash_fraction_double_sign": "0.0", + "slash_fraction_downtime": "0.0" }, "signing_infos": [] }, @@ -2112,12 +1771,12 @@ "last_total_power": "0", "last_validator_powers": [], "params": { - "bond_denom": "adv4tnt", + "bond_denom": "asample", "historical_entries": 10000, "max_entries": 7, - "max_validators": 100, - "min_commission_rate": "0.000000000000000000", - "unbonding_time": "1814400s" + "max_validators": 60, + "min_commission_rate": "0.05", + "unbonding_time": "2592000s" }, "redelegations": [], "unbonding_delegations": [], @@ -2129,78 +1788,7 @@ } }, "subaccounts": { - "subaccounts": [ - { - "asset_positions": [ - { - "asset_id": 0, - "index": 0, - "quantums": "100000000000000000" - } - ], - "id": { - "number": 0, - "owner": "dydx199tqg4wdlnu4qjlxchpd7seg454937hjrknju4" - }, - "margin_enabled": true - }, - { - "asset_positions": [ - { - "asset_id": 0, - "index": 0, - "quantums": "100000000000000000" - } - ], - "id": { - "number": 0, - "owner": "dydx10fx7sy6ywd5senxae9dwytf8jxek3t2gcen2vs" - }, - "margin_enabled": true - }, - { - "asset_positions": [ - { - "asset_id": 0, - "index": 0, - "quantums": "100000000000000000" - } - ], - "id": { - "number": 0, - "owner": "dydx1fjg6zp6vv8t9wvy4lps03r5l4g7tkjw9wvmh70" - }, - "margin_enabled": true - }, - { - "asset_positions": [ - { - "asset_id": 0, - "index": 0, - "quantums": "100000000000000000" - } - ], - "id": { - "number": 0, - "owner": "dydx1wau5mja7j7zdavtfq9lu7ejef05hm6ffenlcsn" - }, - "margin_enabled": true - }, - { - "asset_positions": [ - { - "asset_id": 0, - "index": 0, - "quantums": "900000000000000000" - } - ], - "id": { - "number": 0, - "owner": "dydx1nzuttarf5k2j0nug5yzhr6p74t9avehn9hlh8m" - }, - "margin_enabled": true - } - ] + "subaccounts": [] }, "transfer": { "denom_traces": [], @@ -2212,34 +1800,62 @@ "total_escrowed": [] }, "upgrade": {}, + "vault": { + "params": { + "activation_threshold_quote_quantums": "1000000000", + "layers": 2, + "order_expiration_seconds": 2, + "order_size_pct_ppm": 100000, + "skew_factor_ppm": 2000000, + "spread_buffer_ppm": 1500, + "spread_min_ppm": 10000 + } + }, "vest": { "vest_entries": [ { - "denom": "adv4tnt", - "end_time": "2025-01-01T00:00:00Z", - "start_time": "2023-01-01T00:00:00Z", + "denom": "asample", + "end_time": "2050-01-01T00:00:00Z", + "start_time": "2001-01-01T00:00:00Z", "treasury_account": "community_treasury", "vester_account": "community_vester" }, { - "denom": "adv4tnt", - "end_time": "2025-01-01T00:00:00Z", - "start_time": "2023-01-01T00:00:00Z", + "denom": "asample", + "end_time": "2050-01-01T00:00:00Z", + "start_time": "2001-01-01T00:00:00Z", "treasury_account": "rewards_treasury", "vester_account": "rewards_vester" } ] + }, + "wasm": { + "codes": [], + "contracts": [], + "params": { + "code_upload_access": { + "addresses": [], + "permission": "Everybody" + }, + "instantiate_default_permission": "Everybody" + }, + "sequences": [] } }, + "app_version": "5.0.0-dev0-164-g7e9a3c39", + "chain_id": "dydx-sample-1", "consensus": { "params": { + "abci": { + "vote_extensions_enable_height": "1" + }, "block": { - "max_bytes": "22020096", + "max_bytes": "4194304", "max_gas": "-1" }, "evidence": { - "max_age_num_blocks": "100000", "max_age_duration": "172800000000000", + "max_age_num_blocks": "100000", "max_bytes": "1048576" }, "validator": { @@ -2249,10 +1865,9 @@ }, "version": { "app": "0" - }, - "abci": { - "vote_extensions_enable_height": "0" } } - } -} \ No newline at end of file + }, + "genesis_time": "2023-12-31T00:00:00Z", + "initial_height": 1 +} diff --git a/protocol/testing/containertest/testnet.go b/protocol/testing/containertest/testnet.go index 8e036476c3..28ec6fee6a 100644 --- a/protocol/testing/containertest/testnet.go +++ b/protocol/testing/containertest/testnet.go @@ -25,7 +25,7 @@ const persistentPeers = "17e5e45691f0d01449c84fd4ae87279578cdd7ec@testnet-local- const resourceLifetimeSecs = 600 // The version of that we're upgrading to (aka the current commit) -const UpgradeToVersion = "v5.0.0" +const UpgradeToVersion = "v6.6.6" func monikers() map[string]string { return map[string]string{ From 37fc071859ca192045b76350f7919d3f197c2ba4 Mon Sep 17 00:00:00 2001 From: affan Date: Tue, 2 Jul 2024 17:18:04 -0400 Subject: [PATCH 09/17] add upgrade test --- protocol/app/upgrades.go | 15 +- .../app/upgrades/v.cosmwasm.0/constants.go | 9 +- protocol/app/upgrades/v.cosmwasm.0/upgrade.go | 73 +++++- .../v.cosmwasm.0/upgrade_container_test.go | 2 - .../upgrades/v6.0.0/upgrade_container_test.go | 248 ------------------ protocol/testing/containertest/testnet.go | 2 +- 6 files changed, 87 insertions(+), 262 deletions(-) delete mode 100644 protocol/app/upgrades/v6.0.0/upgrade_container_test.go diff --git a/protocol/app/upgrades.go b/protocol/app/upgrades.go index 515ec3944e..3b9fa17a77 100644 --- a/protocol/app/upgrades.go +++ b/protocol/app/upgrades.go @@ -3,7 +3,7 @@ package app import ( "fmt" - v_upgrade_cosmwasm "github.com/dydxprotocol/v4-chain/protocol/app/upgrades/v.cosmwasm.0" + v_cosmwasm_0 "github.com/dydxprotocol/v4-chain/protocol/app/upgrades/v.cosmwasm.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{ - v_upgrade_cosmwasm.Upgrade, + v_cosmwasm_0.Upgrade, } Forks = []upgrades.Fork{} ) @@ -22,14 +22,17 @@ 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(v_upgrade_cosmwasm.UpgradeName) { - panic(fmt.Sprintf("Cannot register duplicate upgrade handler '%s'", v_upgrade_cosmwasm.UpgradeName)) + if app.UpgradeKeeper.HasHandler(v_cosmwasm_0.UpgradeName) { + panic(fmt.Sprintf("Cannot register duplicate upgrade handler '%s'", v_cosmwasm_0.UpgradeName)) } app.UpgradeKeeper.SetUpgradeHandler( - v_upgrade_cosmwasm.UpgradeName, - v_upgrade_cosmwasm.CreateUpgradeHandler( + v_cosmwasm_0.UpgradeName, + v_cosmwasm_0.CreateUpgradeHandler( app.ModuleManager, app.configurator, + app.ClobKeeper, + app.RevShareKeeper, + app.PricesKeeper, app.AccountKeeper, ), ) diff --git a/protocol/app/upgrades/v.cosmwasm.0/constants.go b/protocol/app/upgrades/v.cosmwasm.0/constants.go index 2a61c8dc57..ac4a9334d1 100644 --- a/protocol/app/upgrades/v.cosmwasm.0/constants.go +++ b/protocol/app/upgrades/v.cosmwasm.0/constants.go @@ -3,21 +3,24 @@ package v_cosmwasm_0 import ( store "cosmossdk.io/store/types" "github.com/dydxprotocol/v4-chain/protocol/app/upgrades" + listingtypes "github.com/dydxprotocol/v4-chain/protocol/x/listing/types" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" - vaulttypes "github.com/dydxprotocol/v4-chain/protocol/x/vault/types" + + revsharetypes "github.com/dydxprotocol/v4-chain/protocol/x/revshare/types" ) const ( - UpgradeName = "v6.6.6" + UpgradeName = "v6.cosmwasm.0" ) var Upgrade = upgrades.Upgrade{ UpgradeName: UpgradeName, StoreUpgrades: store.StoreUpgrades{ Added: []string{ - vaulttypes.StoreKey, + listingtypes.StoreKey, wasmtypes.StoreKey, + revsharetypes.StoreKey, }, }, } diff --git a/protocol/app/upgrades/v.cosmwasm.0/upgrade.go b/protocol/app/upgrades/v.cosmwasm.0/upgrade.go index f4759c02db..334daf79bb 100644 --- a/protocol/app/upgrades/v.cosmwasm.0/upgrade.go +++ b/protocol/app/upgrades/v.cosmwasm.0/upgrade.go @@ -12,6 +12,12 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + indexerevents "github.com/dydxprotocol/v4-chain/protocol/indexer/events" + "github.com/dydxprotocol/v4-chain/protocol/indexer/indexer_manager" + indexershared "github.com/dydxprotocol/v4-chain/protocol/indexer/shared" + clobtypes "github.com/dydxprotocol/v4-chain/protocol/x/clob/types" + pricetypes "github.com/dydxprotocol/v4-chain/protocol/x/prices/types" + revsharetypes "github.com/dydxprotocol/v4-chain/protocol/x/revshare/types" ) var ModuleAccsToInitialize = []string{ @@ -80,15 +86,78 @@ func InitializeModuleAccs(ctx sdk.Context, ak authkeeper.AccountKeeper) { } } +func removeStatefulFOKOrders(ctx sdk.Context, k clobtypes.ClobKeeper) { + allStatefulOrders := k.GetAllStatefulOrders(ctx) + for _, order := range allStatefulOrders { + if order.TimeInForce == clobtypes.Order_TIME_IN_FORCE_FILL_OR_KILL { + // Remove the orders from state. + k.MustRemoveStatefulOrder(ctx, order.OrderId) + + // Send indexer event for removal of stateful order. + k.GetIndexerEventManager().AddTxnEvent( + ctx, + indexerevents.SubtypeStatefulOrder, + indexerevents.StatefulOrderEventVersion, + indexer_manager.GetBytes( + indexerevents.NewStatefulOrderRemovalEvent( + order.OrderId, + indexershared.ConvertOrderRemovalReasonToIndexerOrderRemovalReason( + clobtypes.OrderRemoval_REMOVAL_REASON_CONDITIONAL_FOK_COULD_NOT_BE_FULLY_FILLED, + ), + ), + ), + ) + } + } +} + +func initRevShareModuleState( + ctx sdk.Context, + revShareKeeper revsharetypes.RevShareKeeper, + priceKeeper pricetypes.PricesKeeper, +) { + // Initialize the rev share module state. + params := revsharetypes.MarketMapperRevenueShareParams{ + Address: authtypes.NewModuleAddress(authtypes.FeeCollectorName).String(), + RevenueSharePpm: 0, + ValidDays: 0, + } + err := revShareKeeper.SetMarketMapperRevenueShareParams(ctx, params) + if err != nil { + panic(fmt.Sprintf("failed to set market mapper revenue share params: %s", err)) + } + + // Initialize the rev share details for all existing markets. + markets := priceKeeper.GetAllMarketParams(ctx) + for _, market := range markets { + revShareDetails := revsharetypes.MarketMapperRevShareDetails{ + ExpirationTs: 0, + } + revShareKeeper.SetMarketMapperRevShareDetails(ctx, market.Id, revShareDetails) + } +} + func CreateUpgradeHandler( mm *module.Manager, configurator module.Configurator, + clobKeeper clobtypes.ClobKeeper, + revShareKeeper revsharetypes.RevShareKeeper, + priceKeeper pricetypes.PricesKeeper, ak authkeeper.AccountKeeper, ) 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("Running %s Upgrade...", UpgradeName) - InitializeModuleAccs(sdkCtx, ak) + sdkCtx.Logger().Info(fmt.Sprintf("Running %s Upgrade...", UpgradeName)) + + // InitializeModuleAccs(sdkCtx, ak) + // Remove all stateful FOK orders from state. + removeStatefulFOKOrders(sdkCtx, clobKeeper) + + // Initialize the rev share module state. + initRevShareModuleState(sdkCtx, revShareKeeper, priceKeeper) + + sdkCtx.Logger().Info("Successfully removed stateful orders from state") + return mm.RunMigrations(ctx, configurator, vm) } } diff --git a/protocol/app/upgrades/v.cosmwasm.0/upgrade_container_test.go b/protocol/app/upgrades/v.cosmwasm.0/upgrade_container_test.go index abfc630fe7..568e95b3a9 100644 --- a/protocol/app/upgrades/v.cosmwasm.0/upgrade_container_test.go +++ b/protocol/app/upgrades/v.cosmwasm.0/upgrade_container_test.go @@ -1,5 +1,3 @@ -//go:build all || container_test - package v_cosmwasm_0_test import ( diff --git a/protocol/app/upgrades/v6.0.0/upgrade_container_test.go b/protocol/app/upgrades/v6.0.0/upgrade_container_test.go deleted file mode 100644 index 500cf23380..0000000000 --- a/protocol/app/upgrades/v6.0.0/upgrade_container_test.go +++ /dev/null @@ -1,248 +0,0 @@ -//go:build all || container_test - -package v_6_0_0_test - -import ( - "testing" - "time" - - pricestypes "github.com/dydxprotocol/v4-chain/protocol/x/prices/types" - - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - "github.com/cosmos/gogoproto/proto" - revsharetypes "github.com/dydxprotocol/v4-chain/protocol/x/revshare/types" - - v_6_0_0 "github.com/dydxprotocol/v4-chain/protocol/app/upgrades/v6.0.0" - "github.com/dydxprotocol/v4-chain/protocol/testing/containertest" - "github.com/dydxprotocol/v4-chain/protocol/testutil/constants" - clobtypes "github.com/dydxprotocol/v4-chain/protocol/x/clob/types" - satypes "github.com/dydxprotocol/v4-chain/protocol/x/subaccounts/types" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -const ( - AliceBobBTCQuantums = 1_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_6_0_0.UpgradeName) - require.NoError(t, err) - - postUpgradeChecks(node, t) -} - -func preUpgradeSetups(node *containertest.Node, t *testing.T) { - placeOrders(node, t) -} - -func preUpgradeChecks(node *containertest.Node, t *testing.T) { - // Add test for your upgrade handler logic below - preUpgradeStatefulOrderCheck(node, t) -} - -func postUpgradeChecks(node *containertest.Node, t *testing.T) { - // Add test for your upgrade handler logic below - postUpgradeStatefulOrderCheck(node, t) - postUpgradeMarketMapperRevShareChecks(node, t) -} - -func placeOrders(node *containertest.Node, t *testing.T) { - // FOK order setups. - require.NoError(t, containertest.BroadcastTxWithoutValidateBasic( - node, - &clobtypes.MsgPlaceOrder{ - Order: clobtypes.Order{ - OrderId: clobtypes.OrderId{ - ClientId: 100, - SubaccountId: satypes.SubaccountId{ - Owner: constants.AliceAccAddress.String(), - Number: 0, - }, - ClobPairId: 0, - OrderFlags: clobtypes.OrderIdFlags_Conditional, - }, - Side: clobtypes.Order_SIDE_BUY, - Quantums: AliceBobBTCQuantums, - Subticks: 6_000_000, - TimeInForce: clobtypes.Order_TIME_IN_FORCE_FILL_OR_KILL, - ConditionType: clobtypes.Order_CONDITION_TYPE_TAKE_PROFIT, - ConditionalOrderTriggerSubticks: 6_000_000, - GoodTilOneof: &clobtypes.Order_GoodTilBlockTime{ - GoodTilBlockTime: uint32(time.Now().Unix() + 300), - }, - }, - }, - constants.AliceAccAddress.String(), - )) - - err := node.Wait(1) - require.NoError(t, err) - - require.NoError(t, containertest.BroadcastTxWithoutValidateBasic( - node, - &clobtypes.MsgPlaceOrder{ - Order: clobtypes.Order{ - OrderId: clobtypes.OrderId{ - ClientId: 101, - SubaccountId: satypes.SubaccountId{ - Owner: constants.AliceAccAddress.String(), - Number: 0, - }, - ClobPairId: 0, - OrderFlags: clobtypes.OrderIdFlags_Conditional, - }, - Side: clobtypes.Order_SIDE_SELL, - Quantums: AliceBobBTCQuantums, - Subticks: 6_000_000, - TimeInForce: clobtypes.Order_TIME_IN_FORCE_FILL_OR_KILL, - ConditionType: clobtypes.Order_CONDITION_TYPE_STOP_LOSS, - ConditionalOrderTriggerSubticks: 6_000_000, - GoodTilOneof: &clobtypes.Order_GoodTilBlockTime{ - GoodTilBlockTime: uint32(time.Now().Unix() + 300), - }, - }, - }, - constants.AliceAccAddress.String(), - )) - - err = node.Wait(2) - require.NoError(t, err) -} - -func preUpgradeStatefulOrderCheck(node *containertest.Node, t *testing.T) { - // Check that all stateful orders are present. - _, err := containertest.Query( - node, - clobtypes.NewQueryClient, - clobtypes.QueryClient.StatefulOrder, - &clobtypes.QueryStatefulOrderRequest{ - OrderId: clobtypes.OrderId{ - ClientId: 100, - SubaccountId: satypes.SubaccountId{ - Owner: constants.AliceAccAddress.String(), - Number: 0, - }, - ClobPairId: 0, - OrderFlags: clobtypes.OrderIdFlags_Conditional, - }, - }, - ) - require.NoError(t, err) - - _, err = containertest.Query( - node, - clobtypes.NewQueryClient, - clobtypes.QueryClient.StatefulOrder, - &clobtypes.QueryStatefulOrderRequest{ - OrderId: clobtypes.OrderId{ - ClientId: 101, - SubaccountId: satypes.SubaccountId{ - Owner: constants.AliceAccAddress.String(), - Number: 0, - }, - ClobPairId: 0, - OrderFlags: clobtypes.OrderIdFlags_Conditional, - }, - }, - ) - require.NoError(t, err) -} - -func postUpgradeStatefulOrderCheck(node *containertest.Node, t *testing.T) { - // Check that all stateful orders are removed. - _, err := containertest.Query( - node, - clobtypes.NewQueryClient, - clobtypes.QueryClient.StatefulOrder, - &clobtypes.QueryStatefulOrderRequest{ - OrderId: clobtypes.OrderId{ - ClientId: 100, - SubaccountId: satypes.SubaccountId{ - Owner: constants.AliceAccAddress.String(), - Number: 0, - }, - ClobPairId: 0, - OrderFlags: clobtypes.OrderIdFlags_Conditional, - }, - }, - ) - require.ErrorIs(t, err, status.Error(codes.NotFound, "not found")) - - _, err = containertest.Query( - node, - clobtypes.NewQueryClient, - clobtypes.QueryClient.StatefulOrder, - &clobtypes.QueryStatefulOrderRequest{ - OrderId: clobtypes.OrderId{ - ClientId: 101, - SubaccountId: satypes.SubaccountId{ - Owner: constants.AliceAccAddress.String(), - Number: 0, - }, - ClobPairId: 0, - OrderFlags: clobtypes.OrderIdFlags_Conditional, - }, - }, - ) - require.ErrorIs(t, err, status.Error(codes.NotFound, "not found")) -} - -func postUpgradeMarketMapperRevShareChecks(node *containertest.Node, t *testing.T) { - // Check that all rev share params are set to the default value - resp, err := containertest.Query( - node, - revsharetypes.NewQueryClient, - revsharetypes.QueryClient.MarketMapperRevenueShareParams, - &revsharetypes.QueryMarketMapperRevenueShareParams{}, - ) - require.NoError(t, err) - - params := revsharetypes.QueryMarketMapperRevenueShareParamsResponse{} - err = proto.UnmarshalText(resp.String(), ¶ms) - require.NoError(t, err) - require.Equal(t, params.Params.Address, authtypes.NewModuleAddress(authtypes.FeeCollectorName).String()) - require.Equal(t, params.Params.RevenueSharePpm, uint32(0)) - require.Equal(t, params.Params.ValidDays, uint32(0)) - - // Get all markets list - marketParams := pricestypes.QueryAllMarketParamsResponse{} - resp, err = containertest.Query( - node, - pricestypes.NewQueryClient, - pricestypes.QueryClient.AllMarketParams, - &pricestypes.QueryAllMarketParamsRequest{}, - ) - require.NoError(t, err) - err = proto.UnmarshalText(resp.String(), &marketParams) - require.NoError(t, err) - - // Check that all rev share details are set to the default value - for _, market := range marketParams.MarketParams { - revShareDetails := revsharetypes.QueryMarketMapperRevShareDetailsResponse{} - resp, err := containertest.Query( - node, - revsharetypes.NewQueryClient, - revsharetypes.QueryClient.MarketMapperRevShareDetails, - &revsharetypes.QueryMarketMapperRevShareDetails{ - MarketId: market.Id, - }, - ) - require.NoError(t, err) - err = proto.UnmarshalText(resp.String(), &revShareDetails) - require.NoError(t, err) - require.Equal(t, revShareDetails.Details.ExpirationTs, uint64(0)) - } -} diff --git a/protocol/testing/containertest/testnet.go b/protocol/testing/containertest/testnet.go index b65fe13341..3c037ee6c2 100644 --- a/protocol/testing/containertest/testnet.go +++ b/protocol/testing/containertest/testnet.go @@ -25,7 +25,7 @@ const persistentPeers = "17e5e45691f0d01449c84fd4ae87279578cdd7ec@testnet-local- const resourceLifetimeSecs = 600 // The version of that we're upgrading to (aka the current commit) -const UpgradeToVersion = "v6.6.6" +const UpgradeToVersion = "v6.cosmwasm.0" func monikers() map[string]string { return map[string]string{ From e4798dbaf43b11ea93ddf3265e22479baf8da9d5 Mon Sep 17 00:00:00 2001 From: affan Date: Tue, 2 Jul 2024 17:20:41 -0400 Subject: [PATCH 10/17] fix lint --- protocol/wasmbinding/bindings/msg.go | 8 ++++---- protocol/wasmbinding/msg_plugin.go | 12 ++++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/protocol/wasmbinding/bindings/msg.go b/protocol/wasmbinding/bindings/msg.go index 3ceccffac9..7c84e75486 100644 --- a/protocol/wasmbinding/bindings/msg.go +++ b/protocol/wasmbinding/bindings/msg.go @@ -1,7 +1,7 @@ package bindings import ( - subaccounttypes "github.com/dydxprotocol/v4-chain/protocol/x/subaccounts/types" + satypes "github.com/dydxprotocol/v4-chain/protocol/x/subaccounts/types" ) type DydxCustomWasmMessage struct { @@ -12,9 +12,9 @@ type DydxCustomWasmMessage struct { } type DepositToSubaccountV1 struct { - Recipient subaccounttypes.SubaccountId `json:"recipient"` - AssetId uint32 `json:"asset_id"` - Quantums uint64 `json:"quantums"` + Recipient satypes.SubaccountId `json:"recipient"` + AssetId uint32 `json:"asset_id"` + Quantums uint64 `json:"quantums"` } type WithdrawFromSubaccountV1 struct { diff --git a/protocol/wasmbinding/msg_plugin.go b/protocol/wasmbinding/msg_plugin.go index b641e80cb0..1cffcd3f3d 100644 --- a/protocol/wasmbinding/msg_plugin.go +++ b/protocol/wasmbinding/msg_plugin.go @@ -34,9 +34,11 @@ func EncodeDydxCustomWasmMessage(contractAddr sdk.AccAddress, msg json.RawMessag } } -func EncodeDepositToSubaccountV1(contractAddr sdk.AccAddress, depositToSubaccount *bindings.DepositToSubaccountV1) ([]sdk.Msg, error) { +func EncodeDepositToSubaccountV1(contractAddr sdk.AccAddress, + depositToSubaccount *bindings.DepositToSubaccountV1) ([]sdk.Msg, error) { if depositToSubaccount == nil { - return nil, wasmvmtypes.InvalidRequest{Err: "Invalid deposit to subaccount request: No deposit data provided"} + return nil, wasmvmtypes.InvalidRequest{ + Err: "Invalid deposit to subaccount request: No deposit data provided"} } depositToSubaccountMsg := &sendingtypes.MsgDepositToSubaccount{ @@ -48,9 +50,11 @@ func EncodeDepositToSubaccountV1(contractAddr sdk.AccAddress, depositToSubaccoun return []sdk.Msg{depositToSubaccountMsg}, nil } -func EncodeWithdrawFromSubaccountV1(contractAddr sdk.AccAddress, withdrawFromSubaccount *bindings.WithdrawFromSubaccountV1) ([]sdk.Msg, error) { +func EncodeWithdrawFromSubaccountV1(contractAddr sdk.AccAddress, + withdrawFromSubaccount *bindings.WithdrawFromSubaccountV1) ([]sdk.Msg, error) { if withdrawFromSubaccount == nil { - return nil, wasmvmtypes.InvalidRequest{Err: "Invalid withdraw from subaccount request: No withdraw data provided"} + return nil, wasmvmtypes.InvalidRequest{ + Err: "Invalid withdraw from subaccount request: No withdraw data provided"} } withdrawFromSubaccountMsg := &sendingtypes.MsgWithdrawFromSubaccount{ From 99b658d81bb91b74895eb1edef90cdd06e3098a6 Mon Sep 17 00:00:00 2001 From: affan Date: Wed, 3 Jul 2024 10:47:18 -0400 Subject: [PATCH 11/17] intialize module accounts --- protocol/app/upgrades/v.cosmwasm.0/upgrade.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocol/app/upgrades/v.cosmwasm.0/upgrade.go b/protocol/app/upgrades/v.cosmwasm.0/upgrade.go index 334daf79bb..f6c9f385de 100644 --- a/protocol/app/upgrades/v.cosmwasm.0/upgrade.go +++ b/protocol/app/upgrades/v.cosmwasm.0/upgrade.go @@ -149,7 +149,7 @@ func CreateUpgradeHandler( sdkCtx := lib.UnwrapSDKContext(ctx, "app/upgrades") sdkCtx.Logger().Info(fmt.Sprintf("Running %s Upgrade...", UpgradeName)) - // InitializeModuleAccs(sdkCtx, ak) + InitializeModuleAccs(sdkCtx, ak) // Remove all stateful FOK orders from state. removeStatefulFOKOrders(sdkCtx, clobKeeper) From 04c899d29a4be4ab02ae880564f87f955c7e4756 Mon Sep 17 00:00:00 2001 From: affan Date: Wed, 3 Jul 2024 10:48:53 -0400 Subject: [PATCH 12/17] update sample pregenesis --- protocol/scripts/genesis/sample_pregenesis.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/protocol/scripts/genesis/sample_pregenesis.json b/protocol/scripts/genesis/sample_pregenesis.json index b5c382f576..02b5708fca 100644 --- a/protocol/scripts/genesis/sample_pregenesis.json +++ b/protocol/scripts/genesis/sample_pregenesis.json @@ -853,7 +853,6 @@ "listing": { "hard_cap_for_markets": 0 }, - "params": null, "perpetuals": { "liquidity_tiers": [ { @@ -1854,7 +1853,7 @@ "sequences": [] } }, - "app_version": "5.0.0-dev0-164-g7e9a3c39", + "app_version": "5.0.0-dev0-342-g99b658d8", "chain_id": "dydx-sample-1", "consensus": { "params": { From 4c63728b609a8d2f385e6598f12b805cb43544bd Mon Sep 17 00:00:00 2001 From: affan Date: Wed, 3 Jul 2024 13:41:25 -0400 Subject: [PATCH 13/17] add build tag --- protocol/app/upgrades/v.cosmwasm.0/upgrade_container_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/protocol/app/upgrades/v.cosmwasm.0/upgrade_container_test.go b/protocol/app/upgrades/v.cosmwasm.0/upgrade_container_test.go index 568e95b3a9..abfc630fe7 100644 --- a/protocol/app/upgrades/v.cosmwasm.0/upgrade_container_test.go +++ b/protocol/app/upgrades/v.cosmwasm.0/upgrade_container_test.go @@ -1,3 +1,5 @@ +//go:build all || container_test + package v_cosmwasm_0_test import ( From cc0cdef5249dfea63a8a97d8063bf1c1bf403418 Mon Sep 17 00:00:00 2001 From: affan Date: Wed, 3 Jul 2024 14:55:56 -0400 Subject: [PATCH 14/17] document --- protocol/app/module_accounts_test.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/protocol/app/module_accounts_test.go b/protocol/app/module_accounts_test.go index fa96e5f36e..a76ade90cc 100644 --- a/protocol/app/module_accounts_test.go +++ b/protocol/app/module_accounts_test.go @@ -74,7 +74,9 @@ func TestMaccPerms(t *testing.T) { "rewards_vester": nil, "community_treasury": nil, "community_vester": nil, - "wasm": {"burner"}, + // required for burn msg in wasmvm + // https://github.com/CosmWasm/wasmvm/blob/1c3fdc2a4402e527617ec72fe53f114b24899a01/types/msg.go#L116-L121 + "wasm": {"burner"}, } require.Equal(t, expectedMaccPerms, maccPerms, "default macc perms list does not match expected") } From 819b82d4bfea13f5ca555d8b4d8ecea049d581f9 Mon Sep 17 00:00:00 2001 From: affan Date: Wed, 3 Jul 2024 18:29:45 -0400 Subject: [PATCH 15/17] skip simulation test --- protocol/app/simulation_test.go | 4 ++-- protocol/app/upgrades/v.cosmwasm.0/upgrade.go | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/protocol/app/simulation_test.go b/protocol/app/simulation_test.go index 16c63a2794..ffe34064dc 100644 --- a/protocol/app/simulation_test.go +++ b/protocol/app/simulation_test.go @@ -134,7 +134,6 @@ var genesisModuleOrder = []string{ rewardsmodule.ModuleName, epochstypes.ModuleName, blocktimetypes.ModuleName, - wasmtypes.ModuleName, } var skippedGenesisModules = map[string]interface{}{ @@ -142,7 +141,8 @@ var skippedGenesisModules = map[string]interface{}{ // https://github.com/cosmos/ibc-go/blob/2551dea/modules/apps/27-interchain-accounts/simulation/proposals.go#L23 // adds both ICA host and controller messages while the app only supports host messages causing the // simulation to fail due to unroutable controller messages. - icatypes.ModuleName: nil, + icatypes.ModuleName: nil, + wasmtypes.ModuleName: nil, } // WithRandomlyGeneratedOperationsSimulationManager uses the default weighted operations of each of diff --git a/protocol/app/upgrades/v.cosmwasm.0/upgrade.go b/protocol/app/upgrades/v.cosmwasm.0/upgrade.go index f6c9f385de..f4aea3c170 100644 --- a/protocol/app/upgrades/v.cosmwasm.0/upgrade.go +++ b/protocol/app/upgrades/v.cosmwasm.0/upgrade.go @@ -24,6 +24,7 @@ var ModuleAccsToInitialize = []string{ wasmtypes.ModuleName, } +// copied from v3 upgrade handler func InitializeModuleAccs(ctx sdk.Context, ak authkeeper.AccountKeeper) { for _, modAccName := range ModuleAccsToInitialize { // Get module account and relevant permissions from the accountKeeper. From 3788090bf99e565b87e077ac0de851d02aa06d8a Mon Sep 17 00:00:00 2001 From: affan Date: Wed, 10 Jul 2024 16:01:58 -0400 Subject: [PATCH 16/17] address changes --- protocol/Dockerfile | 2 ++ protocol/app/module_accounts.go | 4 +++- protocol/app/module_accounts_test.go | 4 +--- protocol/app/msgs/normal_msgs.go | 1 + protocol/app/upgrades/v.cosmwasm.0/constants.go | 1 + protocol/app/upgrades/v.cosmwasm.0/upgrade.go | 2 ++ protocol/app/upgrades/v5.0.0/constants.go | 2 -- 7 files changed, 10 insertions(+), 6 deletions(-) diff --git a/protocol/Dockerfile b/protocol/Dockerfile index 4040d3076b..9258c4a8c5 100644 --- a/protocol/Dockerfile +++ b/protocol/Dockerfile @@ -27,6 +27,8 @@ RUN --mount=type=cache,target=/root/.cache/go-build \ COPY . . # See https://github.com/CosmWasm/wasmvm/releases +# Download the wasmvm library for the target architecture (aarch64 or x86_64) +# x86_64 is needed for CI, local macs support aarch64 RUN if [ "$(uname -m)" = "aarch64" ]; then \ wget -O /lib/libwasmvm_muslc.a https://github.com/CosmWasm/wasmvm/releases/download/${WASMVM_VERSION}/libwasmvm_muslc.aarch64.a; \ elif [ "$(uname -m)" = "x86_64" ]; then \ diff --git a/protocol/app/module_accounts.go b/protocol/app/module_accounts.go index 61ecff81dc..84da840c2b 100644 --- a/protocol/app/module_accounts.go +++ b/protocol/app/module_accounts.go @@ -35,7 +35,9 @@ var ( govtypes.ModuleName: {authtypes.Burner}, ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner}, icatypes.ModuleName: nil, - // TODO(cosmwasm feature branch) + // https://github.com/CosmWasm/wasmvm/blob/1c3fdc2a4402e527617ec72fe53f114b24899a01/types/msg.go#L116-L121 + // required to burn given coins from the contract's account. + // Important if a contract controls significant token supply that must be retired. wasmtypes.ModuleName: {authtypes.Burner}, // -------- dYdX custom module accounts -------- // bridge module account mints tokens for bridged funds. diff --git a/protocol/app/module_accounts_test.go b/protocol/app/module_accounts_test.go index a76ade90cc..fa96e5f36e 100644 --- a/protocol/app/module_accounts_test.go +++ b/protocol/app/module_accounts_test.go @@ -74,9 +74,7 @@ func TestMaccPerms(t *testing.T) { "rewards_vester": nil, "community_treasury": nil, "community_vester": nil, - // required for burn msg in wasmvm - // https://github.com/CosmWasm/wasmvm/blob/1c3fdc2a4402e527617ec72fe53f114b24899a01/types/msg.go#L116-L121 - "wasm": {"burner"}, + "wasm": {"burner"}, } require.Equal(t, expectedMaccPerms, maccPerms, "default macc perms list does not match expected") } diff --git a/protocol/app/msgs/normal_msgs.go b/protocol/app/msgs/normal_msgs.go index 80f0516c9a..8cb7c1fde2 100644 --- a/protocol/app/msgs/normal_msgs.go +++ b/protocol/app/msgs/normal_msgs.go @@ -214,6 +214,7 @@ var ( "/ibc.applications.interchain_accounts.v1.InterchainAccount": nil, // wasm + // TODO(OTE-461): Audit and remove unnecessary messages "/cosmwasm.wasm.v1.AcceptedMessageKeysFilter": nil, "/cosmwasm.wasm.v1.AcceptedMessagesFilter": nil, "/cosmwasm.wasm.v1.AllowAllMessagesFilter": nil, diff --git a/protocol/app/upgrades/v.cosmwasm.0/constants.go b/protocol/app/upgrades/v.cosmwasm.0/constants.go index ac4a9334d1..22554b8cc2 100644 --- a/protocol/app/upgrades/v.cosmwasm.0/constants.go +++ b/protocol/app/upgrades/v.cosmwasm.0/constants.go @@ -14,6 +14,7 @@ const ( UpgradeName = "v6.cosmwasm.0" ) +// TODO(OTE-535): remove duplicated code from v6 upgrade var Upgrade = upgrades.Upgrade{ UpgradeName: UpgradeName, StoreUpgrades: store.StoreUpgrades{ diff --git a/protocol/app/upgrades/v.cosmwasm.0/upgrade.go b/protocol/app/upgrades/v.cosmwasm.0/upgrade.go index f4aea3c170..af674a5555 100644 --- a/protocol/app/upgrades/v.cosmwasm.0/upgrade.go +++ b/protocol/app/upgrades/v.cosmwasm.0/upgrade.go @@ -87,6 +87,7 @@ func InitializeModuleAccs(ctx sdk.Context, ak authkeeper.AccountKeeper) { } } +// TODO(OTE-535): remove duplicated code from v6 upgrade func removeStatefulFOKOrders(ctx sdk.Context, k clobtypes.ClobKeeper) { allStatefulOrders := k.GetAllStatefulOrders(ctx) for _, order := range allStatefulOrders { @@ -112,6 +113,7 @@ func removeStatefulFOKOrders(ctx sdk.Context, k clobtypes.ClobKeeper) { } } +// TODO(OTE-535): remove duplicated code from v6 upgrade func initRevShareModuleState( ctx sdk.Context, revShareKeeper revsharetypes.RevShareKeeper, diff --git a/protocol/app/upgrades/v5.0.0/constants.go b/protocol/app/upgrades/v5.0.0/constants.go index ac29c08ce7..468add34df 100644 --- a/protocol/app/upgrades/v5.0.0/constants.go +++ b/protocol/app/upgrades/v5.0.0/constants.go @@ -4,7 +4,6 @@ import ( store "cosmossdk.io/store/types" "github.com/dydxprotocol/v4-chain/protocol/app/upgrades" - wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" vaulttypes "github.com/dydxprotocol/v4-chain/protocol/x/vault/types" ) @@ -19,7 +18,6 @@ var Upgrade = upgrades.Upgrade{ StoreUpgrades: store.StoreUpgrades{ Added: []string{ vaulttypes.StoreKey, - wasmtypes.StoreKey, }, }, } From 2a42d5e774d596df586e1880cfceedf653cbd362 Mon Sep 17 00:00:00 2001 From: affan Date: Sun, 14 Jul 2024 20:53:22 -0400 Subject: [PATCH 17/17] remove comment --- protocol/app/module_accounts.go | 1 - 1 file changed, 1 deletion(-) diff --git a/protocol/app/module_accounts.go b/protocol/app/module_accounts.go index 84da840c2b..a5a7cf6885 100644 --- a/protocol/app/module_accounts.go +++ b/protocol/app/module_accounts.go @@ -37,7 +37,6 @@ var ( icatypes.ModuleName: nil, // https://github.com/CosmWasm/wasmvm/blob/1c3fdc2a4402e527617ec72fe53f114b24899a01/types/msg.go#L116-L121 // required to burn given coins from the contract's account. - // Important if a contract controls significant token supply that must be retired. wasmtypes.ModuleName: {authtypes.Burner}, // -------- dYdX custom module accounts -------- // bridge module account mints tokens for bridged funds.