diff --git a/.github/workflows/changelog-deps.yml b/.github/workflows/changelog-deps.yml index b9336196d..4a3c574c1 100644 --- a/.github/workflows/changelog-deps.yml +++ b/.github/workflows/changelog-deps.yml @@ -1,17 +1,21 @@ name: "Automatically update changelog with dependabot" -on: +on: pull_request: types: [opened, synchronize, reopened, ready_for_review, labeled, unlabeled] jobs: changelog-update: runs-on: ubuntu-latest + if: contains(github.event.pull_request.labels.*.name, 'dependabot') - # TODO: feat: try to use author of the commit(s) to see if it's dependabot - # ${{ any(contains(commit.author.username, 'dependabot') for commit in github.event.commits) }} - steps: + # TODO: feat: try to use author of the commit(s) to see if it's dependabot + # instead of using labels. Labels work fine for now. + # ${{ any(contains(commit.author.username, 'dependabot') for commit in github.event.commits) }} + + steps: - uses: actions/checkout@v4 with: + # Token with permissions for pushing commits and editting GH issues token: ${{ secrets.NIBIRU_PM }} # to avoid checking out the repo in a detached state ref: ${{ github.head_ref }} @@ -19,8 +23,8 @@ jobs: # This step updates adds a line to the "## Unreleased" section - uses: dangoslen/dependabot-changelog-helper@v3 with: - activationLabel: 'dependabot' - changelogPath: './CHANGELOG.md' + activationLabel: "dependabot" + changelogPath: "./CHANGELOG.md" - uses: stefanzweifel/git-auto-commit-action@v5 with: diff --git a/.github/workflows/proto-lint.yml b/.github/workflows/proto-lint.yml index 7ffa17164..98e380c34 100644 --- a/.github/workflows/proto-lint.yml +++ b/.github/workflows/proto-lint.yml @@ -22,7 +22,7 @@ jobs: # timeout-minutes: 5 # steps: # - uses: actions/checkout@v4 - # - uses: bufbuild/buf-setup-action@v1.27.2 + # - uses: bufbuild/buf-setup-action@v1.28.1 # - uses: bufbuild/buf-lint-action@v1 # with: # input: "proto" @@ -31,7 +31,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: bufbuild/buf-setup-action@v1.27.2 + - uses: bufbuild/buf-setup-action@v1.28.1 with: github_token: ${{ github.token }} - uses: bufbuild/buf-breaking-action@v1 diff --git a/CHANGELOG.md b/CHANGELOG.md index ddc707222..bcb3a95ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -73,7 +73,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Dependencies - Bump `github.com/prometheus/client_golang` from 1.16.0 to 1.17.0 ([#1605](https://github.com/NibiruChain/nibiru/pull/1605)) -- Bump `bufbuild/buf-setup-action` from 1.26.1 to 1.27.2 ([#1624](https://github.com/NibiruChain/nibiru/pull/1624), [#1641](https://github.com/NibiruChain/nibiru/pull/1641), [#1654](https://github.com/NibiruChain/nibiru/pull/1654)) +- Bump `bufbuild/buf-setup-action` from 1.26.1 to 1.28.1 ([#1624](https://github.com/NibiruChain/nibiru/pull/1624), [#1641](https://github.com/NibiruChain/nibiru/pull/1641), [#1654](https://github.com/NibiruChain/nibiru/pull/1654), [#1671](https://github.com/NibiruChain/nibiru/pull/1671), [#1673](https://github.com/NibiruChain/nibiru/pull/1673)) - Bump `stefanzweifel/git-auto-commit-action` from 4 to 5 ([#1625](https://github.com/NibiruChain/nibiru/pull/1625)) - Bump `github.com/CosmWasm/wasmvm` from 1.4.0 to 1.5.0 ([#1629](https://github.com/NibiruChain/nibiru/pull/1629), [#1657](https://github.com/NibiruChain/nibiru/pull/1657)) - Bump `google.golang.org/grpc` from 1.58.2 to 1.59.0 ([#1633](https://github.com/NibiruChain/nibiru/pull/1633), [#1643](https://github.com/NibiruChain/nibiru/pull/1643)) @@ -82,6 +82,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Bump `github.com/cosmos/ibc-go/v7` from 7.3.0 to 7.3.1 ([#1647](https://github.com/NibiruChain/nibiru/pull/1647)) - Bump `github.com/CosmWasm/wasmd` from 0.40.2 to 0.43.0 ([#1660](https://github.com/NibiruChain/nibiru/pull/1660)) - Bump `github.com/CosmWasm/wasmd` from 0.43.0 to 0.44.0 ([#1666](https://github.com/NibiruChain/nibiru/pull/1666)) +- Bump `github.com/spf13/cobra` from 1.7.0 to 1.8.0 ([#1664](https://github.com/NibiruChain/nibiru/pull/1664)) ### Bug Fixes @@ -787,4 +788,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Testing * [#695](https://github.com/NibiruChain/nibiru/pull/695) Add `OpenPosition` integration tests. -* [#692](https://github.com/NibiruChain/nibiru/pull/692) Add test coverage for Perp MsgServer methods. \ No newline at end of file +* [#692](https://github.com/NibiruChain/nibiru/pull/692) Add test coverage for Perp MsgServer methods. diff --git a/app/keepers.go b/app/keepers.go index 01430d884..dd3a5bfe7 100644 --- a/app/keepers.go +++ b/app/keepers.go @@ -364,13 +364,14 @@ func (app *NibiruApp) InitKeepers( appCodec, keys[epochstypes.StoreKey], ) + app.SudoKeeper = keeper.NewKeeper( + appCodec, keys[sudotypes.StoreKey], + ) + app.PerpKeeperV2 = perpkeeper.NewKeeper( appCodec, keys[perptypes.StoreKey], app.AccountKeeper, app.BankKeeper, app.OracleKeeper, app.EpochsKeeper, - ) - - app.SudoKeeper = keeper.NewKeeper( - appCodec, keys[sudotypes.StoreKey], + app.SudoKeeper, ) app.InflationKeeper = inflationkeeper.NewKeeper( diff --git a/go.mod b/go.mod index df992bf04..e28a64e35 100644 --- a/go.mod +++ b/go.mod @@ -29,7 +29,7 @@ require ( github.com/prometheus/client_golang v1.17.0 github.com/rakyll/statik v0.1.7 github.com/spf13/cast v1.5.1 - github.com/spf13/cobra v1.7.0 + github.com/spf13/cobra v1.8.0 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.16.0 github.com/stretchr/testify v1.8.4 diff --git a/go.sum b/go.sum index e37578625..8a6a517f5 100644 --- a/go.sum +++ b/go.sum @@ -416,7 +416,7 @@ github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzU github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -1094,8 +1094,8 @@ github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= diff --git a/proto/nibiru/perp/v2/genesis.proto b/proto/nibiru/perp/v2/genesis.proto index fce34d0d6..01410cdcc 100644 --- a/proto/nibiru/perp/v2/genesis.proto +++ b/proto/nibiru/perp/v2/genesis.proto @@ -23,7 +23,7 @@ message GenesisState { [ (gogoproto.nullable) = false ]; uint64 dnr_epoch = 6; - + message TraderVolume { string trader = 1; uint64 epoch = 2; @@ -31,12 +31,10 @@ message GenesisState { (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false ]; - } - - // For testing purpose, we allow the collateral to be set at genesis - string collateral_creator = 11; - string collateral_subdenom = 12; + + // For testing purposes, we allow the collateral to be set at genesis + string collateral_denom = 11; repeated TraderVolume trader_volumes = 7 [ (gogoproto.nullable) = false ]; @@ -86,4 +84,4 @@ message GenesisPosition { uint64 version = 2; Position position = 3 [ (gogoproto.nullable) = false ]; -} \ No newline at end of file +} diff --git a/proto/nibiru/perp/v2/query.proto b/proto/nibiru/perp/v2/query.proto index c372e9e33..7d16b8f0f 100644 --- a/proto/nibiru/perp/v2/query.proto +++ b/proto/nibiru/perp/v2/query.proto @@ -12,10 +12,12 @@ option go_package = "github.com/NibiruChain/nibiru/x/perp/v2/types"; // Query defines the gRPC querier service. service Query { + // QueryPosition: Query one position on the given market for a user rpc QueryPosition(QueryPositionRequest) returns (QueryPositionResponse) { option (google.api.http).get = "/nibiru/perp/v2/position"; } + // QueryPositions: Query all positions for a user rpc QueryPositions(QueryPositionsRequest) returns (QueryPositionsResponse) { option (google.api.http).get = "/nibiru/perp/v2/positions"; } @@ -26,35 +28,46 @@ service Query { option (google.api.http).get = "/nibiru/perp/v2/position_store"; } - // Queries the reserve assets in a given pool, identified by a token pair. + // Queries the module accounts for x/perp rpc ModuleAccounts(QueryModuleAccountsRequest) returns (QueryModuleAccountsResponse) { option (google.api.http).get = "/nibiru/perp/v2/module_accounts"; } + // QueryMarkets: Query all markets rpc QueryMarkets(QueryMarketsRequest) returns (QueryMarketsResponse) { option (google.api.http).get = "/nibiru/perp/v2/markets"; } - rpc QueryCollateral(QueryCollateralRequest) returns (QueryCollateralResponse) { + // QueryCollateral: Queries info about the collateral + rpc QueryCollateral(QueryCollateralRequest) + returns (QueryCollateralResponse) { option (google.api.http).get = "/nibiru/perp/v2/collateral"; } } // ---------------------------------------- Positions +// QueryPositionsRequest: Request type for the +// "nibiru.perp.v2.Query/Positions" gRPC service method message QueryPositionsRequest { string trader = 1; } +// QueryPositionsResponse: Response type for the +// "nibiru.perp.v2.Query/Positions" gRPC service method message QueryPositionsResponse { repeated nibiru.perp.v2.QueryPositionResponse positions = 1 [ (gogoproto.nullable) = false ]; } +// QueryPositionStoreRequest: Request type for the +// "nibiru.perp.v2.Query/PositionStore" gRPC service method message QueryPositionStoreRequest { // pagination defines a paginated request cosmos.base.query.v1beta1.PageRequest pagination = 1; } +// QueryPositionStoreResponse: Response type for the +// "nibiru.perp.v2.Query/PositionStore" gRPC service method message QueryPositionStoreResponse { // Position responses: collection of all stored positions (with pagination) repeated nibiru.perp.v2.Position positions = 1 @@ -66,8 +79,8 @@ message QueryPositionStoreResponse { // ---------------------------------------- Position -// QueryPositionRequest is the request type for the position of the x/perp -// module account. +// QueryPositionRequest: Request type for the +// "nibiru.perp.v2.Query/Position" gRPC service method message QueryPositionRequest { string pair = 1 [ (gogoproto.customtype) = @@ -78,6 +91,8 @@ message QueryPositionRequest { string trader = 2; } +// QueryPositionResponse: Response type for the +// "nibiru.perp.v2.Query/Position" gRPC service method message QueryPositionResponse { // The position as it exists in the blockchain state nibiru.perp.v2.Position position = 1 [ (gogoproto.nullable) = false ]; @@ -104,8 +119,12 @@ message QueryPositionResponse { // ---------------------------------------- QueryModuleAccounts +// QueryModuleAccountsRequest: Request type for the +// "nibiru.perp.v2.Query/ModuleAccounts" gRPC service method message QueryModuleAccountsRequest {} +// QueryModuleAccountsResponse: Response type for the +// "nibiru.perp.v2.Query/ModuleAccounts" gRPC service method message QueryModuleAccountsResponse { repeated nibiru.perp.v2.AccountWithBalance accounts = 1 [ (gogoproto.nullable) = false ]; @@ -133,9 +152,12 @@ message QueryMarketsResponse { [ (gogoproto.nullable) = false ]; } +// ---------------------------------------- QueryCollateral + +// QueryCollateralRequest: Request type for the +// "nibiru.perp.v2.Query/Collateral" gRPC service method message QueryCollateralRequest {} -message QueryCollateralResponse { - string collateral_creator= 1; - string collateral_subdenom= 2; -} \ No newline at end of file +// QueryCollateralRequest: Response type for the +// "nibiru.perp.v2.Query/Collateral" gRPC service method +message QueryCollateralResponse { string collateral_denom = 1; } diff --git a/proto/nibiru/perp/v2/tx.proto b/proto/nibiru/perp/v2/tx.proto index 261c4feef..f6b799694 100644 --- a/proto/nibiru/perp/v2/tx.proto +++ b/proto/nibiru/perp/v2/tx.proto @@ -28,6 +28,9 @@ service Msg { rpc DonateToEcosystemFund(MsgDonateToEcosystemFund) returns (MsgDonateToEcosystemFundResponse) {} + + rpc ChangeCollateralDenom(MsgChangeCollateralDenom) + returns (MsgChangeCollateralDenomResponse) {} } // -------------------------- Settle Position -------------------------- @@ -328,3 +331,14 @@ message MsgDonateToEcosystemFund { } message MsgDonateToEcosystemFundResponse {} + +// ----------------------- MsgChangeCollateralDenom ----------------------- + +// MsgChangeCollateralDenom: Changes the collateral denom for the module. +// [Admin] Only callable by sudoers. +message MsgChangeCollateralDenom { + string sender = 1; + string new_denom = 2; +} + +message MsgChangeCollateralDenomResponse {} diff --git a/wasmbinding/bindings/msg.go b/wasmbinding/bindings/msg.go index 85f11154b..8085a6be0 100644 --- a/wasmbinding/bindings/msg.go +++ b/wasmbinding/bindings/msg.go @@ -100,11 +100,6 @@ type SetMarketEnabled struct { Enabled bool `json:"enabled"` } -type UpdateCollateral struct { - Denom string `json:"denom"` - ContractAddress string `json:"contract_address"` -} - type CreateMarket struct { Pair string `json:"pair"` PegMult sdk.Dec `json:"peg_mult,omitempty"` diff --git a/wasmbinding/exec_perp.go b/wasmbinding/exec_perp.go index f0940a51e..e3abaf869 100644 --- a/wasmbinding/exec_perp.go +++ b/wasmbinding/exec_perp.go @@ -205,16 +205,6 @@ func (exec *ExecutorPerp) SetMarketEnabled( return exec.PerpV2.Admin.CloseMarket(ctx, pair) } -func (exec *ExecutorPerp) UpdateCollateral( - cwMsg *bindings.UpdateCollateral, ctx sdk.Context, -) (err error) { - if cwMsg == nil { - return wasmvmtypes.InvalidRequest{Err: "null msg"} - } - - return exec.PerpV2.Admin.UpdateCollateral(ctx, cwMsg.Denom, cwMsg.ContractAddress) -} - func (exec *ExecutorPerp) CreateMarket( cwMsg *bindings.CreateMarket, ctx sdk.Context, ) (err error) { diff --git a/wasmbinding/exec_perp_test.go b/wasmbinding/exec_perp_test.go index 647ddf765..20a2159ad 100644 --- a/wasmbinding/exec_perp_test.go +++ b/wasmbinding/exec_perp_test.go @@ -19,7 +19,6 @@ import ( "github.com/NibiruChain/nibiru/x/common/testutil" "github.com/NibiruChain/nibiru/x/common/testutil/testapp" perpv2types "github.com/NibiruChain/nibiru/x/perp/v2/types" - tftypes "github.com/NibiruChain/nibiru/x/tokenfactory/types" ) func TestSuitePerpExecutor_RunAll(t *testing.T) { @@ -53,7 +52,7 @@ func (s *TestSuitePerpExecutor) SetupSuite() { }) coins := sdk.NewCoins( sdk.NewCoin(denoms.NIBI, sdk.NewInt(1_000_000)), - sdk.NewCoin(perpv2types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(420_000*69)), + sdk.NewCoin(perpv2types.TestingCollateralDenomNUSD, sdk.NewInt(420_000*69)), sdk.NewCoin(denoms.USDT, sdk.NewInt(420_000*69)), ) s.NoError(testapp.FundAccount(nibiru.BankKeeper, ctx, sender, coins)) @@ -67,7 +66,7 @@ func (s *TestSuitePerpExecutor) SetupSuite() { s.exec = &wasmbinding.ExecutorPerp{ PerpV2: nibiru.PerpKeeperV2, } - s.nibiru.PerpKeeperV2.Collateral.Set(s.ctx, perpv2types.DefaultTestingCollateralNotForProd) + s.nibiru.PerpKeeperV2.Collateral.Set(s.ctx, perpv2types.TestingCollateralDenomNUSD) s.NoError(testapp.FundAccount(nibiru.BankKeeper, ctx, s.contractPerp, coins)) s.OnSetupEnd() @@ -82,7 +81,7 @@ func (s *TestSuitePerpExecutor) OnSetupEnd() { func (s *TestSuitePerpExecutor) TestOpenAddRemoveClose() { pair := asset.MustNewPair(s.happyFields.Pair) - margin := sdk.NewCoin(perpv2types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(69)) + margin := sdk.NewCoin(perpv2types.TestingCollateralDenomNUSD, sdk.NewInt(69)) incorrectMargin := sdk.NewCoin(denoms.USDT, sdk.NewInt(69)) for _, err := range []error{ @@ -96,7 +95,6 @@ func (s *TestSuitePerpExecutor) TestOpenAddRemoveClose() { s.DoInsuranceFundWithdrawTest(sdk.NewInt(69), s.contractDeployer), s.DoCreateMarketTest(asset.MustNewPair("ufoo:ubar")), s.DoCreateMarketTestWithParams(asset.MustNewPair("ufoo2:ubar")), - s.DoUpdateCollateralTest(), } { s.NoError(err) } @@ -247,7 +245,7 @@ func (s *TestSuitePerpExecutor) DoInsuranceFundWithdrawTest( s.nibiru.BankKeeper, s.ctx, perpv2types.PerpEFModuleAccount, - sdk.NewCoins(sdk.NewCoin(perpv2types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(420))), + sdk.NewCoins(sdk.NewCoin(perpv2types.TestingCollateralDenomNUSD, sdk.NewInt(420))), ) s.NoError(err) @@ -333,47 +331,8 @@ func (s *TestSuitePerpExecutor) DoSetMarketEnabledTest( return err } -func (s *TestSuitePerpExecutor) DoUpdateCollateralTest() error { - cwMsg := &bindings.UpdateCollateral{ - Denom: "uust", - ContractAddress: "cosmos168ctmpyppk90d34p3jjy658zf5a5l3w8wk35wht6ccqj4mr0yv8skhnwe8", - } - err := s.exec.UpdateCollateral(cwMsg, s.ctx) - s.Require().NoError(err) - - collateral, err := s.nibiru.PerpKeeperV2.Collateral.Get(s.ctx) - s.NoError(err) - s.Equal(collateral, tftypes.TFDenom{Creator: "cosmos168ctmpyppk90d34p3jjy658zf5a5l3w8wk35wht6ccqj4mr0yv8skhnwe8", Subdenom: "uust"}) - return err -} - -func (s *TestSuitePerpExecutor) TestSadPath_UpdateCollateral() { - cwMsg := &bindings.UpdateCollateral{ - Denom: "uust", - ContractAddress: "", - } - err := s.exec.UpdateCollateral(cwMsg, s.ctx) - s.Require().Error(err) - - cwMsg = &bindings.UpdateCollateral{ - Denom: "uust", - } - err = s.exec.UpdateCollateral(cwMsg, s.ctx) - s.Require().Error(err) - - cwMsg = &bindings.UpdateCollateral{ - ContractAddress: "notavalidaddress", - } - err = s.exec.UpdateCollateral(cwMsg, s.ctx) - s.Require().Error(err) - - cwMsg = &bindings.UpdateCollateral{} - err = s.exec.UpdateCollateral(cwMsg, s.ctx) - s.Require().Error(err) -} - func (s *TestSuitePerpExecutor) TestSadPath_InsuranceFundWithdraw() { - fundsToWithdraw := sdk.NewCoin(perpv2types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(69_000)) + fundsToWithdraw := sdk.NewCoin(perpv2types.TestingCollateralDenomNUSD, sdk.NewInt(69_000)) err := s.DoInsuranceFundWithdrawTest(fundsToWithdraw.Amount, s.contractDeployer) s.Error(err) @@ -382,7 +341,7 @@ func (s *TestSuitePerpExecutor) TestSadPath_InsuranceFundWithdraw() { func (s *TestSuitePerpExecutor) TestSadPaths_InvalidPair() { sadPair := asset.Pair("ftt:ust:doge") pair := sadPair - margin := sdk.NewCoin(perpv2types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(69)) + margin := sdk.NewCoin(perpv2types.TestingCollateralDenomNUSD, sdk.NewInt(69)) for _, err := range []error{ s.DoMarketOrderTest(pair), diff --git a/wasmbinding/exec_test.go b/wasmbinding/exec_test.go index eab9c3efb..a02fd36a9 100644 --- a/wasmbinding/exec_test.go +++ b/wasmbinding/exec_test.go @@ -98,11 +98,11 @@ func (s *TestSuiteExecutor) SetupSuite() { ChainID: "nibiru-wasmnet-1", Time: time.Now().UTC(), }) - nibiru.PerpKeeperV2.Collateral.Set(ctx, perpv2types.DefaultTestingCollateralNotForProd) + nibiru.PerpKeeperV2.Collateral.Set(ctx, perpv2types.TestingCollateralDenomNUSD) coins := sdk.NewCoins( sdk.NewCoin(denoms.NIBI, sdk.NewInt(10_000_000)), - sdk.NewCoin(perpv2types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(420_000*69)), + sdk.NewCoin(perpv2types.TestingCollateralDenomNUSD, sdk.NewInt(420_000*69)), ) s.NoError(testapp.FundAccount(nibiru.BankKeeper, ctx, sender, coins)) @@ -112,7 +112,7 @@ func (s *TestSuiteExecutor) SetupSuite() { s.ctx = ctx s.keeper = TestOnlySudoKeeper{Keeper: s.nibiru.SudoKeeper} s.wasmKeeper = wasmkeeper.NewDefaultPermissionKeeper(nibiru.WasmKeeper) - s.nibiru.PerpKeeperV2.Collateral.Set(s.ctx, perpv2types.DefaultTestingCollateralNotForProd) + s.nibiru.PerpKeeperV2.Collateral.Set(s.ctx, perpv2types.TestingCollateralDenomNUSD) s.contractPerp = ContractMap[wasmbin.WasmKeyPerpBinding] s.contractController = ContractMap[wasmbin.WasmKeyController] @@ -129,10 +129,10 @@ func (s *TestSuiteExecutor) OnSetupEnd() { func (s *TestSuiteExecutor) TestOpenAddRemoveClose() { pair := asset.MustNewPair(s.happyFields.Pair) - margin := sdk.NewCoin(perpv2types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(69)) + margin := sdk.NewCoin(perpv2types.TestingCollateralDenomNUSD, sdk.NewInt(69)) coins := sdk.NewCoins( - margin.Add(sdk.NewCoin(perpv2types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1_000))), + margin.Add(sdk.NewCoin(perpv2types.TestingCollateralDenomNUSD, sdk.NewInt(1_000))), ) s.NoError(testapp.FundAccount(s.nibiru.BankKeeper, s.ctx, s.contractPerp, coins)) @@ -469,7 +469,7 @@ func (s *TestSuiteExecutor) TestInsuranceFundWithdraw() { s.nibiru.BankKeeper, s.ctx, perpv2types.PerpEFModuleAccount, - sdk.NewCoins(sdk.NewCoin(perpv2types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(420))), + sdk.NewCoins(sdk.NewCoin(perpv2types.TestingCollateralDenomNUSD, sdk.NewInt(420))), ) s.NoError(err) s.keeper.SetSudoContracts( diff --git a/wasmbinding/querier_perp_test.go b/wasmbinding/querier_perp_test.go index a79f153cf..efd8d644a 100644 --- a/wasmbinding/querier_perp_test.go +++ b/wasmbinding/querier_perp_test.go @@ -94,7 +94,7 @@ func (s *TestSuitePerpQuerier) SetupSuite() { }) coins := sdk.NewCoins( sdk.NewCoin(denoms.NIBI, sdk.NewInt(10_000_000)), - sdk.NewCoin(perpv2types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1_420_000)), + sdk.NewCoin(perpv2types.TestingCollateralDenomNUSD, sdk.NewInt(1_420_000)), ) s.NoError(testapp.FundAccount(nibiru.BankKeeper, ctx, sender, coins)) diff --git a/x/common/address.go b/x/common/address.go index 968729361..67bf644d5 100644 --- a/x/common/address.go +++ b/x/common/address.go @@ -1,6 +1,7 @@ package common import ( + "github.com/NibiruChain/collections" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -20,3 +21,13 @@ func StringsToAddrs(strs ...string) []sdk.AccAddress { } return addrs } + +// TODO: (realu) Move to collections library +var StringValueEncoder collections.ValueEncoder[string] = stringValueEncoder{} + +type stringValueEncoder struct{} + +func (a stringValueEncoder) Encode(value string) []byte { return []byte(value) } +func (a stringValueEncoder) Decode(b []byte) string { return string(b) } +func (a stringValueEncoder) Stringify(value string) string { return value } +func (a stringValueEncoder) Name() string { return "string" } diff --git a/x/common/address_test.go b/x/common/address_test.go index 77f156f08..031a55918 100644 --- a/x/common/address_test.go +++ b/x/common/address_test.go @@ -3,6 +3,7 @@ package common_test import ( "testing" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/NibiruChain/nibiru/x/common" @@ -17,3 +18,25 @@ func TestAddress(t *testing.T) { require.EqualValues(t, addrs, addrsOut) }) } + +func TestStringValueEncoder(t *testing.T) { + encoder := common.StringValueEncoder + tests := []struct { + given string + }{ + {"hello"}, + {"12345"}, + {""}, + {testutil.AccAddress().String()}, + } + + for _, tc := range tests { + t.Run(tc.given, func(t *testing.T) { + want := tc.given + encoded := encoder.Encode(tc.given) + got := encoder.Decode(encoded) + assert.Equal(t, want, got) + assert.Equal(t, want, encoder.Stringify(got)) + }) + } +} diff --git a/x/common/constants.go b/x/common/constants.go index 9b0a36fdc..ae5fe5522 100644 --- a/x/common/constants.go +++ b/x/common/constants.go @@ -1,7 +1,15 @@ package common +import sdk "github.com/cosmos/cosmos-sdk/types" + const ( TreasuryPoolModuleAccount = "treasury_pool" // TO_MICRO: multiplier for converting between units and micro-units. TO_MICRO = int64(1_000_000) + + NibiruTeam = "nibi1l8dxzwz9d4peazcqjclnkj2mhvtj7mpnkqx85mg0ndrlhwrnh7gskkzg0v" ) + +func NibiruTeamAddr() sdk.AccAddress { + return sdk.MustAccAddressFromBech32(NibiruTeam) +} diff --git a/x/common/error.go b/x/common/error.go index 8036faa77..a7c9ba9d3 100644 --- a/x/common/error.go +++ b/x/common/error.go @@ -4,6 +4,9 @@ import ( "errors" "fmt" "runtime/debug" + + grpccodes "google.golang.org/grpc/codes" + grpcstatus "google.golang.org/grpc/status" ) // TryCatch is an implementation of the try-catch block from languages like C++ and JS. @@ -180,3 +183,7 @@ func CombineErrorsFromStrings(strs ...string) (err error) { } return CombineErrors(errs...) } + +func ErrNilMsg() error { + return grpcstatus.Errorf(grpccodes.InvalidArgument, "nil msg") +} diff --git a/x/common/testutil/cli/network.go b/x/common/testutil/cli/network.go index c3aa14990..b80d227eb 100644 --- a/x/common/testutil/cli/network.go +++ b/x/common/testutil/cli/network.go @@ -176,7 +176,7 @@ func BuildNetworkConfig(appGenesis app.GenesisState) Config { BondedTokens: sdk.TokensFromConsensusPower(100, sdk.DefaultPowerReduction), StartingTokens: sdk.NewCoins( sdk.NewCoin(denoms.NUSD, sdk.TokensFromConsensusPower(1e12, sdk.DefaultPowerReduction)), - sdk.NewCoin(perpV2types.NibiTestingCollateralNotForProd.String(), sdk.TokensFromConsensusPower(1e12, sdk.DefaultPowerReduction)), + sdk.NewCoin(perpV2types.TestingCollateralDenomNUSD, sdk.TokensFromConsensusPower(1e12, sdk.DefaultPowerReduction)), sdk.NewCoin(denoms.NIBI, sdk.TokensFromConsensusPower(1e12, sdk.DefaultPowerReduction)), sdk.NewCoin(denoms.USDC, sdk.TokensFromConsensusPower(1e12, sdk.DefaultPowerReduction)), ), diff --git a/x/common/testutil/genesis/perp_genesis.go b/x/common/testutil/genesis/perp_genesis.go index df78c8669..b1d332636 100644 --- a/x/common/testutil/genesis/perp_genesis.go +++ b/x/common/testutil/genesis/perp_genesis.go @@ -11,7 +11,6 @@ import ( "github.com/NibiruChain/nibiru/x/common/denoms" epochstypes "github.com/NibiruChain/nibiru/x/epochs/types" perpv2types "github.com/NibiruChain/nibiru/x/perp/v2/types" - tftypes "github.com/NibiruChain/nibiru/x/tokenfactory/types" ) func AddPerpV2Genesis(gen app.GenesisState) app.GenesisState { @@ -117,21 +116,13 @@ func AddPerpV2Genesis(gen app.GenesisState) app.GenesisState { }) } - var collateral tftypes.TFDenom - if sdk.GetConfig().GetBech32AccountAddrPrefix() == "nibi" { - collateral = perpv2types.NibiTestingCollateralNotForProd - } else { - collateral = perpv2types.DefaultTestingCollateralNotForProd - } - perpV2Gen := &perpv2types.GenesisState{ Markets: marketsv2, MarketLastVersions: marketLastVersions, Amms: ammsv2, Positions: []perpv2types.GenesisPosition{}, ReserveSnapshots: []perpv2types.ReserveSnapshot{}, - CollateralCreator: collateral.Creator, - CollateralSubdenom: collateral.Subdenom, + CollateralDenom: perpv2types.TestingCollateralDenomNUSD, } gen[perpv2types.ModuleName] = app.MakeEncodingConfig().Marshaler. diff --git a/x/common/testutil/testapp/testapp.go b/x/common/testutil/testapp/testapp.go index 3d09ac247..4682a29a6 100644 --- a/x/common/testutil/testapp/testapp.go +++ b/x/common/testutil/testapp/testapp.go @@ -35,7 +35,7 @@ func NewNibiruTestAppAndContext() (*app.NibiruApp, sdk.Context) { app.OracleKeeper.SetPrice(ctx, asset.Registry.Pair(denoms.BTC, denoms.NUSD), sdk.NewDec(20000)) app.OracleKeeper.SetPrice(ctx, "xxx:yyy", sdk.NewDec(20000)) - app.PerpKeeperV2.Collateral.Set(ctx, types.DefaultTestingCollateralNotForProd) + app.PerpKeeperV2.Collateral.Set(ctx, types.TestingCollateralDenomNUSD) return app, ctx } diff --git a/x/perp/v2/client/cli/cli_test.go b/x/perp/v2/client/cli/cli_test.go index c9efb7277..30b21ade2 100644 --- a/x/perp/v2/client/cli/cli_test.go +++ b/x/perp/v2/client/cli/cli_test.go @@ -82,7 +82,7 @@ func (s *IntegrationTestSuite) SetupSuite() { sdk.NewCoins( sdk.NewInt64Coin(denoms.NIBI, 10e6), sdk.NewInt64Coin(denoms.USDC, 1e3*common.TO_MICRO), - sdk.NewInt64Coin(types.NibiTestingCollateralNotForProd.String(), 5e3*common.TO_MICRO), + sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 5e3*common.TO_MICRO), ), val, denoms.NIBI, @@ -478,14 +478,14 @@ func (s *IntegrationTestSuite) TestRemoveMargin() { s.T().Log("removing margin on user 0....") _, err = s.network.ExecTxCmd(cli.RemoveMarginCmd(), s.users[0], []string{ asset.Registry.Pair(denoms.BTC, denoms.NUSD).String(), - fmt.Sprintf("%s%s", "10000000", types.NibiTestingCollateralNotForProd.String()), + fmt.Sprintf("%s%s", "10000000", types.TestingCollateralDenomNUSD), }) s.Contains(err.Error(), types.ErrBadDebt.Error()) s.T().Log("removing margin on user 0....") _, err = s.network.ExecTxCmd(cli.RemoveMarginCmd(), s.users[0], []string{ asset.Registry.Pair(denoms.BTC, denoms.NUSD).String(), - fmt.Sprintf("%s%s", "1", types.NibiTestingCollateralNotForProd.String()), + fmt.Sprintf("%s%s", "1", types.TestingCollateralDenomNUSD), }) s.NoError(err) s.NoError(s.network.WaitForNextBlock()) @@ -526,7 +526,7 @@ func (s *IntegrationTestSuite) TestX_AddMargin() { name: "fail: position not found", args: []string{ asset.Registry.Pair(denoms.BTC, denoms.NUSD).String(), - fmt.Sprintf("10000%s", types.NibiTestingCollateralNotForProd.String()), + fmt.Sprintf("10000%s", types.TestingCollateralDenomNUSD), }, expectedCode: types.ErrPositionNotFound.ABCICode(), expectedMargin: sdk.NewDec(1_000_000), @@ -536,7 +536,7 @@ func (s *IntegrationTestSuite) TestX_AddMargin() { name: "PASS: add margin to correct position", args: []string{ asset.Registry.Pair(denoms.ETH, denoms.NUSD).String(), - fmt.Sprintf("10000%s", types.NibiTestingCollateralNotForProd.String()), + fmt.Sprintf("10000%s", types.TestingCollateralDenomNUSD), }, expectedCode: 0, expectedMargin: sdk.NewDec(1_010_000), @@ -554,7 +554,7 @@ func (s *IntegrationTestSuite) TestX_AddMargin() { name: "fail: invalid pair", args: []string{ "alisdhjal;dhao;sdh", - fmt.Sprintf("10000%s", types.NibiTestingCollateralNotForProd.String()), + fmt.Sprintf("10000%s", types.TestingCollateralDenomNUSD), }, expectFail: true, }, @@ -629,7 +629,7 @@ func (s *IntegrationTestSuite) TestX_RemoveMargin() { name: "fail: position not found", args: []string{ asset.Registry.Pair(denoms.BTC, denoms.NUSD).String(), - fmt.Sprintf("10000%s", types.NibiTestingCollateralNotForProd.String()), + fmt.Sprintf("10000%s", types.TestingCollateralDenomNUSD), }, expectedCode: types.ErrPositionNotFound.ABCICode(), expectedMargin: sdk.NewDec(1_000_000), @@ -639,7 +639,7 @@ func (s *IntegrationTestSuite) TestX_RemoveMargin() { name: "PASS: remove margin to correct position", args: []string{ asset.Registry.Pair(denoms.ETH, denoms.NUSD).String(), - fmt.Sprintf("10000%s", types.NibiTestingCollateralNotForProd.String()), + fmt.Sprintf("10000%s", types.TestingCollateralDenomNUSD), }, expectedCode: 0, expectedMargin: sdk.NewDec(990_000), @@ -657,7 +657,7 @@ func (s *IntegrationTestSuite) TestX_RemoveMargin() { name: "fail: invalid pair", args: []string{ "alisdhjal;dhao;sdh", - fmt.Sprintf("10000%s", types.NibiTestingCollateralNotForProd.String()), + fmt.Sprintf("10000%s", types.TestingCollateralDenomNUSD), }, expectFail: true, }, @@ -697,7 +697,7 @@ func (s *IntegrationTestSuite) TestDonateToEcosystemFund() { out, err := s.network.ExecTxCmd( cli.DonateToEcosystemFundCmd(), sdk.MustAccAddressFromBech32("nibi1w89pf5yq8ntjg89048qmtaz929fdxup0a57d8m"), - []string{"100" + types.NibiTestingCollateralNotForProd.String()}, + []string{"100" + types.TestingCollateralDenomNUSD}, ) s.NoError(err) s.Require().EqualValues(abcitypes.CodeTypeOK, out.Code) @@ -717,24 +717,35 @@ func (s *IntegrationTestSuite) TestDonateToEcosystemFund() { testutilcli.ExecQuery( s.network.Validators[0].ClientCtx, bankcli.GetBalancesCmd(), - []string{moduleAccountAddrPerpEF, "--denom", types.NibiTestingCollateralNotForProd.String()}, + []string{moduleAccountAddrPerpEF, "--denom", types.TestingCollateralDenomNUSD}, resp, ), ) - s.Require().EqualValues(sdk.NewInt64Coin(types.NibiTestingCollateralNotForProd.String(), 100), *resp) + s.Require().EqualValues(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 100), *resp) } func (s *IntegrationTestSuite) TestQueryModuleAccount() { - s.T().Logf("donate to ecosystem fund") resp := new(types.QueryModuleAccountsResponse) s.NoError( - testutilcli.ExecQuery( - s.network.Validators[0].ClientCtx, - cli.CmdQueryModuleAccounts(), - []string{}, + s.network.ExecQuery( + cli.NewQueryCmd(), + []string{"module-accounts"}, + resp, + ), + ) + s.NotEmpty(resp.Accounts) +} + +func (s *IntegrationTestSuite) TestQueryCollateralDenom() { + resp := new(types.QueryCollateralResponse) + s.NoError( + s.network.ExecQuery( + cli.NewQueryCmd(), + []string{"collateral"}, resp, ), ) + s.Equal(resp.CollateralDenom, types.TestingCollateralDenomNUSD) } func TestIntegrationTestSuite(t *testing.T) { diff --git a/x/perp/v2/client/cli/query.go b/x/perp/v2/client/cli/query.go index 4d6f34dd0..41c28c0e7 100644 --- a/x/perp/v2/client/cli/query.go +++ b/x/perp/v2/client/cli/query.go @@ -3,6 +3,7 @@ package cli import ( "fmt" + "github.com/MakeNowJust/heredoc/v2" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" sdk "github.com/cosmos/cosmos-sdk/types" @@ -14,8 +15,8 @@ import ( const FlagVersioned = "versioned" -// GetQueryCmd returns the cli query commands for this module -func GetQueryCmd() *cobra.Command { +// NewQueryCmd returns the cli query commands for this module +func NewQueryCmd() *cobra.Command { // Group stablecoin queries under a subcommand moduleQueryCmd := &cobra.Command{ Use: types.ModuleName, @@ -150,10 +151,10 @@ func CmdQueryMarkets() *cobra.Command { cmd := &cobra.Command{ Use: "markets", Short: "Query all market info", - Long: ` + Long: heredoc.Doc(` Query all market info. By default, only active tradable markets are shown. If --versioned is to to true, the query will return all markets including the -inactive ones.`, +inactive ones.`), Args: cobra.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { clientCtx, err := client.GetClientQueryContext(cmd) @@ -186,14 +187,17 @@ inactive ones.`, return cmd } +// CmdQueryCollateral: Command for the "Query/Collateral" gRPC service method. func CmdQueryCollateral() *cobra.Command { cmd := &cobra.Command{ - Use: "collateral", - Short: "Query the collateral info", - Long: ` -Query the metadata of the collateral used by the perp module. -.`, - Args: cobra.NoArgs, + Use: "collateral", + Aliases: []string{"coll"}, + Short: "Query the collateral denomination info.", + Long: heredoc.Doc(` + Query the metadata of the fungible collateral used by the perp module. + `, + ), + Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { clientCtx, err := client.GetClientQueryContext(cmd) if err != nil { @@ -202,18 +206,16 @@ Query the metadata of the collateral used by the perp module. queryClient := types.NewQueryClient(clientCtx) - res, err := queryClient.QueryCollateral(cmd.Context(), &types.QueryCollateralRequest{}) + res, err := queryClient.QueryCollateral( + cmd.Context(), &types.QueryCollateralRequest{}, + ) if err != nil { return err } - return clientCtx.PrintProto(res) }, } - cmd.Flags().Bool(FlagVersioned, false, "toggles whether to include inactive markets") - flags.AddQueryFlagsToCmd(cmd) - return cmd } diff --git a/x/perp/v2/client/cli/tx.go b/x/perp/v2/client/cli/tx.go index d45b81696..b45a8b966 100644 --- a/x/perp/v2/client/cli/tx.go +++ b/x/perp/v2/client/cli/tx.go @@ -16,7 +16,7 @@ import ( types "github.com/NibiruChain/nibiru/x/perp/v2/types" ) -func GetTxCmd() *cobra.Command { +func NewTxCmd() *cobra.Command { txCmd := &cobra.Command{ Use: types.ModuleName, Short: "Generalized automated market maker transaction subcommands", diff --git a/x/perp/v2/integration/action/dnr.go b/x/perp/v2/integration/action/dnr.go index cff99b9cb..7c3546c99 100644 --- a/x/perp/v2/integration/action/dnr.go +++ b/x/perp/v2/integration/action/dnr.go @@ -136,7 +136,7 @@ func (o *marketOrderFeeIs) Do(app *app.NibiruApp, ctx sdk.Context) (sdk.Context, return ctx, err, true } - balanceBefore := app.BankKeeper.GetBalance(ctx, o.trader, collateral.String()).Amount + balanceBefore := app.BankKeeper.GetBalance(ctx, o.trader, collateral).Amount resp, err := app.PerpKeeperV2.MarketOrder( ctx, o.pair, o.dir, o.trader, o.margin, o.leverage, o.baseAssetLimit, @@ -148,7 +148,7 @@ func (o *marketOrderFeeIs) Do(app *app.NibiruApp, ctx sdk.Context) (sdk.Context, balanceBefore = balanceBefore.Sub(resp.MarginToVault.TruncateInt()) expectedFee := math.LegacyNewDecFromInt(o.margin).Mul(o.fee.Add(sdk.MustNewDecFromStr("0.001"))) // we add the ecosystem fund fee - balanceAfter := app.BankKeeper.GetBalance(ctx, o.trader, collateral.String()).Amount + balanceAfter := app.BankKeeper.GetBalance(ctx, o.trader, collateral).Amount paidFees := balanceBefore.Sub(balanceAfter) if !paidFees.Equal(expectedFee.TruncateInt()) { return ctx, fmt.Errorf("unexpected fee, wanted %s, got %s", expectedFee, paidFees), true diff --git a/x/perp/v2/integration/action/margin.go b/x/perp/v2/integration/action/margin.go index d5b59740f..1aee0732b 100644 --- a/x/perp/v2/integration/action/margin.go +++ b/x/perp/v2/integration/action/margin.go @@ -38,7 +38,7 @@ func (a addMarginAction) Do(app *app.NibiruApp, ctx sdk.Context) (sdk.Context, e } _, err = app.PerpKeeperV2.AddMargin( - ctx, a.Pair, a.Account, sdk.NewCoin(collateral.String(), a.Margin), + ctx, a.Pair, a.Account, sdk.NewCoin(collateral, a.Margin), ) if err != nil { return ctx, err, true @@ -76,7 +76,7 @@ func (a addMarginFailAction) Do(app *app.NibiruApp, ctx sdk.Context) (sdk.Contex } _, err = app.PerpKeeperV2.AddMargin( - ctx, a.Pair, a.Account, sdk.NewCoin(collateral.String(), a.Margin), + ctx, a.Pair, a.Account, sdk.NewCoin(collateral, a.Margin), ) if !errors.Is(err, a.ExpectedErr) { return ctx, fmt.Errorf("expected error %v, got %v", a.ExpectedErr, err), false @@ -110,7 +110,7 @@ func (a removeMarginAction) Do(app *app.NibiruApp, ctx sdk.Context) (sdk.Context } _, err = app.PerpKeeperV2.RemoveMargin( - ctx, a.Pair, a.Account, sdk.NewCoin(collateral.String(), a.Margin), + ctx, a.Pair, a.Account, sdk.NewCoin(collateral, a.Margin), ) if err != nil { return ctx, err, false @@ -147,7 +147,7 @@ func (a removeMarginActionFail) Do(app *app.NibiruApp, ctx sdk.Context) (sdk.Con } _, err = app.PerpKeeperV2.RemoveMargin( - ctx, a.Pair, a.Account, sdk.NewCoin(collateral.String(), a.Margin), + ctx, a.Pair, a.Account, sdk.NewCoin(collateral, a.Margin), ) if !errors.Is(err, a.ExpectedErr) { return ctx, fmt.Errorf("expected error %v, got %v", a.ExpectedErr, err), false diff --git a/x/perp/v2/integration/action/market.go b/x/perp/v2/integration/action/market.go index 46a9d94ae..805252b07 100644 --- a/x/perp/v2/integration/action/market.go +++ b/x/perp/v2/integration/action/market.go @@ -6,13 +6,13 @@ import ( "github.com/NibiruChain/collections" + "github.com/NibiruChain/nibiru/x/common" "github.com/NibiruChain/nibiru/x/common/asset" "github.com/NibiruChain/nibiru/x/common/testutil/action" "github.com/NibiruChain/nibiru/app" "github.com/NibiruChain/nibiru/x/perp/v2/keeper" "github.com/NibiruChain/nibiru/x/perp/v2/types" - tftypes "github.com/NibiruChain/nibiru/x/tokenfactory/types" ) type logger struct { @@ -46,7 +46,7 @@ func (c createMarketAction) Do(app *app.NibiruApp, ctx sdk.Context) (sdk.Context TimestampMs: ctx.BlockTime().UnixMilli(), }) - app.PerpKeeperV2.Collateral.Set(ctx, types.DefaultTestingCollateralNotForProd) + app.PerpKeeperV2.Collateral.Set(ctx, types.TestingCollateralDenomNUSD) return ctx, nil, true } @@ -193,16 +193,29 @@ func CreateMarket(pair asset.Pair, market types.Market, amm types.AMM) action.Ac } type setCollateral struct { - Collateral tftypes.TFDenom + Denom string + Sender string } func (c setCollateral) Do(app *app.NibiruApp, ctx sdk.Context) (sdk.Context, error, bool) { - err := app.PerpKeeperV2.Admin.UpdateCollateral(ctx, c.Collateral.Subdenom, c.Collateral.Creator) + sudoers, err := app.SudoKeeper.Sudoers.Get(ctx) + if err != nil { + return ctx, err, true + } + sudoers.Root = common.NibiruTeam + app.SudoKeeper.Sudoers.Set(ctx, sudoers) + + senderAddr, err := sdk.AccAddressFromBech32(c.Sender) + if err != nil { + return ctx, err, true + } + err = app.PerpKeeperV2.Admin.ChangeCollateralDenom(ctx, c.Denom, senderAddr) return ctx, err, true } -func SetCollateral(collateral tftypes.TFDenom) action.Action { +func SetCollateral(denom string) action.Action { return setCollateral{ - Collateral: collateral, + Denom: denom, + Sender: common.NibiruTeam, } } diff --git a/x/perp/v2/integration/action/query.go b/x/perp/v2/integration/action/query.go index 5eee424ee..23d2340c9 100644 --- a/x/perp/v2/integration/action/query.go +++ b/x/perp/v2/integration/action/query.go @@ -205,59 +205,6 @@ func QueryMarkets_ShouldLength(length int) QueryMarketsChecker { } } -type queryCollateral struct { - expectedCollateralSubdenom string - expectedCollateralCreator string -} - -func (q queryCollateral) Do(app *app.NibiruApp, ctx sdk.Context) (sdk.Context, error, bool) { - queryServer := keeper.NewQuerier(app.PerpKeeperV2) - - resp, err := queryServer.QueryCollateral(sdk.WrapSDKContext(ctx), &types.QueryCollateralRequest{}) - if err != nil { - return ctx, err, false - } - - if resp.CollateralSubdenom != q.expectedCollateralSubdenom || resp.GetCollateralCreator() != q.expectedCollateralCreator { - return ctx, fmt.Errorf( - "expected collateral denom %s, contract %s, got %s, %s", - q.expectedCollateralSubdenom, - q.expectedCollateralCreator, - resp.CollateralSubdenom, - resp.GetCollateralCreator(), - ), false - } - - return ctx, nil, false -} - -// Query collateral should fail queries the current collateral accepted by the perp module expecting to fail -func QueryCollateral(expectedDenom, expectedContract string) action.Action { - return queryCollateral{ - expectedCollateralSubdenom: expectedDenom, - expectedCollateralCreator: expectedContract, - } -} - -type queryCollateralShouldFail struct { -} - -func (q queryCollateralShouldFail) Do(app *app.NibiruApp, ctx sdk.Context) (sdk.Context, error, bool) { - queryServer := keeper.NewQuerier(app.PerpKeeperV2) - - _, err := queryServer.QueryCollateral(sdk.WrapSDKContext(ctx), &types.QueryCollateralRequest{}) - if err == nil { - return ctx, err, false - } - - return ctx, nil, false -} - -// Query collateral queries the current collateral accepted by the perp module -func QueryCollateralShouldFail() action.Action { - return queryCollateralShouldFail{} -} - type queryModuleAccounts struct { allResponseCheckers []QueryModuleAccountsChecker } @@ -359,3 +306,33 @@ func CheckPositionStore_NumPositions(num int) QueryPositionStoreChecks { return nil } } + +// --------------------------------------------------------- +// QueryCollateral +// --------------------------------------------------------- + +type queryCollateral struct { + wantDenom string +} + +func (q queryCollateral) Do(app *app.NibiruApp, ctx sdk.Context) (sdk.Context, error, bool) { + queryServer := keeper.NewQuerier(app.PerpKeeperV2) + + resp, _ := queryServer.QueryCollateral(sdk.WrapSDKContext(ctx), &types.QueryCollateralRequest{}) + if resp.CollateralDenom != q.wantDenom { + return ctx, fmt.Errorf( + "expected collateral denom %s, got %s", + q.wantDenom, + resp.CollateralDenom, + ), false + } + + return ctx, nil, false +} + +// QueryCollateral: Action for the Query/Collateral gRPC query. +func QueryCollateral(expectDenom string) action.Action { + return queryCollateral{ + wantDenom: expectDenom, + } +} diff --git a/x/perp/v2/integration/action/tx.go b/x/perp/v2/integration/action/tx.go index 6691cd54b..30ae15b98 100644 --- a/x/perp/v2/integration/action/tx.go +++ b/x/perp/v2/integration/action/tx.go @@ -130,7 +130,7 @@ func (m msgServerAddmargin) Do(app *app.NibiruApp, ctx sdk.Context) (sdk.Context _, err = msgServer.AddMargin(sdk.WrapSDKContext(ctx), &types.MsgAddMargin{ Pair: m.pair, Sender: m.traderAddress.String(), - Margin: sdk.NewCoin(collateral.String(), m.amount), + Margin: sdk.NewCoin(collateral, m.amount), }) return ctx, err, true @@ -166,7 +166,7 @@ func (m msgServerRemoveMargin) Do(app *app.NibiruApp, ctx sdk.Context) (sdk.Cont _, err = msgServer.RemoveMargin(sdk.WrapSDKContext(ctx), &types.MsgRemoveMargin{ Pair: m.pair, Sender: m.traderAddress.String(), - Margin: sdk.NewCoin(collateral.String(), m.amount), + Margin: sdk.NewCoin(collateral, m.amount), }) return ctx, err, true @@ -199,7 +199,7 @@ func (m msgServerDonateToPerpEf) Do(app *app.NibiruApp, ctx sdk.Context) (sdk.Co _, err = msgServer.DonateToEcosystemFund(sdk.WrapSDKContext(ctx), &types.MsgDonateToEcosystemFund{ Sender: m.sender.String(), - Donation: sdk.NewCoin(collateral.String(), m.amount), + Donation: sdk.NewCoin(collateral, m.amount), }) return ctx, err, true diff --git a/x/perp/v2/keeper/admin.go b/x/perp/v2/keeper/admin.go index 2eb43c213..34ec601f3 100644 --- a/x/perp/v2/keeper/admin.go +++ b/x/perp/v2/keeper/admin.go @@ -9,7 +9,6 @@ import ( "github.com/NibiruChain/nibiru/x/common/asset" types "github.com/NibiruChain/nibiru/x/perp/v2/types" - tftypes "github.com/NibiruChain/nibiru/x/tokenfactory/types" ) // Extends the Keeper with admin functions. Admin is syntactic sugar to separate @@ -41,7 +40,7 @@ func (k admin) WithdrawFromInsuranceFund( return err } - coinToSend := sdk.NewCoin(collateral.String(), amount) + coinToSend := sdk.NewCoin(collateral, amount) if err = k.BankKeeper.SendCoinsFromModuleToAccount( ctx, /* from */ types.PerpEFModuleAccount, @@ -150,21 +149,28 @@ func (k admin) CloseMarket(ctx sdk.Context, pair asset.Pair) (err error) { return nil } -// UpdateCollateral updates the collateral denom and contract allowed to mint it -func (k admin) UpdateCollateral( +// ChangeCollateralDenom: Updates the collateral denom. A denom is valid if it is +// possible to make an sdk.Coin using it. [Admin] Only callable by sudoers. +func (k admin) ChangeCollateralDenom( ctx sdk.Context, denom string, - contract string, + sender sdk.AccAddress, ) error { - collateral := tftypes.TFDenom{ - Creator: contract, - Subdenom: denom, - } - - if err := collateral.Validate(); err != nil { + if err := k.SudoKeeper.CheckPermissions(sender, ctx); err != nil { return err } + return k.UnsafeChangeCollateralDenom(ctx, denom) +} - k.Collateral.Set(ctx, collateral) +// UnsafeChangeCollateralDenom: Used in the genesis to set the collateral +// without requiring an explicit call from sudoers. +func (k admin) UnsafeChangeCollateralDenom( + ctx sdk.Context, + denom string, +) error { + if err := sdk.ValidateDenom(denom); err != nil { + return types.ErrInvalidCollateral.Wrap(err.Error()) + } + k.Collateral.Set(ctx, denom) return nil } diff --git a/x/perp/v2/keeper/admin_test.go b/x/perp/v2/keeper/admin_test.go index 066cd38e9..5e8d66e25 100644 --- a/x/perp/v2/keeper/admin_test.go +++ b/x/perp/v2/keeper/admin_test.go @@ -16,6 +16,8 @@ import ( "github.com/NibiruChain/nibiru/x/common/testutil/testapp" "github.com/NibiruChain/nibiru/x/perp/v2/keeper" "github.com/NibiruChain/nibiru/x/perp/v2/types" + sudotypes "github.com/NibiruChain/nibiru/x/sudo/types" + tftypes "github.com/NibiruChain/nibiru/x/tokenfactory/types" . "github.com/NibiruChain/nibiru/x/common/testutil/action" . "github.com/NibiruChain/nibiru/x/perp/v2/integration/action" @@ -28,19 +30,20 @@ func TestAdmin_WithdrawFromInsuranceFund(t *testing.T) { ) { insuranceFund := nibiru.AccountKeeper.GetModuleAddress(types.PerpEFModuleAccount) balances := nibiru.BankKeeper.GetAllBalances(ctx, insuranceFund) - got := balances.AmountOf(types.DefaultTestingCollateralNotForProd.String()) + got := balances.AmountOf(types.TestingCollateralDenomNUSD) require.EqualValues(t, want.String(), got.String()) } setup := func() (nibiru *app.NibiruApp, ctx sdk.Context) { + testapp.EnsureNibiruPrefix() nibiru, ctx = testapp.NewNibiruTestAppAndContext() expectBalance(sdk.ZeroInt(), t, nibiru, ctx) - nibiru.PerpKeeperV2.Collateral.Set(ctx, types.DefaultTestingCollateralNotForProd) + nibiru.PerpKeeperV2.Collateral.Set(ctx, types.TestingCollateralDenomNUSD) return nibiru, ctx } fundModule := func(t *testing.T, amount sdkmath.Int, ctx sdk.Context, nibiru *app.NibiruApp) { - coins := sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), amount)) + coins := sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, amount)) err := testapp.FundModuleAccount( nibiru.BankKeeper, ctx, types.PerpEFModuleAccount, coins, @@ -64,7 +67,7 @@ func TestAdmin_WithdrawFromInsuranceFund(t *testing.T) { require.EqualValues(t, amountToFund.String(), - nibiru.BankKeeper.GetBalance(ctx, admin, types.DefaultTestingCollateralNotForProd.String()).Amount.String(), + nibiru.BankKeeper.GetBalance(ctx, admin, types.TestingCollateralDenomNUSD).Amount.String(), ) expectBalance(sdk.ZeroInt(), t, nibiru, ctx) }, @@ -202,7 +205,7 @@ func TestCloseMarket(t *testing.T) { SetBlockNumber(1), SetBlockTime(startTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( CloseMarket(pairBtcUsdc), @@ -227,7 +230,7 @@ func TestCloseMarket(t *testing.T) { ), SetBlockNumber(1), SetBlockTime(startTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10_200)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10_200)))), MarketOrder( alice, pairBtcUsdc, @@ -252,7 +255,7 @@ func TestCloseMarket(t *testing.T) { ), SetBlockNumber(1), SetBlockTime(startTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10_200)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10_200)))), MarketOrder( alice, pairBtcUsdc, @@ -271,3 +274,68 @@ func TestCloseMarket(t *testing.T) { NewTestSuite(t).WithTestCases(tc...).Run() } + +func TestAdmin_ChangeCollateralDenom(t *testing.T) { + adminSender := testutil.AccAddress() + nonAdminSender := testutil.AccAddress() + + setup := func() (nibiru *app.NibiruApp, ctx sdk.Context) { + nibiru, ctx = testapp.NewNibiruTestAppAndContext() + nibiru.SudoKeeper.Sudoers.Set(ctx, sudotypes.Sudoers{ + Root: "mock-root", // unused + Contracts: []string{adminSender.String()}, + }) + return nibiru, ctx + } + + for _, tc := range []struct { + newDenom string + sender sdk.AccAddress + wantErr string + name string + }{ + {name: "happy: normal denom", newDenom: "nusd", sender: adminSender, wantErr: ""}, + + {name: "happy: token factory denom", + newDenom: tftypes.TFDenom{ + Creator: testutil.AccAddress().String(), + Subdenom: "nusd", + }.String(), sender: adminSender, wantErr: ""}, + + {name: "happy: token factory denom", + newDenom: tftypes.TFDenom{ + Creator: testutil.AccAddress().String(), + Subdenom: "nusd", + }.String(), sender: adminSender, wantErr: "", + }, + + {name: "happy: IBC denom", + newDenom: "ibc/46B44899322F3CD854D2D46DEEF881958467CDD4B3B10086DA49296BBED94BED", // JUNO on Osmosis + sender: adminSender, wantErr: "", + }, + + {name: "sad: invalid denom", + newDenom: "", sender: adminSender, wantErr: types.ErrInvalidCollateral.Error(), + }, + {name: "sad: sender not in sudoers", + newDenom: "nusd", sender: nonAdminSender, wantErr: "insufficient permissions on smart contract", + }, + } { + t.Run(tc.name, func(t *testing.T) { + bapp, ctx := setup() + err := bapp.PerpKeeperV2.Admin.ChangeCollateralDenom( + ctx, tc.newDenom, tc.sender, + ) + + if tc.wantErr != "" { + require.ErrorContains(t, err, tc.wantErr) + return + } + require.NoError(t, err) + + newDenom, err := bapp.PerpKeeperV2.Collateral.Get(ctx) + require.NoError(t, err) + require.Equal(t, tc.newDenom, newDenom) + }) + } +} diff --git a/x/perp/v2/keeper/amm.go b/x/perp/v2/keeper/amm.go index 421ece853..722e6d349 100644 --- a/x/perp/v2/keeper/amm.go +++ b/x/perp/v2/keeper/amm.go @@ -87,7 +87,7 @@ func (k Keeper) handleMarketUpdateCost(ctx sdk.Context, pair asset.Pair, costAmt if costAmt.IsPositive() { // Positive cost, send from perp EF to vault cost := sdk.NewCoins( - sdk.NewCoin(collateral.String(), costAmt), + sdk.NewCoin(collateral, costAmt), ) err = k.BankKeeper.SendCoinsFromModuleToModule( ctx, @@ -99,7 +99,7 @@ func (k Keeper) handleMarketUpdateCost(ctx sdk.Context, pair asset.Pair, costAmt return types.ErrNotEnoughFundToPayAction.Wrapf( "not enough fund in perp ef to pay for repeg, need %s got %s", cost.String(), - k.BankKeeper.GetBalance(ctx, k.AccountKeeper.GetModuleAddress(types.PerpEFModuleAccount), collateral.String()).String(), + k.BankKeeper.GetBalance(ctx, k.AccountKeeper.GetModuleAddress(types.PerpEFModuleAccount), collateral).String(), ) } } else if costAmt.IsNegative() { @@ -109,7 +109,7 @@ func (k Keeper) handleMarketUpdateCost(ctx sdk.Context, pair asset.Pair, costAmt types.VaultModuleAccount, types.PerpEFModuleAccount, sdk.NewCoins( - sdk.NewCoin(collateral.String(), costAmt.Neg()), + sdk.NewCoin(collateral, costAmt.Neg()), ), ) if err != nil { // nolint:staticcheck diff --git a/x/perp/v2/keeper/amm_test.go b/x/perp/v2/keeper/amm_test.go index 651403dde..b2ff2513a 100644 --- a/x/perp/v2/keeper/amm_test.go +++ b/x/perp/v2/keeper/amm_test.go @@ -11,6 +11,7 @@ import ( "github.com/NibiruChain/nibiru/x/common/asset" "github.com/NibiruChain/nibiru/x/common/denoms" + "github.com/NibiruChain/nibiru/x/common/testutil" . "github.com/NibiruChain/nibiru/x/common/testutil/action" . "github.com/NibiruChain/nibiru/x/common/testutil/assertion" "github.com/NibiruChain/nibiru/x/common/testutil/testapp" @@ -27,15 +28,15 @@ func TestEditPriceMultipler(t *testing.T) { TC("same price multiplier"). Given( CreateCustomMarket(pair, WithTotalLong(sdk.NewDec(1000)), WithTotalShort(sdk.NewDec(500))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( EditPriceMultiplier(pair, sdk.OneDec()), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)), AMMShouldBeEqual(pair, AMM_SqrtDepthShouldBeEqual(sdk.NewDec(1e12)), AMM_BaseReserveShouldBeEqual(sdk.NewDec(1e12)), @@ -50,15 +51,15 @@ func TestEditPriceMultipler(t *testing.T) { WithTotalLong(sdk.NewDec(1000)), WithTotalShort(sdk.NewDec(1000)), WithEnabled(true), ), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( EditPriceMultiplier(pair, sdk.NewDec(10)), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)), AMMShouldBeEqual(pair, AMM_SqrtDepthShouldBeEqual(sdk.NewDec(1e12)), AMM_BaseReserveShouldBeEqual(sdk.NewDec(1e12)), @@ -70,15 +71,15 @@ func TestEditPriceMultipler(t *testing.T) { TC("long bias, increase price multiplier"). Given( CreateCustomMarket(pair, WithTotalLong(sdk.NewDec(1000)), WithTotalShort(sdk.NewDec(500))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( EditPriceMultiplier(pair, sdk.NewDec(10)), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1004500)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(995500)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(1004500)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(995500)), AMMShouldBeEqual(pair, AMM_SqrtDepthShouldBeEqual(sdk.NewDec(1e12)), AMM_BaseReserveShouldBeEqual(sdk.NewDec(1e12)), @@ -90,15 +91,15 @@ func TestEditPriceMultipler(t *testing.T) { TC("long bias, decrease price multiplier"). Given( CreateCustomMarket(pair, WithTotalLong(sdk.NewDec(1000)), WithTotalShort(sdk.NewDec(500))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( EditPriceMultiplier(pair, sdk.MustNewDecFromStr("0.25")), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(999626)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1000374)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(999626)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(1000374)), AMMShouldBeEqual(pair, AMM_SqrtDepthShouldBeEqual(sdk.NewDec(1e12)), AMM_BaseReserveShouldBeEqual(sdk.NewDec(1e12)), @@ -110,15 +111,15 @@ func TestEditPriceMultipler(t *testing.T) { TC("short bias, increase price multiplier"). Given( CreateCustomMarket(pair, WithTotalLong(sdk.NewDec(500)), WithTotalShort(sdk.NewDec(1000))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( EditPriceMultiplier(pair, sdk.NewDec(10)), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(995500)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1004500)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(995500)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(1004500)), AMMShouldBeEqual(pair, AMM_SqrtDepthShouldBeEqual(sdk.NewDec(1e12)), AMM_BaseReserveShouldBeEqual(sdk.NewDec(1e12)), @@ -130,15 +131,15 @@ func TestEditPriceMultipler(t *testing.T) { TC("short bias, decrease price multiplier"). Given( CreateCustomMarket(pair, WithTotalLong(sdk.NewDec(500)), WithTotalShort(sdk.NewDec(1000))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( EditPriceMultiplier(pair, sdk.MustNewDecFromStr("0.25")), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1000376)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(999624)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(1000376)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(999624)), AMMShouldBeEqual(pair, AMM_SqrtDepthShouldBeEqual(sdk.NewDec(1e12)), AMM_BaseReserveShouldBeEqual(sdk.NewDec(1e12)), @@ -155,7 +156,7 @@ func TestEditPriceMultiplerFail(t *testing.T) { pair := asset.Registry.Pair(denoms.BTC, denoms.NUSD) app, ctx := testapp.NewNibiruTestAppAndContext() - account := sdk.MustAccAddressFromBech32("cosmos1zaavvzxez0elundtn32qnk9lkm8kmcszzsv80v") + account := testutil.AccAddress() err := app.PerpKeeperV2.Admin.CreateMarket( ctx, @@ -192,17 +193,17 @@ func TestEditPriceMultiplerFail(t *testing.T) { require.ErrorIs(t, err, types.ErrNonPositivePegMultiplier) // Add market activity - err = app.BankKeeper.MintCoins(ctx, "inflation", sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1020)))) + err = app.BankKeeper.MintCoins(ctx, "inflation", sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1020)))) require.NoError(t, err) - err = app.BankKeeper.SendCoinsFromModuleToAccount(ctx, "inflation", account, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1020)))) + err = app.BankKeeper.SendCoinsFromModuleToAccount(ctx, "inflation", account, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1020)))) require.NoError(t, err) _, err = app.PerpKeeperV2.MarketOrder( ctx, pair, types.Direction_LONG, - sdk.MustAccAddressFromBech32("cosmos1zaavvzxez0elundtn32qnk9lkm8kmcszzsv80v"), + account, sdk.NewInt(1000), sdk.OneDec(), sdk.ZeroDec(), @@ -221,7 +222,7 @@ func TestEditPriceMultiplerFail(t *testing.T) { func TestEditSwapInvariantFail(t *testing.T) { pair := asset.Registry.Pair(denoms.BTC, denoms.NUSD) app, ctx := testapp.NewNibiruTestAppAndContext() - account := sdk.MustAccAddressFromBech32("cosmos1zaavvzxez0elundtn32qnk9lkm8kmcszzsv80v") + account := testutil.AccAddress() err := app.PerpKeeperV2.Admin.CreateMarket( ctx, @@ -258,17 +259,17 @@ func TestEditSwapInvariantFail(t *testing.T) { require.ErrorIs(t, err, types.ErrNegativeSwapInvariant) // Add market activity - err = app.BankKeeper.MintCoins(ctx, "inflation", sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(102)))) + err = app.BankKeeper.MintCoins(ctx, "inflation", sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(102)))) require.NoError(t, err) - err = app.BankKeeper.SendCoinsFromModuleToAccount(ctx, "inflation", account, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(102)))) + err = app.BankKeeper.SendCoinsFromModuleToAccount(ctx, "inflation", account, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(102)))) require.NoError(t, err) _, err = app.PerpKeeperV2.MarketOrder( ctx, pair, types.Direction_LONG, - sdk.MustAccAddressFromBech32("cosmos1zaavvzxez0elundtn32qnk9lkm8kmcszzsv80v"), + account, sdk.NewInt(100), sdk.OneDec(), sdk.ZeroDec(), @@ -299,15 +300,15 @@ func TestEditSwapInvariant(t *testing.T) { WithTotalShort(sdk.NewDec(500)), WithSqrtDepth(sdk.NewDec(1e6)), ), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( EditSwapInvariant(pair, sdk.NewDec(1e12)), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)), AMMShouldBeEqual(pair, AMM_SqrtDepthShouldBeEqual(sdk.NewDec(1e6)), AMM_BaseReserveShouldBeEqual(sdk.NewDec(1e6)), @@ -323,15 +324,15 @@ func TestEditSwapInvariant(t *testing.T) { WithTotalShort(sdk.NewDec(1000)), WithSqrtDepth(sdk.NewDec(1e6)), ), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( EditSwapInvariant(pair, sdk.NewDec(1e18)), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)), AMMShouldBeEqual(pair, AMM_SqrtDepthShouldBeEqual(sdk.NewDec(1e9)), AMM_BaseReserveShouldBeEqual(sdk.NewDec(1e9)), @@ -343,15 +344,15 @@ func TestEditSwapInvariant(t *testing.T) { TC("long bias, increase swap invariant"). Given( CreateCustomMarket(pair, WithTotalLong(sdk.NewDec(1e5)), WithSqrtDepth(sdk.NewDec(1e6))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( EditSwapInvariant(pair, sdk.NewDec(1e14)), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1008101)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(991899)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(1008101)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(991899)), AMMShouldBeEqual(pair, AMM_SqrtDepthShouldBeEqual(sdk.NewDec(1e7)), AMM_BaseReserveShouldBeEqual(sdk.NewDec(1e7)), @@ -363,15 +364,15 @@ func TestEditSwapInvariant(t *testing.T) { TC("long bias, decrease swap invariant"). Given( CreateCustomMarket(pair, WithTotalLong(sdk.NewDec(1e2)), WithSqrtDepth(sdk.NewDec(1e6))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( EditSwapInvariant(pair, sdk.NewDec(1e6)), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(999991)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1000009)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(999991)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(1000009)), AMMShouldBeEqual(pair, AMM_SqrtDepthShouldBeEqual(sdk.NewDec(1e3)), AMM_BaseReserveShouldBeEqual(sdk.NewDec(1e3)), @@ -383,15 +384,15 @@ func TestEditSwapInvariant(t *testing.T) { TC("short bias, increase swap invariant"). Given( CreateCustomMarket(pair, WithTotalShort(sdk.NewDec(1e5)), WithSqrtDepth(sdk.NewDec(1e6))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( EditSwapInvariant(pair, sdk.NewDec(1e14)), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1010102)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(989898)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(1010102)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(989898)), AMMShouldBeEqual(pair, AMM_SqrtDepthShouldBeEqual(sdk.NewDec(1e7)), AMM_BaseReserveShouldBeEqual(sdk.NewDec(1e7)), @@ -403,15 +404,15 @@ func TestEditSwapInvariant(t *testing.T) { TC("short bias, decrease swap invariant"). Given( CreateCustomMarket(pair, WithTotalShort(sdk.NewDec(1e2)), WithSqrtDepth(sdk.NewDec(1e6))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( EditSwapInvariant(pair, sdk.NewDec(1e6)), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(999989)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1000011)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(999989)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(1000011)), AMMShouldBeEqual(pair, AMM_SqrtDepthShouldBeEqual(sdk.NewDec(1e3)), AMM_BaseReserveShouldBeEqual(sdk.NewDec(1e3)), diff --git a/x/perp/v2/keeper/clearing_house.go b/x/perp/v2/keeper/clearing_house.go index d661e56d3..2022bf471 100644 --- a/x/perp/v2/keeper/clearing_house.go +++ b/x/perp/v2/keeper/clearing_house.go @@ -547,7 +547,7 @@ func (k Keeper) afterPositionUpdate( switch { case marginToVault.IsPositive(): - coinToSend := sdk.NewCoin(collateral.String(), marginToVault) + coinToSend := sdk.NewCoin(collateral, marginToVault) if err = k.BankKeeper.SendCoinsFromAccountToModule( ctx, traderAddr, types.VaultModuleAccount, sdk.NewCoins(coinToSend)); err != nil { return err @@ -583,9 +583,9 @@ func (k Keeper) afterPositionUpdate( &types.PositionChangedEvent{ FinalPosition: positionResp.Position, PositionNotional: positionNotional, - TransactionFee: sdk.NewCoin(collateral.String(), transferredFee), + TransactionFee: sdk.NewCoin(collateral, transferredFee), RealizedPnl: positionResp.RealizedPnl, - BadDebt: sdk.NewCoin(collateral.String(), positionResp.BadDebt.RoundInt()), + BadDebt: sdk.NewCoin(collateral, positionResp.BadDebt.RoundInt()), FundingPayment: positionResp.FundingPayment, BlockHeight: ctx.BlockHeight(), MarginToUser: marginToVault.Neg().Sub(transferredFee), @@ -658,7 +658,7 @@ func (k Keeper) transferFee( /* to */ types.FeePoolModuleAccount, /* coins */ sdk.NewCoins( sdk.NewCoin( - collateral.String(), + collateral, feeToExchangeFeePool, ), ), @@ -675,7 +675,7 @@ func (k Keeper) transferFee( /* to */ types.PerpEFModuleAccount, /* coins */ sdk.NewCoins( sdk.NewCoin( - collateral.String(), + collateral, feeToEcosystemFund, ), ), diff --git a/x/perp/v2/keeper/clearing_house_test.go b/x/perp/v2/keeper/clearing_house_test.go index a8410d32c..270b1dba2 100644 --- a/x/perp/v2/keeper/clearing_house_test.go +++ b/x/perp/v2/keeper/clearing_house_test.go @@ -41,9 +41,9 @@ func TestMarketOrder(t *testing.T) { SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10_200)))), - FundAccount(bob, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10_200)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(100_000_000)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10_200)))), + FundAccount(bob, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10_200)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(100_000_000)))), MarketOrder(alice, pairBtcNusd, types.Direction_SHORT, sdk.NewInt(10_000), sdk.OneDec(), sdk.ZeroDec()), MarketOrder(bob, pairBtcNusd, types.Direction_LONG, sdk.NewInt(10_000), sdk.OneDec(), sdk.ZeroDec()), @@ -65,7 +65,7 @@ func TestMarketOrder(t *testing.T) { ), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1020)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1020)))), ). When( MarketOrder(alice, pairBtcNusd, types.Direction_LONG, sdk.NewInt(1000), sdk.NewDec(10), sdk.ZeroDec(), @@ -111,9 +111,9 @@ func TestMarketOrder(t *testing.T) { }, PositionNotional: sdk.NewDec(10_000), RealizedPnl: sdk.ZeroDec(), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.ZeroDec(), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(20)), + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(20)), BlockHeight: 1, // exchangedMargin = - marginToVault - transferredFee MarginToUser: sdk.NewInt(1_000 + 20).Neg(), @@ -128,7 +128,7 @@ func TestMarketOrder(t *testing.T) { SetBlockNumber(1), SetBlockTime(startBlockTime), CreateCustomMarket(pairBtcNusd, WithEnabled(true)), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(2040)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(2040)))), MarketOrder(alice, pairBtcNusd, types.Direction_LONG, sdk.NewInt(1000), sdk.NewDec(10), sdk.ZeroDec()), ). When( @@ -167,9 +167,9 @@ func TestMarketOrder(t *testing.T) { }, PositionNotional: sdk.NewDec(20_000), RealizedPnl: sdk.ZeroDec(), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.ZeroDec(), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(20)), // 20 bps + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(20)), // 20 bps BlockHeight: 2, // exchangedMargin = - marginToVault - transferredFee MarginToUser: sdk.NewInt(1_000 + 20).Neg(), @@ -189,7 +189,7 @@ func TestMarketOrder(t *testing.T) { ), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(18)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(18)))), InsertPosition( WithPair(pairBtcNusd), WithTrader(alice), @@ -225,7 +225,7 @@ func TestMarketOrder(t *testing.T) { ), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(18)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(18)))), InsertPosition( WithPair(pairBtcNusd), WithTrader(alice), @@ -261,9 +261,9 @@ func TestMarketOrder(t *testing.T) { ), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10_000)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10_000)))), MarketOrder(alice, pairBtcNusd, types.Direction_LONG, sdk.NewInt(9_000), sdk.NewDec(10), sdk.ZeroDec()), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(100_000_000)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(100_000_000)))), EditSwapInvariant(pairBtcNusd, sdk.OneDec()), ). When( @@ -278,7 +278,7 @@ func TestMarketOrder(t *testing.T) { CreateCustomMarket(pairBtcNusd, WithEnabled(true)), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1030)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1030)))), MarketOrder(alice, pairBtcNusd, types.Direction_LONG, sdk.NewInt(1000), sdk.NewDec(10), sdk.ZeroDec()), ). When( @@ -318,9 +318,9 @@ func TestMarketOrder(t *testing.T) { }, PositionNotional: sdk.NewDec(5000), RealizedPnl: sdk.ZeroDec(), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.ZeroDec(), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10)), // 20 bps + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10)), // 20 bps BlockHeight: 2, // exchangedMargin = - marginToVault - transferredFee MarginToUser: sdk.NewInt(0 + 10).Neg(), @@ -340,7 +340,7 @@ func TestMarketOrder(t *testing.T) { ), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(18)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(18)))), InsertPosition( WithPair(pairBtcNusd), WithTrader(alice), @@ -372,7 +372,7 @@ func TestMarketOrder(t *testing.T) { CreateCustomMarket(pairBtcNusd, WithEnabled(true)), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(4080)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(4080)))), MarketOrder(alice, pairBtcNusd, types.Direction_LONG, sdk.NewInt(1000), sdk.NewDec(10), sdk.ZeroDec()), ). When( @@ -412,9 +412,9 @@ func TestMarketOrder(t *testing.T) { }, PositionNotional: sdk.NewDec(20000), RealizedPnl: sdk.ZeroDec(), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.ZeroDec(), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(60)), // 20 bps + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(60)), // 20 bps BlockHeight: 2, // exchangedMargin = - marginToVault - transferredFee MarginToUser: sdk.NewInt(1_000 + 60).Neg(), @@ -433,7 +433,7 @@ func TestMarketOrder(t *testing.T) { ), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(18)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(18)))), InsertPosition( WithPair(pairBtcNusd), WithTrader(alice), @@ -479,9 +479,9 @@ func TestMarketOrder(t *testing.T) { }, PositionNotional: sdk.ZeroDec(), RealizedPnl: sdk.MustNewDecFromStr("-1100.000088999999110000"), - BadDebt: sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 102), + BadDebt: sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 102), FundingPayment: sdk.NewDec(2), - TransactionFee: sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 18), // 20 bps + TransactionFee: sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 18), // 20 bps BlockHeight: 2, MarginToUser: sdk.NewInt(-18), ChangeReason: types.ChangeReason_MarketOrder, @@ -495,7 +495,7 @@ func TestMarketOrder(t *testing.T) { CreateCustomMarket(pairBtcNusd, WithEnabled(true)), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1020)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1020)))), ). When( MarketOrder(alice, pairBtcNusd, types.Direction_SHORT, sdk.NewInt(1000), sdk.NewDec(10), sdk.ZeroDec(), @@ -543,9 +543,9 @@ func TestMarketOrder(t *testing.T) { }, PositionNotional: sdk.NewDec(10_000), RealizedPnl: sdk.ZeroDec(), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.ZeroDec(), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(20)), + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(20)), BlockHeight: 1, // exchangedMargin = - marginToVault - transferredFee MarginToUser: sdk.NewInt(1_000 + 20).Neg(), @@ -560,7 +560,7 @@ func TestMarketOrder(t *testing.T) { CreateCustomMarket(pairBtcNusd, WithEnabled(true)), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(2040)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(2040)))), MarketOrder(alice, pairBtcNusd, types.Direction_SHORT, sdk.NewInt(1000), sdk.NewDec(10), sdk.ZeroDec()), ). When( @@ -600,9 +600,9 @@ func TestMarketOrder(t *testing.T) { }, PositionNotional: sdk.NewDec(20_000), RealizedPnl: sdk.ZeroDec(), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.ZeroDec(), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(20)), // 20 bps + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(20)), // 20 bps BlockHeight: 2, // exchangedMargin = - marginToVault - transferredFee MarginToUser: sdk.NewInt(1_000 + 20).Neg(), @@ -620,7 +620,7 @@ func TestMarketOrder(t *testing.T) { ), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(22)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(22)))), InsertPosition( WithPair(pairBtcNusd), WithTrader(alice), @@ -652,7 +652,7 @@ func TestMarketOrder(t *testing.T) { CreateCustomMarket(pairBtcNusd, WithEnabled(true)), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1030)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1030)))), MarketOrder(alice, pairBtcNusd, types.Direction_SHORT, sdk.NewInt(1000), sdk.NewDec(10), sdk.ZeroDec()), ). When( @@ -692,9 +692,9 @@ func TestMarketOrder(t *testing.T) { }, PositionNotional: sdk.NewDec(5000), RealizedPnl: sdk.ZeroDec(), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.ZeroDec(), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10)), // 20 bps + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10)), // 20 bps BlockHeight: 2, // exchangedMargin = - marginToVault - transferredFee MarginToUser: sdk.NewInt(0 + 10).Neg(), @@ -713,7 +713,7 @@ func TestMarketOrder(t *testing.T) { ), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(22)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(22)))), InsertPosition( WithPair(pairBtcNusd), WithTrader(alice), @@ -745,7 +745,7 @@ func TestMarketOrder(t *testing.T) { CreateCustomMarket(pairBtcNusd, WithEnabled(true)), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(4080)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(4080)))), MarketOrder(alice, pairBtcNusd, types.Direction_SHORT, sdk.NewInt(1000), sdk.NewDec(10), sdk.ZeroDec()), ). When( @@ -785,9 +785,9 @@ func TestMarketOrder(t *testing.T) { }, PositionNotional: sdk.NewDec(20000), RealizedPnl: sdk.ZeroDec(), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.ZeroDec(), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(60)), // 20 bps + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(60)), // 20 bps BlockHeight: 2, // exchangedMargin = - marginToVault - transferredFee MarginToUser: sdk.NewInt(1_000 + 60).Neg(), @@ -805,7 +805,7 @@ func TestMarketOrder(t *testing.T) { ), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(22)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(22)))), InsertPosition( WithPair(pairBtcNusd), WithTrader(alice), @@ -851,9 +851,9 @@ func TestMarketOrder(t *testing.T) { }, PositionNotional: sdk.ZeroDec(), RealizedPnl: sdk.MustNewDecFromStr("-1100.000111000001110000"), - BadDebt: sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 98), + BadDebt: sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 98), FundingPayment: sdk.NewDec(-2), - TransactionFee: sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 22), // 20 bps + TransactionFee: sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 22), // 20 bps BlockHeight: 2, // exchangedMargin = - marginToVault - transferredFee MarginToUser: sdk.NewInt(-22), @@ -868,7 +868,7 @@ func TestMarketOrder(t *testing.T) { CreateCustomMarket(pairBtcNusd, WithEnabled(true)), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(99)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(99)))), ). When( MarketOrderFails( @@ -884,7 +884,7 @@ func TestMarketOrder(t *testing.T) { CreateCustomMarket(pairBtcNusd, WithEnabled(true)), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(47_714_285_715)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(47_714_285_715)))), CloseMarket(pairBtcNusd), ). When( @@ -899,7 +899,7 @@ func TestMarketOrder(t *testing.T) { Given( SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(47_714_285_715)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(47_714_285_715)))), ). When( MarketOrderFails(alice, pairBtcNusd, types.Direction_SHORT, sdk.NewInt(47_619_047_619), sdk.OneDec(), sdk.ZeroDec(), @@ -914,7 +914,7 @@ func TestMarketOrder(t *testing.T) { SetBlockTime(startBlockTime), SetBlockNumber(1), CreateCustomMarket(pairBtcNusd, WithEnabled(true)), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(47_714_285_715)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(47_714_285_715)))), ). When( MarketOrderFails(alice, pairBtcNusd, types.Direction_LONG, sdk.ZeroInt(), sdk.OneDec(), sdk.ZeroDec(), @@ -929,7 +929,7 @@ func TestMarketOrder(t *testing.T) { SetBlockTime(startBlockTime), SetBlockNumber(1), CreateCustomMarket(pairBtcNusd, WithEnabled(true)), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( MarketOrderFails(alice, pairBtcNusd, types.Direction_LONG, sdk.OneInt(), sdk.ZeroDec(), sdk.ZeroDec(), @@ -944,7 +944,7 @@ func TestMarketOrder(t *testing.T) { SetBlockTime(startBlockTime), SetBlockNumber(1), CreateCustomMarket(pairBtcNusd, WithEnabled(true)), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( MarketOrderFails(alice, pairBtcNusd, types.Direction_LONG, sdk.OneInt(), sdk.NewDec(11), sdk.ZeroDec(), @@ -961,7 +961,7 @@ func TestMarketOrder(t *testing.T) { CreateCustomMarket(pairBtcNusd, WithEnabled(true), WithPricePeg(sdk.MustNewDecFromStr("25001.0112"))), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(20_000_000_000+20_000_000)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(20_000_000_000+20_000_000)))), ). When( MarketOrder(alice, pairBtcNusd, types.Direction_SHORT, sdk.NewInt(10_000_000_000), sdk.OneDec(), sdk.ZeroDec()), @@ -979,7 +979,7 @@ func TestMarketOrder(t *testing.T) { pairBtcNusd, WithEnabled(true), WithPricePeg(sdk.MustNewDecFromStr("25001.0112"))), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( MarketOrder(alice, pairBtcNusd, types.Direction_SHORT, sdk.NewInt(100_000), sdk.OneDec(), sdk.ZeroDec()), @@ -996,7 +996,7 @@ func TestMarketOrder(t *testing.T) { pairBtcNusd, WithEnabled(true), WithPricePeg(sdk.MustNewDecFromStr("25001.0112"))), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( MarketOrder(alice, pairBtcNusd, types.Direction_LONG, sdk.NewInt(50_000), sdk.NewDec(2), sdk.ZeroDec()), @@ -1014,7 +1014,7 @@ func TestMarketOrder(t *testing.T) { pairBtcNusd, WithEnabled(true), WithPricePeg(sdk.MustNewDecFromStr("25001.0112"))), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( MarketOrder(alice, pairBtcNusd, types.Direction_SHORT, sdk.NewInt(100_000), sdk.OneDec(), sdk.ZeroDec()), @@ -1032,7 +1032,7 @@ func TestMarketOrder(t *testing.T) { pairBtcNusd, WithEnabled(true), WithPricePeg(sdk.MustNewDecFromStr("25000"))), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1e6)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1e6)))), ). When( MarketOrder(alice, pairBtcNusd, types.Direction_SHORT, sdk.NewInt(100_000), sdk.OneDec(), sdk.ZeroDec()), @@ -1064,7 +1064,7 @@ func TestMarketOrderError(t *testing.T) { }{ { name: "not enough trader funds", - traderFunds: sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 999)), + traderFunds: sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 999)), initialPosition: nil, side: types.Direction_LONG, margin: sdk.NewInt(1000), @@ -1074,7 +1074,7 @@ func TestMarketOrderError(t *testing.T) { }, { name: "position has bad debt", - traderFunds: sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 999)), + traderFunds: sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 999)), initialPosition: &types.Position{ Pair: asset.Registry.Pair(denoms.BTC, denoms.NUSD), Size_: sdk.OneDec(), @@ -1091,7 +1091,7 @@ func TestMarketOrderError(t *testing.T) { }, { name: "new long position not over base limit", - traderFunds: sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 1020)), + traderFunds: sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 1020)), initialPosition: nil, side: types.Direction_LONG, margin: sdk.NewInt(1000), @@ -1101,7 +1101,7 @@ func TestMarketOrderError(t *testing.T) { }, { name: "new short position not under base limit", - traderFunds: sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 1020)), + traderFunds: sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 1020)), initialPosition: nil, side: types.Direction_SHORT, margin: sdk.NewInt(1000), @@ -1111,7 +1111,7 @@ func TestMarketOrderError(t *testing.T) { }, { name: "quote asset amount is zero", - traderFunds: sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 1020)), + traderFunds: sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 1020)), initialPosition: nil, side: types.Direction_SHORT, margin: sdk.ZeroInt(), @@ -1121,7 +1121,7 @@ func TestMarketOrderError(t *testing.T) { }, { name: "leverage amount is zero", - traderFunds: sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 1020)), + traderFunds: sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 1020)), initialPosition: nil, side: types.Direction_SHORT, margin: sdk.NewInt(1000), @@ -1131,7 +1131,7 @@ func TestMarketOrderError(t *testing.T) { }, { name: "leverage amount is too high - SELL", - traderFunds: sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 1020)), + traderFunds: sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 1020)), initialPosition: nil, side: types.Direction_SHORT, margin: sdk.NewInt(100), @@ -1141,7 +1141,7 @@ func TestMarketOrderError(t *testing.T) { }, { name: "leverage amount is too high - BUY", - traderFunds: sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 1020)), + traderFunds: sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 1020)), initialPosition: nil, side: types.Direction_LONG, margin: sdk.NewInt(100), @@ -1197,7 +1197,7 @@ func TestPartialClose(t *testing.T) { ), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10)))), InsertPosition( WithPair(pairBtcNusd), WithTrader(alice), @@ -1231,9 +1231,9 @@ func TestPartialClose(t *testing.T) { }, PositionNotional: sdk.MustNewDecFromStr("14999.999812500001968750"), RealizedPnl: sdk.MustNewDecFromStr("2499.999950000000500000"), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.NewDec(2), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10)), + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10)), BlockHeight: 1, MarginToUser: sdk.NewInt(-10), ChangeReason: types.ChangeReason_PartialClose, @@ -1252,7 +1252,7 @@ func TestPartialClose(t *testing.T) { ), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(4)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(4)))), InsertPosition( WithPair(pairBtcNusd), WithTrader(alice), @@ -1286,9 +1286,9 @@ func TestPartialClose(t *testing.T) { }, PositionNotional: sdk.MustNewDecFromStr("7124.999910937500935156"), RealizedPnl: sdk.MustNewDecFromStr("-125.000023749999762500"), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.NewDec(2), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(4)), + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(4)), BlockHeight: 1, MarginToUser: sdk.NewInt(-4), ChangeReason: types.ChangeReason_PartialClose, @@ -1307,7 +1307,7 @@ func TestPartialClose(t *testing.T) { ), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(4)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(4)))), InsertPosition( WithPair(pairBtcNusd), WithTrader(alice), @@ -1341,9 +1341,9 @@ func TestPartialClose(t *testing.T) { }, PositionNotional: sdk.MustNewDecFromStr("7049.999911875000925312"), RealizedPnl: sdk.MustNewDecFromStr("-150.000023499999765000"), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.NewDec(2), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(4)), + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(4)), BlockHeight: 1, MarginToUser: sdk.NewInt(-4), ChangeReason: types.ChangeReason_PartialClose, @@ -1361,8 +1361,8 @@ func TestPartialClose(t *testing.T) { ), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 2))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 27))), + FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 2))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 27))), InsertPosition( WithPair(pairBtcNusd), WithTrader(alice), @@ -1396,9 +1396,9 @@ func TestPartialClose(t *testing.T) { }, PositionNotional: sdk.MustNewDecFromStr("4424.999944687500580781"), RealizedPnl: sdk.MustNewDecFromStr("-1025.000014749999852500"), - BadDebt: sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 27), + BadDebt: sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 27), FundingPayment: sdk.NewDec(2), - TransactionFee: sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 2), + TransactionFee: sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 2), BlockHeight: 1, MarginToUser: sdk.NewInt(-2), ChangeReason: types.ChangeReason_PartialClose, @@ -1416,7 +1416,7 @@ func TestPartialClose(t *testing.T) { ), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(2)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(2)))), InsertPosition( WithPair(pairBtcNusd), WithTrader(alice), @@ -1450,9 +1450,9 @@ func TestPartialClose(t *testing.T) { }, PositionNotional: sdk.MustNewDecFromStr("250.000004375000057812"), RealizedPnl: sdk.MustNewDecFromStr("6749.999992499999925000"), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.NewDec(-2), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(2)), + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(2)), BlockHeight: 1, MarginToUser: sdk.NewInt(-2), ChangeReason: types.ChangeReason_PartialClose, @@ -1471,7 +1471,7 @@ func TestPartialClose(t *testing.T) { ), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(16)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(16)))), InsertPosition( WithPair(pairBtcNusd), WithTrader(alice), @@ -1505,9 +1505,9 @@ func TestPartialClose(t *testing.T) { }, PositionNotional: sdk.MustNewDecFromStr("2625.000045937500607031"), RealizedPnl: sdk.MustNewDecFromStr("-375.000078750000787500"), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.NewDec(-2), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(16)), + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(16)), BlockHeight: 1, MarginToUser: sdk.NewInt(-16), ChangeReason: types.ChangeReason_PartialClose, @@ -1526,7 +1526,7 @@ func TestPartialClose(t *testing.T) { ), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(16)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(16)))), InsertPosition( WithPair(pairBtcNusd), WithTrader(alice), @@ -1560,9 +1560,9 @@ func TestPartialClose(t *testing.T) { }, PositionNotional: sdk.MustNewDecFromStr("2725.000047687500630156"), RealizedPnl: sdk.MustNewDecFromStr("-675.000081750000817500"), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.NewDec(-2), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(16)), + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(16)), BlockHeight: 1, MarginToUser: sdk.NewInt(-16), ChangeReason: types.ChangeReason_PartialClose, @@ -1581,8 +1581,8 @@ func TestPartialClose(t *testing.T) { ), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(18)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 48))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(18)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 48))), InsertPosition( WithPair(pairBtcNusd), WithTrader(alice), @@ -1616,9 +1616,9 @@ func TestPartialClose(t *testing.T) { }, PositionNotional: sdk.MustNewDecFromStr("2850.000049875000659062"), RealizedPnl: sdk.MustNewDecFromStr("-1050.000085500000855000"), - BadDebt: sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 48), + BadDebt: sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 48), FundingPayment: sdk.NewDec(-2), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(18)), + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(18)), BlockHeight: 1, MarginToUser: sdk.NewInt(-18), ChangeReason: types.ChangeReason_PartialClose, @@ -1637,7 +1637,7 @@ func TestPartialClose(t *testing.T) { SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10_200)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10_200)))), PartialCloseFails(alice, pairBtcNusd, sdk.NewDec(5_000), types.ErrPositionNotFound), MarketOrder(alice, pairBtcNusd, types.Direction_LONG, sdk.NewInt(9_000), sdk.OneDec(), sdk.ZeroDec()), @@ -1665,8 +1665,8 @@ func TestClosePosition(t *testing.T) { ), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(40)))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 10_998))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(40)))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 10_998))), InsertPosition( WithTrader(alice), WithPair(pairBtcNusd), @@ -1692,9 +1692,9 @@ func TestClosePosition(t *testing.T) { }, PositionNotional: sdk.ZeroDec(), RealizedPnl: sdk.MustNewDecFromStr("9999.999800000002000000"), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.NewDec(2), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(40)), + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(40)), BlockHeight: 1, MarginToUser: sdk.NewInt(10_958), ChangeReason: types.ChangeReason_ClosePosition, @@ -1712,8 +1712,8 @@ func TestClosePosition(t *testing.T) { ), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(20)))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 898))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(20)))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 898))), InsertPosition( WithTrader(alice), WithPair(pairBtcNusd), @@ -1739,9 +1739,9 @@ func TestClosePosition(t *testing.T) { }, PositionNotional: sdk.ZeroDec(), RealizedPnl: sdk.MustNewDecFromStr("-100.000098999999010000"), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.NewDec(2), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(20)), + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(20)), BlockHeight: 1, MarginToUser: sdk.NewInt(878), ChangeReason: types.ChangeReason_ClosePosition, @@ -1766,9 +1766,9 @@ func TestClosePosition(t *testing.T) { WithMargin(sdk.NewDec(1_000)), WithOpenNotional(sdk.NewDec(10_000)), ), - FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 18))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 1000))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 102))), + FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 18))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 1000))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 102))), ). When( MoveToNextBlock(), @@ -1787,9 +1787,9 @@ func TestClosePosition(t *testing.T) { LastUpdatedBlockNumber: 2, }, PositionNotional: sdk.ZeroDec(), - TransactionFee: sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 18), + TransactionFee: sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 18), RealizedPnl: sdk.MustNewDecFromStr("-1100.000088999999110000"), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(102)), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(102)), FundingPayment: sdk.NewDec(2), BlockHeight: 2, MarginToUser: sdk.NewInt(-18), @@ -1797,8 +1797,8 @@ func TestClosePosition(t *testing.T) { ExchangedNotional: sdk.MustNewDecFromStr("-10000.000000000000000000"), ExchangedSize: sdk.MustNewDecFromStr("-10000.000000000000000000"), }), - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1102)), // 1000 + 102 from perp ef - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(9)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(1102)), // 1000 + 102 from perp ef + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(9)), ), TC("close short position with positive PnL"). @@ -1810,8 +1810,8 @@ func TestClosePosition(t *testing.T) { ), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(2)))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 10_002))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(2)))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 10_002))), InsertPosition( WithTrader(alice), WithPair(pairBtcNusd), @@ -1837,9 +1837,9 @@ func TestClosePosition(t *testing.T) { }, PositionNotional: sdk.ZeroDec(), RealizedPnl: sdk.MustNewDecFromStr("8999.999989999999900000"), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.NewDec(-2), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(2)), + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(2)), BlockHeight: 1, MarginToUser: sdk.NewInt(10_000), ChangeReason: types.ChangeReason_ClosePosition, @@ -1857,8 +1857,8 @@ func TestClosePosition(t *testing.T) { ), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(20)))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 902))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(20)))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 902))), InsertPosition( WithTrader(alice), WithPair(pairBtcNusd), @@ -1884,9 +1884,9 @@ func TestClosePosition(t *testing.T) { }, PositionNotional: sdk.ZeroDec(), RealizedPnl: sdk.MustNewDecFromStr("-100.000101000001010000"), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.NewDec(-2), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(20)), + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(20)), BlockHeight: 1, MarginToUser: sdk.NewInt(882), ChangeReason: types.ChangeReason_ClosePosition, @@ -1911,9 +1911,9 @@ func TestClosePosition(t *testing.T) { WithMargin(sdk.NewDec(1_000)), WithOpenNotional(sdk.NewDec(10_000)), ), - FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 22))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 1000))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 98))), + FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 22))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 1000))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 98))), ). When( MoveToNextBlock(), @@ -1932,9 +1932,9 @@ func TestClosePosition(t *testing.T) { LastUpdatedBlockNumber: 2, }, PositionNotional: sdk.ZeroDec(), - TransactionFee: sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 22), + TransactionFee: sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 22), RealizedPnl: sdk.MustNewDecFromStr("-1100.000111000001110000"), - BadDebt: sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 98), + BadDebt: sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 98), FundingPayment: sdk.NewDec(-2), BlockHeight: 2, MarginToUser: sdk.NewInt(-22), @@ -1942,8 +1942,8 @@ func TestClosePosition(t *testing.T) { ExchangedNotional: sdk.MustNewDecFromStr("-10000.000000000000000000"), ExchangedSize: sdk.MustNewDecFromStr("10000.000000000000000000"), }), - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1098)), // 1000 + 98 from perp ef - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(11)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(1098)), // 1000 + 98 from perp ef + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(11)), ), } @@ -1964,8 +1964,8 @@ func TestUpdateSwapInvariant(t *testing.T) { CreateCustomMarket(pairBtcNusd, WithEnabled(true)), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10_200_000_000)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(100000)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10_200_000_000)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(100000)))), ). When( MarketOrder(alice, pairBtcNusd, types.Direction_LONG, sdk.NewInt(10_000_000_000), sdk.OneDec(), sdk.ZeroDec()), @@ -1979,8 +1979,8 @@ func TestUpdateSwapInvariant(t *testing.T) { CreateCustomMarket(pairBtcNusd, WithEnabled(true)), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10_200_000_000)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(100000)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10_200_000_000)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(100000)))), ). When( MarketOrder(alice, pairBtcNusd, types.Direction_SHORT, sdk.NewInt(10_000_000_000), sdk.OneDec(), sdk.NewDec(10_000_000_000_000)), @@ -1994,8 +1994,8 @@ func TestUpdateSwapInvariant(t *testing.T) { CreateCustomMarket(pairBtcNusd, WithEnabled(true)), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10_200_000_000)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(100_000_000)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10_200_000_000)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(100_000_000)))), ). When( MarketOrder(alice, pairBtcNusd, types.Direction_LONG, sdk.NewInt(10_000_000_000), sdk.OneDec(), sdk.ZeroDec()), @@ -2014,8 +2014,8 @@ func TestUpdateSwapInvariant(t *testing.T) { CreateCustomMarket(pairBtcNusd, WithEnabled(true)), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10_200_000_000)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(100_000_000)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10_200_000_000)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(100_000_000)))), ). When( MarketOrder(alice, pairBtcNusd, types.Direction_SHORT, sdk.NewInt(10_000_000_000), sdk.OneDec(), sdk.ZeroDec()), @@ -2027,7 +2027,7 @@ func TestUpdateSwapInvariant(t *testing.T) { ). Then( PositionShouldNotExist(alice, pairBtcNusd, 1), - ModuleBalanceShouldBeEqualTo(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.OneInt()))), + ModuleBalanceShouldBeEqualTo(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.OneInt()))), ), TC("only long position - decreasing k"). @@ -2035,8 +2035,8 @@ func TestUpdateSwapInvariant(t *testing.T) { CreateCustomMarket(pairBtcNusd, WithEnabled(true)), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10_200_000_000)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(100_000_000)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10_200_000_000)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(100_000_000)))), ). When( MarketOrder(alice, pairBtcNusd, types.Direction_LONG, sdk.NewInt(10_000_000_000), sdk.OneDec(), sdk.ZeroDec()), @@ -2055,8 +2055,8 @@ func TestUpdateSwapInvariant(t *testing.T) { CreateCustomMarket(pairBtcNusd, WithEnabled(true)), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10_200_000_000)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(100_000_000)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10_200_000_000)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(100_000_000)))), ). When( MarketOrder(alice, pairBtcNusd, types.Direction_SHORT, sdk.NewInt(10_000_000_000), sdk.OneDec(), sdk.ZeroDec()), @@ -2076,8 +2076,8 @@ func TestUpdateSwapInvariant(t *testing.T) { CreateCustomMarket(pairBtcNusd, WithEnabled(true)), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10_200_000_000)))), - FundAccount(bob, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10_200_000_000)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10_200_000_000)))), + FundAccount(bob, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10_200_000_000)))), ). When( MarketOrder(alice, pairBtcNusd, types.Direction_LONG, sdk.NewInt(10_000_000_000), sdk.OneDec(), sdk.ZeroDec()), @@ -2089,8 +2089,8 @@ func TestUpdateSwapInvariant(t *testing.T) { AMM_BiasShouldBeEqual(sdk.ZeroDec()), AMM_SwapInvariantShouldBeEqual(sdk.MustNewDecFromStr("100000000000000000000000000.000000000000000000"))), - ModuleBalanceShouldBeEqualTo(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(20_000_000_000)))), - ModuleBalanceShouldBeEqualTo(types.FeePoolModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(20_000_000)))), // Fees are 10_000_000_000 * 0.0010 * 2 + ModuleBalanceShouldBeEqualTo(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(20_000_000_000)))), + ModuleBalanceShouldBeEqualTo(types.FeePoolModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(20_000_000)))), // Fees are 10_000_000_000 * 0.0010 * 2 ClosePosition(alice, pairBtcNusd), ClosePosition(bob, pairBtcNusd), @@ -2100,15 +2100,15 @@ func TestUpdateSwapInvariant(t *testing.T) { PositionShouldNotExist(bob, pairBtcNusd, 1), ModuleBalanceShouldBeEqualTo(types.VaultModuleAccount, sdk.NewCoins()), - ModuleBalanceShouldBeEqualTo(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(39_782_394)))), + ModuleBalanceShouldBeEqualTo(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(39_782_394)))), ), TC("long and short position - reducing k"). Given( CreateCustomMarket(pairBtcNusd, WithEnabled(true)), SetBlockTime(startBlockTime), SetBlockNumber(1), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10_200_000_000)))), - FundAccount(bob, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10_200_000_000)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10_200_000_000)))), + FundAccount(bob, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10_200_000_000)))), ). When( MarketOrder(alice, pairBtcNusd, types.Direction_LONG, sdk.NewInt(10_000_000_000), sdk.OneDec(), sdk.ZeroDec()), @@ -2120,8 +2120,8 @@ func TestUpdateSwapInvariant(t *testing.T) { AMM_BiasShouldBeEqual(sdk.ZeroDec()), AMM_SwapInvariantShouldBeEqual(sdk.MustNewDecFromStr("99999999999999999873578.871987712489000000"))), - ModuleBalanceShouldBeEqualTo(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(20_000_000_000)))), - ModuleBalanceShouldBeEqualTo(types.FeePoolModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(20_000_000)))), // Fees are 10_000_000_000 * 0.0010 * 2 + ModuleBalanceShouldBeEqualTo(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(20_000_000_000)))), + ModuleBalanceShouldBeEqualTo(types.FeePoolModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(20_000_000)))), // Fees are 10_000_000_000 * 0.0010 * 2 ClosePosition(alice, pairBtcNusd), ClosePosition(bob, pairBtcNusd), @@ -2131,7 +2131,7 @@ func TestUpdateSwapInvariant(t *testing.T) { PositionShouldNotExist(bob, pairBtcNusd, 1), ModuleBalanceShouldBeEqualTo(types.VaultModuleAccount, sdk.NewCoins()), - ModuleBalanceShouldBeEqualTo(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(39_200_810)))), + ModuleBalanceShouldBeEqualTo(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(39_200_810)))), ), } diff --git a/x/perp/v2/keeper/dnr_test.go b/x/perp/v2/keeper/dnr_test.go index 597ce508d..349579263 100644 --- a/x/perp/v2/keeper/dnr_test.go +++ b/x/perp/v2/keeper/dnr_test.go @@ -35,8 +35,8 @@ func TestUserVolumes(t *testing.T) { SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), positionSize.AddRaw(1000)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(100_000_000)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, positionSize.AddRaw(1000)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(100_000_000)))), ). When( MarketOrder(alice, pairBtcNusd, types.Direction_LONG, sdk.NewInt(10_000), sdk.OneDec(), sdk.ZeroDec()), @@ -56,8 +56,8 @@ func TestUserVolumes(t *testing.T) { SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), positionSize.AddRaw(1000)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(100_000_000)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, positionSize.AddRaw(1000)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(100_000_000)))), ). When( DnREpochIs(1), @@ -80,8 +80,8 @@ func TestUserVolumes(t *testing.T) { SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), positionSize.AddRaw(1000)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(100_000_000)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, positionSize.AddRaw(1000)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(100_000_000)))), ).When( DnREpochIs(1), MarketOrder(alice, pairBtcNusd, types.Direction_LONG, sdk.NewInt(10_000), sdk.OneDec(), sdk.ZeroDec()), // open epoch 1 @@ -125,8 +125,8 @@ func TestDiscount(t *testing.T) { SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), positionSize.AddRaw(1000)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(100_000_000)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, positionSize.AddRaw(1000)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(100_000_000)))), ). When( DnREpochIs(1), @@ -146,8 +146,8 @@ func TestDiscount(t *testing.T) { SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), positionSize.AddRaw(1000)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(100_000_000)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, positionSize.AddRaw(1000)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(100_000_000)))), ). When( SetGlobalDiscount(fauxGlobalFeeDiscount, sdk.NewInt(50_000)), @@ -171,8 +171,8 @@ func TestDiscount(t *testing.T) { SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), positionSize.AddRaw(1000)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(100_000_000)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, positionSize.AddRaw(1000)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(100_000_000)))), ). When( SetGlobalDiscount(globalFeeDiscount, sdk.NewInt(50_000)), @@ -196,8 +196,8 @@ func TestDiscount(t *testing.T) { SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), positionSize.AddRaw(1000)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(100_000_000)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, positionSize.AddRaw(1000)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(100_000_000)))), ). When( SetGlobalDiscount(sdk.MustNewDecFromStr("0.0004"), sdk.NewInt(50_000)), diff --git a/x/perp/v2/keeper/grpc_query.go b/x/perp/v2/keeper/grpc_query.go index 9e377a02a..6ec57c4fb 100644 --- a/x/perp/v2/keeper/grpc_query.go +++ b/x/perp/v2/keeper/grpc_query.go @@ -195,14 +195,8 @@ func (q queryServer) QueryCollateral( goCtx context.Context, req *types.QueryCollateralRequest, ) (*types.QueryCollateralResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - - collateral, err := q.k.Collateral.Get(ctx) - if err != nil { - return nil, err - } - + denom := q.k.Collateral.GetOr(ctx, "") return &types.QueryCollateralResponse{ - CollateralCreator: collateral.Creator, - CollateralSubdenom: collateral.Subdenom, + CollateralDenom: denom, }, nil } diff --git a/x/perp/v2/keeper/grpc_query_test.go b/x/perp/v2/keeper/grpc_query_test.go index 3fc903dca..de30f16b9 100644 --- a/x/perp/v2/keeper/grpc_query_test.go +++ b/x/perp/v2/keeper/grpc_query_test.go @@ -390,31 +390,6 @@ func TestQueryMarkets(t *testing.T) { NewTestSuite(t).WithTestCases(tc...).Run() } -func TestGetCollateral(t *testing.T) { - pair := asset.Registry.Pair(denoms.BTC, denoms.NUSD) - - tc := TestCases{ - TC("positive PnL"). - Given( - CreateCustomMarket( - pair, - WithEnabled(true), - WithPricePeg(sdk.NewDec(2)), - ), - FundModule("perp_ef", sdk.NewCoins(sdk.NewCoin(denoms.NUSD, sdk.NewInt(10)))), - ). - When( - QueryCollateralShouldFail(), - SetCollateral(types.DefaultTestingCollateralNotForProd), - ). - Then( - QueryCollateral(types.DefaultTestingCollateralNotForProd.Subdenom, types.DefaultTestingCollateralNotForProd.Creator), - ), - } - - NewTestSuite(t).WithTestCases(tc...).Run() -} - func TestQueryPositionStore(t *testing.T) { pairs := []asset.Pair{ asset.Registry.Pair(denoms.BTC, denoms.NUSD), @@ -478,3 +453,36 @@ func TestQueryPositionStore(t *testing.T) { NewTestSuite(t).WithTestCases(tc...).Run() } + +func TestQueryCollateral(t *testing.T) { + tc := TestCases{ + TC("state starts as expected with the mock NUSD denomination"). + Given(). + When(). + Then( + QueryCollateral(types.TestingCollateralDenomNUSD), + ), + + TC("expected value returned after collateral denom changes"). + Given(). + When( + SetCollateral(denoms.BTC), + ). + Then( + QueryCollateral(denoms.BTC), + ), + + TC("sanity check: multiple changes"). + Given(). + When( + SetCollateral(denoms.BTC), + SetCollateral(denoms.ETH), + SetCollateral(denoms.SOL), + ). + Then( + QueryCollateral(denoms.SOL), + ), + } + + NewTestSuite(t).WithTestCases(tc...).Run() +} diff --git a/x/perp/v2/keeper/keeper.go b/x/perp/v2/keeper/keeper.go index 70c9ec10f..ec7aa71bd 100644 --- a/x/perp/v2/keeper/keeper.go +++ b/x/perp/v2/keeper/keeper.go @@ -13,9 +13,9 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/NibiruChain/nibiru/x/common" "github.com/NibiruChain/nibiru/x/common/asset" types "github.com/NibiruChain/nibiru/x/perp/v2/types" - tftypes "github.com/NibiruChain/nibiru/x/tokenfactory/types" ) type Keeper struct { @@ -26,6 +26,7 @@ type Keeper struct { AccountKeeper types.AccountKeeper OracleKeeper types.OracleKeeper EpochKeeper types.EpochKeeper + SudoKeeper types.SudoKeeper // Extends the Keeper with admin functions. See admin.go. Admin admin @@ -33,7 +34,7 @@ type Keeper struct { MarketLastVersion collections.Map[asset.Pair, types.MarketLastVersion] Markets collections.Map[collections.Pair[asset.Pair, uint64], types.Market] AMMs collections.Map[collections.Pair[asset.Pair, uint64], types.AMM] - Collateral collections.Item[tftypes.TFDenom] + Collateral collections.Item[string] Positions collections.Map[collections.Pair[collections.Pair[asset.Pair, uint64], sdk.AccAddress], types.Position] ReserveSnapshots collections.Map[collections.Pair[asset.Pair, time.Time], types.ReserveSnapshot] @@ -52,6 +53,7 @@ func NewKeeper( bankKeeper types.BankKeeper, oracleKeeper types.OracleKeeper, epochKeeper types.EpochKeeper, + sudoKeeper types.SudoKeeper, ) Keeper { // Ensure that the module account is set. if moduleAcc := accountKeeper.GetModuleAddress(types.ModuleName); moduleAcc == nil { @@ -65,6 +67,7 @@ func NewKeeper( AccountKeeper: accountKeeper, OracleKeeper: oracleKeeper, EpochKeeper: epochKeeper, + SudoKeeper: sudoKeeper, Markets: collections.NewMap( storeKey, NamespaceMarkets, collections.PairKeyEncoder(asset.PairKeyEncoder, collections.Uint64KeyEncoder), @@ -111,7 +114,7 @@ func NewKeeper( ), Collateral: collections.NewItem( storeKey, NamespaceCollateral, - collections.ProtoValueEncoder[tftypes.TFDenom](cdc), + common.StringValueEncoder, ), } k.Admin = admin{&k} diff --git a/x/perp/v2/keeper/liquidate.go b/x/perp/v2/keeper/liquidate.go index 0783c40dd..25290ec09 100644 --- a/x/perp/v2/keeper/liquidate.go +++ b/x/perp/v2/keeper/liquidate.go @@ -296,8 +296,8 @@ func (k Keeper) executeFullLiquidation( return sdk.Coin{}, sdk.Coin{}, err } - liquidatorfee = sdk.NewCoin(collateral.String(), liquidatorFeeAmount.RoundInt()) - ecosystemFundFee = sdk.NewCoin(collateral.String(), ecosystemFundFeeAmount.RoundInt()) + liquidatorfee = sdk.NewCoin(collateral, liquidatorFeeAmount.RoundInt()) + ecosystemFundFee = sdk.NewCoin(collateral, ecosystemFundFeeAmount.RoundInt()) err = k.distributeLiquidateRewards( ctx, @@ -314,17 +314,17 @@ func (k Keeper) executeFullLiquidation( PositionChangedEvent: types.PositionChangedEvent{ FinalPosition: positionResp.Position, PositionNotional: positionResp.PositionNotional, - TransactionFee: sdk.NewCoin(collateral.String(), sdk.ZeroInt()), // no transaction fee for liquidation + TransactionFee: sdk.NewCoin(collateral, sdk.ZeroInt()), // no transaction fee for liquidation RealizedPnl: positionResp.RealizedPnl, - BadDebt: sdk.NewCoin(collateral.String(), totalBadDebt.RoundInt()), + BadDebt: sdk.NewCoin(collateral, totalBadDebt.RoundInt()), FundingPayment: positionResp.FundingPayment, BlockHeight: ctx.BlockHeight(), MarginToUser: sdk.ZeroInt(), // no margin to user for full liquidation ChangeReason: types.ChangeReason_FullLiquidation, }, LiquidatorAddress: liquidator.String(), - FeeToLiquidator: sdk.NewCoin(collateral.String(), liquidatorFeeAmount.RoundInt()), - FeeToEcosystemFund: sdk.NewCoin(collateral.String(), ecosystemFundFeeAmount.RoundInt()), + FeeToLiquidator: sdk.NewCoin(collateral, liquidatorFeeAmount.RoundInt()), + FeeToEcosystemFund: sdk.NewCoin(collateral, ecosystemFundFeeAmount.RoundInt()), }) return liquidatorfee, ecosystemFundFee, err @@ -379,8 +379,8 @@ func (k Keeper) executePartialLiquidation( } err = k.distributeLiquidateRewards(ctx, market, liquidator, - sdk.NewCoin(collateral.String(), feeToPerpEcosystemFund.RoundInt()), - sdk.NewCoin(collateral.String(), feeToLiquidator.RoundInt()), + sdk.NewCoin(collateral, feeToPerpEcosystemFund.RoundInt()), + sdk.NewCoin(collateral, feeToLiquidator.RoundInt()), ) if err != nil { return sdk.Coin{}, sdk.Coin{}, err @@ -390,17 +390,17 @@ func (k Keeper) executePartialLiquidation( PositionChangedEvent: types.PositionChangedEvent{ FinalPosition: positionResp.Position, PositionNotional: positionResp.PositionNotional, - TransactionFee: sdk.NewCoin(collateral.String(), sdk.ZeroInt()), // no transaction fee for liquidation + TransactionFee: sdk.NewCoin(collateral, sdk.ZeroInt()), // no transaction fee for liquidation RealizedPnl: positionResp.RealizedPnl, - BadDebt: sdk.NewCoin(collateral.String(), sdk.ZeroInt()), // no bad debt for partial liquidation + BadDebt: sdk.NewCoin(collateral, sdk.ZeroInt()), // no bad debt for partial liquidation FundingPayment: positionResp.FundingPayment, BlockHeight: ctx.BlockHeight(), MarginToUser: sdk.ZeroInt(), // no margin to user for partial liquidation ChangeReason: types.ChangeReason_PartialLiquidation, }, LiquidatorAddress: liquidator.String(), - FeeToLiquidator: sdk.NewCoin(collateral.String(), feeToLiquidator.RoundInt()), - FeeToEcosystemFund: sdk.NewCoin(collateral.String(), feeToPerpEcosystemFund.RoundInt()), + FeeToLiquidator: sdk.NewCoin(collateral, feeToLiquidator.RoundInt()), + FeeToEcosystemFund: sdk.NewCoin(collateral, feeToPerpEcosystemFund.RoundInt()), }) return liquidatorFee, ecosystemFundFee, err diff --git a/x/perp/v2/keeper/liquidate_test.go b/x/perp/v2/keeper/liquidate_test.go index c291f6a6c..dc3ec4b6a 100644 --- a/x/perp/v2/keeper/liquidate_test.go +++ b/x/perp/v2/keeper/liquidate_test.go @@ -37,7 +37,7 @@ func TestMultiLiquidate(t *testing.T) { SetBlockTime(startTime), CreateCustomMarket(pairBtcUsdc), InsertPosition(WithTrader(alice), WithPair(pairBtcUsdc), WithSize(sdk.NewDec(10000)), WithMargin(sdk.NewDec(1000)), WithOpenNotional(sdk.NewDec(10400))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 1000))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 1000))), ). When( MoveToNextBlock(), @@ -46,9 +46,9 @@ func TestMultiLiquidate(t *testing.T) { ), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(750)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(125)), - BalanceEqual(liquidator, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(125)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(750)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(125)), + BalanceEqual(liquidator, types.TestingCollateralDenomNUSD, sdk.NewInt(125)), PositionShouldBeEqual(alice, pairBtcUsdc, Position_PositionShouldBeEqualTo( types.Position{ @@ -70,7 +70,7 @@ func TestMultiLiquidate(t *testing.T) { SetBlockTime(startTime), CreateCustomMarket(pairBtcUsdc), InsertPosition(WithTrader(alice), WithPair(pairBtcUsdc), WithSize(sdk.NewDec(10000)), WithMargin(sdk.NewDec(1000)), WithOpenNotional(sdk.NewDec(10600))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 1000))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 1000))), ). When( MoveToNextBlock(), @@ -80,9 +80,9 @@ func TestMultiLiquidate(t *testing.T) { ), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(600)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(150)), - BalanceEqual(liquidator, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(250)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(600)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(150)), + BalanceEqual(liquidator, types.TestingCollateralDenomNUSD, sdk.NewInt(250)), PositionShouldNotExist(alice, pairBtcUsdc, 1), ), @@ -92,7 +92,7 @@ func TestMultiLiquidate(t *testing.T) { SetBlockTime(startTime), CreateCustomMarket(pairBtcUsdc), InsertPosition(WithTrader(alice), WithPair(pairBtcUsdc), WithSize(sdk.NewDec(10000)), WithMargin(sdk.NewDec(1000)), WithOpenNotional(sdk.NewDec(10600))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 1000))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 1000))), ). When( MoveToNextBlock(), @@ -101,9 +101,9 @@ func TestMultiLiquidate(t *testing.T) { ), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(600)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(150)), - BalanceEqual(liquidator, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(250)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(600)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(150)), + BalanceEqual(liquidator, types.TestingCollateralDenomNUSD, sdk.NewInt(250)), PositionShouldNotExist(alice, pairBtcUsdc, 1), ), @@ -113,7 +113,7 @@ func TestMultiLiquidate(t *testing.T) { SetBlockTime(startTime), CreateCustomMarket(pairBtcUsdc), InsertPosition(WithTrader(alice), WithPair(pairBtcUsdc), WithSize(sdk.NewDec(10000)), WithMargin(sdk.NewDec(1000)), WithOpenNotional(sdk.NewDec(10600))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 1000))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 1000))), ). When( MoveToNextBlock(), @@ -123,9 +123,9 @@ func TestMultiLiquidate(t *testing.T) { ), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(600)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(150)), - BalanceEqual(liquidator, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(250)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(600)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(150)), + BalanceEqual(liquidator, types.TestingCollateralDenomNUSD, sdk.NewInt(250)), PositionShouldNotExist(alice, pairBtcUsdc, 1), ), @@ -135,7 +135,7 @@ func TestMultiLiquidate(t *testing.T) { SetBlockTime(startTime), CreateCustomMarket(pairBtcUsdc), InsertPosition(WithTrader(alice), WithPair(pairBtcUsdc), WithSize(sdk.NewDec(10000)), WithMargin(sdk.NewDec(1000)), WithOpenNotional(sdk.NewDec(10600))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 1000))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 1000))), ). When( MoveToNextBlock(), @@ -145,9 +145,9 @@ func TestMultiLiquidate(t *testing.T) { ), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(600)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(150)), - BalanceEqual(liquidator, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(250)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(600)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(150)), + BalanceEqual(liquidator, types.TestingCollateralDenomNUSD, sdk.NewInt(250)), PositionShouldNotExist(alice, pairBtcUsdc, 1), ), @@ -157,8 +157,8 @@ func TestMultiLiquidate(t *testing.T) { SetBlockTime(startTime), CreateCustomMarket(pairBtcUsdc), InsertPosition(WithTrader(alice), WithPair(pairBtcUsdc), WithSize(sdk.NewDec(10000)), WithMargin(sdk.NewDec(1000)), WithOpenNotional(sdk.NewDec(10800))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 1000))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 50))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 1000))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 50))), ). When( MoveToNextBlock(), @@ -167,9 +167,9 @@ func TestMultiLiquidate(t *testing.T) { ), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(800)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), - BalanceEqual(liquidator, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(250)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(800)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.ZeroInt()), + BalanceEqual(liquidator, types.TestingCollateralDenomNUSD, sdk.NewInt(250)), PositionShouldNotExist(alice, pairBtcUsdc, 1), ), @@ -177,9 +177,9 @@ func TestMultiLiquidate(t *testing.T) { Given( SetBlockNumber(1), SetBlockTime(startTime), - CreateCustomMarket(pairBtcUsdc, WithPrepaidBadDebt(sdk.NewInt(50), types.DefaultTestingCollateralNotForProd.String())), + CreateCustomMarket(pairBtcUsdc, WithPrepaidBadDebt(sdk.NewInt(50), types.TestingCollateralDenomNUSD)), InsertPosition(WithTrader(alice), WithPair(pairBtcUsdc), WithSize(sdk.NewDec(10000)), WithMargin(sdk.NewDec(1000)), WithOpenNotional(sdk.NewDec(10800))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 1000))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 1000))), ). When( MoveToNextBlock(), @@ -188,11 +188,11 @@ func TestMultiLiquidate(t *testing.T) { ), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(750)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), - BalanceEqual(liquidator, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(250)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(750)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.ZeroInt()), + BalanceEqual(liquidator, types.TestingCollateralDenomNUSD, sdk.NewInt(250)), PositionShouldNotExist(alice, pairBtcUsdc, 1), - MarketShouldBeEqual(pairBtcUsdc, Market_PrepaidBadDebtShouldBeEqualTo(sdk.ZeroInt(), types.DefaultTestingCollateralNotForProd.String())), + MarketShouldBeEqual(pairBtcUsdc, Market_PrepaidBadDebtShouldBeEqualTo(sdk.ZeroInt(), types.TestingCollateralDenomNUSD)), ), TC("healthy position"). @@ -201,7 +201,7 @@ func TestMultiLiquidate(t *testing.T) { SetBlockTime(startTime), CreateCustomMarket(pairBtcUsdc), InsertPosition(WithTrader(alice), WithPair(pairBtcUsdc), WithSize(sdk.NewDec(100)), WithMargin(sdk.NewDec(10)), WithOpenNotional(sdk.NewDec(100))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 10))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 10))), ). When( MoveToNextBlock(), @@ -210,9 +210,9 @@ func TestMultiLiquidate(t *testing.T) { ), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), - BalanceEqual(liquidator, types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(10)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.ZeroInt()), + BalanceEqual(liquidator, types.TestingCollateralDenomNUSD, sdk.ZeroInt()), PositionShouldBeEqual(alice, pairBtcUsdc, Position_PositionShouldBeEqualTo( types.Position{ @@ -244,7 +244,7 @@ func TestMultiLiquidate(t *testing.T) { InsertPosition(WithTrader(alice), WithPair(pairBtcUsdc), WithSize(sdk.NewDec(10000)), WithMargin(sdk.NewDec(1000)), WithOpenNotional(sdk.NewDec(10400))), // partial InsertPosition(WithTrader(alice), WithPair(pairEthUsdc), WithSize(sdk.NewDec(10000)), WithMargin(sdk.NewDec(1000)), WithOpenNotional(sdk.NewDec(10600))), // full InsertPosition(WithTrader(alice), WithPair(pairAtomUsdc), WithSize(sdk.NewDec(10000)), WithMargin(sdk.NewDec(1000)), WithOpenNotional(sdk.NewDec(10000))), // healthy - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 3000))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 3000))), ). When( MoveToNextBlock(), @@ -257,9 +257,9 @@ func TestMultiLiquidate(t *testing.T) { ), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(2350)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(275)), - BalanceEqual(liquidator, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(375)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(2350)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(275)), + BalanceEqual(liquidator, types.TestingCollateralDenomNUSD, sdk.NewInt(375)), PositionShouldBeEqual(alice, pairBtcUsdc, Position_PositionShouldBeEqualTo( types.Position{ diff --git a/x/perp/v2/keeper/margin.go b/x/perp/v2/keeper/margin.go index 081575cba..64b0ad4cc 100644 --- a/x/perp/v2/keeper/margin.go +++ b/x/perp/v2/keeper/margin.go @@ -38,7 +38,7 @@ func (k Keeper) AddMargin( return nil, fmt.Errorf("%w: %s", types.ErrPairNotFound, pair) } - if marginToAdd.Denom != collateral.String() { + if marginToAdd.Denom != collateral { return nil, fmt.Errorf("invalid margin denom: %s", marginToAdd.Denom) } @@ -78,9 +78,9 @@ func (k Keeper) AddMargin( &types.PositionChangedEvent{ FinalPosition: position, PositionNotional: positionNotional, - TransactionFee: sdk.NewCoin(collateral.String(), sdk.ZeroInt()), // always zero when adding margin - RealizedPnl: sdk.ZeroDec(), // always zero when adding margin - BadDebt: sdk.NewCoin(collateral.String(), sdk.ZeroInt()), // always zero when adding margin + TransactionFee: sdk.NewCoin(collateral, sdk.ZeroInt()), // always zero when adding margin + RealizedPnl: sdk.ZeroDec(), // always zero when adding margin + BadDebt: sdk.NewCoin(collateral, sdk.ZeroInt()), // always zero when adding margin FundingPayment: fundingPayment, BlockHeight: ctx.BlockHeight(), MarginToUser: marginToAdd.Amount.Neg(), @@ -133,7 +133,7 @@ func (k Keeper) RemoveMargin( if err != nil { return nil, fmt.Errorf("%w: %s", types.ErrPairNotFound, pair) } - if marginToRemove.Denom != collateral.String() { + if marginToRemove.Denom != collateral { return nil, fmt.Errorf("invalid margin denom: %s", marginToRemove.Denom) } @@ -188,9 +188,9 @@ func (k Keeper) RemoveMargin( &types.PositionChangedEvent{ FinalPosition: position, PositionNotional: spotNotional, - TransactionFee: sdk.NewCoin(collateral.String(), sdk.ZeroInt()), // always zero when removing margin - RealizedPnl: sdk.ZeroDec(), // always zero when removing margin - BadDebt: sdk.NewCoin(collateral.String(), sdk.ZeroInt()), // always zero when removing margin + TransactionFee: sdk.NewCoin(collateral, sdk.ZeroInt()), // always zero when removing margin + RealizedPnl: sdk.ZeroDec(), // always zero when removing margin + BadDebt: sdk.NewCoin(collateral, sdk.ZeroInt()), // always zero when removing margin FundingPayment: fundingPayment, BlockHeight: ctx.BlockHeight(), MarginToUser: marginToRemove.Amount, diff --git a/x/perp/v2/keeper/margin_test.go b/x/perp/v2/keeper/margin_test.go index a6d62ec42..db99d8e65 100644 --- a/x/perp/v2/keeper/margin_test.go +++ b/x/perp/v2/keeper/margin_test.go @@ -30,7 +30,7 @@ func TestAddMargin(t *testing.T) { CreateCustomMarket(pairBtcUsdc, WithEnabled(true)), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(2020)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(2020)))), MarketOrder(alice, pairBtcUsdc, types.Direction_LONG, sdk.NewInt(1000), sdk.NewDec(10), sdk.ZeroDec()), ). When( @@ -61,18 +61,18 @@ func TestAddMargin(t *testing.T) { }, PositionNotional: sdk.NewDec(10_000), RealizedPnl: sdk.ZeroDec(), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.ZeroDec(), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), BlockHeight: 2, MarginToUser: sdk.NewInt(-1_000), ChangeReason: types.ChangeReason_AddMargin, ExchangedNotional: sdk.MustNewDecFromStr("0"), ExchangedSize: sdk.MustNewDecFromStr("0"), }), - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10)), - ModuleBalanceEqual(types.FeePoolModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10)), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.ZeroInt()), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(10)), + ModuleBalanceEqual(types.FeePoolModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(10)), ), TC("existing short position, add margin"). @@ -80,7 +80,7 @@ func TestAddMargin(t *testing.T) { CreateCustomMarket(pairBtcUsdc, WithEnabled(true)), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(2020)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(2020)))), MarketOrder(alice, pairBtcUsdc, types.Direction_SHORT, sdk.NewInt(1000), sdk.NewDec(10), sdk.ZeroDec()), ). When( @@ -111,18 +111,18 @@ func TestAddMargin(t *testing.T) { }, PositionNotional: sdk.NewDec(10_000), RealizedPnl: sdk.ZeroDec(), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.ZeroDec(), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), BlockHeight: 2, MarginToUser: sdk.NewInt(-1000), ChangeReason: types.ChangeReason_AddMargin, ExchangedNotional: sdk.MustNewDecFromStr("0"), ExchangedSize: sdk.MustNewDecFromStr("0"), }), - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10)), - ModuleBalanceEqual(types.FeePoolModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10)), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.ZeroInt()), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(10)), + ModuleBalanceEqual(types.FeePoolModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(10)), ), TC("Testing fails"). @@ -132,7 +132,7 @@ func TestAddMargin(t *testing.T) { SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1020)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1020)))), MarketOrder(alice, pairBtcUsdc, types.Direction_LONG, sdk.NewInt(1000), sdk.NewDec(10), sdk.ZeroDec()), ). When( @@ -162,7 +162,7 @@ func TestRemoveMargin(t *testing.T) { CreateCustomMarket(pairBtcUsdc, WithEnabled(true)), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1002)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1002)))), MarketOrder(alice, pairBtcUsdc, types.Direction_LONG, sdk.NewInt(1000), sdk.OneDec(), sdk.ZeroDec()), ). When( @@ -191,18 +191,18 @@ func TestRemoveMargin(t *testing.T) { }, PositionNotional: sdk.NewDec(1000), RealizedPnl: sdk.ZeroDec(), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.ZeroDec(), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), BlockHeight: 2, MarginToUser: sdk.NewInt(500), ChangeReason: types.ChangeReason_RemoveMargin, ExchangedNotional: sdk.MustNewDecFromStr("0"), ExchangedSize: sdk.MustNewDecFromStr("0"), }), - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(500)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.OneInt()), - ModuleBalanceEqual(types.FeePoolModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.OneInt()), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.NewInt(500)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.OneInt()), + ModuleBalanceEqual(types.FeePoolModuleAccount, types.TestingCollateralDenomNUSD, sdk.OneInt()), ), TC("existing long position, remove almost all margin fails"). @@ -210,7 +210,7 @@ func TestRemoveMargin(t *testing.T) { CreateCustomMarket(pairBtcUsdc, WithEnabled(true)), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1002)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1002)))), MarketOrder(alice, pairBtcUsdc, types.Direction_LONG, sdk.NewInt(1000), sdk.OneDec(), sdk.ZeroDec()), MoveToNextBlock(), ). @@ -227,9 +227,9 @@ func TestRemoveMargin(t *testing.T) { LatestCumulativePremiumFraction: sdk.ZeroDec(), LastUpdatedBlockNumber: 1, })), - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.OneInt()), - ModuleBalanceEqual(types.FeePoolModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.OneInt()), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.ZeroInt()), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.OneInt()), + ModuleBalanceEqual(types.FeePoolModuleAccount, types.TestingCollateralDenomNUSD, sdk.OneInt()), ), TC("existing short position, remove margin"). @@ -237,7 +237,7 @@ func TestRemoveMargin(t *testing.T) { CreateCustomMarket(pairBtcUsdc, WithEnabled(true)), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1002)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1002)))), MarketOrder(alice, pairBtcUsdc, types.Direction_SHORT, sdk.NewInt(1000), sdk.OneDec(), sdk.ZeroDec()), ). When( @@ -266,18 +266,18 @@ func TestRemoveMargin(t *testing.T) { }, PositionNotional: sdk.NewDec(1000), RealizedPnl: sdk.ZeroDec(), - BadDebt: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + BadDebt: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), FundingPayment: sdk.ZeroDec(), - TransactionFee: sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + TransactionFee: sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.ZeroInt()), BlockHeight: 2, MarginToUser: sdk.NewInt(500), ChangeReason: types.ChangeReason_RemoveMargin, ExchangedNotional: sdk.MustNewDecFromStr("0"), ExchangedSize: sdk.MustNewDecFromStr("0"), }), - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(500)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.OneInt()), - ModuleBalanceEqual(types.FeePoolModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.OneInt()), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.NewInt(500)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.OneInt()), + ModuleBalanceEqual(types.FeePoolModuleAccount, types.TestingCollateralDenomNUSD, sdk.OneInt()), ), TC("existing short position, remove almost all margin fails"). @@ -285,7 +285,7 @@ func TestRemoveMargin(t *testing.T) { CreateCustomMarket(pairBtcUsdc, WithEnabled(true)), SetBlockNumber(1), SetBlockTime(startBlockTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1002)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1002)))), MarketOrder(alice, pairBtcUsdc, types.Direction_SHORT, sdk.NewInt(1000), sdk.OneDec(), sdk.ZeroDec()), MoveToNextBlock(), ). @@ -302,9 +302,9 @@ func TestRemoveMargin(t *testing.T) { LatestCumulativePremiumFraction: sdk.ZeroDec(), LastUpdatedBlockNumber: 1, })), - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.OneInt()), - ModuleBalanceEqual(types.FeePoolModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.OneInt()), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.ZeroInt()), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.OneInt()), + ModuleBalanceEqual(types.FeePoolModuleAccount, types.TestingCollateralDenomNUSD, sdk.OneInt()), ), } diff --git a/x/perp/v2/keeper/msg_server.go b/x/perp/v2/keeper/msg_server.go index efa5a38f3..c8ed657bd 100644 --- a/x/perp/v2/keeper/msg_server.go +++ b/x/perp/v2/keeper/msg_server.go @@ -5,6 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/NibiruChain/nibiru/x/common" types "github.com/NibiruChain/nibiru/x/perp/v2/types" ) @@ -138,3 +139,21 @@ func (m msgServer) DonateToEcosystemFund(ctx context.Context, msg *types.MsgDona return &types.MsgDonateToEcosystemFundResponse{}, nil } + +// ChangeCollateralDenom: Updates the collateral denom. A denom is valid if it is +// possible to make an sdk.Coin using it. [Admin] Only callable by sudoers. +func (m msgServer) ChangeCollateralDenom( + goCtx context.Context, txMsg *types.MsgChangeCollateralDenom, +) (resp *types.MsgChangeCollateralDenomResponse, err error) { + if txMsg == nil { + return resp, common.ErrNilMsg() + } + if err := txMsg.ValidateBasic(); err != nil { + return resp, err + } + + ctx := sdk.UnwrapSDKContext(goCtx) + err = m.k.Admin.ChangeCollateralDenom(ctx, txMsg.NewDenom, txMsg.GetSigners()[0]) + + return &types.MsgChangeCollateralDenomResponse{}, err +} diff --git a/x/perp/v2/keeper/msg_server_test.go b/x/perp/v2/keeper/msg_server_test.go index aba756d9b..8b135765a 100644 --- a/x/perp/v2/keeper/msg_server_test.go +++ b/x/perp/v2/keeper/msg_server_test.go @@ -27,7 +27,7 @@ func TestMsgServerMarketOrder(t *testing.T) { TC("open long position"). Given( CreateCustomMarket(pair, WithEnabled(true)), - FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 100))), + FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 100))), ). When( MsgServerMarketOrder(alice, pair, types.Direction_LONG, sdk.OneInt(), sdk.OneDec(), sdk.ZeroInt()), @@ -44,13 +44,13 @@ func TestMsgServerMarketOrder(t *testing.T) { LastUpdatedBlockNumber: 1, }), ), - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(99)), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.NewInt(99)), ), TC("open short position"). Given( CreateCustomMarket(pair, WithEnabled(true)), - FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 100))), + FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 100))), ). When( MsgServerMarketOrder(alice, pair, types.Direction_SHORT, sdk.OneInt(), sdk.OneDec(), sdk.ZeroInt()), @@ -67,7 +67,7 @@ func TestMsgServerMarketOrder(t *testing.T) { LastUpdatedBlockNumber: 1, }), ), - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(99)), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.NewInt(99)), ), } @@ -82,7 +82,7 @@ func TestMsgServerClosePosition(t *testing.T) { TC("close long position"). Given( CreateCustomMarket(pair, WithEnabled(true)), - FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 100))), + FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 100))), MarketOrder(alice, pair, types.Direction_LONG, sdk.OneInt(), sdk.OneDec(), sdk.ZeroDec()), MoveToNextBlock(), ). @@ -91,13 +91,13 @@ func TestMsgServerClosePosition(t *testing.T) { ). Then( PositionShouldNotExist(alice, pair, 1), - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(100)), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.NewInt(100)), ), TC("close short position"). Given( CreateCustomMarket(pair, WithEnabled(true)), - FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 100))), + FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 100))), MarketOrder(alice, pair, types.Direction_LONG, sdk.OneInt(), sdk.OneDec(), sdk.ZeroDec()), MoveToNextBlock(), ). @@ -106,7 +106,7 @@ func TestMsgServerClosePosition(t *testing.T) { ). Then( PositionShouldNotExist(alice, pair, 1), - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(100)), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.NewInt(100)), ), } @@ -121,7 +121,7 @@ func TestMsgServerAddMargin(t *testing.T) { TC("add margin"). Given( CreateCustomMarket(pair, WithEnabled(true)), - FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 100))), + FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 100))), MarketOrder(alice, pair, types.Direction_LONG, sdk.OneInt(), sdk.OneDec(), sdk.ZeroDec()), MoveToNextBlock(), ). @@ -140,12 +140,12 @@ func TestMsgServerAddMargin(t *testing.T) { LastUpdatedBlockNumber: 2, }), ), - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(98)), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.NewInt(98)), ), TC("partial close"). Given( CreateCustomMarket(pair, WithEnabled(true)), - FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 100))), + FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 100))), MarketOrder(alice, pair, types.Direction_LONG, sdk.OneInt(), sdk.OneDec(), sdk.ZeroDec()), MoveToNextBlock(), ). @@ -164,7 +164,7 @@ func TestMsgServerAddMargin(t *testing.T) { LastUpdatedBlockNumber: 2, }), ), - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(98)), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.NewInt(98)), ), } @@ -179,7 +179,7 @@ func TestMsgServerRemoveMargin(t *testing.T) { TC("add margin"). Given( CreateCustomMarket(pair, WithEnabled(true)), - FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 100))), + FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 100))), MarketOrder(alice, pair, types.Direction_LONG, sdk.NewInt(2), sdk.OneDec(), sdk.ZeroDec()), MoveToNextBlock(), ). @@ -198,7 +198,7 @@ func TestMsgServerRemoveMargin(t *testing.T) { LastUpdatedBlockNumber: 2, }), ), - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(99)), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.NewInt(99)), ), } @@ -211,15 +211,15 @@ func TestMsgServerDonateToPerpEf(t *testing.T) { tests := TestCases{ TC("success"). Given( - SetCollateral(types.DefaultTestingCollateralNotForProd), - FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 100))), + SetCollateral(types.TestingCollateralDenomNUSD), + FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 100))), ). When( MsgServerDonateToPerpEf(alice, sdk.NewInt(50)), ). Then( - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(50)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(50)), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.NewInt(50)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(50)), ), } @@ -239,7 +239,7 @@ func TestMsgServerMultiLiquidate(t *testing.T) { SetBlockTime(startTime), CreateCustomMarket(pairBtcUsdc, WithEnabled(true)), InsertPosition(WithTrader(alice), WithPair(pairBtcUsdc), WithSize(sdk.NewDec(10000)), WithMargin(sdk.NewDec(1000)), WithOpenNotional(sdk.NewDec(10400))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 1000))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 1000))), ). When( MoveToNextBlock(), @@ -248,9 +248,9 @@ func TestMsgServerMultiLiquidate(t *testing.T) { ), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(750)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(125)), - BalanceEqual(liquidator, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(125)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(750)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(125)), + BalanceEqual(liquidator, types.TestingCollateralDenomNUSD, sdk.NewInt(125)), PositionShouldBeEqual(alice, pairBtcUsdc, Position_PositionShouldBeEqualTo( types.Position{ @@ -272,7 +272,7 @@ func TestMsgServerMultiLiquidate(t *testing.T) { SetBlockTime(startTime), CreateCustomMarket(pairBtcUsdc, WithEnabled(true)), InsertPosition(WithTrader(alice), WithPair(pairBtcUsdc), WithSize(sdk.NewDec(10000)), WithMargin(sdk.NewDec(1000)), WithOpenNotional(sdk.NewDec(10600))), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.DefaultTestingCollateralNotForProd.String(), 1000))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 1000))), ). When( MoveToNextBlock(), @@ -281,9 +281,9 @@ func TestMsgServerMultiLiquidate(t *testing.T) { ), ). Then( - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(600)), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(150)), - BalanceEqual(liquidator, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(250)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(600)), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.NewInt(150)), + BalanceEqual(liquidator, types.TestingCollateralDenomNUSD, sdk.NewInt(250)), PositionShouldNotExist(alice, pairBtcUsdc, 1), ), } @@ -295,10 +295,12 @@ func TestFailMsgServer(t *testing.T) { pair := asset.Registry.Pair(denoms.BTC, denoms.NUSD) app, ctx := testapp.NewNibiruTestAppAndContext() + sender := testutil.AccAddress().String() + msgServer := keeper.NewMsgServerImpl(app.PerpKeeperV2) _, err := msgServer.MarketOrder(ctx, &types.MsgMarketOrder{ - Sender: "cosmos1zaavvzxez0elundtn32qnk9lkm8kmcszzsv80v", + Sender: sender, Pair: pair, Side: types.Direction_LONG, QuoteAssetAmount: sdk.OneInt(), @@ -308,31 +310,31 @@ func TestFailMsgServer(t *testing.T) { require.ErrorContains(t, err, "pair ubtc:unusd not found") _, err = msgServer.ClosePosition(ctx, &types.MsgClosePosition{ - Sender: "cosmos1zaavvzxez0elundtn32qnk9lkm8kmcszzsv80v", + Sender: sender, Pair: pair, }) require.ErrorContains(t, err, types.ErrPairNotFound.Error()) _, err = msgServer.PartialClose(ctx, &types.MsgPartialClose{ - Sender: "cosmos1zaavvzxez0elundtn32qnk9lkm8kmcszzsv80v", + Sender: sender, Pair: pair, Size_: sdk.OneDec(), }) require.ErrorContains(t, err, types.ErrPairNotFound.Error()) _, err = msgServer.MultiLiquidate(ctx, &types.MsgMultiLiquidate{ - Sender: "cosmos1zaavvzxez0elundtn32qnk9lkm8kmcszzsv80v", + Sender: sender, Liquidations: []*types.MsgMultiLiquidate_Liquidation{ { Pair: pair, - Trader: "cosmos1zaavvzxez0elundtn32qnk9lkm8kmcszzsv80v", + Trader: sender, }, }, }) require.ErrorContains(t, err, types.ErrPairNotFound.Error()) _, err = msgServer.DonateToEcosystemFund(ctx, &types.MsgDonateToEcosystemFund{ - Sender: "cosmos1zaavvzxez0elundtn32qnk9lkm8kmcszzsv80v", + Sender: sender, Donation: sdk.NewCoin("luna", sdk.OneInt()), }) require.ErrorContains(t, err, "spendable balance is smaller than 1luna") diff --git a/x/perp/v2/keeper/settlement_test.go b/x/perp/v2/keeper/settlement_test.go index d57d13cab..2da09148d 100644 --- a/x/perp/v2/keeper/settlement_test.go +++ b/x/perp/v2/keeper/settlement_test.go @@ -33,7 +33,7 @@ func TestSettlePosition(t *testing.T) { ), SetBlockNumber(1), SetBlockTime(startTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10_200)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10_200)))), MarketOrder( alice, pairBtcUsdc, @@ -58,8 +58,8 @@ func TestSettlePosition(t *testing.T) { ), SetBlockNumber(1), SetBlockTime(startTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(104)))), // need 4 because we need to pay for the close position fee - FundAccount(bob, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1_020)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(104)))), // need 4 because we need to pay for the close position fee + FundAccount(bob, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1_020)))), MarketOrder( alice, pairBtcUsdc, @@ -114,8 +114,8 @@ func TestSettlePosition(t *testing.T) { PositionShouldNotExist(alice, pairBtcUsdc, 1), PositionShouldNotExist(bob, pairBtcUsdc, 1), SetBlockNumber(2), - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(0)), - BalanceEqual(bob, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1101-20)), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.NewInt(0)), + BalanceEqual(bob, types.TestingCollateralDenomNUSD, sdk.NewInt(1101-20)), ), TC("Error: can't settle on enabled market").When( @@ -127,7 +127,7 @@ func TestSettlePosition(t *testing.T) { ), SetBlockNumber(1), SetBlockTime(startTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(10_200)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(10_200)))), MarketOrder( alice, pairBtcUsdc, @@ -150,7 +150,7 @@ func TestSettlePosition(t *testing.T) { ), SetBlockNumber(1), SetBlockTime(startTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(20_400)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(20_400)))), MarketOrder( alice, pairBtcUsdc, @@ -196,7 +196,7 @@ func TestSettlePosition(t *testing.T) { ), SetBlockNumber(1), SetBlockTime(startTime), - FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(20_400)))), + FundAccount(alice, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(20_400)))), MarketOrder( alice, pairBtcUsdc, diff --git a/x/perp/v2/keeper/withdraw.go b/x/perp/v2/keeper/withdraw.go index c9fc5c82a..f39f4ab71 100644 --- a/x/perp/v2/keeper/withdraw.go +++ b/x/perp/v2/keeper/withdraw.go @@ -48,7 +48,7 @@ func (k Keeper) WithdrawFromVault( vaultQuoteBalance := k.BankKeeper.GetBalance( ctx, k.AccountKeeper.GetModuleAddress(types.VaultModuleAccount), - collateral.String(), + collateral, ) if vaultQuoteBalance.Amount.LT(amountToWithdraw) { // if withdraw amount is larger than entire balance of vault @@ -65,7 +65,7 @@ func (k Keeper) WithdrawFromVault( types.PerpEFModuleAccount, types.VaultModuleAccount, sdk.NewCoins( - sdk.NewCoin(collateral.String(), shortage), + sdk.NewCoin(collateral, shortage), ), ); err != nil { return err @@ -78,7 +78,7 @@ func (k Keeper) WithdrawFromVault( /* from */ types.VaultModuleAccount, /* to */ receiver, sdk.NewCoins( - sdk.NewCoin(collateral.String(), amountToWithdraw), + sdk.NewCoin(collateral, amountToWithdraw), ), ) } @@ -129,7 +129,7 @@ func (k Keeper) realizeBadDebt(ctx sdk.Context, market types.Market, badDebtToRe /*to=*/ types.VaultModuleAccount, sdk.NewCoins( sdk.NewCoin( - collateral.String(), + collateral, badDebtToRealize.Sub(market.PrepaidBadDebt.Amount), ), ), diff --git a/x/perp/v2/keeper/withdraw_test.go b/x/perp/v2/keeper/withdraw_test.go index f89404d72..5415c6b5c 100644 --- a/x/perp/v2/keeper/withdraw_test.go +++ b/x/perp/v2/keeper/withdraw_test.go @@ -27,15 +27,15 @@ func TestWithdrawFromVault(t *testing.T) { SetBlockNumber(1), SetBlockTime(startBlockTime), CreateCustomMarket(pairBtcUsdc), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1000)))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1000)))), ). When( WithdrawFromVault(pairBtcUsdc, alice, sdk.NewInt(1000)), ). Then( - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1000)), - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), - MarketShouldBeEqual(pairBtcUsdc, Market_PrepaidBadDebtShouldBeEqualTo(sdk.ZeroInt(), types.DefaultTestingCollateralNotForProd.String())), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.NewInt(1000)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.ZeroInt()), + MarketShouldBeEqual(pairBtcUsdc, Market_PrepaidBadDebtShouldBeEqualTo(sdk.ZeroInt(), types.TestingCollateralDenomNUSD)), ), TC("successful withdraw, some bad debt"). @@ -43,17 +43,17 @@ func TestWithdrawFromVault(t *testing.T) { SetBlockNumber(1), SetBlockTime(startBlockTime), CreateCustomMarket(pairBtcUsdc), - FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(500)))), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(500)))), + FundModule(types.VaultModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(500)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(500)))), ). When( WithdrawFromVault(pairBtcUsdc, alice, sdk.NewInt(1000)), ). Then( - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1000)), - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), - MarketShouldBeEqual(pairBtcUsdc, Market_PrepaidBadDebtShouldBeEqualTo(sdk.NewInt(500), types.DefaultTestingCollateralNotForProd.String())), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.NewInt(1000)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.ZeroInt()), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.ZeroInt()), + MarketShouldBeEqual(pairBtcUsdc, Market_PrepaidBadDebtShouldBeEqualTo(sdk.NewInt(500), types.TestingCollateralDenomNUSD)), ), TC("successful withdraw, all bad debt"). @@ -61,33 +61,33 @@ func TestWithdrawFromVault(t *testing.T) { SetBlockNumber(1), SetBlockTime(startBlockTime), CreateCustomMarket(pairBtcUsdc), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1000)))), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1000)))), ). When( WithdrawFromVault(pairBtcUsdc, alice, sdk.NewInt(1000)), ). Then( - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1000)), - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), - MarketShouldBeEqual(pairBtcUsdc, Market_PrepaidBadDebtShouldBeEqualTo(sdk.NewInt(1000), types.DefaultTestingCollateralNotForProd.String())), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.NewInt(1000)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.ZeroInt()), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.ZeroInt()), + MarketShouldBeEqual(pairBtcUsdc, Market_PrepaidBadDebtShouldBeEqualTo(sdk.NewInt(1000), types.TestingCollateralDenomNUSD)), ), TC("successful withdraw, existing bad debt"). Given( SetBlockNumber(1), SetBlockTime(startBlockTime), - CreateCustomMarket(pairBtcUsdc, WithPrepaidBadDebt(sdk.NewInt(1000), types.DefaultTestingCollateralNotForProd.String())), - FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1000)))), + CreateCustomMarket(pairBtcUsdc, WithPrepaidBadDebt(sdk.NewInt(1000), types.TestingCollateralDenomNUSD)), + FundModule(types.PerpEFModuleAccount, sdk.NewCoins(sdk.NewCoin(types.TestingCollateralDenomNUSD, sdk.NewInt(1000)))), ). When( WithdrawFromVault(pairBtcUsdc, alice, sdk.NewInt(1000)), ). Then( - BalanceEqual(alice, types.DefaultTestingCollateralNotForProd.String(), sdk.NewInt(1000)), - ModuleBalanceEqual(types.VaultModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), - ModuleBalanceEqual(types.PerpEFModuleAccount, types.DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), - MarketShouldBeEqual(pairBtcUsdc, Market_PrepaidBadDebtShouldBeEqualTo(sdk.NewInt(2000), types.DefaultTestingCollateralNotForProd.String())), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.NewInt(1000)), + ModuleBalanceEqual(types.VaultModuleAccount, types.TestingCollateralDenomNUSD, sdk.ZeroInt()), + ModuleBalanceEqual(types.PerpEFModuleAccount, types.TestingCollateralDenomNUSD, sdk.ZeroInt()), + MarketShouldBeEqual(pairBtcUsdc, Market_PrepaidBadDebtShouldBeEqualTo(sdk.NewInt(2000), types.TestingCollateralDenomNUSD)), ), } diff --git a/x/perp/v2/module/genesis.go b/x/perp/v2/module/genesis.go index 0f09e50e3..b22b5e935 100644 --- a/x/perp/v2/module/genesis.go +++ b/x/perp/v2/module/genesis.go @@ -71,8 +71,8 @@ func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) ) } - if genState.CollateralCreator != "" { - err := k.Admin.UpdateCollateral(ctx, genState.CollateralSubdenom, genState.CollateralCreator) + if genState.CollateralDenom != "" { + err := k.Admin.UnsafeChangeCollateralDenom(ctx, genState.CollateralDenom) if err != nil { panic(err) } @@ -144,8 +144,8 @@ func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { collateral, err := k.Collateral.Get(ctx) if err != nil { - genesis.CollateralCreator = collateral.Creator - genesis.CollateralSubdenom = collateral.Subdenom + panic(err) } + genesis.CollateralDenom = collateral return genesis } diff --git a/x/perp/v2/module/genesis_test.go b/x/perp/v2/module/genesis_test.go index c8a1a261a..08425f5a2 100644 --- a/x/perp/v2/module/genesis_test.go +++ b/x/perp/v2/module/genesis_test.go @@ -11,6 +11,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" + "github.com/NibiruChain/nibiru/x/common" "github.com/NibiruChain/nibiru/x/common/asset" "github.com/NibiruChain/nibiru/x/common/denoms" "github.com/NibiruChain/nibiru/x/common/testutil" @@ -18,6 +19,7 @@ import ( "github.com/NibiruChain/nibiru/x/common/testutil/testapp" perp "github.com/NibiruChain/nibiru/x/perp/v2/module" types "github.com/NibiruChain/nibiru/x/perp/v2/types" + sudotypes "github.com/NibiruChain/nibiru/x/sudo/types" ) type TestCase struct { @@ -25,7 +27,12 @@ type TestCase struct { positions []types.Position } +func init() { + testapp.EnsureNibiruPrefix() +} + func TestGenesis(t *testing.T) { + testapp.EnsureNibiruPrefix() testCases := []TestCase{ { name: "empty positions genesis", @@ -61,14 +68,31 @@ func TestGenesis(t *testing.T) { } } +func PerpSudoers() sudotypes.Sudoers { + _, addrs := testutil.PrivKeyAddressPairs(2) + return sudotypes.Sudoers{ + Root: addrs[0].String(), + Contracts: []string{addrs[1].String()}, + } +} + func RunTestGenesis(t *testing.T, tc TestCase) { + testapp.EnsureNibiruPrefix() app, ctxUncached := testapp.NewNibiruTestAppAndContext() ctx, _ := ctxUncached.CacheContext() pair := asset.Registry.Pair(denoms.BTC, denoms.NUSD) + // Initialize sudo state + nibiruTeam := common.NibiruTeam + sudoers := PerpSudoers() + sudoersRoot := sdk.MustAccAddressFromBech32(nibiruTeam) + sudoers.Root = sudoersRoot.String() + app.SudoKeeper.Sudoers.Set(ctx, sudoers) + // create some params - require.NoError(t, app.PerpKeeperV2.Admin.UpdateCollateral(ctx, "unusd", types.DefaultTestingCollateralNotForProd.Creator)) + require.NoError(t, app.PerpKeeperV2.Admin.ChangeCollateralDenom( + ctx, "unusd", sudoersRoot)) app.PerpKeeperV2.SaveMarket(ctx, *mock.TestMarket()) app.PerpKeeperV2.MarketLastVersion.Insert(ctx, pair, types.MarketLastVersion{Version: 1}) app.PerpKeeperV2.SaveAMM(ctx, *mock.TestAMMDefault()) @@ -119,8 +143,7 @@ func RunTestGenesis(t *testing.T, tc TestCase) { require.Equal(t, genState.CustomDiscounts, genStateAfterInit.CustomDiscounts) require.Equal(t, genState.GlobalDiscount, genStateAfterInit.GlobalDiscount) require.Equal(t, genState.TraderVolumes, genStateAfterInit.TraderVolumes) - require.Equal(t, genState.CollateralCreator, genStateAfterInit.CollateralCreator) - require.Equal(t, genState.CollateralSubdenom, genStateAfterInit.CollateralSubdenom) + require.Equal(t, genState.CollateralDenom, genStateAfterInit.CollateralDenom) } func TestNewAppModuleBasic(t *testing.T) { @@ -160,5 +183,5 @@ func TestNewAppModuleBasic(t *testing.T) { require.Len(t, cmds.Commands(), 8) cmds = appModule.GetQueryCmd() - require.Len(t, cmds.Commands(), 5) + require.Len(t, cmds.Commands(), 4) } diff --git a/x/perp/v2/module/module.go b/x/perp/v2/module/module.go index 12195ccca..94027376a 100644 --- a/x/perp/v2/module/module.go +++ b/x/perp/v2/module/module.go @@ -78,12 +78,12 @@ func (AppModuleBasic) RegisterGRPCGatewayRoutes( // GetTxCmd returns the capability module's root tx command. func (a AppModuleBasic) GetTxCmd() *cobra.Command { - return cli.GetTxCmd() + return cli.NewTxCmd() } // GetQueryCmd returns the capability module's root query command. func (AppModuleBasic) GetQueryCmd() *cobra.Command { - return cli.GetQueryCmd() + return cli.NewQueryCmd() } // ---------------------------------------------------------------------------- diff --git a/x/perp/v2/types/codec.go b/x/perp/v2/types/codec.go index 4a77025b1..b35212a01 100644 --- a/x/perp/v2/types/codec.go +++ b/x/perp/v2/types/codec.go @@ -15,6 +15,7 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&MsgPartialClose{}, "perpv2/partial_close", nil) cdc.RegisterConcrete(&MsgDonateToEcosystemFund{}, "perpv2/donate_to_ef", nil) cdc.RegisterConcrete(&MsgMultiLiquidate{}, "perpv2/multi_liquidate", nil) + cdc.RegisterConcrete(&MsgChangeCollateralDenom{}, "perpv2/change_collateral_denom", nil) } func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { @@ -27,6 +28,7 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { &MsgClosePosition{}, &MsgPartialClose{}, &MsgMultiLiquidate{}, + &MsgChangeCollateralDenom{}, ) msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) diff --git a/x/perp/v2/types/collateral.go b/x/perp/v2/types/collateral.go index 7c719b289..8b6eb3296 100644 --- a/x/perp/v2/types/collateral.go +++ b/x/perp/v2/types/collateral.go @@ -1,20 +1,11 @@ package types import ( - sdkerrors "cosmossdk.io/errors" - tftypes "github.com/NibiruChain/nibiru/x/tokenfactory/types" ) -// Errors -var ErrInvalidCollateral = sdkerrors.Register("collateral", 1, "invalid token factory") - -// Default collateral used for testing only. -var DefaultTestingCollateralNotForProd = tftypes.TFDenom{ - Creator: "cosmos15u3dt79t6sxxa3x3kpkhzsy56edaa5a66wvt3kxmukqjz2sx0hesh45zsv", - Subdenom: "unusd", -} -var NibiTestingCollateralNotForProd = tftypes.TFDenom{ +// TestingCollateralDenomNUSD: For testing only +var TestingCollateralDenomNUSD string = tftypes.TFDenom{ Creator: "nibi14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9ssa9gcs", Subdenom: "unusd", -} +}.String() diff --git a/x/perp/v2/types/errors.go b/x/perp/v2/types/errors.go index 22e80e789..4c49842fc 100644 --- a/x/perp/v2/types/errors.go +++ b/x/perp/v2/types/errors.go @@ -48,4 +48,5 @@ var ( ErrSettlementPositionMarketEnabled = sdkerrors.Register(ModuleName, 32, "market is enabled, you can only settle position on disabled market") ErrCollateralTokenFactoryDenomNotSet = sdkerrors.Register(ModuleName, 36, "no collateral denom set for the perp keeper") + ErrInvalidCollateral = sdkerrors.Register(ModuleName, 37, "invalid collateral denom") ) diff --git a/x/perp/v2/types/expected_keepers.go b/x/perp/v2/types/expected_keepers.go index 19aa6b590..38df68b35 100644 --- a/x/perp/v2/types/expected_keepers.go +++ b/x/perp/v2/types/expected_keepers.go @@ -48,3 +48,10 @@ type EpochKeeper interface { // GetEpochInfo returns epoch info by identifier. GetEpochInfo(ctx sdk.Context, identifier string) (types.EpochInfo, error) } + +type SudoKeeper interface { + // CheckPermissions Checks if a contract is contained within the set of sudo + // contracts defined in the x/sudo module. These smart contracts are able to + // execute certain permissioned functions. + CheckPermissions(contract sdk.AccAddress, ctx sdk.Context) error +} diff --git a/x/perp/v2/types/genesis.go b/x/perp/v2/types/genesis.go index f48bee5c2..6ad3e75e6 100644 --- a/x/perp/v2/types/genesis.go +++ b/x/perp/v2/types/genesis.go @@ -60,7 +60,7 @@ func DefaultMarket(pair asset.Pair) Market { FundingRateEpochId: epochstypes.ThirtyMinuteEpochID, MaxFundingRate: sdk.NewDec(1), TwapLookbackWindow: time.Minute * 30, - PrepaidBadDebt: sdk.NewCoin(DefaultTestingCollateralNotForProd.String(), sdk.ZeroInt()), + PrepaidBadDebt: sdk.NewCoin(TestingCollateralDenomNUSD, sdk.ZeroInt()), MaintenanceMarginRatio: sdk.MustNewDecFromStr("0.0625"), MaxLeverage: sdk.NewDec(10), } diff --git a/x/perp/v2/types/genesis.pb.go b/x/perp/v2/types/genesis.pb.go index 036001cf1..b46ab116e 100644 --- a/x/perp/v2/types/genesis.pb.go +++ b/x/perp/v2/types/genesis.pb.go @@ -36,9 +36,8 @@ type GenesisState struct { Positions []GenesisPosition `protobuf:"bytes,4,rep,name=positions,proto3" json:"positions"` ReserveSnapshots []ReserveSnapshot `protobuf:"bytes,5,rep,name=reserve_snapshots,json=reserveSnapshots,proto3" json:"reserve_snapshots"` DnrEpoch uint64 `protobuf:"varint,6,opt,name=dnr_epoch,json=dnrEpoch,proto3" json:"dnr_epoch,omitempty"` - // For testing purpose, we allow the collateral to be set at genesis - CollateralCreator string `protobuf:"bytes,11,opt,name=collateral_creator,json=collateralCreator,proto3" json:"collateral_creator,omitempty"` - CollateralSubdenom string `protobuf:"bytes,12,opt,name=collateral_subdenom,json=collateralSubdenom,proto3" json:"collateral_subdenom,omitempty"` + // For testing purposes, we allow the collateral to be set at genesis + CollateralDenom string `protobuf:"bytes,11,opt,name=collateral_denom,json=collateralDenom,proto3" json:"collateral_denom,omitempty"` TraderVolumes []GenesisState_TraderVolume `protobuf:"bytes,7,rep,name=trader_volumes,json=traderVolumes,proto3" json:"trader_volumes"` GlobalDiscount []GenesisState_Discount `protobuf:"bytes,8,rep,name=global_discount,json=globalDiscount,proto3" json:"global_discount"` CustomDiscounts []GenesisState_CustomDiscount `protobuf:"bytes,9,rep,name=custom_discounts,json=customDiscounts,proto3" json:"custom_discounts"` @@ -113,16 +112,9 @@ func (m *GenesisState) GetDnrEpoch() uint64 { return 0 } -func (m *GenesisState) GetCollateralCreator() string { +func (m *GenesisState) GetCollateralDenom() string { if m != nil { - return m.CollateralCreator - } - return "" -} - -func (m *GenesisState) GetCollateralSubdenom() string { - if m != nil { - return m.CollateralSubdenom + return m.CollateralDenom } return "" } @@ -410,53 +402,51 @@ func init() { func init() { proto.RegisterFile("nibiru/perp/v2/genesis.proto", fileDescriptor_c2c7acfef3993fde) } var fileDescriptor_c2c7acfef3993fde = []byte{ - // 721 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0x41, 0x6b, 0x13, 0x41, - 0x14, 0xce, 0x36, 0x69, 0x9a, 0x4c, 0x6b, 0xda, 0x4e, 0x4b, 0x59, 0x62, 0x49, 0x4b, 0x41, 0x89, - 0x48, 0x76, 0x68, 0x04, 0x41, 0x4f, 0x36, 0xa9, 0x16, 0xc1, 0x48, 0xd9, 0x96, 0x1e, 0x44, 0x88, - 0x93, 0xcd, 0x98, 0x2c, 0xdd, 0xdd, 0x59, 0xe6, 0x4d, 0x82, 0x9e, 0xed, 0x0f, 0xf0, 0xe0, 0x6f, - 0xf1, 0x37, 0xf4, 0xd8, 0xa3, 0x78, 0x28, 0xd2, 0xfe, 0x11, 0xd9, 0x99, 0x49, 0x9a, 0x2c, 0xa6, - 0x2a, 0x82, 0xa7, 0x66, 0xde, 0xfb, 0xbe, 0xef, 0xbd, 0x79, 0xef, 0xeb, 0x2c, 0xda, 0x8c, 0xfc, - 0x8e, 0x2f, 0x06, 0x24, 0x66, 0x22, 0x26, 0xc3, 0x3a, 0xe9, 0xb1, 0x88, 0x81, 0x0f, 0x4e, 0x2c, - 0xb8, 0xe4, 0xb8, 0xa4, 0xb3, 0x4e, 0x92, 0x75, 0x86, 0xf5, 0x72, 0xc5, 0xe3, 0x10, 0x72, 0x20, - 0x1d, 0x0a, 0x8c, 0x0c, 0x77, 0x3b, 0x4c, 0xd2, 0x5d, 0xe2, 0x71, 0x3f, 0xd2, 0xf8, 0xf2, 0x66, - 0x8f, 0xf3, 0x5e, 0xc0, 0x08, 0x8d, 0x7d, 0x42, 0xa3, 0x88, 0x4b, 0x2a, 0x7d, 0x1e, 0x19, 0xb5, - 0xf2, 0x7a, 0x8f, 0xf7, 0xb8, 0xfa, 0x49, 0x92, 0x5f, 0x26, 0x5a, 0x4e, 0x75, 0x00, 0x92, 0x4a, - 0xa6, 0x73, 0x3b, 0x67, 0x45, 0xb4, 0x74, 0xa0, 0x3b, 0x3a, 0x4a, 0xc2, 0xf8, 0x31, 0x5a, 0x08, - 0xa9, 0x38, 0x65, 0x12, 0xec, 0xb9, 0xed, 0x6c, 0x75, 0xb1, 0xbe, 0xe1, 0x4c, 0xb7, 0xe8, 0xb4, - 0x54, 0xba, 0x91, 0x3b, 0xbf, 0xdc, 0xca, 0xb8, 0x23, 0x30, 0xae, 0xa1, 0x1c, 0x0d, 0x43, 0xb0, - 0xb3, 0x8a, 0xb4, 0x96, 0x26, 0xed, 0xb5, 0x5a, 0x86, 0xa1, 0x60, 0xb8, 0x89, 0x8a, 0x31, 0x07, - 0x5f, 0x35, 0x6f, 0xe7, 0x14, 0x67, 0x2b, 0xcd, 0x31, 0x7d, 0x1d, 0x1a, 0x9c, 0xe1, 0xdf, 0xf0, - 0xb0, 0x8b, 0x56, 0x05, 0x03, 0x26, 0x86, 0xac, 0x0d, 0x11, 0x8d, 0xa1, 0xcf, 0x25, 0xd8, 0xf3, - 0xbf, 0x16, 0x73, 0x35, 0xf0, 0xc8, 0xe0, 0x8c, 0xd8, 0x8a, 0x98, 0x0e, 0x03, 0xbe, 0x8b, 0x8a, - 0xdd, 0x48, 0xb4, 0x59, 0xcc, 0xbd, 0xbe, 0x9d, 0xdf, 0xb6, 0xaa, 0x39, 0xb7, 0xd0, 0x8d, 0xc4, - 0xf3, 0xe4, 0x8c, 0x6b, 0x08, 0x7b, 0x3c, 0x08, 0xa8, 0x64, 0x82, 0x06, 0x6d, 0x4f, 0x30, 0x2a, - 0xb9, 0xb0, 0x17, 0xb7, 0xad, 0x6a, 0xd1, 0x5d, 0xbd, 0xc9, 0x34, 0x75, 0x02, 0x13, 0xb4, 0x36, - 0x01, 0x87, 0x41, 0xa7, 0xcb, 0x22, 0x1e, 0xda, 0x4b, 0x0a, 0x3f, 0xa1, 0x74, 0x64, 0x32, 0xf8, - 0x04, 0x95, 0xa4, 0xa0, 0x5d, 0x26, 0xda, 0x43, 0x1e, 0x0c, 0x42, 0x06, 0xf6, 0x82, 0xba, 0xcd, - 0x83, 0x19, 0xa3, 0x51, 0x2b, 0x73, 0x8e, 0x15, 0xe5, 0x44, 0x31, 0xcc, 0xbd, 0xee, 0xc8, 0x89, - 0x18, 0xe0, 0x63, 0xb4, 0xdc, 0x0b, 0x78, 0x87, 0x06, 0xed, 0xae, 0x0f, 0x1e, 0x1f, 0x44, 0xd2, - 0x2e, 0x28, 0xe1, 0x7b, 0xb7, 0x0a, 0xef, 0x1b, 0xb0, 0x11, 0x2d, 0x69, 0x8d, 0x51, 0x14, 0xbf, - 0x45, 0x2b, 0xde, 0x00, 0x24, 0x0f, 0xc7, 0xaa, 0x60, 0x17, 0x95, 0xec, 0xc3, 0x5b, 0x65, 0x9b, - 0x8a, 0x94, 0x12, 0x5f, 0xf6, 0xa6, 0xa2, 0x80, 0xdf, 0xa1, 0x75, 0xed, 0xad, 0x76, 0x40, 0x41, - 0xb6, 0x87, 0x4c, 0x80, 0x32, 0x0b, 0x52, 0x15, 0xaa, 0x33, 0x2a, 0x68, 0x73, 0xbe, 0xa2, 0x20, - 0x4f, 0x34, 0xc1, 0xc8, 0xe3, 0x30, 0x9d, 0x80, 0xf2, 0x99, 0x85, 0x96, 0x26, 0x67, 0x87, 0x37, - 0x50, 0x5e, 0xcf, 0xcd, 0xb6, 0xd4, 0x8a, 0xcc, 0x09, 0xaf, 0xa3, 0x79, 0xed, 0x87, 0x39, 0xe5, - 0x07, 0x7d, 0xc0, 0x2f, 0x50, 0x5e, 0x6f, 0xc9, 0xce, 0x26, 0xe8, 0x86, 0x93, 0x14, 0xfa, 0x7e, - 0xb9, 0x75, 0xbf, 0xe7, 0xcb, 0xfe, 0xa0, 0xe3, 0x78, 0x3c, 0x24, 0xe6, 0xbf, 0x59, 0xff, 0xa9, - 0x41, 0xf7, 0x94, 0xc8, 0x8f, 0x31, 0x03, 0xe7, 0x65, 0x24, 0x5d, 0xc3, 0x2e, 0x7f, 0xb1, 0x50, - 0x61, 0x3c, 0xd3, 0x67, 0x28, 0xfb, 0x9e, 0x31, 0x5d, 0xff, 0xaf, 0x14, 0xf7, 0x99, 0xe7, 0x26, - 0xd4, 0x89, 0xb6, 0xe6, 0xfe, 0xa9, 0xad, 0x53, 0x54, 0x9a, 0x5e, 0xd4, 0xcc, 0xf1, 0xec, 0xa1, - 0xc2, 0xd8, 0x56, 0x49, 0xcd, 0x3f, 0xb5, 0x95, 0x3b, 0xa6, 0xed, 0x7c, 0xb2, 0x90, 0x3d, 0x6b, - 0x83, 0xb8, 0x85, 0x72, 0x31, 0xf5, 0x4d, 0xd5, 0xc6, 0x13, 0x73, 0x9f, 0xdd, 0x89, 0xfb, 0xbc, - 0x56, 0xd5, 0x9a, 0x7d, 0xea, 0x47, 0xc4, 0x3c, 0x76, 0x1f, 0x88, 0xc7, 0xc3, 0x90, 0x47, 0x84, - 0x02, 0x30, 0xe9, 0x1c, 0x52, 0x5f, 0xb8, 0x4a, 0x06, 0xdb, 0x68, 0xc1, 0x98, 0xc9, 0xec, 0x73, - 0x74, 0xdc, 0xf9, 0x6a, 0xa1, 0xe5, 0xd4, 0xa3, 0xf3, 0xdf, 0x8a, 0xe3, 0xa7, 0xa8, 0x30, 0x7a, - 0xd9, 0x94, 0xa1, 0x16, 0xeb, 0x76, 0x7a, 0x8a, 0xa9, 0x97, 0x70, 0x8c, 0x6f, 0x1c, 0x9c, 0x5f, - 0x55, 0xac, 0x8b, 0xab, 0x8a, 0xf5, 0xe3, 0xaa, 0x62, 0x7d, 0xbe, 0xae, 0x64, 0x2e, 0xae, 0x2b, - 0x99, 0x6f, 0xd7, 0x95, 0xcc, 0x9b, 0xda, 0xef, 0x1a, 0x1d, 0x7d, 0x14, 0x94, 0x01, 0x3a, 0x79, - 0xf5, 0x55, 0x78, 0xf4, 0x33, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x65, 0xef, 0xde, 0xb5, 0x06, 0x00, - 0x00, + // 700 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xdf, 0x6a, 0x13, 0x4d, + 0x14, 0xcf, 0x36, 0x69, 0x9a, 0x4c, 0xfb, 0x25, 0xfd, 0xc6, 0x52, 0x96, 0x58, 0xd2, 0x52, 0x50, + 0x52, 0xa4, 0x3b, 0x34, 0x82, 0xa0, 0x57, 0x36, 0xad, 0x16, 0xc1, 0x48, 0xd9, 0x96, 0x5e, 0x88, + 0x10, 0x27, 0x9b, 0x31, 0x59, 0x9a, 0x9d, 0x59, 0xe6, 0x4c, 0x82, 0x5e, 0xeb, 0x03, 0x78, 0xe1, + 0xb3, 0xf8, 0x0c, 0xbd, 0xb3, 0x97, 0xe2, 0x45, 0x91, 0xf6, 0x45, 0x64, 0x67, 0x26, 0x69, 0xb2, + 0x98, 0xaa, 0x08, 0x5e, 0x65, 0xe7, 0xcc, 0xf9, 0xfd, 0x99, 0x73, 0x4e, 0x0e, 0x5a, 0xe3, 0x61, + 0x3b, 0x94, 0x03, 0x12, 0x33, 0x19, 0x93, 0x61, 0x9d, 0x74, 0x19, 0x67, 0x10, 0x82, 0x17, 0x4b, + 0xa1, 0x04, 0x2e, 0x99, 0x5b, 0x2f, 0xb9, 0xf5, 0x86, 0xf5, 0x4a, 0x35, 0x10, 0x10, 0x09, 0x20, + 0x6d, 0x0a, 0x8c, 0x0c, 0x77, 0xda, 0x4c, 0xd1, 0x1d, 0x12, 0x88, 0x90, 0x9b, 0xfc, 0xca, 0x5a, + 0x57, 0x88, 0x6e, 0x9f, 0x11, 0x1a, 0x87, 0x84, 0x72, 0x2e, 0x14, 0x55, 0xa1, 0xe0, 0x96, 0xad, + 0xb2, 0xd2, 0x15, 0x5d, 0xa1, 0x3f, 0x49, 0xf2, 0x65, 0xa3, 0x95, 0x94, 0x03, 0x50, 0x54, 0x31, + 0x73, 0xb7, 0xf9, 0xa5, 0x80, 0x96, 0x0e, 0x8c, 0xa3, 0xa3, 0x24, 0x8c, 0x1f, 0xa0, 0x85, 0x88, + 0xca, 0x53, 0xa6, 0xc0, 0x9d, 0xdb, 0xc8, 0xd6, 0x16, 0xeb, 0xab, 0xde, 0xb4, 0x45, 0xaf, 0xa9, + 0xaf, 0x1b, 0xb9, 0xb3, 0x8b, 0xf5, 0x8c, 0x3f, 0x4a, 0xc6, 0xdb, 0x28, 0x47, 0xa3, 0x08, 0xdc, + 0xac, 0x06, 0xdd, 0x4a, 0x83, 0x76, 0x9b, 0x4d, 0x8b, 0xd0, 0x69, 0x78, 0x0f, 0x15, 0x63, 0x01, + 0xa1, 0x36, 0xef, 0xe6, 0x34, 0x66, 0x3d, 0x8d, 0xb1, 0xbe, 0x0e, 0x6d, 0x9e, 0xc5, 0x5f, 0xe3, + 0xb0, 0x8f, 0xfe, 0x97, 0x0c, 0x98, 0x1c, 0xb2, 0x16, 0x70, 0x1a, 0x43, 0x4f, 0x28, 0x70, 0xe7, + 0x7f, 0x4e, 0xe6, 0x9b, 0xc4, 0x23, 0x9b, 0x67, 0xc9, 0x96, 0xe5, 0x74, 0x18, 0xf0, 0x6d, 0x54, + 0xec, 0x70, 0xd9, 0x62, 0xb1, 0x08, 0x7a, 0x6e, 0x7e, 0xc3, 0xa9, 0xe5, 0xfc, 0x42, 0x87, 0xcb, + 0x27, 0xc9, 0x19, 0x6f, 0xa1, 0xe5, 0x40, 0xf4, 0xfb, 0x54, 0x31, 0x49, 0xfb, 0xad, 0x0e, 0xe3, + 0x22, 0x72, 0x17, 0x37, 0x9c, 0x5a, 0xd1, 0x2f, 0x5f, 0xc7, 0xf7, 0x93, 0x30, 0x3e, 0x41, 0x25, + 0x25, 0x69, 0x87, 0xc9, 0xd6, 0x50, 0xf4, 0x07, 0x11, 0x03, 0x77, 0x41, 0x1b, 0xdb, 0x9a, 0xf1, + 0x4a, 0x5d, 0x7d, 0xef, 0x58, 0x43, 0x4e, 0x34, 0xc2, 0x5a, 0xfc, 0x4f, 0x4d, 0xc4, 0x00, 0x1f, + 0xa3, 0x72, 0xb7, 0x2f, 0xda, 0x89, 0x7c, 0x08, 0x81, 0x18, 0x70, 0xe5, 0x16, 0x34, 0xf1, 0x9d, + 0x1b, 0x89, 0xf7, 0x6d, 0xb2, 0x25, 0x2d, 0x19, 0x8e, 0x51, 0x14, 0xbf, 0x42, 0xcb, 0xc1, 0x00, + 0x94, 0x88, 0xc6, 0xac, 0xe0, 0x16, 0x35, 0xed, 0xbd, 0x1b, 0x69, 0xf7, 0x34, 0x28, 0x45, 0x5e, + 0x0e, 0xa6, 0xa2, 0x80, 0x5f, 0xa3, 0x15, 0x33, 0x26, 0xad, 0x3e, 0x05, 0xd5, 0x1a, 0x32, 0x09, + 0xba, 0xef, 0x48, 0x2b, 0xd4, 0x66, 0x28, 0x98, 0x39, 0x7b, 0x4e, 0x41, 0x9d, 0x18, 0x80, 0xa5, + 0xc7, 0x51, 0xfa, 0x02, 0x2a, 0x1f, 0x1c, 0xb4, 0x34, 0x59, 0x3b, 0xbc, 0x8a, 0xf2, 0xa6, 0x6e, + 0xae, 0xa3, 0xfb, 0x63, 0x4f, 0x78, 0x05, 0xcd, 0x9b, 0xd6, 0xce, 0xe9, 0xd6, 0x9a, 0x03, 0x7e, + 0x8a, 0xf2, 0xa6, 0x4b, 0x6e, 0x36, 0xc9, 0x6e, 0x78, 0x89, 0xd0, 0xb7, 0x8b, 0xf5, 0xbb, 0xdd, + 0x50, 0xf5, 0x06, 0x6d, 0x2f, 0x10, 0x11, 0xb1, 0x7f, 0x4c, 0xf3, 0xb3, 0x0d, 0x9d, 0x53, 0xa2, + 0xde, 0xc5, 0x0c, 0xbc, 0x67, 0x5c, 0xf9, 0x16, 0x5d, 0xf9, 0xe4, 0xa0, 0xc2, 0xb8, 0xa6, 0x8f, + 0x51, 0xf6, 0x0d, 0x63, 0x46, 0xff, 0x8f, 0x18, 0xf7, 0x59, 0xe0, 0x27, 0xd0, 0x09, 0x5b, 0x73, + 0x7f, 0x65, 0xeb, 0x14, 0x95, 0xa6, 0x1b, 0x35, 0xb3, 0x3c, 0xbb, 0xa8, 0x30, 0x1e, 0xab, 0x44, + 0xf3, 0x77, 0xc7, 0xca, 0x1f, 0xc3, 0x36, 0xdf, 0x3b, 0xc8, 0x9d, 0xd5, 0x41, 0xdc, 0x44, 0xb9, + 0x98, 0x86, 0x56, 0xb5, 0xf1, 0xd0, 0xbe, 0x67, 0x67, 0xe2, 0x3d, 0x2f, 0xb4, 0xda, 0x5e, 0x8f, + 0x86, 0x9c, 0xd8, 0xbd, 0xf5, 0x96, 0x04, 0x22, 0x8a, 0x04, 0x27, 0x14, 0x80, 0x29, 0xef, 0x90, + 0x86, 0xd2, 0xd7, 0x34, 0xd8, 0x45, 0x0b, 0x76, 0x98, 0x6c, 0x3f, 0x47, 0xc7, 0xcd, 0xcf, 0x0e, + 0x2a, 0xa7, 0xf6, 0xc7, 0x3f, 0x13, 0xc7, 0x8f, 0x50, 0x61, 0xb4, 0xa4, 0xf4, 0x40, 0x2d, 0xd6, + 0xdd, 0x74, 0x15, 0x53, 0x4b, 0x6d, 0x9c, 0xdf, 0x38, 0x38, 0xbb, 0xac, 0x3a, 0xe7, 0x97, 0x55, + 0xe7, 0xfb, 0x65, 0xd5, 0xf9, 0x78, 0x55, 0xcd, 0x9c, 0x5f, 0x55, 0x33, 0x5f, 0xaf, 0xaa, 0x99, + 0x97, 0xdb, 0xbf, 0x32, 0x3a, 0xda, 0xef, 0x7a, 0x00, 0xda, 0x79, 0xbd, 0xe0, 0xef, 0xff, 0x08, + 0x00, 0x00, 0xff, 0xff, 0xa2, 0xa1, 0x80, 0x9e, 0x80, 0x06, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -479,17 +469,10 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.CollateralSubdenom) > 0 { - i -= len(m.CollateralSubdenom) - copy(dAtA[i:], m.CollateralSubdenom) - i = encodeVarintGenesis(dAtA, i, uint64(len(m.CollateralSubdenom))) - i-- - dAtA[i] = 0x62 - } - if len(m.CollateralCreator) > 0 { - i -= len(m.CollateralCreator) - copy(dAtA[i:], m.CollateralCreator) - i = encodeVarintGenesis(dAtA, i, uint64(len(m.CollateralCreator))) + if len(m.CollateralDenom) > 0 { + i -= len(m.CollateralDenom) + copy(dAtA[i:], m.CollateralDenom) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.CollateralDenom))) i-- dAtA[i] = 0x5a } @@ -897,11 +880,7 @@ func (m *GenesisState) Size() (n int) { n += 1 + l + sovGenesis(uint64(l)) } } - l = len(m.CollateralCreator) - if l > 0 { - n += 1 + l + sovGenesis(uint64(l)) - } - l = len(m.CollateralSubdenom) + l = len(m.CollateralDenom) if l > 0 { n += 1 + l + sovGenesis(uint64(l)) } @@ -1314,39 +1293,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 11: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CollateralCreator", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CollateralCreator = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CollateralSubdenom", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field CollateralDenom", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1374,7 +1321,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.CollateralSubdenom = string(dAtA[iNdEx:postIndex]) + m.CollateralDenom = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex diff --git a/x/perp/v2/types/genesis_test.go b/x/perp/v2/types/genesis_test.go index 3730b0bb0..5cb52191b 100644 --- a/x/perp/v2/types/genesis_test.go +++ b/x/perp/v2/types/genesis_test.go @@ -25,8 +25,7 @@ func TestDefaultGenesis(t *testing.T) { require.Empty(t, genesis.Amms) require.Empty(t, genesis.Positions) require.Empty(t, genesis.ReserveSnapshots) - require.Empty(t, genesis.CollateralSubdenom) - require.Empty(t, genesis.CollateralCreator) + require.Empty(t, genesis.CollateralDenom) } func TestGenesisValidate(t *testing.T) { diff --git a/x/perp/v2/types/market_test.go b/x/perp/v2/types/market_test.go index fa88ff878..c7fd66eeb 100644 --- a/x/perp/v2/types/market_test.go +++ b/x/perp/v2/types/market_test.go @@ -139,7 +139,7 @@ func TestMarketEqual(t *testing.T) { }, { modifier: func(m Market) Market { - return m.WithPrepaidBadDebt(sdk.NewCoin(DefaultTestingCollateralNotForProd.String(), sdk.OneInt())) + return m.WithPrepaidBadDebt(sdk.NewCoin(TestingCollateralDenomNUSD, sdk.OneInt())) }, requiredError: "expected market prepaid bad debt", }, diff --git a/x/perp/v2/types/msgs.go b/x/perp/v2/types/msgs.go index 1ad077efd..551ad0baa 100644 --- a/x/perp/v2/types/msgs.go +++ b/x/perp/v2/types/msgs.go @@ -274,3 +274,30 @@ func (m MsgPartialClose) GetSigners() []sdk.AccAddress { } return []sdk.AccAddress{signer} } + +// MsgChangeCollateralDenom + +func (m MsgChangeCollateralDenom) Route() string { return "perp" } +func (m MsgChangeCollateralDenom) Type() string { return "partial_close_msg" } + +func (m MsgChangeCollateralDenom) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(m.Sender); err != nil { + return sdkerrors.Wrapf(errors.ErrInvalidAddress, "invalid sender address (%s)", err) + } + if err := sdk.ValidateDenom(m.NewDenom); err != nil { + return err + } + return nil +} + +func (m MsgChangeCollateralDenom) GetSignBytes() []byte { + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m)) +} + +func (m MsgChangeCollateralDenom) GetSigners() []sdk.AccAddress { + signer, err := sdk.AccAddressFromBech32(m.Sender) + if err != nil { + panic(err) + } + return []sdk.AccAddress{signer} +} diff --git a/x/perp/v2/types/query.pb.go b/x/perp/v2/types/query.pb.go index ef6742726..a6b75f9b4 100644 --- a/x/perp/v2/types/query.pb.go +++ b/x/perp/v2/types/query.pb.go @@ -33,6 +33,8 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +// QueryPositionsRequest: Request type for the +// "nibiru.perp.v2.Query/Positions" gRPC service method type QueryPositionsRequest struct { Trader string `protobuf:"bytes,1,opt,name=trader,proto3" json:"trader,omitempty"` } @@ -77,6 +79,8 @@ func (m *QueryPositionsRequest) GetTrader() string { return "" } +// QueryPositionsResponse: Response type for the +// "nibiru.perp.v2.Query/Positions" gRPC service method type QueryPositionsResponse struct { Positions []QueryPositionResponse `protobuf:"bytes,1,rep,name=positions,proto3" json:"positions"` } @@ -121,6 +125,8 @@ func (m *QueryPositionsResponse) GetPositions() []QueryPositionResponse { return nil } +// QueryPositionStoreRequest: Request type for the +// "nibiru.perp.v2.Query/PositionStore" gRPC service method type QueryPositionStoreRequest struct { // pagination defines a paginated request Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` @@ -166,6 +172,8 @@ func (m *QueryPositionStoreRequest) GetPagination() *query.PageRequest { return nil } +// QueryPositionStoreResponse: Response type for the +// "nibiru.perp.v2.Query/PositionStore" gRPC service method type QueryPositionStoreResponse struct { // Position responses: collection of all stored positions (with pagination) Positions []Position `protobuf:"bytes,1,rep,name=positions,proto3" json:"positions"` @@ -220,8 +228,8 @@ func (m *QueryPositionStoreResponse) GetPagination() *query.PageResponse { return nil } -// QueryPositionRequest is the request type for the position of the x/perp -// module account. +// QueryPositionRequest: Request type for the +// "nibiru.perp.v2.Query/Position" gRPC service method type QueryPositionRequest struct { Pair github_com_NibiruChain_nibiru_x_common_asset.Pair `protobuf:"bytes,1,opt,name=pair,proto3,customtype=github.com/NibiruChain/nibiru/x/common/asset.Pair" json:"pair"` Trader string `protobuf:"bytes,2,opt,name=trader,proto3" json:"trader,omitempty"` @@ -267,6 +275,8 @@ func (m *QueryPositionRequest) GetTrader() string { return "" } +// QueryPositionResponse: Response type for the +// "nibiru.perp.v2.Query/Position" gRPC service method type QueryPositionResponse struct { // The position as it exists in the blockchain state Position Position `protobuf:"bytes,1,opt,name=position,proto3" json:"position"` @@ -319,6 +329,8 @@ func (m *QueryPositionResponse) GetPosition() Position { return Position{} } +// QueryModuleAccountsRequest: Request type for the +// "nibiru.perp.v2.Query/ModuleAccounts" gRPC service method type QueryModuleAccountsRequest struct { } @@ -355,6 +367,8 @@ func (m *QueryModuleAccountsRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryModuleAccountsRequest proto.InternalMessageInfo +// QueryModuleAccountsResponse: Response type for the +// "nibiru.perp.v2.Query/ModuleAccounts" gRPC service method type QueryModuleAccountsResponse struct { Accounts []AccountWithBalance `protobuf:"bytes,1,rep,name=accounts,proto3" json:"accounts"` } @@ -599,6 +613,8 @@ func (m *QueryMarketsResponse) GetAmmMarkets() []AmmMarket { return nil } +// QueryCollateralRequest: Request type for the +// "nibiru.perp.v2.Query/Collateral" gRPC service method type QueryCollateralRequest struct { } @@ -635,9 +651,10 @@ func (m *QueryCollateralRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryCollateralRequest proto.InternalMessageInfo +// QueryCollateralRequest: Response type for the +// "nibiru.perp.v2.Query/Collateral" gRPC service method type QueryCollateralResponse struct { - CollateralCreator string `protobuf:"bytes,1,opt,name=collateral_creator,json=collateralCreator,proto3" json:"collateral_creator,omitempty"` - CollateralSubdenom string `protobuf:"bytes,2,opt,name=collateral_subdenom,json=collateralSubdenom,proto3" json:"collateral_subdenom,omitempty"` + CollateralDenom string `protobuf:"bytes,1,opt,name=collateral_denom,json=collateralDenom,proto3" json:"collateral_denom,omitempty"` } func (m *QueryCollateralResponse) Reset() { *m = QueryCollateralResponse{} } @@ -673,16 +690,9 @@ func (m *QueryCollateralResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryCollateralResponse proto.InternalMessageInfo -func (m *QueryCollateralResponse) GetCollateralCreator() string { +func (m *QueryCollateralResponse) GetCollateralDenom() string { if m != nil { - return m.CollateralCreator - } - return "" -} - -func (m *QueryCollateralResponse) GetCollateralSubdenom() string { - if m != nil { - return m.CollateralSubdenom + return m.CollateralDenom } return "" } @@ -707,69 +717,68 @@ func init() { func init() { proto.RegisterFile("nibiru/perp/v2/query.proto", fileDescriptor_fc8f0be94fac333f) } var fileDescriptor_fc8f0be94fac333f = []byte{ - // 986 bytes of a gzipped FileDescriptorProto + // 968 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0x4f, 0x6f, 0xdc, 0x44, - 0x14, 0x8f, 0x93, 0x90, 0x26, 0x2f, 0x6d, 0xa0, 0x93, 0x92, 0x7a, 0xdd, 0x68, 0x37, 0x35, 0x25, - 0x09, 0xad, 0x62, 0x93, 0x2d, 0x17, 0x10, 0x07, 0xba, 0xa9, 0xa8, 0x38, 0x6c, 0x95, 0xba, 0x42, - 0x20, 0x38, 0xac, 0x66, 0xbd, 0xa3, 0x8d, 0x55, 0x7b, 0xc6, 0xf5, 0x78, 0x23, 0x52, 0x09, 0x0e, - 0x3d, 0x70, 0x46, 0xf4, 0x23, 0x70, 0x82, 0xcf, 0xc0, 0x07, 0xe8, 0xb1, 0x12, 0x17, 0xd4, 0x43, - 0x41, 0x09, 0x1f, 0x04, 0x79, 0xfc, 0x66, 0x77, 0x6d, 0x6f, 0xb3, 0xab, 0x9c, 0x76, 0x3c, 0xef, - 0xf7, 0xde, 0xfb, 0xbd, 0xbf, 0xb3, 0x60, 0xf1, 0xa0, 0x1b, 0x24, 0x03, 0x37, 0x66, 0x49, 0xec, - 0x1e, 0x37, 0xdd, 0xa7, 0x03, 0x96, 0x9c, 0x38, 0x71, 0x22, 0x52, 0x41, 0xd6, 0x72, 0x99, 0x93, - 0xc9, 0x9c, 0xe3, 0xa6, 0x75, 0xad, 0x2f, 0xfa, 0x42, 0x89, 0xdc, 0xec, 0x94, 0xa3, 0xac, 0xcd, - 0xbe, 0x10, 0xfd, 0x90, 0xb9, 0x34, 0x0e, 0x5c, 0xca, 0xb9, 0x48, 0x69, 0x1a, 0x08, 0x2e, 0x51, - 0x5a, 0xb6, 0x2f, 0x53, 0x9a, 0x32, 0x94, 0xd5, 0x7d, 0x21, 0x23, 0x21, 0xdd, 0x2e, 0x95, 0xcc, - 0x3d, 0xde, 0xef, 0xb2, 0x94, 0xee, 0xbb, 0xbe, 0x08, 0x38, 0xca, 0x6f, 0x8f, 0xcb, 0x15, 0xb1, - 0x21, 0x2a, 0xa6, 0xfd, 0x80, 0x2b, 0x47, 0x39, 0xd6, 0x76, 0xe1, 0xfd, 0x47, 0x19, 0xe2, 0x50, - 0xc8, 0x40, 0xf9, 0xf7, 0xd8, 0xd3, 0x01, 0x93, 0x29, 0xd9, 0x80, 0xa5, 0x34, 0xa1, 0x3d, 0x96, - 0x98, 0xc6, 0x96, 0xb1, 0xbb, 0xe2, 0xe1, 0x97, 0xed, 0xc3, 0x46, 0x59, 0x41, 0xc6, 0x82, 0x4b, - 0x46, 0xbe, 0x82, 0x95, 0x58, 0x5f, 0x9a, 0xc6, 0xd6, 0xc2, 0xee, 0x6a, 0xf3, 0x43, 0xa7, 0x98, - 0x0a, 0xa7, 0xa0, 0xaa, 0x35, 0x5b, 0x8b, 0x2f, 0xdf, 0x34, 0xe6, 0xbc, 0x91, 0xb6, 0xed, 0x43, - 0xad, 0x80, 0x7c, 0x9c, 0x8a, 0x84, 0x69, 0x66, 0x5f, 0x02, 0x8c, 0xc2, 0x50, 0xec, 0x56, 0x9b, - 0xdb, 0x4e, 0x1e, 0xb3, 0x93, 0xc5, 0xec, 0xe4, 0xc5, 0xc0, 0x98, 0x9d, 0x43, 0xda, 0xd7, 0xba, - 0xde, 0x98, 0xa6, 0xfd, 0x9b, 0x01, 0xd6, 0x24, 0x2f, 0x18, 0xce, 0xe7, 0xd5, 0x70, 0xcc, 0x72, - 0x38, 0x5a, 0xb3, 0x12, 0x01, 0x79, 0x50, 0x20, 0x39, 0xaf, 0x48, 0xee, 0x4c, 0x25, 0x99, 0xbb, - 0x2e, 0xb0, 0xfc, 0x11, 0xae, 0x95, 0x92, 0x96, 0x67, 0xa1, 0x0d, 0x8b, 0x31, 0x0d, 0xb0, 0x3a, - 0xad, 0x4f, 0x33, 0xff, 0xaf, 0xdf, 0x34, 0xf6, 0xfb, 0x41, 0x7a, 0x34, 0xe8, 0x3a, 0xbe, 0x88, - 0xdc, 0x87, 0x8a, 0xeb, 0xc1, 0x11, 0x0d, 0xb8, 0x8b, 0xdd, 0xf4, 0x83, 0xeb, 0x8b, 0x28, 0x12, - 0xdc, 0xa5, 0x52, 0xb2, 0xd4, 0x39, 0xa4, 0x41, 0xe2, 0x29, 0x33, 0x63, 0xe5, 0x9e, 0x2f, 0x94, - 0xfb, 0xf5, 0x7c, 0xa9, 0x41, 0x86, 0xf9, 0xf9, 0x0c, 0x96, 0x75, 0xb8, 0x58, 0x84, 0x69, 0xe9, - 0x19, 0xe2, 0xc9, 0xf7, 0x70, 0x55, 0x9f, 0x3b, 0x5c, 0x64, 0x3f, 0x34, 0xcc, 0x1d, 0xb7, 0x1c, - 0x8c, 0x64, 0x7b, 0x2c, 0x12, 0xec, 0xe7, 0xfc, 0x67, 0x4f, 0xf6, 0x9e, 0xb8, 0xe9, 0x49, 0xcc, - 0xa4, 0x73, 0x9f, 0xf9, 0xde, 0x7b, 0xda, 0xd0, 0x43, 0xb4, 0x43, 0xbe, 0x86, 0xb5, 0x01, 0x4f, - 0x18, 0x0d, 0x83, 0x67, 0xac, 0xd7, 0x89, 0x79, 0x68, 0x2e, 0x5c, 0xc8, 0xf2, 0x95, 0x91, 0x95, - 0x43, 0x1e, 0x92, 0x47, 0x70, 0x39, 0xa2, 0x49, 0x3f, 0xe0, 0x9d, 0x24, 0xab, 0x8c, 0xb9, 0x78, - 0x21, 0xa3, 0xab, 0xb9, 0x0d, 0x2f, 0x33, 0x61, 0x6f, 0x62, 0x03, 0xb6, 0x45, 0x6f, 0x10, 0xb2, - 0x7b, 0xbe, 0x2f, 0x06, 0x3c, 0xd5, 0x13, 0x68, 0xfb, 0x70, 0x63, 0xa2, 0x14, 0xf3, 0x7f, 0x1f, - 0x96, 0x29, 0xde, 0x61, 0x7b, 0xda, 0xe5, 0xfc, 0xa3, 0xce, 0x37, 0x41, 0x7a, 0xd4, 0xa2, 0x21, - 0xe5, 0xbe, 0x1e, 0xb5, 0xa1, 0xa6, 0xfd, 0xbb, 0x01, 0xa4, 0x0a, 0x23, 0x04, 0x16, 0x39, 0x8d, - 0x18, 0xce, 0xbe, 0x3a, 0x13, 0x13, 0x2e, 0xd1, 0x5e, 0x2f, 0x61, 0x52, 0x62, 0x8f, 0xe8, 0x4f, - 0xc2, 0xe0, 0x52, 0x37, 0x57, 0x34, 0x17, 0x14, 0x93, 0x5a, 0xa1, 0xd3, 0x75, 0x8f, 0x1f, 0x88, - 0x80, 0xb7, 0x3e, 0xce, 0x08, 0xfc, 0xf1, 0x4f, 0x63, 0x77, 0x86, 0x84, 0x65, 0x0a, 0xd2, 0xd3, - 0xb6, 0x6d, 0x0e, 0x2b, 0xf7, 0xa2, 0xa8, 0x4d, 0x93, 0x27, 0x2c, 0x25, 0x9f, 0xc0, 0x52, 0xa4, - 0x4e, 0xd8, 0x7c, 0x1b, 0xe5, 0xe0, 0x73, 0x1c, 0x06, 0x8c, 0x58, 0x72, 0x07, 0x16, 0x68, 0x14, - 0xe1, 0x3c, 0xae, 0x57, 0xf2, 0xd5, 0x6e, 0x23, 0x3e, 0x43, 0xd9, 0x77, 0x61, 0x3d, 0x2f, 0x80, - 0xd2, 0x1d, 0x6e, 0xc6, 0x4d, 0x58, 0x39, 0x66, 0x89, 0x0c, 0x04, 0x67, 0x3d, 0xe5, 0x7c, 0xd9, - 0x1b, 0x5d, 0xd8, 0xdf, 0xe2, 0xbc, 0x0e, 0x95, 0xb0, 0x5c, 0x5f, 0xc0, 0x2a, 0x8d, 0xa2, 0x4e, - 0xce, 0x43, 0x57, 0xac, 0x56, 0x61, 0xa0, 0xe3, 0x43, 0x1e, 0x40, 0xf5, 0x85, 0xb4, 0x4d, 0xdc, - 0xbc, 0x07, 0x22, 0x0c, 0x69, 0xca, 0x12, 0x1a, 0xea, 0x4e, 0x39, 0x81, 0xeb, 0x15, 0x09, 0xba, - 0xdd, 0x03, 0xe2, 0x0f, 0x6f, 0x3b, 0x7e, 0xc2, 0x68, 0x2a, 0xf4, 0x4a, 0xbf, 0x3a, 0x92, 0x1c, - 0xe4, 0x02, 0xe2, 0xc2, 0xfa, 0x18, 0x5c, 0x0e, 0xba, 0x3d, 0xc6, 0x45, 0x84, 0xf5, 0x1e, 0xb3, - 0xf4, 0x18, 0x25, 0xcd, 0x3f, 0x97, 0xe0, 0x1d, 0xe5, 0x9b, 0xfc, 0x04, 0x57, 0x0a, 0x8b, 0x82, - 0xdc, 0x9a, 0xb2, 0xfc, 0x15, 0x77, 0x6b, 0xb6, 0x27, 0xc2, 0xde, 0x7a, 0xfe, 0xd7, 0x7f, 0x2f, - 0xe6, 0x2d, 0x62, 0xba, 0xa5, 0x87, 0x71, 0xb8, 0x53, 0x9e, 0x1b, 0xb0, 0x56, 0x7c, 0x99, 0xc8, - 0xf9, 0xb6, 0x75, 0x41, 0xad, 0xed, 0x69, 0x30, 0xe4, 0x70, 0x53, 0x71, 0xb8, 0x41, 0x6a, 0x6f, - 0xe3, 0x20, 0xc9, 0x0b, 0x03, 0x48, 0xf5, 0x4d, 0x21, 0x1f, 0x9d, 0xeb, 0x61, 0xfc, 0x75, 0xb3, - 0x6e, 0xcf, 0x02, 0x45, 0x42, 0xdb, 0x8a, 0xd0, 0x16, 0xa9, 0xbf, 0x8d, 0x50, 0x47, 0x2a, 0xf7, - 0xbf, 0x1a, 0xb0, 0x56, 0xdc, 0x22, 0x64, 0xb2, 0x9b, 0x89, 0x8b, 0xc8, 0xba, 0x33, 0x13, 0x16, - 0x39, 0xed, 0x28, 0x4e, 0x37, 0x49, 0xa3, 0xcc, 0x29, 0x52, 0xf8, 0x8e, 0xde, 0x3c, 0xe4, 0x19, - 0x5c, 0x1e, 0x1f, 0x14, 0xf2, 0xc1, 0x64, 0x2f, 0x85, 0xd9, 0xb3, 0x6e, 0x9d, 0x0f, 0x42, 0x0e, - 0x0d, 0xc5, 0xa1, 0x46, 0xae, 0x57, 0x38, 0xa0, 0xaf, 0x9f, 0x0d, 0x78, 0xb7, 0x34, 0x31, 0x64, - 0x72, 0x17, 0x54, 0x86, 0xcd, 0xda, 0x99, 0x8a, 0x43, 0x16, 0xb6, 0x62, 0xb1, 0x49, 0xac, 0x32, - 0x8b, 0xd1, 0x18, 0xb5, 0x1e, 0xbc, 0x3c, 0xad, 0x1b, 0xaf, 0x4e, 0xeb, 0xc6, 0xbf, 0xa7, 0x75, - 0xe3, 0x97, 0xb3, 0xfa, 0xdc, 0xab, 0xb3, 0xfa, 0xdc, 0xdf, 0x67, 0xf5, 0xb9, 0xef, 0xf6, 0xa6, - 0xbd, 0xe4, 0xda, 0x9a, 0x5a, 0x95, 0xdd, 0x25, 0xf5, 0x77, 0xee, 0xee, 0xff, 0x01, 0x00, 0x00, - 0xff, 0xff, 0x14, 0xc9, 0x30, 0xbc, 0x98, 0x0a, 0x00, 0x00, + 0x14, 0x8f, 0x93, 0x90, 0x26, 0x2f, 0x6d, 0x5a, 0xa6, 0x25, 0xf5, 0xba, 0xd1, 0x6e, 0x6a, 0x4a, + 0x92, 0xb6, 0xaa, 0x4d, 0xb6, 0x5c, 0x40, 0x1c, 0xe8, 0x26, 0xa2, 0xe2, 0xb0, 0x55, 0x6a, 0x84, + 0x40, 0x70, 0x58, 0xcd, 0x7a, 0x47, 0x1b, 0xab, 0xf6, 0x8c, 0xeb, 0xf1, 0x46, 0xb4, 0x12, 0x1c, + 0x7a, 0xe0, 0x8c, 0xe8, 0x47, 0xe0, 0x04, 0x9f, 0x81, 0x0f, 0xd0, 0x63, 0x25, 0x2e, 0xa8, 0x87, + 0x82, 0x12, 0x3e, 0x48, 0xe5, 0xf1, 0x1b, 0xef, 0xda, 0xde, 0x66, 0xa3, 0x9e, 0x76, 0x3c, 0xef, + 0xf7, 0xde, 0xfb, 0xbd, 0xbf, 0xb3, 0x60, 0xf1, 0xa0, 0x1f, 0x24, 0x23, 0x37, 0x66, 0x49, 0xec, + 0x1e, 0xb5, 0xdd, 0xc7, 0x23, 0x96, 0x3c, 0x71, 0xe2, 0x44, 0xa4, 0x82, 0xac, 0xe5, 0x32, 0x27, + 0x93, 0x39, 0x47, 0x6d, 0xeb, 0xca, 0x50, 0x0c, 0x85, 0x12, 0xb9, 0xd9, 0x29, 0x47, 0x59, 0x1b, + 0x43, 0x21, 0x86, 0x21, 0x73, 0x69, 0x1c, 0xb8, 0x94, 0x73, 0x91, 0xd2, 0x34, 0x10, 0x5c, 0xa2, + 0xb4, 0x6a, 0x5f, 0xa6, 0x34, 0x65, 0x28, 0x6b, 0xfa, 0x42, 0x46, 0x42, 0xba, 0x7d, 0x2a, 0x99, + 0x7b, 0xb4, 0xdb, 0x67, 0x29, 0xdd, 0x75, 0x7d, 0x11, 0x70, 0x94, 0xdf, 0x9a, 0x94, 0x2b, 0x62, + 0x05, 0x2a, 0xa6, 0xc3, 0x80, 0x2b, 0x47, 0x39, 0xd6, 0x76, 0xe1, 0x83, 0x87, 0x19, 0xe2, 0x40, + 0xc8, 0x40, 0xf9, 0xf7, 0xd8, 0xe3, 0x11, 0x93, 0x29, 0x59, 0x87, 0xa5, 0x34, 0xa1, 0x03, 0x96, + 0x98, 0xc6, 0xa6, 0xb1, 0xb3, 0xe2, 0xe1, 0x97, 0xed, 0xc3, 0x7a, 0x55, 0x41, 0xc6, 0x82, 0x4b, + 0x46, 0xbe, 0x82, 0x95, 0x58, 0x5f, 0x9a, 0xc6, 0xe6, 0xc2, 0xce, 0x6a, 0xfb, 0x23, 0xa7, 0x9c, + 0x0a, 0xa7, 0xa4, 0xaa, 0x35, 0x3b, 0x8b, 0x2f, 0x5e, 0xb7, 0xe6, 0xbc, 0xb1, 0xb6, 0xed, 0x43, + 0xa3, 0x84, 0xfc, 0x3a, 0x15, 0x09, 0xd3, 0xcc, 0xbe, 0x04, 0x18, 0x87, 0xa1, 0xd8, 0xad, 0xb6, + 0xb7, 0x9c, 0x3c, 0x66, 0x27, 0x8b, 0xd9, 0xc9, 0x8b, 0x81, 0x31, 0x3b, 0x07, 0x74, 0xa8, 0x75, + 0xbd, 0x09, 0x4d, 0xfb, 0x77, 0x03, 0xac, 0x69, 0x5e, 0x30, 0x9c, 0xcf, 0xeb, 0xe1, 0x98, 0xd5, + 0x70, 0xb4, 0x66, 0x2d, 0x02, 0x72, 0xbf, 0x44, 0x72, 0x5e, 0x91, 0xdc, 0x9e, 0x49, 0x32, 0x77, + 0x5d, 0x62, 0xf9, 0x13, 0x5c, 0xa9, 0x24, 0x2d, 0xcf, 0x42, 0x17, 0x16, 0x63, 0x1a, 0x60, 0x75, + 0x3a, 0x9f, 0x66, 0xfe, 0x5f, 0xbd, 0x6e, 0xed, 0x0e, 0x83, 0xf4, 0x70, 0xd4, 0x77, 0x7c, 0x11, + 0xb9, 0x0f, 0x14, 0xd7, 0xbd, 0x43, 0x1a, 0x70, 0x17, 0xbb, 0xe9, 0x47, 0xd7, 0x17, 0x51, 0x24, + 0xb8, 0x4b, 0xa5, 0x64, 0xa9, 0x73, 0x40, 0x83, 0xc4, 0x53, 0x66, 0x26, 0xca, 0x3d, 0x5f, 0x2a, + 0xf7, 0xab, 0xf9, 0x4a, 0x83, 0x14, 0xf9, 0xf9, 0x0c, 0x96, 0x75, 0xb8, 0x58, 0x84, 0x59, 0xe9, + 0x29, 0xf0, 0xe4, 0x07, 0x78, 0x5f, 0x9f, 0x7b, 0x5c, 0x64, 0x3f, 0x34, 0xcc, 0x1d, 0x77, 0x1c, + 0x8c, 0x64, 0x6b, 0x22, 0x12, 0xec, 0xe7, 0xfc, 0xe7, 0x8e, 0x1c, 0x3c, 0x72, 0xd3, 0x27, 0x31, + 0x93, 0xce, 0x3e, 0xf3, 0xbd, 0x4b, 0xda, 0xd0, 0x03, 0xb4, 0x43, 0xbe, 0x81, 0xb5, 0x11, 0x4f, + 0x18, 0x0d, 0x83, 0xa7, 0x6c, 0xd0, 0x8b, 0x79, 0x68, 0x2e, 0xbc, 0x93, 0xe5, 0x0b, 0x63, 0x2b, + 0x07, 0x3c, 0x24, 0x0f, 0xe1, 0x7c, 0x44, 0x93, 0x61, 0xc0, 0x7b, 0x49, 0x56, 0x19, 0x73, 0xf1, + 0x9d, 0x8c, 0xae, 0xe6, 0x36, 0xbc, 0xcc, 0x84, 0xbd, 0x81, 0x0d, 0xd8, 0x15, 0x83, 0x51, 0xc8, + 0xee, 0xf9, 0xbe, 0x18, 0xf1, 0x54, 0x4f, 0xa0, 0xed, 0xc3, 0xb5, 0xa9, 0x52, 0xcc, 0xff, 0x3e, + 0x2c, 0x53, 0xbc, 0xc3, 0xf6, 0xb4, 0xab, 0xf9, 0x47, 0x9d, 0x6f, 0x83, 0xf4, 0xb0, 0x43, 0x43, + 0xca, 0x7d, 0x3d, 0x6a, 0x85, 0xa6, 0xfd, 0x87, 0x01, 0xa4, 0x0e, 0x23, 0x04, 0x16, 0x39, 0x8d, + 0x18, 0xce, 0xbe, 0x3a, 0x13, 0x13, 0xce, 0xd1, 0xc1, 0x20, 0x61, 0x52, 0x62, 0x8f, 0xe8, 0x4f, + 0xc2, 0xe0, 0x5c, 0x3f, 0x57, 0x34, 0x17, 0x14, 0x93, 0x46, 0xa9, 0xd3, 0x75, 0x8f, 0xef, 0x89, + 0x80, 0x77, 0x3e, 0xce, 0x08, 0xfc, 0xf9, 0x6f, 0x6b, 0xe7, 0x0c, 0x09, 0xcb, 0x14, 0xa4, 0xa7, + 0x6d, 0xdb, 0x1c, 0x56, 0xee, 0x45, 0x51, 0x97, 0x26, 0x8f, 0x58, 0x4a, 0x3e, 0x81, 0xa5, 0x48, + 0x9d, 0xb0, 0xf9, 0xd6, 0xab, 0xc1, 0xe7, 0x38, 0x0c, 0x18, 0xb1, 0xe4, 0x36, 0x2c, 0xd0, 0x28, + 0xc2, 0x79, 0xbc, 0x5c, 0xcb, 0x57, 0xb7, 0x8b, 0xf8, 0x0c, 0x65, 0xdf, 0x85, 0xcb, 0x79, 0x01, + 0x94, 0x6e, 0xb1, 0x19, 0x37, 0x60, 0xe5, 0x88, 0x25, 0x32, 0x10, 0x9c, 0x0d, 0x94, 0xf3, 0x65, + 0x6f, 0x7c, 0x61, 0x7f, 0x87, 0xf3, 0x5a, 0x28, 0x61, 0xb9, 0xbe, 0x80, 0x55, 0x1a, 0x45, 0xbd, + 0x9c, 0x87, 0xae, 0x58, 0xa3, 0xc6, 0x40, 0xc7, 0x87, 0x3c, 0x80, 0xea, 0x0b, 0x69, 0x9b, 0xb8, + 0x79, 0xf7, 0x44, 0x18, 0xd2, 0x94, 0x25, 0x34, 0xd4, 0x9d, 0xb2, 0x0f, 0x57, 0x6b, 0x12, 0x74, + 0x7b, 0x13, 0x2e, 0xf9, 0xc5, 0x6d, 0x6f, 0xc0, 0xb8, 0x88, 0xb0, 0xa8, 0x17, 0xc7, 0xf7, 0xfb, + 0xd9, 0x75, 0xfb, 0xaf, 0x25, 0x78, 0x4f, 0x99, 0x21, 0x3f, 0xc3, 0x85, 0xd2, 0xcc, 0x93, 0x1b, + 0x33, 0xf6, 0xb8, 0xa2, 0x61, 0x9d, 0x6d, 0xdb, 0xdb, 0x9b, 0xcf, 0xfe, 0xfe, 0xff, 0xf9, 0xbc, + 0x45, 0x4c, 0xb7, 0xf2, 0xc6, 0x15, 0xeb, 0xe1, 0x99, 0x01, 0x6b, 0xe5, 0x47, 0x86, 0x9c, 0x6e, + 0x5b, 0xd7, 0xc6, 0xda, 0x9a, 0x05, 0x43, 0x0e, 0xd7, 0x15, 0x87, 0x6b, 0xa4, 0xf1, 0x36, 0x0e, + 0x92, 0x3c, 0x37, 0x80, 0xd4, 0x9f, 0x07, 0x72, 0xf3, 0x54, 0x0f, 0x93, 0x0f, 0x95, 0x75, 0xeb, + 0x2c, 0x50, 0x24, 0xb4, 0xa5, 0x08, 0x6d, 0x92, 0xe6, 0xdb, 0x08, 0xf5, 0xa4, 0x72, 0xff, 0x9b, + 0x01, 0x6b, 0xe5, 0x85, 0x40, 0xa6, 0xbb, 0x99, 0xba, 0x53, 0xac, 0xdb, 0x67, 0xc2, 0x22, 0xa7, + 0x6d, 0xc5, 0xe9, 0x3a, 0x69, 0x55, 0x39, 0x45, 0x0a, 0xdf, 0xd3, 0x4b, 0x84, 0x3c, 0x85, 0xf3, + 0x93, 0x3d, 0x4f, 0x3e, 0x9c, 0xee, 0xa5, 0x34, 0x46, 0xd6, 0x8d, 0xd3, 0x41, 0xc8, 0xa1, 0xa5, + 0x38, 0x34, 0xc8, 0xd5, 0x1a, 0x07, 0xf4, 0xf5, 0x8b, 0x01, 0x17, 0x2b, 0xcd, 0x4f, 0xa6, 0x77, + 0x41, 0x6d, 0x6e, 0xac, 0xed, 0x99, 0x38, 0x64, 0x61, 0x2b, 0x16, 0x1b, 0xc4, 0xaa, 0xb2, 0x18, + 0xcf, 0x50, 0xe7, 0xfe, 0x8b, 0xe3, 0xa6, 0xf1, 0xf2, 0xb8, 0x69, 0xfc, 0x77, 0xdc, 0x34, 0x7e, + 0x3d, 0x69, 0xce, 0xbd, 0x3c, 0x69, 0xce, 0xfd, 0x73, 0xd2, 0x9c, 0xfb, 0xfe, 0xce, 0xac, 0x47, + 0x59, 0x5b, 0x53, 0x5b, 0xaf, 0xbf, 0xa4, 0xfe, 0x99, 0xdd, 0x7d, 0x13, 0x00, 0x00, 0xff, 0xff, + 0x87, 0x56, 0xd6, 0x1b, 0x63, 0x0a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -784,13 +793,17 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type QueryClient interface { + // QueryPosition: Query one position on the given market for a user QueryPosition(ctx context.Context, in *QueryPositionRequest, opts ...grpc.CallOption) (*QueryPositionResponse, error) + // QueryPositions: Query all positions for a user QueryPositions(ctx context.Context, in *QueryPositionsRequest, opts ...grpc.CallOption) (*QueryPositionsResponse, error) // QueryPositionStore queries all of the positions in the KV store. QueryPositionStore(ctx context.Context, in *QueryPositionStoreRequest, opts ...grpc.CallOption) (*QueryPositionStoreResponse, error) - // Queries the reserve assets in a given pool, identified by a token pair. + // Queries the module accounts for x/perp ModuleAccounts(ctx context.Context, in *QueryModuleAccountsRequest, opts ...grpc.CallOption) (*QueryModuleAccountsResponse, error) + // QueryMarkets: Query all markets QueryMarkets(ctx context.Context, in *QueryMarketsRequest, opts ...grpc.CallOption) (*QueryMarketsResponse, error) + // QueryCollateral: Queries info about the collateral QueryCollateral(ctx context.Context, in *QueryCollateralRequest, opts ...grpc.CallOption) (*QueryCollateralResponse, error) } @@ -858,13 +871,17 @@ func (c *queryClient) QueryCollateral(ctx context.Context, in *QueryCollateralRe // QueryServer is the server API for Query service. type QueryServer interface { + // QueryPosition: Query one position on the given market for a user QueryPosition(context.Context, *QueryPositionRequest) (*QueryPositionResponse, error) + // QueryPositions: Query all positions for a user QueryPositions(context.Context, *QueryPositionsRequest) (*QueryPositionsResponse, error) // QueryPositionStore queries all of the positions in the KV store. QueryPositionStore(context.Context, *QueryPositionStoreRequest) (*QueryPositionStoreResponse, error) - // Queries the reserve assets in a given pool, identified by a token pair. + // Queries the module accounts for x/perp ModuleAccounts(context.Context, *QueryModuleAccountsRequest) (*QueryModuleAccountsResponse, error) + // QueryMarkets: Query all markets QueryMarkets(context.Context, *QueryMarketsRequest) (*QueryMarketsResponse, error) + // QueryCollateral: Queries info about the collateral QueryCollateral(context.Context, *QueryCollateralRequest) (*QueryCollateralResponse, error) } @@ -1557,17 +1574,10 @@ func (m *QueryCollateralResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l - if len(m.CollateralSubdenom) > 0 { - i -= len(m.CollateralSubdenom) - copy(dAtA[i:], m.CollateralSubdenom) - i = encodeVarintQuery(dAtA, i, uint64(len(m.CollateralSubdenom))) - i-- - dAtA[i] = 0x12 - } - if len(m.CollateralCreator) > 0 { - i -= len(m.CollateralCreator) - copy(dAtA[i:], m.CollateralCreator) - i = encodeVarintQuery(dAtA, i, uint64(len(m.CollateralCreator))) + if len(m.CollateralDenom) > 0 { + i -= len(m.CollateralDenom) + copy(dAtA[i:], m.CollateralDenom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.CollateralDenom))) i-- dAtA[i] = 0xa } @@ -1779,11 +1789,7 @@ func (m *QueryCollateralResponse) Size() (n int) { } var l int _ = l - l = len(m.CollateralCreator) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.CollateralSubdenom) + l = len(m.CollateralDenom) if l > 0 { n += 1 + l + sovQuery(uint64(l)) } @@ -3102,39 +3108,7 @@ func (m *QueryCollateralResponse) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CollateralCreator", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CollateralCreator = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CollateralSubdenom", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field CollateralDenom", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -3162,7 +3136,7 @@ func (m *QueryCollateralResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.CollateralSubdenom = string(dAtA[iNdEx:postIndex]) + m.CollateralDenom = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex diff --git a/x/perp/v2/types/tx.pb.go b/x/perp/v2/types/tx.pb.go index 77abdd52c..31ed8fd93 100644 --- a/x/perp/v2/types/tx.pb.go +++ b/x/perp/v2/types/tx.pb.go @@ -914,6 +914,96 @@ func (m *MsgDonateToEcosystemFundResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgDonateToEcosystemFundResponse proto.InternalMessageInfo +// MsgChangeCollateralDenom: Changes the collateral denom for the module. +// [Admin] Only callable by sudoers. +type MsgChangeCollateralDenom struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + NewDenom string `protobuf:"bytes,2,opt,name=new_denom,json=newDenom,proto3" json:"new_denom,omitempty"` +} + +func (m *MsgChangeCollateralDenom) Reset() { *m = MsgChangeCollateralDenom{} } +func (m *MsgChangeCollateralDenom) String() string { return proto.CompactTextString(m) } +func (*MsgChangeCollateralDenom) ProtoMessage() {} +func (*MsgChangeCollateralDenom) Descriptor() ([]byte, []int) { + return fileDescriptor_b95cda40bf0a0f91, []int{15} +} +func (m *MsgChangeCollateralDenom) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChangeCollateralDenom) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChangeCollateralDenom.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgChangeCollateralDenom) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChangeCollateralDenom.Merge(m, src) +} +func (m *MsgChangeCollateralDenom) XXX_Size() int { + return m.Size() +} +func (m *MsgChangeCollateralDenom) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChangeCollateralDenom.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChangeCollateralDenom proto.InternalMessageInfo + +func (m *MsgChangeCollateralDenom) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgChangeCollateralDenom) GetNewDenom() string { + if m != nil { + return m.NewDenom + } + return "" +} + +type MsgChangeCollateralDenomResponse struct { +} + +func (m *MsgChangeCollateralDenomResponse) Reset() { *m = MsgChangeCollateralDenomResponse{} } +func (m *MsgChangeCollateralDenomResponse) String() string { return proto.CompactTextString(m) } +func (*MsgChangeCollateralDenomResponse) ProtoMessage() {} +func (*MsgChangeCollateralDenomResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b95cda40bf0a0f91, []int{16} +} +func (m *MsgChangeCollateralDenomResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChangeCollateralDenomResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChangeCollateralDenomResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgChangeCollateralDenomResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChangeCollateralDenomResponse.Merge(m, src) +} +func (m *MsgChangeCollateralDenomResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgChangeCollateralDenomResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChangeCollateralDenomResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChangeCollateralDenomResponse proto.InternalMessageInfo + func init() { proto.RegisterType((*MsgSettlePosition)(nil), "nibiru.perp.v2.MsgSettlePosition") proto.RegisterType((*MsgRemoveMargin)(nil), "nibiru.perp.v2.MsgRemoveMargin") @@ -932,90 +1022,95 @@ func init() { proto.RegisterType((*MsgPartialCloseResponse)(nil), "nibiru.perp.v2.MsgPartialCloseResponse") proto.RegisterType((*MsgDonateToEcosystemFund)(nil), "nibiru.perp.v2.MsgDonateToEcosystemFund") proto.RegisterType((*MsgDonateToEcosystemFundResponse)(nil), "nibiru.perp.v2.MsgDonateToEcosystemFundResponse") + proto.RegisterType((*MsgChangeCollateralDenom)(nil), "nibiru.perp.v2.MsgChangeCollateralDenom") + proto.RegisterType((*MsgChangeCollateralDenomResponse)(nil), "nibiru.perp.v2.MsgChangeCollateralDenomResponse") } func init() { proto.RegisterFile("nibiru/perp/v2/tx.proto", fileDescriptor_b95cda40bf0a0f91) } var fileDescriptor_b95cda40bf0a0f91 = []byte{ - // 1234 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0x4d, 0x6f, 0x1b, 0xc5, - 0x1b, 0xf7, 0xda, 0xae, 0x9b, 0x3c, 0x4e, 0x9d, 0x74, 0xfe, 0x69, 0xe2, 0x5a, 0x95, 0x93, 0xff, - 0x0a, 0x95, 0x70, 0xc8, 0x2e, 0x35, 0x48, 0x08, 0x24, 0x40, 0x49, 0x5f, 0x10, 0xa8, 0x6e, 0xdd, - 0x6d, 0xd5, 0xa2, 0x02, 0xda, 0x4e, 0xec, 0xf1, 0x66, 0xd4, 0xf5, 0x8c, 0xbb, 0x33, 0x6b, 0x35, - 0x3d, 0xf6, 0x13, 0x70, 0xe0, 0x2b, 0x70, 0x45, 0xe2, 0x00, 0x5c, 0xf8, 0x00, 0x3d, 0xf6, 0x88, - 0x38, 0x54, 0xa8, 0xb9, 0x70, 0xa5, 0xe2, 0x03, 0xa0, 0xd9, 0x37, 0xaf, 0xdd, 0x6d, 0x62, 0x9b, - 0x34, 0x12, 0x88, 0x93, 0x3d, 0xfb, 0x3c, 0xcf, 0xef, 0x79, 0x7f, 0xe6, 0x05, 0x56, 0x19, 0xdd, - 0xa1, 0x9e, 0x6f, 0xf6, 0x89, 0xd7, 0x37, 0x07, 0x0d, 0x53, 0x3e, 0x34, 0xfa, 0x1e, 0x97, 0x1c, - 0x55, 0x42, 0x82, 0xa1, 0x08, 0xc6, 0xa0, 0x51, 0x3b, 0xe7, 0x70, 0xee, 0xb8, 0xc4, 0xc4, 0x7d, - 0x6a, 0x62, 0xc6, 0xb8, 0xc4, 0x92, 0x72, 0x26, 0x42, 0xee, 0x5a, 0xbd, 0xcd, 0x45, 0x8f, 0x0b, - 0x73, 0x07, 0x0b, 0x62, 0x0e, 0x2e, 0xec, 0x10, 0x89, 0x2f, 0x98, 0x6d, 0x4e, 0x59, 0x44, 0x5f, - 0x76, 0xb8, 0xc3, 0x83, 0xbf, 0xa6, 0xfa, 0x17, 0x7d, 0xad, 0x8d, 0x29, 0x17, 0x12, 0x4b, 0x12, - 0xd2, 0xf4, 0x6f, 0x34, 0x38, 0xdd, 0x14, 0xce, 0x4d, 0x22, 0xa5, 0x4b, 0x5a, 0x5c, 0x50, 0xa5, - 0x0e, 0xad, 0x40, 0x49, 0x10, 0xd6, 0x21, 0x5e, 0x55, 0x5b, 0xd7, 0x36, 0xe6, 0xad, 0x68, 0x85, - 0x9a, 0x50, 0xec, 0x63, 0xea, 0x55, 0xf3, 0xea, 0xeb, 0xf6, 0xfb, 0x4f, 0x9e, 0xad, 0xe5, 0x7e, - 0x7d, 0xb6, 0x76, 0xc1, 0xa1, 0x72, 0xd7, 0xdf, 0x31, 0xda, 0xbc, 0x67, 0x5e, 0x0b, 0x54, 0x5d, - 0xdc, 0xc5, 0x94, 0x99, 0x91, 0xda, 0x87, 0x66, 0x9b, 0xf7, 0x7a, 0x9c, 0x99, 0x58, 0x08, 0x22, - 0x8d, 0x16, 0xa6, 0x9e, 0x15, 0xc0, 0xa0, 0x2a, 0x9c, 0x1c, 0x10, 0x4f, 0x50, 0xce, 0xaa, 0x85, - 0x75, 0x6d, 0xa3, 0x68, 0xc5, 0x4b, 0xfd, 0x7b, 0x0d, 0x16, 0x9b, 0xc2, 0xb1, 0x48, 0x8f, 0x0f, - 0x48, 0x13, 0x7b, 0x0e, 0x3d, 0x36, 0xa3, 0xde, 0x83, 0x52, 0x2f, 0x50, 0x18, 0xd8, 0x54, 0x6e, - 0x9c, 0x35, 0xc2, 0xa0, 0x1b, 0x2a, 0xe8, 0x46, 0x14, 0x74, 0xe3, 0x22, 0xa7, 0x6c, 0xbb, 0xa8, - 0x74, 0x59, 0x11, 0xbb, 0xfe, 0xbb, 0x06, 0xab, 0x63, 0x36, 0x5b, 0x44, 0xf4, 0x39, 0x13, 0x04, - 0x7d, 0x04, 0x10, 0x72, 0xd9, 0xdc, 0x97, 0x81, 0xfd, 0x13, 0x00, 0xcf, 0x87, 0x22, 0xd7, 0x7d, - 0x89, 0xee, 0xc0, 0x62, 0xd7, 0x67, 0x1d, 0xca, 0x1c, 0xbb, 0x8f, 0xf7, 0x7a, 0x84, 0xc9, 0xc8, - 0x5d, 0x23, 0x72, 0xf7, 0x7c, 0xca, 0xdd, 0xa8, 0x48, 0xc2, 0x9f, 0x4d, 0xd1, 0xb9, 0x6f, 0xca, - 0xbd, 0x3e, 0x11, 0xc6, 0x25, 0xd2, 0xb6, 0x2a, 0x11, 0x4c, 0x2b, 0x44, 0x41, 0xef, 0xc2, 0x5c, - 0x3f, 0xca, 0x7a, 0xe4, 0x6f, 0xd5, 0x18, 0x2d, 0x49, 0x23, 0xae, 0x0a, 0x2b, 0xe1, 0xd4, 0xbf, - 0xd3, 0x60, 0xa1, 0x29, 0x9c, 0xad, 0x4e, 0xe7, 0x1f, 0x92, 0x9b, 0x6f, 0x35, 0x58, 0x4e, 0x1b, - 0x9c, 0x24, 0x26, 0x23, 0xb0, 0xda, 0x91, 0x07, 0x36, 0x3f, 0x71, 0x60, 0xff, 0x0c, 0xdb, 0xb1, - 0xe9, 0xbb, 0x92, 0x5e, 0xa5, 0x0f, 0x7c, 0xda, 0xc1, 0x92, 0xbc, 0x32, 0xba, 0x37, 0x60, 0xc1, - 0x8d, 0x98, 0xd4, 0x90, 0xa8, 0xe6, 0xd7, 0x0b, 0x1b, 0xe5, 0xc6, 0xe6, 0xb8, 0x9e, 0x97, 0x00, - 0x8d, 0xab, 0x43, 0x29, 0x6b, 0x04, 0xa2, 0x26, 0xa1, 0x9c, 0x22, 0x26, 0xf9, 0xd3, 0x8e, 0x26, - 0x7f, 0x2b, 0x50, 0x92, 0x1e, 0x56, 0x8e, 0xe4, 0x43, 0x47, 0xc2, 0x95, 0xfe, 0x63, 0x01, 0xce, - 0xbe, 0x64, 0x65, 0x92, 0x23, 0x3c, 0xe6, 0xa6, 0x16, 0xb8, 0xf9, 0xe1, 0xa1, 0x6e, 0xc6, 0x00, - 0x23, 0xee, 0x46, 0xdf, 0xc6, 0xdc, 0xfe, 0x21, 0x0f, 0xff, 0xcb, 0xe0, 0x52, 0x13, 0x4a, 0xf8, - 0xed, 0x36, 0x11, 0x22, 0x08, 0xc1, 0x9c, 0x15, 0x2f, 0xd1, 0x32, 0x9c, 0x20, 0x9e, 0xc7, 0x63, - 0x4f, 0xc2, 0x05, 0xba, 0x02, 0x95, 0x18, 0x97, 0x7b, 0x76, 0x97, 0x90, 0xc9, 0x0a, 0x55, 0xb3, - 0x4e, 0x0d, 0xc5, 0xae, 0x10, 0x82, 0x3e, 0x86, 0xb2, 0x72, 0xcb, 0x26, 0xdd, 0x00, 0xa4, 0x38, - 0x19, 0xc8, 0xbc, 0x92, 0xb9, 0xdc, 0x55, 0x00, 0xc3, 0x48, 0x9f, 0x48, 0x47, 0x3a, 0x49, 0x68, - 0xe9, 0x48, 0x12, 0xaa, 0xff, 0x54, 0x80, 0x8a, 0x8a, 0x3b, 0xf6, 0xee, 0x13, 0x79, 0xdd, 0x53, - 0x1a, 0x8e, 0x69, 0x14, 0x6c, 0x42, 0x51, 0xd0, 0x4e, 0x18, 0xdf, 0x4a, 0xe3, 0xec, 0x78, 0x31, - 0x5c, 0xa2, 0x1e, 0x69, 0x07, 0xa9, 0x0c, 0xd8, 0xd0, 0x97, 0x80, 0x1e, 0xf8, 0x5c, 0x12, 0x3b, - 0x00, 0xb2, 0x71, 0x8f, 0xfb, 0x4c, 0x06, 0x71, 0x9d, 0xae, 0xd5, 0x3f, 0x65, 0xd2, 0x5a, 0x0a, - 0x90, 0xb6, 0x14, 0xd0, 0x56, 0x80, 0x83, 0x3e, 0x83, 0x39, 0x97, 0x0c, 0x88, 0x87, 0x1d, 0x12, - 0xc6, 0x7b, 0xea, 0xf1, 0x91, 0xc8, 0x23, 0x02, 0xab, 0x2a, 0xbf, 0x23, 0x86, 0xda, 0x2e, 0xed, - 0x51, 0x19, 0x25, 0x6d, 0x5a, 0x73, 0x97, 0x15, 0x5c, 0xca, 0xda, 0xab, 0x0a, 0x4b, 0xdf, 0x3f, - 0x01, 0x2b, 0xa3, 0x99, 0x4b, 0x8a, 0x3e, 0x3d, 0xba, 0xb4, 0x49, 0x47, 0x17, 0xda, 0x85, 0x2a, - 0x79, 0xd8, 0xde, 0xc5, 0xcc, 0x21, 0x1d, 0x9b, 0x71, 0xf5, 0x0d, 0xbb, 0xf6, 0x00, 0xbb, 0x3e, - 0x99, 0x71, 0xaf, 0x5a, 0x49, 0xf0, 0xae, 0x45, 0x70, 0xb7, 0x15, 0x1a, 0xea, 0xc2, 0xea, 0x50, - 0x53, 0xac, 0xdf, 0x16, 0xf4, 0x51, 0x58, 0x0d, 0xd3, 0x2b, 0x3a, 0x93, 0xc0, 0xc5, 0x7e, 0xdd, - 0xa4, 0x8f, 0x32, 0xf7, 0x86, 0xe2, 0x91, 0xec, 0x0d, 0x37, 0x60, 0xc1, 0x23, 0xd8, 0xa5, 0x8f, - 0x94, 0xfd, 0xcc, 0x9d, 0xb1, 0x64, 0xca, 0x31, 0x46, 0x8b, 0xb9, 0xe8, 0x1e, 0x2c, 0xfb, 0x2c, - 0x0d, 0x6a, 0xe3, 0xae, 0x24, 0xde, 0x0c, 0x25, 0xa3, 0xa0, 0xd1, 0x10, 0xab, 0xc5, 0xdc, 0x2d, - 0x85, 0x84, 0x6e, 0xc3, 0x62, 0x74, 0x84, 0x91, 0xdc, 0x1e, 0x60, 0xdf, 0x95, 0xd5, 0x93, 0x33, - 0x81, 0x9f, 0x0a, 0x61, 0x6e, 0xf1, 0xdb, 0x0a, 0x04, 0x7d, 0x01, 0xa7, 0x93, 0x1c, 0xc6, 0x65, - 0x53, 0x9d, 0x9b, 0x09, 0x79, 0x29, 0x06, 0x8a, 0xeb, 0x45, 0xdf, 0x83, 0xa5, 0xa6, 0x70, 0x2e, - 0xba, 0x5c, 0x1c, 0xf7, 0xe1, 0x56, 0x7f, 0x51, 0x80, 0xea, 0xb8, 0xee, 0xa4, 0xc5, 0x0e, 0x6a, - 0x16, 0xed, 0xb8, 0x9a, 0x25, 0xff, 0x9a, 0x9b, 0xa5, 0xf0, 0x5a, 0x9a, 0xa5, 0xf8, 0xf7, 0x9b, - 0xe5, 0x73, 0x58, 0x1a, 0x96, 0x72, 0x7a, 0x9b, 0x9c, 0xde, 0xd8, 0xb8, 0x96, 0x6f, 0x85, 0x07, - 0x99, 0x9f, 0xc3, 0x7b, 0x4b, 0x0b, 0x7b, 0x92, 0x62, 0x37, 0xc8, 0xfd, 0x71, 0x6d, 0x88, 0xdb, - 0x6a, 0x43, 0x9c, 0x79, 0x04, 0x06, 0xb2, 0xfa, 0x1f, 0x85, 0xe0, 0x0a, 0x93, 0x36, 0xff, 0xbf, - 0x92, 0xfd, 0x97, 0x97, 0xec, 0x63, 0x2d, 0x98, 0x53, 0x97, 0x38, 0xc3, 0x92, 0xdc, 0xe2, 0x97, - 0xdb, 0x5c, 0xec, 0x09, 0x49, 0x7a, 0x57, 0x7c, 0xd6, 0x79, 0x65, 0xed, 0x5e, 0x83, 0xb9, 0x8e, - 0x12, 0x18, 0xde, 0x6e, 0x0e, 0x38, 0x9c, 0xae, 0x2a, 0x0b, 0x5f, 0x3c, 0x5b, 0x5b, 0xdc, 0xc3, - 0x3d, 0xf7, 0x03, 0x3d, 0x16, 0xd4, 0xad, 0x04, 0x43, 0xd7, 0x61, 0xfd, 0x55, 0x36, 0xc4, 0x05, - 0xd8, 0x78, 0x5c, 0x82, 0x42, 0x53, 0x38, 0xe8, 0x2e, 0x2c, 0x8c, 0xbc, 0x0b, 0xac, 0x65, 0x5c, - 0x04, 0xd2, 0x0c, 0xb5, 0x37, 0x0f, 0x61, 0x88, 0x35, 0xe8, 0x39, 0x74, 0x03, 0xe6, 0x87, 0x97, - 0xda, 0x73, 0x19, 0x72, 0x09, 0xb5, 0xf6, 0xc6, 0x41, 0xd4, 0x14, 0xe4, 0x3d, 0xa8, 0x8c, 0x5d, - 0xe7, 0xfe, 0x7f, 0xe8, 0xcd, 0xa5, 0xf6, 0xd6, 0xc4, 0x97, 0x1b, 0x3d, 0x87, 0xee, 0x40, 0x39, - 0x7d, 0x00, 0xaf, 0x67, 0xc9, 0x0e, 0xe9, 0xb5, 0xf3, 0x07, 0xd3, 0x53, 0xc0, 0x5f, 0xc1, 0xa9, - 0xd1, 0xad, 0x73, 0x3d, 0x43, 0x74, 0x84, 0xa3, 0xb6, 0x71, 0x18, 0x47, 0x0a, 0xfe, 0x2e, 0x2c, - 0x8c, 0x0c, 0xca, 0xac, 0x44, 0xa6, 0x19, 0x32, 0x13, 0x99, 0x35, 0xab, 0xf4, 0x1c, 0xb2, 0xa1, - 0x32, 0xf6, 0xa6, 0x95, 0x15, 0xf5, 0x51, 0x96, 0xa9, 0x8c, 0xf7, 0xe1, 0x4c, 0x76, 0xcb, 0x64, - 0x81, 0x64, 0x72, 0xd6, 0xde, 0x9e, 0x94, 0x73, 0xa8, 0x76, 0xfb, 0x93, 0x27, 0xcf, 0xeb, 0xda, - 0xd3, 0xe7, 0x75, 0xed, 0xb7, 0xe7, 0x75, 0xed, 0xeb, 0xfd, 0x7a, 0xee, 0xe9, 0x7e, 0x3d, 0xf7, - 0xcb, 0x7e, 0x3d, 0x77, 0x77, 0xf3, 0xb0, 0x8d, 0x23, 0x79, 0x7b, 0x54, 0xa3, 0x60, 0xa7, 0x14, - 0xbc, 0xff, 0xbd, 0xf3, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x63, 0xdb, 0xdc, 0xe2, 0x9a, 0x14, - 0x00, 0x00, + // 1287 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0xcd, 0x6f, 0x1b, 0x45, + 0x14, 0xf7, 0xc6, 0x6e, 0x9a, 0xbc, 0xa4, 0x4e, 0x3a, 0xa4, 0x89, 0x6b, 0x2a, 0x27, 0xac, 0x50, + 0x09, 0x87, 0xec, 0xd2, 0x80, 0x84, 0x40, 0x02, 0x94, 0x8f, 0x16, 0x81, 0xea, 0x36, 0xdd, 0x56, + 0x2d, 0x2a, 0xa0, 0xed, 0xc4, 0x1e, 0x6f, 0x46, 0xdd, 0x9d, 0x71, 0x77, 0x66, 0xdd, 0xa6, 0x47, + 0xfe, 0x02, 0x0e, 0xfc, 0x0b, 0x5c, 0x91, 0x38, 0x00, 0x17, 0xfe, 0x80, 0x1e, 0x7b, 0x44, 0x1c, + 0x2a, 0x94, 0x5c, 0xb8, 0x52, 0x71, 0xe1, 0x86, 0x66, 0xbf, 0xbc, 0x76, 0x37, 0x89, 0x6d, 0xd2, + 0x48, 0x20, 0x4e, 0xf6, 0xec, 0x7b, 0xef, 0xf7, 0xbe, 0xdf, 0x7c, 0xc0, 0x02, 0xa3, 0xdb, 0xd4, + 0x0f, 0xcc, 0x36, 0xf1, 0xdb, 0x66, 0x67, 0xd5, 0x94, 0x8f, 0x8c, 0xb6, 0xcf, 0x25, 0x47, 0xe5, + 0x88, 0x60, 0x28, 0x82, 0xd1, 0x59, 0xad, 0x5e, 0x70, 0x38, 0x77, 0x5c, 0x62, 0xe2, 0x36, 0x35, + 0x31, 0x63, 0x5c, 0x62, 0x49, 0x39, 0x13, 0x11, 0x77, 0xb5, 0xd6, 0xe0, 0xc2, 0xe3, 0xc2, 0xdc, + 0xc6, 0x82, 0x98, 0x9d, 0x4b, 0xdb, 0x44, 0xe2, 0x4b, 0x66, 0x83, 0x53, 0x16, 0xd3, 0xe7, 0x1c, + 0xee, 0xf0, 0xf0, 0xaf, 0xa9, 0xfe, 0xc5, 0x5f, 0xab, 0x7d, 0xca, 0x85, 0xc4, 0x92, 0x44, 0x34, + 0xfd, 0x1b, 0x0d, 0xce, 0xd6, 0x85, 0x73, 0x93, 0x48, 0xe9, 0x92, 0x2d, 0x2e, 0xa8, 0x52, 0x87, + 0xe6, 0x61, 0x5c, 0x10, 0xd6, 0x24, 0x7e, 0x45, 0x5b, 0xd2, 0x96, 0x27, 0xad, 0x78, 0x85, 0xea, + 0x50, 0x6a, 0x63, 0xea, 0x57, 0xc6, 0xd4, 0xd7, 0xf5, 0xf7, 0x9e, 0x3c, 0x5b, 0x2c, 0xfc, 0xfa, + 0x6c, 0xf1, 0x92, 0x43, 0xe5, 0x4e, 0xb0, 0x6d, 0x34, 0xb8, 0x67, 0x5e, 0x0b, 0x55, 0x6d, 0xec, + 0x60, 0xca, 0xcc, 0x58, 0xed, 0x23, 0xb3, 0xc1, 0x3d, 0x8f, 0x33, 0x13, 0x0b, 0x41, 0xa4, 0xb1, + 0x85, 0xa9, 0x6f, 0x85, 0x30, 0xa8, 0x02, 0xa7, 0x3b, 0xc4, 0x17, 0x94, 0xb3, 0x4a, 0x71, 0x49, + 0x5b, 0x2e, 0x59, 0xc9, 0x52, 0xff, 0x5e, 0x83, 0x99, 0xba, 0x70, 0x2c, 0xe2, 0xf1, 0x0e, 0xa9, + 0x63, 0xdf, 0xa1, 0x27, 0x66, 0xd4, 0xbb, 0x30, 0xee, 0x85, 0x0a, 0x43, 0x9b, 0xa6, 0x56, 0xcf, + 0x1b, 0x51, 0xd0, 0x0d, 0x15, 0x74, 0x23, 0x0e, 0xba, 0xb1, 0xc1, 0x29, 0x5b, 0x2f, 0x29, 0x5d, + 0x56, 0xcc, 0xae, 0xff, 0xae, 0xc1, 0x42, 0x9f, 0xcd, 0x16, 0x11, 0x6d, 0xce, 0x04, 0x41, 0x1f, + 0x02, 0x44, 0x5c, 0x36, 0x0f, 0x64, 0x68, 0xff, 0x00, 0xc0, 0x93, 0x91, 0xc8, 0xf5, 0x40, 0xa2, + 0x3b, 0x30, 0xd3, 0x0a, 0x58, 0x93, 0x32, 0xc7, 0x6e, 0xe3, 0x5d, 0x8f, 0x30, 0x19, 0xbb, 0x6b, + 0xc4, 0xee, 0x5e, 0xcc, 0xb8, 0x1b, 0x17, 0x49, 0xf4, 0xb3, 0x22, 0x9a, 0xf7, 0x4d, 0xb9, 0xdb, + 0x26, 0xc2, 0xd8, 0x24, 0x0d, 0xab, 0x1c, 0xc3, 0x6c, 0x45, 0x28, 0xe8, 0x1d, 0x98, 0x68, 0xc7, + 0x59, 0x8f, 0xfd, 0xad, 0x18, 0xbd, 0x25, 0x69, 0x24, 0x55, 0x61, 0xa5, 0x9c, 0xfa, 0x77, 0x1a, + 0x4c, 0xd7, 0x85, 0xb3, 0xd6, 0x6c, 0xfe, 0x4b, 0x72, 0xf3, 0xad, 0x06, 0x73, 0x59, 0x83, 0xd3, + 0xc4, 0xe4, 0x04, 0x56, 0x3b, 0xf6, 0xc0, 0x8e, 0x0d, 0x1c, 0xd8, 0x3f, 0xa3, 0x76, 0xac, 0x07, + 0xae, 0xa4, 0x57, 0xe9, 0x83, 0x80, 0x36, 0xb1, 0x24, 0x07, 0x46, 0xf7, 0x06, 0x4c, 0xbb, 0x31, + 0x93, 0x1a, 0x12, 0x95, 0xb1, 0xa5, 0xe2, 0xf2, 0xd4, 0xea, 0x4a, 0xbf, 0x9e, 0x17, 0x00, 0x8d, + 0xab, 0x5d, 0x29, 0xab, 0x07, 0xa2, 0x2a, 0x61, 0x2a, 0x43, 0x4c, 0xf3, 0xa7, 0x1d, 0x4f, 0xfe, + 0xe6, 0x61, 0x5c, 0xfa, 0x58, 0x39, 0x32, 0x16, 0x39, 0x12, 0xad, 0xf4, 0x1f, 0x8b, 0x70, 0xfe, + 0x05, 0x2b, 0xd3, 0x1c, 0xe1, 0x3e, 0x37, 0xb5, 0xd0, 0xcd, 0x0f, 0x8e, 0x74, 0x33, 0x01, 0xe8, + 0x71, 0x37, 0xfe, 0xd6, 0xe7, 0xf6, 0x0f, 0x63, 0xf0, 0x4a, 0x0e, 0x97, 0x9a, 0x50, 0x22, 0x68, + 0x34, 0x88, 0x10, 0x61, 0x08, 0x26, 0xac, 0x64, 0x89, 0xe6, 0xe0, 0x14, 0xf1, 0x7d, 0x9e, 0x78, + 0x12, 0x2d, 0xd0, 0x15, 0x28, 0x27, 0xb8, 0xdc, 0xb7, 0x5b, 0x84, 0x0c, 0x56, 0xa8, 0x9a, 0x75, + 0xa6, 0x2b, 0x76, 0x85, 0x10, 0xf4, 0x11, 0x4c, 0x29, 0xb7, 0x6c, 0xd2, 0x0a, 0x41, 0x4a, 0x83, + 0x81, 0x4c, 0x2a, 0x99, 0xcb, 0x2d, 0x05, 0xd0, 0x8d, 0xf4, 0xa9, 0x6c, 0xa4, 0xd3, 0x84, 0x8e, + 0x1f, 0x4b, 0x42, 0xf5, 0x9f, 0x8a, 0x50, 0x56, 0x71, 0xc7, 0xfe, 0x7d, 0x22, 0xaf, 0xfb, 0x4a, + 0xc3, 0x09, 0x8d, 0x82, 0x15, 0x28, 0x09, 0xda, 0x8c, 0xe2, 0x5b, 0x5e, 0x3d, 0xdf, 0x5f, 0x0c, + 0x9b, 0xd4, 0x27, 0x8d, 0x30, 0x95, 0x21, 0x1b, 0xfa, 0x02, 0xd0, 0x83, 0x80, 0x4b, 0x62, 0x87, + 0x40, 0x36, 0xf6, 0x78, 0xc0, 0x64, 0x18, 0xd7, 0xe1, 0x5a, 0xfd, 0x13, 0x26, 0xad, 0xd9, 0x10, + 0x69, 0x4d, 0x01, 0xad, 0x85, 0x38, 0xe8, 0x53, 0x98, 0x70, 0x49, 0x87, 0xf8, 0xd8, 0x21, 0x51, + 0xbc, 0x87, 0x1e, 0x1f, 0xa9, 0x3c, 0x22, 0xb0, 0xa0, 0xf2, 0xdb, 0x63, 0xa8, 0xed, 0x52, 0x8f, + 0xca, 0x38, 0x69, 0xc3, 0x9a, 0x3b, 0xa7, 0xe0, 0x32, 0xd6, 0x5e, 0x55, 0x58, 0xfa, 0xfe, 0x29, + 0x98, 0xef, 0xcd, 0x5c, 0x5a, 0xf4, 0xd9, 0xd1, 0xa5, 0x0d, 0x3a, 0xba, 0xd0, 0x0e, 0x54, 0xc8, + 0xa3, 0xc6, 0x0e, 0x66, 0x0e, 0x69, 0xda, 0x8c, 0xab, 0x6f, 0xd8, 0xb5, 0x3b, 0xd8, 0x0d, 0xc8, + 0x88, 0x7b, 0xd5, 0x7c, 0x8a, 0x77, 0x2d, 0x86, 0xbb, 0xad, 0xd0, 0x50, 0x0b, 0x16, 0xba, 0x9a, + 0x12, 0xfd, 0xb6, 0xa0, 0x8f, 0xa3, 0x6a, 0x18, 0x5e, 0xd1, 0xb9, 0x14, 0x2e, 0xf1, 0xeb, 0x26, + 0x7d, 0x9c, 0xbb, 0x37, 0x94, 0x8e, 0x65, 0x6f, 0xb8, 0x01, 0xd3, 0x3e, 0xc1, 0x2e, 0x7d, 0xac, + 0xec, 0x67, 0xee, 0x88, 0x25, 0x33, 0x95, 0x60, 0x6c, 0x31, 0x17, 0xdd, 0x83, 0xb9, 0x80, 0x65, + 0x41, 0x6d, 0xdc, 0x92, 0xc4, 0x1f, 0xa1, 0x64, 0x14, 0x34, 0xea, 0x62, 0x6d, 0x31, 0x77, 0x4d, + 0x21, 0xa1, 0xdb, 0x30, 0x13, 0x1f, 0x61, 0x24, 0xb7, 0x3b, 0x38, 0x70, 0x65, 0xe5, 0xf4, 0x48, + 0xe0, 0x67, 0x22, 0x98, 0x5b, 0xfc, 0xb6, 0x02, 0x41, 0x9f, 0xc3, 0xd9, 0x34, 0x87, 0x49, 0xd9, + 0x54, 0x26, 0x46, 0x42, 0x9e, 0x4d, 0x80, 0x92, 0x7a, 0xd1, 0x77, 0x61, 0xb6, 0x2e, 0x9c, 0x0d, + 0x97, 0x8b, 0x93, 0x3e, 0xdc, 0xea, 0xcf, 0x8b, 0x50, 0xe9, 0xd7, 0x9d, 0xb6, 0xd8, 0x61, 0xcd, + 0xa2, 0x9d, 0x54, 0xb3, 0x8c, 0xbd, 0xe4, 0x66, 0x29, 0xbe, 0x94, 0x66, 0x29, 0xfd, 0xf3, 0x66, + 0xf9, 0x0c, 0x66, 0xbb, 0xa5, 0x9c, 0xdd, 0x26, 0x87, 0x37, 0x36, 0xa9, 0xe5, 0x5b, 0xd1, 0x41, + 0xe6, 0xe7, 0xe8, 0xde, 0xb2, 0x85, 0x7d, 0x49, 0xb1, 0x1b, 0xe6, 0xfe, 0xa4, 0x36, 0xc4, 0x75, + 0xb5, 0x21, 0x8e, 0x3c, 0x02, 0x43, 0x59, 0xfd, 0x8f, 0x62, 0x78, 0x85, 0xc9, 0x9a, 0xff, 0x7f, + 0xc9, 0xfe, 0xc7, 0x4b, 0xf6, 0x2b, 0x2d, 0x9c, 0x53, 0x9b, 0x9c, 0x61, 0x49, 0x6e, 0xf1, 0xcb, + 0x0d, 0x2e, 0x76, 0x85, 0x24, 0xde, 0x95, 0x80, 0x35, 0x0f, 0xac, 0xdd, 0x6b, 0x30, 0xd1, 0x54, + 0x02, 0xdd, 0xdb, 0xcd, 0x21, 0x87, 0xd3, 0x05, 0x65, 0xe1, 0xf3, 0x67, 0x8b, 0x33, 0xbb, 0xd8, + 0x73, 0xdf, 0xd7, 0x13, 0x41, 0xdd, 0x4a, 0x31, 0x74, 0x1d, 0x96, 0x0e, 0xb2, 0x21, 0x29, 0x40, + 0xfd, 0x7a, 0x34, 0x4f, 0xc3, 0x44, 0x6e, 0x70, 0xd7, 0xc5, 0x92, 0xf8, 0xd8, 0xdd, 0x24, 0x8c, + 0x7b, 0x07, 0xda, 0xf9, 0x2a, 0x4c, 0x32, 0xf2, 0xd0, 0x6e, 0x2a, 0xa6, 0xf8, 0xa4, 0x3e, 0xc1, + 0xc8, 0xc3, 0x50, 0x28, 0x56, 0x9a, 0x0b, 0x98, 0x28, 0x5d, 0xfd, 0x6b, 0x1c, 0x8a, 0x75, 0xe1, + 0xa0, 0xbb, 0x30, 0xdd, 0xf3, 0x18, 0xb1, 0x98, 0x73, 0xfb, 0xc8, 0x32, 0x54, 0xdf, 0x38, 0x82, + 0x21, 0x75, 0xab, 0x80, 0x6e, 0xc0, 0x64, 0xf7, 0x26, 0x7d, 0x21, 0x47, 0x2e, 0xa5, 0x56, 0x5f, + 0x3f, 0x8c, 0x9a, 0x81, 0xbc, 0x07, 0xe5, 0xbe, 0x3b, 0xe4, 0x6b, 0x47, 0x5e, 0x97, 0xaa, 0x6f, + 0x0e, 0x7c, 0xa3, 0xd2, 0x0b, 0xe8, 0x0e, 0x4c, 0x65, 0x4f, 0xfd, 0xb5, 0x3c, 0xd9, 0x2e, 0xbd, + 0x7a, 0xf1, 0x70, 0x7a, 0x06, 0xf8, 0x4b, 0x38, 0xd3, 0xbb, 0x5f, 0x2f, 0xe5, 0x88, 0xf6, 0x70, + 0x54, 0x97, 0x8f, 0xe2, 0xc8, 0xc0, 0xdf, 0x85, 0xe9, 0x9e, 0xe9, 0x9c, 0x97, 0xc8, 0x2c, 0x43, + 0x6e, 0x22, 0xf3, 0x06, 0xa4, 0x5e, 0x40, 0x36, 0x94, 0xfb, 0x1e, 0xd2, 0xf2, 0xa2, 0xde, 0xcb, + 0x32, 0x94, 0xf1, 0x01, 0x9c, 0xcb, 0xef, 0xd3, 0x3c, 0x90, 0x5c, 0xce, 0xea, 0x5b, 0x83, 0x72, + 0xf6, 0xaa, 0xcd, 0x6f, 0xbb, 0x5c, 0xdb, 0xf3, 0x38, 0x73, 0xd5, 0x1e, 0xda, 0x79, 0x7a, 0x61, + 0xfd, 0xe3, 0x27, 0x7b, 0x35, 0xed, 0xe9, 0x5e, 0x4d, 0xfb, 0x6d, 0xaf, 0xa6, 0x7d, 0xbd, 0x5f, + 0x2b, 0x3c, 0xdd, 0xaf, 0x15, 0x7e, 0xd9, 0xaf, 0x15, 0xee, 0xae, 0x1c, 0xb5, 0x49, 0xa6, 0xef, + 0xac, 0x6a, 0xec, 0x6d, 0x8f, 0x87, 0x6f, 0x9d, 0x6f, 0xff, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x38, + 0x87, 0x87, 0xcc, 0x86, 0x15, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1038,6 +1133,7 @@ type MsgClient interface { PartialClose(ctx context.Context, in *MsgPartialClose, opts ...grpc.CallOption) (*MsgPartialCloseResponse, error) SettlePosition(ctx context.Context, in *MsgSettlePosition, opts ...grpc.CallOption) (*MsgClosePositionResponse, error) DonateToEcosystemFund(ctx context.Context, in *MsgDonateToEcosystemFund, opts ...grpc.CallOption) (*MsgDonateToEcosystemFundResponse, error) + ChangeCollateralDenom(ctx context.Context, in *MsgChangeCollateralDenom, opts ...grpc.CallOption) (*MsgChangeCollateralDenomResponse, error) } type msgClient struct { @@ -1120,6 +1216,15 @@ func (c *msgClient) DonateToEcosystemFund(ctx context.Context, in *MsgDonateToEc return out, nil } +func (c *msgClient) ChangeCollateralDenom(ctx context.Context, in *MsgChangeCollateralDenom, opts ...grpc.CallOption) (*MsgChangeCollateralDenomResponse, error) { + out := new(MsgChangeCollateralDenomResponse) + err := c.cc.Invoke(ctx, "/nibiru.perp.v2.Msg/ChangeCollateralDenom", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. type MsgServer interface { RemoveMargin(context.Context, *MsgRemoveMargin) (*MsgRemoveMarginResponse, error) @@ -1130,6 +1235,7 @@ type MsgServer interface { PartialClose(context.Context, *MsgPartialClose) (*MsgPartialCloseResponse, error) SettlePosition(context.Context, *MsgSettlePosition) (*MsgClosePositionResponse, error) DonateToEcosystemFund(context.Context, *MsgDonateToEcosystemFund) (*MsgDonateToEcosystemFundResponse, error) + ChangeCollateralDenom(context.Context, *MsgChangeCollateralDenom) (*MsgChangeCollateralDenomResponse, error) } // UnimplementedMsgServer can be embedded to have forward compatible implementations. @@ -1160,6 +1266,9 @@ func (*UnimplementedMsgServer) SettlePosition(ctx context.Context, req *MsgSettl func (*UnimplementedMsgServer) DonateToEcosystemFund(ctx context.Context, req *MsgDonateToEcosystemFund) (*MsgDonateToEcosystemFundResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method DonateToEcosystemFund not implemented") } +func (*UnimplementedMsgServer) ChangeCollateralDenom(ctx context.Context, req *MsgChangeCollateralDenom) (*MsgChangeCollateralDenomResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ChangeCollateralDenom not implemented") +} func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) @@ -1309,6 +1418,24 @@ func _Msg_DonateToEcosystemFund_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } +func _Msg_ChangeCollateralDenom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgChangeCollateralDenom) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ChangeCollateralDenom(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/nibiru.perp.v2.Msg/ChangeCollateralDenom", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ChangeCollateralDenom(ctx, req.(*MsgChangeCollateralDenom)) + } + return interceptor(ctx, in, info, handler) +} + var _Msg_serviceDesc = grpc.ServiceDesc{ ServiceName: "nibiru.perp.v2.Msg", HandlerType: (*MsgServer)(nil), @@ -1345,6 +1472,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "DonateToEcosystemFund", Handler: _Msg_DonateToEcosystemFund_Handler, }, + { + MethodName: "ChangeCollateralDenom", + Handler: _Msg_ChangeCollateralDenom_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "nibiru/perp/v2/tx.proto", @@ -2276,6 +2407,66 @@ func (m *MsgDonateToEcosystemFundResponse) MarshalToSizedBuffer(dAtA []byte) (in return len(dAtA) - i, nil } +func (m *MsgChangeCollateralDenom) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgChangeCollateralDenom) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChangeCollateralDenom) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.NewDenom) > 0 { + i -= len(m.NewDenom) + copy(dAtA[i:], m.NewDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.NewDenom))) + i-- + dAtA[i] = 0x12 + } + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintTx(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgChangeCollateralDenomResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgChangeCollateralDenomResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChangeCollateralDenomResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + func encodeVarintTx(dAtA []byte, offset int, v uint64) int { offset -= sovTx(v) base := offset @@ -2595,6 +2786,32 @@ func (m *MsgDonateToEcosystemFundResponse) Size() (n int) { return n } +func (m *MsgChangeCollateralDenom) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.NewDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgChangeCollateralDenomResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func sovTx(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -5295,6 +5512,170 @@ func (m *MsgDonateToEcosystemFundResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgChangeCollateralDenom) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgChangeCollateralDenom: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChangeCollateralDenom: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NewDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NewDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgChangeCollateralDenomResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgChangeCollateralDenomResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChangeCollateralDenomResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipTx(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/sudo/keeper/keeper.go b/x/sudo/keeper/keeper.go index 3b7a6a10b..f28a9169d 100644 --- a/x/sudo/keeper/keeper.go +++ b/x/sudo/keeper/keeper.go @@ -138,7 +138,7 @@ func (k Keeper) CheckPermissions( } contracts := state.Contracts - hasPermission := set.New(contracts...).Has(contract.String()) + hasPermission := set.New(contracts...).Has(contract.String()) || contract.String() == state.Root if !hasPermission { return fmt.Errorf( "insufficient permissions on smart contract: %s. The sudo contracts are: %s", diff --git a/x/tokenfactory/keeper/msg_server.go b/x/tokenfactory/keeper/msg_server.go index e8991585f..9f0a939b1 100644 --- a/x/tokenfactory/keeper/msg_server.go +++ b/x/tokenfactory/keeper/msg_server.go @@ -5,15 +5,15 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - grpccodes "google.golang.org/grpc/codes" - grpcstatus "google.golang.org/grpc/status" + + "github.com/NibiruChain/nibiru/x/common" "github.com/NibiruChain/nibiru/x/tokenfactory/types" ) var _ types.MsgServer = (*Keeper)(nil) -var errNilMsg error = grpcstatus.Errorf(grpccodes.InvalidArgument, "nil msg") +var errNilMsg error = common.ErrNilMsg() func (k Keeper) CreateDenom( goCtx context.Context, txMsg *types.MsgCreateDenom,