From a1e97a6b22a66fc897541c34c29633eaf898f47a Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Tue, 27 Aug 2024 17:57:00 -0400 Subject: [PATCH 001/127] update protos with simulation and better responses --- proto/neutron/dex/query.proto | 88 +- proto/neutron/dex/tx.proto | 79 +- x/dex/types/query.pb.go | 8732 +++++++++++++++++++++------------ x/dex/types/query.pb.gw.go | 498 ++ x/dex/types/tx.pb.go | 808 ++- 5 files changed, 6930 insertions(+), 3275 deletions(-) diff --git a/proto/neutron/dex/query.proto b/proto/neutron/dex/query.proto index ef524da0c..bf236a617 100644 --- a/proto/neutron/dex/query.proto +++ b/proto/neutron/dex/query.proto @@ -96,14 +96,16 @@ service Query { option (google.api.http).get = "/neutron/dex/pool_reserves/{pair_id}/{token_in}/{tick_index}/{fee}"; } - // Queries the simulated result of a multihop swap + // DEPRECATED Queries the simulated result of a multihop swap rpc EstimateMultiHopSwap(QueryEstimateMultiHopSwapRequest) returns (QueryEstimateMultiHopSwapResponse) { option (google.api.http).get = "/neutron/dex/estimate_multi_hop_swap"; + option deprecated = true; } - // Queries the simulated result of a PlaceLimit order + // DEPRECATED Queries the simulated result of a PlaceLimit order rpc EstimatePlaceLimitOrder(QueryEstimatePlaceLimitOrderRequest) returns (QueryEstimatePlaceLimitOrderResponse) { option (google.api.http).get = "/neutron/dex/estimate_place_limit_order"; + option deprecated = true; } // Queries a pool by pair, tick and fee @@ -126,6 +128,36 @@ service Query { option (google.api.http).get = "/neutron/dex/pool_metadata"; } + // Simulates MsgDeposit + rpc SimulateDeposit(QuerySimulateDepositRequest) returns (QuerySimulateDepositResponse) { + option (google.api.http).get = "/neutron/dex/simulate_deposit"; + } + + // Simulates MsgWithdrawal + rpc SimulateWithdrawal(QuerySimulateWithdrawalRequest) returns (QuerySimulateWithdrawalResponse) { + option (google.api.http).get = "/neutron/dex/simulate_withdrawal"; + } + + // Simulates MsgPlaceLimitOrder + rpc SimulatePlaceLimitOrder(QuerySimulatePlaceLimitOrderRequest) returns (QuerySimulatePlaceLimitOrderResponse) { + option (google.api.http).get = "/neutron/dex/simulate_place_limit_order"; + } + + // Simulates MsgWithdrawFilledLimitOrder + rpc SimulateWithdrawFilledLimitOrder(QuerySimulateWithdrawFilledLimitOrderRequest) returns (QuerySimulateWithdrawFilledLimitOrderResponse) { + option (google.api.http).get = "/neutron/dex/simulate_withdraw_filled_limit_order"; + } + + // Simulates MsgCancelLimitOrder + rpc SimulateCancelLimitOrder(QuerySimulateCancelLimitOrderRequest) returns (QuerySimulateCancelLimitOrderResponse) { + option (google.api.http).get = "/neutron/dex/simulate_cancel_limit_order"; + } + + // Simulates MsgMultiHopSwap + rpc SimulateMultiHopSwap(QuerySimulateMultiHopSwapRequest) returns (QuerySimulateMultiHopSwapResponse) { + option (google.api.http).get = "/neutron/dex/pool_metadata"; + } + // this line is used by starport scaffolding # 2 } @@ -260,6 +292,7 @@ message QueryGetPoolReservesResponse { } message QueryEstimateMultiHopSwapRequest { + // DEPRECATED: Use QuerySimulateMultiHopSwap string creator = 1; string receiver = 2; repeated MultiHopRoute routes = 3; @@ -290,6 +323,7 @@ message QueryEstimateMultiHopSwapResponse { } message QueryEstimatePlaceLimitOrderRequest { + // DEPRECATED: Use QuerySimulatePlaceLimitOrder string creator = 1; string receiver = 2; string token_in = 3; @@ -378,4 +412,54 @@ message QueryAllPoolMetadataResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } +message QuerySimulateDepositRequest { + MsgDeposit msg = 1; +} + +message QuerySimulateDepositResponse { + MsgDepositResponse resp = 1; +} + + +message QuerySimulateWithdrawalRequest { + MsgWithdrawal msg = 1; +} + +message QuerySimulateWithdrawalResponse { + MsgWithdrawalResponse resp =1; +} + + +message QuerySimulatePlaceLimitOrderRequest { + MsgPlaceLimitOrder msg =1; +} + +message QuerySimulatePlaceLimitOrderResponse { + MsgPlaceLimitOrderResponse resp =1; +} + +message QuerySimulateWithdrawFilledLimitOrderRequest { + MsgWithdrawFilledLimitOrder msg = 1; +} + +message QuerySimulateWithdrawFilledLimitOrderResponse { + MsgWithdrawFilledLimitOrderResponse resp = 1; +} + +message QuerySimulateCancelLimitOrderRequest { + MsgCancelLimitOrder msg = 1; +} + +message QuerySimulateCancelLimitOrderResponse { + MsgCancelLimitOrderResponse resp = 1; +} + +message QuerySimulateMultiHopSwapRequest { + MsgMultiHopSwap msg = 1; +} + +message QuerySimulateMultiHopSwapResponse { + MsgMultiHopSwapResponse resp = 1; +} + // this line is used by starport scaffolding # 3 diff --git a/proto/neutron/dex/tx.proto b/proto/neutron/dex/tx.proto index 093591440..9240ab774 100644 --- a/proto/neutron/dex/tx.proto +++ b/proto/neutron/dex/tx.proto @@ -75,6 +75,12 @@ message MsgDepositResponse { (gogoproto.jsontag) = "reserve1_deposited" ]; repeated FailedDeposit failed_deposits = 3; + repeated cosmos.base.v1beta1.Coin shares_issued = 4 [ + (gogoproto.moretags) = "yaml:\"shares_issued\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "shares_issued" + ]; } message MsgWithdrawal { @@ -95,7 +101,26 @@ message MsgWithdrawal { repeated uint64 fees = 7; } -message MsgWithdrawalResponse {} +message MsgWithdrawalResponse { +repeated string reserve0_withdrawn = 1 [ + (gogoproto.moretags) = "yaml:\"reserve0_withdrawn\"", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "reserve0_deposited" + ]; + repeated string reserve1_withdrawn = 2 [ + (gogoproto.moretags) = "yaml:\"reserve1_withdrawn\"", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "reserve1_deposited" + ]; + repeated cosmos.base.v1beta1.Coin shares_burned = 3 [ + (gogoproto.moretags) = "yaml:\"shares_burned\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "shares_issued" + ]; +} enum LimitOrderType { GOOD_TIL_CANCELLED = 0; @@ -161,6 +186,14 @@ message MsgPlaceLimitOrderResponse { (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", (gogoproto.jsontag) = "taker_coin_out" ]; + + // Total amount of the token in that was immediately swapped for takerOutCoin + cosmos.base.v1beta1.Coin taker_coin_in = 4 [ + (gogoproto.moretags) = "yaml:\"taker_coin_in\"", + (gogoproto.nullable) = false, + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.jsontag) = "taker_coin_in" + ]; } message MsgWithdrawFilledLimitOrder { @@ -171,7 +204,23 @@ message MsgWithdrawFilledLimitOrder { string tranche_key = 2; } -message MsgWithdrawFilledLimitOrderResponse {} +message MsgWithdrawFilledLimitOrderResponse { + // Total amount of taker reserves that were withdrawn + cosmos.base.v1beta1.Coin taker_coin_out = 1 [ + (gogoproto.moretags) = "yaml:\"taker_coin_out\"", + (gogoproto.nullable) = false, + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.jsontag) = "taker_coin_out" + ]; + // Total amount of maker reserves that were withdrawn --only applies to inactive LimitOrders + cosmos.base.v1beta1.Coin maker_coin_out = 2 [ + (gogoproto.moretags) = "yaml:\"maker_coin_out\"", + (gogoproto.nullable) = false, + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.jsontag) = "maker_coin_out" + ]; + +} message MsgCancelLimitOrder { option (amino.name) = "dex/MsgCancelLimitOrder"; @@ -181,7 +230,22 @@ message MsgCancelLimitOrder { string tranche_key = 2; } -message MsgCancelLimitOrderResponse {} +message MsgCancelLimitOrderResponse { + // Total amount of taker reserves that were withdrawn + cosmos.base.v1beta1.Coin taker_coin_out = 1 [ + (gogoproto.moretags) = "yaml:\"taker_coin_out\"", + (gogoproto.nullable) = false, + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.jsontag) = "taker_coin_out" + ]; + // Total amount of maker reserves that were canceled + cosmos.base.v1beta1.Coin maker_coin_out = 2 [ + (gogoproto.moretags) = "yaml:\"maker_coin_out\"", + (gogoproto.nullable) = false, + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.jsontag) = "maker_coin_out" + ]; +} message MultiHopRoute { repeated string hops = 1; @@ -213,10 +277,19 @@ message MsgMultiHopSwap { message MsgMultiHopSwapResponse { cosmos.base.v1beta1.Coin coin_out = 1 [ + (gogoproto.moretags) = "yaml:\"coin_out\"", (gogoproto.nullable) = false, (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", (gogoproto.jsontag) = "coin_out" ]; + MultiHopRoute route = 2; + repeated cosmos.base.v1beta1.Coin dust = 3 [ + (gogoproto.moretags) = "yaml:\"dust\"", + (gogoproto.nullable) = false, + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.jsontag) = "dust" + ]; + } message MsgUpdateParams { diff --git a/x/dex/types/query.pb.go b/x/dex/types/query.pb.go index 9450a4a07..9e9335bf6 100644 --- a/x/dex/types/query.pb.go +++ b/x/dex/types/query.pb.go @@ -1327,6 +1327,7 @@ func (m *QueryGetPoolReservesResponse) GetPoolReserves() *PoolReserves { } type QueryEstimateMultiHopSwapRequest struct { + // DEPRECATED: Use QuerySimulateMultiHopSwap Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Receiver string `protobuf:"bytes,2,opt,name=receiver,proto3" json:"receiver,omitempty"` Routes []*MultiHopRoute `protobuf:"bytes,3,rep,name=routes,proto3" json:"routes,omitempty"` @@ -1436,6 +1437,7 @@ func (m *QueryEstimateMultiHopSwapResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryEstimateMultiHopSwapResponse proto.InternalMessageInfo type QueryEstimatePlaceLimitOrderRequest struct { + // DEPRECATED: Use QuerySimulatePlaceLimitOrder Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Receiver string `protobuf:"bytes,2,opt,name=receiver,proto3" json:"receiver,omitempty"` TokenIn string `protobuf:"bytes,3,opt,name=token_in,json=tokenIn,proto3" json:"token_in,omitempty"` @@ -1909,1395 +1911,1731 @@ func (m *QueryAllPoolMetadataResponse) GetPagination() *query.PageResponse { return nil } -func init() { - proto.RegisterType((*QueryParamsRequest)(nil), "neutron.dex.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "neutron.dex.QueryParamsResponse") - proto.RegisterType((*QueryGetLimitOrderTrancheUserRequest)(nil), "neutron.dex.QueryGetLimitOrderTrancheUserRequest") - proto.RegisterType((*QueryGetLimitOrderTrancheUserResponse)(nil), "neutron.dex.QueryGetLimitOrderTrancheUserResponse") - proto.RegisterType((*QueryAllLimitOrderTrancheUserRequest)(nil), "neutron.dex.QueryAllLimitOrderTrancheUserRequest") - proto.RegisterType((*QueryAllLimitOrderTrancheUserResponse)(nil), "neutron.dex.QueryAllLimitOrderTrancheUserResponse") - proto.RegisterType((*QueryGetLimitOrderTrancheRequest)(nil), "neutron.dex.QueryGetLimitOrderTrancheRequest") - proto.RegisterType((*QueryGetLimitOrderTrancheResponse)(nil), "neutron.dex.QueryGetLimitOrderTrancheResponse") - proto.RegisterType((*QueryAllLimitOrderTrancheRequest)(nil), "neutron.dex.QueryAllLimitOrderTrancheRequest") - proto.RegisterType((*QueryAllLimitOrderTrancheResponse)(nil), "neutron.dex.QueryAllLimitOrderTrancheResponse") - proto.RegisterType((*QueryAllUserDepositsRequest)(nil), "neutron.dex.QueryAllUserDepositsRequest") - proto.RegisterType((*QueryAllUserDepositsResponse)(nil), "neutron.dex.QueryAllUserDepositsResponse") - proto.RegisterType((*QueryAllLimitOrderTrancheUserByAddressRequest)(nil), "neutron.dex.QueryAllLimitOrderTrancheUserByAddressRequest") - proto.RegisterType((*QueryAllLimitOrderTrancheUserByAddressResponse)(nil), "neutron.dex.QueryAllLimitOrderTrancheUserByAddressResponse") - proto.RegisterType((*QueryAllTickLiquidityRequest)(nil), "neutron.dex.QueryAllTickLiquidityRequest") - proto.RegisterType((*QueryAllTickLiquidityResponse)(nil), "neutron.dex.QueryAllTickLiquidityResponse") - proto.RegisterType((*QueryGetInactiveLimitOrderTrancheRequest)(nil), "neutron.dex.QueryGetInactiveLimitOrderTrancheRequest") - proto.RegisterType((*QueryGetInactiveLimitOrderTrancheResponse)(nil), "neutron.dex.QueryGetInactiveLimitOrderTrancheResponse") - proto.RegisterType((*QueryAllInactiveLimitOrderTrancheRequest)(nil), "neutron.dex.QueryAllInactiveLimitOrderTrancheRequest") - proto.RegisterType((*QueryAllInactiveLimitOrderTrancheResponse)(nil), "neutron.dex.QueryAllInactiveLimitOrderTrancheResponse") - proto.RegisterType((*QueryAllPoolReservesRequest)(nil), "neutron.dex.QueryAllPoolReservesRequest") - proto.RegisterType((*QueryAllPoolReservesResponse)(nil), "neutron.dex.QueryAllPoolReservesResponse") - proto.RegisterType((*QueryGetPoolReservesRequest)(nil), "neutron.dex.QueryGetPoolReservesRequest") - proto.RegisterType((*QueryGetPoolReservesResponse)(nil), "neutron.dex.QueryGetPoolReservesResponse") - proto.RegisterType((*QueryEstimateMultiHopSwapRequest)(nil), "neutron.dex.QueryEstimateMultiHopSwapRequest") - proto.RegisterType((*QueryEstimateMultiHopSwapResponse)(nil), "neutron.dex.QueryEstimateMultiHopSwapResponse") - proto.RegisterType((*QueryEstimatePlaceLimitOrderRequest)(nil), "neutron.dex.QueryEstimatePlaceLimitOrderRequest") - proto.RegisterType((*QueryEstimatePlaceLimitOrderResponse)(nil), "neutron.dex.QueryEstimatePlaceLimitOrderResponse") - proto.RegisterType((*QueryPoolRequest)(nil), "neutron.dex.QueryPoolRequest") - proto.RegisterType((*QueryPoolByIDRequest)(nil), "neutron.dex.QueryPoolByIDRequest") - proto.RegisterType((*QueryPoolResponse)(nil), "neutron.dex.QueryPoolResponse") - proto.RegisterType((*QueryGetPoolMetadataRequest)(nil), "neutron.dex.QueryGetPoolMetadataRequest") - proto.RegisterType((*QueryGetPoolMetadataResponse)(nil), "neutron.dex.QueryGetPoolMetadataResponse") - proto.RegisterType((*QueryAllPoolMetadataRequest)(nil), "neutron.dex.QueryAllPoolMetadataRequest") - proto.RegisterType((*QueryAllPoolMetadataResponse)(nil), "neutron.dex.QueryAllPoolMetadataResponse") +type QuerySimulateDepositRequest struct { + Msg *MsgDeposit `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` } -func init() { proto.RegisterFile("neutron/dex/query.proto", fileDescriptor_b6613ea5fce61e9c) } - -var fileDescriptor_b6613ea5fce61e9c = []byte{ - // 2332 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0x4d, 0x6c, 0x1c, 0x49, - 0x15, 0x4e, 0x7b, 0x1c, 0xc7, 0x2e, 0x3b, 0xb1, 0x5d, 0xb6, 0x37, 0x93, 0xb1, 0xe3, 0xb1, 0x7b, - 0x37, 0xb1, 0x63, 0xf0, 0x74, 0x6c, 0x36, 0xbb, 0xab, 0x2c, 0x0b, 0x78, 0xf0, 0xae, 0x33, 0xec, - 0x46, 0x31, 0xbd, 0x66, 0x7f, 0xc2, 0x4a, 0xad, 0xf6, 0x74, 0xc5, 0x6e, 0xb9, 0xa7, 0xbb, 0xd3, - 0x5d, 0x63, 0x7b, 0x14, 0xe5, 0xb2, 0xdc, 0x10, 0x87, 0xc0, 0xf2, 0x23, 0x16, 0x69, 0x39, 0x20, - 0x0e, 0x08, 0x21, 0x40, 0x42, 0xdc, 0xb8, 0x20, 0x81, 0x56, 0x08, 0xa1, 0x95, 0xf6, 0x82, 0x40, - 0x1a, 0x50, 0xc2, 0x29, 0x5c, 0x90, 0x0f, 0x9c, 0x51, 0x55, 0xbf, 0x9e, 0xe9, 0x9e, 0xa9, 0x9e, - 0x1e, 0x3b, 0xc3, 0x6a, 0x4f, 0xee, 0xae, 0x7a, 0xaf, 0xdf, 0xf7, 0xbe, 0x7a, 0xf5, 0x5e, 0xd5, - 0x1b, 0xa3, 0xf3, 0x36, 0xa9, 0x52, 0xcf, 0xb1, 0x15, 0x83, 0x1c, 0x2a, 0x77, 0xab, 0xc4, 0xab, - 0x15, 0x5c, 0xcf, 0xa1, 0x0e, 0x1e, 0x86, 0x89, 0x82, 0x41, 0x0e, 0x73, 0x4b, 0x65, 0xc7, 0xaf, - 0x38, 0xbe, 0xb2, 0xad, 0xfb, 0x24, 0x90, 0x52, 0xf6, 0x57, 0xb6, 0x09, 0xd5, 0x57, 0x14, 0x57, - 0xdf, 0x31, 0x6d, 0x9d, 0x9a, 0x8e, 0x1d, 0x28, 0xe6, 0x66, 0xa3, 0xb2, 0xa1, 0x54, 0xd9, 0x31, - 0xc3, 0xf9, 0xc9, 0x1d, 0x67, 0xc7, 0xe1, 0x8f, 0x0a, 0x7b, 0x82, 0xd1, 0x99, 0x1d, 0xc7, 0xd9, - 0xb1, 0x88, 0xa2, 0xbb, 0xa6, 0xa2, 0xdb, 0xb6, 0x43, 0xf9, 0x27, 0x7d, 0x98, 0xcd, 0xc3, 0x2c, - 0x7f, 0xdb, 0xae, 0xde, 0x51, 0xa8, 0x59, 0x21, 0x3e, 0xd5, 0x2b, 0x2e, 0x08, 0xcc, 0x45, 0xdd, - 0x30, 0x88, 0xeb, 0xf8, 0x26, 0xd5, 0x3c, 0x52, 0x76, 0x3c, 0x03, 0x24, 0x2e, 0x45, 0x25, 0x2c, - 0xb3, 0x62, 0x52, 0xcd, 0xf1, 0x0c, 0xe2, 0x69, 0xd4, 0xd3, 0xed, 0xf2, 0x2e, 0x01, 0xb1, 0xa5, - 0x14, 0x31, 0xad, 0xea, 0x13, 0x0f, 0x64, 0xb3, 0x51, 0x59, 0x57, 0xf7, 0xf4, 0x4a, 0x88, 0xf7, - 0xa9, 0xd8, 0x8c, 0xe3, 0x58, 0xa1, 0x1f, 0xad, 0xe3, 0x5a, 0x85, 0x50, 0xdd, 0xd0, 0xa9, 0x9e, - 0x28, 0xe0, 0x11, 0x9f, 0x78, 0xfb, 0xc4, 0x17, 0x39, 0x4a, 0xcd, 0xf2, 0x9e, 0x66, 0x99, 0x77, - 0xab, 0xa6, 0x61, 0xd2, 0x5a, 0xc8, 0x6f, 0x4c, 0xe2, 0x30, 0x18, 0x95, 0x27, 0x11, 0xfe, 0x2a, - 0x5b, 0xb7, 0x4d, 0x0e, 0x53, 0x25, 0x77, 0xab, 0xc4, 0xa7, 0xf2, 0x0d, 0x34, 0x11, 0x1b, 0xf5, - 0x5d, 0xc7, 0xf6, 0x09, 0x5e, 0x41, 0x03, 0x81, 0x3b, 0x59, 0x69, 0x4e, 0x5a, 0x1c, 0x5e, 0x9d, - 0x28, 0x44, 0x82, 0xa1, 0x10, 0x08, 0x17, 0xfb, 0x3f, 0xac, 0xe7, 0x4f, 0xa9, 0x20, 0x28, 0xff, - 0x48, 0x42, 0xcf, 0xf0, 0x4f, 0x6d, 0x10, 0xfa, 0x1a, 0xa3, 0xed, 0x16, 0x63, 0x6d, 0x2b, 0x20, - 0xed, 0x6b, 0x3e, 0xf1, 0xc0, 0x24, 0xce, 0xa2, 0x33, 0xba, 0x61, 0x78, 0xc4, 0x0f, 0x3e, 0x3e, - 0xa4, 0x86, 0xaf, 0x38, 0x8f, 0x86, 0x43, 0x92, 0xf7, 0x48, 0x2d, 0xdb, 0xc7, 0x67, 0x11, 0x0c, - 0xbd, 0x4a, 0x6a, 0xf8, 0x05, 0x94, 0x2d, 0xeb, 0x56, 0x59, 0x3b, 0x30, 0xe9, 0xae, 0xe1, 0xe9, - 0x07, 0xfa, 0xb6, 0x45, 0x34, 0x7f, 0x57, 0xf7, 0x88, 0x9f, 0xcd, 0xcc, 0x49, 0x8b, 0x83, 0xea, - 0x53, 0x6c, 0xfe, 0xcd, 0xc8, 0xf4, 0xeb, 0x7c, 0x56, 0x7e, 0xd0, 0x87, 0x2e, 0xa5, 0xa0, 0x03, - 0xd7, 0x75, 0x94, 0x4d, 0x5a, 0x75, 0x20, 0x43, 0x8e, 0x91, 0x21, 0xfc, 0x1a, 0xe7, 0x46, 0x52, - 0xa7, 0x2c, 0xd1, 0x24, 0xfe, 0x86, 0x84, 0x26, 0x44, 0x2e, 0x70, 0x87, 0x8b, 0x2a, 0x53, 0xfd, - 0x5b, 0x3d, 0x3f, 0x15, 0x6c, 0x23, 0xdf, 0xd8, 0x2b, 0x98, 0x8e, 0x52, 0xd1, 0xe9, 0x6e, 0xa1, - 0x64, 0xd3, 0xc7, 0xf5, 0xbc, 0x48, 0xf7, 0xa8, 0x9e, 0xcf, 0xd5, 0xf4, 0x8a, 0x75, 0x5d, 0x16, - 0x4c, 0xca, 0x2a, 0x3e, 0x68, 0xa7, 0xc4, 0x86, 0xf5, 0x5a, 0xb3, 0xac, 0x8e, 0xeb, 0xf5, 0x0a, - 0x42, 0xcd, 0x2d, 0x0e, 0x14, 0x5c, 0x2e, 0x04, 0xe0, 0x0a, 0x6c, 0x8f, 0x17, 0x82, 0xac, 0x01, - 0x3b, 0xbd, 0xb0, 0xa9, 0xef, 0x10, 0xd0, 0x55, 0x23, 0x9a, 0xf2, 0xc7, 0x12, 0x2c, 0x41, 0xb2, - 0xc1, 0xae, 0x96, 0x20, 0xd3, 0x8b, 0x25, 0xd8, 0x88, 0x39, 0xd5, 0xc7, 0x9d, 0x5a, 0x48, 0x75, - 0x2a, 0xc0, 0x17, 0xf3, 0xea, 0xfb, 0x12, 0x9a, 0x4b, 0x0c, 0xac, 0x90, 0xc2, 0xf3, 0xe8, 0x8c, - 0xab, 0x9b, 0x9e, 0x66, 0x1a, 0x10, 0xf2, 0x03, 0xec, 0xb5, 0x64, 0xe0, 0x8b, 0x08, 0xf1, 0x2d, - 0x6c, 0xda, 0x06, 0x39, 0xe4, 0x30, 0x32, 0xea, 0x10, 0x1b, 0x29, 0xb1, 0x01, 0x7c, 0x01, 0x0d, - 0x52, 0x67, 0x8f, 0xd8, 0x9a, 0x69, 0xf3, 0xf8, 0x1e, 0x52, 0xcf, 0xf0, 0xf7, 0x92, 0xdd, 0xba, - 0x57, 0xfa, 0x5b, 0xf7, 0x8a, 0x5c, 0x43, 0xf3, 0x1d, 0x70, 0x01, 0xd3, 0x5b, 0x68, 0x42, 0xc0, - 0x34, 0x2c, 0xf2, 0x6c, 0x67, 0x92, 0x81, 0xe0, 0xf1, 0x36, 0x82, 0xe5, 0x0f, 0x42, 0x4e, 0x44, - 0x2b, 0x9d, 0xca, 0x49, 0xd4, 0xe9, 0xbe, 0xb8, 0xd3, 0xf1, 0x50, 0xcc, 0x9c, 0x38, 0x14, 0x7f, - 0x2f, 0x01, 0x39, 0x62, 0x80, 0x69, 0xe4, 0x64, 0x9e, 0x80, 0x9c, 0xde, 0x45, 0xde, 0xcf, 0x25, - 0x34, 0x1d, 0x3a, 0xc1, 0x62, 0x7a, 0x3d, 0x28, 0x7a, 0x7e, 0x7a, 0x9e, 0x7d, 0x45, 0x00, 0xe1, - 0x04, 0x34, 0xe2, 0x25, 0x34, 0x6e, 0xda, 0x65, 0xab, 0x6a, 0x10, 0x8d, 0x57, 0x2a, 0x56, 0xc6, - 0x20, 0x0f, 0x8f, 0xc2, 0xc4, 0xa6, 0xe3, 0x58, 0xeb, 0x3a, 0xd5, 0xe5, 0x9f, 0x4a, 0x68, 0x46, - 0x8c, 0x16, 0xd8, 0xfe, 0x3c, 0x1a, 0x84, 0xb2, 0xed, 0x03, 0xc5, 0xb9, 0x18, 0xc5, 0xa0, 0xa0, - 0xf2, 0x92, 0x0e, 0xf4, 0x36, 0x34, 0x7a, 0xc7, 0xea, 0xb7, 0x25, 0xb4, 0xdc, 0x31, 0x4b, 0x15, - 0x6b, 0x6b, 0x01, 0x8d, 0x9f, 0x18, 0xcf, 0xf2, 0x1f, 0x25, 0x54, 0xe8, 0x16, 0x13, 0xb0, 0xf9, - 0x2a, 0x1a, 0x89, 0xc4, 0xae, 0x7f, 0xec, 0xb4, 0x39, 0xdc, 0x0c, 0xdc, 0x1e, 0x92, 0xfb, 0x7e, - 0x24, 0x08, 0xb6, 0xcc, 0xf2, 0xde, 0x6b, 0xe1, 0xc9, 0xe5, 0xd3, 0x90, 0x14, 0x7e, 0x2d, 0xa1, - 0x8b, 0x09, 0xe0, 0x80, 0xd4, 0x0d, 0x74, 0x2e, 0x7e, 0xe0, 0x12, 0x06, 0x6a, 0x4c, 0x17, 0xe8, - 0x3c, 0x4b, 0xa3, 0x83, 0xbd, 0x23, 0xf4, 0x03, 0x09, 0x2d, 0x86, 0x59, 0xbe, 0x64, 0xeb, 0x65, - 0x6a, 0xee, 0x93, 0x9e, 0x66, 0xdc, 0x78, 0x81, 0xca, 0xb4, 0x16, 0xa8, 0xd4, 0x2a, 0xf4, 0x1d, - 0x09, 0x5d, 0xe9, 0x02, 0x20, 0x10, 0x4c, 0xd0, 0x8c, 0x09, 0x42, 0xda, 0x93, 0xd6, 0xa5, 0x0b, - 0x66, 0x92, 0x39, 0xd9, 0x03, 0xd2, 0xd6, 0x2c, 0x2b, 0x95, 0xb4, 0x5e, 0x9d, 0x7e, 0xfe, 0x1e, - 0x12, 0xd1, 0xd9, 0x68, 0xd7, 0x44, 0x64, 0x7a, 0x40, 0x44, 0xef, 0xe2, 0xf0, 0x87, 0x91, 0x5a, - 0xc4, 0x52, 0xbe, 0x0a, 0x77, 0x96, 0x4f, 0xc3, 0xbe, 0xfe, 0x45, 0x24, 0xe9, 0xc4, 0xb1, 0x01, - 0xd9, 0xeb, 0xe8, 0x6c, 0xec, 0xa2, 0x05, 0xec, 0x5e, 0x88, 0xdf, 0x79, 0x22, 0x9a, 0x40, 0xec, - 0x88, 0x1b, 0x19, 0xeb, 0x1d, 0x97, 0xef, 0x86, 0x5c, 0x6e, 0x10, 0xda, 0x2b, 0x2e, 0x53, 0xb6, - 0xf1, 0x18, 0xca, 0xdc, 0x21, 0x84, 0x6f, 0xdf, 0x7e, 0x95, 0x3d, 0xca, 0x06, 0x70, 0xd6, 0x86, - 0x21, 0x99, 0x33, 0xe9, 0xd8, 0x9c, 0xc9, 0x3f, 0xcb, 0xc0, 0x41, 0xf1, 0x65, 0x9f, 0x9a, 0x15, - 0x9d, 0x92, 0x9b, 0x55, 0x8b, 0x9a, 0x37, 0x1c, 0xf7, 0xf5, 0x03, 0xdd, 0x8d, 0xd4, 0xd7, 0xb2, - 0x47, 0x74, 0xea, 0x78, 0x61, 0x7d, 0x85, 0x57, 0x9c, 0x43, 0x83, 0x1e, 0x29, 0x13, 0x73, 0x9f, - 0x78, 0xe0, 0x70, 0xe3, 0x1d, 0xaf, 0xa2, 0x01, 0xcf, 0xa9, 0x52, 0x7e, 0x31, 0x6c, 0xcf, 0xd1, - 0xa1, 0x1d, 0x95, 0x89, 0xa8, 0x20, 0x89, 0xbf, 0x8e, 0x86, 0xf4, 0x8a, 0x53, 0xb5, 0x29, 0x63, - 0x90, 0xe7, 0xb2, 0xe2, 0x17, 0xd8, 0x1d, 0xb7, 0xd3, 0x65, 0xac, 0xa9, 0x71, 0x54, 0xcf, 0x8f, - 0x05, 0x57, 0xb0, 0xc6, 0x90, 0xac, 0x0e, 0x06, 0xcf, 0x25, 0x1b, 0x7f, 0x4f, 0x42, 0x63, 0xe4, - 0xd0, 0xa4, 0xb0, 0x9f, 0x5d, 0xcf, 0x2c, 0x93, 0xec, 0x69, 0x6e, 0x64, 0x0f, 0x8c, 0x3c, 0xbb, - 0x63, 0xd2, 0xdd, 0xea, 0x76, 0xa1, 0xec, 0x54, 0x14, 0x40, 0xbb, 0xec, 0x78, 0x3b, 0xe1, 0xb3, - 0xb2, 0xff, 0xac, 0x52, 0xa5, 0xa6, 0xe5, 0x07, 0xf6, 0x37, 0x3d, 0x52, 0x5e, 0x27, 0xe5, 0xc7, - 0xf5, 0x7c, 0xdb, 0x77, 0x8f, 0xea, 0xf9, 0xf3, 0x01, 0x94, 0xd6, 0x19, 0x59, 0x3d, 0xc7, 0x86, - 0x78, 0x2a, 0xd8, 0x64, 0x03, 0xf8, 0x32, 0x1a, 0x75, 0x59, 0x68, 0x6c, 0x13, 0x9f, 0x6a, 0x9c, - 0x88, 0xec, 0x00, 0x3f, 0xc2, 0x9d, 0x65, 0xc3, 0x45, 0xb6, 0x9b, 0xd8, 0x20, 0xbb, 0xe8, 0xcc, - 0x77, 0x58, 0x2b, 0x88, 0x8b, 0xbb, 0x68, 0xb0, 0xec, 0x98, 0xb6, 0xe6, 0x54, 0x69, 0x23, 0x24, - 0xa2, 0x7b, 0x20, 0x8c, 0xfe, 0x2f, 0x3b, 0xa6, 0x5d, 0x7c, 0x11, 0xfc, 0x5e, 0x88, 0xf8, 0x0d, - 0xbd, 0xa3, 0xe0, 0xcf, 0xb2, 0x6f, 0xec, 0x29, 0xb4, 0xe6, 0x12, 0x9f, 0x2b, 0x3c, 0xae, 0xe7, - 0x1b, 0x5f, 0x57, 0xcf, 0xb0, 0xa7, 0x5b, 0x55, 0x2a, 0xbf, 0xdf, 0x8f, 0x9e, 0x8e, 0x01, 0xdb, - 0xb4, 0xf4, 0x72, 0x24, 0xd9, 0x3d, 0x59, 0x1c, 0x75, 0xb8, 0x82, 0x4d, 0xa3, 0xa1, 0x60, 0x8a, - 0x39, 0x1b, 0x94, 0xbe, 0x40, 0xf6, 0x56, 0x95, 0xe2, 0x02, 0x9a, 0x6c, 0xee, 0x38, 0xcd, 0xb4, - 0x35, 0xea, 0x70, 0xb9, 0xd3, 0x7c, 0xef, 0x8d, 0x35, 0xf6, 0x5e, 0xc9, 0xde, 0x72, 0x98, 0x7c, - 0x2c, 0xf6, 0x06, 0x7a, 0x1c, 0x7b, 0xd7, 0x11, 0x82, 0xfa, 0x51, 0x73, 0x49, 0xf6, 0xcc, 0x9c, - 0xb4, 0x78, 0x6e, 0x75, 0x3a, 0xa9, 0x78, 0xd4, 0x5c, 0xa2, 0x0e, 0x39, 0xe1, 0x23, 0xbe, 0x89, - 0x46, 0xc9, 0xa1, 0x6b, 0x7a, 0x3c, 0x39, 0x69, 0xd4, 0xac, 0x90, 0xec, 0x20, 0x5f, 0xd8, 0x5c, - 0x21, 0xe8, 0xc9, 0x15, 0xc2, 0x9e, 0x5c, 0x61, 0x2b, 0xec, 0xc9, 0x15, 0x07, 0xd9, 0x66, 0x7f, - 0xf0, 0x8f, 0xbc, 0xc4, 0xc2, 0x2d, 0x54, 0x66, 0xd3, 0xb8, 0x82, 0xce, 0x56, 0xf4, 0xc3, 0xb5, - 0x00, 0x25, 0x23, 0x64, 0x88, 0xfb, 0x7a, 0x23, 0xad, 0xe9, 0x71, 0xae, 0xa2, 0x1f, 0x6a, 0x7a, - 0x43, 0xed, 0xa8, 0x9e, 0x9f, 0x0a, 0x1c, 0x8e, 0x8f, 0xcb, 0xea, 0x48, 0xe3, 0xf3, 0x2c, 0x38, - 0xfe, 0x93, 0x81, 0x2e, 0x47, 0x62, 0x70, 0x40, 0xe0, 0xfe, 0x40, 0x42, 0x67, 0xa9, 0x43, 0x75, - 0x8b, 0xad, 0x15, 0x0b, 0xad, 0xf4, 0xf0, 0x7d, 0xeb, 0xf8, 0xe1, 0x1b, 0x37, 0x71, 0x54, 0xcf, - 0x4f, 0x06, 0x4e, 0xc4, 0x86, 0x65, 0x75, 0x98, 0xbf, 0x97, 0x6c, 0xa6, 0x85, 0xdf, 0x93, 0xd0, - 0x88, 0x7f, 0xa0, 0xbb, 0x0d, 0x60, 0x7d, 0x69, 0xc0, 0xde, 0x38, 0x3e, 0xb0, 0x98, 0x85, 0xa3, - 0x7a, 0x7e, 0x22, 0xc0, 0x15, 0x1d, 0x95, 0x55, 0xc4, 0x5e, 0x01, 0x15, 0xe3, 0x8b, 0xcf, 0x3a, - 0x55, 0x1a, 0xc0, 0xca, 0xfc, 0x3f, 0xf8, 0x8a, 0x99, 0x68, 0xf2, 0x15, 0x1b, 0x96, 0xd5, 0x61, - 0xf6, 0x7e, 0xab, 0x4a, 0x99, 0x96, 0xfc, 0x0e, 0x1a, 0x0b, 0x5a, 0x9a, 0xbc, 0xd2, 0x3c, 0x59, - 0x03, 0x06, 0x0a, 0x63, 0xa6, 0x59, 0x18, 0x15, 0x34, 0xd9, 0xf8, 0x7a, 0xb1, 0x56, 0x5a, 0x8f, - 0x5a, 0x60, 0x05, 0x11, 0x2c, 0xf4, 0xab, 0x03, 0xec, 0xb5, 0x64, 0xc8, 0x5f, 0x42, 0xe3, 0x11, - 0x38, 0x10, 0x6d, 0x9f, 0x41, 0xfd, 0x6c, 0x1a, 0x62, 0x6c, 0xbc, 0xad, 0x6a, 0x42, 0xb5, 0xe4, - 0x42, 0xf2, 0x72, 0xfc, 0x3c, 0x70, 0x13, 0x1a, 0xc6, 0xa1, 0xe5, 0x73, 0xa8, 0xaf, 0x61, 0xb4, - 0xcf, 0x34, 0x5a, 0x4b, 0x77, 0x53, 0xbc, 0x59, 0xba, 0x37, 0xa3, 0x8d, 0xe7, 0xc4, 0xd2, 0x1d, - 0x6a, 0x42, 0xa3, 0x77, 0x24, 0x3a, 0x26, 0x93, 0xf8, 0x81, 0xaf, 0x15, 0x54, 0xaf, 0x8e, 0xcd, - 0xad, 0x87, 0x37, 0x91, 0x37, 0x6e, 0x8b, 0x37, 0x99, 0xae, 0xbc, 0x71, 0x23, 0x63, 0x3d, 0x3b, - 0xbc, 0xad, 0xfe, 0x37, 0x8b, 0x4e, 0x73, 0xbc, 0x78, 0x17, 0x0d, 0x04, 0x7d, 0x72, 0x9c, 0x8f, - 0x61, 0x69, 0x6f, 0xc2, 0xe7, 0xe6, 0x92, 0x05, 0x02, 0x13, 0xf2, 0xf4, 0xbb, 0x1f, 0xff, 0xeb, - 0xbd, 0xbe, 0x29, 0x3c, 0xa1, 0xb4, 0xff, 0xe2, 0x80, 0xff, 0x20, 0xa1, 0x29, 0xe1, 0x5d, 0x1e, - 0xaf, 0xb4, 0x7f, 0x38, 0xa5, 0x3b, 0x9f, 0x5b, 0x3d, 0x8e, 0x0a, 0xa0, 0x7b, 0x99, 0xa3, 0xfb, - 0x22, 0x7e, 0x49, 0xe9, 0xe6, 0xb7, 0x13, 0xe5, 0x1e, 0xf4, 0x47, 0xee, 0x2b, 0xf7, 0x22, 0x97, - 0xc7, 0xfb, 0xf8, 0x57, 0x12, 0xca, 0x0a, 0x0d, 0xad, 0x59, 0x96, 0xc8, 0x95, 0x94, 0xc6, 0xb5, - 0xc8, 0x95, 0xb4, 0xd6, 0xb3, 0xbc, 0xcc, 0x5d, 0x59, 0xc0, 0x97, 0xba, 0x72, 0x05, 0xff, 0x45, - 0x42, 0xf3, 0x49, 0x90, 0x1b, 0x4d, 0x19, 0x7c, 0xbd, 0x7b, 0x20, 0xad, 0xdd, 0xa5, 0xdc, 0x8b, - 0x27, 0xd2, 0x05, 0x6f, 0xae, 0x72, 0x6f, 0x96, 0xf0, 0x62, 0xcc, 0x1b, 0xbe, 0x08, 0xd1, 0xee, - 0x50, 0x73, 0x45, 0xf0, 0x9f, 0x25, 0x34, 0xde, 0x7e, 0x4f, 0x5c, 0xee, 0x2e, 0x28, 0x42, 0xcc, - 0x85, 0x6e, 0xc5, 0x01, 0xe6, 0x5b, 0x1c, 0xa6, 0x8a, 0x37, 0xd3, 0x48, 0x57, 0xee, 0x41, 0x16, - 0x67, 0xa1, 0x03, 0xa7, 0x32, 0xf6, 0xd8, 0xc8, 0xe0, 0xad, 0x21, 0xf5, 0x1b, 0x09, 0x4d, 0xb6, - 0xd9, 0x65, 0xe1, 0xb4, 0xdc, 0x1d, 0xad, 0x1d, 0x3c, 0xea, 0xd4, 0x3a, 0x96, 0x5f, 0xe2, 0x1e, - 0x3d, 0x8f, 0xaf, 0x9d, 0xc8, 0x23, 0xfc, 0x5d, 0x09, 0x8d, 0x46, 0x9b, 0xa4, 0x0c, 0xf1, 0xa2, - 0x10, 0x82, 0xa0, 0xf1, 0x9b, 0xbb, 0xd2, 0x85, 0x24, 0xe0, 0xfc, 0x2c, 0xc7, 0x79, 0x19, 0x3f, - 0xd3, 0x1e, 0x20, 0x61, 0x6b, 0x35, 0x12, 0x1c, 0x3f, 0x91, 0xd0, 0x58, 0xac, 0xbb, 0xc5, 0x70, - 0x89, 0xad, 0x89, 0xba, 0x7b, 0xb9, 0xa5, 0x6e, 0x44, 0x01, 0xd9, 0x0b, 0x1c, 0xd9, 0x2a, 0xbe, - 0xaa, 0x24, 0xff, 0xde, 0x29, 0x26, 0xef, 0x4f, 0x7d, 0xe8, 0x42, 0x62, 0x87, 0x05, 0x5f, 0x13, - 0xc6, 0x66, 0x5a, 0x1b, 0x28, 0xf7, 0xdc, 0x71, 0xd5, 0xc0, 0x8d, 0xdf, 0x49, 0xdc, 0x8f, 0xdf, - 0x4a, 0xb7, 0xdf, 0xc6, 0x6f, 0xc6, 0x5c, 0xb9, 0x63, 0x5a, 0x16, 0x31, 0xb4, 0x5e, 0x44, 0xf9, - 0xdb, 0xb1, 0x0f, 0x77, 0x6a, 0x1c, 0x1d, 0xfb, 0xd3, 0xff, 0x96, 0xd0, 0x4c, 0xa2, 0x97, 0x6c, - 0xf9, 0xaf, 0x09, 0xd7, 0xf4, 0x24, 0x7c, 0x76, 0xd3, 0x18, 0x93, 0xdf, 0xe1, 0x74, 0xbe, 0x71, - 0xfb, 0x0a, 0x5e, 0xe8, 0x92, 0x4d, 0x7c, 0xa5, 0x6b, 0x76, 0xf0, 0x8f, 0x25, 0x34, 0x1a, 0x6d, - 0x5a, 0x24, 0xef, 0x3b, 0x41, 0x63, 0x26, 0x61, 0xdf, 0x89, 0xda, 0x27, 0xf2, 0xf3, 0xdc, 0x8d, - 0x15, 0xac, 0x28, 0x89, 0x3f, 0xf7, 0x8b, 0x83, 0xfb, 0x97, 0x12, 0x1a, 0x89, 0x7e, 0x51, 0x04, - 0x4f, 0xdc, 0x37, 0x12, 0xc1, 0x4b, 0xe8, 0xee, 0xc8, 0x5f, 0xe1, 0xf0, 0xd6, 0x71, 0xf1, 0x98, - 0xf0, 0x5a, 0x22, 0xe9, 0x0e, 0x21, 0x3c, 0x69, 0x4c, 0x8a, 0x5a, 0x06, 0xa2, 0x14, 0xdc, 0xa1, - 0x0d, 0x24, 0x4a, 0xc1, 0x9d, 0x3a, 0x11, 0x09, 0xa9, 0x8d, 0x80, 0x8a, 0x56, 0x61, 0x3a, 0xda, - 0xae, 0xe3, 0x6a, 0xec, 0xee, 0xc0, 0x78, 0x3d, 0x9f, 0x70, 0x45, 0xc4, 0x57, 0x93, 0x2d, 0x8b, - 0x5b, 0x0d, 0xb9, 0x95, 0x63, 0x68, 0x00, 0x5c, 0x85, 0xc3, 0x6d, 0x0d, 0xeb, 0x06, 0x5c, 0x97, - 0xa9, 0x45, 0x63, 0x16, 0xdf, 0x47, 0xfd, 0x6c, 0xed, 0xf0, 0x45, 0xc1, 0xe1, 0xb1, 0x79, 0xf3, - 0xc9, 0xcd, 0x26, 0x4d, 0x83, 0xdd, 0xe7, 0xb8, 0xdd, 0xab, 0xb8, 0xd0, 0xb6, 0xd4, 0xb1, 0x15, - 0x6e, 0x5b, 0x56, 0x0f, 0x0d, 0x86, 0x57, 0x20, 0x3c, 0x2f, 0xb6, 0x11, 0xb9, 0x1e, 0xa5, 0xc2, - 0x78, 0x9a, 0xc3, 0xb8, 0x88, 0xa7, 0x45, 0x30, 0x82, 0x7b, 0xd5, 0x7d, 0xfc, 0x2d, 0x08, 0xfe, - 0xc6, 0xb1, 0x3d, 0x39, 0xf8, 0x5b, 0xee, 0x23, 0x1d, 0x82, 0xbf, 0xf5, 0x46, 0x21, 0x2f, 0x70, - 0x28, 0xf3, 0x38, 0xaf, 0x24, 0xfe, 0xaf, 0x8e, 0x72, 0x8f, 0xc1, 0xf9, 0x26, 0x64, 0x8b, 0xf0, - 0x0b, 0x9d, 0xb3, 0x45, 0x17, 0x88, 0x12, 0xee, 0x38, 0xb2, 0xcc, 0x11, 0xcd, 0xe0, 0x5c, 0x32, - 0xa2, 0xe2, 0xc6, 0x87, 0x0f, 0x67, 0xa5, 0x8f, 0x1e, 0xce, 0x4a, 0xff, 0x7c, 0x38, 0x2b, 0x3d, - 0x78, 0x34, 0x7b, 0xea, 0xa3, 0x47, 0xb3, 0xa7, 0xfe, 0xfa, 0x68, 0xf6, 0xd4, 0xed, 0xe5, 0xf4, - 0xae, 0xe2, 0x61, 0x50, 0x5c, 0xd9, 0xcd, 0x7b, 0x7b, 0x80, 0xb7, 0x73, 0x3e, 0xf7, 0xbf, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x80, 0xda, 0x02, 0xc7, 0x18, 0x26, 0x00, 0x00, +func (m *QuerySimulateDepositRequest) Reset() { *m = QuerySimulateDepositRequest{} } +func (m *QuerySimulateDepositRequest) String() string { return proto.CompactTextString(m) } +func (*QuerySimulateDepositRequest) ProtoMessage() {} +func (*QuerySimulateDepositRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b6613ea5fce61e9c, []int{35} +} +func (m *QuerySimulateDepositRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySimulateDepositRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySimulateDepositRequest.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 *QuerySimulateDepositRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySimulateDepositRequest.Merge(m, src) +} +func (m *QuerySimulateDepositRequest) XXX_Size() int { + return m.Size() +} +func (m *QuerySimulateDepositRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySimulateDepositRequest.DiscardUnknown(m) } -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +var xxx_messageInfo_QuerySimulateDepositRequest proto.InternalMessageInfo -// QueryClient is the client API for Query service. -// -// 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 { - // Parameters queries the parameters of the module. - Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) - // Queries a LimitOrderTrancheUser by index. - LimitOrderTrancheUser(ctx context.Context, in *QueryGetLimitOrderTrancheUserRequest, opts ...grpc.CallOption) (*QueryGetLimitOrderTrancheUserResponse, error) - // Queries a list of LimitOrderTranchUser items. - LimitOrderTrancheUserAll(ctx context.Context, in *QueryAllLimitOrderTrancheUserRequest, opts ...grpc.CallOption) (*QueryAllLimitOrderTrancheUserResponse, error) - // Queries a list of LimitOrderTrancheUser items for a given address. - LimitOrderTrancheUserAllByAddress(ctx context.Context, in *QueryAllLimitOrderTrancheUserByAddressRequest, opts ...grpc.CallOption) (*QueryAllLimitOrderTrancheUserByAddressResponse, error) - // Queries a LimitOrderTranche by index. - LimitOrderTranche(ctx context.Context, in *QueryGetLimitOrderTrancheRequest, opts ...grpc.CallOption) (*QueryGetLimitOrderTrancheResponse, error) - // Queries a list of LimitOrderTranche items for a given pairID / TokenIn - // combination. - LimitOrderTrancheAll(ctx context.Context, in *QueryAllLimitOrderTrancheRequest, opts ...grpc.CallOption) (*QueryAllLimitOrderTrancheResponse, error) - // Queries a list of UserDeposits items. - UserDepositsAll(ctx context.Context, in *QueryAllUserDepositsRequest, opts ...grpc.CallOption) (*QueryAllUserDepositsResponse, error) - // Queries a list of TickLiquidity items. - TickLiquidityAll(ctx context.Context, in *QueryAllTickLiquidityRequest, opts ...grpc.CallOption) (*QueryAllTickLiquidityResponse, error) - // Queries a InactiveLimitOrderTranche by index. - InactiveLimitOrderTranche(ctx context.Context, in *QueryGetInactiveLimitOrderTrancheRequest, opts ...grpc.CallOption) (*QueryGetInactiveLimitOrderTrancheResponse, error) - // Queries a list of InactiveLimitOrderTranche items. - InactiveLimitOrderTrancheAll(ctx context.Context, in *QueryAllInactiveLimitOrderTrancheRequest, opts ...grpc.CallOption) (*QueryAllInactiveLimitOrderTrancheResponse, error) - // Queries a list of PoolReserves items. - PoolReservesAll(ctx context.Context, in *QueryAllPoolReservesRequest, opts ...grpc.CallOption) (*QueryAllPoolReservesResponse, error) - // Queries a PoolReserve by index - PoolReserves(ctx context.Context, in *QueryGetPoolReservesRequest, opts ...grpc.CallOption) (*QueryGetPoolReservesResponse, error) - // Queries the simulated result of a multihop swap - EstimateMultiHopSwap(ctx context.Context, in *QueryEstimateMultiHopSwapRequest, opts ...grpc.CallOption) (*QueryEstimateMultiHopSwapResponse, error) - // Queries the simulated result of a PlaceLimit order - EstimatePlaceLimitOrder(ctx context.Context, in *QueryEstimatePlaceLimitOrderRequest, opts ...grpc.CallOption) (*QueryEstimatePlaceLimitOrderResponse, error) - // Queries a pool by pair, tick and fee - Pool(ctx context.Context, in *QueryPoolRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) - // Queries a pool by ID - PoolByID(ctx context.Context, in *QueryPoolByIDRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) - // Queries a PoolMetadata by ID - PoolMetadata(ctx context.Context, in *QueryGetPoolMetadataRequest, opts ...grpc.CallOption) (*QueryGetPoolMetadataResponse, error) - // Queries a list of PoolMetadata items. - PoolMetadataAll(ctx context.Context, in *QueryAllPoolMetadataRequest, opts ...grpc.CallOption) (*QueryAllPoolMetadataResponse, error) +func (m *QuerySimulateDepositRequest) GetMsg() *MsgDeposit { + if m != nil { + return m.Msg + } + return nil } -type queryClient struct { - cc grpc1.ClientConn +type QuerySimulateDepositResponse struct { + Resp *MsgDepositResponse `protobuf:"bytes,1,opt,name=resp,proto3" json:"resp,omitempty"` } -func NewQueryClient(cc grpc1.ClientConn) QueryClient { - return &queryClient{cc} +func (m *QuerySimulateDepositResponse) Reset() { *m = QuerySimulateDepositResponse{} } +func (m *QuerySimulateDepositResponse) String() string { return proto.CompactTextString(m) } +func (*QuerySimulateDepositResponse) ProtoMessage() {} +func (*QuerySimulateDepositResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b6613ea5fce61e9c, []int{36} } - -func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { - out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/neutron.dex.Query/Params", in, out, opts...) - if err != nil { - return nil, err +func (m *QuerySimulateDepositResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySimulateDepositResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySimulateDepositResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return out, nil +} +func (m *QuerySimulateDepositResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySimulateDepositResponse.Merge(m, src) +} +func (m *QuerySimulateDepositResponse) XXX_Size() int { + return m.Size() +} +func (m *QuerySimulateDepositResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySimulateDepositResponse.DiscardUnknown(m) } -func (c *queryClient) LimitOrderTrancheUser(ctx context.Context, in *QueryGetLimitOrderTrancheUserRequest, opts ...grpc.CallOption) (*QueryGetLimitOrderTrancheUserResponse, error) { - out := new(QueryGetLimitOrderTrancheUserResponse) - err := c.cc.Invoke(ctx, "/neutron.dex.Query/LimitOrderTrancheUser", in, out, opts...) - if err != nil { - return nil, err +var xxx_messageInfo_QuerySimulateDepositResponse proto.InternalMessageInfo + +func (m *QuerySimulateDepositResponse) GetResp() *MsgDepositResponse { + if m != nil { + return m.Resp } - return out, nil + return nil } -func (c *queryClient) LimitOrderTrancheUserAll(ctx context.Context, in *QueryAllLimitOrderTrancheUserRequest, opts ...grpc.CallOption) (*QueryAllLimitOrderTrancheUserResponse, error) { - out := new(QueryAllLimitOrderTrancheUserResponse) - err := c.cc.Invoke(ctx, "/neutron.dex.Query/LimitOrderTrancheUserAll", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil +type QuerySimulateWithdrawalRequest struct { + Msg *MsgWithdrawal `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` } -func (c *queryClient) LimitOrderTrancheUserAllByAddress(ctx context.Context, in *QueryAllLimitOrderTrancheUserByAddressRequest, opts ...grpc.CallOption) (*QueryAllLimitOrderTrancheUserByAddressResponse, error) { - out := new(QueryAllLimitOrderTrancheUserByAddressResponse) - err := c.cc.Invoke(ctx, "/neutron.dex.Query/LimitOrderTrancheUserAllByAddress", in, out, opts...) - if err != nil { - return nil, err +func (m *QuerySimulateWithdrawalRequest) Reset() { *m = QuerySimulateWithdrawalRequest{} } +func (m *QuerySimulateWithdrawalRequest) String() string { return proto.CompactTextString(m) } +func (*QuerySimulateWithdrawalRequest) ProtoMessage() {} +func (*QuerySimulateWithdrawalRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b6613ea5fce61e9c, []int{37} +} +func (m *QuerySimulateWithdrawalRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySimulateWithdrawalRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySimulateWithdrawalRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return out, nil +} +func (m *QuerySimulateWithdrawalRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySimulateWithdrawalRequest.Merge(m, src) +} +func (m *QuerySimulateWithdrawalRequest) XXX_Size() int { + return m.Size() +} +func (m *QuerySimulateWithdrawalRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySimulateWithdrawalRequest.DiscardUnknown(m) } -func (c *queryClient) LimitOrderTranche(ctx context.Context, in *QueryGetLimitOrderTrancheRequest, opts ...grpc.CallOption) (*QueryGetLimitOrderTrancheResponse, error) { - out := new(QueryGetLimitOrderTrancheResponse) - err := c.cc.Invoke(ctx, "/neutron.dex.Query/LimitOrderTranche", in, out, opts...) - if err != nil { - return nil, err +var xxx_messageInfo_QuerySimulateWithdrawalRequest proto.InternalMessageInfo + +func (m *QuerySimulateWithdrawalRequest) GetMsg() *MsgWithdrawal { + if m != nil { + return m.Msg } - return out, nil + return nil } -func (c *queryClient) LimitOrderTrancheAll(ctx context.Context, in *QueryAllLimitOrderTrancheRequest, opts ...grpc.CallOption) (*QueryAllLimitOrderTrancheResponse, error) { - out := new(QueryAllLimitOrderTrancheResponse) - err := c.cc.Invoke(ctx, "/neutron.dex.Query/LimitOrderTrancheAll", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil +type QuerySimulateWithdrawalResponse struct { + Resp *MsgWithdrawalResponse `protobuf:"bytes,1,opt,name=resp,proto3" json:"resp,omitempty"` } -func (c *queryClient) UserDepositsAll(ctx context.Context, in *QueryAllUserDepositsRequest, opts ...grpc.CallOption) (*QueryAllUserDepositsResponse, error) { - out := new(QueryAllUserDepositsResponse) - err := c.cc.Invoke(ctx, "/neutron.dex.Query/UserDepositsAll", in, out, opts...) - if err != nil { - return nil, err +func (m *QuerySimulateWithdrawalResponse) Reset() { *m = QuerySimulateWithdrawalResponse{} } +func (m *QuerySimulateWithdrawalResponse) String() string { return proto.CompactTextString(m) } +func (*QuerySimulateWithdrawalResponse) ProtoMessage() {} +func (*QuerySimulateWithdrawalResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b6613ea5fce61e9c, []int{38} +} +func (m *QuerySimulateWithdrawalResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySimulateWithdrawalResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySimulateWithdrawalResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return out, nil +} +func (m *QuerySimulateWithdrawalResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySimulateWithdrawalResponse.Merge(m, src) +} +func (m *QuerySimulateWithdrawalResponse) XXX_Size() int { + return m.Size() +} +func (m *QuerySimulateWithdrawalResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySimulateWithdrawalResponse.DiscardUnknown(m) } -func (c *queryClient) TickLiquidityAll(ctx context.Context, in *QueryAllTickLiquidityRequest, opts ...grpc.CallOption) (*QueryAllTickLiquidityResponse, error) { - out := new(QueryAllTickLiquidityResponse) - err := c.cc.Invoke(ctx, "/neutron.dex.Query/TickLiquidityAll", in, out, opts...) - if err != nil { - return nil, err +var xxx_messageInfo_QuerySimulateWithdrawalResponse proto.InternalMessageInfo + +func (m *QuerySimulateWithdrawalResponse) GetResp() *MsgWithdrawalResponse { + if m != nil { + return m.Resp } - return out, nil + return nil } -func (c *queryClient) InactiveLimitOrderTranche(ctx context.Context, in *QueryGetInactiveLimitOrderTrancheRequest, opts ...grpc.CallOption) (*QueryGetInactiveLimitOrderTrancheResponse, error) { - out := new(QueryGetInactiveLimitOrderTrancheResponse) - err := c.cc.Invoke(ctx, "/neutron.dex.Query/InactiveLimitOrderTranche", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil +type QuerySimulatePlaceLimitOrderRequest struct { + Msg *MsgPlaceLimitOrder `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` } -func (c *queryClient) InactiveLimitOrderTrancheAll(ctx context.Context, in *QueryAllInactiveLimitOrderTrancheRequest, opts ...grpc.CallOption) (*QueryAllInactiveLimitOrderTrancheResponse, error) { - out := new(QueryAllInactiveLimitOrderTrancheResponse) - err := c.cc.Invoke(ctx, "/neutron.dex.Query/InactiveLimitOrderTrancheAll", in, out, opts...) - if err != nil { - return nil, err +func (m *QuerySimulatePlaceLimitOrderRequest) Reset() { *m = QuerySimulatePlaceLimitOrderRequest{} } +func (m *QuerySimulatePlaceLimitOrderRequest) String() string { return proto.CompactTextString(m) } +func (*QuerySimulatePlaceLimitOrderRequest) ProtoMessage() {} +func (*QuerySimulatePlaceLimitOrderRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b6613ea5fce61e9c, []int{39} +} +func (m *QuerySimulatePlaceLimitOrderRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySimulatePlaceLimitOrderRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySimulatePlaceLimitOrderRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return out, nil +} +func (m *QuerySimulatePlaceLimitOrderRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySimulatePlaceLimitOrderRequest.Merge(m, src) +} +func (m *QuerySimulatePlaceLimitOrderRequest) XXX_Size() int { + return m.Size() +} +func (m *QuerySimulatePlaceLimitOrderRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySimulatePlaceLimitOrderRequest.DiscardUnknown(m) } -func (c *queryClient) PoolReservesAll(ctx context.Context, in *QueryAllPoolReservesRequest, opts ...grpc.CallOption) (*QueryAllPoolReservesResponse, error) { - out := new(QueryAllPoolReservesResponse) - err := c.cc.Invoke(ctx, "/neutron.dex.Query/PoolReservesAll", in, out, opts...) - if err != nil { - return nil, err +var xxx_messageInfo_QuerySimulatePlaceLimitOrderRequest proto.InternalMessageInfo + +func (m *QuerySimulatePlaceLimitOrderRequest) GetMsg() *MsgPlaceLimitOrder { + if m != nil { + return m.Msg } - return out, nil + return nil } -func (c *queryClient) PoolReserves(ctx context.Context, in *QueryGetPoolReservesRequest, opts ...grpc.CallOption) (*QueryGetPoolReservesResponse, error) { - out := new(QueryGetPoolReservesResponse) - err := c.cc.Invoke(ctx, "/neutron.dex.Query/PoolReserves", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil +type QuerySimulatePlaceLimitOrderResponse struct { + Resp *MsgPlaceLimitOrderResponse `protobuf:"bytes,1,opt,name=resp,proto3" json:"resp,omitempty"` } -func (c *queryClient) EstimateMultiHopSwap(ctx context.Context, in *QueryEstimateMultiHopSwapRequest, opts ...grpc.CallOption) (*QueryEstimateMultiHopSwapResponse, error) { - out := new(QueryEstimateMultiHopSwapResponse) - err := c.cc.Invoke(ctx, "/neutron.dex.Query/EstimateMultiHopSwap", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil +func (m *QuerySimulatePlaceLimitOrderResponse) Reset() { *m = QuerySimulatePlaceLimitOrderResponse{} } +func (m *QuerySimulatePlaceLimitOrderResponse) String() string { return proto.CompactTextString(m) } +func (*QuerySimulatePlaceLimitOrderResponse) ProtoMessage() {} +func (*QuerySimulatePlaceLimitOrderResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b6613ea5fce61e9c, []int{40} } - -func (c *queryClient) EstimatePlaceLimitOrder(ctx context.Context, in *QueryEstimatePlaceLimitOrderRequest, opts ...grpc.CallOption) (*QueryEstimatePlaceLimitOrderResponse, error) { - out := new(QueryEstimatePlaceLimitOrderResponse) - err := c.cc.Invoke(ctx, "/neutron.dex.Query/EstimatePlaceLimitOrder", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil +func (m *QuerySimulatePlaceLimitOrderResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) } - -func (c *queryClient) Pool(ctx context.Context, in *QueryPoolRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) { - out := new(QueryPoolResponse) - err := c.cc.Invoke(ctx, "/neutron.dex.Query/Pool", in, out, opts...) - if err != nil { - return nil, err +func (m *QuerySimulatePlaceLimitOrderResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySimulatePlaceLimitOrderResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return out, nil +} +func (m *QuerySimulatePlaceLimitOrderResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySimulatePlaceLimitOrderResponse.Merge(m, src) +} +func (m *QuerySimulatePlaceLimitOrderResponse) XXX_Size() int { + return m.Size() +} +func (m *QuerySimulatePlaceLimitOrderResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySimulatePlaceLimitOrderResponse.DiscardUnknown(m) } -func (c *queryClient) PoolByID(ctx context.Context, in *QueryPoolByIDRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) { - out := new(QueryPoolResponse) - err := c.cc.Invoke(ctx, "/neutron.dex.Query/PoolByID", in, out, opts...) - if err != nil { - return nil, err +var xxx_messageInfo_QuerySimulatePlaceLimitOrderResponse proto.InternalMessageInfo + +func (m *QuerySimulatePlaceLimitOrderResponse) GetResp() *MsgPlaceLimitOrderResponse { + if m != nil { + return m.Resp } - return out, nil + return nil } -func (c *queryClient) PoolMetadata(ctx context.Context, in *QueryGetPoolMetadataRequest, opts ...grpc.CallOption) (*QueryGetPoolMetadataResponse, error) { - out := new(QueryGetPoolMetadataResponse) - err := c.cc.Invoke(ctx, "/neutron.dex.Query/PoolMetadata", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil +type QuerySimulateWithdrawFilledLimitOrderRequest struct { + Msg *MsgWithdrawFilledLimitOrder `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` } -func (c *queryClient) PoolMetadataAll(ctx context.Context, in *QueryAllPoolMetadataRequest, opts ...grpc.CallOption) (*QueryAllPoolMetadataResponse, error) { - out := new(QueryAllPoolMetadataResponse) - err := c.cc.Invoke(ctx, "/neutron.dex.Query/PoolMetadataAll", in, out, opts...) - if err != nil { - return nil, err +func (m *QuerySimulateWithdrawFilledLimitOrderRequest) Reset() { + *m = QuerySimulateWithdrawFilledLimitOrderRequest{} +} +func (m *QuerySimulateWithdrawFilledLimitOrderRequest) String() string { + return proto.CompactTextString(m) +} +func (*QuerySimulateWithdrawFilledLimitOrderRequest) ProtoMessage() {} +func (*QuerySimulateWithdrawFilledLimitOrderRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b6613ea5fce61e9c, []int{41} +} +func (m *QuerySimulateWithdrawFilledLimitOrderRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySimulateWithdrawFilledLimitOrderRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySimulateWithdrawFilledLimitOrderRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return out, nil } - -// QueryServer is the server API for Query service. -type QueryServer interface { - // Parameters queries the parameters of the module. - Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) - // Queries a LimitOrderTrancheUser by index. - LimitOrderTrancheUser(context.Context, *QueryGetLimitOrderTrancheUserRequest) (*QueryGetLimitOrderTrancheUserResponse, error) - // Queries a list of LimitOrderTranchUser items. - LimitOrderTrancheUserAll(context.Context, *QueryAllLimitOrderTrancheUserRequest) (*QueryAllLimitOrderTrancheUserResponse, error) - // Queries a list of LimitOrderTrancheUser items for a given address. - LimitOrderTrancheUserAllByAddress(context.Context, *QueryAllLimitOrderTrancheUserByAddressRequest) (*QueryAllLimitOrderTrancheUserByAddressResponse, error) - // Queries a LimitOrderTranche by index. - LimitOrderTranche(context.Context, *QueryGetLimitOrderTrancheRequest) (*QueryGetLimitOrderTrancheResponse, error) - // Queries a list of LimitOrderTranche items for a given pairID / TokenIn - // combination. - LimitOrderTrancheAll(context.Context, *QueryAllLimitOrderTrancheRequest) (*QueryAllLimitOrderTrancheResponse, error) - // Queries a list of UserDeposits items. - UserDepositsAll(context.Context, *QueryAllUserDepositsRequest) (*QueryAllUserDepositsResponse, error) - // Queries a list of TickLiquidity items. - TickLiquidityAll(context.Context, *QueryAllTickLiquidityRequest) (*QueryAllTickLiquidityResponse, error) - // Queries a InactiveLimitOrderTranche by index. - InactiveLimitOrderTranche(context.Context, *QueryGetInactiveLimitOrderTrancheRequest) (*QueryGetInactiveLimitOrderTrancheResponse, error) - // Queries a list of InactiveLimitOrderTranche items. - InactiveLimitOrderTrancheAll(context.Context, *QueryAllInactiveLimitOrderTrancheRequest) (*QueryAllInactiveLimitOrderTrancheResponse, error) - // Queries a list of PoolReserves items. - PoolReservesAll(context.Context, *QueryAllPoolReservesRequest) (*QueryAllPoolReservesResponse, error) - // Queries a PoolReserve by index - PoolReserves(context.Context, *QueryGetPoolReservesRequest) (*QueryGetPoolReservesResponse, error) - // Queries the simulated result of a multihop swap - EstimateMultiHopSwap(context.Context, *QueryEstimateMultiHopSwapRequest) (*QueryEstimateMultiHopSwapResponse, error) - // Queries the simulated result of a PlaceLimit order - EstimatePlaceLimitOrder(context.Context, *QueryEstimatePlaceLimitOrderRequest) (*QueryEstimatePlaceLimitOrderResponse, error) - // Queries a pool by pair, tick and fee - Pool(context.Context, *QueryPoolRequest) (*QueryPoolResponse, error) - // Queries a pool by ID - PoolByID(context.Context, *QueryPoolByIDRequest) (*QueryPoolResponse, error) - // Queries a PoolMetadata by ID - PoolMetadata(context.Context, *QueryGetPoolMetadataRequest) (*QueryGetPoolMetadataResponse, error) - // Queries a list of PoolMetadata items. - PoolMetadataAll(context.Context, *QueryAllPoolMetadataRequest) (*QueryAllPoolMetadataResponse, error) +func (m *QuerySimulateWithdrawFilledLimitOrderRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySimulateWithdrawFilledLimitOrderRequest.Merge(m, src) +} +func (m *QuerySimulateWithdrawFilledLimitOrderRequest) XXX_Size() int { + return m.Size() +} +func (m *QuerySimulateWithdrawFilledLimitOrderRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySimulateWithdrawFilledLimitOrderRequest.DiscardUnknown(m) } -// UnimplementedQueryServer can be embedded to have forward compatible implementations. -type UnimplementedQueryServer struct { +var xxx_messageInfo_QuerySimulateWithdrawFilledLimitOrderRequest proto.InternalMessageInfo + +func (m *QuerySimulateWithdrawFilledLimitOrderRequest) GetMsg() *MsgWithdrawFilledLimitOrder { + if m != nil { + return m.Msg + } + return nil } -func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +type QuerySimulateWithdrawFilledLimitOrderResponse struct { + Resp *MsgWithdrawFilledLimitOrderResponse `protobuf:"bytes,1,opt,name=resp,proto3" json:"resp,omitempty"` } -func (*UnimplementedQueryServer) LimitOrderTrancheUser(ctx context.Context, req *QueryGetLimitOrderTrancheUserRequest) (*QueryGetLimitOrderTrancheUserResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method LimitOrderTrancheUser not implemented") + +func (m *QuerySimulateWithdrawFilledLimitOrderResponse) Reset() { + *m = QuerySimulateWithdrawFilledLimitOrderResponse{} } -func (*UnimplementedQueryServer) LimitOrderTrancheUserAll(ctx context.Context, req *QueryAllLimitOrderTrancheUserRequest) (*QueryAllLimitOrderTrancheUserResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method LimitOrderTrancheUserAll not implemented") +func (m *QuerySimulateWithdrawFilledLimitOrderResponse) String() string { + return proto.CompactTextString(m) } -func (*UnimplementedQueryServer) LimitOrderTrancheUserAllByAddress(ctx context.Context, req *QueryAllLimitOrderTrancheUserByAddressRequest) (*QueryAllLimitOrderTrancheUserByAddressResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method LimitOrderTrancheUserAllByAddress not implemented") +func (*QuerySimulateWithdrawFilledLimitOrderResponse) ProtoMessage() {} +func (*QuerySimulateWithdrawFilledLimitOrderResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b6613ea5fce61e9c, []int{42} } -func (*UnimplementedQueryServer) LimitOrderTranche(ctx context.Context, req *QueryGetLimitOrderTrancheRequest) (*QueryGetLimitOrderTrancheResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method LimitOrderTranche not implemented") +func (m *QuerySimulateWithdrawFilledLimitOrderResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) } -func (*UnimplementedQueryServer) LimitOrderTrancheAll(ctx context.Context, req *QueryAllLimitOrderTrancheRequest) (*QueryAllLimitOrderTrancheResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method LimitOrderTrancheAll not implemented") +func (m *QuerySimulateWithdrawFilledLimitOrderResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySimulateWithdrawFilledLimitOrderResponse.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 (*UnimplementedQueryServer) UserDepositsAll(ctx context.Context, req *QueryAllUserDepositsRequest) (*QueryAllUserDepositsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UserDepositsAll not implemented") +func (m *QuerySimulateWithdrawFilledLimitOrderResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySimulateWithdrawFilledLimitOrderResponse.Merge(m, src) } -func (*UnimplementedQueryServer) TickLiquidityAll(ctx context.Context, req *QueryAllTickLiquidityRequest) (*QueryAllTickLiquidityResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method TickLiquidityAll not implemented") +func (m *QuerySimulateWithdrawFilledLimitOrderResponse) XXX_Size() int { + return m.Size() } -func (*UnimplementedQueryServer) InactiveLimitOrderTranche(ctx context.Context, req *QueryGetInactiveLimitOrderTrancheRequest) (*QueryGetInactiveLimitOrderTrancheResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method InactiveLimitOrderTranche not implemented") +func (m *QuerySimulateWithdrawFilledLimitOrderResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySimulateWithdrawFilledLimitOrderResponse.DiscardUnknown(m) } -func (*UnimplementedQueryServer) InactiveLimitOrderTrancheAll(ctx context.Context, req *QueryAllInactiveLimitOrderTrancheRequest) (*QueryAllInactiveLimitOrderTrancheResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method InactiveLimitOrderTrancheAll not implemented") + +var xxx_messageInfo_QuerySimulateWithdrawFilledLimitOrderResponse proto.InternalMessageInfo + +func (m *QuerySimulateWithdrawFilledLimitOrderResponse) GetResp() *MsgWithdrawFilledLimitOrderResponse { + if m != nil { + return m.Resp + } + return nil } -func (*UnimplementedQueryServer) PoolReservesAll(ctx context.Context, req *QueryAllPoolReservesRequest) (*QueryAllPoolReservesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PoolReservesAll not implemented") + +type QuerySimulateCancelLimitOrderRequest struct { + Msg *MsgCancelLimitOrder `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` } -func (*UnimplementedQueryServer) PoolReserves(ctx context.Context, req *QueryGetPoolReservesRequest) (*QueryGetPoolReservesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PoolReserves not implemented") + +func (m *QuerySimulateCancelLimitOrderRequest) Reset() { *m = QuerySimulateCancelLimitOrderRequest{} } +func (m *QuerySimulateCancelLimitOrderRequest) String() string { return proto.CompactTextString(m) } +func (*QuerySimulateCancelLimitOrderRequest) ProtoMessage() {} +func (*QuerySimulateCancelLimitOrderRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b6613ea5fce61e9c, []int{43} } -func (*UnimplementedQueryServer) EstimateMultiHopSwap(ctx context.Context, req *QueryEstimateMultiHopSwapRequest) (*QueryEstimateMultiHopSwapResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method EstimateMultiHopSwap not implemented") +func (m *QuerySimulateCancelLimitOrderRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) } -func (*UnimplementedQueryServer) EstimatePlaceLimitOrder(ctx context.Context, req *QueryEstimatePlaceLimitOrderRequest) (*QueryEstimatePlaceLimitOrderResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method EstimatePlaceLimitOrder not implemented") +func (m *QuerySimulateCancelLimitOrderRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySimulateCancelLimitOrderRequest.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 (*UnimplementedQueryServer) Pool(ctx context.Context, req *QueryPoolRequest) (*QueryPoolResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Pool not implemented") +func (m *QuerySimulateCancelLimitOrderRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySimulateCancelLimitOrderRequest.Merge(m, src) } -func (*UnimplementedQueryServer) PoolByID(ctx context.Context, req *QueryPoolByIDRequest) (*QueryPoolResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PoolByID not implemented") +func (m *QuerySimulateCancelLimitOrderRequest) XXX_Size() int { + return m.Size() } -func (*UnimplementedQueryServer) PoolMetadata(ctx context.Context, req *QueryGetPoolMetadataRequest) (*QueryGetPoolMetadataResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PoolMetadata not implemented") +func (m *QuerySimulateCancelLimitOrderRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySimulateCancelLimitOrderRequest.DiscardUnknown(m) } -func (*UnimplementedQueryServer) PoolMetadataAll(ctx context.Context, req *QueryAllPoolMetadataRequest) (*QueryAllPoolMetadataResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PoolMetadataAll not implemented") + +var xxx_messageInfo_QuerySimulateCancelLimitOrderRequest proto.InternalMessageInfo + +func (m *QuerySimulateCancelLimitOrderRequest) GetMsg() *MsgCancelLimitOrder { + if m != nil { + return m.Msg + } + return nil } -func RegisterQueryServer(s grpc1.Server, srv QueryServer) { - s.RegisterService(&_Query_serviceDesc, srv) +type QuerySimulateCancelLimitOrderResponse struct { + Resp *MsgCancelLimitOrderResponse `protobuf:"bytes,1,opt,name=resp,proto3" json:"resp,omitempty"` } -func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryParamsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Params(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/neutron.dex.Query/Params", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) +func (m *QuerySimulateCancelLimitOrderResponse) Reset() { *m = QuerySimulateCancelLimitOrderResponse{} } +func (m *QuerySimulateCancelLimitOrderResponse) String() string { return proto.CompactTextString(m) } +func (*QuerySimulateCancelLimitOrderResponse) ProtoMessage() {} +func (*QuerySimulateCancelLimitOrderResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b6613ea5fce61e9c, []int{44} +} +func (m *QuerySimulateCancelLimitOrderResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySimulateCancelLimitOrderResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySimulateCancelLimitOrderResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return interceptor(ctx, in, info, handler) +} +func (m *QuerySimulateCancelLimitOrderResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySimulateCancelLimitOrderResponse.Merge(m, src) +} +func (m *QuerySimulateCancelLimitOrderResponse) XXX_Size() int { + return m.Size() +} +func (m *QuerySimulateCancelLimitOrderResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySimulateCancelLimitOrderResponse.DiscardUnknown(m) } -func _Query_LimitOrderTrancheUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetLimitOrderTrancheUserRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).LimitOrderTrancheUser(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/neutron.dex.Query/LimitOrderTrancheUser", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).LimitOrderTrancheUser(ctx, req.(*QueryGetLimitOrderTrancheUserRequest)) +var xxx_messageInfo_QuerySimulateCancelLimitOrderResponse proto.InternalMessageInfo + +func (m *QuerySimulateCancelLimitOrderResponse) GetResp() *MsgCancelLimitOrderResponse { + if m != nil { + return m.Resp } - return interceptor(ctx, in, info, handler) + return nil } -func _Query_LimitOrderTrancheUserAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllLimitOrderTrancheUserRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).LimitOrderTrancheUserAll(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/neutron.dex.Query/LimitOrderTrancheUserAll", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).LimitOrderTrancheUserAll(ctx, req.(*QueryAllLimitOrderTrancheUserRequest)) - } - return interceptor(ctx, in, info, handler) +type QuerySimulateMultiHopSwapRequest struct { + Msg *MsgMultiHopSwap `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` } -func _Query_LimitOrderTrancheUserAllByAddress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllLimitOrderTrancheUserByAddressRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).LimitOrderTrancheUserAllByAddress(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/neutron.dex.Query/LimitOrderTrancheUserAllByAddress", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).LimitOrderTrancheUserAllByAddress(ctx, req.(*QueryAllLimitOrderTrancheUserByAddressRequest)) +func (m *QuerySimulateMultiHopSwapRequest) Reset() { *m = QuerySimulateMultiHopSwapRequest{} } +func (m *QuerySimulateMultiHopSwapRequest) String() string { return proto.CompactTextString(m) } +func (*QuerySimulateMultiHopSwapRequest) ProtoMessage() {} +func (*QuerySimulateMultiHopSwapRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b6613ea5fce61e9c, []int{45} +} +func (m *QuerySimulateMultiHopSwapRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySimulateMultiHopSwapRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySimulateMultiHopSwapRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return interceptor(ctx, in, info, handler) +} +func (m *QuerySimulateMultiHopSwapRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySimulateMultiHopSwapRequest.Merge(m, src) +} +func (m *QuerySimulateMultiHopSwapRequest) XXX_Size() int { + return m.Size() +} +func (m *QuerySimulateMultiHopSwapRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySimulateMultiHopSwapRequest.DiscardUnknown(m) } -func _Query_LimitOrderTranche_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetLimitOrderTrancheRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).LimitOrderTranche(ctx, in) +var xxx_messageInfo_QuerySimulateMultiHopSwapRequest proto.InternalMessageInfo + +func (m *QuerySimulateMultiHopSwapRequest) GetMsg() *MsgMultiHopSwap { + if m != nil { + return m.Msg } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/neutron.dex.Query/LimitOrderTranche", + return nil +} + +type QuerySimulateMultiHopSwapResponse struct { + Resp *MsgMultiHopSwapResponse `protobuf:"bytes,1,opt,name=resp,proto3" json:"resp,omitempty"` +} + +func (m *QuerySimulateMultiHopSwapResponse) Reset() { *m = QuerySimulateMultiHopSwapResponse{} } +func (m *QuerySimulateMultiHopSwapResponse) String() string { return proto.CompactTextString(m) } +func (*QuerySimulateMultiHopSwapResponse) ProtoMessage() {} +func (*QuerySimulateMultiHopSwapResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b6613ea5fce61e9c, []int{46} +} +func (m *QuerySimulateMultiHopSwapResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySimulateMultiHopSwapResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySimulateMultiHopSwapResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).LimitOrderTranche(ctx, req.(*QueryGetLimitOrderTrancheRequest)) +} +func (m *QuerySimulateMultiHopSwapResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySimulateMultiHopSwapResponse.Merge(m, src) +} +func (m *QuerySimulateMultiHopSwapResponse) XXX_Size() int { + return m.Size() +} +func (m *QuerySimulateMultiHopSwapResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySimulateMultiHopSwapResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QuerySimulateMultiHopSwapResponse proto.InternalMessageInfo + +func (m *QuerySimulateMultiHopSwapResponse) GetResp() *MsgMultiHopSwapResponse { + if m != nil { + return m.Resp } - return interceptor(ctx, in, info, handler) + return nil } -func _Query_LimitOrderTrancheAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllLimitOrderTrancheRequest) - if err := dec(in); err != nil { +func init() { + proto.RegisterType((*QueryParamsRequest)(nil), "neutron.dex.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "neutron.dex.QueryParamsResponse") + proto.RegisterType((*QueryGetLimitOrderTrancheUserRequest)(nil), "neutron.dex.QueryGetLimitOrderTrancheUserRequest") + proto.RegisterType((*QueryGetLimitOrderTrancheUserResponse)(nil), "neutron.dex.QueryGetLimitOrderTrancheUserResponse") + proto.RegisterType((*QueryAllLimitOrderTrancheUserRequest)(nil), "neutron.dex.QueryAllLimitOrderTrancheUserRequest") + proto.RegisterType((*QueryAllLimitOrderTrancheUserResponse)(nil), "neutron.dex.QueryAllLimitOrderTrancheUserResponse") + proto.RegisterType((*QueryGetLimitOrderTrancheRequest)(nil), "neutron.dex.QueryGetLimitOrderTrancheRequest") + proto.RegisterType((*QueryGetLimitOrderTrancheResponse)(nil), "neutron.dex.QueryGetLimitOrderTrancheResponse") + proto.RegisterType((*QueryAllLimitOrderTrancheRequest)(nil), "neutron.dex.QueryAllLimitOrderTrancheRequest") + proto.RegisterType((*QueryAllLimitOrderTrancheResponse)(nil), "neutron.dex.QueryAllLimitOrderTrancheResponse") + proto.RegisterType((*QueryAllUserDepositsRequest)(nil), "neutron.dex.QueryAllUserDepositsRequest") + proto.RegisterType((*QueryAllUserDepositsResponse)(nil), "neutron.dex.QueryAllUserDepositsResponse") + proto.RegisterType((*QueryAllLimitOrderTrancheUserByAddressRequest)(nil), "neutron.dex.QueryAllLimitOrderTrancheUserByAddressRequest") + proto.RegisterType((*QueryAllLimitOrderTrancheUserByAddressResponse)(nil), "neutron.dex.QueryAllLimitOrderTrancheUserByAddressResponse") + proto.RegisterType((*QueryAllTickLiquidityRequest)(nil), "neutron.dex.QueryAllTickLiquidityRequest") + proto.RegisterType((*QueryAllTickLiquidityResponse)(nil), "neutron.dex.QueryAllTickLiquidityResponse") + proto.RegisterType((*QueryGetInactiveLimitOrderTrancheRequest)(nil), "neutron.dex.QueryGetInactiveLimitOrderTrancheRequest") + proto.RegisterType((*QueryGetInactiveLimitOrderTrancheResponse)(nil), "neutron.dex.QueryGetInactiveLimitOrderTrancheResponse") + proto.RegisterType((*QueryAllInactiveLimitOrderTrancheRequest)(nil), "neutron.dex.QueryAllInactiveLimitOrderTrancheRequest") + proto.RegisterType((*QueryAllInactiveLimitOrderTrancheResponse)(nil), "neutron.dex.QueryAllInactiveLimitOrderTrancheResponse") + proto.RegisterType((*QueryAllPoolReservesRequest)(nil), "neutron.dex.QueryAllPoolReservesRequest") + proto.RegisterType((*QueryAllPoolReservesResponse)(nil), "neutron.dex.QueryAllPoolReservesResponse") + proto.RegisterType((*QueryGetPoolReservesRequest)(nil), "neutron.dex.QueryGetPoolReservesRequest") + proto.RegisterType((*QueryGetPoolReservesResponse)(nil), "neutron.dex.QueryGetPoolReservesResponse") + proto.RegisterType((*QueryEstimateMultiHopSwapRequest)(nil), "neutron.dex.QueryEstimateMultiHopSwapRequest") + proto.RegisterType((*QueryEstimateMultiHopSwapResponse)(nil), "neutron.dex.QueryEstimateMultiHopSwapResponse") + proto.RegisterType((*QueryEstimatePlaceLimitOrderRequest)(nil), "neutron.dex.QueryEstimatePlaceLimitOrderRequest") + proto.RegisterType((*QueryEstimatePlaceLimitOrderResponse)(nil), "neutron.dex.QueryEstimatePlaceLimitOrderResponse") + proto.RegisterType((*QueryPoolRequest)(nil), "neutron.dex.QueryPoolRequest") + proto.RegisterType((*QueryPoolByIDRequest)(nil), "neutron.dex.QueryPoolByIDRequest") + proto.RegisterType((*QueryPoolResponse)(nil), "neutron.dex.QueryPoolResponse") + proto.RegisterType((*QueryGetPoolMetadataRequest)(nil), "neutron.dex.QueryGetPoolMetadataRequest") + proto.RegisterType((*QueryGetPoolMetadataResponse)(nil), "neutron.dex.QueryGetPoolMetadataResponse") + proto.RegisterType((*QueryAllPoolMetadataRequest)(nil), "neutron.dex.QueryAllPoolMetadataRequest") + proto.RegisterType((*QueryAllPoolMetadataResponse)(nil), "neutron.dex.QueryAllPoolMetadataResponse") + proto.RegisterType((*QuerySimulateDepositRequest)(nil), "neutron.dex.QuerySimulateDepositRequest") + proto.RegisterType((*QuerySimulateDepositResponse)(nil), "neutron.dex.QuerySimulateDepositResponse") + proto.RegisterType((*QuerySimulateWithdrawalRequest)(nil), "neutron.dex.QuerySimulateWithdrawalRequest") + proto.RegisterType((*QuerySimulateWithdrawalResponse)(nil), "neutron.dex.QuerySimulateWithdrawalResponse") + proto.RegisterType((*QuerySimulatePlaceLimitOrderRequest)(nil), "neutron.dex.QuerySimulatePlaceLimitOrderRequest") + proto.RegisterType((*QuerySimulatePlaceLimitOrderResponse)(nil), "neutron.dex.QuerySimulatePlaceLimitOrderResponse") + proto.RegisterType((*QuerySimulateWithdrawFilledLimitOrderRequest)(nil), "neutron.dex.QuerySimulateWithdrawFilledLimitOrderRequest") + proto.RegisterType((*QuerySimulateWithdrawFilledLimitOrderResponse)(nil), "neutron.dex.QuerySimulateWithdrawFilledLimitOrderResponse") + proto.RegisterType((*QuerySimulateCancelLimitOrderRequest)(nil), "neutron.dex.QuerySimulateCancelLimitOrderRequest") + proto.RegisterType((*QuerySimulateCancelLimitOrderResponse)(nil), "neutron.dex.QuerySimulateCancelLimitOrderResponse") + proto.RegisterType((*QuerySimulateMultiHopSwapRequest)(nil), "neutron.dex.QuerySimulateMultiHopSwapRequest") + proto.RegisterType((*QuerySimulateMultiHopSwapResponse)(nil), "neutron.dex.QuerySimulateMultiHopSwapResponse") +} + +func init() { proto.RegisterFile("neutron/dex/query.proto", fileDescriptor_b6613ea5fce61e9c) } + +var fileDescriptor_b6613ea5fce61e9c = []byte{ + // 2742 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xdf, 0x6f, 0x1c, 0x47, + 0x1d, 0xcf, 0xf8, 0x5c, 0xc7, 0x1e, 0x3b, 0xb1, 0x33, 0x76, 0xea, 0xcb, 0xc5, 0xf1, 0xd9, 0xdb, + 0xa6, 0x76, 0xd2, 0xf8, 0x36, 0x76, 0xdb, 0x34, 0x4d, 0x28, 0x10, 0xd7, 0x4d, 0x62, 0xda, 0x10, + 0xb3, 0x09, 0x6d, 0x12, 0x8a, 0x56, 0xeb, 0xbb, 0x89, 0xbd, 0x78, 0x6f, 0x77, 0xb3, 0x3b, 0x17, + 0xfb, 0x14, 0xe5, 0xa5, 0x7d, 0x41, 0x08, 0xa4, 0x40, 0xf9, 0xa1, 0x14, 0xa9, 0x3c, 0x20, 0x90, + 0x10, 0x42, 0xe5, 0x97, 0x78, 0xe3, 0x05, 0x09, 0x54, 0x21, 0x84, 0x2a, 0x95, 0x07, 0x04, 0x92, + 0x41, 0x09, 0x4f, 0xe1, 0x05, 0xf9, 0x2f, 0x40, 0x33, 0xfb, 0xdd, 0xf3, 0xee, 0xed, 0xec, 0xed, + 0xd9, 0x39, 0x50, 0x9f, 0x7c, 0x3b, 0xf3, 0x9d, 0x99, 0xcf, 0xf7, 0x33, 0xdf, 0x99, 0xef, 0xcc, + 0x67, 0x8c, 0x47, 0x6d, 0x5a, 0x63, 0x9e, 0x63, 0xab, 0x15, 0xba, 0xa1, 0xde, 0xaa, 0x51, 0xaf, + 0x5e, 0x72, 0x3d, 0x87, 0x39, 0xa4, 0x1f, 0x2a, 0x4a, 0x15, 0xba, 0x51, 0x38, 0x5e, 0x76, 0xfc, + 0xaa, 0xe3, 0xab, 0xcb, 0x86, 0x4f, 0x03, 0x2b, 0xf5, 0xf6, 0xec, 0x32, 0x65, 0xc6, 0xac, 0xea, + 0x1a, 0x2b, 0xa6, 0x6d, 0x30, 0xd3, 0xb1, 0x83, 0x86, 0x85, 0xf1, 0xa8, 0x6d, 0x68, 0x55, 0x76, + 0xcc, 0xb0, 0x7e, 0x64, 0xc5, 0x59, 0x71, 0xc4, 0x4f, 0x95, 0xff, 0x82, 0xd2, 0xb1, 0x15, 0xc7, + 0x59, 0xb1, 0xa8, 0x6a, 0xb8, 0xa6, 0x6a, 0xd8, 0xb6, 0xc3, 0x44, 0x97, 0x3e, 0xd4, 0x16, 0xa1, + 0x56, 0x7c, 0x2d, 0xd7, 0x6e, 0xaa, 0xcc, 0xac, 0x52, 0x9f, 0x19, 0x55, 0x17, 0x0c, 0x26, 0xa2, + 0x6e, 0x54, 0xa8, 0xeb, 0xf8, 0x26, 0xd3, 0x3d, 0x5a, 0x76, 0xbc, 0x0a, 0x58, 0x1c, 0x8d, 0x5a, + 0x58, 0x66, 0xd5, 0x64, 0xba, 0xe3, 0x55, 0xa8, 0xa7, 0x33, 0xcf, 0xb0, 0xcb, 0xab, 0x14, 0xcc, + 0x8e, 0x67, 0x98, 0xe9, 0x35, 0x9f, 0x7a, 0x60, 0x9b, 0x8f, 0xda, 0xba, 0x86, 0x67, 0x54, 0x43, + 0xbc, 0x4f, 0xc6, 0x6a, 0x1c, 0xc7, 0x0a, 0xfd, 0x68, 0x2e, 0xd7, 0xab, 0x94, 0x19, 0x15, 0x83, + 0x19, 0xa9, 0x06, 0x1e, 0xf5, 0xa9, 0x77, 0x9b, 0xfa, 0x32, 0x47, 0x99, 0x59, 0x5e, 0xd3, 0x2d, + 0xf3, 0x56, 0xcd, 0xac, 0x98, 0xac, 0x1e, 0xf2, 0x1b, 0xb3, 0xd8, 0x08, 0x4a, 0x95, 0x11, 0x4c, + 0xbe, 0xc0, 0xe7, 0x6d, 0x49, 0xc0, 0xd4, 0xe8, 0xad, 0x1a, 0xf5, 0x99, 0x72, 0x11, 0x0f, 0xc7, + 0x4a, 0x7d, 0xd7, 0xb1, 0x7d, 0x4a, 0x66, 0x71, 0x4f, 0xe0, 0x4e, 0x1e, 0x4d, 0xa0, 0xe9, 0xfe, + 0xb9, 0xe1, 0x52, 0x24, 0x18, 0x4a, 0x81, 0xf1, 0x7c, 0xf7, 0x87, 0x9b, 0xc5, 0x3d, 0x1a, 0x18, + 0x2a, 0xdf, 0x47, 0xf8, 0x69, 0xd1, 0xd5, 0x05, 0xca, 0x5e, 0xe7, 0xb4, 0x5d, 0xe6, 0xac, 0x5d, + 0x0d, 0x48, 0xfb, 0xa2, 0x4f, 0x3d, 0x18, 0x92, 0xe4, 0xf1, 0x5e, 0xa3, 0x52, 0xf1, 0xa8, 0x1f, + 0x74, 0xde, 0xa7, 0x85, 0x9f, 0xa4, 0x88, 0xfb, 0x43, 0x92, 0xd7, 0x68, 0x3d, 0xdf, 0x25, 0x6a, + 0x31, 0x14, 0xbd, 0x46, 0xeb, 0xe4, 0x34, 0xce, 0x97, 0x0d, 0xab, 0xac, 0xaf, 0x9b, 0x6c, 0xb5, + 0xe2, 0x19, 0xeb, 0xc6, 0xb2, 0x45, 0x75, 0x7f, 0xd5, 0xf0, 0xa8, 0x9f, 0xcf, 0x4d, 0xa0, 0xe9, + 0x5e, 0xed, 0x49, 0x5e, 0xff, 0x66, 0xa4, 0xfa, 0x8a, 0xa8, 0x55, 0xee, 0x75, 0xe1, 0xa3, 0x19, + 0xe8, 0xc0, 0x75, 0x03, 0xe7, 0xd3, 0x66, 0x1d, 0xc8, 0x50, 0x62, 0x64, 0x48, 0x7b, 0x13, 0xdc, + 0x20, 0xed, 0xa0, 0x25, 0xab, 0x24, 0xef, 0x20, 0x3c, 0x2c, 0x73, 0x41, 0x38, 0x3c, 0xaf, 0xf1, + 0xa6, 0x7f, 0xdb, 0x2c, 0x1e, 0x0c, 0x96, 0x91, 0x5f, 0x59, 0x2b, 0x99, 0x8e, 0x5a, 0x35, 0xd8, + 0x6a, 0x69, 0xd1, 0x66, 0x8f, 0x36, 0x8b, 0xb2, 0xb6, 0x5b, 0x9b, 0xc5, 0x42, 0xdd, 0xa8, 0x5a, + 0x67, 0x14, 0x49, 0xa5, 0xa2, 0x91, 0xf5, 0x24, 0x25, 0x36, 0xcc, 0xd7, 0x39, 0xcb, 0x6a, 0x39, + 0x5f, 0xe7, 0x31, 0xde, 0x5e, 0xe2, 0x40, 0xc1, 0x33, 0xa5, 0x00, 0x5c, 0x89, 0xaf, 0xf1, 0x52, + 0xb0, 0x6b, 0xc0, 0x4a, 0x2f, 0x2d, 0x19, 0x2b, 0x14, 0xda, 0x6a, 0x91, 0x96, 0xca, 0xc7, 0x08, + 0xa6, 0x20, 0x7d, 0xc0, 0xb6, 0xa6, 0x20, 0xd7, 0x89, 0x29, 0xb8, 0x10, 0x73, 0xaa, 0x4b, 0x38, + 0x35, 0x95, 0xe9, 0x54, 0x80, 0x2f, 0xe6, 0xd5, 0x77, 0x11, 0x9e, 0x48, 0x0d, 0xac, 0x90, 0xc2, + 0x51, 0xbc, 0xd7, 0x35, 0x4c, 0x4f, 0x37, 0x2b, 0x10, 0xf2, 0x3d, 0xfc, 0x73, 0xb1, 0x42, 0x8e, + 0x60, 0x2c, 0x96, 0xb0, 0x69, 0x57, 0xe8, 0x86, 0x80, 0x91, 0xd3, 0xfa, 0x78, 0xc9, 0x22, 0x2f, + 0x20, 0x87, 0x70, 0x2f, 0x73, 0xd6, 0xa8, 0xad, 0x9b, 0xb6, 0x88, 0xef, 0x3e, 0x6d, 0xaf, 0xf8, + 0x5e, 0xb4, 0x9b, 0xd7, 0x4a, 0x77, 0xf3, 0x5a, 0x51, 0xea, 0x78, 0xb2, 0x05, 0x2e, 0x60, 0xfa, + 0x2a, 0x1e, 0x96, 0x30, 0x0d, 0x93, 0x3c, 0xde, 0x9a, 0x64, 0x20, 0xf8, 0x40, 0x82, 0x60, 0xe5, + 0xfd, 0x90, 0x13, 0xd9, 0x4c, 0x67, 0x72, 0x12, 0x75, 0xba, 0x2b, 0xee, 0x74, 0x3c, 0x14, 0x73, + 0xbb, 0x0e, 0xc5, 0xdf, 0x21, 0x20, 0x47, 0x0e, 0x30, 0x8b, 0x9c, 0xdc, 0x63, 0x90, 0xd3, 0xb9, + 0xc8, 0xfb, 0x29, 0xc2, 0x87, 0x43, 0x27, 0x78, 0x4c, 0x2f, 0x04, 0x49, 0xcf, 0xcf, 0xde, 0x67, + 0xcf, 0x4b, 0x20, 0xec, 0x82, 0x46, 0x72, 0x1c, 0x1f, 0x30, 0xed, 0xb2, 0x55, 0xab, 0x50, 0x5d, + 0x64, 0x2a, 0x9e, 0xc6, 0x60, 0x1f, 0x1e, 0x84, 0x8a, 0x25, 0xc7, 0xb1, 0x16, 0x0c, 0x66, 0x28, + 0x3f, 0x42, 0x78, 0x4c, 0x8e, 0x16, 0xd8, 0xfe, 0x14, 0xee, 0x85, 0xb4, 0xed, 0x03, 0xc5, 0x85, + 0x18, 0xc5, 0xd0, 0x40, 0x13, 0x29, 0x1d, 0xe8, 0x6d, 0xb4, 0xe8, 0x1c, 0xab, 0xdf, 0x44, 0x78, + 0xa6, 0xe5, 0x2e, 0x35, 0x5f, 0x3f, 0x17, 0xd0, 0xf8, 0x7f, 0xe3, 0x59, 0xf9, 0x03, 0xc2, 0xa5, + 0x76, 0x31, 0x01, 0x9b, 0xaf, 0xe1, 0x81, 0x48, 0xec, 0xfa, 0x3b, 0xde, 0x36, 0xfb, 0xb7, 0x03, + 0xb7, 0x83, 0xe4, 0xbe, 0x17, 0x09, 0x82, 0xab, 0x66, 0x79, 0xed, 0xf5, 0xf0, 0xe4, 0xf2, 0x49, + 0xd8, 0x14, 0x7e, 0x81, 0xf0, 0x91, 0x14, 0x70, 0x40, 0xea, 0x05, 0xbc, 0x3f, 0x7e, 0xe0, 0x92, + 0x06, 0x6a, 0xac, 0x2d, 0xd0, 0xb9, 0x8f, 0x45, 0x0b, 0x3b, 0x47, 0xe8, 0xfb, 0x08, 0x4f, 0x87, + 0xbb, 0xfc, 0xa2, 0x6d, 0x94, 0x99, 0x79, 0x9b, 0x76, 0x74, 0xc7, 0x8d, 0x27, 0xa8, 0x5c, 0x73, + 0x82, 0xca, 0xcc, 0x42, 0xdf, 0x42, 0xf8, 0x58, 0x1b, 0x00, 0x81, 0x60, 0x8a, 0xc7, 0x4c, 0x30, + 0xd2, 0x1f, 0x37, 0x2f, 0x1d, 0x32, 0xd3, 0x86, 0x53, 0x3c, 0x20, 0xed, 0x9c, 0x65, 0x65, 0x92, + 0xd6, 0xa9, 0xd3, 0xcf, 0xdf, 0x43, 0x22, 0x5a, 0x0f, 0xda, 0x36, 0x11, 0xb9, 0x0e, 0x10, 0xd1, + 0xb9, 0x38, 0xbc, 0x1f, 0xc9, 0x45, 0x7c, 0xcb, 0xd7, 0xe0, 0xce, 0xf2, 0x49, 0x58, 0xd7, 0x3f, + 0x8b, 0x6c, 0x3a, 0x71, 0x6c, 0x40, 0xf6, 0x02, 0xde, 0x17, 0xbb, 0x68, 0x01, 0xbb, 0x87, 0xe2, + 0x77, 0x9e, 0x48, 0x4b, 0x20, 0x76, 0xc0, 0x8d, 0x94, 0x75, 0x8e, 0xcb, 0xb7, 0x43, 0x2e, 0x2f, + 0x50, 0xd6, 0x29, 0x2e, 0x33, 0x96, 0xf1, 0x10, 0xce, 0xdd, 0xa4, 0x54, 0x2c, 0xdf, 0x6e, 0x8d, + 0xff, 0x54, 0x2a, 0xc0, 0x59, 0x02, 0x43, 0x3a, 0x67, 0x68, 0xc7, 0x9c, 0x29, 0x3f, 0xc9, 0xc1, + 0x41, 0xf1, 0x55, 0x9f, 0x99, 0x55, 0x83, 0xd1, 0x4b, 0x35, 0x8b, 0x99, 0x17, 0x1d, 0xf7, 0xca, + 0xba, 0xe1, 0x46, 0xf2, 0x6b, 0xd9, 0xa3, 0x06, 0x73, 0xbc, 0x30, 0xbf, 0xc2, 0x27, 0x29, 0xe0, + 0x5e, 0x8f, 0x96, 0xa9, 0x79, 0x9b, 0x7a, 0xe0, 0x70, 0xe3, 0x9b, 0xcc, 0xe1, 0x1e, 0xcf, 0xa9, + 0x31, 0x71, 0x31, 0x4c, 0xee, 0xd1, 0xe1, 0x38, 0x1a, 0x37, 0xd1, 0xc0, 0x92, 0x7c, 0x09, 0xf7, + 0x19, 0x55, 0xa7, 0x66, 0x33, 0xce, 0xa0, 0xd8, 0xcb, 0xe6, 0x3f, 0xcd, 0xef, 0xb8, 0xad, 0x2e, + 0x63, 0xdb, 0x2d, 0xb6, 0x36, 0x8b, 0x43, 0xc1, 0x15, 0xac, 0x51, 0xa4, 0x68, 0xbd, 0xc1, 0xef, + 0x45, 0x9b, 0x7c, 0x07, 0xe1, 0x21, 0xba, 0x61, 0x32, 0x58, 0xcf, 0xae, 0x67, 0x96, 0x69, 0xfe, + 0x09, 0x31, 0xc8, 0x1a, 0x0c, 0xf2, 0xfc, 0x8a, 0xc9, 0x56, 0x6b, 0xcb, 0xa5, 0xb2, 0x53, 0x55, + 0x01, 0xed, 0x8c, 0xe3, 0xad, 0x84, 0xbf, 0xd5, 0xdb, 0xcf, 0xab, 0x35, 0x66, 0x5a, 0x7e, 0x30, + 0xfe, 0x92, 0x47, 0xcb, 0x0b, 0xb4, 0xfc, 0x68, 0xb3, 0x98, 0xe8, 0x77, 0x6b, 0xb3, 0x38, 0x1a, + 0x40, 0x69, 0xae, 0x51, 0xb4, 0xfd, 0xbc, 0x48, 0x6c, 0x05, 0x4b, 0xbc, 0x80, 0x3c, 0x83, 0x07, + 0x5d, 0x1e, 0x1a, 0xcb, 0xd4, 0x67, 0xba, 0x20, 0x22, 0xdf, 0x23, 0x8e, 0x70, 0xfb, 0x78, 0xf1, + 0x3c, 0x5f, 0x4d, 0xbc, 0x90, 0x5f, 0x74, 0x26, 0x5b, 0xcc, 0x15, 0xc4, 0xc5, 0x2d, 0xdc, 0x5b, + 0x76, 0x4c, 0x5b, 0x77, 0x6a, 0xac, 0x11, 0x12, 0xd1, 0x35, 0x10, 0x46, 0xff, 0x2b, 0x8e, 0x69, + 0xcf, 0x9f, 0x05, 0xbf, 0xa7, 0x22, 0x7e, 0x83, 0x76, 0x14, 0xfc, 0x99, 0xf1, 0x2b, 0x6b, 0x2a, + 0xab, 0xbb, 0xd4, 0x17, 0x0d, 0x1e, 0x6d, 0x16, 0x1b, 0xbd, 0x6b, 0x7b, 0xf9, 0xaf, 0xcb, 0x35, + 0xa6, 0xbc, 0xd7, 0x8d, 0x9f, 0x8a, 0x01, 0x5b, 0xb2, 0x8c, 0x72, 0x64, 0xb3, 0x7b, 0xbc, 0x38, + 0x6a, 0x71, 0x05, 0x3b, 0x8c, 0xfb, 0x82, 0x2a, 0xee, 0x6c, 0x90, 0xfa, 0x02, 0xdb, 0xcb, 0x35, + 0x46, 0x4a, 0x78, 0x64, 0x7b, 0xc5, 0xe9, 0xa6, 0xad, 0x33, 0x47, 0xd8, 0x3d, 0x21, 0xd6, 0xde, + 0x50, 0x63, 0xed, 0x2d, 0xda, 0x57, 0x1d, 0x6e, 0x1f, 0x8b, 0xbd, 0x9e, 0x0e, 0xc7, 0xde, 0x19, + 0x8c, 0x21, 0x7f, 0xd4, 0x5d, 0x9a, 0xdf, 0x3b, 0x81, 0xa6, 0xf7, 0xcf, 0x1d, 0x4e, 0x4b, 0x1e, + 0x75, 0x97, 0x6a, 0x7d, 0x4e, 0xf8, 0x93, 0x5c, 0xc2, 0x83, 0x74, 0xc3, 0x35, 0x3d, 0xb1, 0x39, + 0xe9, 0xcc, 0xac, 0xd2, 0x7c, 0xaf, 0x98, 0xd8, 0x42, 0x29, 0xd0, 0xe4, 0x4a, 0xa1, 0x26, 0x57, + 0xba, 0x1a, 0x6a, 0x72, 0xf3, 0xbd, 0x7c, 0xb1, 0xdf, 0xfb, 0x47, 0x11, 0xf1, 0x70, 0x0b, 0x1b, + 0xf3, 0x6a, 0x52, 0xc5, 0xfb, 0xaa, 0xc6, 0xc6, 0xb9, 0x00, 0x25, 0x27, 0xa4, 0x4f, 0xf8, 0x7a, + 0x31, 0x4b, 0xf4, 0xd8, 0x5f, 0x35, 0x36, 0x74, 0xa3, 0xd1, 0x6c, 0x6b, 0xb3, 0x78, 0x30, 0x70, + 0x38, 0x5e, 0xae, 0x68, 0x03, 0x8d, 0xee, 0x79, 0x70, 0xfc, 0x27, 0x07, 0x2a, 0x47, 0x6a, 0x70, + 0x40, 0xe0, 0x7e, 0x0f, 0xe1, 0x7d, 0xcc, 0x61, 0x86, 0xc5, 0xe7, 0x8a, 0x87, 0x56, 0x76, 0xf8, + 0x5e, 0xdb, 0x79, 0xf8, 0xc6, 0x87, 0xd8, 0xda, 0x2c, 0x8e, 0x04, 0x4e, 0xc4, 0x8a, 0x15, 0xad, + 0x5f, 0x7c, 0x2f, 0xda, 0xbc, 0x15, 0x79, 0x17, 0xe1, 0x01, 0x7f, 0xdd, 0x70, 0x1b, 0xc0, 0xba, + 0xb2, 0x80, 0xbd, 0xb1, 0x73, 0x60, 0xb1, 0x11, 0xb6, 0x36, 0x8b, 0xc3, 0x01, 0xae, 0x68, 0xa9, + 0xa2, 0x61, 0xfe, 0x09, 0xa8, 0x38, 0x5f, 0xa2, 0xd6, 0xa9, 0xb1, 0x00, 0x56, 0xee, 0x7f, 0xc1, + 0x57, 0x6c, 0x88, 0x6d, 0xbe, 0x62, 0xc5, 0x8a, 0xd6, 0xcf, 0xbf, 0x2f, 0xd7, 0x18, 0x6f, 0xa5, + 0xbc, 0x85, 0x87, 0x02, 0x49, 0x53, 0x64, 0x9a, 0xc7, 0x13, 0x60, 0x20, 0x31, 0xe6, 0xb6, 0x13, + 0xa3, 0x8a, 0x47, 0x1a, 0xbd, 0xcf, 0xd7, 0x17, 0x17, 0xa2, 0x23, 0xf0, 0x84, 0x08, 0x23, 0x74, + 0x6b, 0x3d, 0xfc, 0x73, 0xb1, 0xa2, 0x7c, 0x16, 0x1f, 0x88, 0xc0, 0x81, 0x68, 0x7b, 0x16, 0x77, + 0xf3, 0x6a, 0x88, 0xb1, 0x03, 0x89, 0xac, 0x09, 0xd9, 0x52, 0x18, 0x29, 0x33, 0xf1, 0xf3, 0xc0, + 0x25, 0x10, 0x8c, 0xc3, 0x91, 0xf7, 0xe3, 0xae, 0xc6, 0xa0, 0x5d, 0x66, 0xa5, 0x39, 0x75, 0x6f, + 0x9b, 0x6f, 0xa7, 0xee, 0xa5, 0xa8, 0xf0, 0x9c, 0x9a, 0xba, 0xc3, 0x96, 0x20, 0xf4, 0x0e, 0x44, + 0xcb, 0x14, 0x1a, 0x3f, 0xf0, 0x35, 0x83, 0xea, 0xd4, 0xb1, 0xb9, 0xf9, 0xf0, 0x26, 0xf3, 0xc6, + 0x6d, 0xf2, 0x26, 0xd7, 0x96, 0x37, 0x6e, 0xa4, 0xac, 0x73, 0x87, 0xb7, 0x8b, 0x40, 0xcb, 0x15, + 0xb3, 0x5a, 0xb3, 0x0c, 0x46, 0x1b, 0xaa, 0x45, 0x40, 0xcb, 0x31, 0x9c, 0xab, 0xfa, 0x2b, 0xc0, + 0xc7, 0x68, 0xfc, 0x48, 0xe2, 0xaf, 0x84, 0xc6, 0xdc, 0x46, 0xb9, 0x02, 0x8e, 0x27, 0x7a, 0x02, + 0xc7, 0x9f, 0xc3, 0xdd, 0x1e, 0xf5, 0x5d, 0xe8, 0xab, 0x98, 0xd6, 0x57, 0x08, 0x52, 0x18, 0x2b, + 0x9f, 0xc7, 0xe3, 0xb1, 0x4e, 0x1b, 0x4a, 0x79, 0x63, 0xa5, 0x9c, 0x88, 0x22, 0x2c, 0x34, 0xf7, + 0x1a, 0xb1, 0x17, 0x20, 0xaf, 0xe3, 0x62, 0x6a, 0x7f, 0x80, 0xf3, 0x54, 0x0c, 0xa7, 0xd2, 0xa2, + 0xc7, 0x38, 0xd4, 0x6b, 0x90, 0xd5, 0xc3, 0xae, 0x53, 0xb2, 0xfa, 0x6c, 0x14, 0x6f, 0x82, 0x85, + 0xe6, 0x46, 0x02, 0x74, 0x19, 0x52, 0x42, 0x6a, 0xcf, 0x80, 0xfc, 0x6c, 0x0c, 0xf9, 0x54, 0x56, + 0xdf, 0x71, 0xf8, 0x5f, 0xc1, 0x27, 0xa4, 0xcc, 0x9c, 0x37, 0x2d, 0x8b, 0x56, 0x92, 0x7e, 0x9c, + 0x89, 0xfa, 0x31, 0x9d, 0xc6, 0x52, 0xa2, 0xb5, 0x70, 0xa8, 0x06, 0x92, 0x55, 0xf6, 0x58, 0x8d, + 0x45, 0x13, 0xf5, 0xec, 0x64, 0xdb, 0xa3, 0xc5, 0x5d, 0xbc, 0xd1, 0xc4, 0xe3, 0x2b, 0x86, 0x5d, + 0xa6, 0x56, 0xd2, 0xb5, 0xb9, 0xa8, 0x6b, 0x13, 0xcd, 0x83, 0x25, 0x5a, 0x09, 0x97, 0x28, 0xbc, + 0x15, 0xa4, 0xf7, 0xdd, 0x90, 0x0d, 0xa3, 0xae, 0x4c, 0x67, 0xf6, 0x1e, 0x77, 0x41, 0x83, 0xfb, + 0x47, 0x38, 0x8c, 0xec, 0xfe, 0x51, 0x8a, 0xc2, 0x1f, 0x6b, 0x1e, 0x20, 0xd6, 0x42, 0x40, 0xff, + 0x32, 0x9c, 0x93, 0xe5, 0x7d, 0x02, 0xec, 0xd3, 0x31, 0xd8, 0x4f, 0xb7, 0xec, 0x35, 0x06, 0x79, + 0xee, 0x9d, 0x49, 0xfc, 0x84, 0xe8, 0x9f, 0xac, 0xe2, 0x9e, 0xe0, 0x25, 0x8e, 0xc4, 0xe3, 0x3e, + 0xf9, 0xcc, 0x57, 0x98, 0x48, 0x37, 0x08, 0x3a, 0x57, 0x0e, 0xbf, 0xfd, 0xf1, 0xbf, 0xde, 0xed, + 0x3a, 0x48, 0x86, 0xd5, 0xe4, 0x9b, 0x26, 0xf9, 0x3d, 0xc2, 0x07, 0xa5, 0x6a, 0x21, 0x99, 0x4d, + 0x76, 0x9c, 0xf1, 0xfe, 0x57, 0x98, 0xdb, 0x49, 0x13, 0x40, 0xf7, 0xaa, 0x40, 0xf7, 0x19, 0xf2, + 0xb2, 0xda, 0xce, 0xeb, 0xac, 0x7a, 0x07, 0x14, 0xd8, 0xbb, 0xea, 0x9d, 0x88, 0x3c, 0x75, 0x97, + 0xfc, 0x1c, 0xe1, 0xbc, 0x74, 0xa0, 0x73, 0x96, 0x25, 0x73, 0x25, 0xe3, 0x69, 0x4c, 0xe6, 0x4a, + 0xd6, 0xe3, 0x96, 0x32, 0x23, 0x5c, 0x99, 0x22, 0x47, 0xdb, 0x72, 0x85, 0xfc, 0x19, 0xe1, 0xc9, + 0x34, 0xc8, 0x0d, 0xd9, 0x97, 0x9c, 0x69, 0x1f, 0x48, 0xb3, 0x7e, 0x5d, 0x38, 0xbb, 0xab, 0xb6, + 0xe0, 0xcd, 0x49, 0xe1, 0xcd, 0x71, 0x32, 0x1d, 0xf3, 0x46, 0x4c, 0x42, 0x54, 0x7f, 0xde, 0x9e, + 0x11, 0xf2, 0x27, 0x84, 0x0f, 0x24, 0x95, 0xa8, 0x99, 0xf6, 0x82, 0x22, 0xc4, 0x5c, 0x6a, 0xd7, + 0x1c, 0x60, 0x5e, 0x13, 0x30, 0x35, 0xb2, 0x94, 0x45, 0xba, 0x7a, 0x07, 0xce, 0x89, 0x3c, 0x74, + 0xe0, 0xde, 0xc7, 0x7f, 0x36, 0xce, 0x88, 0xcd, 0x21, 0xf5, 0x6b, 0x84, 0x47, 0x12, 0xe3, 0xf2, + 0x70, 0x9a, 0x69, 0x8f, 0xd6, 0x16, 0x1e, 0xb5, 0x7a, 0x9c, 0x52, 0x5e, 0x16, 0x1e, 0xbd, 0x48, + 0x5e, 0xd8, 0x95, 0x47, 0xe4, 0xdb, 0x08, 0x0f, 0x46, 0x9f, 0x61, 0x38, 0xe2, 0x69, 0x29, 0x04, + 0xc9, 0xd3, 0x52, 0xe1, 0x58, 0x1b, 0x96, 0x80, 0xf3, 0x84, 0xc0, 0xf9, 0x0c, 0x79, 0x3a, 0x19, + 0x20, 0xe1, 0xe3, 0x4d, 0x24, 0x38, 0x7e, 0x88, 0xf0, 0x50, 0x4c, 0x3f, 0xe7, 0xb8, 0xe4, 0xa3, + 0xc9, 0xde, 0x0f, 0x0a, 0xc7, 0xdb, 0x31, 0x05, 0x64, 0xa7, 0x05, 0xb2, 0x39, 0x72, 0x52, 0x4d, + 0xff, 0x8f, 0x0a, 0x39, 0x79, 0x7f, 0xec, 0xc2, 0x87, 0x52, 0x35, 0x5c, 0xf2, 0x82, 0x34, 0x36, + 0xb3, 0x84, 0xe6, 0xc2, 0xa9, 0x9d, 0x36, 0x03, 0x37, 0x7e, 0x8b, 0x84, 0x1f, 0xbf, 0x41, 0x37, + 0xae, 0x93, 0x37, 0x63, 0xae, 0xdc, 0x14, 0xe9, 0x5b, 0xef, 0x44, 0x94, 0x5f, 0x8f, 0x75, 0xdc, + 0x4a, 0x9a, 0xde, 0x71, 0xd7, 0xff, 0x46, 0x78, 0x2c, 0xd5, 0x4b, 0x3e, 0xfd, 0x2f, 0x48, 0xe7, + 0x74, 0x37, 0x7c, 0xb6, 0x23, 0xbd, 0x2b, 0x6f, 0x09, 0x3a, 0xdf, 0xb8, 0x71, 0x8c, 0x4c, 0xb5, + 0xc9, 0x26, 0x39, 0xd6, 0x36, 0x3b, 0xe4, 0x07, 0x08, 0x0f, 0x46, 0x65, 0xd1, 0xf4, 0x75, 0x27, + 0x91, 0x7e, 0x53, 0xd6, 0x9d, 0x4c, 0xa0, 0x55, 0x5e, 0x14, 0x6e, 0xcc, 0x12, 0x55, 0x4d, 0xfd, + 0x87, 0x22, 0x79, 0x70, 0x7f, 0x80, 0xf0, 0x40, 0xb4, 0x47, 0x19, 0x3c, 0xb9, 0x32, 0x2d, 0x83, + 0x97, 0xa2, 0x1f, 0x2b, 0x9f, 0x13, 0xf0, 0x16, 0xc8, 0xfc, 0x0e, 0xe1, 0x35, 0x45, 0xd2, 0x4d, + 0x4a, 0xef, 0x92, 0x1f, 0x23, 0x3c, 0x22, 0x13, 0x25, 0x65, 0x5b, 0x70, 0x0b, 0xa1, 0x59, 0xb6, + 0x05, 0xb7, 0xd2, 0x3a, 0x15, 0x55, 0xba, 0xb5, 0x51, 0x68, 0xa2, 0x57, 0x79, 0x1b, 0x7d, 0xd5, + 0x71, 0x75, 0x7f, 0xdd, 0x70, 0xbf, 0xda, 0x85, 0xc8, 0x2f, 0x11, 0x1e, 0x4d, 0xd1, 0xa1, 0xc8, + 0xc9, 0xf4, 0xc1, 0xe5, 0x37, 0x9f, 0xc2, 0xec, 0x0e, 0x5a, 0x00, 0xe2, 0x39, 0x81, 0xb8, 0x39, + 0xb2, 0x1b, 0x88, 0x5d, 0xde, 0x2c, 0x1a, 0xb6, 0x1c, 0xf4, 0x5d, 0xdc, 0xcd, 0x67, 0x90, 0x1c, + 0x91, 0x1c, 0x21, 0xb7, 0x15, 0x96, 0xc2, 0x78, 0x5a, 0x35, 0x0c, 0x7d, 0x4a, 0x0c, 0x7d, 0x92, + 0x94, 0x12, 0x13, 0x1e, 0x9b, 0xe7, 0xc4, 0xe4, 0x7a, 0xb8, 0x37, 0x94, 0x5a, 0xc8, 0xa4, 0x7c, + 0x8c, 0x88, 0x0c, 0x93, 0x09, 0xe3, 0x29, 0x01, 0xe3, 0x08, 0x39, 0x2c, 0x83, 0x11, 0xe8, 0x37, + 0x77, 0xc9, 0xd7, 0x61, 0x09, 0x34, 0xe4, 0x81, 0xf4, 0x25, 0xd0, 0xa4, 0x7b, 0xb4, 0x58, 0x02, + 0xcd, 0xca, 0x85, 0x32, 0x25, 0xa0, 0x4c, 0x92, 0xa2, 0x9a, 0xfa, 0x3f, 0x81, 0xea, 0x1d, 0x0e, + 0xe7, 0x6b, 0xb0, 0x67, 0x84, 0x3d, 0xb4, 0xde, 0x33, 0xda, 0x40, 0x94, 0xa2, 0xa5, 0x28, 0x8a, + 0x40, 0x34, 0x46, 0x0a, 0xe9, 0x88, 0xc8, 0x37, 0x10, 0x1e, 0x6c, 0x92, 0x24, 0x64, 0x60, 0xe4, + 0xfa, 0x87, 0x0c, 0x4c, 0x8a, 0xbe, 0xa1, 0x1c, 0x15, 0x60, 0x8a, 0xe4, 0x48, 0x0c, 0x8c, 0x0f, + 0xd6, 0x3a, 0x1c, 0x1e, 0xc8, 0x7d, 0x84, 0x49, 0x52, 0x7d, 0x20, 0xcf, 0xa6, 0x0f, 0x94, 0xd0, + 0x3c, 0x0a, 0x27, 0xda, 0x33, 0x06, 0x60, 0xd3, 0x02, 0x98, 0x42, 0x26, 0xe4, 0xc0, 0xd6, 0xb7, + 0x41, 0x7c, 0x80, 0xf0, 0x68, 0x8a, 0xc8, 0x20, 0x5b, 0xef, 0xad, 0x95, 0x0e, 0xd9, 0x7a, 0xcf, + 0x50, 0x30, 0x60, 0x87, 0x6a, 0x5e, 0xef, 0x0d, 0xa8, 0x89, 0xf5, 0x4e, 0xfe, 0x82, 0xf0, 0x44, + 0x96, 0x8a, 0x40, 0x5e, 0xca, 0xa6, 0x2b, 0x45, 0xe5, 0x28, 0x9c, 0xd9, 0x4d, 0x53, 0x70, 0xe6, + 0x25, 0xe1, 0xcc, 0x73, 0x64, 0xb6, 0x35, 0xef, 0x7a, 0x32, 0x51, 0x93, 0x5f, 0x21, 0x9c, 0x4f, + 0x53, 0x12, 0x48, 0x0b, 0x5e, 0x53, 0x14, 0x0d, 0xd9, 0xbd, 0x2f, 0x4b, 0xa8, 0x48, 0xb9, 0x29, + 0x35, 0xe0, 0x97, 0x45, 0xbb, 0x18, 0xea, 0xfb, 0x08, 0x8f, 0xc8, 0x44, 0x04, 0x59, 0x5e, 0x6b, + 0x21, 0x60, 0xc8, 0xf2, 0x5a, 0x2b, 0x6d, 0xa2, 0x9d, 0x6d, 0x60, 0xfe, 0xc2, 0x87, 0x0f, 0xc6, + 0xd1, 0x47, 0x0f, 0xc6, 0xd1, 0x3f, 0x1f, 0x8c, 0xa3, 0x7b, 0x0f, 0xc7, 0xf7, 0x7c, 0xf4, 0x70, + 0x7c, 0xcf, 0x5f, 0x1f, 0x8e, 0xef, 0xb9, 0x31, 0x93, 0xfd, 0x88, 0xb9, 0x11, 0x9c, 0xb4, 0xeb, + 0x2e, 0xf5, 0x97, 0x7b, 0xc4, 0xeb, 0xd1, 0x73, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x8b, 0x3f, + 0x8b, 0x0e, 0x87, 0x2e, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// 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 { + // Parameters queries the parameters of the module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a LimitOrderTrancheUser by index. + LimitOrderTrancheUser(ctx context.Context, in *QueryGetLimitOrderTrancheUserRequest, opts ...grpc.CallOption) (*QueryGetLimitOrderTrancheUserResponse, error) + // Queries a list of LimitOrderTranchUser items. + LimitOrderTrancheUserAll(ctx context.Context, in *QueryAllLimitOrderTrancheUserRequest, opts ...grpc.CallOption) (*QueryAllLimitOrderTrancheUserResponse, error) + // Queries a list of LimitOrderTrancheUser items for a given address. + LimitOrderTrancheUserAllByAddress(ctx context.Context, in *QueryAllLimitOrderTrancheUserByAddressRequest, opts ...grpc.CallOption) (*QueryAllLimitOrderTrancheUserByAddressResponse, error) + // Queries a LimitOrderTranche by index. + LimitOrderTranche(ctx context.Context, in *QueryGetLimitOrderTrancheRequest, opts ...grpc.CallOption) (*QueryGetLimitOrderTrancheResponse, error) + // Queries a list of LimitOrderTranche items for a given pairID / TokenIn + // combination. + LimitOrderTrancheAll(ctx context.Context, in *QueryAllLimitOrderTrancheRequest, opts ...grpc.CallOption) (*QueryAllLimitOrderTrancheResponse, error) + // Queries a list of UserDeposits items. + UserDepositsAll(ctx context.Context, in *QueryAllUserDepositsRequest, opts ...grpc.CallOption) (*QueryAllUserDepositsResponse, error) + // Queries a list of TickLiquidity items. + TickLiquidityAll(ctx context.Context, in *QueryAllTickLiquidityRequest, opts ...grpc.CallOption) (*QueryAllTickLiquidityResponse, error) + // Queries a InactiveLimitOrderTranche by index. + InactiveLimitOrderTranche(ctx context.Context, in *QueryGetInactiveLimitOrderTrancheRequest, opts ...grpc.CallOption) (*QueryGetInactiveLimitOrderTrancheResponse, error) + // Queries a list of InactiveLimitOrderTranche items. + InactiveLimitOrderTrancheAll(ctx context.Context, in *QueryAllInactiveLimitOrderTrancheRequest, opts ...grpc.CallOption) (*QueryAllInactiveLimitOrderTrancheResponse, error) + // Queries a list of PoolReserves items. + PoolReservesAll(ctx context.Context, in *QueryAllPoolReservesRequest, opts ...grpc.CallOption) (*QueryAllPoolReservesResponse, error) + // Queries a PoolReserve by index + PoolReserves(ctx context.Context, in *QueryGetPoolReservesRequest, opts ...grpc.CallOption) (*QueryGetPoolReservesResponse, error) + // DEPRECATED Queries the simulated result of a multihop swap + EstimateMultiHopSwap(ctx context.Context, in *QueryEstimateMultiHopSwapRequest, opts ...grpc.CallOption) (*QueryEstimateMultiHopSwapResponse, error) + // DEPRECATED Queries the simulated result of a PlaceLimit order + EstimatePlaceLimitOrder(ctx context.Context, in *QueryEstimatePlaceLimitOrderRequest, opts ...grpc.CallOption) (*QueryEstimatePlaceLimitOrderResponse, error) + // Queries a pool by pair, tick and fee + Pool(ctx context.Context, in *QueryPoolRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) + // Queries a pool by ID + PoolByID(ctx context.Context, in *QueryPoolByIDRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) + // Queries a PoolMetadata by ID + PoolMetadata(ctx context.Context, in *QueryGetPoolMetadataRequest, opts ...grpc.CallOption) (*QueryGetPoolMetadataResponse, error) + // Queries a list of PoolMetadata items. + PoolMetadataAll(ctx context.Context, in *QueryAllPoolMetadataRequest, opts ...grpc.CallOption) (*QueryAllPoolMetadataResponse, error) + // Simulates MsgDeposit + SimulateDeposit(ctx context.Context, in *QuerySimulateDepositRequest, opts ...grpc.CallOption) (*QuerySimulateDepositResponse, error) + // Simulates MsgWithdrawal + SimulateWithdrawal(ctx context.Context, in *QuerySimulateWithdrawalRequest, opts ...grpc.CallOption) (*QuerySimulateWithdrawalResponse, error) + // Simulates MsgPlaceLimitOrder + SimulatePlaceLimitOrder(ctx context.Context, in *QuerySimulatePlaceLimitOrderRequest, opts ...grpc.CallOption) (*QuerySimulatePlaceLimitOrderResponse, error) + // Simulates MsgWithdrawFilledLimitOrder + SimulateWithdrawFilledLimitOrder(ctx context.Context, in *QuerySimulateWithdrawFilledLimitOrderRequest, opts ...grpc.CallOption) (*QuerySimulateWithdrawFilledLimitOrderResponse, error) + // Simulates MsgCancelLimitOrder + SimulateCancelLimitOrder(ctx context.Context, in *QuerySimulateCancelLimitOrderRequest, opts ...grpc.CallOption) (*QuerySimulateCancelLimitOrderResponse, error) + // Simulates MsgMultiHopSwap + SimulateMultiHopSwap(ctx context.Context, in *QuerySimulateMultiHopSwapRequest, opts ...grpc.CallOption) (*QuerySimulateMultiHopSwapResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/Params", in, out, opts...) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).LimitOrderTrancheAll(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/neutron.dex.Query/LimitOrderTrancheAll", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).LimitOrderTrancheAll(ctx, req.(*QueryAllLimitOrderTrancheRequest)) - } - return interceptor(ctx, in, info, handler) + return out, nil } -func _Query_UserDepositsAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllUserDepositsRequest) - if err := dec(in); err != nil { +func (c *queryClient) LimitOrderTrancheUser(ctx context.Context, in *QueryGetLimitOrderTrancheUserRequest, opts ...grpc.CallOption) (*QueryGetLimitOrderTrancheUserResponse, error) { + out := new(QueryGetLimitOrderTrancheUserResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/LimitOrderTrancheUser", in, out, opts...) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).UserDepositsAll(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/neutron.dex.Query/UserDepositsAll", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).UserDepositsAll(ctx, req.(*QueryAllUserDepositsRequest)) - } - return interceptor(ctx, in, info, handler) + return out, nil } -func _Query_TickLiquidityAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllTickLiquidityRequest) - if err := dec(in); err != nil { +func (c *queryClient) LimitOrderTrancheUserAll(ctx context.Context, in *QueryAllLimitOrderTrancheUserRequest, opts ...grpc.CallOption) (*QueryAllLimitOrderTrancheUserResponse, error) { + out := new(QueryAllLimitOrderTrancheUserResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/LimitOrderTrancheUserAll", in, out, opts...) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).TickLiquidityAll(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/neutron.dex.Query/TickLiquidityAll", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).TickLiquidityAll(ctx, req.(*QueryAllTickLiquidityRequest)) - } - return interceptor(ctx, in, info, handler) + return out, nil } -func _Query_InactiveLimitOrderTranche_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetInactiveLimitOrderTrancheRequest) - if err := dec(in); err != nil { +func (c *queryClient) LimitOrderTrancheUserAllByAddress(ctx context.Context, in *QueryAllLimitOrderTrancheUserByAddressRequest, opts ...grpc.CallOption) (*QueryAllLimitOrderTrancheUserByAddressResponse, error) { + out := new(QueryAllLimitOrderTrancheUserByAddressResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/LimitOrderTrancheUserAllByAddress", in, out, opts...) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).InactiveLimitOrderTranche(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/neutron.dex.Query/InactiveLimitOrderTranche", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).InactiveLimitOrderTranche(ctx, req.(*QueryGetInactiveLimitOrderTrancheRequest)) - } - return interceptor(ctx, in, info, handler) + return out, nil } -func _Query_InactiveLimitOrderTrancheAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllInactiveLimitOrderTrancheRequest) - if err := dec(in); err != nil { +func (c *queryClient) LimitOrderTranche(ctx context.Context, in *QueryGetLimitOrderTrancheRequest, opts ...grpc.CallOption) (*QueryGetLimitOrderTrancheResponse, error) { + out := new(QueryGetLimitOrderTrancheResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/LimitOrderTranche", in, out, opts...) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).InactiveLimitOrderTrancheAll(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/neutron.dex.Query/InactiveLimitOrderTrancheAll", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).InactiveLimitOrderTrancheAll(ctx, req.(*QueryAllInactiveLimitOrderTrancheRequest)) - } - return interceptor(ctx, in, info, handler) + return out, nil } -func _Query_PoolReservesAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllPoolReservesRequest) - if err := dec(in); err != nil { +func (c *queryClient) LimitOrderTrancheAll(ctx context.Context, in *QueryAllLimitOrderTrancheRequest, opts ...grpc.CallOption) (*QueryAllLimitOrderTrancheResponse, error) { + out := new(QueryAllLimitOrderTrancheResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/LimitOrderTrancheAll", in, out, opts...) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).PoolReservesAll(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/neutron.dex.Query/PoolReservesAll", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).PoolReservesAll(ctx, req.(*QueryAllPoolReservesRequest)) - } - return interceptor(ctx, in, info, handler) + return out, nil } -func _Query_PoolReserves_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetPoolReservesRequest) - if err := dec(in); err != nil { +func (c *queryClient) UserDepositsAll(ctx context.Context, in *QueryAllUserDepositsRequest, opts ...grpc.CallOption) (*QueryAllUserDepositsResponse, error) { + out := new(QueryAllUserDepositsResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/UserDepositsAll", in, out, opts...) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).PoolReserves(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/neutron.dex.Query/PoolReserves", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).PoolReserves(ctx, req.(*QueryGetPoolReservesRequest)) - } - return interceptor(ctx, in, info, handler) + return out, nil } -func _Query_EstimateMultiHopSwap_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryEstimateMultiHopSwapRequest) - if err := dec(in); err != nil { +func (c *queryClient) TickLiquidityAll(ctx context.Context, in *QueryAllTickLiquidityRequest, opts ...grpc.CallOption) (*QueryAllTickLiquidityResponse, error) { + out := new(QueryAllTickLiquidityResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/TickLiquidityAll", in, out, opts...) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).EstimateMultiHopSwap(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/neutron.dex.Query/EstimateMultiHopSwap", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).EstimateMultiHopSwap(ctx, req.(*QueryEstimateMultiHopSwapRequest)) - } - return interceptor(ctx, in, info, handler) + return out, nil } -func _Query_EstimatePlaceLimitOrder_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryEstimatePlaceLimitOrderRequest) - if err := dec(in); err != nil { +func (c *queryClient) InactiveLimitOrderTranche(ctx context.Context, in *QueryGetInactiveLimitOrderTrancheRequest, opts ...grpc.CallOption) (*QueryGetInactiveLimitOrderTrancheResponse, error) { + out := new(QueryGetInactiveLimitOrderTrancheResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/InactiveLimitOrderTranche", in, out, opts...) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).EstimatePlaceLimitOrder(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/neutron.dex.Query/EstimatePlaceLimitOrder", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).EstimatePlaceLimitOrder(ctx, req.(*QueryEstimatePlaceLimitOrderRequest)) - } - return interceptor(ctx, in, info, handler) + return out, nil } -func _Query_Pool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPoolRequest) - if err := dec(in); err != nil { +func (c *queryClient) InactiveLimitOrderTrancheAll(ctx context.Context, in *QueryAllInactiveLimitOrderTrancheRequest, opts ...grpc.CallOption) (*QueryAllInactiveLimitOrderTrancheResponse, error) { + out := new(QueryAllInactiveLimitOrderTrancheResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/InactiveLimitOrderTrancheAll", in, out, opts...) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).Pool(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/neutron.dex.Query/Pool", + return out, nil +} + +func (c *queryClient) PoolReservesAll(ctx context.Context, in *QueryAllPoolReservesRequest, opts ...grpc.CallOption) (*QueryAllPoolReservesResponse, error) { + out := new(QueryAllPoolReservesResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/PoolReservesAll", in, out, opts...) + if err != nil { + return nil, err } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Pool(ctx, req.(*QueryPoolRequest)) + return out, nil +} + +func (c *queryClient) PoolReserves(ctx context.Context, in *QueryGetPoolReservesRequest, opts ...grpc.CallOption) (*QueryGetPoolReservesResponse, error) { + out := new(QueryGetPoolReservesResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/PoolReserves", in, out, opts...) + if err != nil { + return nil, err } - return interceptor(ctx, in, info, handler) + return out, nil } -func _Query_PoolByID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPoolByIDRequest) - if err := dec(in); err != nil { +// Deprecated: Do not use. +func (c *queryClient) EstimateMultiHopSwap(ctx context.Context, in *QueryEstimateMultiHopSwapRequest, opts ...grpc.CallOption) (*QueryEstimateMultiHopSwapResponse, error) { + out := new(QueryEstimateMultiHopSwapResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/EstimateMultiHopSwap", in, out, opts...) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).PoolByID(ctx, in) + return out, nil +} + +// Deprecated: Do not use. +func (c *queryClient) EstimatePlaceLimitOrder(ctx context.Context, in *QueryEstimatePlaceLimitOrderRequest, opts ...grpc.CallOption) (*QueryEstimatePlaceLimitOrderResponse, error) { + out := new(QueryEstimatePlaceLimitOrderResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/EstimatePlaceLimitOrder", in, out, opts...) + if err != nil { + return nil, err } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/neutron.dex.Query/PoolByID", + return out, nil +} + +func (c *queryClient) Pool(ctx context.Context, in *QueryPoolRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) { + out := new(QueryPoolResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/Pool", in, out, opts...) + if err != nil { + return nil, err } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).PoolByID(ctx, req.(*QueryPoolByIDRequest)) + return out, nil +} + +func (c *queryClient) PoolByID(ctx context.Context, in *QueryPoolByIDRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) { + out := new(QueryPoolResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/PoolByID", in, out, opts...) + if err != nil { + return nil, err } - return interceptor(ctx, in, info, handler) + return out, nil } -func _Query_PoolMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetPoolMetadataRequest) - if err := dec(in); err != nil { +func (c *queryClient) PoolMetadata(ctx context.Context, in *QueryGetPoolMetadataRequest, opts ...grpc.CallOption) (*QueryGetPoolMetadataResponse, error) { + out := new(QueryGetPoolMetadataResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/PoolMetadata", in, out, opts...) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).PoolMetadata(ctx, in) + return out, nil +} + +func (c *queryClient) PoolMetadataAll(ctx context.Context, in *QueryAllPoolMetadataRequest, opts ...grpc.CallOption) (*QueryAllPoolMetadataResponse, error) { + out := new(QueryAllPoolMetadataResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/PoolMetadataAll", in, out, opts...) + if err != nil { + return nil, err } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/neutron.dex.Query/PoolMetadata", + return out, nil +} + +func (c *queryClient) SimulateDeposit(ctx context.Context, in *QuerySimulateDepositRequest, opts ...grpc.CallOption) (*QuerySimulateDepositResponse, error) { + out := new(QuerySimulateDepositResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/SimulateDeposit", in, out, opts...) + if err != nil { + return nil, err } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).PoolMetadata(ctx, req.(*QueryGetPoolMetadataRequest)) + return out, nil +} + +func (c *queryClient) SimulateWithdrawal(ctx context.Context, in *QuerySimulateWithdrawalRequest, opts ...grpc.CallOption) (*QuerySimulateWithdrawalResponse, error) { + out := new(QuerySimulateWithdrawalResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/SimulateWithdrawal", in, out, opts...) + if err != nil { + return nil, err } - return interceptor(ctx, in, info, handler) + return out, nil } -func _Query_PoolMetadataAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllPoolMetadataRequest) - if err := dec(in); err != nil { +func (c *queryClient) SimulatePlaceLimitOrder(ctx context.Context, in *QuerySimulatePlaceLimitOrderRequest, opts ...grpc.CallOption) (*QuerySimulatePlaceLimitOrderResponse, error) { + out := new(QuerySimulatePlaceLimitOrderResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/SimulatePlaceLimitOrder", in, out, opts...) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).PoolMetadataAll(ctx, in) + return out, nil +} + +func (c *queryClient) SimulateWithdrawFilledLimitOrder(ctx context.Context, in *QuerySimulateWithdrawFilledLimitOrderRequest, opts ...grpc.CallOption) (*QuerySimulateWithdrawFilledLimitOrderResponse, error) { + out := new(QuerySimulateWithdrawFilledLimitOrderResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/SimulateWithdrawFilledLimitOrder", in, out, opts...) + if err != nil { + return nil, err } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/neutron.dex.Query/PoolMetadataAll", + return out, nil +} + +func (c *queryClient) SimulateCancelLimitOrder(ctx context.Context, in *QuerySimulateCancelLimitOrderRequest, opts ...grpc.CallOption) (*QuerySimulateCancelLimitOrderResponse, error) { + out := new(QuerySimulateCancelLimitOrderResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/SimulateCancelLimitOrder", in, out, opts...) + if err != nil { + return nil, err } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).PoolMetadataAll(ctx, req.(*QueryAllPoolMetadataRequest)) + return out, nil +} + +func (c *queryClient) SimulateMultiHopSwap(ctx context.Context, in *QuerySimulateMultiHopSwapRequest, opts ...grpc.CallOption) (*QuerySimulateMultiHopSwapResponse, error) { + out := new(QuerySimulateMultiHopSwapResponse) + err := c.cc.Invoke(ctx, "/neutron.dex.Query/SimulateMultiHopSwap", in, out, opts...) + if err != nil { + return nil, err } - return interceptor(ctx, in, info, handler) + return out, nil } -var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "neutron.dex.Query", - HandlerType: (*QueryServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Params", - Handler: _Query_Params_Handler, - }, - { - MethodName: "LimitOrderTrancheUser", - Handler: _Query_LimitOrderTrancheUser_Handler, - }, - { - MethodName: "LimitOrderTrancheUserAll", - Handler: _Query_LimitOrderTrancheUserAll_Handler, - }, - { - MethodName: "LimitOrderTrancheUserAllByAddress", - Handler: _Query_LimitOrderTrancheUserAllByAddress_Handler, - }, - { - MethodName: "LimitOrderTranche", - Handler: _Query_LimitOrderTranche_Handler, - }, - { - MethodName: "LimitOrderTrancheAll", - Handler: _Query_LimitOrderTrancheAll_Handler, - }, - { - MethodName: "UserDepositsAll", - Handler: _Query_UserDepositsAll_Handler, - }, - { - MethodName: "TickLiquidityAll", - Handler: _Query_TickLiquidityAll_Handler, - }, - { - MethodName: "InactiveLimitOrderTranche", - Handler: _Query_InactiveLimitOrderTranche_Handler, - }, - { - MethodName: "InactiveLimitOrderTrancheAll", - Handler: _Query_InactiveLimitOrderTrancheAll_Handler, - }, - { - MethodName: "PoolReservesAll", - Handler: _Query_PoolReservesAll_Handler, - }, - { - MethodName: "PoolReserves", - Handler: _Query_PoolReserves_Handler, - }, - { - MethodName: "EstimateMultiHopSwap", - Handler: _Query_EstimateMultiHopSwap_Handler, - }, - { - MethodName: "EstimatePlaceLimitOrder", - Handler: _Query_EstimatePlaceLimitOrder_Handler, - }, - { - MethodName: "Pool", - Handler: _Query_Pool_Handler, - }, - { - MethodName: "PoolByID", - Handler: _Query_PoolByID_Handler, - }, - { - MethodName: "PoolMetadata", - Handler: _Query_PoolMetadata_Handler, - }, - { - MethodName: "PoolMetadataAll", - Handler: _Query_PoolMetadataAll_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "neutron/dex/query.proto", +// QueryServer is the server API for Query service. +type QueryServer interface { + // Parameters queries the parameters of the module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a LimitOrderTrancheUser by index. + LimitOrderTrancheUser(context.Context, *QueryGetLimitOrderTrancheUserRequest) (*QueryGetLimitOrderTrancheUserResponse, error) + // Queries a list of LimitOrderTranchUser items. + LimitOrderTrancheUserAll(context.Context, *QueryAllLimitOrderTrancheUserRequest) (*QueryAllLimitOrderTrancheUserResponse, error) + // Queries a list of LimitOrderTrancheUser items for a given address. + LimitOrderTrancheUserAllByAddress(context.Context, *QueryAllLimitOrderTrancheUserByAddressRequest) (*QueryAllLimitOrderTrancheUserByAddressResponse, error) + // Queries a LimitOrderTranche by index. + LimitOrderTranche(context.Context, *QueryGetLimitOrderTrancheRequest) (*QueryGetLimitOrderTrancheResponse, error) + // Queries a list of LimitOrderTranche items for a given pairID / TokenIn + // combination. + LimitOrderTrancheAll(context.Context, *QueryAllLimitOrderTrancheRequest) (*QueryAllLimitOrderTrancheResponse, error) + // Queries a list of UserDeposits items. + UserDepositsAll(context.Context, *QueryAllUserDepositsRequest) (*QueryAllUserDepositsResponse, error) + // Queries a list of TickLiquidity items. + TickLiquidityAll(context.Context, *QueryAllTickLiquidityRequest) (*QueryAllTickLiquidityResponse, error) + // Queries a InactiveLimitOrderTranche by index. + InactiveLimitOrderTranche(context.Context, *QueryGetInactiveLimitOrderTrancheRequest) (*QueryGetInactiveLimitOrderTrancheResponse, error) + // Queries a list of InactiveLimitOrderTranche items. + InactiveLimitOrderTrancheAll(context.Context, *QueryAllInactiveLimitOrderTrancheRequest) (*QueryAllInactiveLimitOrderTrancheResponse, error) + // Queries a list of PoolReserves items. + PoolReservesAll(context.Context, *QueryAllPoolReservesRequest) (*QueryAllPoolReservesResponse, error) + // Queries a PoolReserve by index + PoolReserves(context.Context, *QueryGetPoolReservesRequest) (*QueryGetPoolReservesResponse, error) + // DEPRECATED Queries the simulated result of a multihop swap + EstimateMultiHopSwap(context.Context, *QueryEstimateMultiHopSwapRequest) (*QueryEstimateMultiHopSwapResponse, error) + // DEPRECATED Queries the simulated result of a PlaceLimit order + EstimatePlaceLimitOrder(context.Context, *QueryEstimatePlaceLimitOrderRequest) (*QueryEstimatePlaceLimitOrderResponse, error) + // Queries a pool by pair, tick and fee + Pool(context.Context, *QueryPoolRequest) (*QueryPoolResponse, error) + // Queries a pool by ID + PoolByID(context.Context, *QueryPoolByIDRequest) (*QueryPoolResponse, error) + // Queries a PoolMetadata by ID + PoolMetadata(context.Context, *QueryGetPoolMetadataRequest) (*QueryGetPoolMetadataResponse, error) + // Queries a list of PoolMetadata items. + PoolMetadataAll(context.Context, *QueryAllPoolMetadataRequest) (*QueryAllPoolMetadataResponse, error) + // Simulates MsgDeposit + SimulateDeposit(context.Context, *QuerySimulateDepositRequest) (*QuerySimulateDepositResponse, error) + // Simulates MsgWithdrawal + SimulateWithdrawal(context.Context, *QuerySimulateWithdrawalRequest) (*QuerySimulateWithdrawalResponse, error) + // Simulates MsgPlaceLimitOrder + SimulatePlaceLimitOrder(context.Context, *QuerySimulatePlaceLimitOrderRequest) (*QuerySimulatePlaceLimitOrderResponse, error) + // Simulates MsgWithdrawFilledLimitOrder + SimulateWithdrawFilledLimitOrder(context.Context, *QuerySimulateWithdrawFilledLimitOrderRequest) (*QuerySimulateWithdrawFilledLimitOrderResponse, error) + // Simulates MsgCancelLimitOrder + SimulateCancelLimitOrder(context.Context, *QuerySimulateCancelLimitOrderRequest) (*QuerySimulateCancelLimitOrderResponse, error) + // Simulates MsgMultiHopSwap + SimulateMultiHopSwap(context.Context, *QuerySimulateMultiHopSwapRequest) (*QuerySimulateMultiHopSwapResponse, error) } -func (m *QueryParamsRequest) 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 +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { } -func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} +func (*UnimplementedQueryServer) LimitOrderTrancheUser(ctx context.Context, req *QueryGetLimitOrderTrancheUserRequest) (*QueryGetLimitOrderTrancheUserResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method LimitOrderTrancheUser not implemented") +} +func (*UnimplementedQueryServer) LimitOrderTrancheUserAll(ctx context.Context, req *QueryAllLimitOrderTrancheUserRequest) (*QueryAllLimitOrderTrancheUserResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method LimitOrderTrancheUserAll not implemented") +} +func (*UnimplementedQueryServer) LimitOrderTrancheUserAllByAddress(ctx context.Context, req *QueryAllLimitOrderTrancheUserByAddressRequest) (*QueryAllLimitOrderTrancheUserByAddressResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method LimitOrderTrancheUserAllByAddress not implemented") +} +func (*UnimplementedQueryServer) LimitOrderTranche(ctx context.Context, req *QueryGetLimitOrderTrancheRequest) (*QueryGetLimitOrderTrancheResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method LimitOrderTranche not implemented") +} +func (*UnimplementedQueryServer) LimitOrderTrancheAll(ctx context.Context, req *QueryAllLimitOrderTrancheRequest) (*QueryAllLimitOrderTrancheResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method LimitOrderTrancheAll not implemented") +} +func (*UnimplementedQueryServer) UserDepositsAll(ctx context.Context, req *QueryAllUserDepositsRequest) (*QueryAllUserDepositsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UserDepositsAll not implemented") +} +func (*UnimplementedQueryServer) TickLiquidityAll(ctx context.Context, req *QueryAllTickLiquidityRequest) (*QueryAllTickLiquidityResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TickLiquidityAll not implemented") +} +func (*UnimplementedQueryServer) InactiveLimitOrderTranche(ctx context.Context, req *QueryGetInactiveLimitOrderTrancheRequest) (*QueryGetInactiveLimitOrderTrancheResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method InactiveLimitOrderTranche not implemented") +} +func (*UnimplementedQueryServer) InactiveLimitOrderTrancheAll(ctx context.Context, req *QueryAllInactiveLimitOrderTrancheRequest) (*QueryAllInactiveLimitOrderTrancheResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method InactiveLimitOrderTrancheAll not implemented") +} +func (*UnimplementedQueryServer) PoolReservesAll(ctx context.Context, req *QueryAllPoolReservesRequest) (*QueryAllPoolReservesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PoolReservesAll not implemented") +} +func (*UnimplementedQueryServer) PoolReserves(ctx context.Context, req *QueryGetPoolReservesRequest) (*QueryGetPoolReservesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PoolReserves not implemented") +} +func (*UnimplementedQueryServer) EstimateMultiHopSwap(ctx context.Context, req *QueryEstimateMultiHopSwapRequest) (*QueryEstimateMultiHopSwapResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EstimateMultiHopSwap not implemented") +} +func (*UnimplementedQueryServer) EstimatePlaceLimitOrder(ctx context.Context, req *QueryEstimatePlaceLimitOrderRequest) (*QueryEstimatePlaceLimitOrderResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EstimatePlaceLimitOrder not implemented") +} +func (*UnimplementedQueryServer) Pool(ctx context.Context, req *QueryPoolRequest) (*QueryPoolResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Pool not implemented") +} +func (*UnimplementedQueryServer) PoolByID(ctx context.Context, req *QueryPoolByIDRequest) (*QueryPoolResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PoolByID not implemented") +} +func (*UnimplementedQueryServer) PoolMetadata(ctx context.Context, req *QueryGetPoolMetadataRequest) (*QueryGetPoolMetadataResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PoolMetadata not implemented") +} +func (*UnimplementedQueryServer) PoolMetadataAll(ctx context.Context, req *QueryAllPoolMetadataRequest) (*QueryAllPoolMetadataResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PoolMetadataAll not implemented") +} +func (*UnimplementedQueryServer) SimulateDeposit(ctx context.Context, req *QuerySimulateDepositRequest) (*QuerySimulateDepositResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SimulateDeposit not implemented") +} +func (*UnimplementedQueryServer) SimulateWithdrawal(ctx context.Context, req *QuerySimulateWithdrawalRequest) (*QuerySimulateWithdrawalResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SimulateWithdrawal not implemented") +} +func (*UnimplementedQueryServer) SimulatePlaceLimitOrder(ctx context.Context, req *QuerySimulatePlaceLimitOrderRequest) (*QuerySimulatePlaceLimitOrderResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SimulatePlaceLimitOrder not implemented") +} +func (*UnimplementedQueryServer) SimulateWithdrawFilledLimitOrder(ctx context.Context, req *QuerySimulateWithdrawFilledLimitOrderRequest) (*QuerySimulateWithdrawFilledLimitOrderResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SimulateWithdrawFilledLimitOrder not implemented") +} +func (*UnimplementedQueryServer) SimulateCancelLimitOrder(ctx context.Context, req *QuerySimulateCancelLimitOrderRequest) (*QuerySimulateCancelLimitOrderResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SimulateCancelLimitOrder not implemented") +} +func (*UnimplementedQueryServer) SimulateMultiHopSwap(ctx context.Context, req *QuerySimulateMultiHopSwapRequest) (*QuerySimulateMultiHopSwapResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SimulateMultiHopSwap not implemented") } -func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) } -func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) +func _Query_LimitOrderTrancheUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetLimitOrderTrancheUserRequest) + if err := dec(in); err != nil { + return nil, err } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil + if interceptor == nil { + return srv.(QueryServer).LimitOrderTrancheUser(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/LimitOrderTrancheUser", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).LimitOrderTrancheUser(ctx, req.(*QueryGetLimitOrderTrancheUserRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryGetLimitOrderTrancheUserRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_LimitOrderTrancheUserAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllLimitOrderTrancheUserRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil + if interceptor == nil { + return srv.(QueryServer).LimitOrderTrancheUserAll(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/LimitOrderTrancheUserAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).LimitOrderTrancheUserAll(ctx, req.(*QueryAllLimitOrderTrancheUserRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryGetLimitOrderTrancheUserRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func _Query_LimitOrderTrancheUserAllByAddress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllLimitOrderTrancheUserByAddressRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).LimitOrderTrancheUserAllByAddress(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/LimitOrderTrancheUserAllByAddress", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).LimitOrderTrancheUserAllByAddress(ctx, req.(*QueryAllLimitOrderTrancheUserByAddressRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryGetLimitOrderTrancheUserRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.CalcWithdrawableShares { - i-- - if m.CalcWithdrawableShares { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x18 +func _Query_LimitOrderTranche_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetLimitOrderTrancheRequest) + if err := dec(in); err != nil { + return nil, err } - if len(m.TrancheKey) > 0 { - i -= len(m.TrancheKey) - copy(dAtA[i:], m.TrancheKey) - i = encodeVarintQuery(dAtA, i, uint64(len(m.TrancheKey))) - i-- - dAtA[i] = 0x12 + if interceptor == nil { + return srv.(QueryServer).LimitOrderTranche(ctx, in) } - if len(m.Address) > 0 { - i -= len(m.Address) - copy(dAtA[i:], m.Address) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) - i-- - dAtA[i] = 0xa + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/LimitOrderTranche", } - return len(dAtA) - i, nil + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).LimitOrderTranche(ctx, req.(*QueryGetLimitOrderTrancheRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryGetLimitOrderTrancheUserResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_LimitOrderTrancheAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllLimitOrderTrancheRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *QueryGetLimitOrderTrancheUserResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryGetLimitOrderTrancheUserResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.WithdrawableShares != nil { - { - size := m.WithdrawableShares.Size() - i -= size - if _, err := m.WithdrawableShares.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 + if interceptor == nil { + return srv.(QueryServer).LimitOrderTrancheAll(ctx, in) } - if m.LimitOrderTrancheUser != nil { - { - size, err := m.LimitOrderTrancheUser.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/LimitOrderTrancheAll", } - return len(dAtA) - i, nil + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).LimitOrderTrancheAll(ctx, req.(*QueryAllLimitOrderTrancheRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryAllLimitOrderTrancheUserRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_UserDepositsAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllUserDepositsRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *QueryAllLimitOrderTrancheUserRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryAllLimitOrderTrancheUserRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa + if interceptor == nil { + return srv.(QueryServer).UserDepositsAll(ctx, in) } - return len(dAtA) - i, nil + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/UserDepositsAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).UserDepositsAll(ctx, req.(*QueryAllUserDepositsRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryAllLimitOrderTrancheUserResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_TickLiquidityAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllTickLiquidityRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *QueryAllLimitOrderTrancheUserResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryAllLimitOrderTrancheUserResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 + if interceptor == nil { + return srv.(QueryServer).TickLiquidityAll(ctx, in) } - if len(m.LimitOrderTrancheUser) > 0 { - for iNdEx := len(m.LimitOrderTrancheUser) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.LimitOrderTrancheUser[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/TickLiquidityAll", } - return len(dAtA) - i, nil + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TickLiquidityAll(ctx, req.(*QueryAllTickLiquidityRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryGetLimitOrderTrancheRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_InactiveLimitOrderTranche_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetInactiveLimitOrderTrancheRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *QueryGetLimitOrderTrancheRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + if interceptor == nil { + return srv.(QueryServer).InactiveLimitOrderTranche(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/InactiveLimitOrderTranche", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).InactiveLimitOrderTranche(ctx, req.(*QueryGetInactiveLimitOrderTrancheRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryGetLimitOrderTrancheRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TrancheKey) > 0 { - i -= len(m.TrancheKey) - copy(dAtA[i:], m.TrancheKey) - i = encodeVarintQuery(dAtA, i, uint64(len(m.TrancheKey))) - i-- - dAtA[i] = 0x22 +func _Query_InactiveLimitOrderTrancheAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllInactiveLimitOrderTrancheRequest) + if err := dec(in); err != nil { + return nil, err } - if len(m.TokenIn) > 0 { - i -= len(m.TokenIn) - copy(dAtA[i:], m.TokenIn) - i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenIn))) - i-- - dAtA[i] = 0x1a + if interceptor == nil { + return srv.(QueryServer).InactiveLimitOrderTrancheAll(ctx, in) } - if m.TickIndex != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.TickIndex)) - i-- - dAtA[i] = 0x10 + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/InactiveLimitOrderTrancheAll", } - if len(m.PairId) > 0 { - i -= len(m.PairId) - copy(dAtA[i:], m.PairId) - i = encodeVarintQuery(dAtA, i, uint64(len(m.PairId))) - i-- - dAtA[i] = 0xa + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).InactiveLimitOrderTrancheAll(ctx, req.(*QueryAllInactiveLimitOrderTrancheRequest)) } - return len(dAtA) - i, nil + return interceptor(ctx, in, info, handler) } -func (m *QueryGetLimitOrderTrancheResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_PoolReservesAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllPoolReservesRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *QueryGetLimitOrderTrancheResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + if interceptor == nil { + return srv.(QueryServer).PoolReservesAll(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/PoolReservesAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).PoolReservesAll(ctx, req.(*QueryAllPoolReservesRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryGetLimitOrderTrancheResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.LimitOrderTranche != nil { - { - size, err := m.LimitOrderTranche.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa +func _Query_PoolReserves_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetPoolReservesRequest) + if err := dec(in); err != nil { + return nil, err } - return len(dAtA) - i, nil + if interceptor == nil { + return srv.(QueryServer).PoolReserves(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/PoolReserves", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).PoolReserves(ctx, req.(*QueryGetPoolReservesRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryAllLimitOrderTrancheRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_EstimateMultiHopSwap_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryEstimateMultiHopSwapRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil + if interceptor == nil { + return srv.(QueryServer).EstimateMultiHopSwap(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/EstimateMultiHopSwap", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).EstimateMultiHopSwap(ctx, req.(*QueryEstimateMultiHopSwapRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryAllLimitOrderTrancheRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func _Query_EstimatePlaceLimitOrder_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryEstimatePlaceLimitOrderRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).EstimatePlaceLimitOrder(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/EstimatePlaceLimitOrder", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).EstimatePlaceLimitOrder(ctx, req.(*QueryEstimatePlaceLimitOrderRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryAllLimitOrderTrancheRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a +func _Query_Pool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryPoolRequest) + if err := dec(in); err != nil { + return nil, err } - if len(m.TokenIn) > 0 { - i -= len(m.TokenIn) - copy(dAtA[i:], m.TokenIn) - i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenIn))) - i-- - dAtA[i] = 0x12 + if interceptor == nil { + return srv.(QueryServer).Pool(ctx, in) } - if len(m.PairId) > 0 { - i -= len(m.PairId) - copy(dAtA[i:], m.PairId) - i = encodeVarintQuery(dAtA, i, uint64(len(m.PairId))) - i-- - dAtA[i] = 0xa + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/Pool", } - return len(dAtA) - i, nil + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Pool(ctx, req.(*QueryPoolRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryAllLimitOrderTrancheResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_PoolByID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryPoolByIDRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil + if interceptor == nil { + return srv.(QueryServer).PoolByID(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/PoolByID", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).PoolByID(ctx, req.(*QueryPoolByIDRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryAllLimitOrderTrancheResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func _Query_PoolMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetPoolMetadataRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).PoolMetadata(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/PoolMetadata", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).PoolMetadata(ctx, req.(*QueryGetPoolMetadataRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryAllLimitOrderTrancheResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 +func _Query_PoolMetadataAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllPoolMetadataRequest) + if err := dec(in); err != nil { + return nil, err } - if len(m.LimitOrderTranche) > 0 { - for iNdEx := len(m.LimitOrderTranche) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.LimitOrderTranche[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } + if interceptor == nil { + return srv.(QueryServer).PoolMetadataAll(ctx, in) } - return len(dAtA) - i, nil + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/PoolMetadataAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).PoolMetadataAll(ctx, req.(*QueryAllPoolMetadataRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryAllUserDepositsRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_SimulateDeposit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QuerySimulateDepositRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil + if interceptor == nil { + return srv.(QueryServer).SimulateDeposit(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/SimulateDeposit", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).SimulateDeposit(ctx, req.(*QuerySimulateDepositRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryAllUserDepositsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func _Query_SimulateWithdrawal_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QuerySimulateWithdrawalRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).SimulateWithdrawal(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/SimulateWithdrawal", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).SimulateWithdrawal(ctx, req.(*QuerySimulateWithdrawalRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryAllUserDepositsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.IncludePoolData { - i-- - if m.IncludePoolData { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x18 +func _Query_SimulatePlaceLimitOrder_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QuerySimulatePlaceLimitOrderRequest) + if err := dec(in); err != nil { + return nil, err } - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 + if interceptor == nil { + return srv.(QueryServer).SimulatePlaceLimitOrder(ctx, in) } - if len(m.Address) > 0 { - i -= len(m.Address) - copy(dAtA[i:], m.Address) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) - i-- - dAtA[i] = 0xa + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/SimulatePlaceLimitOrder", } - return len(dAtA) - i, nil + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).SimulatePlaceLimitOrder(ctx, req.(*QuerySimulatePlaceLimitOrderRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryAllUserDepositsResponse) Marshal() (dAtA []byte, err error) { +func _Query_SimulateWithdrawFilledLimitOrder_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QuerySimulateWithdrawFilledLimitOrderRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).SimulateWithdrawFilledLimitOrder(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/SimulateWithdrawFilledLimitOrder", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).SimulateWithdrawFilledLimitOrder(ctx, req.(*QuerySimulateWithdrawFilledLimitOrderRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_SimulateCancelLimitOrder_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QuerySimulateCancelLimitOrderRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).SimulateCancelLimitOrder(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/SimulateCancelLimitOrder", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).SimulateCancelLimitOrder(ctx, req.(*QuerySimulateCancelLimitOrderRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_SimulateMultiHopSwap_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QuerySimulateMultiHopSwapRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).SimulateMultiHopSwap(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dex.Query/SimulateMultiHopSwap", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).SimulateMultiHopSwap(ctx, req.(*QuerySimulateMultiHopSwapRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "neutron.dex.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "LimitOrderTrancheUser", + Handler: _Query_LimitOrderTrancheUser_Handler, + }, + { + MethodName: "LimitOrderTrancheUserAll", + Handler: _Query_LimitOrderTrancheUserAll_Handler, + }, + { + MethodName: "LimitOrderTrancheUserAllByAddress", + Handler: _Query_LimitOrderTrancheUserAllByAddress_Handler, + }, + { + MethodName: "LimitOrderTranche", + Handler: _Query_LimitOrderTranche_Handler, + }, + { + MethodName: "LimitOrderTrancheAll", + Handler: _Query_LimitOrderTrancheAll_Handler, + }, + { + MethodName: "UserDepositsAll", + Handler: _Query_UserDepositsAll_Handler, + }, + { + MethodName: "TickLiquidityAll", + Handler: _Query_TickLiquidityAll_Handler, + }, + { + MethodName: "InactiveLimitOrderTranche", + Handler: _Query_InactiveLimitOrderTranche_Handler, + }, + { + MethodName: "InactiveLimitOrderTrancheAll", + Handler: _Query_InactiveLimitOrderTrancheAll_Handler, + }, + { + MethodName: "PoolReservesAll", + Handler: _Query_PoolReservesAll_Handler, + }, + { + MethodName: "PoolReserves", + Handler: _Query_PoolReserves_Handler, + }, + { + MethodName: "EstimateMultiHopSwap", + Handler: _Query_EstimateMultiHopSwap_Handler, + }, + { + MethodName: "EstimatePlaceLimitOrder", + Handler: _Query_EstimatePlaceLimitOrder_Handler, + }, + { + MethodName: "Pool", + Handler: _Query_Pool_Handler, + }, + { + MethodName: "PoolByID", + Handler: _Query_PoolByID_Handler, + }, + { + MethodName: "PoolMetadata", + Handler: _Query_PoolMetadata_Handler, + }, + { + MethodName: "PoolMetadataAll", + Handler: _Query_PoolMetadataAll_Handler, + }, + { + MethodName: "SimulateDeposit", + Handler: _Query_SimulateDeposit_Handler, + }, + { + MethodName: "SimulateWithdrawal", + Handler: _Query_SimulateWithdrawal_Handler, + }, + { + MethodName: "SimulatePlaceLimitOrder", + Handler: _Query_SimulatePlaceLimitOrder_Handler, + }, + { + MethodName: "SimulateWithdrawFilledLimitOrder", + Handler: _Query_SimulateWithdrawFilledLimitOrder_Handler, + }, + { + MethodName: "SimulateCancelLimitOrder", + Handler: _Query_SimulateCancelLimitOrder_Handler, + }, + { + MethodName: "SimulateMultiHopSwap", + Handler: _Query_SimulateMultiHopSwap_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "neutron/dex/query.proto", +} + +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3307,46 +3645,53 @@ func (m *QueryAllUserDepositsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllUserDepositsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllUserDepositsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - if len(m.Deposits) > 0 { - for iNdEx := len(m.Deposits) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Deposits[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa + return dAtA[:n], nil +} + +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *QueryAllLimitOrderTrancheUserByAddressRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetLimitOrderTrancheUserRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3356,26 +3701,31 @@ func (m *QueryAllLimitOrderTrancheUserByAddressRequest) Marshal() (dAtA []byte, return dAtA[:n], nil } -func (m *QueryAllLimitOrderTrancheUserByAddressRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetLimitOrderTrancheUserRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllLimitOrderTrancheUserByAddressRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetLimitOrderTrancheUserRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + if m.CalcWithdrawableShares { + i-- + if m.CalcWithdrawableShares { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } i-- + dAtA[i] = 0x18 + } + if len(m.TrancheKey) > 0 { + i -= len(m.TrancheKey) + copy(dAtA[i:], m.TrancheKey) + i = encodeVarintQuery(dAtA, i, uint64(len(m.TrancheKey))) + i-- dAtA[i] = 0x12 } if len(m.Address) > 0 { @@ -3388,7 +3738,7 @@ func (m *QueryAllLimitOrderTrancheUserByAddressRequest) MarshalToSizedBuffer(dAt return len(dAtA) - i, nil } -func (m *QueryAllLimitOrderTrancheUserByAddressResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetLimitOrderTrancheUserResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3398,46 +3748,44 @@ func (m *QueryAllLimitOrderTrancheUserByAddressResponse) Marshal() (dAtA []byte, return dAtA[:n], nil } -func (m *QueryAllLimitOrderTrancheUserByAddressResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetLimitOrderTrancheUserResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllLimitOrderTrancheUserByAddressResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetLimitOrderTrancheUserResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { + if m.WithdrawableShares != nil { { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { + size := m.WithdrawableShares.Size() + i -= size + if _, err := m.WithdrawableShares.MarshalTo(dAtA[i:]); err != nil { return 0, err } - i -= size i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- dAtA[i] = 0x12 } - if len(m.LimitOrders) > 0 { - for iNdEx := len(m.LimitOrders) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.LimitOrders[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + if m.LimitOrderTrancheUser != nil { + { + size, err := m.LimitOrderTrancheUser.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - i-- - dAtA[i] = 0xa + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryAllTickLiquidityRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllLimitOrderTrancheUserRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3447,12 +3795,12 @@ func (m *QueryAllTickLiquidityRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllTickLiquidityRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllLimitOrderTrancheUserRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllTickLiquidityRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllLimitOrderTrancheUserRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3467,26 +3815,12 @@ func (m *QueryAllTickLiquidityRequest) MarshalToSizedBuffer(dAtA []byte) (int, e i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x1a - } - if len(m.TokenIn) > 0 { - i -= len(m.TokenIn) - copy(dAtA[i:], m.TokenIn) - i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenIn))) - i-- - dAtA[i] = 0x12 - } - if len(m.PairId) > 0 { - i -= len(m.PairId) - copy(dAtA[i:], m.PairId) - i = encodeVarintQuery(dAtA, i, uint64(len(m.PairId))) - i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryAllTickLiquidityResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllLimitOrderTrancheUserResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3496,12 +3830,12 @@ func (m *QueryAllTickLiquidityResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllTickLiquidityResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllLimitOrderTrancheUserResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllTickLiquidityResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllLimitOrderTrancheUserResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3518,10 +3852,10 @@ func (m *QueryAllTickLiquidityResponse) MarshalToSizedBuffer(dAtA []byte) (int, i-- dAtA[i] = 0x12 } - if len(m.TickLiquidity) > 0 { - for iNdEx := len(m.TickLiquidity) - 1; iNdEx >= 0; iNdEx-- { + if len(m.LimitOrderTrancheUser) > 0 { + for iNdEx := len(m.LimitOrderTrancheUser) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.TickLiquidity[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.LimitOrderTrancheUser[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -3535,7 +3869,7 @@ func (m *QueryAllTickLiquidityResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *QueryGetInactiveLimitOrderTrancheRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetLimitOrderTrancheRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3545,12 +3879,12 @@ func (m *QueryGetInactiveLimitOrderTrancheRequest) Marshal() (dAtA []byte, err e return dAtA[:n], nil } -func (m *QueryGetInactiveLimitOrderTrancheRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetLimitOrderTrancheRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetInactiveLimitOrderTrancheRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetLimitOrderTrancheRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3562,17 +3896,17 @@ func (m *QueryGetInactiveLimitOrderTrancheRequest) MarshalToSizedBuffer(dAtA []b i-- dAtA[i] = 0x22 } - if m.TickIndex != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.TickIndex)) - i-- - dAtA[i] = 0x18 - } if len(m.TokenIn) > 0 { i -= len(m.TokenIn) copy(dAtA[i:], m.TokenIn) i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenIn))) i-- - dAtA[i] = 0x12 + dAtA[i] = 0x1a + } + if m.TickIndex != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.TickIndex)) + i-- + dAtA[i] = 0x10 } if len(m.PairId) > 0 { i -= len(m.PairId) @@ -3584,7 +3918,7 @@ func (m *QueryGetInactiveLimitOrderTrancheRequest) MarshalToSizedBuffer(dAtA []b return len(dAtA) - i, nil } -func (m *QueryGetInactiveLimitOrderTrancheResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetLimitOrderTrancheResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3594,19 +3928,19 @@ func (m *QueryGetInactiveLimitOrderTrancheResponse) Marshal() (dAtA []byte, err return dAtA[:n], nil } -func (m *QueryGetInactiveLimitOrderTrancheResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetLimitOrderTrancheResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetInactiveLimitOrderTrancheResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetLimitOrderTrancheResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.InactiveLimitOrderTranche != nil { + if m.LimitOrderTranche != nil { { - size, err := m.InactiveLimitOrderTranche.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.LimitOrderTranche.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -3619,7 +3953,7 @@ func (m *QueryGetInactiveLimitOrderTrancheResponse) MarshalToSizedBuffer(dAtA [] return len(dAtA) - i, nil } -func (m *QueryAllInactiveLimitOrderTrancheRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllLimitOrderTrancheRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3629,12 +3963,12 @@ func (m *QueryAllInactiveLimitOrderTrancheRequest) Marshal() (dAtA []byte, err e return dAtA[:n], nil } -func (m *QueryAllInactiveLimitOrderTrancheRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllLimitOrderTrancheRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllInactiveLimitOrderTrancheRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllLimitOrderTrancheRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3649,12 +3983,26 @@ func (m *QueryAllInactiveLimitOrderTrancheRequest) MarshalToSizedBuffer(dAtA []b i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- + dAtA[i] = 0x1a + } + if len(m.TokenIn) > 0 { + i -= len(m.TokenIn) + copy(dAtA[i:], m.TokenIn) + i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenIn))) + i-- + dAtA[i] = 0x12 + } + if len(m.PairId) > 0 { + i -= len(m.PairId) + copy(dAtA[i:], m.PairId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.PairId))) + i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryAllInactiveLimitOrderTrancheResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllLimitOrderTrancheResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3664,12 +4012,12 @@ func (m *QueryAllInactiveLimitOrderTrancheResponse) Marshal() (dAtA []byte, err return dAtA[:n], nil } -func (m *QueryAllInactiveLimitOrderTrancheResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllLimitOrderTrancheResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllInactiveLimitOrderTrancheResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllLimitOrderTrancheResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3686,10 +4034,10 @@ func (m *QueryAllInactiveLimitOrderTrancheResponse) MarshalToSizedBuffer(dAtA [] i-- dAtA[i] = 0x12 } - if len(m.InactiveLimitOrderTranche) > 0 { - for iNdEx := len(m.InactiveLimitOrderTranche) - 1; iNdEx >= 0; iNdEx-- { + if len(m.LimitOrderTranche) > 0 { + for iNdEx := len(m.LimitOrderTranche) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.InactiveLimitOrderTranche[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.LimitOrderTranche[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -3703,7 +4051,7 @@ func (m *QueryAllInactiveLimitOrderTrancheResponse) MarshalToSizedBuffer(dAtA [] return len(dAtA) - i, nil } -func (m *QueryAllPoolReservesRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllUserDepositsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3713,16 +4061,26 @@ func (m *QueryAllPoolReservesRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllPoolReservesRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllUserDepositsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllPoolReservesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllUserDepositsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l + if m.IncludePoolData { + i-- + if m.IncludePoolData { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } if m.Pagination != nil { { size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) @@ -3733,26 +4091,19 @@ func (m *QueryAllPoolReservesRequest) MarshalToSizedBuffer(dAtA []byte) (int, er i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x1a - } - if len(m.TokenIn) > 0 { - i -= len(m.TokenIn) - copy(dAtA[i:], m.TokenIn) - i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenIn))) - i-- dAtA[i] = 0x12 } - if len(m.PairId) > 0 { - i -= len(m.PairId) - copy(dAtA[i:], m.PairId) - i = encodeVarintQuery(dAtA, i, uint64(len(m.PairId))) + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryAllPoolReservesResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllUserDepositsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3762,12 +4113,12 @@ func (m *QueryAllPoolReservesResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllPoolReservesResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllUserDepositsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllPoolReservesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllUserDepositsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3784,10 +4135,10 @@ func (m *QueryAllPoolReservesResponse) MarshalToSizedBuffer(dAtA []byte) (int, e i-- dAtA[i] = 0x12 } - if len(m.PoolReserves) > 0 { - for iNdEx := len(m.PoolReserves) - 1; iNdEx >= 0; iNdEx-- { + if len(m.Deposits) > 0 { + for iNdEx := len(m.Deposits) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.PoolReserves[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Deposits[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -3801,7 +4152,7 @@ func (m *QueryAllPoolReservesResponse) MarshalToSizedBuffer(dAtA []byte) (int, e return len(dAtA) - i, nil } -func (m *QueryGetPoolReservesRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllLimitOrderTrancheUserByAddressRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3811,44 +4162,39 @@ func (m *QueryGetPoolReservesRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetPoolReservesRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllLimitOrderTrancheUserByAddressRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetPoolReservesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllLimitOrderTrancheUserByAddressRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Fee != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.Fee)) - i-- - dAtA[i] = 0x20 - } - if m.TickIndex != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.TickIndex)) - i-- - dAtA[i] = 0x18 - } - if len(m.TokenIn) > 0 { - i -= len(m.TokenIn) - copy(dAtA[i:], m.TokenIn) - i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenIn))) + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0x12 } - if len(m.PairId) > 0 { - i -= len(m.PairId) - copy(dAtA[i:], m.PairId) - i = encodeVarintQuery(dAtA, i, uint64(len(m.PairId))) + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryGetPoolReservesResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllLimitOrderTrancheUserByAddressResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3858,19 +4204,19 @@ func (m *QueryGetPoolReservesResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetPoolReservesResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllLimitOrderTrancheUserByAddressResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetPoolReservesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllLimitOrderTrancheUserByAddressResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.PoolReserves != nil { + if m.Pagination != nil { { - size, err := m.PoolReserves.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -3878,12 +4224,26 @@ func (m *QueryGetPoolReservesResponse) MarshalToSizedBuffer(dAtA []byte) (int, e i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0xa + dAtA[i] = 0x12 + } + if len(m.LimitOrders) > 0 { + for iNdEx := len(m.LimitOrders) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.LimitOrders[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } } return len(dAtA) - i, nil } -func (m *QueryEstimateMultiHopSwapRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllTickLiquidityRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3893,78 +4253,46 @@ func (m *QueryEstimateMultiHopSwapRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryEstimateMultiHopSwapRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllTickLiquidityRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryEstimateMultiHopSwapRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllTickLiquidityRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.PickBestRoute { - i-- - if m.PickBestRoute { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x30 - } - { - size := m.ExitLimitPrice.Size() - i -= size - if _, err := m.ExitLimitPrice.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) + dAtA[i] = 0x1a } - i-- - dAtA[i] = 0x2a - { - size := m.AmountIn.Size() - i -= size - if _, err := m.AmountIn.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - if len(m.Routes) > 0 { - for iNdEx := len(m.Routes) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Routes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - if len(m.Receiver) > 0 { - i -= len(m.Receiver) - copy(dAtA[i:], m.Receiver) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Receiver))) + if len(m.TokenIn) > 0 { + i -= len(m.TokenIn) + copy(dAtA[i:], m.TokenIn) + i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenIn))) i-- dAtA[i] = 0x12 } - if len(m.Creator) > 0 { - i -= len(m.Creator) - copy(dAtA[i:], m.Creator) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Creator))) + if len(m.PairId) > 0 { + i -= len(m.PairId) + copy(dAtA[i:], m.PairId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.PairId))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryEstimateMultiHopSwapResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllTickLiquidityResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3974,30 +4302,46 @@ func (m *QueryEstimateMultiHopSwapResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryEstimateMultiHopSwapResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllTickLiquidityResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryEstimateMultiHopSwapResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllTickLiquidityResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - { - size := m.CoinOut.Size() - i -= size - if _, err := m.CoinOut.MarshalTo(dAtA[i:]); err != nil { - return 0, err + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.TickLiquidity) > 0 { + for iNdEx := len(m.TickLiquidity) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TickLiquidity[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - i = encodeVarintQuery(dAtA, i, uint64(size)) } - i-- - dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *QueryEstimatePlaceLimitOrderRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetInactiveLimitOrderTrancheRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4007,90 +4351,46 @@ func (m *QueryEstimatePlaceLimitOrderRequest) Marshal() (dAtA []byte, err error) return dAtA[:n], nil } -func (m *QueryEstimatePlaceLimitOrderRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetInactiveLimitOrderTrancheRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryEstimatePlaceLimitOrderRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetInactiveLimitOrderTrancheRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.MaxAmountOut != nil { - { - size := m.MaxAmountOut.Size() - i -= size - if _, err := m.MaxAmountOut.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x4a - } - if m.ExpirationTime != nil { - n21, err21 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(*m.ExpirationTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(*m.ExpirationTime):]) - if err21 != nil { - return 0, err21 - } - i -= n21 - i = encodeVarintQuery(dAtA, i, uint64(n21)) - i-- - dAtA[i] = 0x42 - } - if m.OrderType != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.OrderType)) - i-- - dAtA[i] = 0x38 - } - { - size := m.AmountIn.Size() - i -= size - if _, err := m.AmountIn.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - if m.TickIndexInToOut != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.TickIndexInToOut)) + if len(m.TrancheKey) > 0 { + i -= len(m.TrancheKey) + copy(dAtA[i:], m.TrancheKey) + i = encodeVarintQuery(dAtA, i, uint64(len(m.TrancheKey))) i-- - dAtA[i] = 0x28 + dAtA[i] = 0x22 } - if len(m.TokenOut) > 0 { - i -= len(m.TokenOut) - copy(dAtA[i:], m.TokenOut) - i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenOut))) + if m.TickIndex != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.TickIndex)) i-- - dAtA[i] = 0x22 + dAtA[i] = 0x18 } if len(m.TokenIn) > 0 { i -= len(m.TokenIn) copy(dAtA[i:], m.TokenIn) i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenIn))) i-- - dAtA[i] = 0x1a - } - if len(m.Receiver) > 0 { - i -= len(m.Receiver) - copy(dAtA[i:], m.Receiver) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Receiver))) - i-- dAtA[i] = 0x12 } - if len(m.Creator) > 0 { - i -= len(m.Creator) - copy(dAtA[i:], m.Creator) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Creator))) + if len(m.PairId) > 0 { + i -= len(m.PairId) + copy(dAtA[i:], m.PairId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.PairId))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryEstimatePlaceLimitOrderResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetInactiveLimitOrderTrancheResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4100,50 +4400,32 @@ func (m *QueryEstimatePlaceLimitOrderResponse) Marshal() (dAtA []byte, err error return dAtA[:n], nil } -func (m *QueryEstimatePlaceLimitOrderResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetInactiveLimitOrderTrancheResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryEstimatePlaceLimitOrderResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetInactiveLimitOrderTrancheResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - { - size := m.SwapOutCoin.Size() - i -= size - if _, err := m.SwapOutCoin.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size := m.SwapInCoin.Size() - i -= size - if _, err := m.SwapInCoin.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size := m.TotalInCoin.Size() - i -= size - if _, err := m.TotalInCoin.MarshalTo(dAtA[i:]); err != nil { - return 0, err + if m.InactiveLimitOrderTranche != nil { + { + size, err := m.InactiveLimitOrderTranche.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } - i = encodeVarintQuery(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa } - i-- - dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *QueryPoolRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllInactiveLimitOrderTrancheRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4153,37 +4435,32 @@ func (m *QueryPoolRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryPoolRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllInactiveLimitOrderTrancheRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryPoolRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllInactiveLimitOrderTrancheRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Fee != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.Fee)) - i-- - dAtA[i] = 0x18 - } - if m.TickIndex != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.TickIndex)) - i-- - dAtA[i] = 0x10 - } - if len(m.PairId) > 0 { - i -= len(m.PairId) - copy(dAtA[i:], m.PairId) - i = encodeVarintQuery(dAtA, i, uint64(len(m.PairId))) + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryPoolByIDRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllInactiveLimitOrderTrancheResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4193,47 +4470,68 @@ func (m *QueryPoolByIDRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryPoolByIDRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllInactiveLimitOrderTrancheResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryPoolByIDRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllInactiveLimitOrderTrancheResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err + dAtA[i] = 0x12 + } + if len(m.InactiveLimitOrderTranche) > 0 { + for iNdEx := len(m.InactiveLimitOrderTranche) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.InactiveLimitOrderTranche[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryAllPoolReservesRequest) 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 *QueryPoolResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllPoolReservesRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllPoolReservesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pool != nil { + if m.Pagination != nil { { - size, err := m.Pool.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -4241,12 +4539,26 @@ func (m *QueryPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- + dAtA[i] = 0x1a + } + if len(m.TokenIn) > 0 { + i -= len(m.TokenIn) + copy(dAtA[i:], m.TokenIn) + i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenIn))) + i-- + dAtA[i] = 0x12 + } + if len(m.PairId) > 0 { + i -= len(m.PairId) + copy(dAtA[i:], m.PairId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.PairId))) + i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryGetPoolMetadataRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllPoolReservesResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4256,25 +4568,46 @@ func (m *QueryGetPoolMetadataRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetPoolMetadataRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllPoolReservesResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetPoolMetadataRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllPoolReservesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Id != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.Id)) + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } i-- - dAtA[i] = 0x8 + dAtA[i] = 0x12 + } + if len(m.PoolReserves) > 0 { + for iNdEx := len(m.PoolReserves) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PoolReserves[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } } return len(dAtA) - i, nil } -func (m *QueryGetPoolMetadataResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetPoolReservesRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4284,30 +4617,44 @@ func (m *QueryGetPoolMetadataResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetPoolMetadataResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetPoolReservesRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetPoolMetadataResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetPoolReservesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - { - size, err := m.PoolMetadata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + if m.Fee != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Fee)) + i-- + dAtA[i] = 0x20 + } + if m.TickIndex != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.TickIndex)) + i-- + dAtA[i] = 0x18 + } + if len(m.TokenIn) > 0 { + i -= len(m.TokenIn) + copy(dAtA[i:], m.TokenIn) + i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenIn))) + i-- + dAtA[i] = 0x12 + } + if len(m.PairId) > 0 { + i -= len(m.PairId) + copy(dAtA[i:], m.PairId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.PairId))) + i-- + dAtA[i] = 0xa } - i-- - dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *QueryAllPoolMetadataRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetPoolReservesResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4317,19 +4664,19 @@ func (m *QueryAllPoolMetadataRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllPoolMetadataRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetPoolReservesResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllPoolMetadataRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetPoolReservesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { + if m.PoolReserves != nil { { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.PoolReserves.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -4342,7 +4689,7 @@ func (m *QueryAllPoolMetadataRequest) MarshalToSizedBuffer(dAtA []byte) (int, er return len(dAtA) - i, nil } -func (m *QueryAllPoolMetadataResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryEstimateMultiHopSwapRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4352,32 +4699,50 @@ func (m *QueryAllPoolMetadataResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllPoolMetadataResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryEstimateMultiHopSwapRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllPoolMetadataResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryEstimateMultiHopSwapRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + if m.PickBestRoute { + i-- + if m.PickBestRoute { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } i-- - dAtA[i] = 0x12 + dAtA[i] = 0x30 } - if len(m.PoolMetadata) > 0 { - for iNdEx := len(m.PoolMetadata) - 1; iNdEx >= 0; iNdEx-- { + { + size := m.ExitLimitPrice.Size() + i -= size + if _, err := m.ExitLimitPrice.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + { + size := m.AmountIn.Size() + i -= size + if _, err := m.AmountIn.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + if len(m.Routes) > 0 { + for iNdEx := len(m.Routes) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.PoolMetadata[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Routes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -4385,652 +4750,2785 @@ func (m *QueryAllPoolMetadataResponse) MarshalToSizedBuffer(dAtA []byte) (int, e i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0xa + dAtA[i] = 0x1a } } + if len(m.Receiver) > 0 { + i -= len(m.Receiver) + copy(dAtA[i:], m.Receiver) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Receiver))) + i-- + dAtA[i] = 0x12 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } return len(dAtA) - i, nil } -func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { - offset -= sovQuery(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *QueryParamsRequest) Size() (n int) { - if m == nil { - return 0 +func (m *QueryEstimateMultiHopSwapResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - var l int - _ = l - return n + return dAtA[:n], nil } -func (m *QueryParamsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Params.Size() - n += 1 + l + sovQuery(uint64(l)) - return n +func (m *QueryEstimateMultiHopSwapResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetLimitOrderTrancheUserRequest) Size() (n int) { - if m == nil { - return 0 - } +func (m *QueryEstimateMultiHopSwapResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Address) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.TrancheKey) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.CalcWithdrawableShares { - n += 2 + { + size := m.CoinOut.Size() + i -= size + if _, err := m.CoinOut.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) } - return n + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *QueryGetLimitOrderTrancheUserResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.LimitOrderTrancheUser != nil { - l = m.LimitOrderTrancheUser.Size() - n += 1 + l + sovQuery(uint64(l)) - } - if m.WithdrawableShares != nil { - l = m.WithdrawableShares.Size() - n += 1 + l + sovQuery(uint64(l)) +func (m *QueryEstimatePlaceLimitOrderRequest) 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 n + return dAtA[:n], nil } -func (m *QueryAllLimitOrderTrancheUserRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n +func (m *QueryEstimatePlaceLimitOrderRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllLimitOrderTrancheUserResponse) Size() (n int) { - if m == nil { - return 0 - } +func (m *QueryEstimatePlaceLimitOrderRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.LimitOrderTrancheUser) > 0 { - for _, e := range m.LimitOrderTrancheUser { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) + if m.MaxAmountOut != nil { + { + size := m.MaxAmountOut.Size() + i -= size + if _, err := m.MaxAmountOut.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x4a } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) + if m.ExpirationTime != nil { + n21, err21 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(*m.ExpirationTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(*m.ExpirationTime):]) + if err21 != nil { + return 0, err21 + } + i -= n21 + i = encodeVarintQuery(dAtA, i, uint64(n21)) + i-- + dAtA[i] = 0x42 } - return n -} - -func (m *QueryGetLimitOrderTrancheRequest) Size() (n int) { - if m == nil { - return 0 + if m.OrderType != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.OrderType)) + i-- + dAtA[i] = 0x38 } - var l int - _ = l - l = len(m.PairId) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) + { + size := m.AmountIn.Size() + i -= size + if _, err := m.AmountIn.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) } - if m.TickIndex != 0 { - n += 1 + sovQuery(uint64(m.TickIndex)) + i-- + dAtA[i] = 0x32 + if m.TickIndexInToOut != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.TickIndexInToOut)) + i-- + dAtA[i] = 0x28 } - l = len(m.TokenIn) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) + if len(m.TokenOut) > 0 { + i -= len(m.TokenOut) + copy(dAtA[i:], m.TokenOut) + i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenOut))) + i-- + dAtA[i] = 0x22 } - l = len(m.TrancheKey) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) + if len(m.TokenIn) > 0 { + i -= len(m.TokenIn) + copy(dAtA[i:], m.TokenIn) + i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenIn))) + i-- + dAtA[i] = 0x1a } - return n -} - -func (m *QueryGetLimitOrderTrancheResponse) Size() (n int) { - if m == nil { - return 0 + if len(m.Receiver) > 0 { + i -= len(m.Receiver) + copy(dAtA[i:], m.Receiver) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Receiver))) + i-- + dAtA[i] = 0x12 } - var l int - _ = l - if m.LimitOrderTranche != nil { - l = m.LimitOrderTranche.Size() - n += 1 + l + sovQuery(uint64(l)) + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa } - return n + return len(dAtA) - i, nil } -func (m *QueryAllLimitOrderTrancheRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.PairId) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.TokenIn) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) +func (m *QueryEstimatePlaceLimitOrderResponse) 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 n + return dAtA[:n], nil } -func (m *QueryAllLimitOrderTrancheResponse) Size() (n int) { - if m == nil { - return 0 - } +func (m *QueryEstimatePlaceLimitOrderResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryEstimatePlaceLimitOrderResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.LimitOrderTranche) > 0 { - for _, e := range m.LimitOrderTranche { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) + { + size := m.SwapOutCoin.Size() + i -= size + if _, err := m.SwapOutCoin.MarshalTo(dAtA[i:]); err != nil { + return 0, err } + i = encodeVarintQuery(dAtA, i, uint64(size)) } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) + i-- + dAtA[i] = 0x1a + { + size := m.SwapInCoin.Size() + i -= size + if _, err := m.SwapInCoin.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) } - return n + i-- + dAtA[i] = 0x12 + { + size := m.TotalInCoin.Size() + i -= size + if _, err := m.TotalInCoin.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *QueryAllUserDepositsRequest) Size() (n int) { - if m == nil { - return 0 +func (m *QueryPoolRequest) 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 *QueryPoolRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPoolRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Address) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) + if m.Fee != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Fee)) + i-- + dAtA[i] = 0x18 } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) + if m.TickIndex != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.TickIndex)) + i-- + dAtA[i] = 0x10 } - if m.IncludePoolData { - n += 2 + if len(m.PairId) > 0 { + i -= len(m.PairId) + copy(dAtA[i:], m.PairId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.PairId))) + i-- + dAtA[i] = 0xa } - return n + return len(dAtA) - i, nil } -func (m *QueryAllUserDepositsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Deposits) > 0 { - for _, e := range m.Deposits { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) +func (m *QueryPoolByIDRequest) 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 n + return dAtA[:n], nil } -func (m *QueryAllLimitOrderTrancheUserByAddressRequest) Size() (n int) { - if m == nil { - return 0 - } +func (m *QueryPoolByIDRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPoolByIDRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Address) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) + if m.PoolId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x8 } - return n + return len(dAtA) - i, nil } -func (m *QueryAllLimitOrderTrancheUserByAddressResponse) Size() (n int) { - if m == nil { - return 0 +func (m *QueryPoolResponse) 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 *QueryPoolResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.LimitOrders) > 0 { - for _, e := range m.LimitOrders { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) + if m.Pool != nil { + { + size, err := m.Pool.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n + return len(dAtA) - i, nil } -func (m *QueryAllTickLiquidityRequest) Size() (n int) { - if m == nil { - return 0 +func (m *QueryGetPoolMetadataRequest) 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 *QueryGetPoolMetadataRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetPoolMetadataRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.PairId) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.TokenIn) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) + if m.Id != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Id)) + i-- + dAtA[i] = 0x8 } - return n + return len(dAtA) - i, nil } -func (m *QueryAllTickLiquidityResponse) Size() (n int) { - if m == nil { - return 0 +func (m *QueryGetPoolMetadataResponse) 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 *QueryGetPoolMetadataResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetPoolMetadataResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.TickLiquidity) > 0 { - for _, e := range m.TickLiquidity { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) + { + size, err := m.PoolMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *QueryGetInactiveLimitOrderTrancheRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.PairId) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.TokenIn) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.TickIndex != 0 { - n += 1 + sovQuery(uint64(m.TickIndex)) - } - l = len(m.TrancheKey) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) +func (m *QueryAllPoolMetadataRequest) 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 n + return dAtA[:n], nil } -func (m *QueryGetInactiveLimitOrderTrancheResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.InactiveLimitOrderTranche != nil { - l = m.InactiveLimitOrderTranche.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n +func (m *QueryAllPoolMetadataRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllInactiveLimitOrderTrancheRequest) Size() (n int) { - if m == nil { - return 0 - } +func (m *QueryAllPoolMetadataRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - return n + return len(dAtA) - i, nil } -func (m *QueryAllInactiveLimitOrderTrancheResponse) Size() (n int) { - if m == nil { - return 0 +func (m *QueryAllPoolMetadataResponse) 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 *QueryAllPoolMetadataResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllPoolMetadataResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.InactiveLimitOrderTranche) > 0 { - for _, e := range m.InactiveLimitOrderTranche { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.PoolMetadata) > 0 { + for iNdEx := len(m.PoolMetadata) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PoolMetadata[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil } -func (m *QueryAllPoolReservesRequest) Size() (n int) { - if m == nil { - return 0 +func (m *QuerySimulateDepositRequest) 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 *QuerySimulateDepositRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySimulateDepositRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.PairId) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.TokenIn) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) + if m.Msg != nil { + { + size, err := m.Msg.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - return n + return len(dAtA) - i, nil } -func (m *QueryAllPoolReservesResponse) Size() (n int) { - if m == nil { - return 0 +func (m *QuerySimulateDepositResponse) 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 *QuerySimulateDepositResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySimulateDepositResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.PoolReserves) > 0 { - for _, e := range m.PoolReserves { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) + if m.Resp != nil { + { + size, err := m.Resp.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n + return len(dAtA) - i, nil } -func (m *QueryGetPoolReservesRequest) Size() (n int) { - if m == nil { - return 0 +func (m *QuerySimulateWithdrawalRequest) 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 *QuerySimulateWithdrawalRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySimulateWithdrawalRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.PairId) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.TokenIn) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.TickIndex != 0 { - n += 1 + sovQuery(uint64(m.TickIndex)) - } - if m.Fee != 0 { - n += 1 + sovQuery(uint64(m.Fee)) + if m.Msg != nil { + { + size, err := m.Msg.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - return n + return len(dAtA) - i, nil } -func (m *QueryGetPoolReservesResponse) Size() (n int) { - if m == nil { - return 0 +func (m *QuerySimulateWithdrawalResponse) 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 *QuerySimulateWithdrawalResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySimulateWithdrawalResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if m.PoolReserves != nil { - l = m.PoolReserves.Size() - n += 1 + l + sovQuery(uint64(l)) + if m.Resp != nil { + { + size, err := m.Resp.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - return n + return len(dAtA) - i, nil } -func (m *QueryEstimateMultiHopSwapRequest) Size() (n int) { - if m == nil { - return 0 +func (m *QuerySimulatePlaceLimitOrderRequest) 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 *QuerySimulatePlaceLimitOrderRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySimulatePlaceLimitOrderRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Creator) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.Receiver) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if len(m.Routes) > 0 { - for _, e := range m.Routes { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) + if m.Msg != nil { + { + size, err := m.Msg.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa } - l = m.AmountIn.Size() - n += 1 + l + sovQuery(uint64(l)) - l = m.ExitLimitPrice.Size() - n += 1 + l + sovQuery(uint64(l)) - if m.PickBestRoute { - n += 2 - } - return n + return len(dAtA) - i, nil } -func (m *QueryEstimateMultiHopSwapResponse) Size() (n int) { - if m == nil { - return 0 +func (m *QuerySimulatePlaceLimitOrderResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - var l int - _ = l - l = m.CoinOut.Size() - n += 1 + l + sovQuery(uint64(l)) - return n + return dAtA[:n], nil } -func (m *QueryEstimatePlaceLimitOrderRequest) Size() (n int) { - if m == nil { - return 0 - } +func (m *QuerySimulatePlaceLimitOrderResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySimulatePlaceLimitOrderResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Creator) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) + if m.Resp != nil { + { + size, err := m.Resp.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - l = len(m.Receiver) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.TokenIn) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.TokenOut) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.TickIndexInToOut != 0 { - n += 1 + sovQuery(uint64(m.TickIndexInToOut)) - } - l = m.AmountIn.Size() - n += 1 + l + sovQuery(uint64(l)) - if m.OrderType != 0 { - n += 1 + sovQuery(uint64(m.OrderType)) - } - if m.ExpirationTime != nil { - l = github_com_cosmos_gogoproto_types.SizeOfStdTime(*m.ExpirationTime) - n += 1 + l + sovQuery(uint64(l)) + return len(dAtA) - i, nil +} + +func (m *QuerySimulateWithdrawFilledLimitOrderRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - if m.MaxAmountOut != nil { - l = m.MaxAmountOut.Size() - n += 1 + l + sovQuery(uint64(l)) + return dAtA[:n], nil +} + +func (m *QuerySimulateWithdrawFilledLimitOrderRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySimulateWithdrawFilledLimitOrderRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Msg != nil { + { + size, err := m.Msg.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - return n + return len(dAtA) - i, nil } -func (m *QueryEstimatePlaceLimitOrderResponse) Size() (n int) { - if m == nil { - return 0 +func (m *QuerySimulateWithdrawFilledLimitOrderResponse) 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 *QuerySimulateWithdrawFilledLimitOrderResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySimulateWithdrawFilledLimitOrderResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.TotalInCoin.Size() - n += 1 + l + sovQuery(uint64(l)) - l = m.SwapInCoin.Size() - n += 1 + l + sovQuery(uint64(l)) - l = m.SwapOutCoin.Size() - n += 1 + l + sovQuery(uint64(l)) - return n + if m.Resp != nil { + { + size, err := m.Resp.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } -func (m *QueryPoolRequest) Size() (n int) { - if m == nil { - return 0 +func (m *QuerySimulateCancelLimitOrderRequest) 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 *QuerySimulateCancelLimitOrderRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySimulateCancelLimitOrderRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.PairId) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) + if m.Msg != nil { + { + size, err := m.Msg.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - if m.TickIndex != 0 { - n += 1 + sovQuery(uint64(m.TickIndex)) + return len(dAtA) - i, nil +} + +func (m *QuerySimulateCancelLimitOrderResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - if m.Fee != 0 { - n += 1 + sovQuery(uint64(m.Fee)) + return dAtA[:n], nil +} + +func (m *QuerySimulateCancelLimitOrderResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySimulateCancelLimitOrderResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Resp != nil { + { + size, err := m.Resp.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - return n + return len(dAtA) - i, nil } -func (m *QueryPoolByIDRequest) Size() (n int) { - if m == nil { - return 0 +func (m *QuerySimulateMultiHopSwapRequest) 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 *QuerySimulateMultiHopSwapRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySimulateMultiHopSwapRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) + if m.Msg != nil { + { + size, err := m.Msg.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - return n + return len(dAtA) - i, nil } -func (m *QueryPoolResponse) Size() (n int) { - if m == nil { - return 0 +func (m *QuerySimulateMultiHopSwapResponse) 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 *QuerySimulateMultiHopSwapResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySimulateMultiHopSwapResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if m.Pool != nil { - l = m.Pool.Size() - n += 1 + l + sovQuery(uint64(l)) + if m.Resp != nil { + { + size, err := m.Resp.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - return n + return len(dAtA) - i, nil } -func (m *QueryGetPoolMetadataRequest) Size() (n int) { +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryParamsRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.Id != 0 { - n += 1 + sovQuery(uint64(m.Id)) - } return n } -func (m *QueryGetPoolMetadataResponse) Size() (n int) { +func (m *QueryParamsResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.PoolMetadata.Size() + l = m.Params.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryAllPoolMetadataRequest) Size() (n int) { +func (m *QueryGetLimitOrderTrancheUserRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.Pagination != nil { - l = m.Pagination.Size() + l = len(m.Address) + if l > 0 { n += 1 + l + sovQuery(uint64(l)) } + l = len(m.TrancheKey) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.CalcWithdrawableShares { + n += 2 + } return n } -func (m *QueryAllPoolMetadataResponse) Size() (n int) { +func (m *QueryGetLimitOrderTrancheUserResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.PoolMetadata) > 0 { - for _, e := range m.PoolMetadata { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) + if m.LimitOrderTrancheUser != nil { + l = m.LimitOrderTrancheUser.Size() + n += 1 + l + sovQuery(uint64(l)) + } + if m.WithdrawableShares != nil { + l = m.WithdrawableShares.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllLimitOrderTrancheUserRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllLimitOrderTrancheUserResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.LimitOrderTrancheUser) > 0 { + for _, e := range m.LimitOrderTrancheUser { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryGetLimitOrderTrancheRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PairId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.TickIndex != 0 { + n += 1 + sovQuery(uint64(m.TickIndex)) + } + l = len(m.TokenIn) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.TrancheKey) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryGetLimitOrderTrancheResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.LimitOrderTranche != nil { + l = m.LimitOrderTranche.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllLimitOrderTrancheRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PairId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.TokenIn) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllLimitOrderTrancheResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.LimitOrderTranche) > 0 { + for _, e := range m.LimitOrderTranche { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllUserDepositsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + if m.IncludePoolData { + n += 2 + } + return n +} + +func (m *QueryAllUserDepositsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Deposits) > 0 { + for _, e := range m.Deposits { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllLimitOrderTrancheUserByAddressRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllLimitOrderTrancheUserByAddressResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.LimitOrders) > 0 { + for _, e := range m.LimitOrders { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllTickLiquidityRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PairId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.TokenIn) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllTickLiquidityResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.TickLiquidity) > 0 { + for _, e := range m.TickLiquidity { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryGetInactiveLimitOrderTrancheRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PairId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.TokenIn) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.TickIndex != 0 { + n += 1 + sovQuery(uint64(m.TickIndex)) + } + l = len(m.TrancheKey) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryGetInactiveLimitOrderTrancheResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.InactiveLimitOrderTranche != nil { + l = m.InactiveLimitOrderTranche.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllInactiveLimitOrderTrancheRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllInactiveLimitOrderTrancheResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.InactiveLimitOrderTranche) > 0 { + for _, e := range m.InactiveLimitOrderTranche { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllPoolReservesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PairId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.TokenIn) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllPoolReservesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.PoolReserves) > 0 { + for _, e := range m.PoolReserves { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryGetPoolReservesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PairId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.TokenIn) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.TickIndex != 0 { + n += 1 + sovQuery(uint64(m.TickIndex)) + } + if m.Fee != 0 { + n += 1 + sovQuery(uint64(m.Fee)) + } + return n +} + +func (m *QueryGetPoolReservesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PoolReserves != nil { + l = m.PoolReserves.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryEstimateMultiHopSwapRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Receiver) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if len(m.Routes) > 0 { + for _, e := range m.Routes { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + l = m.AmountIn.Size() + n += 1 + l + sovQuery(uint64(l)) + l = m.ExitLimitPrice.Size() + n += 1 + l + sovQuery(uint64(l)) + if m.PickBestRoute { + n += 2 + } + return n +} + +func (m *QueryEstimateMultiHopSwapResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.CoinOut.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryEstimatePlaceLimitOrderRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Receiver) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.TokenIn) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.TokenOut) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.TickIndexInToOut != 0 { + n += 1 + sovQuery(uint64(m.TickIndexInToOut)) + } + l = m.AmountIn.Size() + n += 1 + l + sovQuery(uint64(l)) + if m.OrderType != 0 { + n += 1 + sovQuery(uint64(m.OrderType)) + } + if m.ExpirationTime != nil { + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(*m.ExpirationTime) + n += 1 + l + sovQuery(uint64(l)) + } + if m.MaxAmountOut != nil { + l = m.MaxAmountOut.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryEstimatePlaceLimitOrderResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.TotalInCoin.Size() + n += 1 + l + sovQuery(uint64(l)) + l = m.SwapInCoin.Size() + n += 1 + l + sovQuery(uint64(l)) + l = m.SwapOutCoin.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryPoolRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PairId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.TickIndex != 0 { + n += 1 + sovQuery(uint64(m.TickIndex)) + } + if m.Fee != 0 { + n += 1 + sovQuery(uint64(m.Fee)) + } + return n +} + +func (m *QueryPoolByIDRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PoolId != 0 { + n += 1 + sovQuery(uint64(m.PoolId)) + } + return n +} + +func (m *QueryPoolResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pool != nil { + l = m.Pool.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryGetPoolMetadataRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Id != 0 { + n += 1 + sovQuery(uint64(m.Id)) + } + return n +} + +func (m *QueryGetPoolMetadataResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.PoolMetadata.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryAllPoolMetadataRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllPoolMetadataResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.PoolMetadata) > 0 { + for _, e := range m.PoolMetadata { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySimulateDepositRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Msg != nil { + l = m.Msg.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySimulateDepositResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Resp != nil { + l = m.Resp.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySimulateWithdrawalRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Msg != nil { + l = m.Msg.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySimulateWithdrawalResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Resp != nil { + l = m.Resp.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySimulatePlaceLimitOrderRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Msg != nil { + l = m.Msg.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySimulatePlaceLimitOrderResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Resp != nil { + l = m.Resp.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySimulateWithdrawFilledLimitOrderRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Msg != nil { + l = m.Msg.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySimulateWithdrawFilledLimitOrderResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Resp != nil { + l = m.Resp.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySimulateCancelLimitOrderRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Msg != nil { + l = m.Msg.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySimulateCancelLimitOrderResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Resp != nil { + l = m.Resp.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySimulateMultiHopSwapRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Msg != nil { + l = m.Msg.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySimulateMultiHopSwapResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Resp != nil { + l = m.Resp.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryParamsRequest) 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 ErrIntOverflowQuery + } + 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: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsResponse) 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 ErrIntOverflowQuery + } + 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: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetLimitOrderTrancheUserRequest) 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 ErrIntOverflowQuery + } + 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: QueryGetLimitOrderTrancheUserRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetLimitOrderTrancheUserRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", 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.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TrancheKey", 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.TrancheKey = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CalcWithdrawableShares", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.CalcWithdrawableShares = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetLimitOrderTrancheUserResponse) 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 ErrIntOverflowQuery + } + 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: QueryGetLimitOrderTrancheUserResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetLimitOrderTrancheUserResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LimitOrderTrancheUser", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LimitOrderTrancheUser == nil { + m.LimitOrderTrancheUser = &LimitOrderTrancheUser{} + } + if err := m.LimitOrderTrancheUser.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WithdrawableShares", 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 + } + var v cosmossdk_io_math.Int + m.WithdrawableShares = &v + if err := m.WithdrawableShares.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllLimitOrderTrancheUserRequest) 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 ErrIntOverflowQuery + } + 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: QueryAllLimitOrderTrancheUserRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllLimitOrderTrancheUserRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllLimitOrderTrancheUserResponse) 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 ErrIntOverflowQuery + } + 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: QueryAllLimitOrderTrancheUserResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllLimitOrderTrancheUserResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LimitOrderTrancheUser", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LimitOrderTrancheUser = append(m.LimitOrderTrancheUser, &LimitOrderTrancheUser{}) + if err := m.LimitOrderTrancheUser[len(m.LimitOrderTrancheUser)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetLimitOrderTrancheRequest) 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 ErrIntOverflowQuery + } + 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: QueryGetLimitOrderTrancheRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetLimitOrderTrancheRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PairId", 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.PairId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TickIndex", wireType) + } + m.TickIndex = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.TickIndex |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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.TokenIn = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TrancheKey", 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.TrancheKey = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetLimitOrderTrancheResponse) 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 ErrIntOverflowQuery + } + 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: QueryGetLimitOrderTrancheResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetLimitOrderTrancheResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LimitOrderTranche", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LimitOrderTranche == nil { + m.LimitOrderTranche = &LimitOrderTranche{} + } + if err := m.LimitOrderTranche.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllLimitOrderTrancheRequest) 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 ErrIntOverflowQuery + } + 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: QueryAllLimitOrderTrancheRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllLimitOrderTrancheRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PairId", 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.PairId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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.TokenIn = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllLimitOrderTrancheResponse) 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 ErrIntOverflowQuery + } + 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: QueryAllLimitOrderTrancheResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllLimitOrderTrancheResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LimitOrderTranche", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LimitOrderTranche = append(m.LimitOrderTranche, &LimitOrderTranche{}) + if err := m.LimitOrderTranche[len(m.LimitOrderTranche)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} -func sovQuery(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozQuery(x uint64) (n int) { - return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil } -func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllUserDepositsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5053,12 +7551,100 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllUserDepositsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllUserDepositsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", 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.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IncludePoolData", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IncludePoolData = bool(v != 0) default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -5080,7 +7666,7 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllUserDepositsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5103,15 +7689,15 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllUserDepositsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllUserDepositsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Deposits", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5138,7 +7724,44 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Deposits = append(m.Deposits, &DepositRecord{}) + if err := m.Deposits[len(m.Deposits)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5163,7 +7786,7 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetLimitOrderTrancheUserRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllLimitOrderTrancheUserByAddressRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5186,10 +7809,10 @@ func (m *QueryGetLimitOrderTrancheUserRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetLimitOrderTrancheUserRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllLimitOrderTrancheUserByAddressRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetLimitOrderTrancheUserRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllLimitOrderTrancheUserByAddressRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -5226,41 +7849,9 @@ func (m *QueryGetLimitOrderTrancheUserRequest) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TrancheKey", 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.TrancheKey = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CalcWithdrawableShares", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } - var v int + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -5270,12 +7861,28 @@ func (m *QueryGetLimitOrderTrancheUserRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= int(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - m.CalcWithdrawableShares = bool(v != 0) + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -5297,7 +7904,7 @@ func (m *QueryGetLimitOrderTrancheUserRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetLimitOrderTrancheUserResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllLimitOrderTrancheUserByAddressResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5320,15 +7927,15 @@ func (m *QueryGetLimitOrderTrancheUserResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetLimitOrderTrancheUserResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllLimitOrderTrancheUserByAddressResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetLimitOrderTrancheUserResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllLimitOrderTrancheUserByAddressResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LimitOrderTrancheUser", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LimitOrders", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5355,18 +7962,16 @@ func (m *QueryGetLimitOrderTrancheUserResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.LimitOrderTrancheUser == nil { - m.LimitOrderTrancheUser = &LimitOrderTrancheUser{} - } - if err := m.LimitOrderTrancheUser.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.LimitOrders = append(m.LimitOrders, &LimitOrderTrancheUser{}) + if err := m.LimitOrders[len(m.LimitOrders)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field WithdrawableShares", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -5376,25 +7981,25 @@ func (m *QueryGetLimitOrderTrancheUserResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - var v cosmossdk_io_math.Int - m.WithdrawableShares = &v - if err := m.WithdrawableShares.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5419,7 +8024,7 @@ func (m *QueryGetLimitOrderTrancheUserResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllLimitOrderTrancheUserRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllTickLiquidityRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5442,13 +8047,77 @@ func (m *QueryAllLimitOrderTrancheUserRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllLimitOrderTrancheUserRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllTickLiquidityRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllLimitOrderTrancheUserRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllTickLiquidityRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PairId", 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.PairId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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.TokenIn = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } @@ -5505,7 +8174,7 @@ func (m *QueryAllLimitOrderTrancheUserRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllLimitOrderTrancheUserResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllTickLiquidityResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5528,15 +8197,15 @@ func (m *QueryAllLimitOrderTrancheUserResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllLimitOrderTrancheUserResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllTickLiquidityResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllLimitOrderTrancheUserResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllTickLiquidityResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LimitOrderTrancheUser", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TickLiquidity", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5563,8 +8232,8 @@ func (m *QueryAllLimitOrderTrancheUserResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.LimitOrderTrancheUser = append(m.LimitOrderTrancheUser, &LimitOrderTrancheUser{}) - if err := m.LimitOrderTrancheUser[len(m.LimitOrderTrancheUser)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.TickLiquidity = append(m.TickLiquidity, &TickLiquidity{}) + if err := m.TickLiquidity[len(m.TickLiquidity)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5625,7 +8294,7 @@ func (m *QueryAllLimitOrderTrancheUserResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetLimitOrderTrancheRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetInactiveLimitOrderTrancheRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5648,10 +8317,10 @@ func (m *QueryGetLimitOrderTrancheRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetLimitOrderTrancheRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetInactiveLimitOrderTrancheRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetLimitOrderTrancheRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetInactiveLimitOrderTrancheRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -5687,6 +8356,38 @@ func (m *QueryGetLimitOrderTrancheRequest) Unmarshal(dAtA []byte) error { m.PairId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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.TokenIn = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field TickIndex", wireType) } @@ -5705,11 +8406,93 @@ func (m *QueryGetLimitOrderTrancheRequest) Unmarshal(dAtA []byte) error { break } } - case 3: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TrancheKey", 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.TrancheKey = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetInactiveLimitOrderTrancheResponse) 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 ErrIntOverflowQuery + } + 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: QueryGetInactiveLimitOrderTrancheResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetInactiveLimitOrderTrancheResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InactiveLimitOrderTranche", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -5719,29 +8502,83 @@ func (m *QueryGetLimitOrderTrancheRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.TokenIn = string(dAtA[iNdEx:postIndex]) + if m.InactiveLimitOrderTranche == nil { + m.InactiveLimitOrderTranche = &LimitOrderTranche{} + } + if err := m.InactiveLimitOrderTranche.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 4: + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllInactiveLimitOrderTrancheRequest) 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 ErrIntOverflowQuery + } + 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: QueryAllInactiveLimitOrderTrancheRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllInactiveLimitOrderTrancheRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TrancheKey", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -5751,23 +8588,27 @@ func (m *QueryGetLimitOrderTrancheRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.TrancheKey = string(dAtA[iNdEx:postIndex]) + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -5790,7 +8631,7 @@ func (m *QueryGetLimitOrderTrancheRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetLimitOrderTrancheResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllInactiveLimitOrderTrancheResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5813,15 +8654,15 @@ func (m *QueryGetLimitOrderTrancheResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetLimitOrderTrancheResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllInactiveLimitOrderTrancheResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetLimitOrderTrancheResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllInactiveLimitOrderTrancheResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LimitOrderTranche", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field InactiveLimitOrderTranche", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5848,10 +8689,44 @@ func (m *QueryGetLimitOrderTrancheResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.LimitOrderTranche == nil { - m.LimitOrderTranche = &LimitOrderTranche{} + m.InactiveLimitOrderTranche = append(m.InactiveLimitOrderTranche, &LimitOrderTranche{}) + if err := m.InactiveLimitOrderTranche[len(m.InactiveLimitOrderTranche)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - if err := m.LimitOrderTranche.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5876,7 +8751,7 @@ func (m *QueryGetLimitOrderTrancheResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllLimitOrderTrancheRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllPoolReservesRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5899,10 +8774,10 @@ func (m *QueryAllLimitOrderTrancheRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllLimitOrderTrancheRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllPoolReservesRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllLimitOrderTrancheRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllPoolReservesRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -6026,7 +8901,7 @@ func (m *QueryAllLimitOrderTrancheRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllLimitOrderTrancheResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllPoolReservesResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6049,15 +8924,15 @@ func (m *QueryAllLimitOrderTrancheResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllLimitOrderTrancheResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllPoolReservesResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllLimitOrderTrancheResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllPoolReservesResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LimitOrderTranche", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PoolReserves", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -6084,8 +8959,8 @@ func (m *QueryAllLimitOrderTrancheResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.LimitOrderTranche = append(m.LimitOrderTranche, &LimitOrderTranche{}) - if err := m.LimitOrderTranche[len(m.LimitOrderTranche)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.PoolReserves = append(m.PoolReserves, &PoolReserves{}) + if err := m.PoolReserves[len(m.PoolReserves)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -6146,7 +9021,7 @@ func (m *QueryAllLimitOrderTrancheResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllUserDepositsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetPoolReservesRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6169,15 +9044,15 @@ func (m *QueryAllUserDepositsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllUserDepositsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetPoolReservesRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllUserDepositsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetPoolReservesRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PairId", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -6205,13 +9080,13 @@ func (m *QueryAllUserDepositsRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Address = string(dAtA[iNdEx:postIndex]) + m.PairId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -6221,33 +9096,29 @@ func (m *QueryAllUserDepositsRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.TokenIn = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field IncludePoolData", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TickIndex", wireType) } - var v int + m.TickIndex = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -6257,12 +9128,30 @@ func (m *QueryAllUserDepositsRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= int(b&0x7F) << shift + m.TickIndex |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Fee", wireType) + } + m.Fee = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Fee |= uint64(b&0x7F) << shift if b < 0x80 { break } } - m.IncludePoolData = bool(v != 0) default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -6284,72 +9173,38 @@ func (m *QueryAllUserDepositsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllUserDepositsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetPoolReservesResponse) 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 ErrIntOverflowQuery - } - 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: QueryAllUserDepositsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllUserDepositsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Deposits", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery + if shift >= 64 { + return ErrIntOverflowQuery } - if postIndex > l { + if iNdEx >= l { return io.ErrUnexpectedEOF } - m.Deposits = append(m.Deposits, &DepositRecord{}) - if err := m.Deposits[len(m.Deposits)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break } - iNdEx = postIndex - case 2: + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGetPoolReservesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetPoolReservesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PoolReserves", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -6376,10 +9231,10 @@ func (m *QueryAllUserDepositsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} + if m.PoolReserves == nil { + m.PoolReserves = &PoolReserves{} } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.PoolReserves.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -6404,7 +9259,7 @@ func (m *QueryAllUserDepositsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllLimitOrderTrancheUserByAddressRequest) Unmarshal(dAtA []byte) error { +func (m *QueryEstimateMultiHopSwapRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6427,15 +9282,15 @@ func (m *QueryAllLimitOrderTrancheUserByAddressRequest) Unmarshal(dAtA []byte) e fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllLimitOrderTrancheUserByAddressRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryEstimateMultiHopSwapRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllLimitOrderTrancheUserByAddressRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryEstimateMultiHopSwapRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -6463,13 +9318,13 @@ func (m *QueryAllLimitOrderTrancheUserByAddressRequest) Unmarshal(dAtA []byte) e if postIndex > l { return io.ErrUnexpectedEOF } - m.Address = string(dAtA[iNdEx:postIndex]) + m.Creator = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Receiver", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -6479,83 +9334,63 @@ func (m *QueryAllLimitOrderTrancheUserByAddressRequest) Unmarshal(dAtA []byte) e } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Receiver = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Routes", wireType) } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF + if msglen < 0 { + return ErrInvalidLengthQuery } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryAllLimitOrderTrancheUserByAddressResponse) 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 ErrIntOverflowQuery + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery } - if iNdEx >= l { + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break + m.Routes = append(m.Routes, &MultiHopRoute{}) + if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryAllLimitOrderTrancheUserByAddressResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllLimitOrderTrancheUserByAddressResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + iNdEx = postIndex + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LimitOrders", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AmountIn", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -6565,31 +9400,31 @@ func (m *QueryAllLimitOrderTrancheUserByAddressResponse) Unmarshal(dAtA []byte) } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.LimitOrders = append(m.LimitOrders, &LimitOrderTrancheUser{}) - if err := m.LimitOrders[len(m.LimitOrders)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.AmountIn.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ExitLimitPrice", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -6599,28 +9434,46 @@ func (m *QueryAllLimitOrderTrancheUserByAddressResponse) Unmarshal(dAtA []byte) } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ExitLimitPrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PickBestRoute", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.PickBestRoute = bool(v != 0) default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -6642,7 +9495,7 @@ func (m *QueryAllLimitOrderTrancheUserByAddressResponse) Unmarshal(dAtA []byte) } return nil } -func (m *QueryAllTickLiquidityRequest) Unmarshal(dAtA []byte) error { +func (m *QueryEstimateMultiHopSwapResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6665,79 +9518,15 @@ func (m *QueryAllTickLiquidityRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllTickLiquidityRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryEstimateMultiHopSwapResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllTickLiquidityRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryEstimateMultiHopSwapResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PairId", 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.PairId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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.TokenIn = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field CoinOut", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -6764,10 +9553,7 @@ func (m *QueryAllTickLiquidityRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.CoinOut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -6792,7 +9578,7 @@ func (m *QueryAllTickLiquidityRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllTickLiquidityResponse) Unmarshal(dAtA []byte) error { +func (m *QueryEstimatePlaceLimitOrderRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6815,17 +9601,17 @@ func (m *QueryAllTickLiquidityResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllTickLiquidityResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryEstimatePlaceLimitOrderRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllTickLiquidityResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryEstimatePlaceLimitOrderRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TickLiquidity", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -6835,31 +9621,29 @@ func (m *QueryAllTickLiquidityResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.TickLiquidity = append(m.TickLiquidity, &TickLiquidity{}) - if err := m.TickLiquidity[len(m.TickLiquidity)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Creator = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Receiver", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -6869,81 +9653,27 @@ func (m *QueryAllTickLiquidityResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Receiver = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryGetInactiveLimitOrderTrancheRequest) 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 ErrIntOverflowQuery - } - 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: QueryGetInactiveLimitOrderTrancheRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetInactiveLimitOrderTrancheRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PairId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -6971,11 +9701,11 @@ func (m *QueryGetInactiveLimitOrderTrancheRequest) Unmarshal(dAtA []byte) error if postIndex > l { return io.ErrUnexpectedEOF } - m.PairId = string(dAtA[iNdEx:postIndex]) + m.TokenIn = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -7003,13 +9733,13 @@ func (m *QueryGetInactiveLimitOrderTrancheRequest) Unmarshal(dAtA []byte) error if postIndex > l { return io.ErrUnexpectedEOF } - m.TokenIn = string(dAtA[iNdEx:postIndex]) + m.TokenOut = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: + case 5: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TickIndex", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TickIndexInToOut", wireType) } - m.TickIndex = 0 + m.TickIndexInToOut = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -7019,14 +9749,14 @@ func (m *QueryGetInactiveLimitOrderTrancheRequest) Unmarshal(dAtA []byte) error } b := dAtA[iNdEx] iNdEx++ - m.TickIndex |= int64(b&0x7F) << shift + m.TickIndexInToOut |= int64(b&0x7F) << shift if b < 0x80 { break } } - case 4: + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TrancheKey", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AmountIn", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -7054,61 +9784,32 @@ func (m *QueryGetInactiveLimitOrderTrancheRequest) Unmarshal(dAtA []byte) error if postIndex > l { return io.ErrUnexpectedEOF } - m.TrancheKey = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { + if err := m.AmountIn.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryGetInactiveLimitOrderTrancheResponse) 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 ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field OrderType", wireType) } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break + m.OrderType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.OrderType |= LimitOrderType(b&0x7F) << shift + if b < 0x80 { + break + } } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryGetInactiveLimitOrderTrancheResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetInactiveLimitOrderTrancheResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 8: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InactiveLimitOrderTranche", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ExpirationTime", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -7135,68 +9836,18 @@ func (m *QueryGetInactiveLimitOrderTrancheResponse) Unmarshal(dAtA []byte) error if postIndex > l { return io.ErrUnexpectedEOF } - if m.InactiveLimitOrderTranche == nil { - m.InactiveLimitOrderTranche = &LimitOrderTranche{} + if m.ExpirationTime == nil { + m.ExpirationTime = new(time.Time) } - if err := m.InactiveLimitOrderTranche.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(m.ExpirationTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryAllInactiveLimitOrderTrancheRequest) 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 ErrIntOverflowQuery - } - 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: QueryAllInactiveLimitOrderTrancheRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllInactiveLimitOrderTrancheRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 9: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MaxAmountOut", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -7206,25 +9857,25 @@ func (m *QueryAllInactiveLimitOrderTrancheRequest) Unmarshal(dAtA []byte) error } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + var v cosmossdk_io_math.Int + m.MaxAmountOut = &v + if err := m.MaxAmountOut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -7249,7 +9900,7 @@ func (m *QueryAllInactiveLimitOrderTrancheRequest) Unmarshal(dAtA []byte) error } return nil } -func (m *QueryAllInactiveLimitOrderTrancheResponse) Unmarshal(dAtA []byte) error { +func (m *QueryEstimatePlaceLimitOrderResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7272,15 +9923,15 @@ func (m *QueryAllInactiveLimitOrderTrancheResponse) Unmarshal(dAtA []byte) error fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllInactiveLimitOrderTrancheResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryEstimatePlaceLimitOrderResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllInactiveLimitOrderTrancheResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryEstimatePlaceLimitOrderResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InactiveLimitOrderTranche", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TotalInCoin", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -7307,14 +9958,13 @@ func (m *QueryAllInactiveLimitOrderTrancheResponse) Unmarshal(dAtA []byte) error if postIndex > l { return io.ErrUnexpectedEOF } - m.InactiveLimitOrderTranche = append(m.InactiveLimitOrderTranche, &LimitOrderTranche{}) - if err := m.InactiveLimitOrderTranche[len(m.InactiveLimitOrderTranche)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.TotalInCoin.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SwapInCoin", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -7341,10 +9991,40 @@ func (m *QueryAllInactiveLimitOrderTrancheResponse) Unmarshal(dAtA []byte) error if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} + if err := m.SwapInCoin.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SwapOutCoin", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SwapOutCoin.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -7369,7 +10049,7 @@ func (m *QueryAllInactiveLimitOrderTrancheResponse) Unmarshal(dAtA []byte) error } return nil } -func (m *QueryAllPoolReservesRequest) Unmarshal(dAtA []byte) error { +func (m *QueryPoolRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7392,10 +10072,10 @@ func (m *QueryAllPoolReservesRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllPoolReservesRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryPoolRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllPoolReservesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryPoolRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -7431,10 +10111,10 @@ func (m *QueryAllPoolReservesRequest) Unmarshal(dAtA []byte) error { m.PairId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TickIndex", wireType) } - var stringLen uint64 + m.TickIndex = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -7444,29 +10124,16 @@ func (m *QueryAllPoolReservesRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.TickIndex |= int64(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.TokenIn = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Fee", wireType) } - var msglen int + m.Fee = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -7476,28 +10143,11 @@ func (m *QueryAllPoolReservesRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.Fee |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -7519,7 +10169,7 @@ func (m *QueryAllPoolReservesRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllPoolReservesResponse) Unmarshal(dAtA []byte) error { +func (m *QueryPoolByIDRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7542,17 +10192,17 @@ func (m *QueryAllPoolReservesResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllPoolReservesResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryPoolByIDRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllPoolReservesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryPoolByIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolReserves", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) } - var msglen int + m.PoolId = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -7562,29 +10212,64 @@ func (m *QueryAllPoolReservesResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.PoolId |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthQuery + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err } - postIndex := iNdEx + msglen - if postIndex < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - m.PoolReserves = append(m.PoolReserves, &PoolReserves{}) - if err := m.PoolReserves[len(m.PoolReserves)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryPoolResponse) 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 ErrIntOverflowQuery } - iNdEx = postIndex - case 2: + 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: QueryPoolResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Pool", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -7611,13 +10296,82 @@ func (m *QueryAllPoolReservesResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} + if m.Pool == nil { + m.Pool = &Pool{} } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Pool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { return err } - iNdEx = postIndex + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetPoolMetadataRequest) 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 ErrIntOverflowQuery + } + 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: QueryGetPoolMetadataRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetPoolMetadataRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + m.Id = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Id |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -7639,7 +10393,7 @@ func (m *QueryAllPoolReservesResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetPoolReservesRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetPoolMetadataResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7662,17 +10416,17 @@ func (m *QueryGetPoolReservesRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetPoolReservesRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetPoolMetadataResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetPoolReservesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetPoolMetadataResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PairId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PoolMetadata", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -7682,94 +10436,25 @@ func (m *QueryGetPoolReservesRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.PairId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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 + if err := m.PoolMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - m.TokenIn = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TickIndex", wireType) - } - m.TickIndex = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TickIndex |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Fee", wireType) - } - m.Fee = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Fee |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -7791,7 +10476,7 @@ func (m *QueryGetPoolReservesRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetPoolReservesResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllPoolMetadataRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7814,15 +10499,15 @@ func (m *QueryGetPoolReservesResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetPoolReservesResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllPoolMetadataRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetPoolReservesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllPoolMetadataRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolReserves", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -7849,10 +10534,10 @@ func (m *QueryGetPoolReservesResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.PoolReserves == nil { - m.PoolReserves = &PoolReserves{} + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} } - if err := m.PoolReserves.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -7877,7 +10562,7 @@ func (m *QueryGetPoolReservesResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryEstimateMultiHopSwapRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllPoolMetadataResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7900,79 +10585,15 @@ func (m *QueryEstimateMultiHopSwapRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryEstimateMultiHopSwapRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllPoolMetadataResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryEstimateMultiHopSwapRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllPoolMetadataResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Creator", 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.Creator = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Receiver", 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.Receiver = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Routes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PoolMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -7999,50 +10620,16 @@ func (m *QueryEstimateMultiHopSwapRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Routes = append(m.Routes, &MultiHopRoute{}) - if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AmountIn", 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 - } - if err := m.AmountIn.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.PoolMetadata = append(m.PoolMetadata, PoolMetadata{}) + if err := m.PoolMetadata[len(m.PoolMetadata)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 5: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ExitLimitPrice", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8052,46 +10639,28 @@ func (m *QueryEstimateMultiHopSwapRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ExitLimitPrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PickBestRoute", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} } - m.PickBestRoute = bool(v != 0) + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -8113,7 +10682,7 @@ func (m *QueryEstimateMultiHopSwapRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryEstimateMultiHopSwapResponse) Unmarshal(dAtA []byte) error { +func (m *QuerySimulateDepositRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8136,15 +10705,15 @@ func (m *QueryEstimateMultiHopSwapResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryEstimateMultiHopSwapResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QuerySimulateDepositRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryEstimateMultiHopSwapResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QuerySimulateDepositRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CoinOut", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Msg", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -8171,7 +10740,10 @@ func (m *QueryEstimateMultiHopSwapResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.CoinOut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Msg == nil { + m.Msg = &MsgDeposit{} + } + if err := m.Msg.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -8196,7 +10768,7 @@ func (m *QueryEstimateMultiHopSwapResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryEstimatePlaceLimitOrderRequest) Unmarshal(dAtA []byte) error { +func (m *QuerySimulateDepositResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8219,81 +10791,17 @@ func (m *QueryEstimatePlaceLimitOrderRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryEstimatePlaceLimitOrderRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QuerySimulateDepositResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryEstimatePlaceLimitOrderRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QuerySimulateDepositResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Creator", 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.Creator = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Receiver", 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.Receiver = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Resp", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8303,169 +10811,83 @@ func (m *QueryEstimatePlaceLimitOrderRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.TokenIn = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", 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 m.Resp == nil { + m.Resp = &MsgDepositResponse{} } - if postIndex > l { - return io.ErrUnexpectedEOF + if err := m.Resp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - m.TokenOut = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TickIndexInToOut", wireType) - } - m.TickIndexInToOut = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TickIndexInToOut |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AmountIn", 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 + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err } - postIndex := iNdEx + intStringLen - if postIndex < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - if err := m.AmountIn.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field OrderType", wireType) - } - m.OrderType = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.OrderType |= LimitOrderType(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ExpirationTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QuerySimulateWithdrawalRequest) 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 ErrIntOverflowQuery } - if postIndex > l { + if iNdEx >= l { return io.ErrUnexpectedEOF } - if m.ExpirationTime == nil { - m.ExpirationTime = new(time.Time) - } - if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(m.ExpirationTime, dAtA[iNdEx:postIndex]); err != nil { - return err + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break } - iNdEx = postIndex - case 9: + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QuerySimulateWithdrawalRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuerySimulateWithdrawalRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxAmountOut", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Msg", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8475,25 +10897,25 @@ func (m *QueryEstimatePlaceLimitOrderRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - var v cosmossdk_io_math.Int - m.MaxAmountOut = &v - if err := m.MaxAmountOut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Msg == nil { + m.Msg = &MsgWithdrawal{} + } + if err := m.Msg.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -8518,7 +10940,7 @@ func (m *QueryEstimatePlaceLimitOrderRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryEstimatePlaceLimitOrderResponse) Unmarshal(dAtA []byte) error { +func (m *QuerySimulateWithdrawalResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8541,15 +10963,15 @@ func (m *QueryEstimatePlaceLimitOrderResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryEstimatePlaceLimitOrderResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QuerySimulateWithdrawalResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryEstimatePlaceLimitOrderResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QuerySimulateWithdrawalResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TotalInCoin", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Resp", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -8576,46 +10998,66 @@ func (m *QueryEstimatePlaceLimitOrderResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.TotalInCoin.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Resp == nil { + m.Resp = &MsgWithdrawalResponse{} + } + if err := m.Resp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SwapInCoin", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err } - if msglen < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF } - if postIndex > l { + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QuerySimulatePlaceLimitOrderRequest) 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 ErrIntOverflowQuery + } + if iNdEx >= l { return io.ErrUnexpectedEOF } - if err := m.SwapInCoin.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break } - iNdEx = postIndex - case 3: + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QuerySimulatePlaceLimitOrderRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuerySimulatePlaceLimitOrderRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SwapOutCoin", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Msg", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -8642,7 +11084,10 @@ func (m *QueryEstimatePlaceLimitOrderResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SwapOutCoin.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Msg == nil { + m.Msg = &MsgPlaceLimitOrder{} + } + if err := m.Msg.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -8667,7 +11112,7 @@ func (m *QueryEstimatePlaceLimitOrderResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryPoolRequest) Unmarshal(dAtA []byte) error { +func (m *QuerySimulatePlaceLimitOrderResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8690,17 +11135,17 @@ func (m *QueryPoolRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryPoolRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QuerySimulatePlaceLimitOrderResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QuerySimulatePlaceLimitOrderResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PairId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Resp", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8710,62 +11155,28 @@ func (m *QueryPoolRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.PairId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TickIndex", wireType) - } - m.TickIndex = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TickIndex |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Fee", wireType) + if m.Resp == nil { + m.Resp = &MsgPlaceLimitOrderResponse{} } - m.Fee = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Fee |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } + if err := m.Resp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -8787,7 +11198,7 @@ func (m *QueryPoolRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryPoolByIDRequest) Unmarshal(dAtA []byte) error { +func (m *QuerySimulateWithdrawFilledLimitOrderRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8810,17 +11221,17 @@ func (m *QueryPoolByIDRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryPoolByIDRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QuerySimulateWithdrawFilledLimitOrderRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolByIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QuerySimulateWithdrawFilledLimitOrderRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Msg", wireType) } - m.PoolId = 0 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8830,11 +11241,28 @@ func (m *QueryPoolByIDRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Msg == nil { + m.Msg = &MsgWithdrawFilledLimitOrder{} + } + if err := m.Msg.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -8856,7 +11284,7 @@ func (m *QueryPoolByIDRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryPoolResponse) Unmarshal(dAtA []byte) error { +func (m *QuerySimulateWithdrawFilledLimitOrderResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8879,15 +11307,15 @@ func (m *QueryPoolResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryPoolResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QuerySimulateWithdrawFilledLimitOrderResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QuerySimulateWithdrawFilledLimitOrderResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pool", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Resp", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -8914,10 +11342,10 @@ func (m *QueryPoolResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pool == nil { - m.Pool = &Pool{} + if m.Resp == nil { + m.Resp = &MsgWithdrawFilledLimitOrderResponse{} } - if err := m.Pool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Resp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -8942,7 +11370,7 @@ func (m *QueryPoolResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetPoolMetadataRequest) Unmarshal(dAtA []byte) error { +func (m *QuerySimulateCancelLimitOrderRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8965,17 +11393,17 @@ func (m *QueryGetPoolMetadataRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetPoolMetadataRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QuerySimulateCancelLimitOrderRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetPoolMetadataRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QuerySimulateCancelLimitOrderRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Msg", wireType) } - m.Id = 0 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8985,11 +11413,28 @@ func (m *QueryGetPoolMetadataRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Id |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Msg == nil { + m.Msg = &MsgCancelLimitOrder{} + } + if err := m.Msg.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -9011,7 +11456,7 @@ func (m *QueryGetPoolMetadataRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetPoolMetadataResponse) Unmarshal(dAtA []byte) error { +func (m *QuerySimulateCancelLimitOrderResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -9034,15 +11479,15 @@ func (m *QueryGetPoolMetadataResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetPoolMetadataResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QuerySimulateCancelLimitOrderResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetPoolMetadataResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QuerySimulateCancelLimitOrderResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Resp", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -9069,7 +11514,10 @@ func (m *QueryGetPoolMetadataResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.PoolMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Resp == nil { + m.Resp = &MsgCancelLimitOrderResponse{} + } + if err := m.Resp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -9094,7 +11542,7 @@ func (m *QueryGetPoolMetadataResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllPoolMetadataRequest) Unmarshal(dAtA []byte) error { +func (m *QuerySimulateMultiHopSwapRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -9117,15 +11565,15 @@ func (m *QueryAllPoolMetadataRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllPoolMetadataRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QuerySimulateMultiHopSwapRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllPoolMetadataRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QuerySimulateMultiHopSwapRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Msg", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -9152,10 +11600,10 @@ func (m *QueryAllPoolMetadataRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} + if m.Msg == nil { + m.Msg = &MsgMultiHopSwap{} } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Msg.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -9180,7 +11628,7 @@ func (m *QueryAllPoolMetadataRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllPoolMetadataResponse) Unmarshal(dAtA []byte) error { +func (m *QuerySimulateMultiHopSwapResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -9203,49 +11651,15 @@ func (m *QueryAllPoolMetadataResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllPoolMetadataResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QuerySimulateMultiHopSwapResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllPoolMetadataResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QuerySimulateMultiHopSwapResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolMetadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PoolMetadata = append(m.PoolMetadata, PoolMetadata{}) - if err := m.PoolMetadata[len(m.PoolMetadata)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Resp", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -9272,10 +11686,10 @@ func (m *QueryAllPoolMetadataResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} + if m.Resp == nil { + m.Resp = &MsgMultiHopSwapResponse{} } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Resp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/dex/types/query.pb.gw.go b/x/dex/types/query.pb.gw.go index d460afbaa..072db61b8 100644 --- a/x/dex/types/query.pb.gw.go +++ b/x/dex/types/query.pb.gw.go @@ -1473,6 +1473,222 @@ func local_request_Query_PoolMetadataAll_0(ctx context.Context, marshaler runtim } +var ( + filter_Query_SimulateDeposit_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_SimulateDeposit_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySimulateDepositRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SimulateDeposit_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SimulateDeposit(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_SimulateDeposit_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySimulateDepositRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SimulateDeposit_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SimulateDeposit(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_SimulateWithdrawal_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_SimulateWithdrawal_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySimulateWithdrawalRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SimulateWithdrawal_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SimulateWithdrawal(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_SimulateWithdrawal_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySimulateWithdrawalRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SimulateWithdrawal_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SimulateWithdrawal(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_SimulatePlaceLimitOrder_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_SimulatePlaceLimitOrder_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySimulatePlaceLimitOrderRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SimulatePlaceLimitOrder_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SimulatePlaceLimitOrder(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_SimulatePlaceLimitOrder_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySimulatePlaceLimitOrderRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SimulatePlaceLimitOrder_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SimulatePlaceLimitOrder(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_SimulateWithdrawFilledLimitOrder_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_SimulateWithdrawFilledLimitOrder_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySimulateWithdrawFilledLimitOrderRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SimulateWithdrawFilledLimitOrder_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SimulateWithdrawFilledLimitOrder(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_SimulateWithdrawFilledLimitOrder_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySimulateWithdrawFilledLimitOrderRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SimulateWithdrawFilledLimitOrder_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SimulateWithdrawFilledLimitOrder(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_SimulateCancelLimitOrder_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_SimulateCancelLimitOrder_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySimulateCancelLimitOrderRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SimulateCancelLimitOrder_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SimulateCancelLimitOrder(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_SimulateCancelLimitOrder_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySimulateCancelLimitOrderRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SimulateCancelLimitOrder_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SimulateCancelLimitOrder(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_SimulateMultiHopSwap_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_SimulateMultiHopSwap_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySimulateMultiHopSwapRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SimulateMultiHopSwap_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SimulateMultiHopSwap(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_SimulateMultiHopSwap_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySimulateMultiHopSwapRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SimulateMultiHopSwap_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SimulateMultiHopSwap(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterQueryHandlerServer registers the http handlers for service Query to "mux". // UnaryRPC :call QueryServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -1939,6 +2155,144 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_SimulateDeposit_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_SimulateDeposit_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_SimulateDeposit_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_SimulateWithdrawal_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_SimulateWithdrawal_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_SimulateWithdrawal_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_SimulatePlaceLimitOrder_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_SimulatePlaceLimitOrder_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_SimulatePlaceLimitOrder_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_SimulateWithdrawFilledLimitOrder_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_SimulateWithdrawFilledLimitOrder_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_SimulateWithdrawFilledLimitOrder_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_SimulateCancelLimitOrder_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_SimulateCancelLimitOrder_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_SimulateCancelLimitOrder_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_SimulateMultiHopSwap_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_SimulateMultiHopSwap_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_SimulateMultiHopSwap_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -2380,6 +2734,126 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_SimulateDeposit_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_SimulateDeposit_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_SimulateDeposit_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_SimulateWithdrawal_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_SimulateWithdrawal_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_SimulateWithdrawal_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_SimulatePlaceLimitOrder_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_SimulatePlaceLimitOrder_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_SimulatePlaceLimitOrder_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_SimulateWithdrawFilledLimitOrder_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_SimulateWithdrawFilledLimitOrder_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_SimulateWithdrawFilledLimitOrder_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_SimulateCancelLimitOrder_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_SimulateCancelLimitOrder_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_SimulateCancelLimitOrder_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_SimulateMultiHopSwap_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_SimulateMultiHopSwap_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_SimulateMultiHopSwap_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -2423,6 +2897,18 @@ var ( pattern_Query_PoolMetadata_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"neutron", "dex", "pool_metadata", "id"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_PoolMetadataAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"neutron", "dex", "pool_metadata"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_SimulateDeposit_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"neutron", "dex", "simulate_deposit"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_SimulateWithdrawal_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"neutron", "dex", "simulate_withdrawal"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_SimulatePlaceLimitOrder_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"neutron", "dex", "simulate_place_limit_order"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_SimulateWithdrawFilledLimitOrder_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"neutron", "dex", "simulate_withdraw_filled_limit_order"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_SimulateCancelLimitOrder_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"neutron", "dex", "simulate_cancel_limit_order"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_SimulateMultiHopSwap_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"neutron", "dex", "pool_metadata"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( @@ -2465,4 +2951,16 @@ var ( forward_Query_PoolMetadata_0 = runtime.ForwardResponseMessage forward_Query_PoolMetadataAll_0 = runtime.ForwardResponseMessage + + forward_Query_SimulateDeposit_0 = runtime.ForwardResponseMessage + + forward_Query_SimulateWithdrawal_0 = runtime.ForwardResponseMessage + + forward_Query_SimulatePlaceLimitOrder_0 = runtime.ForwardResponseMessage + + forward_Query_SimulateWithdrawFilledLimitOrder_0 = runtime.ForwardResponseMessage + + forward_Query_SimulateCancelLimitOrder_0 = runtime.ForwardResponseMessage + + forward_Query_SimulateMultiHopSwap_0 = runtime.ForwardResponseMessage ) diff --git a/x/dex/types/tx.pb.go b/x/dex/types/tx.pb.go index 433e795c2..b5d28e112 100644 --- a/x/dex/types/tx.pb.go +++ b/x/dex/types/tx.pb.go @@ -272,9 +272,10 @@ func (m *FailedDeposit) GetError() string { } type MsgDepositResponse struct { - Reserve0Deposited []cosmossdk_io_math.Int `protobuf:"bytes,1,rep,name=reserve0_deposited,json=reserve0Deposited,proto3,customtype=cosmossdk.io/math.Int" json:"reserve0_deposited" yaml:"reserve0_deposited"` - Reserve1Deposited []cosmossdk_io_math.Int `protobuf:"bytes,2,rep,name=reserve1_deposited,json=reserve1Deposited,proto3,customtype=cosmossdk.io/math.Int" json:"reserve1_deposited" yaml:"reserve1_deposited"` - FailedDeposits []*FailedDeposit `protobuf:"bytes,3,rep,name=failed_deposits,json=failedDeposits,proto3" json:"failed_deposits,omitempty"` + Reserve0Deposited []cosmossdk_io_math.Int `protobuf:"bytes,1,rep,name=reserve0_deposited,json=reserve0Deposited,proto3,customtype=cosmossdk.io/math.Int" json:"reserve0_deposited" yaml:"reserve0_deposited"` + Reserve1Deposited []cosmossdk_io_math.Int `protobuf:"bytes,2,rep,name=reserve1_deposited,json=reserve1Deposited,proto3,customtype=cosmossdk.io/math.Int" json:"reserve1_deposited" yaml:"reserve1_deposited"` + FailedDeposits []*FailedDeposit `protobuf:"bytes,3,rep,name=failed_deposits,json=failedDeposits,proto3" json:"failed_deposits,omitempty"` + SharesIssued []github_com_cosmos_cosmos_sdk_types.Coin `protobuf:"bytes,4,rep,name=shares_issued,json=sharesIssued,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Coin" json:"shares_issued" yaml:"shares_issued"` } func (m *MsgDepositResponse) Reset() { *m = MsgDepositResponse{} } @@ -403,6 +404,9 @@ func (m *MsgWithdrawal) GetFees() []uint64 { } type MsgWithdrawalResponse struct { + Reserve0Withdrawn []cosmossdk_io_math.Int `protobuf:"bytes,1,rep,name=reserve0_withdrawn,json=reserve0Withdrawn,proto3,customtype=cosmossdk.io/math.Int" json:"reserve0_deposited" yaml:"reserve0_withdrawn"` + Reserve1Withdrawn []cosmossdk_io_math.Int `protobuf:"bytes,2,rep,name=reserve1_withdrawn,json=reserve1Withdrawn,proto3,customtype=cosmossdk.io/math.Int" json:"reserve1_deposited" yaml:"reserve1_withdrawn"` + SharesBurned []github_com_cosmos_cosmos_sdk_types.Coin `protobuf:"bytes,3,rep,name=shares_burned,json=sharesBurned,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Coin" json:"shares_issued" yaml:"shares_burned"` } func (m *MsgWithdrawalResponse) Reset() { *m = MsgWithdrawalResponse{} } @@ -545,6 +549,8 @@ type MsgPlaceLimitOrderResponse struct { // executing the limit order. It does not include any future proceeds from the // maker portion which will have withdrawn in the future TakerCoinOut github_com_cosmos_cosmos_sdk_types.Coin `protobuf:"bytes,3,opt,name=taker_coin_out,json=takerCoinOut,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Coin" json:"taker_coin_out" yaml:"taker_coin_out"` + // Total amount of the token in that was immediately swapped for takerOutCoin + TakerCoinIn github_com_cosmos_cosmos_sdk_types.Coin `protobuf:"bytes,4,opt,name=taker_coin_in,json=takerCoinIn,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Coin" json:"taker_coin_in" yaml:"taker_coin_in"` } func (m *MsgPlaceLimitOrderResponse) Reset() { *m = MsgPlaceLimitOrderResponse{} } @@ -640,6 +646,10 @@ func (m *MsgWithdrawFilledLimitOrder) GetTrancheKey() string { } type MsgWithdrawFilledLimitOrderResponse struct { + // Total amount of taker reserves that were withdrawn + TakerCoinOut github_com_cosmos_cosmos_sdk_types.Coin `protobuf:"bytes,1,opt,name=taker_coin_out,json=takerCoinOut,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Coin" json:"taker_coin_out" yaml:"taker_coin_out"` + // Total amount of maker reserves that were withdrawn --only applies to inactive LimitOrders + MakerCoinOut github_com_cosmos_cosmos_sdk_types.Coin `protobuf:"bytes,2,opt,name=maker_coin_out,json=makerCoinOut,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Coin" json:"maker_coin_out" yaml:"maker_coin_out"` } func (m *MsgWithdrawFilledLimitOrderResponse) Reset() { *m = MsgWithdrawFilledLimitOrderResponse{} } @@ -728,6 +738,10 @@ func (m *MsgCancelLimitOrder) GetTrancheKey() string { } type MsgCancelLimitOrderResponse struct { + // Total amount of taker reserves that were withdrawn + TakerCoinOut github_com_cosmos_cosmos_sdk_types.Coin `protobuf:"bytes,1,opt,name=taker_coin_out,json=takerCoinOut,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Coin" json:"taker_coin_out" yaml:"taker_coin_out"` + // Total amount of maker reserves that were canceled + MakerCoinOut github_com_cosmos_cosmos_sdk_types.Coin `protobuf:"bytes,2,opt,name=maker_coin_out,json=makerCoinOut,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Coin" json:"maker_coin_out" yaml:"maker_coin_out"` } func (m *MsgCancelLimitOrderResponse) Reset() { *m = MsgCancelLimitOrderResponse{} } @@ -880,7 +894,9 @@ func (m *MsgMultiHopSwap) GetPickBestRoute() bool { } type MsgMultiHopSwapResponse struct { - CoinOut github_com_cosmos_cosmos_sdk_types.Coin `protobuf:"bytes,1,opt,name=coin_out,json=coinOut,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Coin" json:"coin_out"` + CoinOut github_com_cosmos_cosmos_sdk_types.Coin `protobuf:"bytes,1,opt,name=coin_out,json=coinOut,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Coin" json:"coin_out" yaml:"coin_out"` + Route *MultiHopRoute `protobuf:"bytes,2,opt,name=route,proto3" json:"route,omitempty"` + Dust []github_com_cosmos_cosmos_sdk_types.Coin `protobuf:"bytes,3,rep,name=dust,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Coin" json:"dust" yaml:"dust"` } func (m *MsgMultiHopSwapResponse) Reset() { *m = MsgMultiHopSwapResponse{} } @@ -916,6 +932,13 @@ func (m *MsgMultiHopSwapResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgMultiHopSwapResponse proto.InternalMessageInfo +func (m *MsgMultiHopSwapResponse) GetRoute() *MultiHopRoute { + if m != nil { + return m.Route + } + return nil +} + type MsgUpdateParams struct { // Authority is the address of the governance account. Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` @@ -1034,113 +1057,125 @@ func init() { func init() { proto.RegisterFile("neutron/dex/tx.proto", fileDescriptor_a489f6e187d5e074) } var fileDescriptor_a489f6e187d5e074 = []byte{ - // 1687 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x6f, 0x23, 0x49, - 0x15, 0x4f, 0xdb, 0x89, 0x3f, 0x2a, 0x89, 0xe3, 0x74, 0x32, 0xeb, 0x8e, 0x07, 0xdc, 0x56, 0xcf, - 0xb2, 0x63, 0x22, 0x62, 0x4f, 0xc2, 0xb2, 0x07, 0x23, 0x21, 0xd9, 0xf9, 0xd8, 0x35, 0x6b, 0xaf, - 0xa3, 0x8e, 0x57, 0x48, 0xbb, 0x12, 0x4d, 0xdb, 0x5d, 0x71, 0x5a, 0x69, 0x77, 0x99, 0xae, 0xb2, - 0xd7, 0xe1, 0xc2, 0x8a, 0xe3, 0x8a, 0xc3, 0x5c, 0x38, 0xf1, 0x0f, 0xc0, 0x6d, 0x0e, 0x9c, 0x39, - 0xe7, 0xc6, 0x08, 0x09, 0x09, 0x81, 0x30, 0x68, 0xe6, 0x30, 0xd2, 0x1c, 0x73, 0xe6, 0x80, 0xaa, - 0xba, 0xfa, 0xc3, 0xed, 0x7c, 0x4c, 0x86, 0xd1, 0x5e, 0xe2, 0xaa, 0xf7, 0x5e, 0xbd, 0x7a, 0xf5, - 0x7b, 0xef, 0xfd, 0xaa, 0x3a, 0x60, 0xd3, 0x86, 0x23, 0xe2, 0x20, 0xbb, 0x62, 0xc0, 0x49, 0x85, - 0x4c, 0xca, 0x43, 0x07, 0x11, 0x24, 0x2e, 0x73, 0x69, 0xd9, 0x80, 0x93, 0xfc, 0xba, 0x3e, 0x30, - 0x6d, 0x54, 0x61, 0x7f, 0x5d, 0x7d, 0xbe, 0xd0, 0x43, 0x78, 0x80, 0x70, 0xa5, 0xab, 0x63, 0x58, - 0x19, 0xef, 0x76, 0x21, 0xd1, 0x77, 0x2b, 0x3d, 0x64, 0xda, 0x5c, 0x9f, 0xe3, 0xfa, 0x01, 0xee, - 0x57, 0xc6, 0xbb, 0xf4, 0x87, 0x2b, 0xb6, 0x5c, 0x85, 0xc6, 0x66, 0x15, 0x77, 0xc2, 0x55, 0x9b, - 0x7d, 0xd4, 0x47, 0xae, 0x9c, 0x8e, 0xb8, 0x54, 0xee, 0x23, 0xd4, 0xb7, 0x60, 0x85, 0xcd, 0xba, - 0xa3, 0xd3, 0x0a, 0x31, 0x07, 0x10, 0x13, 0x7d, 0x30, 0xe4, 0x06, 0x52, 0xf8, 0x00, 0x43, 0xdd, - 0xd1, 0x07, 0xdc, 0xa1, 0xf2, 0x0b, 0x90, 0x39, 0x80, 0x43, 0x84, 0x4d, 0xd2, 0x1e, 0x12, 0x13, - 0xd9, 0x58, 0xfc, 0x3e, 0xc8, 0x1a, 0x26, 0xd6, 0xbb, 0x16, 0xd4, 0xf4, 0x11, 0x41, 0xf8, 0x2b, - 0x7d, 0x28, 0x09, 0x45, 0xa1, 0x94, 0x52, 0xd7, 0xb8, 0xbc, 0xc6, 0xc5, 0xe2, 0x23, 0x90, 0x39, - 0xd5, 0x4d, 0x4b, 0x23, 0x13, 0x0d, 0xd9, 0x5a, 0x17, 0x5a, 0x52, 0x8c, 0x19, 0x2e, 0x53, 0x69, - 0x67, 0xd2, 0xb6, 0xeb, 0xd0, 0x52, 0x2e, 0xe3, 0x00, 0xb4, 0x70, 0x9f, 0xef, 0x22, 0x4a, 0x20, - 0xd9, 0x73, 0xa0, 0x4e, 0x90, 0xc3, 0xbc, 0xa6, 0x55, 0x6f, 0x2a, 0xe6, 0x41, 0xca, 0x81, 0x3d, - 0x68, 0x8e, 0xa1, 0xc3, 0xfc, 0xa4, 0x55, 0x7f, 0x2e, 0xe6, 0x40, 0x92, 0xa0, 0x73, 0x68, 0x6b, - 0xba, 0x14, 0x67, 0xaa, 0x04, 0x9b, 0xd6, 0x02, 0x45, 0x57, 0x5a, 0x0c, 0x29, 0xea, 0xe2, 0x97, - 0x20, 0xad, 0x0f, 0xd0, 0xc8, 0x26, 0x58, 0xd3, 0xa5, 0xa5, 0x62, 0xbc, 0x94, 0xae, 0xff, 0xe4, - 0x72, 0x2a, 0x2f, 0xfc, 0x63, 0x2a, 0x3f, 0x70, 0x21, 0xc5, 0xc6, 0x79, 0xd9, 0x44, 0x95, 0x81, - 0x4e, 0xce, 0xca, 0x0d, 0x9b, 0xbc, 0x9e, 0xca, 0xc1, 0x8a, 0xab, 0xa9, 0x9c, 0xbd, 0xd0, 0x07, - 0x56, 0x55, 0xf1, 0x45, 0x8a, 0x9a, 0xe2, 0xe3, 0x5a, 0xd8, 0x79, 0x57, 0x4a, 0xdc, 0xd3, 0x79, - 0x77, 0xde, 0x79, 0x37, 0x70, 0x5e, 0x17, 0x7f, 0x00, 0x36, 0x88, 0xd9, 0x3b, 0xd7, 0x4c, 0xdb, - 0x80, 0x13, 0x88, 0x35, 0x5d, 0x23, 0x48, 0xeb, 0x4a, 0xc9, 0x62, 0xbc, 0x14, 0x57, 0xd7, 0xa8, - 0xaa, 0xe1, 0x6a, 0x6a, 0x1d, 0x54, 0x17, 0x45, 0xb0, 0x78, 0x0a, 0x21, 0x96, 0x52, 0xc5, 0x78, - 0x69, 0x51, 0x65, 0x63, 0xf1, 0x47, 0x20, 0x89, 0xdc, 0x6c, 0x4a, 0xe9, 0x62, 0xbc, 0xb4, 0xbc, - 0xf7, 0xb0, 0x1c, 0xaa, 0xd5, 0xf2, 0x6c, 0xc2, 0x55, 0xcf, 0xb6, 0x2a, 0xff, 0xe6, 0xd5, 0xb3, - 0x6d, 0x2f, 0x1d, 0xdf, 0xbc, 0x7a, 0xb6, 0x9d, 0xa1, 0xe5, 0x12, 0xe4, 0x4e, 0x39, 0x02, 0xab, - 0x47, 0xba, 0x69, 0x41, 0xc3, 0x4b, 0xa6, 0x0c, 0x96, 0x0d, 0x77, 0xa8, 0x99, 0xc6, 0x84, 0x25, - 0x74, 0x51, 0x05, 0x5c, 0xd4, 0x30, 0x26, 0xe2, 0x26, 0x58, 0x82, 0x8e, 0x83, 0xbc, 0x84, 0xba, - 0x13, 0xe5, 0x9f, 0x31, 0x20, 0x06, 0x6e, 0x55, 0x88, 0x87, 0xc8, 0xc6, 0x50, 0xfc, 0x35, 0x10, - 0x1d, 0x88, 0xa1, 0x33, 0x86, 0x4f, 0x34, 0xee, 0x03, 0x1a, 0x92, 0xc0, 0xe0, 0x3d, 0xbe, 0x0b, - 0xde, 0x6b, 0x96, 0x5e, 0x4d, 0xe5, 0x2d, 0x17, 0xe7, 0x79, 0x9d, 0xa2, 0xae, 0x7b, 0xc2, 0x03, - 0x4f, 0x16, 0x0a, 0x60, 0x37, 0x14, 0x40, 0xec, 0x7e, 0x01, 0xec, 0xde, 0x12, 0xc0, 0xee, 0x75, - 0x01, 0xec, 0x06, 0x01, 0xec, 0x83, 0xb5, 0x53, 0x06, 0xb0, 0x67, 0x87, 0xa5, 0x38, 0x4b, 0x60, - 0x7e, 0x26, 0x81, 0x33, 0x49, 0x50, 0x33, 0xa7, 0xe1, 0x29, 0x56, 0xfe, 0x16, 0x03, 0xab, 0x2d, - 0xdc, 0xff, 0x99, 0x49, 0xce, 0x0c, 0x47, 0xff, 0x4a, 0xb7, 0xbe, 0xb5, 0x9e, 0x1b, 0x83, 0x2c, - 0x3e, 0xd3, 0x1d, 0x88, 0x69, 0xc5, 0x3a, 0x70, 0x80, 0xc6, 0x90, 0xb7, 0x5e, 0xf3, 0x2e, 0xf4, - 0xe6, 0x16, 0x5e, 0x4d, 0xe5, 0x9c, 0x8b, 0x5d, 0x54, 0xa3, 0xa8, 0x19, 0x57, 0xd4, 0x41, 0x2a, - 0x13, 0xdc, 0xd4, 0x31, 0x89, 0xdb, 0x3b, 0x26, 0x19, 0x74, 0x4c, 0x55, 0x89, 0x96, 0xfe, 0x3a, - 0x2f, 0xfd, 0x00, 0x45, 0x25, 0x07, 0x1e, 0xcc, 0x08, 0xbc, 0xba, 0x55, 0xfe, 0xb2, 0xc4, 0xca, - 0xf9, 0xd8, 0xd2, 0x7b, 0xb0, 0x69, 0x0e, 0x4c, 0xd2, 0x76, 0x0c, 0xe8, 0xbc, 0x25, 0xea, 0x5b, - 0x20, 0xe5, 0x82, 0x6b, 0xda, 0x1c, 0x76, 0x17, 0xec, 0x86, 0x2d, 0x3e, 0x04, 0x69, 0x57, 0x85, - 0x46, 0x84, 0x23, 0xef, 0xda, 0xb6, 0x47, 0x44, 0xdc, 0x03, 0x9b, 0x01, 0x06, 0x9a, 0x69, 0x53, - 0x08, 0xa8, 0xdd, 0x52, 0x51, 0x28, 0xc5, 0xeb, 0x31, 0x49, 0x50, 0xb3, 0x3e, 0x10, 0x0d, 0xbb, - 0x83, 0xe8, 0x1a, 0x9f, 0xc6, 0xe8, 0x66, 0x49, 0xea, 0xf0, 0x8d, 0x69, 0x4c, 0x33, 0xed, 0x28, - 0x8d, 0x69, 0xa6, 0xed, 0xd3, 0x58, 0xc3, 0x16, 0xab, 0x00, 0x20, 0x8a, 0x83, 0x46, 0x2e, 0x86, - 0x50, 0x4a, 0x15, 0x85, 0x52, 0x26, 0xc2, 0x43, 0x01, 0x56, 0x9d, 0x8b, 0x21, 0x54, 0xd3, 0xc8, - 0x1b, 0x8a, 0x2d, 0xb0, 0x06, 0x27, 0x43, 0xd3, 0xd1, 0x29, 0x31, 0x69, 0xf4, 0x36, 0x93, 0xd2, - 0x45, 0x81, 0xf5, 0x81, 0x7b, 0xd5, 0x95, 0xbd, 0xab, 0xae, 0xdc, 0xf1, 0xae, 0xba, 0x7a, 0xea, - 0x72, 0x2a, 0x0b, 0x4f, 0xff, 0x2d, 0x0b, 0x6a, 0x26, 0x58, 0x4c, 0xd5, 0xa2, 0x0d, 0x32, 0x03, - 0x7d, 0xa2, 0xf1, 0x30, 0x29, 0x2a, 0x80, 0x1d, 0xf6, 0x13, 0xba, 0xe2, 0xb6, 0xc3, 0x46, 0x96, - 0x5d, 0x4d, 0xe5, 0x07, 0xee, 0x89, 0x67, 0xe5, 0x8a, 0xba, 0x32, 0xd0, 0x27, 0x35, 0x36, 0xa7, - 0xb8, 0xfe, 0x4e, 0x00, 0x59, 0x8b, 0x1e, 0x4e, 0xc3, 0xd0, 0xb2, 0xb4, 0xa1, 0x63, 0xf6, 0xa0, - 0xb4, 0xcc, 0xb6, 0x3c, 0xe7, 0x5b, 0x7e, 0xd8, 0x37, 0xc9, 0xd9, 0xa8, 0x5b, 0xee, 0xa1, 0x41, - 0x85, 0x63, 0xb2, 0x83, 0x9c, 0xbe, 0x37, 0xae, 0x8c, 0x3f, 0xac, 0x8c, 0x88, 0x69, 0x61, 0x37, - 0x9a, 0x63, 0x07, 0xf6, 0x0e, 0x60, 0x8f, 0xf6, 0x49, 0xd4, 0x6f, 0xd0, 0x27, 0x51, 0x8d, 0xa2, - 0x66, 0x98, 0xe8, 0x04, 0x5a, 0xd6, 0x31, 0x15, 0x54, 0x1f, 0x47, 0xab, 0xfc, 0x3d, 0x5e, 0xe5, - 0x91, 0xd2, 0x55, 0xfe, 0x15, 0x03, 0xf9, 0x79, 0xb1, 0x4f, 0xd4, 0x05, 0x00, 0x88, 0xa3, 0xdb, - 0xbd, 0x33, 0xf8, 0x29, 0xbc, 0xe0, 0xc5, 0x1d, 0x92, 0x88, 0x5f, 0x0b, 0x20, 0x49, 0x1f, 0x3a, - 0xb4, 0xac, 0x62, 0x2c, 0x6f, 0x5b, 0x65, 0xfe, 0x8c, 0xa1, 0x8f, 0xa1, 0x32, 0x7f, 0x0c, 0x95, - 0xf7, 0x91, 0x69, 0xfb, 0xd4, 0xf0, 0x38, 0x84, 0x08, 0x7f, 0x19, 0xb9, 0x3f, 0x3b, 0xd8, 0x38, - 0xaf, 0xd0, 0x22, 0xc2, 0x6c, 0xc1, 0xeb, 0xa9, 0xec, 0x39, 0xbf, 0x9a, 0xca, 0x19, 0xf7, 0xec, - 0x5c, 0xa0, 0xa8, 0x09, 0x3a, 0x6a, 0xd8, 0xe2, 0xef, 0x05, 0x90, 0x21, 0xfa, 0x39, 0x74, 0x34, - 0xa6, 0xa2, 0x39, 0x8f, 0xdf, 0x15, 0xc9, 0x17, 0xf7, 0x8f, 0x24, 0xb2, 0x47, 0x50, 0x20, 0xb3, - 0x72, 0x45, 0x5d, 0x61, 0x02, 0xba, 0xaa, 0x3d, 0x22, 0xca, 0x37, 0x02, 0x78, 0x18, 0xe2, 0x92, - 0x23, 0xd3, 0xb2, 0xa0, 0xf1, 0x46, 0xd4, 0x21, 0x83, 0x65, 0x0e, 0xb4, 0x76, 0x0e, 0x2f, 0x38, - 0x7b, 0x84, 0xb0, 0xaf, 0x3e, 0x89, 0xe6, 0x58, 0x8e, 0x30, 0x59, 0x74, 0x33, 0xe5, 0x7b, 0xe0, - 0xd1, 0x2d, 0x6a, 0x9f, 0xe5, 0x7e, 0x05, 0x36, 0x5a, 0xb8, 0xbf, 0xaf, 0xdb, 0x3d, 0x68, 0xbd, - 0x9b, 0x50, 0x4b, 0xd1, 0x50, 0x73, 0x3c, 0xd4, 0xe8, 0x26, 0xca, 0x77, 0x19, 0x5c, 0x51, 0xb1, - 0x1f, 0xda, 0x23, 0xb0, 0xda, 0x1a, 0x59, 0xc4, 0xfc, 0x04, 0x0d, 0x55, 0x34, 0x22, 0x90, 0x52, - 0xfc, 0x19, 0x1a, 0x62, 0xf7, 0xed, 0xa0, 0xb2, 0xb1, 0xf2, 0xe7, 0x38, 0x58, 0x6b, 0xe1, 0xbe, - 0x67, 0x78, 0x42, 0x1f, 0xb0, 0x6f, 0x47, 0xd1, 0x7b, 0x20, 0xe1, 0xd0, 0x6d, 0xae, 0xbf, 0x9c, - 0x67, 0x22, 0x51, 0xb9, 0xe5, 0x2c, 0xd5, 0x2e, 0xbe, 0x63, 0xaa, 0xa5, 0x7c, 0x03, 0x27, 0x26, - 0xd1, 0x5c, 0x0a, 0x70, 0xf9, 0x66, 0xc9, 0xe7, 0x9b, 0x85, 0xff, 0x87, 0x6f, 0xa2, 0x7e, 0x03, - 0xbe, 0x89, 0x6a, 0x14, 0xca, 0xbb, 0x26, 0x61, 0xf9, 0x61, 0x7c, 0x23, 0x7e, 0x00, 0xd6, 0x86, - 0xf4, 0x4e, 0xea, 0x42, 0x4c, 0x34, 0x06, 0x84, 0x94, 0x60, 0x1f, 0x08, 0xab, 0x54, 0x5c, 0x87, - 0x98, 0x30, 0x90, 0xaa, 0xef, 0x47, 0x0b, 0x61, 0x83, 0x17, 0x42, 0x38, 0x59, 0xca, 0x6f, 0x05, - 0x90, 0x8b, 0xc8, 0x7c, 0x46, 0xfa, 0x25, 0x48, 0xf9, 0x7d, 0x2e, 0xdc, 0xd5, 0xe7, 0x3f, 0xbe, - 0x7f, 0x9f, 0xfb, 0xde, 0x55, 0xc6, 0x3d, 0xb4, 0x87, 0xff, 0x28, 0xb0, 0x7a, 0xfa, 0x7c, 0x68, - 0xe8, 0x04, 0x1e, 0xb3, 0x6f, 0x2a, 0xf1, 0x23, 0x90, 0xd6, 0x47, 0xe4, 0x0c, 0x39, 0x26, 0xe1, - 0xbc, 0x58, 0x97, 0xfe, 0xfa, 0xa7, 0x9d, 0x4d, 0x1e, 0x4a, 0xcd, 0x30, 0x1c, 0x88, 0xf1, 0x09, - 0x71, 0x4c, 0xbb, 0xaf, 0x06, 0xa6, 0xe2, 0x47, 0x20, 0xe1, 0x7e, 0x95, 0x71, 0xba, 0xdc, 0x98, - 0xa9, 0x28, 0xd7, 0x79, 0x3d, 0x4d, 0xc3, 0xfe, 0xc3, 0xab, 0x67, 0xdb, 0x82, 0xca, 0xad, 0xab, - 0x1f, 0x50, 0xe0, 0x02, 0x3f, 0x61, 0xe8, 0xc2, 0x71, 0x29, 0x5b, 0x0c, 0xb9, 0xb0, 0xc8, 0x43, - 0x6e, 0x7b, 0x02, 0x32, 0xb3, 0xf7, 0xb0, 0xf8, 0x1e, 0x10, 0x3f, 0x6e, 0xb7, 0x0f, 0xb4, 0x4e, - 0xa3, 0xa9, 0xed, 0xd7, 0x3e, 0xdb, 0x3f, 0x6c, 0x36, 0x0f, 0x0f, 0xb2, 0x0b, 0x62, 0x16, 0xac, - 0x1c, 0x35, 0x9a, 0x4d, 0xad, 0xad, 0x6a, 0x9f, 0x36, 0x9a, 0xcd, 0xac, 0x20, 0xe6, 0xc0, 0x46, - 0xa3, 0xd5, 0x3a, 0x3c, 0x68, 0xd4, 0x3a, 0x87, 0x54, 0xec, 0x5a, 0x67, 0x63, 0xd4, 0xf4, 0xa7, - 0x9f, 0x9f, 0x74, 0xb4, 0xc6, 0x67, 0x5a, 0xa7, 0xd1, 0x3a, 0xcc, 0xc6, 0xc5, 0x75, 0xb0, 0xea, - 0x3b, 0x65, 0xa2, 0xc5, 0xbd, 0xff, 0x2e, 0x82, 0x78, 0x0b, 0xf7, 0xc5, 0x7d, 0x90, 0xf4, 0xbe, - 0x27, 0x72, 0xb3, 0x9d, 0xe4, 0x7f, 0x22, 0xe4, 0xe5, 0x1b, 0x14, 0x7e, 0x01, 0x34, 0x01, 0x08, - 0x3d, 0x78, 0xf3, 0x51, 0xf3, 0x40, 0x97, 0x57, 0x6e, 0xd6, 0xf9, 0xde, 0xbe, 0x04, 0x6b, 0xd1, - 0xd7, 0xdc, 0x5c, 0x04, 0x11, 0x83, 0xfc, 0xe3, 0x3b, 0x0c, 0x7c, 0xe7, 0x63, 0x20, 0xdd, 0x48, - 0xfc, 0xa5, 0x9b, 0x82, 0x8b, 0x5a, 0xe6, 0x9f, 0xbc, 0xa9, 0xa5, 0xbf, 0xef, 0xcf, 0x41, 0x76, - 0x8e, 0xbd, 0x8b, 0x51, 0x2f, 0x51, 0x8b, 0x7c, 0xe9, 0x2e, 0x0b, 0xdf, 0xbf, 0x0a, 0x56, 0x66, - 0xc8, 0xf5, 0x3b, 0xd1, 0x95, 0x61, 0x6d, 0xfe, 0xfd, 0xdb, 0xb4, 0x61, 0x9f, 0x33, 0x0d, 0x36, - 0xe7, 0x33, 0xac, 0x9d, 0xf7, 0x79, 0x5d, 0xc5, 0xe7, 0x97, 0xbe, 0xa6, 0x3d, 0x54, 0xff, 0xf8, - 0xf2, 0x45, 0x41, 0x78, 0xfe, 0xa2, 0x20, 0xfc, 0xe7, 0x45, 0x41, 0x78, 0xfa, 0xb2, 0xb0, 0xf0, - 0xfc, 0x65, 0x61, 0xe1, 0xef, 0x2f, 0x0b, 0x0b, 0x5f, 0xec, 0xdc, 0xcd, 0x95, 0x13, 0xf7, 0x5f, - 0x41, 0x94, 0x22, 0xba, 0x09, 0xf6, 0x16, 0xfd, 0xe1, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x2a, - 0x07, 0x8e, 0x98, 0x26, 0x12, 0x00, 0x00, + // 1879 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcb, 0x6f, 0x23, 0x49, + 0x19, 0x4f, 0xdb, 0x4e, 0x62, 0x57, 0x12, 0xc7, 0xd3, 0xc9, 0x6c, 0x3a, 0x1e, 0x94, 0xb6, 0x7a, + 0x56, 0x3b, 0x66, 0xc4, 0xd8, 0x93, 0x61, 0xd9, 0x43, 0x0e, 0x48, 0x71, 0x1e, 0xbb, 0x66, 0xed, + 0x49, 0xd4, 0xe3, 0x15, 0x68, 0x57, 0xa2, 0x69, 0xbb, 0x2b, 0x4e, 0x29, 0xdd, 0x5d, 0x56, 0x57, + 0x39, 0xe3, 0x70, 0x61, 0x85, 0x38, 0xed, 0x69, 0x2f, 0x08, 0x24, 0xfe, 0x01, 0xb8, 0xcd, 0x61, + 0xcf, 0x9c, 0x87, 0x13, 0x2b, 0x24, 0x24, 0xe0, 0x60, 0x60, 0xe6, 0x30, 0xd2, 0x1e, 0x73, 0x80, + 0x0b, 0x07, 0x54, 0x0f, 0xf7, 0x2b, 0xaf, 0xc9, 0x12, 0x46, 0x1c, 0xb8, 0x4c, 0xaa, 0xbe, 0xef, + 0xab, 0xaf, 0x7e, 0xf5, 0xbd, 0xdd, 0x03, 0x96, 0x7d, 0x38, 0xa4, 0x01, 0xf6, 0xeb, 0x0e, 0x1c, + 0xd5, 0xe9, 0xa8, 0x36, 0x08, 0x30, 0xc5, 0xea, 0x9c, 0xa4, 0xd6, 0x1c, 0x38, 0x2a, 0xdf, 0xb2, + 0x3d, 0xe4, 0xe3, 0x3a, 0xff, 0x57, 0xf0, 0xcb, 0x6b, 0x3d, 0x4c, 0x3c, 0x4c, 0xea, 0x5d, 0x9b, + 0xc0, 0xfa, 0xf1, 0x7a, 0x17, 0x52, 0x7b, 0xbd, 0xde, 0xc3, 0xc8, 0x97, 0xfc, 0x15, 0xc9, 0xf7, + 0x48, 0xbf, 0x7e, 0xbc, 0xce, 0xfe, 0x48, 0xc6, 0xaa, 0x60, 0x58, 0x7c, 0x57, 0x17, 0x1b, 0xc9, + 0x5a, 0xee, 0xe3, 0x3e, 0x16, 0x74, 0xb6, 0x92, 0x54, 0xbd, 0x8f, 0x71, 0xdf, 0x85, 0x75, 0xbe, + 0xeb, 0x0e, 0x0f, 0xea, 0x14, 0x79, 0x90, 0x50, 0xdb, 0x1b, 0x48, 0x01, 0x2d, 0xfe, 0x80, 0x81, + 0x1d, 0xd8, 0x9e, 0x54, 0x68, 0xfc, 0x08, 0x14, 0xb7, 0xe1, 0x00, 0x13, 0x44, 0xf7, 0x06, 0x14, + 0x61, 0x9f, 0xa8, 0xdf, 0x04, 0x25, 0x07, 0x11, 0xbb, 0xeb, 0x42, 0xcb, 0x1e, 0x52, 0x4c, 0x9e, + 0xda, 0x03, 0x4d, 0xa9, 0x28, 0xd5, 0xbc, 0xb9, 0x28, 0xe9, 0x9b, 0x92, 0xac, 0xde, 0x05, 0xc5, + 0x03, 0x1b, 0xb9, 0x16, 0x1d, 0x59, 0xd8, 0xb7, 0xba, 0xd0, 0xd5, 0x32, 0x5c, 0x70, 0x8e, 0x51, + 0x3b, 0xa3, 0x3d, 0xbf, 0x01, 0x5d, 0xe3, 0x79, 0x16, 0x80, 0x36, 0xe9, 0xcb, 0x5b, 0x54, 0x0d, + 0xcc, 0xf6, 0x02, 0x68, 0x53, 0x1c, 0x70, 0xad, 0x05, 0x73, 0xb2, 0x55, 0xcb, 0x20, 0x1f, 0xc0, + 0x1e, 0x44, 0xc7, 0x30, 0xe0, 0x7a, 0x0a, 0x66, 0xb8, 0x57, 0x57, 0xc0, 0x2c, 0xc5, 0x47, 0xd0, + 0xb7, 0x6c, 0x2d, 0xcb, 0x59, 0x33, 0x7c, 0xbb, 0x19, 0x31, 0xba, 0x5a, 0x2e, 0xc6, 0x68, 0xa8, + 0x9f, 0x80, 0x82, 0xed, 0xe1, 0xa1, 0x4f, 0x89, 0x65, 0x6b, 0xd3, 0x95, 0x6c, 0xb5, 0xd0, 0xf8, + 0xee, 0xf3, 0xb1, 0x3e, 0xf5, 0x97, 0xb1, 0x7e, 0x5b, 0x98, 0x94, 0x38, 0x47, 0x35, 0x84, 0xeb, + 0x9e, 0x4d, 0x0f, 0x6b, 0x4d, 0x9f, 0x7e, 0x35, 0xd6, 0xa3, 0x13, 0xa7, 0x63, 0xbd, 0x74, 0x62, + 0x7b, 0xee, 0x86, 0x11, 0x92, 0x0c, 0x33, 0x2f, 0xd7, 0x9b, 0x71, 0xe5, 0x5d, 0x6d, 0xe6, 0x9a, + 0xca, 0xbb, 0x67, 0x95, 0x77, 0x23, 0xe5, 0x0d, 0xf5, 0x5b, 0x60, 0x89, 0xa2, 0xde, 0x91, 0x85, + 0x7c, 0x07, 0x8e, 0x20, 0xb1, 0x6c, 0x8b, 0x62, 0xab, 0xab, 0xcd, 0x56, 0xb2, 0xd5, 0xac, 0xb9, + 0xc8, 0x58, 0x4d, 0xc1, 0xd9, 0xec, 0xe0, 0x86, 0xaa, 0x82, 0xdc, 0x01, 0x84, 0x44, 0xcb, 0x57, + 0xb2, 0xd5, 0x9c, 0xc9, 0xd7, 0xea, 0x77, 0xc0, 0x2c, 0x16, 0xde, 0xd4, 0x0a, 0x95, 0x6c, 0x75, + 0xee, 0xd1, 0x9d, 0x5a, 0x2c, 0x56, 0x6b, 0x49, 0x87, 0x9b, 0x13, 0xd9, 0x0d, 0xfd, 0xa7, 0xaf, + 0x9e, 0xdd, 0x9f, 0xb8, 0xe3, 0xb3, 0x57, 0xcf, 0xee, 0x17, 0x59, 0xb8, 0x44, 0xbe, 0x33, 0x76, + 0xc1, 0xc2, 0xae, 0x8d, 0x5c, 0xe8, 0x4c, 0x9c, 0xa9, 0x83, 0x39, 0x47, 0x2c, 0x2d, 0xe4, 0x8c, + 0xb8, 0x43, 0x73, 0x26, 0x90, 0xa4, 0xa6, 0x33, 0x52, 0x97, 0xc1, 0x34, 0x0c, 0x02, 0x3c, 0x71, + 0xa8, 0xd8, 0x18, 0xff, 0xc8, 0x02, 0x35, 0x52, 0x6b, 0x42, 0x32, 0xc0, 0x3e, 0x81, 0xea, 0x4f, + 0x80, 0x1a, 0x40, 0x02, 0x83, 0x63, 0xf8, 0xd0, 0x92, 0x3a, 0xa0, 0xa3, 0x29, 0xdc, 0xbc, 0xfb, + 0x57, 0x99, 0xf7, 0x9c, 0xa3, 0xa7, 0x63, 0x7d, 0x55, 0xd8, 0xf9, 0x2c, 0xcf, 0x30, 0x6f, 0x4d, + 0x88, 0xdb, 0x13, 0x5a, 0x0c, 0xc0, 0x7a, 0x0c, 0x40, 0xe6, 0x7a, 0x00, 0xd6, 0x2f, 0x01, 0xb0, + 0x7e, 0x1e, 0x80, 0xf5, 0x08, 0xc0, 0x16, 0x58, 0x3c, 0xe0, 0x06, 0x9e, 0xc8, 0x11, 0x2d, 0xcb, + 0x1d, 0x58, 0x4e, 0x38, 0x30, 0xe1, 0x04, 0xb3, 0x78, 0x10, 0xdf, 0x12, 0xf5, 0x97, 0x0a, 0x58, + 0x20, 0x87, 0x76, 0x00, 0x89, 0x85, 0x08, 0x19, 0x42, 0x47, 0xcb, 0x71, 0x1d, 0xab, 0x35, 0x59, + 0x4a, 0x58, 0x41, 0xaa, 0xc9, 0x82, 0x54, 0xdb, 0xc2, 0xc8, 0x6f, 0xfc, 0x40, 0x3e, 0xee, 0x5e, + 0x1f, 0xd1, 0xc3, 0x61, 0xb7, 0xd6, 0xc3, 0x9e, 0xac, 0x3b, 0xf2, 0xcf, 0x03, 0xe2, 0x1c, 0xd5, + 0xe9, 0xc9, 0x00, 0x12, 0x7e, 0xe0, 0xab, 0xb1, 0x9e, 0xbc, 0xe2, 0x74, 0xac, 0x2f, 0x8b, 0x97, + 0x26, 0xc8, 0x86, 0x39, 0x2f, 0xf6, 0x4d, 0xb1, 0xfd, 0x63, 0x06, 0x2c, 0xb4, 0x49, 0xff, 0xfb, + 0x88, 0x1e, 0x3a, 0x81, 0xfd, 0xd4, 0x76, 0xdf, 0x58, 0x39, 0x38, 0x06, 0x25, 0x89, 0x8c, 0x62, + 0x2b, 0x80, 0x1e, 0x3e, 0x86, 0xb2, 0x2a, 0xb4, 0xae, 0x72, 0xec, 0x99, 0x83, 0xa7, 0x63, 0x7d, + 0x25, 0xf1, 0xd8, 0x90, 0x63, 0x98, 0x45, 0x41, 0xea, 0x60, 0x93, 0x13, 0x2e, 0x4a, 0xe6, 0x99, + 0xcb, 0x93, 0x79, 0x36, 0x4a, 0xe6, 0x0d, 0x23, 0x9d, 0x95, 0xb7, 0x64, 0x56, 0x46, 0x56, 0x34, + 0xbe, 0xc8, 0x82, 0xdb, 0x09, 0xca, 0xb9, 0x39, 0xf5, 0x54, 0xb2, 0xfd, 0x9b, 0xcd, 0xa9, 0x50, + 0x6d, 0x2c, 0xa7, 0x26, 0x48, 0xfc, 0x44, 0x4e, 0x45, 0x00, 0x6e, 0x34, 0xa7, 0xce, 0x01, 0xb0, + 0x1e, 0x01, 0x88, 0xa5, 0x43, 0x77, 0x18, 0xf8, 0xd0, 0x91, 0x29, 0xf5, 0x46, 0xd3, 0x41, 0xdc, + 0x1c, 0xa6, 0x43, 0x43, 0x6c, 0x7f, 0x3f, 0xcd, 0xeb, 0xe0, 0xbe, 0x6b, 0xf7, 0x60, 0x0b, 0x79, + 0x88, 0xee, 0x05, 0x0e, 0x0c, 0xbe, 0x66, 0x4e, 0xac, 0x82, 0xbc, 0x08, 0x7d, 0xe4, 0xcb, 0xa4, + 0x10, 0xa9, 0xd0, 0xf4, 0xd5, 0x3b, 0xa0, 0x20, 0x58, 0x78, 0x48, 0x65, 0x5e, 0x08, 0xd9, 0xbd, + 0x21, 0x55, 0x1f, 0x81, 0xe5, 0x28, 0x42, 0x2d, 0xe4, 0xb3, 0x00, 0x65, 0x72, 0xd3, 0x15, 0xa5, + 0x9a, 0x6d, 0x64, 0x34, 0xc5, 0x2c, 0x85, 0x61, 0xda, 0xf4, 0x3b, 0x98, 0x9d, 0x09, 0xfb, 0x1f, + 0xbb, 0x6c, 0x96, 0x29, 0x7c, 0xed, 0xfe, 0x67, 0x21, 0x3f, 0xdd, 0xff, 0x2c, 0xe4, 0x87, 0xfd, + 0xaf, 0xe9, 0xab, 0x1b, 0x00, 0x60, 0x66, 0x07, 0x8b, 0x19, 0x58, 0xcb, 0x57, 0x94, 0x6a, 0x31, + 0xd5, 0xc0, 0x22, 0x5b, 0x75, 0x4e, 0x06, 0xd0, 0x2c, 0xe0, 0xc9, 0x52, 0x6d, 0x83, 0x45, 0x38, + 0x1a, 0xa0, 0xc0, 0x66, 0x1d, 0xcd, 0x62, 0x63, 0x90, 0x56, 0xa8, 0x28, 0xbc, 0x80, 0x8a, 0x19, + 0xa9, 0x36, 0x99, 0x91, 0x6a, 0x9d, 0xc9, 0x8c, 0xd4, 0xc8, 0x3f, 0x1f, 0xeb, 0xca, 0xe7, 0x7f, + 0xd5, 0x15, 0xb3, 0x18, 0x1d, 0x66, 0x6c, 0xd5, 0x07, 0x45, 0xcf, 0x1e, 0x59, 0x12, 0x26, 0xb3, + 0x0a, 0xe0, 0x8f, 0xfd, 0x80, 0x9d, 0xb8, 0xec, 0xb1, 0xa9, 0x63, 0xa7, 0x63, 0xfd, 0xb6, 0x78, + 0x71, 0x92, 0x6e, 0x98, 0xf3, 0x9e, 0x3d, 0xda, 0xe4, 0x7b, 0x66, 0xd7, 0x9f, 0x2b, 0xa0, 0xe4, + 0xb2, 0xc7, 0x59, 0x04, 0xba, 0xae, 0x35, 0x08, 0x50, 0x0f, 0x6a, 0x73, 0xfc, 0xca, 0x23, 0x79, + 0xe5, 0xbb, 0xb1, 0x98, 0x94, 0x36, 0x79, 0x80, 0x83, 0xfe, 0x64, 0x5d, 0x3f, 0x7e, 0xb7, 0x3e, + 0xa4, 0xc8, 0x25, 0x02, 0xcd, 0x7e, 0x00, 0x7b, 0xdb, 0xb0, 0xc7, 0xaa, 0x58, 0x5a, 0x6f, 0x54, + 0xc5, 0xd2, 0x1c, 0xc3, 0x2c, 0x72, 0xd2, 0x13, 0xe8, 0xba, 0xfb, 0x8c, 0xb0, 0x71, 0x2f, 0x5d, + 0x83, 0xde, 0x92, 0x35, 0x28, 0x15, 0xba, 0xc6, 0x3f, 0xb3, 0xa0, 0x7c, 0x96, 0x1c, 0x56, 0xa3, + 0x35, 0x00, 0x68, 0x60, 0xfb, 0xbd, 0x43, 0xf8, 0x21, 0x3c, 0x91, 0xc1, 0x1d, 0xa3, 0xa8, 0x9f, + 0x2a, 0x60, 0x96, 0x4d, 0xc8, 0x2c, 0xac, 0x32, 0xdc, 0x6f, 0x97, 0x64, 0x69, 0xeb, 0xfa, 0x59, + 0x3a, 0x51, 0x7e, 0x3a, 0xd6, 0x8b, 0xe2, 0xed, 0x92, 0x60, 0x98, 0x33, 0x6c, 0xd5, 0xf4, 0xd5, + 0x5f, 0x29, 0xa0, 0x48, 0xed, 0x23, 0x18, 0x58, 0x9c, 0xc5, 0x7c, 0x9e, 0xbd, 0x0a, 0xc9, 0xc7, + 0xd7, 0x47, 0x92, 0xba, 0x23, 0x0a, 0x90, 0x24, 0xdd, 0x30, 0xe7, 0x39, 0x81, 0x9d, 0x62, 0x01, + 0xf2, 0x0b, 0x05, 0x2c, 0xc4, 0x24, 0x90, 0xcf, 0xd3, 0xf9, 0xc6, 0x8b, 0x59, 0xe2, 0x8a, 0xa8, + 0x98, 0x25, 0xc8, 0x86, 0x39, 0x17, 0x42, 0x6b, 0xfa, 0xc6, 0x67, 0x0a, 0xb8, 0x13, 0x6b, 0x41, + 0xbb, 0xc8, 0x75, 0xa1, 0xf3, 0x5a, 0x45, 0x4d, 0x07, 0x73, 0x32, 0x04, 0xac, 0x23, 0x78, 0x22, + 0xeb, 0x5a, 0x2c, 0x2a, 0x36, 0x1e, 0xa6, 0xa3, 0x4f, 0x4f, 0x75, 0xc0, 0xf4, 0x65, 0xc6, 0xdf, + 0x33, 0xe0, 0xee, 0x25, 0xfc, 0x30, 0x1e, 0xcf, 0x71, 0xb6, 0xf2, 0xbf, 0xe3, 0x6c, 0x86, 0xce, + 0x4b, 0xa2, 0xcb, 0xfc, 0x37, 0xd0, 0x79, 0x17, 0xa0, 0xf3, 0xd2, 0xe8, 0xbc, 0x18, 0x3a, 0xe3, + 0xc7, 0x60, 0xa9, 0x4d, 0xfa, 0x5b, 0xb6, 0xdf, 0x83, 0xee, 0xcd, 0xf8, 0xb9, 0x9a, 0xf6, 0xf3, + 0x8a, 0xf4, 0x73, 0xfa, 0x12, 0xe3, 0xcf, 0x19, 0x1e, 0x6c, 0x69, 0xfa, 0xff, 0xfd, 0x7a, 0x03, + 0x7e, 0xbd, 0x0b, 0x16, 0xda, 0x43, 0x97, 0xa2, 0x0f, 0xf0, 0xc0, 0xc4, 0x43, 0x0a, 0xd9, 0x50, + 0x7a, 0x88, 0x07, 0x44, 0x0c, 0x8d, 0x26, 0x5f, 0x1b, 0xbf, 0xcd, 0x82, 0xc5, 0x36, 0xe9, 0x4f, + 0x04, 0x9f, 0x3c, 0xb5, 0x07, 0x5f, 0x73, 0x6c, 0x79, 0x04, 0x66, 0x02, 0x76, 0xcd, 0xf9, 0xbf, + 0x74, 0x12, 0x48, 0x4c, 0x29, 0x99, 0x1c, 0x3f, 0x72, 0x37, 0x3c, 0x7e, 0xb0, 0x1e, 0x0c, 0x47, + 0x88, 0x5a, 0xa2, 0x2d, 0x8a, 0x1e, 0x3c, 0x1d, 0xf6, 0xe0, 0xa9, 0xff, 0xa4, 0x07, 0xa7, 0xf5, + 0x46, 0x3d, 0x38, 0xcd, 0x31, 0xd8, 0x2c, 0x82, 0x28, 0x8f, 0x6d, 0xde, 0x83, 0xd5, 0x77, 0xc0, + 0xe2, 0x80, 0xcd, 0x69, 0x5d, 0x48, 0xa8, 0xc5, 0x0d, 0xa1, 0xcd, 0xf0, 0xaf, 0x2d, 0x0b, 0x8c, + 0xdc, 0x80, 0x84, 0x72, 0x23, 0x6d, 0xbc, 0x9d, 0xce, 0xa2, 0x25, 0x99, 0x45, 0x71, 0x67, 0x19, + 0xbf, 0xcb, 0x80, 0x95, 0x14, 0x2d, 0xcc, 0x9e, 0x9f, 0x29, 0x20, 0xff, 0xfa, 0x79, 0xf3, 0xf8, + 0xfa, 0x91, 0x99, 0x8f, 0xc5, 0xe4, 0x62, 0xac, 0x0f, 0xf3, 0x68, 0xe4, 0x3d, 0x9a, 0xa5, 0xc9, + 0x43, 0x30, 0x2d, 0x9e, 0x99, 0x91, 0x13, 0xdc, 0xc5, 0x81, 0x21, 0x04, 0xd5, 0x21, 0xc8, 0x39, + 0x43, 0x42, 0xaf, 0x1e, 0xf0, 0x77, 0xaf, 0x8f, 0x99, 0x6b, 0x3e, 0x1d, 0xeb, 0x73, 0x02, 0x2f, + 0xdb, 0x19, 0x26, 0x27, 0x1a, 0xbf, 0x51, 0x78, 0x32, 0x7c, 0x34, 0x70, 0x6c, 0x0a, 0xf7, 0xf9, + 0xd7, 0x35, 0xf5, 0x3d, 0x50, 0xb0, 0x87, 0xf4, 0x10, 0x07, 0x88, 0xca, 0x41, 0xa7, 0xa1, 0xfd, + 0xe1, 0x8b, 0x07, 0xcb, 0x12, 0xd2, 0xa6, 0xe3, 0x04, 0x90, 0x90, 0x27, 0x34, 0x40, 0x7e, 0xdf, + 0x8c, 0x44, 0xd5, 0xf7, 0xc0, 0x8c, 0xf8, 0x3e, 0x27, 0x5f, 0xbd, 0x94, 0x78, 0xb5, 0x50, 0xde, + 0x28, 0x30, 0xf8, 0xbf, 0x7e, 0xf5, 0xec, 0xbe, 0x62, 0x4a, 0xe9, 0x8d, 0x77, 0x98, 0xd7, 0x23, + 0x3d, 0x71, 0xbf, 0xc7, 0x71, 0x19, 0xab, 0xdc, 0xed, 0x71, 0xd2, 0xc4, 0xed, 0xf7, 0x47, 0xa0, + 0x98, 0x1c, 0xac, 0xd5, 0xb7, 0x80, 0xfa, 0xfe, 0xde, 0xde, 0xb6, 0xd5, 0x69, 0xb6, 0xac, 0xad, + 0xcd, 0xc7, 0x5b, 0x3b, 0xad, 0xd6, 0xce, 0x76, 0x69, 0x4a, 0x2d, 0x81, 0xf9, 0xdd, 0x66, 0xab, + 0x65, 0xed, 0x99, 0xd6, 0x87, 0xcd, 0x56, 0xab, 0xa4, 0xa8, 0x2b, 0x60, 0xa9, 0xd9, 0x6e, 0xef, + 0x6c, 0x37, 0x37, 0x3b, 0x3b, 0x8c, 0x2c, 0xa4, 0x4b, 0x19, 0x26, 0xfa, 0xbd, 0x8f, 0x9e, 0x74, + 0xac, 0xe6, 0x63, 0xab, 0xd3, 0x6c, 0xef, 0x94, 0xb2, 0xea, 0x2d, 0xb0, 0x10, 0x2a, 0xe5, 0xa4, + 0xdc, 0xa3, 0x7f, 0xe5, 0x40, 0xb6, 0x4d, 0xfa, 0xea, 0x16, 0x98, 0x9d, 0x7c, 0x59, 0x5a, 0x49, + 0x7a, 0x3b, 0xfc, 0x58, 0x54, 0xd6, 0x2f, 0x60, 0x84, 0xd1, 0xdb, 0x02, 0x20, 0xf6, 0x7d, 0xa1, + 0x9c, 0x16, 0x8f, 0x78, 0x65, 0xe3, 0x62, 0x5e, 0xa8, 0xed, 0x13, 0xb0, 0x98, 0xfe, 0x79, 0x76, + 0x06, 0x41, 0x4a, 0xa0, 0x7c, 0xef, 0x0a, 0x81, 0x50, 0xf9, 0x31, 0xd0, 0x2e, 0x9c, 0x97, 0xaa, + 0x17, 0x81, 0x4b, 0x4b, 0x96, 0x1f, 0xbe, 0xae, 0x64, 0x78, 0xef, 0x0f, 0x41, 0xe9, 0x4c, 0xdf, + 0xae, 0xa4, 0xb5, 0xa4, 0x25, 0xca, 0xd5, 0xab, 0x24, 0x42, 0xfd, 0x26, 0x98, 0x4f, 0x74, 0x86, + 0x6f, 0xa4, 0x4f, 0xc6, 0xb9, 0xe5, 0xb7, 0x2f, 0xe3, 0xc6, 0x75, 0x26, 0x12, 0xec, 0x8c, 0xce, + 0x38, 0xf7, 0xac, 0xce, 0xf3, 0x22, 0xbe, 0x3c, 0xfd, 0x29, 0xcb, 0xa1, 0xc6, 0xfb, 0xcf, 0x5f, + 0xac, 0x29, 0x5f, 0xbe, 0x58, 0x53, 0xfe, 0xf6, 0x62, 0x4d, 0xf9, 0xfc, 0xe5, 0xda, 0xd4, 0x97, + 0x2f, 0xd7, 0xa6, 0xfe, 0xf4, 0x72, 0x6d, 0xea, 0xe3, 0x07, 0x57, 0x17, 0xfa, 0x91, 0xf8, 0x4f, + 0x01, 0x56, 0x2a, 0xba, 0x33, 0xfc, 0xc7, 0xe5, 0xb7, 0xff, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x60, + 0x5b, 0xd3, 0xe2, 0x30, 0x18, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1667,6 +1702,20 @@ func (m *MsgDepositResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.SharesIssued) > 0 { + for iNdEx := len(m.SharesIssued) - 1; iNdEx >= 0; iNdEx-- { + { + size := m.SharesIssued[iNdEx].Size() + i -= size + if _, err := m.SharesIssued[iNdEx].MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } if len(m.FailedDeposits) > 0 { for iNdEx := len(m.FailedDeposits) - 1; iNdEx >= 0; iNdEx-- { { @@ -1834,6 +1883,48 @@ func (m *MsgWithdrawalResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.SharesBurned) > 0 { + for iNdEx := len(m.SharesBurned) - 1; iNdEx >= 0; iNdEx-- { + { + size := m.SharesBurned[iNdEx].Size() + i -= size + if _, err := m.SharesBurned[iNdEx].MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.Reserve1Withdrawn) > 0 { + for iNdEx := len(m.Reserve1Withdrawn) - 1; iNdEx >= 0; iNdEx-- { + { + size := m.Reserve1Withdrawn[iNdEx].Size() + i -= size + if _, err := m.Reserve1Withdrawn[iNdEx].MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.Reserve0Withdrawn) > 0 { + for iNdEx := len(m.Reserve0Withdrawn) - 1; iNdEx >= 0; iNdEx-- { + { + size := m.Reserve0Withdrawn[iNdEx].Size() + i -= size + if _, err := m.Reserve0Withdrawn[iNdEx].MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } return len(dAtA) - i, nil } @@ -1962,6 +2053,16 @@ func (m *MsgPlaceLimitOrderResponse) MarshalToSizedBuffer(dAtA []byte) (int, err _ = i var l int _ = l + { + size := m.TakerCoinIn.Size() + i -= size + if _, err := m.TakerCoinIn.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 { size := m.TakerCoinOut.Size() i -= size @@ -2049,6 +2150,26 @@ func (m *MsgWithdrawFilledLimitOrderResponse) MarshalToSizedBuffer(dAtA []byte) _ = i var l int _ = l + { + size := m.MakerCoinOut.Size() + i -= size + if _, err := m.MakerCoinOut.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size := m.TakerCoinOut.Size() + i -= size + if _, err := m.TakerCoinOut.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -2109,6 +2230,26 @@ func (m *MsgCancelLimitOrderResponse) MarshalToSizedBuffer(dAtA []byte) (int, er _ = i var l int _ = l + { + size := m.MakerCoinOut.Size() + i -= size + if _, err := m.MakerCoinOut.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size := m.TakerCoinOut.Size() + i -= size + if _, err := m.TakerCoinOut.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -2245,6 +2386,32 @@ func (m *MsgMultiHopSwapResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l + if len(m.Dust) > 0 { + for iNdEx := len(m.Dust) - 1; iNdEx >= 0; iNdEx-- { + { + size := m.Dust[iNdEx].Size() + i -= size + if _, err := m.Dust[iNdEx].MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if m.Route != nil { + { + size, err := m.Route.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } { size := m.CoinOut.Size() i -= size @@ -2444,6 +2611,12 @@ func (m *MsgDepositResponse) Size() (n int) { n += 1 + l + sovTx(uint64(l)) } } + if len(m.SharesIssued) > 0 { + for _, e := range m.SharesIssued { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } return n } @@ -2498,6 +2671,24 @@ func (m *MsgWithdrawalResponse) Size() (n int) { } var l int _ = l + if len(m.Reserve0Withdrawn) > 0 { + for _, e := range m.Reserve0Withdrawn { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + if len(m.Reserve1Withdrawn) > 0 { + for _, e := range m.Reserve1Withdrawn { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + if len(m.SharesBurned) > 0 { + for _, e := range m.SharesBurned { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } return n } @@ -2560,6 +2751,8 @@ func (m *MsgPlaceLimitOrderResponse) Size() (n int) { n += 1 + l + sovTx(uint64(l)) l = m.TakerCoinOut.Size() n += 1 + l + sovTx(uint64(l)) + l = m.TakerCoinIn.Size() + n += 1 + l + sovTx(uint64(l)) return n } @@ -2586,6 +2779,10 @@ func (m *MsgWithdrawFilledLimitOrderResponse) Size() (n int) { } var l int _ = l + l = m.TakerCoinOut.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.MakerCoinOut.Size() + n += 1 + l + sovTx(uint64(l)) return n } @@ -2612,6 +2809,10 @@ func (m *MsgCancelLimitOrderResponse) Size() (n int) { } var l int _ = l + l = m.TakerCoinOut.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.MakerCoinOut.Size() + n += 1 + l + sovTx(uint64(l)) return n } @@ -2668,6 +2869,16 @@ func (m *MsgMultiHopSwapResponse) Size() (n int) { _ = l l = m.CoinOut.Size() n += 1 + l + sovTx(uint64(l)) + if m.Route != nil { + l = m.Route.Size() + n += 1 + l + sovTx(uint64(l)) + } + if len(m.Dust) > 0 { + for _, e := range m.Dust { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } return n } @@ -3463,6 +3674,40 @@ func (m *MsgDepositResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SharesIssued", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SharesIssued = append(m.SharesIssued, github_com_cosmos_cosmos_sdk_types.Coin{}) + if err := m.SharesIssued[len(m.SharesIssued)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -3879,6 +4124,112 @@ func (m *MsgWithdrawalResponse) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: MsgWithdrawalResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reserve0Withdrawn", 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 + } + var v cosmossdk_io_math.Int + m.Reserve0Withdrawn = append(m.Reserve0Withdrawn, v) + if err := m.Reserve0Withdrawn[len(m.Reserve0Withdrawn)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reserve1Withdrawn", 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 + } + var v cosmossdk_io_math.Int + m.Reserve1Withdrawn = append(m.Reserve1Withdrawn, v) + if err := m.Reserve1Withdrawn[len(m.Reserve1Withdrawn)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SharesBurned", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SharesBurned = append(m.SharesBurned, github_com_cosmos_cosmos_sdk_types.Coin{}) + if err := m.SharesBurned[len(m.SharesBurned)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -4385,6 +4736,39 @@ func (m *MsgPlaceLimitOrderResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TakerCoinIn", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TakerCoinIn.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -4549,6 +4933,72 @@ func (m *MsgWithdrawFilledLimitOrderResponse) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: MsgWithdrawFilledLimitOrderResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TakerCoinOut", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TakerCoinOut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MakerCoinOut", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MakerCoinOut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -4713,6 +5163,72 @@ func (m *MsgCancelLimitOrderResponse) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: MsgCancelLimitOrderResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TakerCoinOut", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TakerCoinOut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MakerCoinOut", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MakerCoinOut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -5114,6 +5630,76 @@ func (m *MsgMultiHopSwapResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Route", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Route == nil { + m.Route = &MultiHopRoute{} + } + if err := m.Route.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Dust", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Dust = append(m.Dust, github_com_cosmos_cosmos_sdk_types.Coin{}) + if err := m.Dust[len(m.Dust)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) From 4ad0805a3db095ff0f7dce4f7329ce7c74d1953c Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Tue, 27 Aug 2024 18:25:31 -0400 Subject: [PATCH 002/127] add new fields to msg responses --- proto/neutron/dex/tx.proto | 4 +- x/dex/keeper/cancel_limit_order.go | 8 +- x/dex/keeper/msg_server.go | 36 +++- x/dex/keeper/multihop_swap.go | 10 +- x/dex/keeper/withdraw.go | 12 +- x/dex/keeper/withdraw_filled_limit_order.go | 16 +- x/dex/types/tx.pb.go | 208 +++++++++----------- x/feeburner/genesis_test.go | 1 + 8 files changed, 146 insertions(+), 149 deletions(-) diff --git a/proto/neutron/dex/tx.proto b/proto/neutron/dex/tx.proto index 9240ab774..baefc4c1d 100644 --- a/proto/neutron/dex/tx.proto +++ b/proto/neutron/dex/tx.proto @@ -102,13 +102,13 @@ message MsgWithdrawal { } message MsgWithdrawalResponse { -repeated string reserve0_withdrawn = 1 [ +string reserve0_withdrawn = 1 [ (gogoproto.moretags) = "yaml:\"reserve0_withdrawn\"", (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false, (gogoproto.jsontag) = "reserve0_deposited" ]; - repeated string reserve1_withdrawn = 2 [ + string reserve1_withdrawn = 2 [ (gogoproto.moretags) = "yaml:\"reserve1_withdrawn\"", (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false, diff --git a/x/dex/keeper/cancel_limit_order.go b/x/dex/keeper/cancel_limit_order.go index 8c3af443e..9e50320bb 100644 --- a/x/dex/keeper/cancel_limit_order.go +++ b/x/dex/keeper/cancel_limit_order.go @@ -14,12 +14,12 @@ func (k Keeper) CancelLimitOrderCore( goCtx context.Context, trancheKey string, callerAddr sdk.AccAddress, -) error { +) (takerCoinOut, makerCoinOut sdk.Coin, err error) { ctx := sdk.UnwrapSDKContext(goCtx) makerCoinOut, takerCoinOut, tradePairID, err := k.ExecuteCancelLimitOrder(ctx, trancheKey, callerAddr) if err != nil { - return err + return sdk.Coin{}, sdk.Coin{}, err } coinsOut := sdk.NewCoins(makerCoinOut, takerCoinOut) @@ -30,7 +30,7 @@ func (k Keeper) CancelLimitOrderCore( coinsOut, ) if err != nil { - return err + return sdk.Coin{}, sdk.Coin{}, err } // This will never panic since TradePairID has already been successfully constructed by ExecuteCancelLimitOrder @@ -46,7 +46,7 @@ func (k Keeper) CancelLimitOrderCore( trancheKey, )) - return nil + return takerCoinOut, makerCoinOut, nil } // ExecuteCancelLimitOrder handles the core logic for CancelLimitOrder -- removing remaining TokenIn from the diff --git a/x/dex/keeper/msg_server.go b/x/dex/keeper/msg_server.go index 1211cc57b..390948bb3 100644 --- a/x/dex/keeper/msg_server.go +++ b/x/dex/keeper/msg_server.go @@ -48,7 +48,7 @@ func (k MsgServer) Deposit( tickIndexes := NormalizeAllTickIndexes(msg.TokenA, pairID.Token0, msg.TickIndexesAToB) - Amounts0Deposit, Amounts1Deposit, _, failedDeposits, err := k.DepositCore( + Amounts0Deposit, Amounts1Deposit, sharesIssued, failedDeposits, err := k.DepositCore( goCtx, pairID, callerAddr, @@ -67,6 +67,7 @@ func (k MsgServer) Deposit( Reserve0Deposited: Amounts0Deposit, Reserve1Deposited: Amounts1Deposit, FailedDeposits: failedDeposits, + SharesIssued: sharesIssued, }, nil } @@ -92,7 +93,7 @@ func (k MsgServer) Withdrawal( tickIndexes := NormalizeAllTickIndexes(msg.TokenA, pairID.Token0, msg.TickIndexesAToB) - err = k.WithdrawCore( + reserve0ToRemoved, reserve1ToRemoved, sharesBurned, err := k.WithdrawCore( goCtx, pairID, callerAddr, @@ -105,7 +106,11 @@ func (k MsgServer) Withdrawal( return nil, err } - return &types.MsgWithdrawalResponse{}, nil + return &types.MsgWithdrawalResponse{ + Reserve0Withdrawn: reserve0ToRemoved, + Reserve1Withdrawn: reserve1ToRemoved, + SharesBurned: sharesBurned, + }, nil } func (k MsgServer) PlaceLimitOrder( @@ -136,7 +141,7 @@ func (k MsgServer) PlaceLimitOrder( return &types.MsgPlaceLimitOrderResponse{}, errors.Wrapf(err, "invalid LimitSellPrice %s", msg.LimitSellPrice.String()) } } - trancheKey, coinIn, _, coinOutSwap, err := k.PlaceLimitOrderCore( + trancheKey, coinIn, swapInCoin, coinOutSwap, err := k.PlaceLimitOrderCore( goCtx, msg.TokenIn, msg.TokenOut, @@ -156,6 +161,7 @@ func (k MsgServer) PlaceLimitOrder( TrancheKey: trancheKey, CoinIn: coinIn, TakerCoinOut: coinOutSwap, + TakerCoinIn: swapInCoin, }, nil } @@ -173,7 +179,7 @@ func (k MsgServer) WithdrawFilledLimitOrder( callerAddr := sdk.MustAccAddressFromBech32(msg.Creator) - err := k.WithdrawFilledLimitOrderCore( + takerCoinOut, makerCoinOut, err := k.WithdrawFilledLimitOrderCore( goCtx, msg.TrancheKey, callerAddr, @@ -182,7 +188,10 @@ func (k MsgServer) WithdrawFilledLimitOrder( return &types.MsgWithdrawFilledLimitOrderResponse{}, err } - return &types.MsgWithdrawFilledLimitOrderResponse{}, nil + return &types.MsgWithdrawFilledLimitOrderResponse{ + TakerCoinOut: takerCoinOut, + MakerCoinOut: makerCoinOut, + }, nil } func (k MsgServer) CancelLimitOrder( @@ -199,7 +208,7 @@ func (k MsgServer) CancelLimitOrder( callerAddr := sdk.MustAccAddressFromBech32(msg.Creator) - err := k.CancelLimitOrderCore( + takerCoinOut, makerCoinOut, err := k.CancelLimitOrderCore( goCtx, msg.TrancheKey, callerAddr, @@ -208,7 +217,10 @@ func (k MsgServer) CancelLimitOrder( return &types.MsgCancelLimitOrderResponse{}, err } - return &types.MsgCancelLimitOrderResponse{}, nil + return &types.MsgCancelLimitOrderResponse{ + TakerCoinOut: takerCoinOut, + MakerCoinOut: makerCoinOut, + }, nil } func (k MsgServer) MultiHopSwap( @@ -226,7 +238,7 @@ func (k MsgServer) MultiHopSwap( callerAddr := sdk.MustAccAddressFromBech32(msg.Creator) receiverAddr := sdk.MustAccAddressFromBech32(msg.Receiver) - coinOut, err := k.MultiHopSwapCore( + coinOut, route, dust, err := k.MultiHopSwapCore( goCtx, msg.AmountIn, msg.Routes, @@ -238,7 +250,11 @@ func (k MsgServer) MultiHopSwap( if err != nil { return &types.MsgMultiHopSwapResponse{}, err } - return &types.MsgMultiHopSwapResponse{CoinOut: coinOut}, nil + return &types.MsgMultiHopSwapResponse{ + CoinOut: coinOut, + Route: &types.MultiHopRoute{Hops: route}, + Dust: dust, + }, nil } func (k MsgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { diff --git a/x/dex/keeper/multihop_swap.go b/x/dex/keeper/multihop_swap.go index ab1ad4798..c0f93a9a2 100644 --- a/x/dex/keeper/multihop_swap.go +++ b/x/dex/keeper/multihop_swap.go @@ -35,12 +35,12 @@ func (k Keeper) MultiHopSwapCore( pickBestRoute bool, callerAddr sdk.AccAddress, receiverAddr sdk.AccAddress, -) (coinOut sdk.Coin, err error) { +) (coinOut sdk.Coin, route []string, dust sdk.Coins, err error) { ctx := sdk.UnwrapSDKContext(goCtx) bestRoute, initialInCoin, err := k.CalulateMultiHopSwap(ctx, amountIn, routes, exitLimitPrice, pickBestRoute) if err != nil { - return sdk.Coin{}, err + return sdk.Coin{}, []string{}, sdk.Coins{}, err } bestRoute.write() @@ -51,7 +51,7 @@ func (k Keeper) MultiHopSwapCore( sdk.Coins{initialInCoin}, ) if err != nil { - return sdk.Coin{}, err + return sdk.Coin{}, []string{}, sdk.Coins{}, err } // send both dust and coinOut to receiver @@ -63,7 +63,7 @@ func (k Keeper) MultiHopSwapCore( bestRoute.dust.Add(bestRoute.coinOut), ) if err != nil { - return sdk.Coin{}, fmt.Errorf("failed to send out coin and dust to the receiver: %w", err) + return sdk.Coin{}, []string{}, sdk.Coins{}, fmt.Errorf("failed to send out coin and dust to the receiver: %w", err) } ctx.EventManager().EmitEvent(types.CreateMultihopSwapEvent( @@ -77,7 +77,7 @@ func (k Keeper) MultiHopSwapCore( bestRoute.dust, )) - return bestRoute.coinOut, nil + return bestRoute.coinOut, bestRoute.route, bestRoute.dust, nil } // CalulateMultiHopSwap handles the core logic for MultiHopSwap -- simulating swap operations across all routes (when applicable) diff --git a/x/dex/keeper/withdraw.go b/x/dex/keeper/withdraw.go index ff81dd3f1..581a8ff59 100644 --- a/x/dex/keeper/withdraw.go +++ b/x/dex/keeper/withdraw.go @@ -19,7 +19,7 @@ func (k Keeper) WithdrawCore( sharesToRemoveList []math.Int, tickIndicesNormalized []int64, fees []uint64, -) error { +) (reserves0ToRemoved, reserves1ToRemoved math.Int, sharesBurned sdk.Coins, err error) { ctx := sdk.UnwrapSDKContext(goCtx) totalReserve0ToRemove, totalReserve1ToRemove, coinsToBurn, events, err := k.ExecuteWithdraw( @@ -32,13 +32,13 @@ func (k Keeper) WithdrawCore( fees, ) if err != nil { - return err + return math.ZeroInt(), math.ZeroInt(), nil, err } ctx.EventManager().EmitEvents(events) if err := k.BurnShares(ctx, callerAddr, coinsToBurn); err != nil { - return err + return math.ZeroInt(), math.ZeroInt(), nil, err } if totalReserve0ToRemove.IsPositive() { @@ -52,7 +52,7 @@ func (k Keeper) WithdrawCore( ) ctx.EventManager().EmitEvents(types.GetEventsWithdrawnAmount(sdk.Coins{coin0})) if err != nil { - return err + return math.ZeroInt(), math.ZeroInt(), nil, err } } @@ -66,11 +66,11 @@ func (k Keeper) WithdrawCore( ) ctx.EventManager().EmitEvents(types.GetEventsWithdrawnAmount(sdk.Coins{coin1})) if err != nil { - return err + return math.ZeroInt(), math.ZeroInt(), nil, err } } - return nil + return totalReserve0ToRemove, totalReserve1ToRemove, coinsToBurn, nil } // ExecuteWithdraw handles the core Withdraw logic including calculating and withdrawing reserve0,reserve1 from a specified tick diff --git a/x/dex/keeper/withdraw_filled_limit_order.go b/x/dex/keeper/withdraw_filled_limit_order.go index b6d25c460..438c7f370 100644 --- a/x/dex/keeper/withdraw_filled_limit_order.go +++ b/x/dex/keeper/withdraw_filled_limit_order.go @@ -15,22 +15,22 @@ func (k Keeper) WithdrawFilledLimitOrderCore( goCtx context.Context, trancheKey string, callerAddr sdk.AccAddress, -) error { +) (takerCoinOut, makerCoinOut sdk.Coin, err error) { ctx := sdk.UnwrapSDKContext(goCtx) amountOutTokenOut, remainingTokenIn, tradePairID, err := k.ExecuteWithdrawFilledLimitOrder(ctx, trancheKey, callerAddr) if err != nil { - return err + return sdk.Coin{}, sdk.Coin{}, err } - coinTakerDenomOut := sdk.NewCoin(tradePairID.TakerDenom, amountOutTokenOut) - coinMakerDenomRefund := sdk.NewCoin(tradePairID.MakerDenom, remainingTokenIn) + takerCoinOut = sdk.NewCoin(tradePairID.TakerDenom, amountOutTokenOut) + makerCoinOut = sdk.NewCoin(tradePairID.MakerDenom, remainingTokenIn) // NOTE: it is possible for coinTakerDenomOut xor coinMakerDenomOut to be zero. These are removed by the sanitize call in sdk.NewCoins // ExecuteWithdrawFilledLimitOrder ensures that at least one of these has am amount > 0. - coins := sdk.NewCoins(coinTakerDenomOut, coinMakerDenomRefund) - ctx.EventManager().EmitEvents(types.GetEventsWithdrawnAmount(sdk.NewCoins(coinTakerDenomOut))) + coins := sdk.NewCoins(takerCoinOut, makerCoinOut) + ctx.EventManager().EmitEvents(types.GetEventsWithdrawnAmount(sdk.NewCoins(takerCoinOut))) if err := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, callerAddr, coins); err != nil { - return err + return sdk.Coin{}, sdk.Coin{}, err } // This will never panic since TradePairID has already been successfully constructed by ExecuteWithdrawFilledLimitOrder @@ -45,7 +45,7 @@ func (k Keeper) WithdrawFilledLimitOrderCore( trancheKey, )) - return nil + return takerCoinOut, makerCoinOut, nil } // ExecuteWithdrawFilledLimitOrder handles the for logic for WithdrawFilledLimitOrder -- calculates and sends filled liquidity from module to user, diff --git a/x/dex/types/tx.pb.go b/x/dex/types/tx.pb.go index b5d28e112..470f8b908 100644 --- a/x/dex/types/tx.pb.go +++ b/x/dex/types/tx.pb.go @@ -404,8 +404,8 @@ func (m *MsgWithdrawal) GetFees() []uint64 { } type MsgWithdrawalResponse struct { - Reserve0Withdrawn []cosmossdk_io_math.Int `protobuf:"bytes,1,rep,name=reserve0_withdrawn,json=reserve0Withdrawn,proto3,customtype=cosmossdk.io/math.Int" json:"reserve0_deposited" yaml:"reserve0_withdrawn"` - Reserve1Withdrawn []cosmossdk_io_math.Int `protobuf:"bytes,2,rep,name=reserve1_withdrawn,json=reserve1Withdrawn,proto3,customtype=cosmossdk.io/math.Int" json:"reserve1_deposited" yaml:"reserve1_withdrawn"` + Reserve0Withdrawn cosmossdk_io_math.Int `protobuf:"bytes,1,opt,name=reserve0_withdrawn,json=reserve0Withdrawn,proto3,customtype=cosmossdk.io/math.Int" json:"reserve0_deposited" yaml:"reserve0_withdrawn"` + Reserve1Withdrawn cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=reserve1_withdrawn,json=reserve1Withdrawn,proto3,customtype=cosmossdk.io/math.Int" json:"reserve1_deposited" yaml:"reserve1_withdrawn"` SharesBurned []github_com_cosmos_cosmos_sdk_types.Coin `protobuf:"bytes,3,rep,name=shares_burned,json=sharesBurned,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Coin" json:"shares_issued" yaml:"shares_burned"` } @@ -1057,7 +1057,7 @@ func init() { func init() { proto.RegisterFile("neutron/dex/tx.proto", fileDescriptor_a489f6e187d5e074) } var fileDescriptor_a489f6e187d5e074 = []byte{ - // 1879 bytes of a gzipped FileDescriptorProto + // 1885 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcb, 0x6f, 0x23, 0x49, 0x19, 0x4f, 0xdb, 0x4e, 0x62, 0x57, 0x12, 0xc7, 0xd3, 0xc9, 0x6c, 0x3a, 0x1e, 0x94, 0xb6, 0x7a, 0x56, 0x3b, 0x66, 0xc4, 0xd8, 0x93, 0x61, 0xd9, 0x43, 0x0e, 0x48, 0x71, 0x1e, 0xbb, 0x66, 0xed, @@ -1107,75 +1107,75 @@ var fileDescriptor_a489f6e187d5e074 = []byte{ 0x2b, 0x80, 0x1e, 0x3e, 0x86, 0xb2, 0x2a, 0xb4, 0xae, 0x72, 0xec, 0x99, 0x83, 0xa7, 0x63, 0x7d, 0x25, 0xf1, 0xd8, 0x90, 0x63, 0x98, 0x45, 0x41, 0xea, 0x60, 0x93, 0x13, 0x2e, 0x4a, 0xe6, 0x99, 0xcb, 0x93, 0x79, 0x36, 0x4a, 0xe6, 0x0d, 0x23, 0x9d, 0x95, 0xb7, 0x64, 0x56, 0x46, 0x56, 0x34, - 0xbe, 0xc8, 0x82, 0xdb, 0x09, 0xca, 0xb9, 0x39, 0xf5, 0x54, 0xb2, 0xfd, 0x9b, 0xcd, 0xa9, 0x50, - 0x6d, 0x2c, 0xa7, 0x26, 0x48, 0xfc, 0x44, 0x4e, 0x45, 0x00, 0x6e, 0x34, 0xa7, 0xce, 0x01, 0xb0, - 0x1e, 0x01, 0x88, 0xa5, 0x43, 0x77, 0x18, 0xf8, 0xd0, 0x91, 0x29, 0xf5, 0x46, 0xd3, 0x41, 0xdc, - 0x1c, 0xa6, 0x43, 0x43, 0x6c, 0x7f, 0x3f, 0xcd, 0xeb, 0xe0, 0xbe, 0x6b, 0xf7, 0x60, 0x0b, 0x79, - 0x88, 0xee, 0x05, 0x0e, 0x0c, 0xbe, 0x66, 0x4e, 0xac, 0x82, 0xbc, 0x08, 0x7d, 0xe4, 0xcb, 0xa4, - 0x10, 0xa9, 0xd0, 0xf4, 0xd5, 0x3b, 0xa0, 0x20, 0x58, 0x78, 0x48, 0x65, 0x5e, 0x08, 0xd9, 0xbd, - 0x21, 0x55, 0x1f, 0x81, 0xe5, 0x28, 0x42, 0x2d, 0xe4, 0xb3, 0x00, 0x65, 0x72, 0xd3, 0x15, 0xa5, - 0x9a, 0x6d, 0x64, 0x34, 0xc5, 0x2c, 0x85, 0x61, 0xda, 0xf4, 0x3b, 0x98, 0x9d, 0x09, 0xfb, 0x1f, - 0xbb, 0x6c, 0x96, 0x29, 0x7c, 0xed, 0xfe, 0x67, 0x21, 0x3f, 0xdd, 0xff, 0x2c, 0xe4, 0x87, 0xfd, - 0xaf, 0xe9, 0xab, 0x1b, 0x00, 0x60, 0x66, 0x07, 0x8b, 0x19, 0x58, 0xcb, 0x57, 0x94, 0x6a, 0x31, - 0xd5, 0xc0, 0x22, 0x5b, 0x75, 0x4e, 0x06, 0xd0, 0x2c, 0xe0, 0xc9, 0x52, 0x6d, 0x83, 0x45, 0x38, - 0x1a, 0xa0, 0xc0, 0x66, 0x1d, 0xcd, 0x62, 0x63, 0x90, 0x56, 0xa8, 0x28, 0xbc, 0x80, 0x8a, 0x19, - 0xa9, 0x36, 0x99, 0x91, 0x6a, 0x9d, 0xc9, 0x8c, 0xd4, 0xc8, 0x3f, 0x1f, 0xeb, 0xca, 0xe7, 0x7f, - 0xd5, 0x15, 0xb3, 0x18, 0x1d, 0x66, 0x6c, 0xd5, 0x07, 0x45, 0xcf, 0x1e, 0x59, 0x12, 0x26, 0xb3, - 0x0a, 0xe0, 0x8f, 0xfd, 0x80, 0x9d, 0xb8, 0xec, 0xb1, 0xa9, 0x63, 0xa7, 0x63, 0xfd, 0xb6, 0x78, - 0x71, 0x92, 0x6e, 0x98, 0xf3, 0x9e, 0x3d, 0xda, 0xe4, 0x7b, 0x66, 0xd7, 0x9f, 0x2b, 0xa0, 0xe4, - 0xb2, 0xc7, 0x59, 0x04, 0xba, 0xae, 0x35, 0x08, 0x50, 0x0f, 0x6a, 0x73, 0xfc, 0xca, 0x23, 0x79, - 0xe5, 0xbb, 0xb1, 0x98, 0x94, 0x36, 0x79, 0x80, 0x83, 0xfe, 0x64, 0x5d, 0x3f, 0x7e, 0xb7, 0x3e, - 0xa4, 0xc8, 0x25, 0x02, 0xcd, 0x7e, 0x00, 0x7b, 0xdb, 0xb0, 0xc7, 0xaa, 0x58, 0x5a, 0x6f, 0x54, - 0xc5, 0xd2, 0x1c, 0xc3, 0x2c, 0x72, 0xd2, 0x13, 0xe8, 0xba, 0xfb, 0x8c, 0xb0, 0x71, 0x2f, 0x5d, - 0x83, 0xde, 0x92, 0x35, 0x28, 0x15, 0xba, 0xc6, 0x3f, 0xb3, 0xa0, 0x7c, 0x96, 0x1c, 0x56, 0xa3, - 0x35, 0x00, 0x68, 0x60, 0xfb, 0xbd, 0x43, 0xf8, 0x21, 0x3c, 0x91, 0xc1, 0x1d, 0xa3, 0xa8, 0x9f, - 0x2a, 0x60, 0x96, 0x4d, 0xc8, 0x2c, 0xac, 0x32, 0xdc, 0x6f, 0x97, 0x64, 0x69, 0xeb, 0xfa, 0x59, - 0x3a, 0x51, 0x7e, 0x3a, 0xd6, 0x8b, 0xe2, 0xed, 0x92, 0x60, 0x98, 0x33, 0x6c, 0xd5, 0xf4, 0xd5, - 0x5f, 0x29, 0xa0, 0x48, 0xed, 0x23, 0x18, 0x58, 0x9c, 0xc5, 0x7c, 0x9e, 0xbd, 0x0a, 0xc9, 0xc7, - 0xd7, 0x47, 0x92, 0xba, 0x23, 0x0a, 0x90, 0x24, 0xdd, 0x30, 0xe7, 0x39, 0x81, 0x9d, 0x62, 0x01, - 0xf2, 0x0b, 0x05, 0x2c, 0xc4, 0x24, 0x90, 0xcf, 0xd3, 0xf9, 0xc6, 0x8b, 0x59, 0xe2, 0x8a, 0xa8, - 0x98, 0x25, 0xc8, 0x86, 0x39, 0x17, 0x42, 0x6b, 0xfa, 0xc6, 0x67, 0x0a, 0xb8, 0x13, 0x6b, 0x41, - 0xbb, 0xc8, 0x75, 0xa1, 0xf3, 0x5a, 0x45, 0x4d, 0x07, 0x73, 0x32, 0x04, 0xac, 0x23, 0x78, 0x22, - 0xeb, 0x5a, 0x2c, 0x2a, 0x36, 0x1e, 0xa6, 0xa3, 0x4f, 0x4f, 0x75, 0xc0, 0xf4, 0x65, 0xc6, 0xdf, - 0x33, 0xe0, 0xee, 0x25, 0xfc, 0x30, 0x1e, 0xcf, 0x71, 0xb6, 0xf2, 0xbf, 0xe3, 0x6c, 0x86, 0xce, - 0x4b, 0xa2, 0xcb, 0xfc, 0x37, 0xd0, 0x79, 0x17, 0xa0, 0xf3, 0xd2, 0xe8, 0xbc, 0x18, 0x3a, 0xe3, - 0xc7, 0x60, 0xa9, 0x4d, 0xfa, 0x5b, 0xb6, 0xdf, 0x83, 0xee, 0xcd, 0xf8, 0xb9, 0x9a, 0xf6, 0xf3, - 0x8a, 0xf4, 0x73, 0xfa, 0x12, 0xe3, 0xcf, 0x19, 0x1e, 0x6c, 0x69, 0xfa, 0xff, 0xfd, 0x7a, 0x03, - 0x7e, 0xbd, 0x0b, 0x16, 0xda, 0x43, 0x97, 0xa2, 0x0f, 0xf0, 0xc0, 0xc4, 0x43, 0x0a, 0xd9, 0x50, - 0x7a, 0x88, 0x07, 0x44, 0x0c, 0x8d, 0x26, 0x5f, 0x1b, 0xbf, 0xcd, 0x82, 0xc5, 0x36, 0xe9, 0x4f, - 0x04, 0x9f, 0x3c, 0xb5, 0x07, 0x5f, 0x73, 0x6c, 0x79, 0x04, 0x66, 0x02, 0x76, 0xcd, 0xf9, 0xbf, - 0x74, 0x12, 0x48, 0x4c, 0x29, 0x99, 0x1c, 0x3f, 0x72, 0x37, 0x3c, 0x7e, 0xb0, 0x1e, 0x0c, 0x47, - 0x88, 0x5a, 0xa2, 0x2d, 0x8a, 0x1e, 0x3c, 0x1d, 0xf6, 0xe0, 0xa9, 0xff, 0xa4, 0x07, 0xa7, 0xf5, - 0x46, 0x3d, 0x38, 0xcd, 0x31, 0xd8, 0x2c, 0x82, 0x28, 0x8f, 0x6d, 0xde, 0x83, 0xd5, 0x77, 0xc0, - 0xe2, 0x80, 0xcd, 0x69, 0x5d, 0x48, 0xa8, 0xc5, 0x0d, 0xa1, 0xcd, 0xf0, 0xaf, 0x2d, 0x0b, 0x8c, - 0xdc, 0x80, 0x84, 0x72, 0x23, 0x6d, 0xbc, 0x9d, 0xce, 0xa2, 0x25, 0x99, 0x45, 0x71, 0x67, 0x19, - 0xbf, 0xcb, 0x80, 0x95, 0x14, 0x2d, 0xcc, 0x9e, 0x9f, 0x29, 0x20, 0xff, 0xfa, 0x79, 0xf3, 0xf8, - 0xfa, 0x91, 0x99, 0x8f, 0xc5, 0xe4, 0x62, 0xac, 0x0f, 0xf3, 0x68, 0xe4, 0x3d, 0x9a, 0xa5, 0xc9, - 0x43, 0x30, 0x2d, 0x9e, 0x99, 0x91, 0x13, 0xdc, 0xc5, 0x81, 0x21, 0x04, 0xd5, 0x21, 0xc8, 0x39, - 0x43, 0x42, 0xaf, 0x1e, 0xf0, 0x77, 0xaf, 0x8f, 0x99, 0x6b, 0x3e, 0x1d, 0xeb, 0x73, 0x02, 0x2f, - 0xdb, 0x19, 0x26, 0x27, 0x1a, 0xbf, 0x51, 0x78, 0x32, 0x7c, 0x34, 0x70, 0x6c, 0x0a, 0xf7, 0xf9, - 0xd7, 0x35, 0xf5, 0x3d, 0x50, 0xb0, 0x87, 0xf4, 0x10, 0x07, 0x88, 0xca, 0x41, 0xa7, 0xa1, 0xfd, - 0xe1, 0x8b, 0x07, 0xcb, 0x12, 0xd2, 0xa6, 0xe3, 0x04, 0x90, 0x90, 0x27, 0x34, 0x40, 0x7e, 0xdf, - 0x8c, 0x44, 0xd5, 0xf7, 0xc0, 0x8c, 0xf8, 0x3e, 0x27, 0x5f, 0xbd, 0x94, 0x78, 0xb5, 0x50, 0xde, - 0x28, 0x30, 0xf8, 0xbf, 0x7e, 0xf5, 0xec, 0xbe, 0x62, 0x4a, 0xe9, 0x8d, 0x77, 0x98, 0xd7, 0x23, - 0x3d, 0x71, 0xbf, 0xc7, 0x71, 0x19, 0xab, 0xdc, 0xed, 0x71, 0xd2, 0xc4, 0xed, 0xf7, 0x47, 0xa0, - 0x98, 0x1c, 0xac, 0xd5, 0xb7, 0x80, 0xfa, 0xfe, 0xde, 0xde, 0xb6, 0xd5, 0x69, 0xb6, 0xac, 0xad, - 0xcd, 0xc7, 0x5b, 0x3b, 0xad, 0xd6, 0xce, 0x76, 0x69, 0x4a, 0x2d, 0x81, 0xf9, 0xdd, 0x66, 0xab, - 0x65, 0xed, 0x99, 0xd6, 0x87, 0xcd, 0x56, 0xab, 0xa4, 0xa8, 0x2b, 0x60, 0xa9, 0xd9, 0x6e, 0xef, - 0x6c, 0x37, 0x37, 0x3b, 0x3b, 0x8c, 0x2c, 0xa4, 0x4b, 0x19, 0x26, 0xfa, 0xbd, 0x8f, 0x9e, 0x74, - 0xac, 0xe6, 0x63, 0xab, 0xd3, 0x6c, 0xef, 0x94, 0xb2, 0xea, 0x2d, 0xb0, 0x10, 0x2a, 0xe5, 0xa4, - 0xdc, 0xa3, 0x7f, 0xe5, 0x40, 0xb6, 0x4d, 0xfa, 0xea, 0x16, 0x98, 0x9d, 0x7c, 0x59, 0x5a, 0x49, - 0x7a, 0x3b, 0xfc, 0x58, 0x54, 0xd6, 0x2f, 0x60, 0x84, 0xd1, 0xdb, 0x02, 0x20, 0xf6, 0x7d, 0xa1, - 0x9c, 0x16, 0x8f, 0x78, 0x65, 0xe3, 0x62, 0x5e, 0xa8, 0xed, 0x13, 0xb0, 0x98, 0xfe, 0x79, 0x76, - 0x06, 0x41, 0x4a, 0xa0, 0x7c, 0xef, 0x0a, 0x81, 0x50, 0xf9, 0x31, 0xd0, 0x2e, 0x9c, 0x97, 0xaa, - 0x17, 0x81, 0x4b, 0x4b, 0x96, 0x1f, 0xbe, 0xae, 0x64, 0x78, 0xef, 0x0f, 0x41, 0xe9, 0x4c, 0xdf, - 0xae, 0xa4, 0xb5, 0xa4, 0x25, 0xca, 0xd5, 0xab, 0x24, 0x42, 0xfd, 0x26, 0x98, 0x4f, 0x74, 0x86, - 0x6f, 0xa4, 0x4f, 0xc6, 0xb9, 0xe5, 0xb7, 0x2f, 0xe3, 0xc6, 0x75, 0x26, 0x12, 0xec, 0x8c, 0xce, - 0x38, 0xf7, 0xac, 0xce, 0xf3, 0x22, 0xbe, 0x3c, 0xfd, 0x29, 0xcb, 0xa1, 0xc6, 0xfb, 0xcf, 0x5f, - 0xac, 0x29, 0x5f, 0xbe, 0x58, 0x53, 0xfe, 0xf6, 0x62, 0x4d, 0xf9, 0xfc, 0xe5, 0xda, 0xd4, 0x97, - 0x2f, 0xd7, 0xa6, 0xfe, 0xf4, 0x72, 0x6d, 0xea, 0xe3, 0x07, 0x57, 0x17, 0xfa, 0x91, 0xf8, 0x4f, - 0x01, 0x56, 0x2a, 0xba, 0x33, 0xfc, 0xc7, 0xe5, 0xb7, 0xff, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x60, - 0x5b, 0xd3, 0xe2, 0x30, 0x18, 0x00, 0x00, + 0xbe, 0xc8, 0x82, 0xdb, 0x09, 0xca, 0xb9, 0x39, 0xf5, 0x54, 0xb2, 0x7d, 0x61, 0xea, 0x9b, 0xca, + 0xa9, 0x50, 0x6d, 0x2c, 0xa7, 0x26, 0x48, 0xfc, 0x44, 0x4e, 0x45, 0x00, 0x32, 0xd7, 0x03, 0x70, + 0x79, 0x4e, 0x9d, 0x03, 0x60, 0x3d, 0x02, 0x10, 0x4b, 0x87, 0xee, 0x30, 0xf0, 0xa1, 0x23, 0x53, + 0xea, 0x8d, 0xa6, 0x83, 0xb8, 0x39, 0x4c, 0x87, 0x86, 0xd8, 0xfe, 0x7e, 0x9a, 0xd7, 0xc1, 0x7d, + 0xd7, 0xee, 0xc1, 0x16, 0xf2, 0x10, 0xdd, 0x0b, 0x1c, 0x18, 0x7c, 0xcd, 0x9c, 0x58, 0x05, 0x79, + 0x11, 0xfa, 0xc8, 0x97, 0x49, 0x21, 0x52, 0xa1, 0xe9, 0xab, 0x77, 0x40, 0x41, 0xb0, 0xf0, 0x90, + 0xca, 0xbc, 0x10, 0xb2, 0x7b, 0x43, 0xaa, 0x3e, 0x02, 0xcb, 0x51, 0x84, 0x5a, 0xc8, 0x67, 0x01, + 0xca, 0xe4, 0xa6, 0x2b, 0x4a, 0x35, 0xdb, 0xc8, 0x68, 0x8a, 0x59, 0x0a, 0xc3, 0xb4, 0xe9, 0x77, + 0x30, 0x3b, 0x13, 0xf6, 0x3f, 0x76, 0xd9, 0x2c, 0xf7, 0xe5, 0xeb, 0xf6, 0x3f, 0x0b, 0xf9, 0xe9, + 0xfe, 0x67, 0x21, 0x3f, 0xec, 0x7f, 0x4d, 0x5f, 0xdd, 0x00, 0x00, 0x33, 0x3b, 0x58, 0xcc, 0xc0, + 0x5a, 0xbe, 0xa2, 0x54, 0x8b, 0xa9, 0x06, 0x16, 0xd9, 0xaa, 0x73, 0x32, 0x80, 0x66, 0x01, 0x4f, + 0x96, 0x6a, 0x1b, 0x2c, 0xc2, 0xd1, 0x00, 0x05, 0x36, 0xeb, 0x68, 0x16, 0x1b, 0x83, 0xb4, 0x42, + 0x45, 0xe1, 0x05, 0x54, 0xcc, 0x48, 0xb5, 0xc9, 0x8c, 0x54, 0xeb, 0x4c, 0x66, 0xa4, 0x46, 0xfe, + 0xf9, 0x58, 0x57, 0x3e, 0xff, 0xab, 0xae, 0x98, 0xc5, 0xe8, 0x30, 0x63, 0xab, 0x3e, 0x28, 0x7a, + 0xf6, 0xc8, 0x92, 0x30, 0x99, 0x55, 0x00, 0x7f, 0xec, 0x07, 0xec, 0xc4, 0x65, 0x8f, 0x4d, 0x1d, + 0x3b, 0x1d, 0xeb, 0xb7, 0xc5, 0x8b, 0x93, 0x74, 0xc3, 0x9c, 0xf7, 0xec, 0xd1, 0x26, 0xdf, 0x33, + 0xbb, 0xfe, 0x5c, 0x01, 0x25, 0x97, 0x3d, 0xce, 0x22, 0xd0, 0x75, 0xad, 0x41, 0x80, 0x7a, 0x50, + 0x9b, 0xe3, 0x57, 0x1e, 0xc9, 0x2b, 0xdf, 0x8d, 0xc5, 0xa4, 0xb4, 0xc9, 0x03, 0x1c, 0xf4, 0x27, + 0xeb, 0xfa, 0xf1, 0xbb, 0xf5, 0x21, 0x45, 0x2e, 0x11, 0x68, 0xf6, 0x03, 0xd8, 0xdb, 0x86, 0x3d, + 0x56, 0xc5, 0xd2, 0x7a, 0xa3, 0x2a, 0x96, 0xe6, 0x18, 0x66, 0x91, 0x93, 0x9e, 0x40, 0xd7, 0xdd, + 0x67, 0x84, 0x8d, 0x7b, 0xe9, 0x1a, 0xf4, 0x96, 0xac, 0x41, 0xa9, 0xd0, 0x35, 0xfe, 0x99, 0x05, + 0xe5, 0xb3, 0xe4, 0xb0, 0x1a, 0xad, 0x01, 0x40, 0x03, 0xdb, 0xef, 0x1d, 0xc2, 0x0f, 0xe1, 0x89, + 0x0c, 0xee, 0x18, 0x45, 0xfd, 0x54, 0x01, 0xb3, 0x6c, 0x42, 0x66, 0x61, 0x95, 0xe1, 0x7e, 0xbb, + 0x24, 0x4b, 0x5b, 0xd7, 0xcf, 0xd2, 0x89, 0xf2, 0xd3, 0xb1, 0x5e, 0x14, 0x6f, 0x97, 0x04, 0xc3, + 0x9c, 0x61, 0xab, 0xa6, 0xaf, 0xfe, 0x4a, 0x01, 0x45, 0x6a, 0x1f, 0xc1, 0xc0, 0xe2, 0x2c, 0xe6, + 0xf3, 0xec, 0x55, 0x48, 0x3e, 0xbe, 0x3e, 0x92, 0xd4, 0x1d, 0x51, 0x80, 0x24, 0xe9, 0x86, 0x39, + 0xcf, 0x09, 0xec, 0x14, 0x0b, 0x90, 0x5f, 0x28, 0x60, 0x21, 0x26, 0x81, 0x7c, 0x9e, 0xce, 0x37, + 0x5e, 0xcc, 0x12, 0x57, 0x44, 0xc5, 0x2c, 0x41, 0x36, 0xcc, 0xb9, 0x10, 0x5a, 0xd3, 0x37, 0x3e, + 0x53, 0xc0, 0x9d, 0x58, 0x0b, 0xda, 0x45, 0xae, 0x0b, 0x9d, 0xd7, 0x2a, 0x6a, 0x3a, 0x98, 0x93, + 0x21, 0x60, 0x1d, 0xc1, 0x13, 0x59, 0xd7, 0x62, 0x51, 0xb1, 0xf1, 0x30, 0x1d, 0x7d, 0x7a, 0xaa, + 0x03, 0xa6, 0x2f, 0x33, 0xfe, 0x9e, 0x01, 0x77, 0x2f, 0xe1, 0x87, 0xf1, 0x78, 0x8e, 0xb3, 0x95, + 0xff, 0x1d, 0x67, 0x33, 0x74, 0x5e, 0x12, 0x5d, 0xe6, 0xbf, 0x81, 0xce, 0xbb, 0x00, 0x9d, 0x97, + 0x46, 0xe7, 0xc5, 0xd0, 0x19, 0x3f, 0x06, 0x4b, 0x6d, 0xd2, 0xdf, 0xb2, 0xfd, 0x1e, 0x74, 0x6f, + 0xc6, 0xcf, 0xd5, 0xb4, 0x9f, 0x57, 0xa4, 0x9f, 0xd3, 0x97, 0x18, 0x7f, 0xce, 0xf0, 0x60, 0x4b, + 0xd3, 0xff, 0xef, 0xd7, 0x1b, 0xf0, 0xeb, 0x5d, 0xb0, 0xd0, 0x1e, 0xba, 0x14, 0x7d, 0x80, 0x07, + 0x26, 0x1e, 0x52, 0xc8, 0x86, 0xd2, 0x43, 0x3c, 0x20, 0xe2, 0x87, 0x98, 0xc9, 0xd7, 0xc6, 0x6f, + 0xb3, 0x60, 0xb1, 0x4d, 0xfa, 0x13, 0xc1, 0x27, 0x4f, 0xed, 0xc1, 0xd7, 0x1c, 0x5b, 0x1e, 0x81, + 0x99, 0x80, 0x5d, 0x73, 0xfe, 0x2f, 0x9d, 0x04, 0x12, 0x53, 0x4a, 0x26, 0xc7, 0x8f, 0xdc, 0x0d, + 0x8f, 0x1f, 0xac, 0x07, 0xc3, 0x11, 0xa2, 0x96, 0x68, 0x8b, 0xa2, 0x07, 0x4f, 0x87, 0x3d, 0x78, + 0xea, 0x3f, 0xe9, 0xc1, 0x69, 0xbd, 0x51, 0x0f, 0x4e, 0x73, 0x0c, 0x36, 0x8b, 0x20, 0xca, 0x63, + 0x9b, 0xf7, 0x60, 0xf5, 0x1d, 0xb0, 0x38, 0x60, 0x73, 0x5a, 0x17, 0x12, 0x6a, 0x71, 0x43, 0x68, + 0x33, 0xfc, 0x6b, 0xcb, 0x02, 0x23, 0x37, 0x20, 0xa1, 0xdc, 0x48, 0x1b, 0x6f, 0xa7, 0xb3, 0x68, + 0x49, 0x66, 0x51, 0xdc, 0x59, 0xc6, 0xef, 0x32, 0x60, 0x25, 0x45, 0x0b, 0xb3, 0xe7, 0x67, 0x0a, + 0xc8, 0xbf, 0x7e, 0xde, 0x3c, 0xbe, 0x7e, 0x64, 0xe6, 0x63, 0x31, 0xb9, 0x18, 0xeb, 0xc3, 0x3c, + 0x1a, 0x79, 0x8f, 0x66, 0x69, 0xf2, 0x10, 0x4c, 0x8b, 0x67, 0x66, 0xe4, 0x04, 0x77, 0x71, 0x60, + 0x08, 0x41, 0x75, 0x08, 0x72, 0xce, 0x90, 0xd0, 0xab, 0x07, 0xfc, 0xdd, 0xeb, 0x63, 0xe6, 0x9a, + 0x4f, 0xc7, 0xfa, 0x9c, 0xc0, 0xcb, 0x76, 0x86, 0xc9, 0x89, 0xc6, 0x6f, 0x14, 0x9e, 0x0c, 0x1f, + 0x0d, 0x1c, 0x9b, 0xc2, 0x7d, 0xfe, 0x75, 0x4d, 0x7d, 0x0f, 0x14, 0xec, 0x21, 0x3d, 0xc4, 0x01, + 0xa2, 0x72, 0xd0, 0x69, 0x68, 0x7f, 0xf8, 0xe2, 0xc1, 0xb2, 0x84, 0xb4, 0xe9, 0x38, 0x01, 0x24, + 0xe4, 0x09, 0x0d, 0x90, 0xdf, 0x37, 0x23, 0x51, 0xf5, 0x3d, 0x30, 0x23, 0xbe, 0xcf, 0xc9, 0x57, + 0x2f, 0x25, 0x5e, 0x2d, 0x94, 0x37, 0x0a, 0x0c, 0xfe, 0xaf, 0x5f, 0x3d, 0xbb, 0xaf, 0x98, 0x52, + 0x7a, 0xe3, 0x1d, 0xe6, 0xf5, 0x48, 0x4f, 0xdc, 0xef, 0x71, 0x5c, 0xc6, 0x2a, 0x77, 0x7b, 0x9c, + 0x34, 0x71, 0xfb, 0xfd, 0x11, 0x28, 0x26, 0x07, 0x6b, 0xf5, 0x2d, 0xa0, 0xbe, 0xbf, 0xb7, 0xb7, + 0x6d, 0x75, 0x9a, 0x2d, 0x6b, 0x6b, 0xf3, 0xf1, 0xd6, 0x4e, 0xab, 0xb5, 0xb3, 0x5d, 0x9a, 0x52, + 0x4b, 0x60, 0x7e, 0xb7, 0xd9, 0x6a, 0x59, 0x7b, 0xa6, 0xf5, 0x61, 0xb3, 0xd5, 0x2a, 0x29, 0xea, + 0x0a, 0x58, 0x6a, 0xb6, 0xdb, 0x3b, 0xdb, 0xcd, 0xcd, 0xce, 0x0e, 0x23, 0x0b, 0xe9, 0x52, 0x86, + 0x89, 0x7e, 0xef, 0xa3, 0x27, 0x1d, 0xab, 0xf9, 0xd8, 0xea, 0x34, 0xdb, 0x3b, 0xa5, 0xac, 0x7a, + 0x0b, 0x2c, 0x84, 0x4a, 0x39, 0x29, 0xf7, 0xe8, 0x5f, 0x39, 0x90, 0x6d, 0x93, 0xbe, 0xba, 0x05, + 0x66, 0x27, 0x5f, 0x96, 0x56, 0x92, 0xde, 0x0e, 0x3f, 0x16, 0x95, 0xf5, 0x0b, 0x18, 0x61, 0xf4, + 0xb6, 0x00, 0x88, 0x7d, 0x5f, 0x28, 0xa7, 0xc5, 0x23, 0x5e, 0xd9, 0xb8, 0x98, 0x17, 0x6a, 0xfb, + 0x04, 0x2c, 0xa6, 0x7f, 0x9e, 0x9d, 0x41, 0x90, 0x12, 0x28, 0xdf, 0xbb, 0x42, 0x20, 0x54, 0x7e, + 0x0c, 0xb4, 0x0b, 0xe7, 0xa5, 0xea, 0x45, 0xe0, 0xd2, 0x92, 0xe5, 0x87, 0xaf, 0x2b, 0x19, 0xde, + 0xfb, 0x43, 0x50, 0x3a, 0xd3, 0xb7, 0x2b, 0x69, 0x2d, 0x69, 0x89, 0x72, 0xf5, 0x2a, 0x89, 0x50, + 0xbf, 0x09, 0xe6, 0x13, 0x9d, 0xe1, 0x1b, 0xe9, 0x93, 0x71, 0x6e, 0xf9, 0xed, 0xcb, 0xb8, 0x71, + 0x9d, 0x89, 0x04, 0x3b, 0xa3, 0x33, 0xce, 0x3d, 0xab, 0xf3, 0xbc, 0x88, 0x2f, 0x4f, 0x7f, 0xca, + 0x72, 0xa8, 0xf1, 0xfe, 0xf3, 0x17, 0x6b, 0xca, 0x97, 0x2f, 0xd6, 0x94, 0xbf, 0xbd, 0x58, 0x53, + 0x3e, 0x7f, 0xb9, 0x36, 0xf5, 0xe5, 0xcb, 0xb5, 0xa9, 0x3f, 0xbd, 0x5c, 0x9b, 0xfa, 0xf8, 0xc1, + 0xd5, 0x85, 0x7e, 0x24, 0xfe, 0x53, 0x80, 0x95, 0x8a, 0xee, 0x0c, 0xff, 0x71, 0xf9, 0xed, 0x7f, + 0x07, 0x00, 0x00, 0xff, 0xff, 0x2c, 0xd3, 0xce, 0x7e, 0x30, 0x18, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1897,34 +1897,26 @@ func (m *MsgWithdrawalResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x1a } } - if len(m.Reserve1Withdrawn) > 0 { - for iNdEx := len(m.Reserve1Withdrawn) - 1; iNdEx >= 0; iNdEx-- { - { - size := m.Reserve1Withdrawn[iNdEx].Size() - i -= size - if _, err := m.Reserve1Withdrawn[iNdEx].MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 + { + size := m.Reserve1Withdrawn.Size() + i -= size + if _, err := m.Reserve1Withdrawn.MarshalTo(dAtA[i:]); err != nil { + return 0, err } + i = encodeVarintTx(dAtA, i, uint64(size)) } - if len(m.Reserve0Withdrawn) > 0 { - for iNdEx := len(m.Reserve0Withdrawn) - 1; iNdEx >= 0; iNdEx-- { - { - size := m.Reserve0Withdrawn[iNdEx].Size() - i -= size - if _, err := m.Reserve0Withdrawn[iNdEx].MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa + i-- + dAtA[i] = 0x12 + { + size := m.Reserve0Withdrawn.Size() + i -= size + if _, err := m.Reserve0Withdrawn.MarshalTo(dAtA[i:]); err != nil { + return 0, err } + i = encodeVarintTx(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -2671,18 +2663,10 @@ func (m *MsgWithdrawalResponse) Size() (n int) { } var l int _ = l - if len(m.Reserve0Withdrawn) > 0 { - for _, e := range m.Reserve0Withdrawn { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } - if len(m.Reserve1Withdrawn) > 0 { - for _, e := range m.Reserve1Withdrawn { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } + l = m.Reserve0Withdrawn.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.Reserve1Withdrawn.Size() + n += 1 + l + sovTx(uint64(l)) if len(m.SharesBurned) > 0 { for _, e := range m.SharesBurned { l = e.Size() @@ -4154,9 +4138,7 @@ func (m *MsgWithdrawalResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var v cosmossdk_io_math.Int - m.Reserve0Withdrawn = append(m.Reserve0Withdrawn, v) - if err := m.Reserve0Withdrawn[len(m.Reserve0Withdrawn)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Reserve0Withdrawn.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4190,9 +4172,7 @@ func (m *MsgWithdrawalResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var v cosmossdk_io_math.Int - m.Reserve1Withdrawn = append(m.Reserve1Withdrawn, v) - if err := m.Reserve1Withdrawn[len(m.Reserve1Withdrawn)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Reserve1Withdrawn.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/feeburner/genesis_test.go b/x/feeburner/genesis_test.go index 39cac8755..4287929a5 100644 --- a/x/feeburner/genesis_test.go +++ b/x/feeburner/genesis_test.go @@ -4,6 +4,7 @@ import ( "testing" "cosmossdk.io/math" + "github.com/neutron-org/neutron/v4/app/config" sdk "github.com/cosmos/cosmos-sdk/types" From 07904c3931214a36eb8fb8ad60ef1a9f37db658e Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Tue, 27 Aug 2024 19:36:55 -0400 Subject: [PATCH 003/127] Add GRPC simulateXX handlers --- x/dex/keeper/cancel_limit_order.go | 22 ++++--- .../grpc_query_estimate_multi_hop_swap.go | 2 +- .../grpc_query_simulate_cancel_limit_order.go | 41 ++++++++++++ x/dex/keeper/grpc_query_simulate_deposit.go | 62 ++++++++++++++++++ .../grpc_query_simulate_place_limit_order.go | 64 +++++++++++++++++++ ...ry_simulate_withdraw_filled_limit_order.go | 41 ++++++++++++ .../keeper/grpc_query_simulate_withdrawal.go | 56 ++++++++++++++++ x/dex/keeper/withdraw_filled_limit_order.go | 29 +++++---- x/dex/types/keys.go | 3 + 9 files changed, 296 insertions(+), 24 deletions(-) create mode 100644 x/dex/keeper/grpc_query_simulate_cancel_limit_order.go create mode 100644 x/dex/keeper/grpc_query_simulate_deposit.go create mode 100644 x/dex/keeper/grpc_query_simulate_place_limit_order.go create mode 100644 x/dex/keeper/grpc_query_simulate_withdraw_filled_limit_order.go create mode 100644 x/dex/keeper/grpc_query_simulate_withdrawal.go diff --git a/x/dex/keeper/cancel_limit_order.go b/x/dex/keeper/cancel_limit_order.go index 9e50320bb..e59563aef 100644 --- a/x/dex/keeper/cancel_limit_order.go +++ b/x/dex/keeper/cancel_limit_order.go @@ -17,7 +17,7 @@ func (k Keeper) CancelLimitOrderCore( ) (takerCoinOut, makerCoinOut sdk.Coin, err error) { ctx := sdk.UnwrapSDKContext(goCtx) - makerCoinOut, takerCoinOut, tradePairID, err := k.ExecuteCancelLimitOrder(ctx, trancheKey, callerAddr) + makerCoinOut, takerCoinOut, err = k.ExecuteCancelLimitOrder(ctx, trancheKey, callerAddr) if err != nil { return sdk.Coin{}, sdk.Coin{}, err } @@ -33,14 +33,16 @@ func (k Keeper) CancelLimitOrderCore( return sdk.Coin{}, sdk.Coin{}, err } - // This will never panic since TradePairID has already been successfully constructed by ExecuteCancelLimitOrder - pairID := tradePairID.MustPairID() + makerDenom := makerCoinOut.Denom + takerDenom := takerCoinOut.Denom + // This will never panic since TradePairID has already been successfully constructed by ExecuteWithdrawFilledLimitOrder + pairID := types.MustNewPairID(makerDenom, takerDenom) ctx.EventManager().EmitEvent(types.CancelLimitOrderEvent( callerAddr, pairID.Token0, pairID.Token1, - tradePairID.MakerDenom, - tradePairID.TakerDenom, + makerDenom, + takerDenom, makerCoinOut.Amount, takerCoinOut.Amount, trancheKey, @@ -56,10 +58,10 @@ func (k Keeper) ExecuteCancelLimitOrder( ctx sdk.Context, trancheKey string, callerAddr sdk.AccAddress, -) (makerCoinOut, takerCoinOut sdk.Coin, tradePairID *types.TradePairID, error error) { +) (makerCoinOut, takerCoinOut sdk.Coin, error error) { trancheUser, found := k.GetLimitOrderTrancheUser(ctx, callerAddr.String(), trancheKey) if !found { - return sdk.Coin{}, sdk.Coin{}, nil, types.ErrActiveLimitOrderNotFound + return sdk.Coin{}, sdk.Coin{}, types.ErrActiveLimitOrderNotFound } tradePairID, tickIndex := trancheUser.TradePairId, trancheUser.TickIndexTakerToMaker @@ -72,7 +74,7 @@ func (k Keeper) ExecuteCancelLimitOrder( }, ) if tranche == nil { - return sdk.Coin{}, sdk.Coin{}, nil, types.ErrActiveLimitOrderNotFound + return sdk.Coin{}, sdk.Coin{}, types.ErrActiveLimitOrderNotFound } makerAmountToReturn := tranche.RemoveTokenIn(trancheUser) @@ -85,7 +87,7 @@ func (k Keeper) ExecuteCancelLimitOrder( tranche.TotalTakerDenom = tranche.TotalTakerDenom.Sub(takerAmountOut) if !makerAmountToReturn.IsPositive() && !takerAmountOut.IsPositive() { - return sdk.Coin{}, sdk.Coin{}, nil, sdkerrors.Wrapf(types.ErrCancelEmptyLimitOrder, "%s", tranche.Key.TrancheKey) + return sdk.Coin{}, sdk.Coin{}, sdkerrors.Wrapf(types.ErrCancelEmptyLimitOrder, "%s", tranche.Key.TrancheKey) } k.SaveTrancheUser(ctx, trancheUser) @@ -98,5 +100,5 @@ func (k Keeper) ExecuteCancelLimitOrder( makerCoinOut = sdk.NewCoin(tradePairID.MakerDenom, makerAmountToReturn) takerCoinOut = sdk.NewCoin(tradePairID.TakerDenom, takerAmountOut) - return makerCoinOut, takerCoinOut, tradePairID, nil + return makerCoinOut, takerCoinOut, nil } diff --git a/x/dex/keeper/grpc_query_estimate_multi_hop_swap.go b/x/dex/keeper/grpc_query_estimate_multi_hop_swap.go index eb133dce9..572388589 100644 --- a/x/dex/keeper/grpc_query_estimate_multi_hop_swap.go +++ b/x/dex/keeper/grpc_query_estimate_multi_hop_swap.go @@ -31,7 +31,7 @@ func (k Keeper) EstimateMultiHopSwap( callerAddr := sdk.MustAccAddressFromBech32(req.Creator) receiverAddr := sdk.MustAccAddressFromBech32(req.Receiver) - coinOut, err := k.MultiHopSwapCore( + coinOut, _, _, err := k.MultiHopSwapCore( cacheCtx, req.AmountIn, req.Routes, diff --git a/x/dex/keeper/grpc_query_simulate_cancel_limit_order.go b/x/dex/keeper/grpc_query_simulate_cancel_limit_order.go new file mode 100644 index 000000000..e015ab586 --- /dev/null +++ b/x/dex/keeper/grpc_query_simulate_cancel_limit_order.go @@ -0,0 +1,41 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +func (k Keeper) SimulateCancelLimitOrder( + goCtx context.Context, + req *types.QuerySimulateCancelLimitOrderRequest, +) (*types.QuerySimulateCancelLimitOrderResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + cacheCtx, _ := ctx.CacheContext() + + msg := req.Msg + msg.Creator = types.DummyAddress + + if err := msg.Validate(); err != nil { + return nil, err + } + + callerAddr := sdk.MustAccAddressFromBech32(msg.Creator) + takerCoinOut, makerCoinOut, err := k.ExecuteCancelLimitOrder( + cacheCtx, + msg.TrancheKey, + callerAddr, + ) + if err != nil { + return nil, err + } + + return &types.QuerySimulateCancelLimitOrderResponse{ + Resp: &types.MsgCancelLimitOrderResponse{ + TakerCoinOut: takerCoinOut, + MakerCoinOut: makerCoinOut, + }, + }, nil +} diff --git a/x/dex/keeper/grpc_query_simulate_deposit.go b/x/dex/keeper/grpc_query_simulate_deposit.go new file mode 100644 index 000000000..977cd1713 --- /dev/null +++ b/x/dex/keeper/grpc_query_simulate_deposit.go @@ -0,0 +1,62 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +func (k Keeper) SimulateDeposit( + goCtx context.Context, + req *types.QuerySimulateDepositRequest, +) (*types.QuerySimulateDepositResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + cacheCtx, _ := ctx.CacheContext() + + msg := req.Msg + msg.Creator = types.DummyAddress + msg.Receiver = types.DummyAddress + + if err := msg.Validate(); err != nil { + return nil, err + } + + callerAddr := sdk.MustAccAddressFromBech32(msg.Creator) + receiverAddr := sdk.MustAccAddressFromBech32(msg.Receiver) + pairID, err := types.NewPairIDFromUnsorted(msg.TokenA, msg.TokenB) + if err != nil { + return nil, err + } + + // sort amounts + amounts0, amounts1 := SortAmounts(msg.TokenA, pairID.Token0, msg.AmountsA, msg.AmountsB) + + tickIndexes := NormalizeAllTickIndexes(msg.TokenA, pairID.Token0, msg.TickIndexesAToB) + + reserve0Deposited, reserve1Deposited, _, _, sharesIssued, _, failedDeposits, err := k.ExecuteDeposit( + cacheCtx, + pairID, + callerAddr, + receiverAddr, + amounts0, + amounts1, + tickIndexes, + msg.Fees, + msg.Options, + ) + + if err != nil { + return nil, err + } + + return &types.QuerySimulateDepositResponse{ + Resp: &types.MsgDepositResponse{ + Reserve0Deposited: reserve0Deposited, + Reserve1Deposited: reserve1Deposited, + FailedDeposits: failedDeposits, + SharesIssued: sharesIssued, + }, + }, nil +} diff --git a/x/dex/keeper/grpc_query_simulate_place_limit_order.go b/x/dex/keeper/grpc_query_simulate_place_limit_order.go new file mode 100644 index 000000000..465f9528b --- /dev/null +++ b/x/dex/keeper/grpc_query_simulate_place_limit_order.go @@ -0,0 +1,64 @@ +package keeper + +import ( + "context" + + "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +func (k Keeper) SimulatePlaceLimitOrder( + goCtx context.Context, + req *types.QuerySimulatePlaceLimitOrderRequest, +) (*types.QuerySimulatePlaceLimitOrderResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + cacheCtx, _ := ctx.CacheContext() + + msg := req.Msg + msg.Creator = types.DummyAddress + msg.Receiver = types.DummyAddress + + if err := msg.Validate(); err != nil { + return nil, err + } + + err := msg.ValidateGoodTilExpiration(ctx.BlockTime()) + if err != nil { + return nil, err + } + + receiverAddr := sdk.MustAccAddressFromBech32(msg.Receiver) + takerTradePairID, err := types.NewTradePairID(msg.TokenIn, msg.TokenOut) + tickIndex := msg.TickIndexInToOut + if msg.LimitSellPrice != nil { + tickIndex, err = types.CalcTickIndexFromPrice(*msg.LimitSellPrice) + if err != nil { + return nil, errors.Wrapf(err, "invalid LimitSellPrice %s", msg.LimitSellPrice.String()) + } + } + trancheKey, totalIn, takerCoinIn, takerCoinOut, _, err := k.ExecutePlaceLimitOrder( + cacheCtx, + takerTradePairID, + msg.AmountIn, + tickIndex, + msg.OrderType, + msg.ExpirationTime, + msg.MaxAmountOut, + receiverAddr, + ) + if err != nil { + return nil, err + } + + coinIn := sdk.NewCoin(msg.TokenIn, totalIn) + return &types.QuerySimulatePlaceLimitOrderResponse{ + Resp: &types.MsgPlaceLimitOrderResponse{ + TrancheKey: trancheKey, + CoinIn: coinIn, + TakerCoinIn: takerCoinIn, + TakerCoinOut: takerCoinOut, + }, + }, nil +} diff --git a/x/dex/keeper/grpc_query_simulate_withdraw_filled_limit_order.go b/x/dex/keeper/grpc_query_simulate_withdraw_filled_limit_order.go new file mode 100644 index 000000000..aa3f6ebb0 --- /dev/null +++ b/x/dex/keeper/grpc_query_simulate_withdraw_filled_limit_order.go @@ -0,0 +1,41 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +func (k Keeper) SimulateWithdrawFilledLimitOrder( + goCtx context.Context, + req *types.QuerySimulateWithdrawFilledLimitOrderRequest, +) (*types.QuerySimulateWithdrawFilledLimitOrderResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + cacheCtx, _ := ctx.CacheContext() + + msg := req.Msg + msg.Creator = types.DummyAddress + + if err := msg.Validate(); err != nil { + return nil, err + } + + callerAddr := sdk.MustAccAddressFromBech32(msg.Creator) + takerCoinOut, makerCoinOut, err := k.ExecuteWithdrawFilledLimitOrder( + cacheCtx, + msg.TrancheKey, + callerAddr, + ) + if err != nil { + return nil, err + } + + return &types.QuerySimulateWithdrawFilledLimitOrderResponse{ + Resp: &types.MsgWithdrawFilledLimitOrderResponse{ + TakerCoinOut: takerCoinOut, + MakerCoinOut: makerCoinOut, + }, + }, nil +} diff --git a/x/dex/keeper/grpc_query_simulate_withdrawal.go b/x/dex/keeper/grpc_query_simulate_withdrawal.go new file mode 100644 index 000000000..28e13ce8d --- /dev/null +++ b/x/dex/keeper/grpc_query_simulate_withdrawal.go @@ -0,0 +1,56 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +func (k Keeper) SimulateWithdrawal( + goCtx context.Context, + req *types.QuerySimulateWithdrawalRequest, +) (*types.QuerySimulateWithdrawalResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + cacheCtx, _ := ctx.CacheContext() + + msg := req.Msg + msg.Creator = types.DummyAddress + msg.Receiver = types.DummyAddress + + if err := msg.Validate(); err != nil { + return nil, err + } + + callerAddr := sdk.MustAccAddressFromBech32(msg.Creator) + receiverAddr := sdk.MustAccAddressFromBech32(msg.Receiver) + pairID, err := types.NewPairIDFromUnsorted(msg.TokenA, msg.TokenB) + if err != nil { + return nil, err + } + + tickIndexes := NormalizeAllTickIndexes(msg.TokenA, pairID.Token0, msg.TickIndexesAToB) + + reserve0Withdrawn, reserve1Withdrawn, sharesBurned, _, err := k.ExecuteWithdraw( + cacheCtx, + pairID, + callerAddr, + receiverAddr, + msg.SharesToRemove, + tickIndexes, + msg.Fees, + ) + + if err != nil { + return nil, err + } + + return &types.QuerySimulateWithdrawalResponse{ + Resp: &types.MsgWithdrawalResponse{ + Reserve0Withdrawn: reserve0Withdrawn, + Reserve1Withdrawn: reserve1Withdrawn, + SharesBurned: sharesBurned, + }, + }, nil +} diff --git a/x/dex/keeper/withdraw_filled_limit_order.go b/x/dex/keeper/withdraw_filled_limit_order.go index 438c7f370..9eec09f18 100644 --- a/x/dex/keeper/withdraw_filled_limit_order.go +++ b/x/dex/keeper/withdraw_filled_limit_order.go @@ -18,13 +18,11 @@ func (k Keeper) WithdrawFilledLimitOrderCore( ) (takerCoinOut, makerCoinOut sdk.Coin, err error) { ctx := sdk.UnwrapSDKContext(goCtx) - amountOutTokenOut, remainingTokenIn, tradePairID, err := k.ExecuteWithdrawFilledLimitOrder(ctx, trancheKey, callerAddr) + takerCoinOut, makerCoinOut, err = k.ExecuteWithdrawFilledLimitOrder(ctx, trancheKey, callerAddr) if err != nil { return sdk.Coin{}, sdk.Coin{}, err } - takerCoinOut = sdk.NewCoin(tradePairID.TakerDenom, amountOutTokenOut) - makerCoinOut = sdk.NewCoin(tradePairID.MakerDenom, remainingTokenIn) // NOTE: it is possible for coinTakerDenomOut xor coinMakerDenomOut to be zero. These are removed by the sanitize call in sdk.NewCoins // ExecuteWithdrawFilledLimitOrder ensures that at least one of these has am amount > 0. coins := sdk.NewCoins(takerCoinOut, makerCoinOut) @@ -33,15 +31,17 @@ func (k Keeper) WithdrawFilledLimitOrderCore( return sdk.Coin{}, sdk.Coin{}, err } + makerDenom := makerCoinOut.Denom + takerDenom := takerCoinOut.Denom // This will never panic since TradePairID has already been successfully constructed by ExecuteWithdrawFilledLimitOrder - pairID := tradePairID.MustPairID() + pairID := types.MustNewPairID(makerDenom, takerDenom) ctx.EventManager().EmitEvent(types.WithdrawFilledLimitOrderEvent( callerAddr, pairID.Token0, pairID.Token1, - tradePairID.MakerDenom, - tradePairID.TakerDenom, - amountOutTokenOut, + makerDenom, + takerDenom, + takerCoinOut.Amount, trancheKey, )) @@ -55,14 +55,14 @@ func (k Keeper) ExecuteWithdrawFilledLimitOrder( ctx sdk.Context, trancheKey string, callerAddr sdk.AccAddress, -) (amountOutTokenOut, remainingTokenIn math.Int, tradePairID *types.TradePairID, err error) { +) (takerCoinOut, makerCoinOut sdk.Coin, err error) { trancheUser, found := k.GetLimitOrderTrancheUser( ctx, callerAddr.String(), trancheKey, ) if !found { - return math.ZeroInt(), math.ZeroInt(), nil, sdkerrors.Wrapf(types.ErrValidLimitOrderTrancheNotFound, "%s", trancheKey) + return makerCoinOut, takerCoinOut, sdkerrors.Wrapf(types.ErrValidLimitOrderTrancheNotFound, "%s", trancheKey) } tradePairID, tickIndex := trancheUser.TradePairId, trancheUser.TickIndexTakerToMaker @@ -76,8 +76,8 @@ func (k Keeper) ExecuteWithdrawFilledLimitOrder( }, ) - amountOutTokenOut = math.ZeroInt() - remainingTokenIn = math.ZeroInt() + amountOutTokenOut := math.ZeroInt() + remainingTokenIn := math.ZeroInt() // It's possible that a TrancheUser exists but tranche does not if LO was filled entirely through a swap if found { var amountOutTokenIn math.Int @@ -101,8 +101,11 @@ func (k Keeper) ExecuteWithdrawFilledLimitOrder( k.SaveTrancheUser(ctx, trancheUser) if !amountOutTokenOut.IsPositive() && !remainingTokenIn.IsPositive() { - return math.ZeroInt(), math.ZeroInt(), tradePairID, types.ErrWithdrawEmptyLimitOrder + return takerCoinOut, makerCoinOut, types.ErrWithdrawEmptyLimitOrder } - return amountOutTokenOut, remainingTokenIn, tradePairID, nil + makerCoinOut = sdk.NewCoin(tradePairID.MakerDenom, amountOutTokenOut) + takerCoinOut = sdk.NewCoin(tradePairID.TakerDenom, remainingTokenIn) + + return makerCoinOut, takerCoinOut, nil } diff --git a/x/dex/types/keys.go b/x/dex/types/keys.go index 8ac1cbb76..ed3509503 100644 --- a/x/dex/types/keys.go +++ b/x/dex/types/keys.go @@ -207,3 +207,6 @@ func JITGoodTilTime() time.Time { const ( ExpiringLimitOrderGas = 10_000 ) + +// Dummy Address used for simulate queries +const DummyAddress = "neutron1pq7j6za5zjcl3um9t5gfyleues336tv04tyq0k" From bce02c0beedacccca44c0fabbf15f782c0775d51 Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Tue, 27 Aug 2024 22:36:25 -0400 Subject: [PATCH 004/127] add tests --- x/dex/keeper/cancel_limit_order.go | 4 +- .../grpc_query_simulate_cancel_limit_order.go | 3 +- ..._query_simulate_cancel_limit_order_test.go | 49 ++++++++ .../grpc_query_simulate_deposit_test.go | 74 ++++++++++++ .../grpc_query_simulate_multi_hop_swap.go | 44 +++++++ ...grpc_query_simulate_multi_hop_swap_test.go | 107 ++++++++++++++++++ ...c_query_simulate_place_limit_order_test.go | 85 ++++++++++++++ ...ry_simulate_withdraw_filled_limit_order.go | 1 - ...mulate_withdraw_filled_limit_order_test.go | 49 ++++++++ .../keeper/grpc_query_simulate_withdrawal.go | 2 - .../grpc_query_simulate_withdrawal_test.go | 63 +++++++++++ x/dex/keeper/msg_server.go | 2 +- x/dex/keeper/withdraw_filled_limit_order.go | 6 +- 13 files changed, 478 insertions(+), 11 deletions(-) create mode 100644 x/dex/keeper/grpc_query_simulate_cancel_limit_order_test.go create mode 100644 x/dex/keeper/grpc_query_simulate_deposit_test.go create mode 100644 x/dex/keeper/grpc_query_simulate_multi_hop_swap.go create mode 100644 x/dex/keeper/grpc_query_simulate_multi_hop_swap_test.go create mode 100644 x/dex/keeper/grpc_query_simulate_place_limit_order_test.go create mode 100644 x/dex/keeper/grpc_query_simulate_withdraw_filled_limit_order_test.go create mode 100644 x/dex/keeper/grpc_query_simulate_withdrawal_test.go diff --git a/x/dex/keeper/cancel_limit_order.go b/x/dex/keeper/cancel_limit_order.go index e59563aef..4129deab5 100644 --- a/x/dex/keeper/cancel_limit_order.go +++ b/x/dex/keeper/cancel_limit_order.go @@ -14,7 +14,7 @@ func (k Keeper) CancelLimitOrderCore( goCtx context.Context, trancheKey string, callerAddr sdk.AccAddress, -) (takerCoinOut, makerCoinOut sdk.Coin, err error) { +) (makerCoinOut, takerCoinOut sdk.Coin, err error) { ctx := sdk.UnwrapSDKContext(goCtx) makerCoinOut, takerCoinOut, err = k.ExecuteCancelLimitOrder(ctx, trancheKey, callerAddr) @@ -48,7 +48,7 @@ func (k Keeper) CancelLimitOrderCore( trancheKey, )) - return takerCoinOut, makerCoinOut, nil + return makerCoinOut, takerCoinOut, nil } // ExecuteCancelLimitOrder handles the core logic for CancelLimitOrder -- removing remaining TokenIn from the diff --git a/x/dex/keeper/grpc_query_simulate_cancel_limit_order.go b/x/dex/keeper/grpc_query_simulate_cancel_limit_order.go index e015ab586..7b57464c5 100644 --- a/x/dex/keeper/grpc_query_simulate_cancel_limit_order.go +++ b/x/dex/keeper/grpc_query_simulate_cancel_limit_order.go @@ -16,14 +16,13 @@ func (k Keeper) SimulateCancelLimitOrder( cacheCtx, _ := ctx.CacheContext() msg := req.Msg - msg.Creator = types.DummyAddress if err := msg.Validate(); err != nil { return nil, err } callerAddr := sdk.MustAccAddressFromBech32(msg.Creator) - takerCoinOut, makerCoinOut, err := k.ExecuteCancelLimitOrder( + makerCoinOut, takerCoinOut, err := k.ExecuteCancelLimitOrder( cacheCtx, msg.TrancheKey, callerAddr, diff --git a/x/dex/keeper/grpc_query_simulate_cancel_limit_order_test.go b/x/dex/keeper/grpc_query_simulate_cancel_limit_order_test.go new file mode 100644 index 000000000..6de6211e3 --- /dev/null +++ b/x/dex/keeper/grpc_query_simulate_cancel_limit_order_test.go @@ -0,0 +1,49 @@ +package keeper_test + +import ( + "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +func (s *DexTestSuite) TestSimulateCancelLimitOrder() { + s.fundAliceBalances(50, 0) + s.fundBobBalances(0, 20) + + trancheKey := s.aliceLimitSells("TokenA", 0, 50) + + s.bobLimitSells("TokenB", -10, 20, types.LimitOrderType_FILL_OR_KILL) + + req := &types.QuerySimulateCancelLimitOrderRequest{ + Msg: &types.MsgCancelLimitOrder{ + Creator: s.alice.String(), + TrancheKey: trancheKey, + }} + + resp, err := s.App.DexKeeper.SimulateCancelLimitOrder(s.Ctx, req) + s.NoError(err) + + s.Equal(sdk.NewCoin("TokenB", math.NewInt(20_000_000)), resp.Resp.TakerCoinOut) + s.Equal(sdk.NewCoin("TokenA", math.NewInt(30_000_000)), resp.Resp.MakerCoinOut) + + s.assertDexBalances(30, 20) +} + +func (s *DexTestSuite) TestSimulateCancelLimitOrderFails() { + s.fundAliceBalances(50, 0) + s.fundBobBalances(0, 60) + + trancheKey := s.aliceLimitSells("TokenA", 0, 50) + + s.bobLimitSells("TokenB", -10, 60, types.LimitOrderType_IMMEDIATE_OR_CANCEL) + + req := &types.QuerySimulateCancelLimitOrderRequest{ + Msg: &types.MsgCancelLimitOrder{ + Creator: s.bob.String(), + TrancheKey: trancheKey, + }} + + resp, err := s.App.DexKeeper.SimulateCancelLimitOrder(s.Ctx, req) + s.ErrorIs(err, types.ErrActiveLimitOrderNotFound) + s.Nil(resp) +} diff --git a/x/dex/keeper/grpc_query_simulate_deposit_test.go b/x/dex/keeper/grpc_query_simulate_deposit_test.go new file mode 100644 index 000000000..1c2b91883 --- /dev/null +++ b/x/dex/keeper/grpc_query_simulate_deposit_test.go @@ -0,0 +1,74 @@ +package keeper_test + +import ( + "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +func (s *DexTestSuite) TestSimulateDeposit() { + req := &types.QuerySimulateDepositRequest{Msg: &types.MsgDeposit{ + TokenA: "TokenA", + TokenB: "TokenB", + AmountsA: []math.Int{math.OneInt(), math.OneInt()}, + AmountsB: []math.Int{math.ZeroInt(), math.ZeroInt()}, + TickIndexesAToB: []int64{0, 1}, + Fees: []uint64{1, 1}, + Options: []*types.DepositOptions{{}, {}}, + }, + } + resp, err := s.App.DexKeeper.SimulateDeposit(s.Ctx, req) + s.NoError(err) + s.Equal([]math.Int{math.OneInt(), math.OneInt()}, resp.Resp.Reserve0Deposited) + s.Equal([]math.Int{math.ZeroInt(), math.ZeroInt()}, resp.Resp.Reserve1Deposited) + + expectedShares := sdk.NewCoins( + sdk.NewCoin("neutron/pool/0", math.OneInt()), + sdk.NewCoin("neutron/pool/1", math.OneInt()), + ) + sharesIssued := sdk.NewCoins(resp.Resp.SharesIssued...) + s.True(sharesIssued.Equal(expectedShares)) + + s.assertDexBalances(0, 0) +} + +func (s *DexTestSuite) TestSimulateDepositPartialFailure() { + req := &types.QuerySimulateDepositRequest{Msg: &types.MsgDeposit{ + TokenA: "TokenA", + TokenB: "TokenB", + AmountsA: []math.Int{math.OneInt(), math.ZeroInt()}, + AmountsB: []math.Int{math.ZeroInt(), math.OneInt()}, + TickIndexesAToB: []int64{3, 0}, + Fees: []uint64{1, 1}, + Options: []*types.DepositOptions{{}, {}}, + }, + } + resp, err := s.App.DexKeeper.SimulateDeposit(s.Ctx, req) + s.NoError(err) + s.Equal(resp.Resp.Reserve0Deposited, []math.Int{math.OneInt(), math.ZeroInt()}) + s.Equal(resp.Resp.Reserve1Deposited, []math.Int{math.ZeroInt(), math.ZeroInt()}) + s.Equal(uint64(1), resp.Resp.FailedDeposits[0].DepositIdx) + s.Contains(resp.Resp.FailedDeposits[0].Error, types.ErrDepositBehindEnemyLines.Error()) + + expectedShares := sdk.NewCoins( + sdk.NewCoin("neutron/pool/0", math.OneInt()), + ) + sharesIssued := sdk.NewCoins(resp.Resp.SharesIssued...) + s.True(sharesIssued.Equal(expectedShares)) +} + +func (s *DexTestSuite) TestSimulateDepositFails() { + req := &types.QuerySimulateDepositRequest{Msg: &types.MsgDeposit{ + TokenA: "TokenA", + TokenB: "TokenB", + AmountsA: []math.Int{math.OneInt(), math.ZeroInt()}, + AmountsB: []math.Int{math.ZeroInt(), math.OneInt()}, + TickIndexesAToB: []int64{3, 0}, + Fees: []uint64{1, 1}, + Options: []*types.DepositOptions{{}, {FailTxOnBel: true}}, + }, + } + resp, err := s.App.DexKeeper.SimulateDeposit(s.Ctx, req) + s.Error(err, types.ErrDepositBehindEnemyLines) + s.Nil(resp) +} diff --git a/x/dex/keeper/grpc_query_simulate_multi_hop_swap.go b/x/dex/keeper/grpc_query_simulate_multi_hop_swap.go new file mode 100644 index 000000000..96cae324c --- /dev/null +++ b/x/dex/keeper/grpc_query_simulate_multi_hop_swap.go @@ -0,0 +1,44 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +func (k Keeper) SimulateMultiHopSwap( + goCtx context.Context, + req *types.QuerySimulateMultiHopSwapRequest, +) (*types.QuerySimulateMultiHopSwapResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + cacheCtx, _ := ctx.CacheContext() + + msg := req.Msg + msg.Creator = types.DummyAddress + msg.Receiver = types.DummyAddress + + if err := msg.Validate(); err != nil { + return nil, err + } + + bestRoute, _, err := k.CalulateMultiHopSwap( + cacheCtx, + msg.AmountIn, + msg.Routes, + msg.ExitLimitPrice, + msg.PickBestRoute, + ) + if err != nil { + return nil, err + } + + return &types.QuerySimulateMultiHopSwapResponse{ + Resp: &types.MsgMultiHopSwapResponse{ + CoinOut: bestRoute.coinOut, + Dust: bestRoute.dust, + Route: &types.MultiHopRoute{Hops: bestRoute.route}, + }, + }, nil +} diff --git a/x/dex/keeper/grpc_query_simulate_multi_hop_swap_test.go b/x/dex/keeper/grpc_query_simulate_multi_hop_swap_test.go new file mode 100644 index 000000000..359114a86 --- /dev/null +++ b/x/dex/keeper/grpc_query_simulate_multi_hop_swap_test.go @@ -0,0 +1,107 @@ +package keeper_test + +import ( + "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + math_utils "github.com/neutron-org/neutron/v4/utils/math" + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +func (s *DexTestSuite) TestSimulateMultiHopSwapSingleRoute() { + // GIVEN liquidity in pools A<>B, B<>C, C<>D, + s.SetupMultiplePools( + NewPoolSetup("TokenA", "TokenB", 0, 100, 0, 1), + NewPoolSetup("TokenB", "TokenC", 0, 100, 0, 1), + NewPoolSetup("TokenC", "TokenD", 0, 100, 0, 1), + ) + + // WHEN alice multihopswaps A<>B => B<>C => C<>D, + route := &types.MultiHopRoute{Hops: []string{"TokenA", "TokenB", "TokenC", "TokenD"}} + req := &types.QuerySimulateMultiHopSwapRequest{ + Msg: &types.MsgMultiHopSwap{ + Routes: []*types.MultiHopRoute{route}, + AmountIn: math.NewInt(100_000_000), + ExitLimitPrice: math_utils.MustNewPrecDecFromStr("0.9"), + PickBestRoute: false, + }, + } + resp, err := s.App.DexKeeper.SimulateMultiHopSwap(s.Ctx, req) + s.NoError(err) + + // THEN alice would get out ~99 BIGTokenD + expectedOutCoin := sdk.NewCoin("TokenD", math.NewInt(99970003)) + s.Assert().True(resp.Resp.CoinOut.Equal(expectedOutCoin)) + s.Assert().Equal(route, resp.Resp.Route) + dust := sdk.NewCoins(resp.Resp.Dust...) + expectedDust := sdk.NewCoin("TokenA", math.OneInt()) + s.Assert().True(dust.Equal(sdk.NewCoins(expectedDust))) + + // Nothing changes on the dex + s.assertDexBalanceWithDenom("TokenA", 0) + s.assertDexBalanceWithDenom("TokenB", 100) + s.assertDexBalanceWithDenom("TokenC", 100) + s.assertDexBalanceWithDenom("TokenD", 100) +} + +func (s *DexTestSuite) TestSimulateMultiHopSwapMultiRoute() { + // GIVEN liquidity in pools A<>B, B<>C, C<>D, + s.SetupMultiplePools( + NewPoolSetup("TokenA", "TokenB", 0, 100, 0, 1), + NewPoolSetup("TokenB", "TokenC", 0, 100, 0, 1), + NewPoolSetup("TokenC", "TokenD", 0, 100, 0, 1), + NewPoolSetup("TokenB", "TokenD", 0, 150, -1000, 1), + ) + + // WHEN alice multihopswaps A<>B => B<>C => C<>D, + route1 := &types.MultiHopRoute{Hops: []string{"TokenA", "TokenB", "TokenC", "TokenD"}} + route2 := &types.MultiHopRoute{Hops: []string{"TokenA", "TokenB", "TokenD"}} + req := &types.QuerySimulateMultiHopSwapRequest{ + Msg: &types.MsgMultiHopSwap{ + Routes: []*types.MultiHopRoute{route1, route2}, + AmountIn: math.NewInt(100_000_000), + ExitLimitPrice: math_utils.MustNewPrecDecFromStr("0.9"), + PickBestRoute: true, + }, + } + resp, err := s.App.DexKeeper.SimulateMultiHopSwap(s.Ctx, req) + s.NoError(err) + + // THEN alice would get out ~110 BIGTokenD + expectedOutCoin := sdk.NewCoin("TokenD", math.NewInt(110494438)) + s.Assert().True(resp.Resp.CoinOut.Equal(expectedOutCoin)) + s.Assert().Equal(route2, resp.Resp.Route) + dust := sdk.NewCoins(resp.Resp.Dust...) + expectedDust := sdk.NewCoin("TokenA", math.OneInt()) + s.Assert().True(dust.Equal(sdk.NewCoins(expectedDust))) + + // Nothing changes on the dex + s.assertDexBalanceWithDenom("TokenA", 0) + s.assertDexBalanceWithDenom("TokenB", 100) + s.assertDexBalanceWithDenom("TokenC", 100) + s.assertDexBalanceWithDenom("TokenD", 250) +} + +func (s *DexTestSuite) TestSimulateMultiHopSwapFails() { + // GIVEN liquidity in pools A<>B, B<>C, C<>D, + s.SetupMultiplePools( + NewPoolSetup("TokenA", "TokenB", 0, 100, 0, 1), + NewPoolSetup("TokenB", "TokenC", 0, 100, 0, 1), + NewPoolSetup("TokenC", "TokenD", 0, 100, 0, 1), + ) + + // WHEN alice multihopswaps A<>B => B<>C => C<>D with a high limit price, + route := &types.MultiHopRoute{Hops: []string{"TokenA", "TokenB", "TokenC", "TokenD"}} + req := &types.QuerySimulateMultiHopSwapRequest{ + Msg: &types.MsgMultiHopSwap{ + Routes: []*types.MultiHopRoute{route}, + AmountIn: math.NewInt(100_000_000), + ExitLimitPrice: math_utils.MustNewPrecDecFromStr("2"), + PickBestRoute: false, + }, + } + // THEN her request fails + resp, err := s.App.DexKeeper.SimulateMultiHopSwap(s.Ctx, req) + s.Error(err, types.ErrLimitPriceNotSatisfied) + s.Nil(resp) +} diff --git a/x/dex/keeper/grpc_query_simulate_place_limit_order_test.go b/x/dex/keeper/grpc_query_simulate_place_limit_order_test.go new file mode 100644 index 000000000..080ee9bed --- /dev/null +++ b/x/dex/keeper/grpc_query_simulate_place_limit_order_test.go @@ -0,0 +1,85 @@ +package keeper_test + +import ( + "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + math_utils "github.com/neutron-org/neutron/v4/utils/math" + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +func (s *DexTestSuite) TestSimulatePlaceLimitOrderWithTick() { + s.SetupMultiplePools( + NewPoolSetup("TokenA", "TokenB", 0, 100, 0, 1), + ) + + req := &types.QuerySimulatePlaceLimitOrderRequest{ + Msg: &types.MsgPlaceLimitOrder{ + TokenIn: "TokenA", + TokenOut: "TokenB", + TickIndexInToOut: 5, + AmountIn: math.NewInt(20_000_000), + OrderType: types.LimitOrderType_FILL_OR_KILL, + }, + } + + resp, err := s.App.DexKeeper.SimulatePlaceLimitOrder(s.Ctx, req) + s.NoError(err) + + s.Equal(sdk.NewCoin("TokenA", math.NewInt(20_000_000)), resp.Resp.CoinIn) + s.Equal(sdk.NewCoin("TokenA", math.NewInt(20_000_000)), resp.Resp.TakerCoinIn) + s.Equal(sdk.NewCoin("TokenB", math.NewInt(19_998_000)), resp.Resp.TakerCoinOut) + + s.assertDexBalances(0, 100) +} + +func (s *DexTestSuite) TestSimulatePlaceLimitOrderWithPrice() { + s.SetupMultiplePools( + NewPoolSetup("TokenA", "TokenB", 0, 10, 0, 1), + NewPoolSetup("TokenA", "TokenB", 0, 10, 100, 1), + ) + + price := math_utils.MustNewPrecDecFromStr("0.995") + + req := &types.QuerySimulatePlaceLimitOrderRequest{ + Msg: &types.MsgPlaceLimitOrder{ + TokenIn: "TokenA", + TokenOut: "TokenB", + LimitSellPrice: &price, + AmountIn: math.NewInt(20_000_000), + OrderType: types.LimitOrderType_GOOD_TIL_CANCELLED, + }, + } + + resp, err := s.App.DexKeeper.SimulatePlaceLimitOrder(s.Ctx, req) + s.NoError(err) + + s.Equal(sdk.NewCoin("TokenA", math.NewInt(20_000_000)), resp.Resp.CoinIn) + s.Equal(sdk.NewCoin("TokenA", math.NewInt(10_001_000)), resp.Resp.TakerCoinIn) + s.Equal(sdk.NewCoin("TokenB", math.NewInt(10_000_000)), resp.Resp.TakerCoinOut) + + s.assertDexBalances(0, 20) +} + +func (s *DexTestSuite) TestSimulatePlaceLimitOrderFails() { + s.SetupMultiplePools( + NewPoolSetup("TokenA", "TokenB", 0, 100, 0, 1), + ) + + price := math_utils.MustNewPrecDecFromStr("1.1") + + req := &types.QuerySimulatePlaceLimitOrderRequest{ + Msg: &types.MsgPlaceLimitOrder{ + TokenIn: "TokenA", + TokenOut: "TokenB", + LimitSellPrice: &price, + AmountIn: math.NewInt(20_000_000), + OrderType: types.LimitOrderType_FILL_OR_KILL, + }, + } + + resp, err := s.App.DexKeeper.SimulatePlaceLimitOrder(s.Ctx, req) + s.ErrorIs(err, types.ErrFoKLimitOrderNotFilled) + s.Nil(resp) + + s.assertDexBalances(0, 100) +} diff --git a/x/dex/keeper/grpc_query_simulate_withdraw_filled_limit_order.go b/x/dex/keeper/grpc_query_simulate_withdraw_filled_limit_order.go index aa3f6ebb0..466374205 100644 --- a/x/dex/keeper/grpc_query_simulate_withdraw_filled_limit_order.go +++ b/x/dex/keeper/grpc_query_simulate_withdraw_filled_limit_order.go @@ -16,7 +16,6 @@ func (k Keeper) SimulateWithdrawFilledLimitOrder( cacheCtx, _ := ctx.CacheContext() msg := req.Msg - msg.Creator = types.DummyAddress if err := msg.Validate(); err != nil { return nil, err diff --git a/x/dex/keeper/grpc_query_simulate_withdraw_filled_limit_order_test.go b/x/dex/keeper/grpc_query_simulate_withdraw_filled_limit_order_test.go new file mode 100644 index 000000000..93bbb85c4 --- /dev/null +++ b/x/dex/keeper/grpc_query_simulate_withdraw_filled_limit_order_test.go @@ -0,0 +1,49 @@ +package keeper_test + +import ( + "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +func (s *DexTestSuite) TestSimulateWithdrawFilledLimitOrder() { + s.fundAliceBalances(50, 0) + s.fundBobBalances(0, 20) + + trancheKey := s.aliceLimitSells("TokenA", 0, 50) + + s.bobLimitSells("TokenB", -10, 20, types.LimitOrderType_FILL_OR_KILL) + + req := &types.QuerySimulateWithdrawFilledLimitOrderRequest{ + Msg: &types.MsgWithdrawFilledLimitOrder{ + Creator: s.alice.String(), + TrancheKey: trancheKey, + }} + + resp, err := s.App.DexKeeper.SimulateWithdrawFilledLimitOrder(s.Ctx, req) + s.NoError(err) + + s.Equal(sdk.NewCoin("TokenB", math.NewInt(20_000_000)), resp.Resp.TakerCoinOut) + s.Equal(sdk.NewCoin("TokenA", math.ZeroInt()), resp.Resp.MakerCoinOut) + + s.assertDexBalances(30, 20) +} + +func (s *DexTestSuite) TestSimulateWithdrawFilledLimitOrderFails() { + s.fundAliceBalances(50, 0) + s.fundBobBalances(0, 20) + + trancheKey := s.aliceLimitSells("TokenA", 0, 50) + + s.bobLimitSells("TokenB", -10, 20, types.LimitOrderType_FILL_OR_KILL) + + req := &types.QuerySimulateWithdrawFilledLimitOrderRequest{ + Msg: &types.MsgWithdrawFilledLimitOrder{ + Creator: s.bob.String(), + TrancheKey: trancheKey, + }} + + resp, err := s.App.DexKeeper.SimulateWithdrawFilledLimitOrder(s.Ctx, req) + s.ErrorIs(err, types.ErrValidLimitOrderTrancheNotFound) + s.Nil(resp) +} diff --git a/x/dex/keeper/grpc_query_simulate_withdrawal.go b/x/dex/keeper/grpc_query_simulate_withdrawal.go index 28e13ce8d..1ea32faae 100644 --- a/x/dex/keeper/grpc_query_simulate_withdrawal.go +++ b/x/dex/keeper/grpc_query_simulate_withdrawal.go @@ -16,8 +16,6 @@ func (k Keeper) SimulateWithdrawal( cacheCtx, _ := ctx.CacheContext() msg := req.Msg - msg.Creator = types.DummyAddress - msg.Receiver = types.DummyAddress if err := msg.Validate(); err != nil { return nil, err diff --git a/x/dex/keeper/grpc_query_simulate_withdrawal_test.go b/x/dex/keeper/grpc_query_simulate_withdrawal_test.go new file mode 100644 index 000000000..60ba71aac --- /dev/null +++ b/x/dex/keeper/grpc_query_simulate_withdrawal_test.go @@ -0,0 +1,63 @@ +package keeper_test + +import ( + "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +func (s *DexTestSuite) TestSimulateWithdrawal() { + s.fundAliceBalances(20, 0) + + s.aliceDeposits(NewDeposit(10, 0, 0, 1), NewDeposit(10, 0, 1, 1)) + + req := &types.QuerySimulateWithdrawalRequest{ + Msg: &types.MsgWithdrawal{ + Creator: s.alice.String(), + Receiver: s.alice.String(), + TokenA: "TokenA", + TokenB: "TokenB", + SharesToRemove: []math.Int{math.NewInt(5), math.NewInt(9)}, + TickIndexesAToB: []int64{0, 1}, + Fees: []uint64{1, 1}, + }, + } + resp, err := s.App.DexKeeper.SimulateWithdrawal(s.Ctx, req) + s.NoError(err) + + s.Equal(math.NewInt(14), resp.Resp.Reserve0Withdrawn) + s.Equal(math.ZeroInt(), resp.Resp.Reserve1Withdrawn) + + expectedSharesBurned := sdk.NewCoins( + sdk.NewCoin("neutron/pool/0", math.NewInt(5)), + sdk.NewCoin("neutron/pool/1", math.NewInt(9)), + ) + sharesBurned := sdk.NewCoins(resp.Resp.SharesBurned...) + s.True(sharesBurned.Equal(expectedSharesBurned)) + + // Dex Balances Unchanged + + s.assertDexBalances(20, 0) +} + +func (s *DexTestSuite) TestSimulateWithdrawalFails() { + s.fundAliceBalances(20, 0) + + s.aliceDeposits(NewDeposit(10, 0, 0, 1), NewDeposit(10, 0, 1, 1)) + + req := &types.QuerySimulateWithdrawalRequest{ + Msg: &types.MsgWithdrawal{ + Creator: s.alice.String(), + Receiver: s.alice.String(), + TokenA: "TokenA", + TokenB: "TokenB", + SharesToRemove: []math.Int{math.NewInt(5), math.NewInt(200_000_000)}, + TickIndexesAToB: []int64{0, 1}, + Fees: []uint64{1, 1}, + }, + } + resp, err := s.App.DexKeeper.SimulateWithdrawal(s.Ctx, req) + s.Error(err, types.ErrInsufficientShares) + s.Nil(resp) + +} diff --git a/x/dex/keeper/msg_server.go b/x/dex/keeper/msg_server.go index 390948bb3..20ee76cc4 100644 --- a/x/dex/keeper/msg_server.go +++ b/x/dex/keeper/msg_server.go @@ -208,7 +208,7 @@ func (k MsgServer) CancelLimitOrder( callerAddr := sdk.MustAccAddressFromBech32(msg.Creator) - takerCoinOut, makerCoinOut, err := k.CancelLimitOrderCore( + makerCoinOut, takerCoinOut, err := k.CancelLimitOrderCore( goCtx, msg.TrancheKey, callerAddr, diff --git a/x/dex/keeper/withdraw_filled_limit_order.go b/x/dex/keeper/withdraw_filled_limit_order.go index 9eec09f18..01f93fd35 100644 --- a/x/dex/keeper/withdraw_filled_limit_order.go +++ b/x/dex/keeper/withdraw_filled_limit_order.go @@ -104,8 +104,8 @@ func (k Keeper) ExecuteWithdrawFilledLimitOrder( return takerCoinOut, makerCoinOut, types.ErrWithdrawEmptyLimitOrder } - makerCoinOut = sdk.NewCoin(tradePairID.MakerDenom, amountOutTokenOut) - takerCoinOut = sdk.NewCoin(tradePairID.TakerDenom, remainingTokenIn) + takerCoinOut = sdk.NewCoin(tradePairID.TakerDenom, amountOutTokenOut) + makerCoinOut = sdk.NewCoin(tradePairID.MakerDenom, remainingTokenIn) - return makerCoinOut, takerCoinOut, nil + return takerCoinOut, makerCoinOut, nil } From f0fe2f9adfd5ff6c092d50c6a30adb4efab8a590 Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Tue, 27 Aug 2024 22:42:47 -0400 Subject: [PATCH 005/127] fmt --- proto/neutron/dex/query.proto | 8 +- proto/neutron/dex/tx.proto | 104 +++++++++--------- ..._query_simulate_cancel_limit_order_test.go | 7 +- x/dex/keeper/grpc_query_simulate_deposit.go | 2 +- .../grpc_query_simulate_deposit_test.go | 58 +++++----- .../grpc_query_simulate_place_limit_order.go | 3 + ...c_query_simulate_place_limit_order_test.go | 1 + ...mulate_withdraw_filled_limit_order_test.go | 7 +- .../keeper/grpc_query_simulate_withdrawal.go | 1 - .../grpc_query_simulate_withdrawal_test.go | 2 +- 10 files changed, 101 insertions(+), 92 deletions(-) diff --git a/proto/neutron/dex/query.proto b/proto/neutron/dex/query.proto index bf236a617..24fe04205 100644 --- a/proto/neutron/dex/query.proto +++ b/proto/neutron/dex/query.proto @@ -420,22 +420,20 @@ message QuerySimulateDepositResponse { MsgDepositResponse resp = 1; } - message QuerySimulateWithdrawalRequest { MsgWithdrawal msg = 1; } message QuerySimulateWithdrawalResponse { - MsgWithdrawalResponse resp =1; + MsgWithdrawalResponse resp = 1; } - message QuerySimulatePlaceLimitOrderRequest { - MsgPlaceLimitOrder msg =1; + MsgPlaceLimitOrder msg = 1; } message QuerySimulatePlaceLimitOrderResponse { - MsgPlaceLimitOrderResponse resp =1; + MsgPlaceLimitOrderResponse resp = 1; } message QuerySimulateWithdrawFilledLimitOrderRequest { diff --git a/proto/neutron/dex/tx.proto b/proto/neutron/dex/tx.proto index baefc4c1d..9d4dfe8df 100644 --- a/proto/neutron/dex/tx.proto +++ b/proto/neutron/dex/tx.proto @@ -76,11 +76,11 @@ message MsgDepositResponse { ]; repeated FailedDeposit failed_deposits = 3; repeated cosmos.base.v1beta1.Coin shares_issued = 4 [ - (gogoproto.moretags) = "yaml:\"shares_issued\"", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.nullable) = false, - (gogoproto.jsontag) = "shares_issued" - ]; + (gogoproto.moretags) = "yaml:\"shares_issued\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "shares_issued" + ]; } message MsgWithdrawal { @@ -102,24 +102,24 @@ message MsgWithdrawal { } message MsgWithdrawalResponse { -string reserve0_withdrawn = 1 [ - (gogoproto.moretags) = "yaml:\"reserve0_withdrawn\"", - (gogoproto.customtype) = "cosmossdk.io/math.Int", - (gogoproto.nullable) = false, - (gogoproto.jsontag) = "reserve0_deposited" - ]; + string reserve0_withdrawn = 1 [ + (gogoproto.moretags) = "yaml:\"reserve0_withdrawn\"", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "reserve0_deposited" + ]; string reserve1_withdrawn = 2 [ - (gogoproto.moretags) = "yaml:\"reserve1_withdrawn\"", - (gogoproto.customtype) = "cosmossdk.io/math.Int", - (gogoproto.nullable) = false, - (gogoproto.jsontag) = "reserve1_deposited" - ]; + (gogoproto.moretags) = "yaml:\"reserve1_withdrawn\"", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "reserve1_deposited" + ]; repeated cosmos.base.v1beta1.Coin shares_burned = 3 [ - (gogoproto.moretags) = "yaml:\"shares_burned\"", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.nullable) = false, - (gogoproto.jsontag) = "shares_issued" - ]; + (gogoproto.moretags) = "yaml:\"shares_burned\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "shares_issued" + ]; } enum LimitOrderType { @@ -189,11 +189,11 @@ message MsgPlaceLimitOrderResponse { // Total amount of the token in that was immediately swapped for takerOutCoin cosmos.base.v1beta1.Coin taker_coin_in = 4 [ - (gogoproto.moretags) = "yaml:\"taker_coin_in\"", - (gogoproto.nullable) = false, - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.jsontag) = "taker_coin_in" - ]; + (gogoproto.moretags) = "yaml:\"taker_coin_in\"", + (gogoproto.nullable) = false, + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.jsontag) = "taker_coin_in" + ]; } message MsgWithdrawFilledLimitOrder { @@ -207,19 +207,18 @@ message MsgWithdrawFilledLimitOrder { message MsgWithdrawFilledLimitOrderResponse { // Total amount of taker reserves that were withdrawn cosmos.base.v1beta1.Coin taker_coin_out = 1 [ - (gogoproto.moretags) = "yaml:\"taker_coin_out\"", - (gogoproto.nullable) = false, - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.jsontag) = "taker_coin_out" - ]; + (gogoproto.moretags) = "yaml:\"taker_coin_out\"", + (gogoproto.nullable) = false, + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.jsontag) = "taker_coin_out" + ]; // Total amount of maker reserves that were withdrawn --only applies to inactive LimitOrders cosmos.base.v1beta1.Coin maker_coin_out = 2 [ - (gogoproto.moretags) = "yaml:\"maker_coin_out\"", - (gogoproto.nullable) = false, - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.jsontag) = "maker_coin_out" - ]; - + (gogoproto.moretags) = "yaml:\"maker_coin_out\"", + (gogoproto.nullable) = false, + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.jsontag) = "maker_coin_out" + ]; } message MsgCancelLimitOrder { @@ -233,18 +232,18 @@ message MsgCancelLimitOrder { message MsgCancelLimitOrderResponse { // Total amount of taker reserves that were withdrawn cosmos.base.v1beta1.Coin taker_coin_out = 1 [ - (gogoproto.moretags) = "yaml:\"taker_coin_out\"", - (gogoproto.nullable) = false, - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.jsontag) = "taker_coin_out" - ]; + (gogoproto.moretags) = "yaml:\"taker_coin_out\"", + (gogoproto.nullable) = false, + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.jsontag) = "taker_coin_out" + ]; // Total amount of maker reserves that were canceled cosmos.base.v1beta1.Coin maker_coin_out = 2 [ - (gogoproto.moretags) = "yaml:\"maker_coin_out\"", - (gogoproto.nullable) = false, - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.jsontag) = "maker_coin_out" - ]; + (gogoproto.moretags) = "yaml:\"maker_coin_out\"", + (gogoproto.nullable) = false, + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.jsontag) = "maker_coin_out" + ]; } message MultiHopRoute { @@ -284,12 +283,11 @@ message MsgMultiHopSwapResponse { ]; MultiHopRoute route = 2; repeated cosmos.base.v1beta1.Coin dust = 3 [ - (gogoproto.moretags) = "yaml:\"dust\"", - (gogoproto.nullable) = false, - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.jsontag) = "dust" - ]; - + (gogoproto.moretags) = "yaml:\"dust\"", + (gogoproto.nullable) = false, + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.jsontag) = "dust" + ]; } message MsgUpdateParams { diff --git a/x/dex/keeper/grpc_query_simulate_cancel_limit_order_test.go b/x/dex/keeper/grpc_query_simulate_cancel_limit_order_test.go index 6de6211e3..c7144b9c1 100644 --- a/x/dex/keeper/grpc_query_simulate_cancel_limit_order_test.go +++ b/x/dex/keeper/grpc_query_simulate_cancel_limit_order_test.go @@ -3,6 +3,7 @@ package keeper_test import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/neutron-org/neutron/v4/x/dex/types" ) @@ -18,7 +19,8 @@ func (s *DexTestSuite) TestSimulateCancelLimitOrder() { Msg: &types.MsgCancelLimitOrder{ Creator: s.alice.String(), TrancheKey: trancheKey, - }} + }, + } resp, err := s.App.DexKeeper.SimulateCancelLimitOrder(s.Ctx, req) s.NoError(err) @@ -41,7 +43,8 @@ func (s *DexTestSuite) TestSimulateCancelLimitOrderFails() { Msg: &types.MsgCancelLimitOrder{ Creator: s.bob.String(), TrancheKey: trancheKey, - }} + }, + } resp, err := s.App.DexKeeper.SimulateCancelLimitOrder(s.Ctx, req) s.ErrorIs(err, types.ErrActiveLimitOrderNotFound) diff --git a/x/dex/keeper/grpc_query_simulate_deposit.go b/x/dex/keeper/grpc_query_simulate_deposit.go index 977cd1713..d1f6ca489 100644 --- a/x/dex/keeper/grpc_query_simulate_deposit.go +++ b/x/dex/keeper/grpc_query_simulate_deposit.go @@ -35,6 +35,7 @@ func (k Keeper) SimulateDeposit( tickIndexes := NormalizeAllTickIndexes(msg.TokenA, pairID.Token0, msg.TickIndexesAToB) + //nolint:dogsled reserve0Deposited, reserve1Deposited, _, _, sharesIssued, _, failedDeposits, err := k.ExecuteDeposit( cacheCtx, pairID, @@ -46,7 +47,6 @@ func (k Keeper) SimulateDeposit( msg.Fees, msg.Options, ) - if err != nil { return nil, err } diff --git a/x/dex/keeper/grpc_query_simulate_deposit_test.go b/x/dex/keeper/grpc_query_simulate_deposit_test.go index 1c2b91883..807b15e30 100644 --- a/x/dex/keeper/grpc_query_simulate_deposit_test.go +++ b/x/dex/keeper/grpc_query_simulate_deposit_test.go @@ -3,19 +3,21 @@ package keeper_test import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/neutron-org/neutron/v4/x/dex/types" ) func (s *DexTestSuite) TestSimulateDeposit() { - req := &types.QuerySimulateDepositRequest{Msg: &types.MsgDeposit{ - TokenA: "TokenA", - TokenB: "TokenB", - AmountsA: []math.Int{math.OneInt(), math.OneInt()}, - AmountsB: []math.Int{math.ZeroInt(), math.ZeroInt()}, - TickIndexesAToB: []int64{0, 1}, - Fees: []uint64{1, 1}, - Options: []*types.DepositOptions{{}, {}}, - }, + req := &types.QuerySimulateDepositRequest{ + Msg: &types.MsgDeposit{ + TokenA: "TokenA", + TokenB: "TokenB", + AmountsA: []math.Int{math.OneInt(), math.OneInt()}, + AmountsB: []math.Int{math.ZeroInt(), math.ZeroInt()}, + TickIndexesAToB: []int64{0, 1}, + Fees: []uint64{1, 1}, + Options: []*types.DepositOptions{{}, {}}, + }, } resp, err := s.App.DexKeeper.SimulateDeposit(s.Ctx, req) s.NoError(err) @@ -33,15 +35,16 @@ func (s *DexTestSuite) TestSimulateDeposit() { } func (s *DexTestSuite) TestSimulateDepositPartialFailure() { - req := &types.QuerySimulateDepositRequest{Msg: &types.MsgDeposit{ - TokenA: "TokenA", - TokenB: "TokenB", - AmountsA: []math.Int{math.OneInt(), math.ZeroInt()}, - AmountsB: []math.Int{math.ZeroInt(), math.OneInt()}, - TickIndexesAToB: []int64{3, 0}, - Fees: []uint64{1, 1}, - Options: []*types.DepositOptions{{}, {}}, - }, + req := &types.QuerySimulateDepositRequest{ + Msg: &types.MsgDeposit{ + TokenA: "TokenA", + TokenB: "TokenB", + AmountsA: []math.Int{math.OneInt(), math.ZeroInt()}, + AmountsB: []math.Int{math.ZeroInt(), math.OneInt()}, + TickIndexesAToB: []int64{3, 0}, + Fees: []uint64{1, 1}, + Options: []*types.DepositOptions{{}, {}}, + }, } resp, err := s.App.DexKeeper.SimulateDeposit(s.Ctx, req) s.NoError(err) @@ -58,15 +61,16 @@ func (s *DexTestSuite) TestSimulateDepositPartialFailure() { } func (s *DexTestSuite) TestSimulateDepositFails() { - req := &types.QuerySimulateDepositRequest{Msg: &types.MsgDeposit{ - TokenA: "TokenA", - TokenB: "TokenB", - AmountsA: []math.Int{math.OneInt(), math.ZeroInt()}, - AmountsB: []math.Int{math.ZeroInt(), math.OneInt()}, - TickIndexesAToB: []int64{3, 0}, - Fees: []uint64{1, 1}, - Options: []*types.DepositOptions{{}, {FailTxOnBel: true}}, - }, + req := &types.QuerySimulateDepositRequest{ + Msg: &types.MsgDeposit{ + TokenA: "TokenA", + TokenB: "TokenB", + AmountsA: []math.Int{math.OneInt(), math.ZeroInt()}, + AmountsB: []math.Int{math.ZeroInt(), math.OneInt()}, + TickIndexesAToB: []int64{3, 0}, + Fees: []uint64{1, 1}, + Options: []*types.DepositOptions{{}, {FailTxOnBel: true}}, + }, } resp, err := s.App.DexKeeper.SimulateDeposit(s.Ctx, req) s.Error(err, types.ErrDepositBehindEnemyLines) diff --git a/x/dex/keeper/grpc_query_simulate_place_limit_order.go b/x/dex/keeper/grpc_query_simulate_place_limit_order.go index 465f9528b..259fcdc95 100644 --- a/x/dex/keeper/grpc_query_simulate_place_limit_order.go +++ b/x/dex/keeper/grpc_query_simulate_place_limit_order.go @@ -31,6 +31,9 @@ func (k Keeper) SimulatePlaceLimitOrder( receiverAddr := sdk.MustAccAddressFromBech32(msg.Receiver) takerTradePairID, err := types.NewTradePairID(msg.TokenIn, msg.TokenOut) + if err != nil { + return nil, err + } tickIndex := msg.TickIndexInToOut if msg.LimitSellPrice != nil { tickIndex, err = types.CalcTickIndexFromPrice(*msg.LimitSellPrice) diff --git a/x/dex/keeper/grpc_query_simulate_place_limit_order_test.go b/x/dex/keeper/grpc_query_simulate_place_limit_order_test.go index 080ee9bed..502117de0 100644 --- a/x/dex/keeper/grpc_query_simulate_place_limit_order_test.go +++ b/x/dex/keeper/grpc_query_simulate_place_limit_order_test.go @@ -3,6 +3,7 @@ package keeper_test import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" + math_utils "github.com/neutron-org/neutron/v4/utils/math" "github.com/neutron-org/neutron/v4/x/dex/types" ) diff --git a/x/dex/keeper/grpc_query_simulate_withdraw_filled_limit_order_test.go b/x/dex/keeper/grpc_query_simulate_withdraw_filled_limit_order_test.go index 93bbb85c4..0539a3712 100644 --- a/x/dex/keeper/grpc_query_simulate_withdraw_filled_limit_order_test.go +++ b/x/dex/keeper/grpc_query_simulate_withdraw_filled_limit_order_test.go @@ -3,6 +3,7 @@ package keeper_test import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/neutron-org/neutron/v4/x/dex/types" ) @@ -18,7 +19,8 @@ func (s *DexTestSuite) TestSimulateWithdrawFilledLimitOrder() { Msg: &types.MsgWithdrawFilledLimitOrder{ Creator: s.alice.String(), TrancheKey: trancheKey, - }} + }, + } resp, err := s.App.DexKeeper.SimulateWithdrawFilledLimitOrder(s.Ctx, req) s.NoError(err) @@ -41,7 +43,8 @@ func (s *DexTestSuite) TestSimulateWithdrawFilledLimitOrderFails() { Msg: &types.MsgWithdrawFilledLimitOrder{ Creator: s.bob.String(), TrancheKey: trancheKey, - }} + }, + } resp, err := s.App.DexKeeper.SimulateWithdrawFilledLimitOrder(s.Ctx, req) s.ErrorIs(err, types.ErrValidLimitOrderTrancheNotFound) diff --git a/x/dex/keeper/grpc_query_simulate_withdrawal.go b/x/dex/keeper/grpc_query_simulate_withdrawal.go index 1ea32faae..d0bcbfdf7 100644 --- a/x/dex/keeper/grpc_query_simulate_withdrawal.go +++ b/x/dex/keeper/grpc_query_simulate_withdrawal.go @@ -39,7 +39,6 @@ func (k Keeper) SimulateWithdrawal( tickIndexes, msg.Fees, ) - if err != nil { return nil, err } diff --git a/x/dex/keeper/grpc_query_simulate_withdrawal_test.go b/x/dex/keeper/grpc_query_simulate_withdrawal_test.go index 60ba71aac..b80ed74f0 100644 --- a/x/dex/keeper/grpc_query_simulate_withdrawal_test.go +++ b/x/dex/keeper/grpc_query_simulate_withdrawal_test.go @@ -3,6 +3,7 @@ package keeper_test import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/neutron-org/neutron/v4/x/dex/types" ) @@ -59,5 +60,4 @@ func (s *DexTestSuite) TestSimulateWithdrawalFails() { resp, err := s.App.DexKeeper.SimulateWithdrawal(s.Ctx, req) s.Error(err, types.ErrInsufficientShares) s.Nil(resp) - } From 5f2ee897e1aeabf0b23c7240b67caf6ccc10d216 Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Mon, 2 Sep 2024 16:50:42 -0400 Subject: [PATCH 006/127] add wasm bindings --- wasmbinding/bindings/query.go | 12 ++++++++ wasmbinding/queries.go | 12 ++++++++ x/dex/types/wasm.go | 54 +++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+) diff --git a/wasmbinding/bindings/query.go b/wasmbinding/bindings/query.go index 88615da60..5cbbc7f27 100644 --- a/wasmbinding/bindings/query.go +++ b/wasmbinding/bindings/query.go @@ -273,6 +273,18 @@ type DexQuery struct { PoolMetadata *dextypes.QueryGetPoolMetadataRequest `json:"pool_metadata"` // Queries a list of PoolMetadata items. PoolMetadataAll *dextypes.QueryAllPoolMetadataRequest `json:"pool_metadata_all"` + /// Simulates MsgDeposit + SimulateDeposit *dextypes.QuerySimulateDepositRequest `json:"simulate_deposit"` + /// Simulates MsgWithdrawal + SimulateWithdrawal *dextypes.QuerySimulateWithdrawalRequest `json:"simulate_withdrawal"` + /// Simulates MsgPlaceLimitOrder + SimulatePlaceLimitOrder *dextypes.QuerySimulatePlaceLimitOrderRequest `json:"simulate_place_limit_order"` + /// Simulates MsgWithdrawFilledLimitOrder + SimulateWithdrawFilledLimitOrder *dextypes.QuerySimulateWithdrawFilledLimitOrderRequest `json:"simulate_withdraw_filled_limit_order"` + /// Simulates MsgCancelLimitOrder + SimulateCancelLimitOrder *dextypes.QuerySimulateCancelLimitOrderRequest `json:"simulate_cancel_limit_order"` + /// Simulates MsgMultiHopSwap + SimulateMultiHopSwap *dextypes.QuerySimulateMultiHopSwapRequest `json:"simulate_multi_hop_swap"` } // QueryEstimatePlaceLimitOrderRequest is a copy dextypes.QueryEstimatePlaceLimitOrderRequest with altered ExpirationTime field, diff --git a/wasmbinding/queries.go b/wasmbinding/queries.go index 39b602658..774d38f25 100644 --- a/wasmbinding/queries.go +++ b/wasmbinding/queries.go @@ -201,6 +201,18 @@ func (qp *QueryPlugin) DexQuery(ctx sdk.Context, query bindings.DexQuery) (data data, err = dexQuery(ctx, query.TickLiquidityAll, qp.dexKeeper.TickLiquidityAll) case query.UserDepositsAll != nil: data, err = dexQuery(ctx, query.UserDepositsAll, qp.dexKeeper.UserDepositsAll) + case query.SimulateDeposit != nil: + data, err = dexQuery(ctx, query.SimulateDeposit, qp.dexKeeper.SimulateDeposit) + case query.SimulateWithdrawal != nil: + data, err = dexQuery(ctx, query.SimulateWithdrawal, qp.dexKeeper.SimulateWithdrawal) + case query.SimulatePlaceLimitOrder != nil: + data, err = dexQuery(ctx, query.SimulatePlaceLimitOrder, qp.dexKeeper.SimulatePlaceLimitOrder) + case query.SimulateWithdrawFilledLimitOrder != nil: + data, err = dexQuery(ctx, query.SimulateWithdrawFilledLimitOrder, qp.dexKeeper.SimulateWithdrawFilledLimitOrder) + case query.SimulateCancelLimitOrder != nil: + data, err = dexQuery(ctx, query.SimulateCancelLimitOrder, qp.dexKeeper.SimulateCancelLimitOrder) + case query.SimulateMultiHopSwap != nil: + data, err = dexQuery(ctx, query.SimulateMultiHopSwap, qp.dexKeeper.SimulateMultiHopSwap) default: return nil, wasmvmtypes.UnsupportedRequest{Kind: "unknown neutron.dex query type"} diff --git a/x/dex/types/wasm.go b/x/dex/types/wasm.go index 3b35d87be..6688d94b2 100644 --- a/x/dex/types/wasm.go +++ b/x/dex/types/wasm.go @@ -203,3 +203,57 @@ func (t *QueryAllLimitOrderTrancheUserByAddressResponse) MarshalBinding() ([]byt } return json.Marshal(&allLimitOrders) } + +func (t *QuerySimulateDepositRequest) MarshalBinding() ([]byte, error) { + type QuerySimulateDepositRequestBinding struct { + Msg *MsgDeposit `json:"msg,omitempty"` + } + + metadata := QuerySimulateDepositRequestBinding(*t) + return json.Marshal(&metadata) +} + +func (t *QuerySimulateWithdrawalRequest) MarshalBinding() ([]byte, error) { + type QuerySimulateWithdrawalRequestBinding struct { + Msg *MsgWithdrawal `json:"msg,omitempty"` + } + + metadata := QuerySimulateWithdrawalRequestBinding(*t) + return json.Marshal(&metadata) +} + +func (t *QuerySimulatePlaceLimitOrderRequest) MarshalBinding() ([]byte, error) { + type QuerySimulatePlaceLimitOrderRequestBinding struct { + Msg *MsgPlaceLimitOrder `json:"msg,omitempty"` + } + + metadata := QuerySimulatePlaceLimitOrderRequestBinding(*t) + return json.Marshal(&metadata) +} + +func (t *QuerySimulateWithdrawFilledLimitOrderRequest) MarshalBinding() ([]byte, error) { + type QuerySimulateWithdrawFilledLimitOrderRequestBinding struct { + Msg *MsgWithdrawFilledLimitOrder `json:"msg,omitempty"` + } + + metadata := QuerySimulateWithdrawFilledLimitOrderRequestBinding(*t) + return json.Marshal(&metadata) +} + +func (t *QuerySimulateCancelLimitOrderRequest) MarshalBinding() ([]byte, error) { + type QuerySimulateCancelLimitOrderRequestBinding struct { + Msg *MsgCancelLimitOrder `json:"msg,omitempty"` + } + + metadata := QuerySimulateCancelLimitOrderRequestBinding(*t) + return json.Marshal(&metadata) +} + +func (t *QuerySimulateMultiHopSwapRequest) MarshalBinding() ([]byte, error) { + type QuerySimulateMultiHopSwapRequestBinding struct { + Msg *MsgMultiHopSwap `json:"msg,omitempty"` + } + + metadata := QuerySimulateMultiHopSwapRequestBinding(*t) + return json.Marshal(&metadata) +} From a26a10a6d9984a154d259e2c66005b2fe4a86899 Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Mon, 2 Sep 2024 16:51:58 -0400 Subject: [PATCH 007/127] fix proto tags --- proto/neutron/dex/tx.proto | 6 +- x/dex/types/tx.pb.go | 237 +++++++++++++++++++------------------ 2 files changed, 122 insertions(+), 121 deletions(-) diff --git a/proto/neutron/dex/tx.proto b/proto/neutron/dex/tx.proto index 9d4dfe8df..8dfc03156 100644 --- a/proto/neutron/dex/tx.proto +++ b/proto/neutron/dex/tx.proto @@ -106,19 +106,19 @@ message MsgWithdrawalResponse { (gogoproto.moretags) = "yaml:\"reserve0_withdrawn\"", (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false, - (gogoproto.jsontag) = "reserve0_deposited" + (gogoproto.jsontag) = "reserve0_withdrawn" ]; string reserve1_withdrawn = 2 [ (gogoproto.moretags) = "yaml:\"reserve1_withdrawn\"", (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false, - (gogoproto.jsontag) = "reserve1_deposited" + (gogoproto.jsontag) = "reserve1_withdrawn" ]; repeated cosmos.base.v1beta1.Coin shares_burned = 3 [ (gogoproto.moretags) = "yaml:\"shares_burned\"", (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", (gogoproto.nullable) = false, - (gogoproto.jsontag) = "shares_issued" + (gogoproto.jsontag) = "shares_burned" ]; } diff --git a/x/dex/types/tx.pb.go b/x/dex/types/tx.pb.go index 470f8b908..7d3ee51f3 100644 --- a/x/dex/types/tx.pb.go +++ b/x/dex/types/tx.pb.go @@ -404,9 +404,9 @@ func (m *MsgWithdrawal) GetFees() []uint64 { } type MsgWithdrawalResponse struct { - Reserve0Withdrawn cosmossdk_io_math.Int `protobuf:"bytes,1,opt,name=reserve0_withdrawn,json=reserve0Withdrawn,proto3,customtype=cosmossdk.io/math.Int" json:"reserve0_deposited" yaml:"reserve0_withdrawn"` - Reserve1Withdrawn cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=reserve1_withdrawn,json=reserve1Withdrawn,proto3,customtype=cosmossdk.io/math.Int" json:"reserve1_deposited" yaml:"reserve1_withdrawn"` - SharesBurned []github_com_cosmos_cosmos_sdk_types.Coin `protobuf:"bytes,3,rep,name=shares_burned,json=sharesBurned,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Coin" json:"shares_issued" yaml:"shares_burned"` + Reserve0Withdrawn cosmossdk_io_math.Int `protobuf:"bytes,1,opt,name=reserve0_withdrawn,json=reserve0Withdrawn,proto3,customtype=cosmossdk.io/math.Int" json:"reserve0_withdrawn" yaml:"reserve0_withdrawn"` + Reserve1Withdrawn cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=reserve1_withdrawn,json=reserve1Withdrawn,proto3,customtype=cosmossdk.io/math.Int" json:"reserve1_withdrawn" yaml:"reserve1_withdrawn"` + SharesBurned []github_com_cosmos_cosmos_sdk_types.Coin `protobuf:"bytes,3,rep,name=shares_burned,json=sharesBurned,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Coin" json:"shares_burned" yaml:"shares_burned"` } func (m *MsgWithdrawalResponse) Reset() { *m = MsgWithdrawalResponse{} } @@ -1057,125 +1057,126 @@ func init() { func init() { proto.RegisterFile("neutron/dex/tx.proto", fileDescriptor_a489f6e187d5e074) } var fileDescriptor_a489f6e187d5e074 = []byte{ - // 1885 bytes of a gzipped FileDescriptorProto + // 1896 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcb, 0x6f, 0x23, 0x49, 0x19, 0x4f, 0xdb, 0x4e, 0x62, 0x57, 0x12, 0xc7, 0xd3, 0xc9, 0x6c, 0x3a, 0x1e, 0x94, 0xb6, 0x7a, - 0x56, 0x3b, 0x66, 0xc4, 0xd8, 0x93, 0x61, 0xd9, 0x43, 0x0e, 0x48, 0x71, 0x1e, 0xbb, 0x66, 0xed, - 0x49, 0xd4, 0xe3, 0x15, 0x68, 0x57, 0xa2, 0x69, 0xbb, 0x2b, 0x4e, 0x29, 0xdd, 0x5d, 0x56, 0x57, + 0x56, 0x3b, 0x66, 0xc4, 0xd8, 0xe3, 0x61, 0xd9, 0x43, 0x0e, 0x48, 0x71, 0x1e, 0xbb, 0x66, 0xed, + 0x49, 0xd4, 0xe3, 0x15, 0x68, 0x57, 0xa2, 0x69, 0xbb, 0x2b, 0x4e, 0x2b, 0xdd, 0x5d, 0x56, 0x57, 0x39, 0xe3, 0x70, 0x61, 0x85, 0x38, 0xed, 0x69, 0x2f, 0x08, 0x24, 0xfe, 0x01, 0xb8, 0xcd, 0x61, 0xcf, 0x9c, 0x87, 0x13, 0x2b, 0x24, 0x24, 0xe0, 0x60, 0x60, 0xe6, 0x30, 0xd2, 0x1e, 0x73, 0x80, - 0x0b, 0x07, 0x54, 0x0f, 0xf7, 0x2b, 0xaf, 0xc9, 0x12, 0x46, 0x1c, 0xb8, 0x4c, 0xaa, 0xbe, 0xef, - 0xab, 0xaf, 0x7e, 0xf5, 0xbd, 0xdd, 0x03, 0x96, 0x7d, 0x38, 0xa4, 0x01, 0xf6, 0xeb, 0x0e, 0x1c, - 0xd5, 0xe9, 0xa8, 0x36, 0x08, 0x30, 0xc5, 0xea, 0x9c, 0xa4, 0xd6, 0x1c, 0x38, 0x2a, 0xdf, 0xb2, - 0x3d, 0xe4, 0xe3, 0x3a, 0xff, 0x57, 0xf0, 0xcb, 0x6b, 0x3d, 0x4c, 0x3c, 0x4c, 0xea, 0x5d, 0x9b, - 0xc0, 0xfa, 0xf1, 0x7a, 0x17, 0x52, 0x7b, 0xbd, 0xde, 0xc3, 0xc8, 0x97, 0xfc, 0x15, 0xc9, 0xf7, - 0x48, 0xbf, 0x7e, 0xbc, 0xce, 0xfe, 0x48, 0xc6, 0xaa, 0x60, 0x58, 0x7c, 0x57, 0x17, 0x1b, 0xc9, - 0x5a, 0xee, 0xe3, 0x3e, 0x16, 0x74, 0xb6, 0x92, 0x54, 0xbd, 0x8f, 0x71, 0xdf, 0x85, 0x75, 0xbe, - 0xeb, 0x0e, 0x0f, 0xea, 0x14, 0x79, 0x90, 0x50, 0xdb, 0x1b, 0x48, 0x01, 0x2d, 0xfe, 0x80, 0x81, - 0x1d, 0xd8, 0x9e, 0x54, 0x68, 0xfc, 0x08, 0x14, 0xb7, 0xe1, 0x00, 0x13, 0x44, 0xf7, 0x06, 0x14, - 0x61, 0x9f, 0xa8, 0xdf, 0x04, 0x25, 0x07, 0x11, 0xbb, 0xeb, 0x42, 0xcb, 0x1e, 0x52, 0x4c, 0x9e, - 0xda, 0x03, 0x4d, 0xa9, 0x28, 0xd5, 0xbc, 0xb9, 0x28, 0xe9, 0x9b, 0x92, 0xac, 0xde, 0x05, 0xc5, - 0x03, 0x1b, 0xb9, 0x16, 0x1d, 0x59, 0xd8, 0xb7, 0xba, 0xd0, 0xd5, 0x32, 0x5c, 0x70, 0x8e, 0x51, - 0x3b, 0xa3, 0x3d, 0xbf, 0x01, 0x5d, 0xe3, 0x79, 0x16, 0x80, 0x36, 0xe9, 0xcb, 0x5b, 0x54, 0x0d, - 0xcc, 0xf6, 0x02, 0x68, 0x53, 0x1c, 0x70, 0xad, 0x05, 0x73, 0xb2, 0x55, 0xcb, 0x20, 0x1f, 0xc0, - 0x1e, 0x44, 0xc7, 0x30, 0xe0, 0x7a, 0x0a, 0x66, 0xb8, 0x57, 0x57, 0xc0, 0x2c, 0xc5, 0x47, 0xd0, - 0xb7, 0x6c, 0x2d, 0xcb, 0x59, 0x33, 0x7c, 0xbb, 0x19, 0x31, 0xba, 0x5a, 0x2e, 0xc6, 0x68, 0xa8, - 0x9f, 0x80, 0x82, 0xed, 0xe1, 0xa1, 0x4f, 0x89, 0x65, 0x6b, 0xd3, 0x95, 0x6c, 0xb5, 0xd0, 0xf8, - 0xee, 0xf3, 0xb1, 0x3e, 0xf5, 0x97, 0xb1, 0x7e, 0x5b, 0x98, 0x94, 0x38, 0x47, 0x35, 0x84, 0xeb, - 0x9e, 0x4d, 0x0f, 0x6b, 0x4d, 0x9f, 0x7e, 0x35, 0xd6, 0xa3, 0x13, 0xa7, 0x63, 0xbd, 0x74, 0x62, - 0x7b, 0xee, 0x86, 0x11, 0x92, 0x0c, 0x33, 0x2f, 0xd7, 0x9b, 0x71, 0xe5, 0x5d, 0x6d, 0xe6, 0x9a, - 0xca, 0xbb, 0x67, 0x95, 0x77, 0x23, 0xe5, 0x0d, 0xf5, 0x5b, 0x60, 0x89, 0xa2, 0xde, 0x91, 0x85, - 0x7c, 0x07, 0x8e, 0x20, 0xb1, 0x6c, 0x8b, 0x62, 0xab, 0xab, 0xcd, 0x56, 0xb2, 0xd5, 0xac, 0xb9, - 0xc8, 0x58, 0x4d, 0xc1, 0xd9, 0xec, 0xe0, 0x86, 0xaa, 0x82, 0xdc, 0x01, 0x84, 0x44, 0xcb, 0x57, - 0xb2, 0xd5, 0x9c, 0xc9, 0xd7, 0xea, 0x77, 0xc0, 0x2c, 0x16, 0xde, 0xd4, 0x0a, 0x95, 0x6c, 0x75, - 0xee, 0xd1, 0x9d, 0x5a, 0x2c, 0x56, 0x6b, 0x49, 0x87, 0x9b, 0x13, 0xd9, 0x0d, 0xfd, 0xa7, 0xaf, - 0x9e, 0xdd, 0x9f, 0xb8, 0xe3, 0xb3, 0x57, 0xcf, 0xee, 0x17, 0x59, 0xb8, 0x44, 0xbe, 0x33, 0x76, - 0xc1, 0xc2, 0xae, 0x8d, 0x5c, 0xe8, 0x4c, 0x9c, 0xa9, 0x83, 0x39, 0x47, 0x2c, 0x2d, 0xe4, 0x8c, - 0xb8, 0x43, 0x73, 0x26, 0x90, 0xa4, 0xa6, 0x33, 0x52, 0x97, 0xc1, 0x34, 0x0c, 0x02, 0x3c, 0x71, - 0xa8, 0xd8, 0x18, 0xff, 0xc8, 0x02, 0x35, 0x52, 0x6b, 0x42, 0x32, 0xc0, 0x3e, 0x81, 0xea, 0x4f, - 0x80, 0x1a, 0x40, 0x02, 0x83, 0x63, 0xf8, 0xd0, 0x92, 0x3a, 0xa0, 0xa3, 0x29, 0xdc, 0xbc, 0xfb, - 0x57, 0x99, 0xf7, 0x9c, 0xa3, 0xa7, 0x63, 0x7d, 0x55, 0xd8, 0xf9, 0x2c, 0xcf, 0x30, 0x6f, 0x4d, - 0x88, 0xdb, 0x13, 0x5a, 0x0c, 0xc0, 0x7a, 0x0c, 0x40, 0xe6, 0x7a, 0x00, 0xd6, 0x2f, 0x01, 0xb0, - 0x7e, 0x1e, 0x80, 0xf5, 0x08, 0xc0, 0x16, 0x58, 0x3c, 0xe0, 0x06, 0x9e, 0xc8, 0x11, 0x2d, 0xcb, - 0x1d, 0x58, 0x4e, 0x38, 0x30, 0xe1, 0x04, 0xb3, 0x78, 0x10, 0xdf, 0x12, 0xf5, 0x97, 0x0a, 0x58, - 0x20, 0x87, 0x76, 0x00, 0x89, 0x85, 0x08, 0x19, 0x42, 0x47, 0xcb, 0x71, 0x1d, 0xab, 0x35, 0x59, - 0x4a, 0x58, 0x41, 0xaa, 0xc9, 0x82, 0x54, 0xdb, 0xc2, 0xc8, 0x6f, 0xfc, 0x40, 0x3e, 0xee, 0x5e, - 0x1f, 0xd1, 0xc3, 0x61, 0xb7, 0xd6, 0xc3, 0x9e, 0xac, 0x3b, 0xf2, 0xcf, 0x03, 0xe2, 0x1c, 0xd5, - 0xe9, 0xc9, 0x00, 0x12, 0x7e, 0xe0, 0xab, 0xb1, 0x9e, 0xbc, 0xe2, 0x74, 0xac, 0x2f, 0x8b, 0x97, - 0x26, 0xc8, 0x86, 0x39, 0x2f, 0xf6, 0x4d, 0xb1, 0xfd, 0x63, 0x06, 0x2c, 0xb4, 0x49, 0xff, 0xfb, - 0x88, 0x1e, 0x3a, 0x81, 0xfd, 0xd4, 0x76, 0xdf, 0x58, 0x39, 0x38, 0x06, 0x25, 0x89, 0x8c, 0x62, - 0x2b, 0x80, 0x1e, 0x3e, 0x86, 0xb2, 0x2a, 0xb4, 0xae, 0x72, 0xec, 0x99, 0x83, 0xa7, 0x63, 0x7d, - 0x25, 0xf1, 0xd8, 0x90, 0x63, 0x98, 0x45, 0x41, 0xea, 0x60, 0x93, 0x13, 0x2e, 0x4a, 0xe6, 0x99, - 0xcb, 0x93, 0x79, 0x36, 0x4a, 0xe6, 0x0d, 0x23, 0x9d, 0x95, 0xb7, 0x64, 0x56, 0x46, 0x56, 0x34, - 0xbe, 0xc8, 0x82, 0xdb, 0x09, 0xca, 0xb9, 0x39, 0xf5, 0x54, 0xb2, 0x7d, 0x61, 0xea, 0x9b, 0xca, - 0xa9, 0x50, 0x6d, 0x2c, 0xa7, 0x26, 0x48, 0xfc, 0x44, 0x4e, 0x45, 0x00, 0x32, 0xd7, 0x03, 0x70, - 0x79, 0x4e, 0x9d, 0x03, 0x60, 0x3d, 0x02, 0x10, 0x4b, 0x87, 0xee, 0x30, 0xf0, 0xa1, 0x23, 0x53, - 0xea, 0x8d, 0xa6, 0x83, 0xb8, 0x39, 0x4c, 0x87, 0x86, 0xd8, 0xfe, 0x7e, 0x9a, 0xd7, 0xc1, 0x7d, - 0xd7, 0xee, 0xc1, 0x16, 0xf2, 0x10, 0xdd, 0x0b, 0x1c, 0x18, 0x7c, 0xcd, 0x9c, 0x58, 0x05, 0x79, - 0x11, 0xfa, 0xc8, 0x97, 0x49, 0x21, 0x52, 0xa1, 0xe9, 0xab, 0x77, 0x40, 0x41, 0xb0, 0xf0, 0x90, - 0xca, 0xbc, 0x10, 0xb2, 0x7b, 0x43, 0xaa, 0x3e, 0x02, 0xcb, 0x51, 0x84, 0x5a, 0xc8, 0x67, 0x01, - 0xca, 0xe4, 0xa6, 0x2b, 0x4a, 0x35, 0xdb, 0xc8, 0x68, 0x8a, 0x59, 0x0a, 0xc3, 0xb4, 0xe9, 0x77, - 0x30, 0x3b, 0x13, 0xf6, 0x3f, 0x76, 0xd9, 0x2c, 0xf7, 0xe5, 0xeb, 0xf6, 0x3f, 0x0b, 0xf9, 0xe9, - 0xfe, 0x67, 0x21, 0x3f, 0xec, 0x7f, 0x4d, 0x5f, 0xdd, 0x00, 0x00, 0x33, 0x3b, 0x58, 0xcc, 0xc0, - 0x5a, 0xbe, 0xa2, 0x54, 0x8b, 0xa9, 0x06, 0x16, 0xd9, 0xaa, 0x73, 0x32, 0x80, 0x66, 0x01, 0x4f, - 0x96, 0x6a, 0x1b, 0x2c, 0xc2, 0xd1, 0x00, 0x05, 0x36, 0xeb, 0x68, 0x16, 0x1b, 0x83, 0xb4, 0x42, - 0x45, 0xe1, 0x05, 0x54, 0xcc, 0x48, 0xb5, 0xc9, 0x8c, 0x54, 0xeb, 0x4c, 0x66, 0xa4, 0x46, 0xfe, - 0xf9, 0x58, 0x57, 0x3e, 0xff, 0xab, 0xae, 0x98, 0xc5, 0xe8, 0x30, 0x63, 0xab, 0x3e, 0x28, 0x7a, - 0xf6, 0xc8, 0x92, 0x30, 0x99, 0x55, 0x00, 0x7f, 0xec, 0x07, 0xec, 0xc4, 0x65, 0x8f, 0x4d, 0x1d, - 0x3b, 0x1d, 0xeb, 0xb7, 0xc5, 0x8b, 0x93, 0x74, 0xc3, 0x9c, 0xf7, 0xec, 0xd1, 0x26, 0xdf, 0x33, - 0xbb, 0xfe, 0x5c, 0x01, 0x25, 0x97, 0x3d, 0xce, 0x22, 0xd0, 0x75, 0xad, 0x41, 0x80, 0x7a, 0x50, - 0x9b, 0xe3, 0x57, 0x1e, 0xc9, 0x2b, 0xdf, 0x8d, 0xc5, 0xa4, 0xb4, 0xc9, 0x03, 0x1c, 0xf4, 0x27, - 0xeb, 0xfa, 0xf1, 0xbb, 0xf5, 0x21, 0x45, 0x2e, 0x11, 0x68, 0xf6, 0x03, 0xd8, 0xdb, 0x86, 0x3d, - 0x56, 0xc5, 0xd2, 0x7a, 0xa3, 0x2a, 0x96, 0xe6, 0x18, 0x66, 0x91, 0x93, 0x9e, 0x40, 0xd7, 0xdd, - 0x67, 0x84, 0x8d, 0x7b, 0xe9, 0x1a, 0xf4, 0x96, 0xac, 0x41, 0xa9, 0xd0, 0x35, 0xfe, 0x99, 0x05, - 0xe5, 0xb3, 0xe4, 0xb0, 0x1a, 0xad, 0x01, 0x40, 0x03, 0xdb, 0xef, 0x1d, 0xc2, 0x0f, 0xe1, 0x89, - 0x0c, 0xee, 0x18, 0x45, 0xfd, 0x54, 0x01, 0xb3, 0x6c, 0x42, 0x66, 0x61, 0x95, 0xe1, 0x7e, 0xbb, - 0x24, 0x4b, 0x5b, 0xd7, 0xcf, 0xd2, 0x89, 0xf2, 0xd3, 0xb1, 0x5e, 0x14, 0x6f, 0x97, 0x04, 0xc3, - 0x9c, 0x61, 0xab, 0xa6, 0xaf, 0xfe, 0x4a, 0x01, 0x45, 0x6a, 0x1f, 0xc1, 0xc0, 0xe2, 0x2c, 0xe6, - 0xf3, 0xec, 0x55, 0x48, 0x3e, 0xbe, 0x3e, 0x92, 0xd4, 0x1d, 0x51, 0x80, 0x24, 0xe9, 0x86, 0x39, - 0xcf, 0x09, 0xec, 0x14, 0x0b, 0x90, 0x5f, 0x28, 0x60, 0x21, 0x26, 0x81, 0x7c, 0x9e, 0xce, 0x37, - 0x5e, 0xcc, 0x12, 0x57, 0x44, 0xc5, 0x2c, 0x41, 0x36, 0xcc, 0xb9, 0x10, 0x5a, 0xd3, 0x37, 0x3e, - 0x53, 0xc0, 0x9d, 0x58, 0x0b, 0xda, 0x45, 0xae, 0x0b, 0x9d, 0xd7, 0x2a, 0x6a, 0x3a, 0x98, 0x93, - 0x21, 0x60, 0x1d, 0xc1, 0x13, 0x59, 0xd7, 0x62, 0x51, 0xb1, 0xf1, 0x30, 0x1d, 0x7d, 0x7a, 0xaa, - 0x03, 0xa6, 0x2f, 0x33, 0xfe, 0x9e, 0x01, 0x77, 0x2f, 0xe1, 0x87, 0xf1, 0x78, 0x8e, 0xb3, 0x95, - 0xff, 0x1d, 0x67, 0x33, 0x74, 0x5e, 0x12, 0x5d, 0xe6, 0xbf, 0x81, 0xce, 0xbb, 0x00, 0x9d, 0x97, - 0x46, 0xe7, 0xc5, 0xd0, 0x19, 0x3f, 0x06, 0x4b, 0x6d, 0xd2, 0xdf, 0xb2, 0xfd, 0x1e, 0x74, 0x6f, - 0xc6, 0xcf, 0xd5, 0xb4, 0x9f, 0x57, 0xa4, 0x9f, 0xd3, 0x97, 0x18, 0x7f, 0xce, 0xf0, 0x60, 0x4b, - 0xd3, 0xff, 0xef, 0xd7, 0x1b, 0xf0, 0xeb, 0x5d, 0xb0, 0xd0, 0x1e, 0xba, 0x14, 0x7d, 0x80, 0x07, - 0x26, 0x1e, 0x52, 0xc8, 0x86, 0xd2, 0x43, 0x3c, 0x20, 0xe2, 0x87, 0x98, 0xc9, 0xd7, 0xc6, 0x6f, - 0xb3, 0x60, 0xb1, 0x4d, 0xfa, 0x13, 0xc1, 0x27, 0x4f, 0xed, 0xc1, 0xd7, 0x1c, 0x5b, 0x1e, 0x81, - 0x99, 0x80, 0x5d, 0x73, 0xfe, 0x2f, 0x9d, 0x04, 0x12, 0x53, 0x4a, 0x26, 0xc7, 0x8f, 0xdc, 0x0d, - 0x8f, 0x1f, 0xac, 0x07, 0xc3, 0x11, 0xa2, 0x96, 0x68, 0x8b, 0xa2, 0x07, 0x4f, 0x87, 0x3d, 0x78, - 0xea, 0x3f, 0xe9, 0xc1, 0x69, 0xbd, 0x51, 0x0f, 0x4e, 0x73, 0x0c, 0x36, 0x8b, 0x20, 0xca, 0x63, - 0x9b, 0xf7, 0x60, 0xf5, 0x1d, 0xb0, 0x38, 0x60, 0x73, 0x5a, 0x17, 0x12, 0x6a, 0x71, 0x43, 0x68, - 0x33, 0xfc, 0x6b, 0xcb, 0x02, 0x23, 0x37, 0x20, 0xa1, 0xdc, 0x48, 0x1b, 0x6f, 0xa7, 0xb3, 0x68, - 0x49, 0x66, 0x51, 0xdc, 0x59, 0xc6, 0xef, 0x32, 0x60, 0x25, 0x45, 0x0b, 0xb3, 0xe7, 0x67, 0x0a, - 0xc8, 0xbf, 0x7e, 0xde, 0x3c, 0xbe, 0x7e, 0x64, 0xe6, 0x63, 0x31, 0xb9, 0x18, 0xeb, 0xc3, 0x3c, - 0x1a, 0x79, 0x8f, 0x66, 0x69, 0xf2, 0x10, 0x4c, 0x8b, 0x67, 0x66, 0xe4, 0x04, 0x77, 0x71, 0x60, - 0x08, 0x41, 0x75, 0x08, 0x72, 0xce, 0x90, 0xd0, 0xab, 0x07, 0xfc, 0xdd, 0xeb, 0x63, 0xe6, 0x9a, - 0x4f, 0xc7, 0xfa, 0x9c, 0xc0, 0xcb, 0x76, 0x86, 0xc9, 0x89, 0xc6, 0x6f, 0x14, 0x9e, 0x0c, 0x1f, - 0x0d, 0x1c, 0x9b, 0xc2, 0x7d, 0xfe, 0x75, 0x4d, 0x7d, 0x0f, 0x14, 0xec, 0x21, 0x3d, 0xc4, 0x01, - 0xa2, 0x72, 0xd0, 0x69, 0x68, 0x7f, 0xf8, 0xe2, 0xc1, 0xb2, 0x84, 0xb4, 0xe9, 0x38, 0x01, 0x24, - 0xe4, 0x09, 0x0d, 0x90, 0xdf, 0x37, 0x23, 0x51, 0xf5, 0x3d, 0x30, 0x23, 0xbe, 0xcf, 0xc9, 0x57, - 0x2f, 0x25, 0x5e, 0x2d, 0x94, 0x37, 0x0a, 0x0c, 0xfe, 0xaf, 0x5f, 0x3d, 0xbb, 0xaf, 0x98, 0x52, - 0x7a, 0xe3, 0x1d, 0xe6, 0xf5, 0x48, 0x4f, 0xdc, 0xef, 0x71, 0x5c, 0xc6, 0x2a, 0x77, 0x7b, 0x9c, - 0x34, 0x71, 0xfb, 0xfd, 0x11, 0x28, 0x26, 0x07, 0x6b, 0xf5, 0x2d, 0xa0, 0xbe, 0xbf, 0xb7, 0xb7, - 0x6d, 0x75, 0x9a, 0x2d, 0x6b, 0x6b, 0xf3, 0xf1, 0xd6, 0x4e, 0xab, 0xb5, 0xb3, 0x5d, 0x9a, 0x52, - 0x4b, 0x60, 0x7e, 0xb7, 0xd9, 0x6a, 0x59, 0x7b, 0xa6, 0xf5, 0x61, 0xb3, 0xd5, 0x2a, 0x29, 0xea, - 0x0a, 0x58, 0x6a, 0xb6, 0xdb, 0x3b, 0xdb, 0xcd, 0xcd, 0xce, 0x0e, 0x23, 0x0b, 0xe9, 0x52, 0x86, - 0x89, 0x7e, 0xef, 0xa3, 0x27, 0x1d, 0xab, 0xf9, 0xd8, 0xea, 0x34, 0xdb, 0x3b, 0xa5, 0xac, 0x7a, - 0x0b, 0x2c, 0x84, 0x4a, 0x39, 0x29, 0xf7, 0xe8, 0x5f, 0x39, 0x90, 0x6d, 0x93, 0xbe, 0xba, 0x05, - 0x66, 0x27, 0x5f, 0x96, 0x56, 0x92, 0xde, 0x0e, 0x3f, 0x16, 0x95, 0xf5, 0x0b, 0x18, 0x61, 0xf4, - 0xb6, 0x00, 0x88, 0x7d, 0x5f, 0x28, 0xa7, 0xc5, 0x23, 0x5e, 0xd9, 0xb8, 0x98, 0x17, 0x6a, 0xfb, - 0x04, 0x2c, 0xa6, 0x7f, 0x9e, 0x9d, 0x41, 0x90, 0x12, 0x28, 0xdf, 0xbb, 0x42, 0x20, 0x54, 0x7e, - 0x0c, 0xb4, 0x0b, 0xe7, 0xa5, 0xea, 0x45, 0xe0, 0xd2, 0x92, 0xe5, 0x87, 0xaf, 0x2b, 0x19, 0xde, - 0xfb, 0x43, 0x50, 0x3a, 0xd3, 0xb7, 0x2b, 0x69, 0x2d, 0x69, 0x89, 0x72, 0xf5, 0x2a, 0x89, 0x50, - 0xbf, 0x09, 0xe6, 0x13, 0x9d, 0xe1, 0x1b, 0xe9, 0x93, 0x71, 0x6e, 0xf9, 0xed, 0xcb, 0xb8, 0x71, - 0x9d, 0x89, 0x04, 0x3b, 0xa3, 0x33, 0xce, 0x3d, 0xab, 0xf3, 0xbc, 0x88, 0x2f, 0x4f, 0x7f, 0xca, - 0x72, 0xa8, 0xf1, 0xfe, 0xf3, 0x17, 0x6b, 0xca, 0x97, 0x2f, 0xd6, 0x94, 0xbf, 0xbd, 0x58, 0x53, - 0x3e, 0x7f, 0xb9, 0x36, 0xf5, 0xe5, 0xcb, 0xb5, 0xa9, 0x3f, 0xbd, 0x5c, 0x9b, 0xfa, 0xf8, 0xc1, - 0xd5, 0x85, 0x7e, 0x24, 0xfe, 0x53, 0x80, 0x95, 0x8a, 0xee, 0x0c, 0xff, 0x71, 0xf9, 0xed, 0x7f, - 0x07, 0x00, 0x00, 0xff, 0xff, 0x2c, 0xd3, 0xce, 0x7e, 0x30, 0x18, 0x00, 0x00, + 0x0b, 0x07, 0x54, 0x8f, 0x7e, 0x3a, 0x8f, 0xc9, 0x92, 0x41, 0x1c, 0xb8, 0x4c, 0xaa, 0x7e, 0xdf, + 0x57, 0x5f, 0xfd, 0xaa, 0xbe, 0x57, 0xb9, 0x07, 0xac, 0x7a, 0x70, 0x44, 0x7c, 0xe4, 0xd5, 0x2d, + 0x38, 0xae, 0x93, 0x71, 0x6d, 0xe8, 0x23, 0x82, 0xe4, 0x05, 0x81, 0xd6, 0x2c, 0x38, 0x2e, 0xdf, + 0x32, 0x5d, 0xdb, 0x43, 0x75, 0xf6, 0x2f, 0x97, 0x97, 0x37, 0xfa, 0x08, 0xbb, 0x08, 0xd7, 0x7b, + 0x26, 0x86, 0xf5, 0x93, 0x46, 0x0f, 0x12, 0xb3, 0x51, 0xef, 0x23, 0xdb, 0x13, 0xf2, 0x35, 0x21, + 0x77, 0xf1, 0xa0, 0x7e, 0xd2, 0xa0, 0x7f, 0x84, 0x60, 0x9d, 0x0b, 0x0c, 0x36, 0xab, 0xf3, 0x89, + 0x10, 0xad, 0x0e, 0xd0, 0x00, 0x71, 0x9c, 0x8e, 0x04, 0xaa, 0x0e, 0x10, 0x1a, 0x38, 0xb0, 0xce, + 0x66, 0xbd, 0xd1, 0x61, 0x9d, 0xd8, 0x2e, 0xc4, 0xc4, 0x74, 0x87, 0x42, 0x41, 0x89, 0x1f, 0x60, + 0x68, 0xfa, 0xa6, 0x2b, 0x0c, 0x6a, 0x3f, 0x02, 0xc5, 0x1d, 0x38, 0x44, 0xd8, 0x26, 0xfb, 0x43, + 0x62, 0x23, 0x0f, 0xcb, 0xdf, 0x04, 0x25, 0xcb, 0xc6, 0x66, 0xcf, 0x81, 0x86, 0x39, 0x22, 0x08, + 0x3f, 0x35, 0x87, 0x8a, 0x54, 0x91, 0xaa, 0x79, 0x7d, 0x59, 0xe0, 0x5b, 0x02, 0x96, 0xef, 0x82, + 0xe2, 0xa1, 0x69, 0x3b, 0x06, 0x19, 0x1b, 0xc8, 0x33, 0x7a, 0xd0, 0x51, 0x32, 0x4c, 0x71, 0x81, + 0xa2, 0xdd, 0xf1, 0xbe, 0xd7, 0x84, 0x8e, 0xf6, 0x3c, 0x0b, 0x40, 0x07, 0x0f, 0xc4, 0x2e, 0xb2, + 0x02, 0xe6, 0xfb, 0x3e, 0x34, 0x09, 0xf2, 0x99, 0xd5, 0x82, 0x1e, 0x4c, 0xe5, 0x32, 0xc8, 0xfb, + 0xb0, 0x0f, 0xed, 0x13, 0xe8, 0x33, 0x3b, 0x05, 0x3d, 0x9c, 0xcb, 0x6b, 0x60, 0x9e, 0xa0, 0x63, + 0xe8, 0x19, 0xa6, 0x92, 0x65, 0xa2, 0x39, 0x36, 0xdd, 0x8a, 0x04, 0x3d, 0x25, 0x17, 0x13, 0x34, + 0xe5, 0x4f, 0x40, 0xc1, 0x74, 0xd1, 0xc8, 0x23, 0xd8, 0x30, 0x95, 0xd9, 0x4a, 0xb6, 0x5a, 0x68, + 0x7e, 0xf7, 0xf9, 0x44, 0x9d, 0xf9, 0xcb, 0x44, 0xbd, 0xcd, 0xaf, 0x14, 0x5b, 0xc7, 0x35, 0x1b, + 0xd5, 0x5d, 0x93, 0x1c, 0xd5, 0x5a, 0x1e, 0xf9, 0x6a, 0xa2, 0x46, 0x2b, 0xce, 0x26, 0x6a, 0xe9, + 0xd4, 0x74, 0x9d, 0x4d, 0x2d, 0x84, 0x34, 0x3d, 0x2f, 0xc6, 0x5b, 0x71, 0xe3, 0x3d, 0x65, 0xee, + 0x9a, 0xc6, 0x7b, 0xd3, 0xc6, 0x7b, 0x91, 0xf1, 0xa6, 0xfc, 0x2d, 0xb0, 0x42, 0xec, 0xfe, 0xb1, + 0x61, 0x7b, 0x16, 0x1c, 0x43, 0x6c, 0x98, 0x06, 0x41, 0x46, 0x4f, 0x99, 0xaf, 0x64, 0xab, 0x59, + 0x7d, 0x99, 0x8a, 0x5a, 0x5c, 0xb2, 0xd5, 0x45, 0x4d, 0x59, 0x06, 0xb9, 0x43, 0x08, 0xb1, 0x92, + 0xaf, 0x64, 0xab, 0x39, 0x9d, 0x8d, 0xe5, 0xef, 0x80, 0x79, 0xc4, 0xbd, 0xa9, 0x14, 0x2a, 0xd9, + 0xea, 0xc2, 0xa3, 0x3b, 0xb5, 0x58, 0xac, 0xd6, 0x92, 0x0e, 0xd7, 0x03, 0xdd, 0x4d, 0xf5, 0xa7, + 0xaf, 0x9e, 0xdd, 0x0f, 0xdc, 0xf1, 0xd9, 0xab, 0x67, 0xf7, 0x8b, 0x34, 0x5c, 0x22, 0xdf, 0x69, + 0x7b, 0x60, 0x69, 0xcf, 0xb4, 0x1d, 0x68, 0x05, 0xce, 0x54, 0xc1, 0x82, 0xc5, 0x87, 0x86, 0x6d, + 0x8d, 0x99, 0x43, 0x73, 0x3a, 0x10, 0x50, 0xcb, 0x1a, 0xcb, 0xab, 0x60, 0x16, 0xfa, 0x3e, 0x0a, + 0x1c, 0xca, 0x27, 0xda, 0x3f, 0xb2, 0x40, 0x8e, 0xcc, 0xea, 0x10, 0x0f, 0x91, 0x87, 0xa1, 0xfc, + 0x13, 0x20, 0xfb, 0x10, 0x43, 0xff, 0x04, 0x3e, 0x34, 0x84, 0x0d, 0x68, 0x29, 0x12, 0xbb, 0xde, + 0x83, 0xab, 0xae, 0xf7, 0x9c, 0xa5, 0x67, 0x13, 0x75, 0x9d, 0xdf, 0xf3, 0xb4, 0x4c, 0xd3, 0x6f, + 0x05, 0xe0, 0x4e, 0x80, 0xc5, 0x08, 0x34, 0x62, 0x04, 0x32, 0xd7, 0x23, 0xd0, 0xb8, 0x84, 0x40, + 0xe3, 0x3c, 0x02, 0x8d, 0x88, 0xc0, 0x36, 0x58, 0x3e, 0x64, 0x17, 0x1c, 0xe8, 0x61, 0x25, 0xcb, + 0x1c, 0x58, 0x4e, 0x38, 0x30, 0xe1, 0x04, 0xbd, 0x78, 0x18, 0x9f, 0x62, 0xf9, 0x97, 0x12, 0x58, + 0xc2, 0x47, 0xa6, 0x0f, 0xb1, 0x61, 0x63, 0x3c, 0x82, 0x96, 0x92, 0x63, 0x36, 0xd6, 0x6b, 0xa2, + 0x94, 0xd0, 0x82, 0x54, 0x13, 0x05, 0xa9, 0xb6, 0x8d, 0x6c, 0xaf, 0xf9, 0x03, 0x71, 0xb8, 0x7b, + 0x03, 0x9b, 0x1c, 0x8d, 0x7a, 0xb5, 0x3e, 0x72, 0x45, 0xdd, 0x11, 0x7f, 0x1e, 0x60, 0xeb, 0xb8, + 0x4e, 0x4e, 0x87, 0x10, 0xb3, 0x05, 0x5f, 0x4d, 0xd4, 0xe4, 0x16, 0x67, 0x13, 0x75, 0x95, 0x9f, + 0x34, 0x01, 0x6b, 0xfa, 0x22, 0x9f, 0xb7, 0xf8, 0xf4, 0x8f, 0x19, 0xb0, 0xd4, 0xc1, 0x83, 0xef, + 0xdb, 0xe4, 0xc8, 0xf2, 0xcd, 0xa7, 0xa6, 0xf3, 0x5f, 0x2b, 0x07, 0x27, 0xa0, 0x24, 0x98, 0x11, + 0x64, 0xf8, 0xd0, 0x45, 0x27, 0x50, 0x54, 0x85, 0xf6, 0x55, 0x8e, 0x9d, 0x5a, 0x78, 0x36, 0x51, + 0xd7, 0x12, 0x87, 0x0d, 0x25, 0x9a, 0x5e, 0xe4, 0x50, 0x17, 0xe9, 0x0c, 0xb8, 0x28, 0x99, 0xe7, + 0x2e, 0x4f, 0xe6, 0xf9, 0x28, 0x99, 0x37, 0xb5, 0x74, 0x56, 0xde, 0x12, 0x59, 0x19, 0xdd, 0xa2, + 0xf6, 0x45, 0x16, 0xdc, 0x4e, 0x20, 0xe7, 0xe6, 0xd4, 0x53, 0x21, 0xf6, 0xf8, 0x55, 0x5f, 0x27, + 0xa7, 0xc2, 0xa5, 0xe7, 0xe4, 0x54, 0x28, 0x8b, 0xe5, 0x54, 0xc0, 0xc4, 0x4b, 0xe4, 0x54, 0x44, + 0x20, 0x73, 0x3d, 0x02, 0x8d, 0x4b, 0x08, 0x34, 0xce, 0x23, 0xd0, 0x88, 0x08, 0xc4, 0xd2, 0xa1, + 0x37, 0xf2, 0x3d, 0x68, 0x89, 0x94, 0x7a, 0x33, 0xe9, 0xc0, 0xb7, 0x98, 0x4a, 0x07, 0x0e, 0x87, + 0xe9, 0xd0, 0xe4, 0xd3, 0xdf, 0xcf, 0xb2, 0x3a, 0x78, 0xe0, 0x98, 0x7d, 0xd8, 0xb6, 0x5d, 0x9b, + 0xec, 0xfb, 0x16, 0xf4, 0xbf, 0x66, 0x4e, 0xac, 0x83, 0x3c, 0x0f, 0x7d, 0xdb, 0x13, 0x49, 0xc1, + 0x53, 0xa1, 0xe5, 0xc9, 0x77, 0x40, 0x81, 0x8b, 0xd0, 0x88, 0x88, 0xbc, 0xe0, 0xba, 0xfb, 0x23, + 0x22, 0x3f, 0x02, 0xab, 0x51, 0x84, 0x1a, 0xb6, 0x47, 0x03, 0x94, 0xea, 0xcd, 0x56, 0xa4, 0x6a, + 0xb6, 0x99, 0x51, 0x24, 0xbd, 0x14, 0x86, 0x69, 0xcb, 0xeb, 0x22, 0xba, 0x26, 0xec, 0x7f, 0x74, + 0xb3, 0x79, 0xe6, 0xcb, 0xd7, 0xed, 0x7f, 0x86, 0xed, 0xa5, 0xfb, 0x9f, 0x61, 0x7b, 0x61, 0xff, + 0x6b, 0x79, 0xf2, 0x26, 0x00, 0x88, 0xde, 0x83, 0x41, 0x2f, 0x58, 0xc9, 0x57, 0xa4, 0x6a, 0x31, + 0xd5, 0xc0, 0xa2, 0xbb, 0xea, 0x9e, 0x0e, 0xa1, 0x5e, 0x40, 0xc1, 0x50, 0xee, 0x80, 0x65, 0x38, + 0x1e, 0xda, 0xbe, 0x49, 0x3b, 0x9a, 0x41, 0x9f, 0x41, 0x4a, 0xa1, 0x22, 0xb1, 0x02, 0xca, 0xdf, + 0x48, 0xb5, 0xe0, 0x8d, 0x54, 0xeb, 0x06, 0x6f, 0xa4, 0x66, 0xfe, 0xf9, 0x44, 0x95, 0x3e, 0xff, + 0xab, 0x2a, 0xe9, 0xc5, 0x68, 0x31, 0x15, 0xcb, 0x1e, 0x28, 0xba, 0xe6, 0xd8, 0x10, 0x34, 0xe9, + 0xad, 0x00, 0x76, 0xd8, 0x0f, 0xe8, 0x8a, 0xcb, 0x0e, 0x9b, 0x5a, 0x76, 0x36, 0x51, 0x6f, 0xf3, + 0x13, 0x27, 0x71, 0x4d, 0x5f, 0x74, 0xcd, 0xf1, 0x16, 0x9b, 0xd3, 0x7b, 0xfd, 0xb9, 0x04, 0x4a, + 0x0e, 0x3d, 0x9c, 0x81, 0xa1, 0xe3, 0x18, 0x43, 0xdf, 0xee, 0x43, 0x65, 0x81, 0x6d, 0x79, 0x2c, + 0xb6, 0x7c, 0x37, 0x16, 0x93, 0xe2, 0x4e, 0x1e, 0x20, 0x7f, 0x10, 0x8c, 0xeb, 0x27, 0xef, 0xd6, + 0x47, 0xc4, 0x76, 0x30, 0x67, 0x73, 0xe0, 0xc3, 0xfe, 0x0e, 0xec, 0xd3, 0x2a, 0x96, 0xb6, 0x1b, + 0x55, 0xb1, 0xb4, 0x44, 0xd3, 0x8b, 0x0c, 0x7a, 0x02, 0x1d, 0xe7, 0x80, 0x02, 0x9b, 0xf7, 0xd2, + 0x35, 0xe8, 0x2d, 0x51, 0x83, 0x52, 0xa1, 0xab, 0xfd, 0x33, 0x0b, 0xca, 0xd3, 0x70, 0x58, 0x8d, + 0x36, 0x00, 0x20, 0xbe, 0xe9, 0xf5, 0x8f, 0xe0, 0x87, 0xf0, 0x54, 0x04, 0x77, 0x0c, 0x91, 0x3f, + 0x95, 0xc0, 0x3c, 0x7d, 0x21, 0xd3, 0xb0, 0xca, 0x30, 0xbf, 0x5d, 0x92, 0xa5, 0xed, 0xeb, 0x67, + 0x69, 0x60, 0xfc, 0x6c, 0xa2, 0x16, 0xf9, 0xd9, 0x05, 0xa0, 0xe9, 0x73, 0x74, 0xd4, 0xf2, 0xe4, + 0x5f, 0x49, 0xa0, 0x48, 0xcc, 0x63, 0xe8, 0x1b, 0x4c, 0x44, 0x7d, 0x9e, 0xbd, 0x8a, 0xc9, 0xc7, + 0xd7, 0x67, 0x92, 0xda, 0x23, 0x0a, 0x90, 0x24, 0xae, 0xe9, 0x8b, 0x0c, 0xa0, 0xab, 0x68, 0x80, + 0xfc, 0x42, 0x02, 0x4b, 0x31, 0x0d, 0xdb, 0x63, 0xe9, 0x7c, 0xe3, 0xc5, 0x2c, 0xb1, 0x45, 0x54, + 0xcc, 0x12, 0xb0, 0xa6, 0x2f, 0x84, 0xd4, 0x5a, 0x9e, 0xf6, 0x99, 0x04, 0xee, 0xc4, 0x5a, 0xd0, + 0x9e, 0xed, 0x38, 0xd0, 0x7a, 0xad, 0xa2, 0xa6, 0x82, 0x05, 0x11, 0x02, 0xc6, 0x31, 0x3c, 0x15, + 0x75, 0x2d, 0x16, 0x15, 0x9b, 0x0f, 0xd3, 0xd1, 0xa7, 0xa6, 0x3a, 0x60, 0x7a, 0x33, 0xed, 0xef, + 0x19, 0x70, 0xf7, 0x12, 0x79, 0x18, 0x8f, 0xe7, 0x38, 0x5b, 0xfa, 0xdf, 0x71, 0x36, 0x65, 0xe7, + 0x26, 0xd9, 0x65, 0xde, 0x04, 0x3b, 0xf7, 0x02, 0x76, 0x6e, 0x9a, 0x9d, 0x1b, 0x63, 0xa7, 0xfd, + 0x18, 0xac, 0x74, 0xf0, 0x60, 0xdb, 0xf4, 0xfa, 0xd0, 0xb9, 0x19, 0x3f, 0x57, 0xd3, 0x7e, 0x5e, + 0x13, 0x7e, 0x4e, 0x6f, 0xa2, 0xfd, 0x39, 0xc3, 0x82, 0x2d, 0x8d, 0xff, 0xdf, 0xaf, 0x37, 0xe0, + 0xd7, 0xbb, 0x60, 0xa9, 0x33, 0x72, 0x88, 0xfd, 0x01, 0x1a, 0xea, 0x68, 0x44, 0x20, 0x7d, 0x94, + 0x1e, 0xa1, 0x21, 0xe6, 0x3f, 0xc4, 0x74, 0x36, 0xd6, 0x7e, 0x9b, 0x05, 0xcb, 0x1d, 0x3c, 0x08, + 0x14, 0x9f, 0x3c, 0x35, 0x87, 0x5f, 0xf3, 0xd9, 0xf2, 0x08, 0xcc, 0xf9, 0x74, 0x9b, 0xf3, 0x7f, + 0xe9, 0x24, 0x98, 0xe8, 0x42, 0x33, 0xf9, 0xfc, 0xc8, 0xdd, 0xf0, 0xf3, 0x83, 0xf6, 0x60, 0x38, + 0xb6, 0x89, 0xc1, 0xdb, 0x22, 0xef, 0xc1, 0xb3, 0x61, 0x0f, 0x9e, 0xf9, 0x4f, 0x7a, 0x70, 0xda, + 0x6e, 0xd4, 0x83, 0xd3, 0x12, 0x8d, 0xbe, 0x45, 0x6c, 0xc2, 0x62, 0x9b, 0xf5, 0x60, 0xf9, 0x1d, + 0xb0, 0x3c, 0xa4, 0xef, 0xb4, 0x1e, 0xc4, 0xc4, 0x60, 0x17, 0xa1, 0xcc, 0xb1, 0xaf, 0x2d, 0x4b, + 0x14, 0x6e, 0x42, 0x4c, 0xd8, 0x25, 0x6d, 0xbe, 0x9d, 0xce, 0xa2, 0x15, 0x91, 0x45, 0x71, 0x67, + 0x69, 0xbf, 0xcb, 0x80, 0xb5, 0x14, 0x16, 0x66, 0xcf, 0xcf, 0x24, 0x90, 0x7f, 0xfd, 0xbc, 0x79, + 0x7c, 0xfd, 0xc8, 0xcc, 0xc7, 0x62, 0x72, 0x39, 0xd6, 0x87, 0x59, 0x34, 0xb2, 0x1e, 0x4d, 0xd3, + 0xe4, 0x21, 0x98, 0xe5, 0xc7, 0xcc, 0x88, 0x17, 0xdc, 0xc5, 0x81, 0xc1, 0x15, 0xe5, 0x11, 0xc8, + 0x59, 0x23, 0x4c, 0xae, 0x7e, 0xe0, 0xef, 0x5d, 0x9f, 0x33, 0xb3, 0x7c, 0x36, 0x51, 0x17, 0x38, + 0x5f, 0x3a, 0xd3, 0x74, 0x06, 0x6a, 0xbf, 0x91, 0x58, 0x32, 0x7c, 0x34, 0xb4, 0x4c, 0x02, 0x0f, + 0xd8, 0xd7, 0x35, 0xf9, 0x3d, 0x50, 0x30, 0x47, 0xe4, 0x08, 0xf9, 0x36, 0x11, 0x0f, 0x9d, 0xa6, + 0xf2, 0x87, 0x2f, 0x1e, 0xac, 0x0a, 0x4a, 0x5b, 0x96, 0xe5, 0x43, 0x8c, 0x9f, 0x10, 0xdf, 0xf6, + 0x06, 0x7a, 0xa4, 0x2a, 0xbf, 0x07, 0xe6, 0xf8, 0xf7, 0x39, 0x71, 0xea, 0x95, 0xc4, 0xa9, 0xb9, + 0xf1, 0x66, 0x81, 0xd2, 0xff, 0xf5, 0xab, 0x67, 0xf7, 0x25, 0x5d, 0x68, 0x6f, 0xbe, 0x43, 0xbd, + 0x1e, 0xd9, 0x89, 0xfb, 0x3d, 0xce, 0x4b, 0x5b, 0x67, 0x6e, 0x8f, 0x43, 0x81, 0xdb, 0xef, 0x8f, + 0x41, 0x31, 0xf9, 0xb0, 0x96, 0xdf, 0x02, 0xf2, 0xfb, 0xfb, 0xfb, 0x3b, 0x46, 0xb7, 0xd5, 0x36, + 0xb6, 0xb7, 0x1e, 0x6f, 0xef, 0xb6, 0xdb, 0xbb, 0x3b, 0xa5, 0x19, 0xb9, 0x04, 0x16, 0xf7, 0x5a, + 0xed, 0xb6, 0xb1, 0xaf, 0x1b, 0x1f, 0xb6, 0xda, 0xed, 0x92, 0x24, 0xaf, 0x81, 0x95, 0x56, 0xa7, + 0xb3, 0xbb, 0xd3, 0xda, 0xea, 0xee, 0x52, 0x98, 0x6b, 0x97, 0x32, 0x54, 0xf5, 0x7b, 0x1f, 0x3d, + 0xe9, 0x1a, 0xad, 0xc7, 0x46, 0xb7, 0xd5, 0xd9, 0x2d, 0x65, 0xe5, 0x5b, 0x60, 0x29, 0x34, 0xca, + 0xa0, 0xdc, 0xa3, 0x7f, 0xe5, 0x40, 0xb6, 0x83, 0x07, 0xf2, 0x36, 0x98, 0x0f, 0xbe, 0x2c, 0xad, + 0x25, 0xbd, 0x1d, 0x7e, 0x2c, 0x2a, 0xab, 0x17, 0x08, 0xc2, 0xe8, 0x6d, 0x03, 0x10, 0xfb, 0xbe, + 0x50, 0x4e, 0xab, 0x47, 0xb2, 0xb2, 0x76, 0xb1, 0x2c, 0xb4, 0xf6, 0x09, 0x58, 0x4e, 0xff, 0x3c, + 0x9b, 0x62, 0x90, 0x52, 0x28, 0xdf, 0xbb, 0x42, 0x21, 0x34, 0x7e, 0x02, 0x94, 0x0b, 0xdf, 0x4b, + 0xd5, 0x8b, 0xc8, 0xa5, 0x35, 0xcb, 0x0f, 0x5f, 0x57, 0x33, 0xdc, 0xf7, 0x87, 0xa0, 0x34, 0xd5, + 0xb7, 0x2b, 0x69, 0x2b, 0x69, 0x8d, 0x72, 0xf5, 0x2a, 0x8d, 0xd0, 0xbe, 0x0e, 0x16, 0x13, 0x9d, + 0xe1, 0x1b, 0xe9, 0x95, 0x71, 0x69, 0xf9, 0xed, 0xcb, 0xa4, 0x71, 0x9b, 0x89, 0x04, 0x9b, 0xb2, + 0x19, 0x97, 0x4e, 0xdb, 0x3c, 0x2f, 0xe2, 0xcb, 0xb3, 0x9f, 0xd2, 0x1c, 0x6a, 0xbe, 0xff, 0xfc, + 0xc5, 0x86, 0xf4, 0xe5, 0x8b, 0x0d, 0xe9, 0x6f, 0x2f, 0x36, 0xa4, 0xcf, 0x5f, 0x6e, 0xcc, 0x7c, + 0xf9, 0x72, 0x63, 0xe6, 0x4f, 0x2f, 0x37, 0x66, 0x3e, 0x7e, 0x70, 0x75, 0xa1, 0x1f, 0xf3, 0xff, + 0x14, 0xa0, 0xa5, 0xa2, 0x37, 0xc7, 0x7e, 0x5c, 0x7e, 0xfb, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, + 0x42, 0x14, 0x76, 0xb2, 0x30, 0x18, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. From 29b6be4d08c2e2bf4cde83efb256e3320ca4c590 Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Mon, 2 Sep 2024 16:56:06 -0400 Subject: [PATCH 008/127] check user has sufficient shares for withdrawal --- x/dex/keeper/withdraw.go | 5 +++-- x/dex/types/expected_keepers.go | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/x/dex/keeper/withdraw.go b/x/dex/keeper/withdraw.go index 581a8ff59..91faff3bc 100644 --- a/x/dex/keeper/withdraw.go +++ b/x/dex/keeper/withdraw.go @@ -104,8 +104,8 @@ func (k Keeper) ExecuteWithdraw( // TODO: this is a bit hacky. Since it is possible to have multiple withdrawals from the same pool we have to artificially update the bank balance // In the future we should enforce only one withdraw operation per pool in the message validation alreadyWithdrawnOfDenom := coinsToBurn.AmountOf(poolDenom) - totalShares := k.bankKeeper.GetSupply(ctx, poolDenom).Amount.Sub(alreadyWithdrawnOfDenom) - if totalShares.LT(sharesToRemove) { + sharesOwned := k.bankKeeper.GetBalance(ctx, callerAddr, poolDenom).Amount.Sub(alreadyWithdrawnOfDenom) + if sharesOwned.LT(sharesToRemove) { return math.ZeroInt(), math.ZeroInt(), nil, nil, sdkerrors.Wrapf( types.ErrInsufficientShares, "%s does not have %s shares of type %s", @@ -115,6 +115,7 @@ func (k Keeper) ExecuteWithdraw( ) } + totalShares := k.bankKeeper.GetSupply(ctx, poolDenom).Amount.Sub(alreadyWithdrawnOfDenom) outAmount0, outAmount1 := pool.Withdraw(sharesToRemove, totalShares) k.SetPool(ctx, pool) diff --git a/x/dex/types/expected_keepers.go b/x/dex/types/expected_keepers.go index 339e22037..95c5c7a90 100644 --- a/x/dex/types/expected_keepers.go +++ b/x/dex/types/expected_keepers.go @@ -15,4 +15,5 @@ type BankKeeper interface { BurnCoins(ctx context.Context, moduleName string, amt sdk.Coins) error IterateAccountBalances(ctx context.Context, addr sdk.AccAddress, cb func(sdk.Coin) bool) GetSupply(ctx context.Context, denom string) sdk.Coin + GetBalance(ctx context.Context, addr sdk.AccAddress, denom string) sdk.Coin } From 78a197102ff18aa6b8a7e52515bc08703fb638a3 Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Mon, 2 Sep 2024 18:12:48 -0400 Subject: [PATCH 009/127] add coercion for SimulatePlaceLimitOrder --- wasmbinding/bindings/query.go | 6 +++++- wasmbinding/queries.go | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/wasmbinding/bindings/query.go b/wasmbinding/bindings/query.go index 5cbbc7f27..4fb87b2fc 100644 --- a/wasmbinding/bindings/query.go +++ b/wasmbinding/bindings/query.go @@ -278,7 +278,7 @@ type DexQuery struct { /// Simulates MsgWithdrawal SimulateWithdrawal *dextypes.QuerySimulateWithdrawalRequest `json:"simulate_withdrawal"` /// Simulates MsgPlaceLimitOrder - SimulatePlaceLimitOrder *dextypes.QuerySimulatePlaceLimitOrderRequest `json:"simulate_place_limit_order"` + SimulatePlaceLimitOrder *QuerySimulatePlaceLimitOrderRequest `json:"simulate_place_limit_order"` /// Simulates MsgWithdrawFilledLimitOrder SimulateWithdrawFilledLimitOrder *dextypes.QuerySimulateWithdrawFilledLimitOrderRequest `json:"simulate_withdraw_filled_limit_order"` /// Simulates MsgCancelLimitOrder @@ -301,3 +301,7 @@ type QueryEstimatePlaceLimitOrderRequest struct { ExpirationTime *uint64 `json:"expiration_time,omitempty"` MaxAmountOut *math.Int `json:"max_amount_out"` } + +type QuerySimulatePlaceLimitOrderRequest struct { + Msg *MsgPlaceLimitOrder `json:"msg"` +} diff --git a/wasmbinding/queries.go b/wasmbinding/queries.go index 774d38f25..1bf73d369 100644 --- a/wasmbinding/queries.go +++ b/wasmbinding/queries.go @@ -16,6 +16,7 @@ import ( sdkquery "github.com/cosmos/cosmos-sdk/types/query" dextypes "github.com/neutron-org/neutron/v4/x/dex/types" + dexutils "github.com/neutron-org/neutron/v4/x/dex/utils" contractmanagertypes "github.com/neutron-org/neutron/v4/x/contractmanager/types" @@ -206,7 +207,38 @@ func (qp *QueryPlugin) DexQuery(ctx sdk.Context, query bindings.DexQuery) (data case query.SimulateWithdrawal != nil: data, err = dexQuery(ctx, query.SimulateWithdrawal, qp.dexKeeper.SimulateWithdrawal) case query.SimulatePlaceLimitOrder != nil: - data, err = dexQuery(ctx, query.SimulatePlaceLimitOrder, qp.dexKeeper.SimulatePlaceLimitOrder) + q := dextypes.QuerySimulatePlaceLimitOrderRequest{ + Msg: &dextypes.MsgPlaceLimitOrder{ + TokenIn: query.SimulatePlaceLimitOrder.Msg.TokenIn, + TokenOut: query.SimulatePlaceLimitOrder.Msg.TokenOut, + //nolint: staticcheck // TODO: remove in next release + TickIndexInToOut: query.SimulatePlaceLimitOrder.Msg.TickIndexInToOut, + AmountIn: query.SimulatePlaceLimitOrder.Msg.AmountIn, + MaxAmountOut: query.SimulatePlaceLimitOrder.Msg.MaxAmountOut, + }, + } + orderTypeInt, ok := dextypes.LimitOrderType_value[query.SimulatePlaceLimitOrder.Msg.OrderType] + if !ok { + return nil, errors.Wrap(dextypes.ErrInvalidOrderType, + fmt.Sprintf( + "got \"%s\", expected one of %s", + query.SimulatePlaceLimitOrder.Msg.OrderType, + strings.Join(maps.Keys(dextypes.LimitOrderType_value), ", ")), + ) + } + q.Msg.OrderType = dextypes.LimitOrderType(orderTypeInt) + if query.SimulatePlaceLimitOrder.Msg.ExpirationTime != nil { + t := time.Unix(int64(*query.SimulatePlaceLimitOrder.Msg.ExpirationTime), 0) + q.Msg.ExpirationTime = &t + } + if limitPriceStr := query.SimulatePlaceLimitOrder.Msg.LimitSellPrice; limitPriceStr != "" { + limitPriceDec, err := dexutils.ParsePrecDecScientificNotation(limitPriceStr) + if err != nil { + return nil, errors.Wrapf(err, "cannot parse string %s for limit price", limitPriceStr) + } + q.Msg.LimitSellPrice = &limitPriceDec + } + data, err = dexQuery(ctx, &q, qp.dexKeeper.SimulatePlaceLimitOrder) case query.SimulateWithdrawFilledLimitOrder != nil: data, err = dexQuery(ctx, query.SimulateWithdrawFilledLimitOrder, qp.dexKeeper.SimulateWithdrawFilledLimitOrder) case query.SimulateCancelLimitOrder != nil: From 658649b867a47629ab3a1287edf9c187399af630 Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Mon, 2 Sep 2024 23:25:12 -0400 Subject: [PATCH 010/127] Whitelist simulate queries --- wasmbinding/stargate_allowlist.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/wasmbinding/stargate_allowlist.go b/wasmbinding/stargate_allowlist.go index 13d8ab761..1fa16677c 100644 --- a/wasmbinding/stargate_allowlist.go +++ b/wasmbinding/stargate_allowlist.go @@ -90,6 +90,12 @@ func AcceptedStargateQueries() wasmkeeper.AcceptedQueries { "/neutron.dex.Query/PoolByID": &dextypes.QueryPoolResponse{}, "/neutron.dex.Query/PoolMetadata": &dextypes.QueryGetPoolMetadataResponse{}, "/neutron.dex.Query/PoolMetadataAll": &dextypes.QueryAllPoolMetadataResponse{}, + "/neutron.dex.Query/SimulateDeposit": &dextypes.QuerySimulateDepositResponse{}, + "/neutron.dex.Query/SimulateWithdrawal": &dextypes.QuerySimulateWithdrawalResponse{}, + "/neutron.dex.Query/SimulatePlaceLimitOrder": &dextypes.QuerySimulatePlaceLimitOrderResponse{}, + "/neutron.dex.Query/SimulateWithdrawFilledLimitOrder": &dextypes.QuerySimulateWithdrawFilledLimitOrderResponse{}, + "/neutron.dex.Query/SimulateCancelLimitOrder": &dextypes.QuerySimulateCancelLimitOrderResponse{}, + "/neutron.dex.Query/SimulateMultiHopSwap": &dextypes.QuerySimulateMultiHopSwapResponse{}, // oracle "/slinky.oracle.v1.Query/GetAllCurrencyPairs": &oracletypes.GetAllCurrencyPairsResponse{}, From 0d8817f3d3bc772f693cacce48f868db5bbf244a Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 3 Sep 2024 09:17:36 -0300 Subject: [PATCH 011/127] basic integration of ibc-rate-limit module --- .../ibcratelimit/v1beta1/genesis.proto | 15 + .../osmosis/ibcratelimit/v1beta1/params.proto | 12 + .../osmosis/ibcratelimit/v1beta1/query.proto | 27 + proto/osmosis/ibcratelimit/v1beta1/query.yml | 10 + x/ibc-hooks/utils/utils.go | 10 + x/ibc-rate-limit/Beaker.toml | 1 + x/ibc-rate-limit/Cargo.lock | 933 +++++++++++++++ x/ibc-rate-limit/Cargo.toml | 16 + x/ibc-rate-limit/README.md | 307 +++++ x/ibc-rate-limit/bytecode/rate_limiter.wasm | Bin 0 -> 355373 bytes x/ibc-rate-limit/client/cli/query.go | 57 + x/ibc-rate-limit/client/grpc/grpc_query.go | 31 + x/ibc-rate-limit/client/query_proto_wrap.go | 21 + .../client/queryproto/query.pb.go | 544 +++++++++ .../client/queryproto/query.pb.gw.go | 153 +++ .../contracts/rate-limiter/.cargo/config | 3 + .../contracts/rate-limiter/Cargo.toml | 52 + .../contracts/rate-limiter/examples/schema.rs | 13 + .../contracts/rate-limiter/src/blocking.rs | 150 +++ .../contracts/rate-limiter/src/contract.rs | 203 ++++ .../rate-limiter/src/contract_tests.rs | 450 ++++++++ .../contracts/rate-limiter/src/error.rs | 34 + .../contracts/rate-limiter/src/execute.rs | 440 +++++++ .../contracts/rate-limiter/src/helpers.rs | 61 + .../rate-limiter/src/integration_tests.rs | 1019 +++++++++++++++++ .../contracts/rate-limiter/src/lib.rs | 24 + .../rate-limiter/src/message_queue.rs | 413 +++++++ .../contracts/rate-limiter/src/msg.rs | 197 ++++ .../contracts/rate-limiter/src/packet.rs | 482 ++++++++ .../contracts/rate-limiter/src/query.rs | 187 +++ .../contracts/rate-limiter/src/rbac.rs | 452 ++++++++ .../contracts/rate-limiter/src/state/flow.rs | 167 +++ .../contracts/rate-limiter/src/state/mod.rs | 8 + .../contracts/rate-limiter/src/state/path.rs | 33 + .../contracts/rate-limiter/src/state/quota.rs | 64 ++ .../rate-limiter/src/state/rate_limit.rs | 98 ++ .../contracts/rate-limiter/src/state/rbac.rs | 78 ++ .../rate-limiter/src/state/storage.rs | 53 + .../contracts/rate-limiter/src/sudo.rs | 199 ++++ x/ibc-rate-limit/genesis.go | 20 + x/ibc-rate-limit/genesis_test.go | 43 + x/ibc-rate-limit/ibc_middleware_test.go | 663 +++++++++++ x/ibc-rate-limit/ibc_module.go | 257 +++++ x/ibc-rate-limit/ibcratelimitmodule/module.go | 133 +++ x/ibc-rate-limit/ics4_wrapper.go | 120 ++ x/ibc-rate-limit/rate_limit.go | 154 +++ x/ibc-rate-limit/types/errors.go | 11 + x/ibc-rate-limit/types/events.go | 8 + x/ibc-rate-limit/types/genesis.go | 17 + x/ibc-rate-limit/types/genesis.pb.go | 329 ++++++ x/ibc-rate-limit/types/keys.go | 12 + x/ibc-rate-limit/types/params.go | 73 ++ x/ibc-rate-limit/types/params.pb.go | 322 ++++++ x/ibc-rate-limit/types/params_test.go | 79 ++ 54 files changed, 9258 insertions(+) create mode 100644 proto/osmosis/ibcratelimit/v1beta1/genesis.proto create mode 100644 proto/osmosis/ibcratelimit/v1beta1/params.proto create mode 100644 proto/osmosis/ibcratelimit/v1beta1/query.proto create mode 100644 proto/osmosis/ibcratelimit/v1beta1/query.yml create mode 100644 x/ibc-rate-limit/Beaker.toml create mode 100644 x/ibc-rate-limit/Cargo.lock create mode 100644 x/ibc-rate-limit/Cargo.toml create mode 100644 x/ibc-rate-limit/README.md create mode 100644 x/ibc-rate-limit/bytecode/rate_limiter.wasm create mode 100644 x/ibc-rate-limit/client/cli/query.go create mode 100644 x/ibc-rate-limit/client/grpc/grpc_query.go create mode 100644 x/ibc-rate-limit/client/query_proto_wrap.go create mode 100644 x/ibc-rate-limit/client/queryproto/query.pb.go create mode 100644 x/ibc-rate-limit/client/queryproto/query.pb.gw.go create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/.cargo/config create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/Cargo.toml create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/examples/schema.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/blocking.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/contract.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/error.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/execute.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/helpers.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/integration_tests.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/lib.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/message_queue.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/msg.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/query.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/rbac.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/state/flow.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/state/mod.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/state/path.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/state/quota.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/state/rate_limit.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/state/rbac.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/state/storage.rs create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/sudo.rs create mode 100644 x/ibc-rate-limit/genesis.go create mode 100644 x/ibc-rate-limit/genesis_test.go create mode 100644 x/ibc-rate-limit/ibc_middleware_test.go create mode 100644 x/ibc-rate-limit/ibc_module.go create mode 100644 x/ibc-rate-limit/ibcratelimitmodule/module.go create mode 100644 x/ibc-rate-limit/ics4_wrapper.go create mode 100644 x/ibc-rate-limit/rate_limit.go create mode 100644 x/ibc-rate-limit/types/errors.go create mode 100644 x/ibc-rate-limit/types/events.go create mode 100644 x/ibc-rate-limit/types/genesis.go create mode 100644 x/ibc-rate-limit/types/genesis.pb.go create mode 100644 x/ibc-rate-limit/types/keys.go create mode 100644 x/ibc-rate-limit/types/params.go create mode 100644 x/ibc-rate-limit/types/params.pb.go create mode 100644 x/ibc-rate-limit/types/params_test.go diff --git a/proto/osmosis/ibcratelimit/v1beta1/genesis.proto b/proto/osmosis/ibcratelimit/v1beta1/genesis.proto new file mode 100644 index 000000000..e5a3838b5 --- /dev/null +++ b/proto/osmosis/ibcratelimit/v1beta1/genesis.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; +package osmosis.ibcratelimit.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; +import "google/protobuf/any.proto"; +import "osmosis/ibcratelimit/v1beta1/params.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v26/x/ibc-rate-limit/types"; + +// GenesisState defines the ibc-rate-limit module's genesis state. +message GenesisState { + // params are all the parameters of the module + Params params = 1 [ (gogoproto.nullable) = false ]; +} diff --git a/proto/osmosis/ibcratelimit/v1beta1/params.proto b/proto/osmosis/ibcratelimit/v1beta1/params.proto new file mode 100644 index 000000000..d8fb6235e --- /dev/null +++ b/proto/osmosis/ibcratelimit/v1beta1/params.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; +package osmosis.ibcratelimit.v1beta1; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v26/x/ibc-rate-limit/types"; + +// Params defines the parameters for the ibc-rate-limit module. +message Params { + string contract_address = 1 + [ (gogoproto.moretags) = "yaml:\"contract_address\"" ]; +} diff --git a/proto/osmosis/ibcratelimit/v1beta1/query.proto b/proto/osmosis/ibcratelimit/v1beta1/query.proto new file mode 100644 index 000000000..0dd9ce701 --- /dev/null +++ b/proto/osmosis/ibcratelimit/v1beta1/query.proto @@ -0,0 +1,27 @@ +syntax = "proto3"; +package osmosis.ibcratelimit.v1beta1; + +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; +import "osmosis/ibcratelimit/v1beta1/params.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v26/x/ibc-rate-limit/client/queryproto"; + +// Query defines the gRPC querier service. +service Query { + // Params defines a gRPC query method that returns the ibc-rate-limit module's + // parameters. + rpc Params(ParamsRequest) returns (ParamsResponse) { + option (google.api.http).get = "/osmosis/ibc-rate-limit/v1beta1/params"; + } +} + +// ParamsRequest is the request type for the Query/Params RPC method. +message ParamsRequest {} + +// aramsResponse is the response type for the Query/Params RPC method. +message ParamsResponse { + // params defines the parameters of the module. + Params params = 1 [ (gogoproto.nullable) = false ]; +} diff --git a/proto/osmosis/ibcratelimit/v1beta1/query.yml b/proto/osmosis/ibcratelimit/v1beta1/query.yml new file mode 100644 index 000000000..c4356fcba --- /dev/null +++ b/proto/osmosis/ibcratelimit/v1beta1/query.yml @@ -0,0 +1,10 @@ +keeper: + path: "github.com/osmosis-labs/osmosis/v26/x/ibc-rate-limit" + struct: "Keeper" +client_path: "github.com/osmosis-labs/osmosis/v26/x/ibc-rate-limit/client" +queries: + Params: + proto_wrapper: + query_func: "k.GetParams" + cli: + cmd: "GetParams" diff --git a/x/ibc-hooks/utils/utils.go b/x/ibc-hooks/utils/utils.go index 11e307889..d252acde7 100644 --- a/x/ibc-hooks/utils/utils.go +++ b/x/ibc-hooks/utils/utils.go @@ -71,3 +71,13 @@ func DeriveIntermediateSender(channel, originalSender, bech32Prefix string) (str sender := sdk.AccAddress(senderHash32) return sdk.Bech32ifyAddressBytes(bech32Prefix, sender) } + +// IsAckError checks an IBC acknowledgement to see if it's an error. +// This is a replacement for ack.Success() which is currently not working on some circumstances +func IsAckError(acknowledgement []byte) bool { + var ackErr channeltypes.Acknowledgement_Error + if err := json.Unmarshal(acknowledgement, &ackErr); err == nil && len(ackErr.Error) > 0 { + return true + } + return false +} diff --git a/x/ibc-rate-limit/Beaker.toml b/x/ibc-rate-limit/Beaker.toml new file mode 100644 index 000000000..f3f1f298b --- /dev/null +++ b/x/ibc-rate-limit/Beaker.toml @@ -0,0 +1 @@ +name = "ibc-rate-limit" diff --git a/x/ibc-rate-limit/Cargo.lock b/x/ibc-rate-limit/Cargo.lock new file mode 100644 index 000000000..2041d2e98 --- /dev/null +++ b/x/ibc-rate-limit/Cargo.lock @@ -0,0 +1,933 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "anyhow" +version = "1.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base16ct" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64ct" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +dependencies = [ + "generic-array", +] + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "const-oid" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "722e23542a15cea1f65d4a1419c4cfd7a26706c70871a13a04238ca3f40f1661" + +[[package]] +name = "cosmwasm-crypto" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28376836c7677e1ea6d6656a754582e88b91e544ce22fae42956d5fe5549a958" +dependencies = [ + "digest 0.10.5", + "ed25519-zebra", + "k256", + "rand_core 0.6.4", + "thiserror", +] + +[[package]] +name = "cosmwasm-derive" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eb69f4f7a8a4bce68c8fbd3646238fede1e77056e4ea31c5b6bfc37b709eec3" +dependencies = [ + "syn", +] + +[[package]] +name = "cosmwasm-schema" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a227cfeb9a7152b26a354b1c990e930e962f75fd68f57ab5ae2ef888c8524292" +dependencies = [ + "cosmwasm-schema-derive", + "schemars", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cosmwasm-schema-derive" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3626cb42eef870de67f791e873711255325224d86f281bf628c42abd295f3a14" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "cosmwasm-std" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46bf9157d060abbc55152aeadcace799d03dc630575daa66604079a1206cb060" +dependencies = [ + "base64", + "cosmwasm-crypto", + "cosmwasm-derive", + "derivative", + "forward_ref", + "hex", + "schemars", + "serde", + "serde-json-wasm 0.4.1", + "thiserror", + "uint", +] + +[[package]] +name = "cosmwasm-storage" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b61fcfef87d15af0263e2e4d792af80355929674a3b4e29ffb3c898ec6e25852" +dependencies = [ + "cosmwasm-std", + "serde", +] + +[[package]] +name = "cpufeatures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +dependencies = [ + "libc", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "cw-multi-test" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3f9a8ab7c3c29ec93cb7a39ce4b14a05e053153b4a17ef7cf2246af1b7c087e" +dependencies = [ + "anyhow", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 0.13.4", + "cw-utils", + "derivative", + "itertools 0.10.5", + "prost 0.9.0", + "schemars", + "serde", + "thiserror", +] + +[[package]] +name = "cw-storage-plus" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "648b1507290bbc03a8d88463d7cd9b04b1fa0155e5eef366c4fa052b9caaac7a" +dependencies = [ + "cosmwasm-std", + "schemars", + "serde", +] + +[[package]] +name = "cw-storage-plus" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b6f91c0b94481a3e9ef1ceb183c37d00764f8751e39b45fc09f4d9b970d469" +dependencies = [ + "cosmwasm-std", + "schemars", + "serde", +] + +[[package]] +name = "cw-utils" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dbaecb78c8e8abfd6b4258c7f4fbeb5c49a5e45ee4d910d3240ee8e1d714e1b" +dependencies = [ + "cosmwasm-std", + "schemars", + "serde", + "thiserror", +] + +[[package]] +name = "cw2" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04cf4639517490dd36b333bbd6c4fbd92e325fd0acf4683b41753bc5eb63bfc1" +dependencies = [ + "cosmwasm-std", + "cw-storage-plus 0.13.4", + "schemars", + "serde", +] + +[[package]] +name = "der" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dd2ae565c0a381dde7fade45fce95984c568bdcb4700a4fdbe3175e0380b2f" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" +dependencies = [ + "block-buffer 0.10.3", + "crypto-common", + "subtle", +] + +[[package]] +name = "dyn-clone" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f94fa09c2aeea5b8839e414b7b841bf429fd25b9c522116ac97ee87856d88b2" + +[[package]] +name = "ecdsa" +version = "0.14.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" +dependencies = [ + "der", + "elliptic-curve", + "rfc6979", + "signature", +] + +[[package]] +name = "ed25519-zebra" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" +dependencies = [ + "curve25519-dalek", + "hashbrown", + "hex", + "rand_core 0.6.4", + "serde", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "either" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" + +[[package]] +name = "elliptic-curve" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +dependencies = [ + "base16ct", + "crypto-bigint", + "der", + "digest 0.10.5", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "ff" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "forward_ref" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e" + +[[package]] +name = "generic-array" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "group" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.5", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" + +[[package]] +name = "k256" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "sha2 0.10.6", +] + +[[package]] +name = "libc" +version = "0.2.137" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "osmosis-std" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b3792977036dc49cfc9af9fd7a6c021fd48dfffc8ebf09324201506c65a47a" +dependencies = [ + "chrono", + "cosmwasm-std", + "osmosis-std-derive", + "prost 0.11.2", + "prost-types", + "schemars", + "serde", + "serde-cw-value", +] + +[[package]] +name = "osmosis-std-derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c501f2b8ff88b1c60ab671d7b808e947f384fa2524fe4ec8c06f63ef4be29979" +dependencies = [ + "itertools 0.10.5", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pkcs8" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "proc-macro2" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" +dependencies = [ + "bytes", + "prost-derive 0.9.0", +] + +[[package]] +name = "prost" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0841812012b2d4a6145fae9a6af1534873c32aa67fff26bd09f8fa42c83f95a" +dependencies = [ + "bytes", + "prost-derive 0.11.2", +] + +[[package]] +name = "prost-derive" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" +dependencies = [ + "anyhow", + "itertools 0.10.5", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "prost-derive" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "164ae68b6587001ca506d3bf7f1000bfa248d0e1217b618108fba4ec1d0cc306" +dependencies = [ + "anyhow", + "itertools 0.10.5", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "prost-types" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "747761bc3dc48f9a34553bf65605cf6cb6288ba219f3450b4275dbd81539551a" +dependencies = [ + "bytes", + "prost 0.11.2", +] + +[[package]] +name = "quote" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rate-limiter" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-multi-test", + "cw-storage-plus 0.16.0", + "cw2", + "hex", + "itertools 0.13.0", + "osmosis-std", + "osmosis-std-derive", + "prost 0.11.2", + "schemars", + "serde", + "serde-json-wasm 0.5.2", + "sha2 0.10.6", + "thiserror", +] + +[[package]] +name = "rfc6979" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" +dependencies = [ + "crypto-bigint", + "hmac", + "zeroize", +] + +[[package]] +name = "ryu" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" + +[[package]] +name = "schemars" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a5fb6c61f29e723026dc8e923d94c694313212abbecbbe5f55a7748eec5b307" +dependencies = [ + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f188d036977451159430f3b8dc82ec76364a42b7e289c2b18a9a18f4470058e9" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn", +] + +[[package]] +name = "sec1" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "serde" +version = "1.0.147" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-cw-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75d32da6b8ed758b7d850b6c3c08f1d7df51a4df3cb201296e63e34a78e99d4" +dependencies = [ + "serde", +] + +[[package]] +name = "serde-json-wasm" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479b4dbc401ca13ee8ce902851b834893251404c4f3c65370a49e047a6be09a5" +dependencies = [ + "serde", +] + +[[package]] +name = "serde-json-wasm" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9213a07d53faa0b8dd81e767a54a8188a242fdb9be99ab75ec576a774bfdd7" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.147" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_derive_internals" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.5", +] + +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +dependencies = [ + "digest 0.10.5", + "rand_core 0.6.4", +] + +[[package]] +name = "spki" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "syn" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + +[[package]] +name = "uint" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a45526d29728d135c2900b0d30573fe3ee79fceb12ef534c7bb30e810a91b601" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unicode-ident" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "zeroize" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" diff --git a/x/ibc-rate-limit/Cargo.toml b/x/ibc-rate-limit/Cargo.toml new file mode 100644 index 000000000..9e4bf04d4 --- /dev/null +++ b/x/ibc-rate-limit/Cargo.toml @@ -0,0 +1,16 @@ +[workspace] + +members = [ + 'contracts/*', +] + +[profile.release] +codegen-units = 1 +debug = false +debug-assertions = false +incremental = false +lto = true +opt-level = 3 +overflow-checks = true +panic = 'abort' +rpath = false diff --git a/x/ibc-rate-limit/README.md b/x/ibc-rate-limit/README.md new file mode 100644 index 000000000..103bbd88e --- /dev/null +++ b/x/ibc-rate-limit/README.md @@ -0,0 +1,307 @@ +# IBC Rate Limit + +The IBC Rate Limit module is responsible for adding a governance-configurable rate limit to IBC transfers. +This is a safety control, intended to protect assets on osmosis in event of: + +* a bug/hack on osmosis +* a bug/hack on the counter-party chain +* a bug/hack in IBC itself + +This is done in exchange for a potential (one-way) bridge liveness tradeoff, in periods of high deposits or withdrawals. + +The architecture of this package is a minimal go package which implements an [IBC Middleware](https://github.com/cosmos/ibc-go/blob/f57170b1d4dd202a3c6c1c61dcf302b6a9546405/docs/ibc/middleware/develop.md) that wraps the [ICS20 transfer](https://ibc.cosmos.network/main/apps/transfer/overview.html) app, and calls into a cosmwasm contract. +The cosmwasm contract then has all of the actual IBC rate limiting logic. +The Cosmwasm code can be found in the [`contracts`](./contracts/) package, with bytecode findable in the [`bytecode`](./bytecode/) folder. The cosmwasm VM usage allows Osmosis chain governance to choose to change this safety control with no hard forks, via a parameter change proposal, a great mitigation for faster threat adaptavity. + +The status of the module is being in a state suitable for some initial governance settable rate limits for high value bridged assets. +Its not in its long term / end state for all channels by any means, but does act as a strong protection we +can instantiate today for high value IBC connections. + +## Motivation + +The motivation of IBC-rate-limit comes from the empirical observations of blockchain bridge hacks that a rate limit would have massively reduced the stolen amount of assets in: + +- [Polynetwork Bridge Hack ($611 million)](https://rekt.news/polynetwork-rekt/) +- [BNB Bridge Hack ($586 million)](https://rekt.news/bnb-bridge-rekt/) +- [Wormhole Bridge Hack ($326 million)](https://rekt.news/wormhole-rekt/) +- [Nomad Bridge Hack ($190 million)](https://rekt.news/nomad-rekt/) +- [Harmony Bridge Hack ($100 million)](https://rekt.news/harmony-rekt/) - (Would require rate limit + monitoring) +- [Dragonberry IBC bug](https://forum.cosmos.network/t/ibc-security-advisory-dragonberry/7702) (can't yet disclose amount at risk, but was saved due to being found first by altruistic Osmosis core developers) + +In the presence of a software bug on Osmosis, IBC itself, or on a counterparty chain, we would like to prevent the bridge from being fully depegged. +This stems from the idea that a 30% asset depeg is ~infinitely better than a 100% depeg. +Its _crazy_ that today these complex bridged assets can instantly go to 0 in event of bug. +The goal of a rate limit is to raise an alert that something has potentially gone wrong, allowing validators and developers to have time to analyze, react, and protect larger portions of user funds. + +The thesis of this is that, it is worthwhile to sacrifice liveness in the case of legitimate demand to send extreme amounts of funds, to prevent the terrible long-tail full fund risks. +Rate limits aren't the end-all of safety controls, they're merely the simplest automated one. More should be explored and added onto IBC! + +## Rate limit types + +We express rate limits in time-based periods. +This means, we set rate limits for (say) 6-hour, daily, and weekly intervals. +The rate limit for a given time period stores the relevant amount of assets at the start of the rate limit. +Rate limits are then defined on percentage terms of the asset. +The time windows for rate limits are currently _not_ rolling, they have discrete start/end times. + +We allow setting separate rate limits for the inflow and outflow of assets. +We do all of our rate limits based on the _net flow_ of assets on a channel pair. This prevents DOS issues, of someone repeatedly sending assets back and forth, to trigger rate limits and break liveness. + +We currently envision creating two kinds of rate limits: + +* Per denomination rate limits + - allows safety statements like "Only 30% of Stars on Osmosis can flow out in one day" or "The amount of Atom on Osmosis can at most double per day". +* Per channel rate limits + - Limit the total inflow and outflow on a given IBC channel, based on "USDC" equivalent, using Osmosis as the price oracle. + +We currently only implement per denomination rate limits for non-native assets. We do not yet implement channel based rate limits. + +Currently these rate limits automatically "expire" at the end of the quota duration. TODO: Think of better designs here. E.g. can we have a constant number of subsequent quotas start filled? Or perhaps harmonically decreasing amounts of next few quotas pre-filled? Halted until DAO override seems not-great. + +## Instantiating rate limits + +Today all rate limit quotas must be set manually by governance. +In the future, we should design towards some conservative rate limit to add as a safety-backstop automatically for channels. +Ideas for how this could look: + +* One month after a channel has been created, automatically add in some USDC-based rate limit +* One month after governance incentivizes an asset, add on a per-denomination rate limit. + +Definitely needs far more ideation and iteration! + +## Parameterizing the rate limit + +One element is we don't want any rate limit timespan that's too short, e.g. not enough time for humans to react to. So we wouldn't want a 1 hour rate limit, unless we think that if its hit, it could be assessed within an hour. + +### Handling rate limit boundaries + +We want to be safe against the case where say we have a daily rate limit ending at a given time, and an adversary attempts to attack near the boundary window. +We would not like them to be able to "double extract funds" by timing their extraction near a window boundary. + +Admittedly, not a lot of thought has been put into how to deal with this well. +Right now we envision simply handling this by saying if you want a quota of duration D, instead include two quotas of duration D, but offset by `D/2` from each other. + +Ideally we can change windows to be more 'rolling' in the future, to avoid this overhead and more cleanly handle the problem. (Perhaps rolling ~1 hour at a time) + +### Inflow parameterization + +The "Inflow" side of a rate limit is essentially protection against unforeseen bug on a counterparty chain. +This can be quite conservative (e.g. bridged amount doubling in one week). This covers a few cases: + +* Counter-party chain B having a token theft attack + - TODO: description of how this looks +* Counter-party chain B runaway mint + - TODO: description of how this looks +* IBC theft + - TODO: description of how this looks + +It does get more complex when the counterparty chain is itself a DEX, but this is still much more protection than nothing. + +### Outflow parameterization + +The "Outflow" side of a rate limit is protection against a bug on Osmosis OR IBC. +This has potential for much more user-frustrating issues, if set too low. +E.g. if there's some event that causes many people to suddenly withdraw many STARS or many USDC. + +So this parameterization has to contend with being a tradeoff of withdrawal liveness in high volatility periods vs being a crucial safety rail, in event of on-Osmosis bug. + +TODO: Better fill out + +### Example suggested parameterization + +## Code structure + +As mentioned at the beginning of the README, the go code is a relatively minimal ICS 20 wrapper, that dispatches relevant calls to a cosmwasm contract that implements the rate limiting functionality. + +### Go Middleware + +To achieve this, the middleware needs to implement the `porttypes.Middleware` interface and the +`porttypes.ICS4Wrapper` interface. This allows the middleware to send and receive IBC messages by wrapping +any IBC module, and be used as an ICS4 wrapper by a transfer module (for sending packets or writing acknowledgements). + +Of those interfaces, just the following methods have custom logic: + +* `ICS4Wrapper.SendPacket` forwards to contract, with intent of tracking of value sent via an ibc channel +* `Middleware.OnRecvPacket` forwards to contract, with intent of tracking of value received via an ibc channel +* `Middleware.OnAcknowledgementPacket` forwards to contract, with intent of undoing the tracking of a sent packet if the acknowledgment is not a success +* `OnTimeoutPacket` forwards to contract, with intent of undoing the tracking of a sent packet if the packet times out (is not relayed) + +All other methods from those interfaces are passthroughs to the underlying implementations. + +#### Parameters + +The middleware uses the following parameters: + +| Key | Type | +|-----------------|--------| +| ContractAddress | string | + +1. **ContractAddress** - + The contract address is the address of an instantiated version of the contract provided under `./contracts/` + +### Cosmwasm Contract Concepts + +Something to keep in mind with all of the code, is that we have to reason separately about every item in the following matrix: + +| Native Token | Non-Native Token | +|----------------------|--------------------------| +| Send Native Token | Send Non-Native Token | +| Receive Native Token | Receive Non-Native Token | +| Timeout Native Send | Timeout Non-native Send | + +(Error ACK can reuse the same code as timeout) + +TODO: Spend more time on sudo messages in the following description. We need to better describe how we map the quota concepts onto the code. +Need to describe how we get the quota beginning balance, and that its different for sends and receives. +Explain intracacies of tracking that a timeout and/or ErrorAck must appear from the same quota, else we ignore its update to the quotas. + + +The tracking contract uses the following concepts + +1. **RateLimit** - tracks the value flow transferred and the quota for a path. +2. **Path** - is a (denom, channel) pair. +3. **Flow** - tracks the value that has moved through a path during the current time window. +4. **Quota** - is the percentage of the denom's total value that can be transferred through the path in a given period of time (duration) + +#### Messages + +The contract specifies the following messages: + +##### Query + +* GetQuotas - Returns the quotas for a path + +##### Exec + +* AddPath - Adds a list of quotas for a path +* RemovePath - Removes a path +* ResetPathQuota - If a rate limit has been reached, the contract's governance address can reset the quota so that transfers are allowed again + +##### Sudo + +Sudo messages can only be executed by the chain. + +* SendPacket - Increments the amount used out of the send quota and checks that the send is allowed. If it isn't, it will return a RateLimitExceeded error +* RecvPacket - Increments the amount used out of the receive quota and checks that the receive is allowed. If it isn't, it will return a RateLimitExceeded error +* UndoSend - If a send has failed, the undo message is used to remove its cost from the send quota + +All of these messages receive the packet from the chain and extract the necessary information to process the packet and determine if it should be the rate limited. + +### Necessary information + +To determine if a packet should be rate limited, we need: + +* Channel: The channel on the Osmosis side: `packet.SourceChannel` for sends, and `packet.DestinationChannel` for receives. +* Denom: The denom of the token being transferred as known on the Osmosis side (more on that below) +* Channel Value: The total value of the channel denominated in `Denom` (i.e.: channel-17 is worth 10k osmo). +* Funds: the amount being transferred + +#### Notes on Channel +The contract also supports quotas on a custom channel called "any" that is checked on every transfer. If either the +transfer channel or the "any" channel have a quota that has been filled, the transaction will be rate limited. + +#### Notes on Denom +We always use the the denom as represented on Osmosis. For native assets that is the local denom, and for non-native +assets it's the "ibc" prefix and the sha256 hash of the denom trace (`ibc/...`). + +##### Sends + +For native denoms, we can just use the denom in the packet. If the denom is invalid, it will fail somewhere else along the chain. Example result: `uosmo` + +For non-native denoms, the contract needs to hash the denom trace and append it to the `ibc/` prefix. The +contract always receives the parsed denom (i.e.: `transfer/channel-32/uatom` instead of +`ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2`). This is because of the order in which +the middleware is called. When sending a non-native denom, the packet contains `transfer/source-channel/denom` as it +is built on the `relay.SendTransfer()` in the transfer module and then passed to the middleware. Example result: `ibc/` + +##### Receives + +This behaves slightly different if the asset is an osmosis asset that was sent to the counterparty and is being +returned to the chain, or if the asset is being received by the chain and originates on the counterparty. In ibc this +is called being a "source" or a "sink" respectively. + +If the chain is a sink for the denom, we build the local denom by prefixing the port and the channel +(`transfer/local-channel`) and hashing that denom. Example result: `ibc/` + +If the chain is the source for the denom, there are two possibilities: + +* The token is a native token, in which case we just remove the prefix added by the counterparty. Example result: `uosmo` +* The token is a non-native token, in which case we remove the extra prefix and hash it. Example result `ibc/` + +#### Notes on Channel Value +We have iterated on different strategies for calculating the channel value. Our preferred strategy is the following: +* For non-native tokens (`ibc/...`), the channel value should be the supply of those tokens in Osmosis +* For native tokens, the channel value should be the total amount of tokens in escrow across all ibc channels + +The later ensures the limits are lower and represent the amount of native tokens that exist outside Osmosis. This is +beneficial as we assume the majority of native tokens exist on the native chain and the amount "normal" ibc transfers is +proportional to the tokens that have left the chain. + +This strategy cannot be implemented at the moment because IBC does not track the amount of tokens in escrow across +all channels ([github issue](https://github.com/cosmos/ibc-go/issues/2664)). Instead, we use the current supply on +Osmosis for all denoms (i.e.: treat native and non-native tokens the same way). Once that ticket is fixed, we will +update this strategy. + +##### Caching + +The channel value varies constantly. To have better predictability, and avoid issues of the value growing if there is +a potential infinite mint bug, we cache the channel value at the beginning of the period for every quota. + +This means that if we have a daily quota of 1% of the osmo supply, and the channel value is 1M osmo at the beginning of +the quota, no more than 100k osmo can transferred during that day. If 10M osmo were to be minted or IBC'd in during that +period, the quota will not increase until the period expired. Then it will be 1% of the new channel value (~11M) + +### Integration + +The rate limit middleware wraps the `transferIBCModule` and is added as the entry route for IBC transfers. + +The module is also provided to the underlying `transferIBCModule` as its `ICS4Wrapper`; previously, this would have +pointed to a channel, which also implements the `ICS4Wrapper` interface. + +This integration can be seen in [osmosis/app/keepers/keepers.go](https://github.com/osmosis-labs/osmosis/blob/main/app/keepers/keepers.go) + +## Testing strategy + + +A general testing strategy is as follows: + +* Setup two chains. +* Send some tokens from A->B and some from B->A (so that there are IBC tokens to play with in both sides) +* Add the rate limiter on A with low limits (i.e. 1% of supply) +* Test Function for chains A' and B' and denom d + * Send some d tokens from A' to B' and get close to the limit. + * Do the same transfer making sure the amount is above the quota and verify it fails with the rate limit error + * Wait until the reset time has passed, and send again. The transfer should now succeed +* Repeat the above test for the following combination of chains and tokens: `(A,B,a)`, `(B,A,a)`, `(A,B,b)`, `(B,A,b)`, + where `a` and `b` are native tokens to chains A and B respectively. + +For more comprehensive tests we can also: +* Add a third chain C and make sure everything works properly for C tokens that have been transferred to A and to B +* Test that the contracts gov address can reset rate limits if the quota has been hit +* Test the queries for getting information about the state of the quotas +* Test that rate limit symmetries hold (i.e.: sending the a token through a rate-limited channel and then sending back + reduces the rate limits by the same amount that it was increased during the first send) +* Ensure that the channels between the test chains have different names (A->B="channel-0", B->A="channel-1", for example) + +## Known Future work + +Items that have been highlighted above: + +* Making automated rate limits get added for channels, instead of manual configuration only +* Improving parameterization strategies / data analysis +* Adding the USDC based rate limits +* We need better strategies for how rate limits "expire". + +Not yet highlighted + +* Making monitoring tooling to know when approaching rate limiting and when they're hit +* Making tooling to easily give us summaries we can use, to reason about "bug or not bug" in event of rate limit being hit +* Enabling ways to pre-declare large transfers so as to not hit rate limits. + * Perhaps you can on-chain declare intent to send these assets with a large delay, that raises monitoring but bypasses rate limits? + * Maybe contract-based tooling to split up the transfer suffices? +* Strategies to account for high volatility periods without hitting rate limits + * Can imagine "Hop network" style markets emerging + * Could imagine tieng it into looking at AMM volatility, or off-chain oracles + * but these are both things we should be wary of security bugs in. + * Maybe [constraint based programming with tracking of provenance](https://youtu.be/HB5TrK7A4pI?t=2852) as a solution +* Analyze changing denom-based rate limits, to just overall withdrawal amount for Osmosis \ No newline at end of file diff --git a/x/ibc-rate-limit/bytecode/rate_limiter.wasm b/x/ibc-rate-limit/bytecode/rate_limiter.wasm new file mode 100644 index 0000000000000000000000000000000000000000..d3300802df224ad147f00776abd8956e20c10b4a GIT binary patch literal 355373 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�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 z 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%0A--2e=Z`)4 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 literal 0 HcmV?d00001 diff --git a/x/ibc-rate-limit/client/cli/query.go b/x/ibc-rate-limit/client/cli/query.go new file mode 100644 index 000000000..685dd8c2a --- /dev/null +++ b/x/ibc-rate-limit/client/cli/query.go @@ -0,0 +1,57 @@ +package cli + +import ( + "fmt" + + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" +) + +// GetQueryCmd returns the cli query commands for this module +func GetQueryCmd() *cobra.Command { + // Group ibc-rate-limit queries under a subcommand + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand( + GetParams(), + ) + + return cmd +} + +// GetParams returns the params for the module +func GetParams() *cobra.Command { + cmd := &cobra.Command{ + Use: "params [flags]", + Short: "Get the params for the x/ibc-rate-limit module", + Args: cobra.ExactArgs(0), + RunE: func(cmd *cobra.Command, _ []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + res, err := queryClient.Params(cmd.Context(), &types.QueryParamsRequest{}) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/x/ibc-rate-limit/client/grpc/grpc_query.go b/x/ibc-rate-limit/client/grpc/grpc_query.go new file mode 100644 index 000000000..c43c18349 --- /dev/null +++ b/x/ibc-rate-limit/client/grpc/grpc_query.go @@ -0,0 +1,31 @@ +package grpc + +// THIS FILE IS GENERATED CODE, DO NOT EDIT +// SOURCE AT `proto/osmosis/ibcratelimit/v1beta1/query.yml` + +import ( + context "context" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client" + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client/queryproto" +) + +type Querier struct { + Q client.Querier +} + +var _ queryproto.QueryServer = Querier{} + +func (q Querier) Params(grpcCtx context.Context, + req *queryproto.ParamsRequest, +) (*queryproto.ParamsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + ctx := sdk.UnwrapSDKContext(grpcCtx) + return q.Q.Params(ctx, *req) +} diff --git a/x/ibc-rate-limit/client/query_proto_wrap.go b/x/ibc-rate-limit/client/query_proto_wrap.go new file mode 100644 index 000000000..8461ecda8 --- /dev/null +++ b/x/ibc-rate-limit/client/query_proto_wrap.go @@ -0,0 +1,21 @@ +package client + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + ibcratelimit "github.com/neutron-org/neutron/v4/x/ibc-rate-limit" + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client/queryproto" +) + +// This file should evolve to being code gen'd, off of `proto/twap/v1beta/query.yml` + +type Querier struct { + K ibcratelimit.ICS4Wrapper +} + +func (q Querier) Params(ctx sdk.Context, + req queryproto.ParamsRequest, +) (*queryproto.ParamsResponse, error) { + params := q.K.GetParams(ctx) + return &queryproto.ParamsResponse{Params: params}, nil +} diff --git a/x/ibc-rate-limit/client/queryproto/query.pb.go b/x/ibc-rate-limit/client/queryproto/query.pb.go new file mode 100644 index 000000000..6a711f464 --- /dev/null +++ b/x/ibc-rate-limit/client/queryproto/query.pb.go @@ -0,0 +1,544 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: osmosis/ibcratelimit/v1beta1/query.proto + +package queryproto + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + types "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// ParamsRequest is the request type for the Query/Params RPC method. +type ParamsRequest struct { +} + +func (m *ParamsRequest) Reset() { *m = ParamsRequest{} } +func (m *ParamsRequest) String() string { return proto.CompactTextString(m) } +func (*ParamsRequest) ProtoMessage() {} +func (*ParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_6904fea69f32464e, []int{0} +} +func (m *ParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ParamsRequest.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 *ParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ParamsRequest.Merge(m, src) +} +func (m *ParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *ParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ParamsRequest proto.InternalMessageInfo + +// aramsResponse is the response type for the Query/Params RPC method. +type ParamsResponse struct { + // params defines the parameters of the module. + Params types.Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *ParamsResponse) Reset() { *m = ParamsResponse{} } +func (m *ParamsResponse) String() string { return proto.CompactTextString(m) } +func (*ParamsResponse) ProtoMessage() {} +func (*ParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_6904fea69f32464e, []int{1} +} +func (m *ParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ParamsResponse.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 *ParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ParamsResponse.Merge(m, src) +} +func (m *ParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *ParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ParamsResponse proto.InternalMessageInfo + +func (m *ParamsResponse) GetParams() types.Params { + if m != nil { + return m.Params + } + return types.Params{} +} + +func init() { + proto.RegisterType((*ParamsRequest)(nil), "osmosis.ibcratelimit.v1beta1.ParamsRequest") + proto.RegisterType((*ParamsResponse)(nil), "osmosis.ibcratelimit.v1beta1.ParamsResponse") +} + +func init() { + proto.RegisterFile("osmosis/ibcratelimit/v1beta1/query.proto", fileDescriptor_6904fea69f32464e) +} + +var fileDescriptor_6904fea69f32464e = []byte{ + // 324 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xcf, 0x4a, 0x2b, 0x31, + 0x18, 0xc5, 0x27, 0x97, 0x6b, 0x17, 0x23, 0x2a, 0x0c, 0x2e, 0xa4, 0x94, 0x28, 0x45, 0xa4, 0xfe, + 0x69, 0x42, 0x2b, 0xf8, 0x00, 0x5d, 0xb8, 0xd6, 0xe2, 0xca, 0x95, 0xc9, 0x10, 0x62, 0x60, 0x26, + 0xdf, 0x74, 0x92, 0x16, 0xdd, 0xfa, 0x04, 0x42, 0xd7, 0xbe, 0x4f, 0x97, 0x05, 0x37, 0xae, 0x44, + 0x5a, 0x1f, 0x44, 0x26, 0x49, 0x4b, 0x11, 0x29, 0x5d, 0xcd, 0x24, 0xf9, 0x9d, 0xf3, 0x9d, 0x9c, + 0xc4, 0x2d, 0x30, 0x39, 0x18, 0x65, 0xa8, 0xe2, 0x69, 0xc9, 0xac, 0xc8, 0x54, 0xae, 0x2c, 0x1d, + 0x75, 0xb8, 0xb0, 0xac, 0x43, 0x07, 0x43, 0x51, 0x3e, 0x93, 0xa2, 0x04, 0x0b, 0x49, 0x23, 0x90, + 0x64, 0x95, 0x24, 0x81, 0xac, 0xef, 0x4b, 0x90, 0xe0, 0x40, 0x5a, 0xfd, 0x79, 0x4d, 0xbd, 0x21, + 0x01, 0x64, 0x26, 0x28, 0x2b, 0x14, 0x65, 0x5a, 0x83, 0x65, 0x56, 0x81, 0x36, 0xe1, 0xf4, 0x2c, + 0x75, 0x96, 0x94, 0x33, 0x23, 0xfc, 0xa8, 0xe5, 0xe0, 0x82, 0x49, 0xa5, 0x1d, 0x1c, 0xd8, 0xd3, + 0xb5, 0x39, 0x0b, 0x56, 0xb2, 0x3c, 0xd8, 0x36, 0xf7, 0xe2, 0x9d, 0x1b, 0xb7, 0xee, 0x8b, 0xc1, + 0x50, 0x18, 0xdb, 0xbc, 0x8b, 0x77, 0x17, 0x1b, 0xa6, 0x00, 0x6d, 0x44, 0xd2, 0x8b, 0x6b, 0x5e, + 0x72, 0x80, 0x8e, 0x50, 0x6b, 0xbb, 0x7b, 0x4c, 0xd6, 0x5d, 0x8e, 0x78, 0x75, 0xef, 0xff, 0xe4, + 0xf3, 0x30, 0xea, 0x07, 0x65, 0xf7, 0x0d, 0xc5, 0x5b, 0xb7, 0x55, 0xe8, 0x64, 0x8c, 0xe2, 0x9a, + 0x47, 0x92, 0xf3, 0x4d, 0x8c, 0x42, 0xae, 0xfa, 0xc5, 0x66, 0xb0, 0xcf, 0xdc, 0x24, 0x2f, 0xef, + 0xdf, 0xe3, 0x7f, 0xad, 0xe4, 0x84, 0xae, 0x54, 0xd1, 0xae, 0x64, 0xed, 0xbf, 0xca, 0xe8, 0x3d, + 0x4c, 0x66, 0x18, 0x4d, 0x67, 0x18, 0x7d, 0xcd, 0x30, 0x7a, 0x9d, 0xe3, 0x68, 0x3a, 0xc7, 0xd1, + 0xc7, 0x1c, 0x47, 0xf7, 0xd7, 0x52, 0xd9, 0xc7, 0x21, 0x27, 0x29, 0xe4, 0x0b, 0xaf, 0x76, 0xc6, + 0xb8, 0x59, 0x1a, 0x8f, 0xba, 0x57, 0xf4, 0xe9, 0xb7, 0x7d, 0x9a, 0x29, 0xa1, 0xad, 0x7f, 0x27, + 0x57, 0x34, 0xaf, 0xb9, 0xcf, 0xe5, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3f, 0x19, 0x6c, 0x13, + 0x44, 0x02, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// 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 { + // Params defines a gRPC query method that returns the ibc-rate-limit module's + // parameters. + Params(ctx context.Context, in *ParamsRequest, opts ...grpc.CallOption) (*ParamsResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *ParamsRequest, opts ...grpc.CallOption) (*ParamsResponse, error) { + out := new(ParamsResponse) + err := c.cc.Invoke(ctx, "/osmosis.ibcratelimit.v1beta1.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // Params defines a gRPC query method that returns the ibc-rate-limit module's + // parameters. + Params(context.Context, *ParamsRequest) (*ParamsResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) Params(ctx context.Context, req *ParamsRequest) (*ParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.ibcratelimit.v1beta1.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*ParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "osmosis.ibcratelimit.v1beta1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "osmosis/ibcratelimit/v1beta1/query.proto", +} + +func (m *ParamsRequest) 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 *ParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *ParamsResponse) 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 *ParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *ParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ParamsRequest) 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 ErrIntOverflowQuery + } + 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: ParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ParamsResponse) 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 ErrIntOverflowQuery + } + 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: ParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/ibc-rate-limit/client/queryproto/query.pb.gw.go b/x/ibc-rate-limit/client/queryproto/query.pb.gw.go new file mode 100644 index 000000000..cba553701 --- /dev/null +++ b/x/ibc-rate-limit/client/queryproto/query.pb.gw.go @@ -0,0 +1,153 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: osmosis/ibcratelimit/v1beta1/query.proto + +/* +Package queryproto is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package queryproto + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"osmosis", "ibc-rate-limit", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Query_Params_0 = runtime.ForwardResponseMessage +) diff --git a/x/ibc-rate-limit/contracts/rate-limiter/.cargo/config b/x/ibc-rate-limit/contracts/rate-limiter/.cargo/config new file mode 100644 index 000000000..f31de6c2a --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/.cargo/config @@ -0,0 +1,3 @@ +[alias] +wasm = "build --release --target wasm32-unknown-unknown" +unit-test = "test --lib" diff --git a/x/ibc-rate-limit/contracts/rate-limiter/Cargo.toml b/x/ibc-rate-limit/contracts/rate-limiter/Cargo.toml new file mode 100644 index 000000000..1c8330d32 --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/Cargo.toml @@ -0,0 +1,52 @@ +[package] +name = "rate-limiter" +version = "0.1.0" +authors = ["Nicolas Lara "] +edition = "2021" + +exclude = [ + # Those files are rust-optimizer artifacts. You might want to commit them for convenience but they should not be part of the source code publication. + "contract.wasm", + "hash.txt", +] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[lib] +crate-type = ["cdylib", "rlib"] + +[features] +# for more explicit tests, cargo test --features=backtraces +backtraces = ["cosmwasm-std/backtraces"] +# use library feature to disable all instantiate/execute/query exports +library = [] +# Use the verbose responses feature if you want to include information about +# the remaining quotas in the SendPacket/RecvPacket responses +verbose_responses = [] + +[package.metadata.scripts] +optimize = """docker run --rm -v "$(pwd)":/code \ + --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \ + --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ + cosmwasm/rust-optimizer:0.12.6 +""" + +[dependencies] +cosmwasm-std = { version = "1.1.5", features = ["stargate", "cosmwasm_1_1"]} +cosmwasm-schema = "1.1.5" +cosmwasm-storage = "1.1.5" +cw-storage-plus = "0.16.0" +cw2 = "0.13.2" +schemars = "0.8.8" +serde = { version = "1.0.137", default-features = false, features = ["derive"] } +thiserror = { version = "1.0.31" } +prost = {version = "0.11.2", default-features = false, features = ["prost-derive"]} +osmosis-std-derive = {version = "0.12.0"} +osmosis-std = "0.12.0" +sha2 = "0.10.6" +hex = "0.4.3" + +[dev-dependencies] +cw-multi-test = "0.13.2" +serde-json-wasm = "0.5.2" +itertools = "0.13" \ No newline at end of file diff --git a/x/ibc-rate-limit/contracts/rate-limiter/examples/schema.rs b/x/ibc-rate-limit/contracts/rate-limiter/examples/schema.rs new file mode 100644 index 000000000..954edd462 --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/examples/schema.rs @@ -0,0 +1,13 @@ +use cosmwasm_schema::write_api; + +use rate_limiter::msg::{ExecuteMsg, InstantiateMsg, MigrateMsg, QueryMsg, SudoMsg}; + +fn main() { + write_api! { + instantiate: InstantiateMsg, + query: QueryMsg, + execute: ExecuteMsg, + sudo: SudoMsg, + migrate: MigrateMsg, + } +} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/blocking.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/blocking.rs new file mode 100644 index 000000000..936750c10 --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/blocking.rs @@ -0,0 +1,150 @@ +use cosmwasm_std::Deps; + +use crate::{ + packet::Packet, + state::{flow::FlowType, storage::ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM}, + ContractError, +}; + +pub fn check_restricted_denoms( + deps: Deps, + packet: &Packet, + direction: &FlowType, +) -> Result<(), ContractError> { + // we are only limiting out-flow. In-flow is always allowed + if matches!(direction, FlowType::In) { + return Ok(()); + } + + let channels = ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM + .load(deps.storage, packet.data.denom.to_string()) + .unwrap_or_default(); + + // if no channels are blocked, we can return early + if channels.is_empty() { + return Ok(()); + } + + // Only channels in the list are allowed. If the source channel is not in the list, we reject the packet + if !channels.contains(&packet.source_channel) { + return Err(ContractError::ChannelBlocked { + denom: packet.data.denom.clone(), + channel: packet.source_channel.to_string(), + }); + } + + Ok(()) +} + +#[cfg(test)] +mod tests { + use super::*; + use cosmwasm_std::testing::mock_dependencies; + use cosmwasm_std::Uint256; + + #[test] + fn test_in_flow_allowed() { + let deps = mock_dependencies(); + let packet = Packet::mock( + "src_channel".to_string(), + "dest_channel".to_string(), + "denom1".to_string(), + Uint256::from(100u128), + ); + let flow_type = FlowType::In; + + let result = check_restricted_denoms(deps.as_ref(), &packet, &flow_type); + assert!(result.is_ok()); + } + + #[test] + fn test_out_flow_unrestricted_denom() { + let deps = mock_dependencies(); + let packet = Packet::mock( + "src_channel".to_string(), + "dest_channel".to_string(), + "denom2".to_string(), + Uint256::from(100u128), + ); + let flow_type = FlowType::Out; + + // denom2 is not in the restricted list + let result = check_restricted_denoms(deps.as_ref(), &packet, &flow_type); + assert!(result.is_ok()); + } + + #[test] + fn test_out_flow_restricted_denom_allowed_channel() { + let mut deps = mock_dependencies(); + let packet = Packet::mock( + "src_channel_allowed".to_string(), + "dest_channel".to_string(), + "denom1".to_string(), + Uint256::from(100u128), + ); + let flow_type = FlowType::Out; + + // Add denom1 to restricted list with allowed channels + ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM + .save( + deps.as_mut().storage, + "denom1".to_string(), + &vec!["src_channel_allowed".to_string()], + ) + .unwrap(); + + let result = check_restricted_denoms(deps.as_ref(), &packet, &flow_type); + assert!(result.is_ok()); + } + + #[test] + fn test_out_flow_restricted_denom_blocked_channel() { + let mut deps = mock_dependencies(); + let packet = Packet::mock( + "src_channel_blocked".to_string(), + "dest_channel".to_string(), + "denom1".to_string(), + Uint256::from(100u128), + ); + let flow_type = FlowType::Out; + + // Add denom1 to restricted list with allowed channels + ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM + .save( + deps.as_mut().storage, + "denom1".to_string(), + &vec!["src_channel_allowed".to_string()], + ) + .unwrap(); + + let result = check_restricted_denoms(deps.as_ref(), &packet, &flow_type); + assert!(result.is_err()); + + if let Err(ContractError::ChannelBlocked { denom, channel }) = result { + assert_eq!(denom, "denom1".to_string()); + assert_eq!(channel, "src_channel_blocked".to_string()); + } else { + panic!("Expected ChannelBlocked error"); + } + } + + #[test] + fn test_out_flow_restricted_denom_empty_channel_list() { + let mut deps = mock_dependencies(); + let packet = Packet::mock( + "src_channel_blocked".to_string(), + "dest_channel".to_string(), + "denom1".to_string(), + Uint256::from(100u128), + ); + let flow_type = FlowType::Out; + + // Add denom1 to restricted list but with an empty allowed channels list + ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM + .save(deps.as_mut().storage, "denom1".to_string(), &vec![]) + .unwrap(); + + let result = check_restricted_denoms(deps.as_ref(), &packet, &flow_type); + assert!(result.is_ok()); + } +} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/contract.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/contract.rs new file mode 100644 index 000000000..d046d111c --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/contract.rs @@ -0,0 +1,203 @@ +#[cfg(not(feature = "library"))] +use cosmwasm_std::entry_point; +use cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult}; +use cw2::{get_contract_version, set_contract_version}; + +use crate::error::ContractError; +use crate::message_queue::{must_queue_message, queue_message}; +use crate::msg::{ExecuteMsg, InstantiateMsg, MigrateMsg, QueryMsg, SudoMsg}; +use crate::rbac::can_invoke_message; +use crate::state::rbac::Roles; +use crate::state::storage::RBAC_PERMISSIONS; +use crate::state::{ + flow::FlowType, + storage::{GOVMODULE, IBCMODULE}, +}; +use crate::{execute, message_queue, query, rbac, sudo}; + +// version info for migration info +const CONTRACT_NAME: &str = "crates.io:rate-limiter"; +const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION"); + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn instantiate( + mut deps: DepsMut, + env: Env, + _info: MessageInfo, + msg: InstantiateMsg, +) -> Result { + set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; + IBCMODULE.save(deps.storage, &msg.ibc_module)?; + GOVMODULE.save(deps.storage, &msg.gov_module)?; + // grant the gov address full permissions + RBAC_PERMISSIONS.save( + deps.storage, + msg.gov_module.to_string(), + &Roles::all_roles().into_iter().collect(), + )?; + + execute::add_new_paths(&mut deps, msg.paths, env.block.time)?; + + Ok(Response::new() + .add_attribute("method", "instantiate") + .add_attribute("ibc_module", msg.ibc_module.to_string()) + .add_attribute("gov_module", msg.gov_module.to_string())) +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn execute( + mut deps: DepsMut, + env: Env, + info: MessageInfo, + msg: ExecuteMsg, +) -> Result { + // check to see if special permissions are required to invoke the message, and that the sender has the required permissions + can_invoke_message(&deps, &info, &msg)?; + // check to see if messages sent by MessageInfo::sender require a timelock + // + // if a timelock is required the message must be queued for execution + + if msg.skip_queue() { + match_execute(&mut deps, &env, msg) + } else if must_queue_message(&mut deps, &info) { + let message_id = queue_message(&mut deps, env, msg, info)?; + Ok(Response::new().add_attribute("message.id", message_id)) + } else { + match_execute(&mut deps, &env, msg) + } +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn sudo(deps: DepsMut, env: Env, msg: SudoMsg) -> Result { + match msg { + SudoMsg::SendPacket { + packet, + #[cfg(test)] + channel_value_mock, + } => sudo::process_packet( + deps, + packet, + FlowType::Out, + env.block.time, + #[cfg(test)] + channel_value_mock, + ), + SudoMsg::RecvPacket { + packet, + #[cfg(test)] + channel_value_mock, + } => sudo::process_packet( + deps, + packet, + FlowType::In, + env.block.time, + #[cfg(test)] + channel_value_mock, + ), + SudoMsg::UndoSend { packet } => sudo::undo_send(deps, packet), + } +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { + match msg { + QueryMsg::GetQuotas { channel_id, denom } => { + query::get_quotas(deps.storage, channel_id, denom) + } + QueryMsg::GetRoleOwners => query::get_role_owners(deps.storage), + QueryMsg::GetRoles { owner } => query::get_roles(deps.storage, owner), + QueryMsg::GetMessageIds => query::get_message_ids(deps.storage), + QueryMsg::GetMessage { id } => query::get_queued_message(deps.storage, id), + QueryMsg::GetDenomRestrictions { denom } => { + query::get_denom_restrictions(deps.storage, denom) + } + } +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn migrate(deps: DepsMut, _env: Env, _msg: MigrateMsg) -> Result { + let contract_version = get_contract_version(deps.storage)?; + + // check contract version, and apply version specific migrations + if contract_version.version.eq("0.1.0") { + let gov_module = GOVMODULE.load(deps.storage)?; + + // grant the gov address full permissions + RBAC_PERMISSIONS.save( + deps.storage, + gov_module.to_string(), + &Roles::all_roles().into_iter().collect(), + )?; + } + + // update contract version + set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; + + Ok(Response::new() + .add_attribute("method", "migrate") + .add_attribute("version.old", contract_version.version) + .add_attribute("version.new", CONTRACT_VERSION)) +} + +/// Processes `msg` and executes the corresponding message handler +/// +/// This shouldn't be called directly and instead invoked by the `execute` function, or internally via message queue processing +pub(crate) fn match_execute( + deps: &mut DepsMut, + env: &Env, + msg: ExecuteMsg, +) -> Result { + match msg { + ExecuteMsg::AddPath { + channel_id, + denom, + quotas, + } => execute::try_add_path(deps, channel_id, denom, quotas, env.block.time), + ExecuteMsg::RemovePath { channel_id, denom } => { + execute::try_remove_path(deps, channel_id, denom) + } + ExecuteMsg::ResetPathQuota { + channel_id, + denom, + quota_id, + } => execute::try_reset_path_quota(deps, channel_id, denom, quota_id, env.block.time), + ExecuteMsg::SetDenomRestrictions { + denom, + allowed_channels, + } => execute::set_denom_restrictions(deps, denom, allowed_channels), + ExecuteMsg::UnsetDenomRestrictions { denom } => { + execute::unset_denom_restrictions(deps, denom) + } + ExecuteMsg::GrantRole { signer, roles } => { + rbac::grant_role(deps, signer, roles)?; + Ok(Response::new().add_attribute("method", "grant_role")) + } + ExecuteMsg::RevokeRole { signer, roles } => { + rbac::revoke_role(deps, signer, roles)?; + Ok(Response::new().add_attribute("method", "revoke_role")) + } + ExecuteMsg::EditPathQuota { + channel_id, + denom, + quota, + } => { + execute::edit_path_quota(deps, channel_id, denom, quota)?; + Ok(Response::new().add_attribute("method", "edit_path_quota")) + } + ExecuteMsg::RemoveMessage { message_id } => { + message_queue::remove_message(deps, message_id)?; + Ok(Response::new().add_attribute("method", "remove_message")) + } + ExecuteMsg::SetTimelockDelay { signer, hours } => { + crate::rbac::set_timelock_delay(deps, signer.clone(), hours)?; + Ok(Response::new() + .add_attribute("method", "set_timelock_delay") + .add_attribute("signer", signer) + .add_attribute("hours", hours.to_string())) + } + ExecuteMsg::ProcessMessages { count, message_ids } => { + message_queue::process_message_queue(deps, env, count, message_ids)?; + Ok(Response::new().add_attribute("method", "process_messages")) + } + } +} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs new file mode 100644 index 000000000..35d346dbf --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs @@ -0,0 +1,450 @@ +#![cfg(test)] + +use crate::packet::Packet; +use crate::state::rbac::Roles; +use crate::{contract::*, test_msg_recv, test_msg_send, ContractError}; +use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info}; +use cosmwasm_std::{from_binary, Addr, Attribute, MessageInfo, Uint256}; + +use crate::helpers::tests::verify_query_response; +use crate::msg::{InstantiateMsg, MigrateMsg, PathMsg, QueryMsg, QuotaMsg, SudoMsg}; +use crate::state::flow::tests::RESET_TIME_WEEKLY; +use crate::state::rate_limit::RateLimit; +use crate::state::storage::{GOVMODULE, IBCMODULE, RATE_LIMIT_TRACKERS, RBAC_PERMISSIONS}; +const IBC_ADDR: &str = "osmo1vz5e6tzdjlzy2f7pjvx0ecv96h8r4m2y92thdm"; +const GOV_ADDR: &str = "osmo1tzz5zf2u68t00un2j4lrrnkt2ztd46kfzfp58r"; + +#[test] // Tests we ccan instantiate the contract and that the owners are set correctly +fn proper_instantiation() { + let mut deps = mock_dependencies(); + + let msg = InstantiateMsg { + gov_module: Addr::unchecked(GOV_ADDR), + ibc_module: Addr::unchecked(IBC_ADDR), + paths: vec![], + }; + let info = mock_info(IBC_ADDR, &[]); + + // we can just call .unwrap() to assert this was a success + let res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); + assert_eq!(0, res.messages.len()); + + // The ibc and gov modules are properly stored + assert_eq!(IBCMODULE.load(deps.as_ref().storage).unwrap(), IBC_ADDR); + assert_eq!(GOVMODULE.load(deps.as_ref().storage).unwrap(), GOV_ADDR); + + let permissions = RBAC_PERMISSIONS + .load(&mut deps.storage, GOV_ADDR.to_string()) + .unwrap(); + for permission in Roles::all_roles() { + assert!(permissions.contains(&permission)); + } +} + +#[test] // Tests that when a packet is transferred, the peropper allowance is consummed +fn consume_allowance() { + let mut deps = mock_dependencies(); + + let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); + let msg = InstantiateMsg { + gov_module: Addr::unchecked(GOV_ADDR), + ibc_module: Addr::unchecked(IBC_ADDR), + paths: vec![PathMsg { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quotas: vec![quota], + }], + }; + let info = mock_info(GOV_ADDR, &[]); + let _res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); + + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom") , + channel_value: 3_300_u32.into(), + funds: 300_u32.into() + ); + let res = sudo(deps.as_mut(), mock_env(), msg).unwrap(); + + let Attribute { key, value } = &res.attributes[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "300"); + + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_300_u32.into(), + funds: 300_u32.into() + ); + let err = sudo(deps.as_mut(), mock_env(), msg).unwrap_err(); + assert!(matches!(err, ContractError::RateLimitExceded { .. })); +} + +#[test] // Tests that the balance of send and receive is maintained (i.e: recives are sustracted from the send allowance and sends from the receives) +fn symetric_flows_dont_consume_allowance() { + let mut deps = mock_dependencies(); + + let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); + let msg = InstantiateMsg { + gov_module: Addr::unchecked(GOV_ADDR), + ibc_module: Addr::unchecked(IBC_ADDR), + paths: vec![PathMsg { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quotas: vec![quota], + }], + }; + let info = mock_info(GOV_ADDR, &[]); + let _res = instantiate(deps.as_mut(), mock_env(), info.clone(), msg).unwrap(); + + let send_msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_300_u32.into(), + funds: 300_u32.into() + ); + let recv_msg = test_msg_recv!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_000_u32.into(), + funds: 300_u32.into() + ); + + let res = sudo(deps.as_mut(), mock_env(), send_msg.clone()).unwrap(); + let Attribute { key, value } = &res.attributes[3]; + assert_eq!(key, "weekly_used_in"); + assert_eq!(value, "0"); + let Attribute { key, value } = &res.attributes[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "300"); + + let res = sudo(deps.as_mut(), mock_env(), recv_msg.clone()).unwrap(); + let Attribute { key, value } = &res.attributes[3]; + assert_eq!(key, "weekly_used_in"); + assert_eq!(value, "0"); + let Attribute { key, value } = &res.attributes[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "0"); + + // We can still use the path. Even if we have sent more than the + // allowance through the path (900 > 3000*.1), the current "balance" + // of inflow vs outflow is still lower than the path's capacity/quota + let res = sudo(deps.as_mut(), mock_env(), recv_msg.clone()).unwrap(); + let Attribute { key, value } = &res.attributes[3]; + assert_eq!(key, "weekly_used_in"); + assert_eq!(value, "300"); + let Attribute { key, value } = &res.attributes[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "0"); + + let err = sudo(deps.as_mut(), mock_env(), recv_msg.clone()).unwrap_err(); + + assert!(matches!(err, ContractError::RateLimitExceded { .. })); +} + +#[test] // Tests that we can have different quotas for send and receive. In this test we use 4% send and 1% receive +fn asymetric_quotas() { + let mut deps = mock_dependencies(); + + let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 4, 1); + let msg = InstantiateMsg { + gov_module: Addr::unchecked(GOV_ADDR), + ibc_module: Addr::unchecked(IBC_ADDR), + paths: vec![PathMsg { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quotas: vec![quota], + }], + }; + let info = mock_info(GOV_ADDR, &[]); + let _res = instantiate(deps.as_mut(), mock_env(), info.clone(), msg).unwrap(); + + // Sending 2% + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_060_u32.into(), + funds: 60_u32.into() + ); + let res = sudo(deps.as_mut(), mock_env(), msg).unwrap(); + let Attribute { key, value } = &res.attributes[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "60"); + + // Sending 2% more. Allowed, as sending has a 4% allowance + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_060_u32.into(), + funds: 60_u32.into() + ); + + let res = sudo(deps.as_mut(), mock_env(), msg).unwrap(); + let Attribute { key, value } = &res.attributes[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "120"); + + // Receiving 1% should still work. 4% *sent* through the path, but we can still receive. + let recv_msg = test_msg_recv!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_000_u32.into(), + funds: 30_u32.into() + ); + let res = sudo(deps.as_mut(), mock_env(), recv_msg).unwrap(); + let Attribute { key, value } = &res.attributes[3]; + assert_eq!(key, "weekly_used_in"); + assert_eq!(value, "0"); + let Attribute { key, value } = &res.attributes[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "90"); + + // Sending 2%. Should fail. In balance, we've sent 4% and received 1%, so only 1% left to send. + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_060_u32.into(), + funds: 60_u32.into() + ); + let err = sudo(deps.as_mut(), mock_env(), msg.clone()).unwrap_err(); + assert!(matches!(err, ContractError::RateLimitExceded { .. })); + + // Sending 1%: Allowed; because sending has a 4% allowance. We've sent 4% already, but received 1%, so there's send cappacity again + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_060_u32.into(), + funds: 30_u32.into() + ); + let res = sudo(deps.as_mut(), mock_env(), msg.clone()).unwrap(); + let Attribute { key, value } = &res.attributes[3]; + assert_eq!(key, "weekly_used_in"); + assert_eq!(value, "0"); + let Attribute { key, value } = &res.attributes[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "120"); +} + +#[test] // Tests we can get the current state of the trackers +fn query_state() { + let mut deps = mock_dependencies(); + + let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); + let msg = InstantiateMsg { + gov_module: Addr::unchecked(GOV_ADDR), + ibc_module: Addr::unchecked(IBC_ADDR), + paths: vec![PathMsg { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quotas: vec![quota], + }], + }; + let info = mock_info(GOV_ADDR, &[]); + let env = mock_env(); + let _res = instantiate(deps.as_mut(), env.clone(), info, msg).unwrap(); + + let query_msg = QueryMsg::GetQuotas { + channel_id: "any".to_string(), + denom: "denom".to_string(), + }; + + let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); + let value: Vec = from_binary(&res).unwrap(); + assert_eq!(value[0].quota.name, "weekly"); + assert_eq!(value[0].quota.max_percentage_send, 10); + assert_eq!(value[0].quota.max_percentage_recv, 10); + assert_eq!(value[0].quota.duration, RESET_TIME_WEEKLY); + assert_eq!(value[0].flow.inflow, Uint256::from(0_u32)); + assert_eq!(value[0].flow.outflow, Uint256::from(0_u32)); + assert_eq!( + value[0].flow.period_end, + env.block.time.plus_seconds(RESET_TIME_WEEKLY) + ); + + let send_msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_300_u32.into(), + funds: 300_u32.into() + ); + sudo(deps.as_mut(), mock_env(), send_msg.clone()).unwrap(); + + let recv_msg = test_msg_recv!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_000_u32.into(), + funds: 30_u32.into() + ); + sudo(deps.as_mut(), mock_env(), recv_msg.clone()).unwrap(); + + // Query + let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); + let value: Vec = from_binary(&res).unwrap(); + verify_query_response( + &value[0], + "weekly", + (10, 10), + RESET_TIME_WEEKLY, + 30_u32.into(), + 300_u32.into(), + env.block.time.plus_seconds(RESET_TIME_WEEKLY), + ); +} + +#[test] // Tests quota percentages are between [0,100] +fn bad_quotas() { + let mut deps = mock_dependencies(); + + let msg = InstantiateMsg { + gov_module: Addr::unchecked(GOV_ADDR), + ibc_module: Addr::unchecked(IBC_ADDR), + paths: vec![PathMsg { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quotas: vec![QuotaMsg { + name: "bad_quota".to_string(), + duration: 200, + send_recv: (5000, 101), + }], + }], + }; + let info = mock_info(IBC_ADDR, &[]); + + let env = mock_env(); + instantiate(deps.as_mut(), env.clone(), info, msg).unwrap(); + + // If a quota is higher than 100%, we set it to 100% + let query_msg = QueryMsg::GetQuotas { + channel_id: "any".to_string(), + denom: "denom".to_string(), + }; + let res = query(deps.as_ref(), env.clone(), query_msg).unwrap(); + let value: Vec = from_binary(&res).unwrap(); + verify_query_response( + &value[0], + "bad_quota", + (100, 100), + 200, + 0_u32.into(), + 0_u32.into(), + env.block.time.plus_seconds(200), + ); +} + +#[test] // Tests that undo reverts a packet send without affecting expiration or channel value +fn undo_send() { + let mut deps = mock_dependencies(); + + let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); + let msg = InstantiateMsg { + gov_module: Addr::unchecked(GOV_ADDR), + ibc_module: Addr::unchecked(IBC_ADDR), + paths: vec![PathMsg { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quotas: vec![quota], + }], + }; + let info = mock_info(GOV_ADDR, &[]); + let _res = instantiate(deps.as_mut(), mock_env(), info.clone(), msg).unwrap(); + + let send_msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_300_u32.into(), + funds: 300_u32.into() + ); + let undo_msg = SudoMsg::UndoSend { + packet: Packet::mock( + "channel".to_string(), + "channel".to_string(), + "denom".to_string(), + 300_u32.into(), + ), + }; + + sudo(deps.as_mut(), mock_env(), send_msg.clone()).unwrap(); + + let trackers = RATE_LIMIT_TRACKERS + .load(&deps.storage, ("any".to_string(), "denom".to_string())) + .unwrap(); + assert_eq!( + trackers.first().unwrap().flow.outflow, + Uint256::from(300_u32) + ); + let period_end = trackers.first().unwrap().flow.period_end; + let channel_value = trackers.first().unwrap().quota.channel_value; + + sudo(deps.as_mut(), mock_env(), undo_msg.clone()).unwrap(); + + let trackers = RATE_LIMIT_TRACKERS + .load(&deps.storage, ("any".to_string(), "denom".to_string())) + .unwrap(); + assert_eq!(trackers.first().unwrap().flow.outflow, Uint256::from(0_u32)); + assert_eq!(trackers.first().unwrap().flow.period_end, period_end); + assert_eq!(trackers.first().unwrap().quota.channel_value, channel_value); +} + +#[test] +fn test_basic_message() { + let json = r#"{"send_packet":{"packet":{"sequence":2,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-0","data":{"denom":"stake","amount":"125000000000011250","sender":"osmo1dwtagd6xzl4eutwtyv6mewra627lkg3n3w26h6","receiver":"osmo1yvjkt8lnpxucjmspaj5ss4aa8562gx0a3rks8s"},"timeout_height":{"revision_height":100}}}}"#; + let _parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); + //println!("{parsed:?}"); +} + +#[test] +fn test_testnet_message() { + let json = r#"{"send_packet":{"packet":{"sequence":4,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-1491","data":{"denom":"uosmo","amount":"100","sender":"osmo1cyyzpxplxdzkeea7kwsydadg87357qnahakaks","receiver":"osmo1c584m4lq25h83yp6ag8hh4htjr92d954vklzja"},"timeout_height":{},"timeout_timestamp":1668024637477293371}}}"#; + let _parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); + //println!("{parsed:?}"); +} + +#[test] +fn test_tokenfactory_message() { + let json = r#"{"send_packet":{"packet":{"sequence":4,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-1491","data":{"denom":"transfer/channel-0/factory/osmo12smx2wdlyttvyzvzg54y2vnqwq2qjateuf7thj/czar","amount":"100000000000000000","sender":"osmo1cyyzpxplxdzkeea7kwsydadg87357qnahakaks","receiver":"osmo1c584m4lq25h83yp6ag8hh4htjr92d954vklzja"},"timeout_height":{},"timeout_timestamp":1668024476848430980}}}"#; + let _parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); + //println!("{parsed:?}"); +} + +#[test] // Tests we ccan instantiate the contract and that the owners are set correctly +fn proper_migrate() { + let mut deps = mock_dependencies(); + let env = mock_env(); + + crate::contract::instantiate( + deps.as_mut(), + env, + MessageInfo { + sender: Addr::unchecked("osmo16tumts0kckpfp9fk7e3rnx9ahzn70dyyqfypgh"), + funds: vec![], + }, + InstantiateMsg { + gov_module: Addr::unchecked(GOV_ADDR), + ibc_module: Addr::unchecked(IBC_ADDR), + paths: vec![], + }, + ) + .unwrap(); + + // test that instantiate set the correct gov module address and RBAC permissions + let permissions = RBAC_PERMISSIONS + .load(&mut deps.storage, GOV_ADDR.to_string()) + .unwrap(); + for permission in Roles::all_roles() { + assert!(permissions.contains(&permission)); + } + assert_eq!(GOVMODULE.load(deps.as_ref().storage).unwrap(), GOV_ADDR); + + // revoke all roles from the gov contract, instantiation should re-asssign + crate::rbac::revoke_role(&mut deps.as_mut(), GOV_ADDR.to_string(), Roles::all_roles()).unwrap(); + + migrate(deps.as_mut(), mock_env(), MigrateMsg {}).unwrap(); + + // ensure migration assigned all the roles + let permissions = RBAC_PERMISSIONS + .load(&mut deps.storage, GOV_ADDR.to_string()) + .unwrap(); + for permission in Roles::all_roles() { + assert!(permissions.contains(&permission)); + } +} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/error.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/error.rs new file mode 100644 index 000000000..805dd775e --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/error.rs @@ -0,0 +1,34 @@ +use cosmwasm_std::{StdError, Timestamp, Uint256}; +use thiserror::Error; + +#[derive(Error, Debug, PartialEq)] +pub enum ContractError { + #[error("{0}")] + Std(#[from] StdError), + + #[error("Unauthorized")] + Unauthorized {}, + + #[error("IBC Rate Limit exceeded for {channel}/{denom}. Tried to transfer {amount} which exceeds capacity on the '{quota_name}' quota ({used}/{max}). Try again after {reset:?}")] + RateLimitExceded { + channel: String, + denom: String, + amount: Uint256, + quota_name: String, + used: Uint256, + max: Uint256, + reset: Timestamp, + }, + + #[error("Quota {quota_id} not found for channel {channel_id}")] + QuotaNotFound { + quota_id: String, + channel_id: String, + denom: String, + }, + #[error("{0}")] + InvalidParameters(String), + + #[error("Channel {channel} has been blocked for denom {denom}")] + ChannelBlocked { channel: String, denom: String }, +} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/execute.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/execute.rs new file mode 100644 index 000000000..7ff9aad4b --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/execute.rs @@ -0,0 +1,440 @@ +use crate::msg::{PathMsg, QuotaMsg}; + +use crate::state::storage::ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM; +use crate::state::{flow::Flow, path::Path, rate_limit::RateLimit, storage::RATE_LIMIT_TRACKERS}; +use crate::ContractError; +use cosmwasm_std::{DepsMut, Response, Timestamp}; + +pub fn add_new_paths( + deps: &mut DepsMut, + path_msgs: Vec, + now: Timestamp, +) -> Result<(), ContractError> { + for path_msg in path_msgs { + let path = Path::new(path_msg.channel_id, path_msg.denom); + + RATE_LIMIT_TRACKERS.save( + deps.storage, + path.into(), + &path_msg + .quotas + .iter() + .map(|q| RateLimit { + quota: q.into(), + flow: Flow::new(0_u128, 0_u128, now, q.duration), + }) + .collect(), + )? + } + Ok(()) +} + +pub fn try_add_path( + deps: &mut DepsMut, + channel_id: String, + denom: String, + quotas: Vec, + now: Timestamp, +) -> Result { + add_new_paths(deps, vec![PathMsg::new(&channel_id, &denom, quotas)], now)?; + + Ok(Response::new() + .add_attribute("method", "try_add_channel") + .add_attribute("channel_id", channel_id) + .add_attribute("denom", denom)) +} + +pub fn try_remove_path( + deps: &mut DepsMut, + channel_id: String, + denom: String, +) -> Result { + let path = Path::new(&channel_id, &denom); + RATE_LIMIT_TRACKERS.remove(deps.storage, path.into()); + Ok(Response::new() + .add_attribute("method", "try_remove_channel") + .add_attribute("denom", denom) + .add_attribute("channel_id", channel_id)) +} + +// Reset specified quote_id for the given channel_id +pub fn try_reset_path_quota( + deps: &mut DepsMut, + channel_id: String, + denom: String, + quota_id: String, + now: Timestamp, +) -> Result { + let path = Path::new(&channel_id, &denom); + RATE_LIMIT_TRACKERS.update(deps.storage, path.into(), |maybe_rate_limit| { + match maybe_rate_limit { + None => Err(ContractError::QuotaNotFound { + quota_id, + channel_id: channel_id.clone(), + denom: denom.clone(), + }), + Some(mut limits) => { + // Q: What happens here if quote_id not found? seems like we return ok? + limits.iter_mut().for_each(|limit| { + if limit.quota.name == quota_id.as_ref() { + limit.flow.expire(now, limit.quota.duration) + } + }); + Ok(limits) + } + } + })?; + + Ok(Response::new() + .add_attribute("method", "try_reset_channel") + .add_attribute("channel_id", channel_id)) +} + +pub fn edit_path_quota( + deps: &mut DepsMut, + channel_id: String, + denom: String, + quota: QuotaMsg, +) -> Result<(), ContractError> { + let path = Path::new(&channel_id, &denom); + RATE_LIMIT_TRACKERS.update(deps.storage, path.into(), |maybe_rate_limit| { + match maybe_rate_limit { + None => Err(ContractError::QuotaNotFound { + quota_id: quota.name, + channel_id: channel_id.clone(), + denom: denom.clone(), + }), + Some(mut limits) => { + limits.iter_mut().for_each(|limit| { + if limit.quota.name.eq("a.name) { + // TODO: is this the current way of handling channel_value when editing the quota? + + // cache the current channel_value + let channel_value = limit.quota.channel_value; + // update the quota + limit.quota = From::from("a); + // copy the channel_value + limit.quota.channel_value = channel_value; + } + }); + Ok(limits) + } + } + })?; + Ok(()) +} + +pub fn set_denom_restrictions( + deps: &mut DepsMut, + denom: String, + allowed_channels: Vec, +) -> Result { + ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM.save(deps.storage, denom, &allowed_channels)?; + Ok(Response::new().add_attribute("method", "set_denom_restrictions")) +} + +pub fn unset_denom_restrictions( + deps: &mut DepsMut, + denom: String, +) -> Result { + ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM.remove(deps.storage, denom); + Ok(Response::new().add_attribute("method", "unset_denom_restrictions")) +} + +#[cfg(test)] +mod tests { + use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info}; + use cosmwasm_std::{from_binary, Addr, StdError}; + + use crate::contract::{execute, query}; + use crate::helpers::tests::verify_query_response; + use crate::msg::{ExecuteMsg, QueryMsg, QuotaMsg}; + use crate::state::rbac::Roles; + use crate::state::{ + rate_limit::RateLimit, + storage::{ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM, GOVMODULE, IBCMODULE}, + }; + use crate::ContractError; + + const IBC_ADDR: &str = "osmo1vz5e6tzdjlzy2f7pjvx0ecv96h8r4m2y92thdm"; + const GOV_ADDR: &str = "osmo1tzz5zf2u68t00un2j4lrrnkt2ztd46kfzfp58r"; + + #[test] // Tests AddPath and RemovePath messages + fn management_add_and_remove_path() { + let mut deps = mock_dependencies(); + IBCMODULE + .save(deps.as_mut().storage, &Addr::unchecked(IBC_ADDR)) + .unwrap(); + GOVMODULE + .save(deps.as_mut().storage, &Addr::unchecked(GOV_ADDR)) + .unwrap(); + + // grant role to IBC_ADDR + crate::rbac::grant_role( + &mut deps.as_mut(), + IBC_ADDR.to_string(), + vec![Roles::AddRateLimit, Roles::RemoveRateLimit], + ) + .unwrap(); + + let msg = ExecuteMsg::AddPath { + channel_id: "channel".to_string(), + denom: "denom".to_string(), + quotas: vec![QuotaMsg { + name: "daily".to_string(), + duration: 1600, + send_recv: (3, 5), + }], + }; + let info = mock_info(IBC_ADDR, &[]); + + let env = mock_env(); + let res = execute(deps.as_mut(), env.clone(), info, msg).unwrap(); + assert_eq!(0, res.messages.len()); + + let query_msg = QueryMsg::GetQuotas { + channel_id: "channel".to_string(), + denom: "denom".to_string(), + }; + + let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); + + let value: Vec = from_binary(&res).unwrap(); + verify_query_response( + &value[0], + "daily", + (3, 5), + 1600, + 0_u32.into(), + 0_u32.into(), + env.block.time.plus_seconds(1600), + ); + + assert_eq!(value.len(), 1); + + // Add another path + let msg = ExecuteMsg::AddPath { + channel_id: "channel2".to_string(), + denom: "denom".to_string(), + quotas: vec![QuotaMsg { + name: "daily".to_string(), + duration: 1600, + send_recv: (3, 5), + }], + }; + let info = mock_info(IBC_ADDR, &[]); + + let env = mock_env(); + execute(deps.as_mut(), env.clone(), info, msg).unwrap(); + + // remove the first one + let msg = ExecuteMsg::RemovePath { + channel_id: "channel".to_string(), + denom: "denom".to_string(), + }; + + let info = mock_info(IBC_ADDR, &[]); + let env = mock_env(); + execute(deps.as_mut(), env.clone(), info, msg).unwrap(); + + // The channel is not there anymore + let err = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap_err(); + assert!(matches!(err, StdError::NotFound { .. })); + + // The second channel is still there + let query_msg = QueryMsg::GetQuotas { + channel_id: "channel2".to_string(), + denom: "denom".to_string(), + }; + let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); + let value: Vec = from_binary(&res).unwrap(); + assert_eq!(value.len(), 1); + verify_query_response( + &value[0], + "daily", + (3, 5), + 1600, + 0_u32.into(), + 0_u32.into(), + env.block.time.plus_seconds(1600), + ); + + // Paths are overriden if they share a name and denom + let msg = ExecuteMsg::AddPath { + channel_id: "channel2".to_string(), + denom: "denom".to_string(), + quotas: vec![QuotaMsg { + name: "different".to_string(), + duration: 5000, + send_recv: (50, 30), + }], + }; + let info = mock_info(IBC_ADDR, &[]); + + let env = mock_env(); + execute(deps.as_mut(), env.clone(), info, msg).unwrap(); + + let query_msg = QueryMsg::GetQuotas { + channel_id: "channel2".to_string(), + denom: "denom".to_string(), + }; + let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); + let value: Vec = from_binary(&res).unwrap(); + assert_eq!(value.len(), 1); + + verify_query_response( + &value[0], + "different", + (50, 30), + 5000, + 0_u32.into(), + 0_u32.into(), + env.block.time.plus_seconds(5000), + ); + } + + #[test] + fn test_execute_set_denom_restrictions() { + let mut deps = mock_dependencies(); + + // Set up the message and the environment + let denom = "denom1".to_string(); + let allowed_channels = vec!["channel1".to_string(), "channel2".to_string()]; + let msg = ExecuteMsg::SetDenomRestrictions { + denom: denom.clone(), + allowed_channels: allowed_channels.clone(), + }; + let info = mock_info("executor", &[]); + + // Grant the necessary role + crate::rbac::grant_role( + &mut deps.as_mut(), + "executor".to_string(), + vec![Roles::ManageDenomRestrictions], + ) + .unwrap(); + + // Execute the message + let res = execute(deps.as_mut(), mock_env(), info, msg).unwrap(); + assert_eq!(res.attributes[0].value, "set_denom_restrictions"); + + // Verify the restriction was set + let stored_channels = ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM + .load(deps.as_ref().storage, denom) + .unwrap(); + assert_eq!(stored_channels, allowed_channels); + } + + #[test] + fn test_execute_unset_denom_restrictions() { + let mut deps = mock_dependencies(); + + // First, set a restriction + let denom = "denom1".to_string(); + let allowed_channels = vec!["channel1".to_string()]; + let set_msg = ExecuteMsg::SetDenomRestrictions { + denom: denom.clone(), + allowed_channels: allowed_channels.clone(), + }; + let info = mock_info("executor", &[]); + + // Grant the necessary role + crate::rbac::grant_role( + &mut deps.as_mut(), + "executor".to_string(), + vec![Roles::ManageDenomRestrictions], + ) + .unwrap(); + + // Execute the set message + execute(deps.as_mut(), mock_env(), info.clone(), set_msg).unwrap(); + + // Verify the restriction was set + let stored_channels = ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM + .load(deps.as_ref().storage, denom.clone()) + .unwrap(); + assert_eq!(stored_channels, allowed_channels); + + // Now unset the restriction + let unset_msg = ExecuteMsg::UnsetDenomRestrictions { + denom: denom.clone(), + }; + let res = execute(deps.as_mut(), mock_env(), info, unset_msg).unwrap(); + assert_eq!(res.attributes[0].value, "unset_denom_restrictions"); + + // Verify the restriction was removed + let stored_channels = ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM + .may_load(deps.as_ref().storage, denom) + .unwrap(); + assert!(stored_channels.is_none()); + } + + #[test] + fn test_query_denom_restrictions() { + let mut deps = mock_dependencies(); + + // Set up initial restrictions + let denom = "denom1".to_string(); + let allowed_channels = vec!["channel1".to_string(), "channel2".to_string()]; + let set_msg = ExecuteMsg::SetDenomRestrictions { + denom: denom.clone(), + allowed_channels: allowed_channels.clone(), + }; + let info = mock_info("executor", &[]); + + // Grant the necessary role + crate::rbac::grant_role( + &mut deps.as_mut(), + "executor".to_string(), + vec![Roles::ManageDenomRestrictions], + ) + .unwrap(); + + // Execute the set message + execute(deps.as_mut(), mock_env(), info, set_msg).unwrap(); + + // Query the restrictions + let query_msg = QueryMsg::GetDenomRestrictions { + denom: denom.clone(), + }; + let res = query(deps.as_ref(), mock_env(), query_msg).unwrap(); + let returned_channels: Vec = from_binary(&res).unwrap(); + assert_eq!(returned_channels, allowed_channels); + } + + #[test] + fn test_query_unset_denom_restrictions() { + let deps = mock_dependencies(); + + // Attempt to query restrictions on a denom with no restrictions + let denom = "denom1".to_string(); + let query_msg = QueryMsg::GetDenomRestrictions { + denom: denom.clone(), + }; + query(deps.as_ref(), mock_env(), query_msg).unwrap_err(); + } + + #[test] + fn test_permissions_enforced() { + let mut deps = mock_dependencies(); + + // Set up the message and the environment + let denom = "denom1".to_string(); + let allowed_channels = vec!["channel1".to_string(), "channel2".to_string()]; + let msg = ExecuteMsg::SetDenomRestrictions { + denom: denom.clone(), + allowed_channels: allowed_channels.clone(), + }; + let info = mock_info("unauthorized_user", &[]); + + // Attempt to execute the message without the necessary role + let err = execute(deps.as_mut(), mock_env(), info, msg).unwrap_err(); + assert!(matches!(err, ContractError::Unauthorized { .. })); + + // Verify no restrictions were set + let stored_channels = ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM + .may_load(deps.as_ref().storage, denom) + .unwrap(); + assert!(stored_channels.is_none()); + } +} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/helpers.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/helpers.rs new file mode 100644 index 000000000..8cccc9e7c --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/helpers.rs @@ -0,0 +1,61 @@ +#![cfg(test)] +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; + +use cosmwasm_std::{to_binary, Addr, CosmosMsg, StdResult, WasmMsg}; + +use crate::msg::ExecuteMsg; +use crate::msg::SudoMsg; + +/// CwTemplateContract is a wrapper around Addr that provides a lot of helpers +/// for working with this. +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] +pub struct RateLimitingContract(pub Addr); + +impl RateLimitingContract { + pub fn addr(&self) -> Addr { + self.0.clone() + } + + pub fn call>(&self, msg: T) -> StdResult { + let msg = to_binary(&msg.into())?; + Ok(WasmMsg::Execute { + contract_addr: self.addr().into(), + msg, + funds: vec![], + } + .into()) + } + + pub fn sudo>(&self, msg: T) -> cw_multi_test::SudoMsg { + let msg = to_binary(&msg.into()).unwrap(); + cw_multi_test::SudoMsg::Wasm(cw_multi_test::WasmSudo { + contract_addr: self.addr(), + msg, + }) + } +} + +pub mod tests { + use cosmwasm_std::{Timestamp, Uint256}; + + use crate::state::rate_limit::RateLimit; + + pub fn verify_query_response( + value: &RateLimit, + quota_name: &str, + send_recv: (u32, u32), + duration: u64, + inflow: Uint256, + outflow: Uint256, + period_end: Timestamp, + ) { + assert_eq!(value.quota.name, quota_name); + assert_eq!(value.quota.max_percentage_send, send_recv.0); + assert_eq!(value.quota.max_percentage_recv, send_recv.1); + assert_eq!(value.quota.duration, duration); + assert_eq!(value.flow.inflow, inflow); + assert_eq!(value.flow.outflow, outflow); + assert_eq!(value.flow.period_end, period_end); + } +} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/integration_tests.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/integration_tests.rs new file mode 100644 index 000000000..49c24627c --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/integration_tests.rs @@ -0,0 +1,1019 @@ +#![cfg(test)] + +use crate::{ + helpers::RateLimitingContract, + msg::{ExecuteMsg, QueryMsg}, + state::{rate_limit::RateLimit, rbac::Roles}, + test_msg_send, ContractError, +}; +use cosmwasm_std::{Addr, Coin, Empty, Timestamp, Uint128, Uint256}; +use cw_multi_test::{App, AppBuilder, Contract, ContractWrapper, Executor}; + +use crate::{ + msg::{InstantiateMsg, PathMsg, QuotaMsg}, + state::flow::tests::{RESET_TIME_DAILY, RESET_TIME_MONTHLY, RESET_TIME_WEEKLY}, +}; + +pub fn contract_template() -> Box> { + let contract = ContractWrapper::new( + crate::contract::execute, + crate::contract::instantiate, + crate::contract::query, + ) + .with_sudo(crate::contract::sudo); + Box::new(contract) +} + +const USER: &str = "USER"; +const IBC_ADDR: &str = "osmo1vz5e6tzdjlzy2f7pjvx0ecv96h8r4m2y92thdm"; +const GOV_ADDR: &str = "osmo1tzz5zf2u68t00un2j4lrrnkt2ztd46kfzfp58r"; +const NATIVE_DENOM: &str = "nosmo"; + +fn mock_app() -> App { + AppBuilder::new().build(|router, _, storage| { + router + .bank + .init_balance( + storage, + &Addr::unchecked(USER), + vec![Coin { + denom: NATIVE_DENOM.to_string(), + amount: Uint128::new(1_000), + }], + ) + .unwrap(); + }) +} + +// Instantiate the contract +fn proper_instantiate(paths: Vec) -> (App, RateLimitingContract) { + let mut app = mock_app(); + let cw_code_id = app.store_code(contract_template()); + + let msg = InstantiateMsg { + gov_module: Addr::unchecked(GOV_ADDR), + ibc_module: Addr::unchecked(IBC_ADDR), + paths, + }; + + let cw_rate_limit_contract_addr = app + .instantiate_contract( + cw_code_id, + Addr::unchecked(GOV_ADDR), + &msg, + &[], + "test", + None, + ) + .unwrap(); + + let cw_rate_limit_contract = RateLimitingContract(cw_rate_limit_contract_addr); + + (app, cw_rate_limit_contract) +} + +use cosmwasm_std::Attribute; + +#[test] // Checks that the RateLimit flows are expired properly when time passes +fn expiration() { + let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); + + let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quotas: vec![quota], + }]); + + // Using all the allowance + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_000_u32.into(), + funds: 300_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + let res = app.sudo(cosmos_msg).unwrap(); + + let Attribute { key, value } = &res.custom_attrs(1)[3]; + assert_eq!(key, "weekly_used_in"); + assert_eq!(value, "0"); + let Attribute { key, value } = &res.custom_attrs(1)[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "300"); + let Attribute { key, value } = &res.custom_attrs(1)[5]; + assert_eq!(key, "weekly_max_in"); + assert_eq!(value, "300"); + let Attribute { key, value } = &res.custom_attrs(1)[6]; + assert_eq!(key, "weekly_max_out"); + assert_eq!(value, "300"); + + // Another packet is rate limited + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_000_u32.into(), + funds: 300_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + let err = app.sudo(cosmos_msg).unwrap_err(); + + assert_eq!( + err.downcast_ref::().unwrap(), + &ContractError::RateLimitExceded { + channel: "channel".to_string(), + denom: "denom".to_string(), + amount: Uint256::from_u128(300), + quota_name: "weekly".to_string(), + used: Uint256::from_u128(300), + max: Uint256::from_u128(300), + reset: Timestamp::from_nanos(1572402219879305533), + } + ); + + // ... Time passes + app.update_block(|b| { + b.height += 1000; + b.time = b.time.plus_seconds(RESET_TIME_WEEKLY + 1) + }); + + // Sending the packet should work now + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_000_u32.into(), + funds: 300_u32.into() + ); + + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + let res = app.sudo(cosmos_msg).unwrap(); + + let Attribute { key, value } = &res.custom_attrs(1)[3]; + assert_eq!(key, "weekly_used_in"); + assert_eq!(value, "0"); + let Attribute { key, value } = &res.custom_attrs(1)[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "300"); + let Attribute { key, value } = &res.custom_attrs(1)[5]; + assert_eq!(key, "weekly_max_in"); + assert_eq!(value, "300"); + let Attribute { key, value } = &res.custom_attrs(1)[6]; + assert_eq!(key, "weekly_max_out"); + assert_eq!(value, "300"); +} + +#[test] // Tests we can have different maximums for different quotaas (daily, weekly, etc) and that they all are active at the same time +fn multiple_quotas() { + let quotas = vec![ + QuotaMsg::new("daily", RESET_TIME_DAILY, 1, 1), + QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), + QuotaMsg::new("monthly", RESET_TIME_MONTHLY, 5, 5), + ]; + + let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quotas, + }]); + + // Sending 1% to use the daily allowance + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap(); + + // Another packet is rate limited + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap_err(); + + // ... One day passes + app.update_block(|b| { + b.height += 10; + b.time = b.time.plus_seconds(RESET_TIME_DAILY + 1) + }); + + // Sending the packet should work now + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap(); + + // Do that for 4 more days + for _ in 1..4 { + // ... One day passes + app.update_block(|b| { + b.height += 10; + b.time = b.time.plus_seconds(RESET_TIME_DAILY + 1) + }); + + // Sending the packet should work now + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap(); + } + + // ... One day passes + app.update_block(|b| { + b.height += 10; + b.time = b.time.plus_seconds(RESET_TIME_DAILY + 1) + }); + + // We now have exceeded the weekly limit! Even if the daily limit allows us, the weekly doesn't + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap_err(); + + // ... One week passes + app.update_block(|b| { + b.height += 10; + b.time = b.time.plus_seconds(RESET_TIME_WEEKLY + 1) + }); + + // We can still can't send because the weekly and monthly limits are the same + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap_err(); + + // Waiting a week again, doesn't help!! + // ... One week passes + app.update_block(|b| { + b.height += 10; + b.time = b.time.plus_seconds(RESET_TIME_WEEKLY + 1) + }); + + // We can still can't send because the monthly limit hasn't passed + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap_err(); + + // Only after two more weeks we can send again + app.update_block(|b| { + b.height += 10; + b.time = b.time.plus_seconds((RESET_TIME_WEEKLY * 2) + 1) // Two weeks + }); + + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap(); +} + +#[test] // Tests that the channel value is based on the value at the beginning of the period +fn channel_value_cached() { + let quotas = vec![ + QuotaMsg::new("daily", RESET_TIME_DAILY, 2, 2), + QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), + ]; + + let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quotas, + }]); + + // Sending 1% (half of the daily allowance) + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 100_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap(); + + // Sending 3% is now rate limited + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 100_u32.into(), + funds: 3_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap_err(); + + // Even if the channel value increases, the percentage is calculated based on the value at period start + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 100000_u32.into(), + funds: 3_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap_err(); + + // ... One day passes + app.update_block(|b| { + b.height += 10; + b.time = b.time.plus_seconds(RESET_TIME_DAILY + 1) + }); + + // New Channel Value world! + + // Sending 1% of a new value (10_000) passes the daily check, cause it + // has expired, but not the weekly check (The value for last week is + // sitll 100, as only 1 day has passed) + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 10_000_u32.into(), + funds: 100_u32.into() + ); + + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap_err(); + + // ... One week passes + app.update_block(|b| { + b.height += 10; + b.time = b.time.plus_seconds(RESET_TIME_WEEKLY + 1) + }); + + // Sending 1% of a new value should work and set the value for the day at 10_000 + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 10_000_u32.into(), + funds: 100_u32.into() + ); + + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap(); + + // If the value magically decreasses. We can still send up to 100 more (1% of 10k) + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 1_u32.into(), + funds: 75_u32.into() + ); + + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap(); +} + +#[test] // Checks that RateLimits added after instantiation are respected +fn add_paths_later() { + let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![]); + + // All sends are allowed + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_000_u32.into(), + funds: 300_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg.clone()); + let res = app.sudo(cosmos_msg).unwrap(); + + let Attribute { key, value } = &res.custom_attrs(1)[3]; + assert_eq!(key, "quota"); + assert_eq!(value, "none"); + + // Add a weekly limit of 1% + let management_msg = ExecuteMsg::AddPath { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quotas: vec![QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 1, 1)], + }; + + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg).unwrap(); + + // Executing the same message again should fail, as it is now rate limited + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap_err(); +} + +#[test] +fn test_execute_add_path() { + let quotas = vec![ + QuotaMsg::new("daily", RESET_TIME_DAILY, 1, 1), + QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), + QuotaMsg::new("monthly", RESET_TIME_MONTHLY, 5, 5), + ]; + + let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quotas, + }]); + + let management_msg = ExecuteMsg::AddPath { + channel_id: "new_channel_id".to_string(), + denom: "new_denom".to_string(), + quotas: vec![QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 1, 1)], + }; + + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + // non gov cant invoke + assert!(app + .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .is_err()); + // gov addr can invoke + app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + .unwrap(); + + // Sending 1% to use the daily allowance + let msg = test_msg_send!( + channel_id: format!("new_channel_id"), + denom: format!("new_denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg.clone()); + app.sudo(cosmos_msg).unwrap(); + + let response: Vec = app + .wrap() + .query_wasm_smart( + cw_rate_limit_contract.addr(), + &QueryMsg::GetQuotas { + channel_id: "new_channel_id".to_string(), + denom: "new_denom".to_string(), + }, + ) + .unwrap(); + assert_eq!(response.len(), 1); + assert_eq!(response[0].flow.outflow, Uint256::one()); + assert_eq!( + response[0].quota.channel_value, + Some(Uint256::from_u128(101)) + ); +} +#[test] +fn test_execute_remove_path() { + let quotas = vec![ + QuotaMsg::new("daily", RESET_TIME_DAILY, 1, 1), + QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), + QuotaMsg::new("monthly", RESET_TIME_MONTHLY, 5, 5), + ]; + + let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quotas, + }]); + + let management_msg = ExecuteMsg::RemovePath { + channel_id: "any".to_string(), + denom: "denom".to_string(), + }; + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + // non gov cant invoke + assert!(app + .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .is_err()); + // gov addr can invoke + app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + .unwrap(); + + // rate limits should be removed + assert!(app + .wrap() + .query_wasm_smart::( + cw_rate_limit_contract.addr(), + &QueryMsg::GetQuotas { + channel_id: "any".to_string(), + denom: "denom".to_string() + } + ) + .is_err()); +} + +#[test] +fn test_execute_reset_path_quota() { + let quotas = vec![ + QuotaMsg::new("daily", RESET_TIME_DAILY, 1, 1), + QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), + QuotaMsg::new("monthly", RESET_TIME_MONTHLY, 5, 5), + ]; + + let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quotas, + }]); + + // Sending 1% to use the daily allowance + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg.clone()); + app.sudo(cosmos_msg).unwrap(); + + let management_msg = ExecuteMsg::ResetPathQuota { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quota_id: "daily".to_string(), + }; + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + // non gov cant invoke + assert!(app + .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .is_err()); + // gov addr can invoke + app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + .unwrap(); + + let response = app + .wrap() + .query_wasm_smart::>( + cw_rate_limit_contract.addr(), + &QueryMsg::GetQuotas { + channel_id: "any".to_string(), + denom: "denom".to_string(), + }, + ) + .unwrap(); + + // daily quota should be reset + let daily_quota = response + .iter() + .find(|rate_limit| rate_limit.quota.name.eq("daily")) + .unwrap(); + assert_eq!(daily_quota.flow.inflow, Uint256::zero()); + assert_eq!(daily_quota.flow.outflow, Uint256::zero()); + + // weekly and monthly should not be reset + let weekly_quota = response + .iter() + .find(|rate_limit| rate_limit.quota.name.eq("weekly")) + .unwrap(); + assert_eq!(weekly_quota.flow.inflow, Uint256::zero()); + assert_eq!(weekly_quota.flow.outflow, Uint256::one()); + + let monthly_quota = response + .iter() + .find(|rate_limit| rate_limit.quota.name.eq("monthly")) + .unwrap(); + assert_eq!(monthly_quota.flow.inflow, Uint256::zero()); + assert_eq!(monthly_quota.flow.outflow, Uint256::one()); +} + +#[test] +fn test_execute_grant_and_revoke_role() { + let quotas = vec![ + QuotaMsg::new("daily", RESET_TIME_DAILY, 1, 1), + QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), + QuotaMsg::new("monthly", RESET_TIME_MONTHLY, 5, 5), + ]; + + let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quotas, + }]); + + let management_msg = ExecuteMsg::GrantRole { + signer: "foobar".to_string(), + roles: vec![Roles::GrantRole], + }; + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + // non gov cant invoke + assert!(app + .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .is_err()); + // gov addr can invoke + app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + .unwrap(); + + let response = app + .wrap() + .query_wasm_smart::>( + cw_rate_limit_contract.addr(), + &QueryMsg::GetRoles { + owner: "foobar".to_string(), + }, + ) + .unwrap(); + assert_eq!(response.len(), 1); + assert_eq!(response[0], Roles::GrantRole); + + // test foobar can grant a role + let management_msg = ExecuteMsg::GrantRole { + signer: "foobarbaz".to_string(), + roles: vec![Roles::GrantRole], + }; + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + app.execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .unwrap(); + + let response = app + .wrap() + .query_wasm_smart::>( + cw_rate_limit_contract.addr(), + &QueryMsg::GetRoles { + owner: "foobarbaz".to_string(), + }, + ) + .unwrap(); + assert_eq!(response.len(), 1); + assert_eq!(response[0], Roles::GrantRole); + + // test role revocation + + let management_msg = ExecuteMsg::RevokeRole { + signer: "foobar".to_string(), + roles: vec![Roles::GrantRole], + }; + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + .unwrap(); + + // foobar should no longer have roles + assert!(app + .wrap() + .query_wasm_smart::>( + cw_rate_limit_contract.addr(), + &QueryMsg::GetRoles { + owner: "foobar".to_string() + } + ) + .is_err()); +} + +#[test] +fn test_execute_edit_path_quota() { + let quotas = vec![ + QuotaMsg::new("daily", RESET_TIME_DAILY, 1, 1), + QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), + QuotaMsg::new("monthly", RESET_TIME_MONTHLY, 5, 5), + ]; + + let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quotas, + }]); + + // Sending 1% to use the daily allowance + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg.clone()); + app.sudo(cosmos_msg).unwrap(); + + let management_msg = ExecuteMsg::EditPathQuota { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quota: QuotaMsg { + send_recv: (81, 58), + name: "monthly".to_string(), + duration: RESET_TIME_MONTHLY, + }, + }; + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + // non gov cant invoke + assert!(app + .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .is_err()); + // gov addr can invoke + app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + .unwrap(); + + let response = app + .wrap() + .query_wasm_smart::>( + cw_rate_limit_contract.addr(), + &QueryMsg::GetQuotas { + channel_id: "any".to_string(), + denom: "denom".to_string(), + }, + ) + .unwrap(); + let monthly_quota = response + .iter() + .find(|rate_limit| rate_limit.quota.name.eq("monthly")) + .unwrap(); + assert_eq!(monthly_quota.quota.max_percentage_send, 81); + assert_eq!(monthly_quota.quota.max_percentage_recv, 58); +} +#[test] +fn test_execute_remove_message() { + // this test case also covers timelock delay set, as a non zero timelock + // will force the message to be queued, thus allowing queue removal + + let quotas = vec![ + QuotaMsg::new("daily", RESET_TIME_DAILY, 1, 1), + QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), + QuotaMsg::new("monthly", RESET_TIME_MONTHLY, 5, 5), + ]; + + let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quotas, + }]); + + let management_msg = ExecuteMsg::GrantRole { + signer: "foobar".to_string(), + roles: vec![Roles::GrantRole], + }; + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + // non gov cant invoke + assert!(app + .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .is_err()); + // gov addr can invoke + app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + .unwrap(); + + // set a timelock delay for foobar + let management_msg = ExecuteMsg::SetTimelockDelay { + signer: "foobar".to_string(), + hours: 1, + }; + + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + // non gov cant invoke as insufficient permissions + assert!(app + .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .is_err()); + // gov addr can invoke + app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + .unwrap(); + + // message submitter by foobar should not be queued + let management_msg = ExecuteMsg::GrantRole { + signer: "foobarbaz".to_string(), + roles: vec![Roles::GrantRole], + }; + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + app.execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .unwrap(); + let response = app + .wrap() + .query_wasm_smart::>(cw_rate_limit_contract.addr(), &QueryMsg::GetMessageIds) + .unwrap(); + assert_eq!(response.len(), 1); + + // remove the message + let management_msg = ExecuteMsg::RemoveMessage { + message_id: response[0].clone(), + }; + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + .unwrap(); + + // no messges should be present + assert_eq!( + app.wrap() + .query_wasm_smart::>( + cw_rate_limit_contract.addr(), + &QueryMsg::GetMessageIds + ) + .unwrap() + .len(), + 0 + ); +} + +#[test] +fn test_execute_process_messages() { + let quotas = vec![ + QuotaMsg::new("daily", RESET_TIME_DAILY, 1, 1), + QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), + QuotaMsg::new("monthly", RESET_TIME_MONTHLY, 5, 5), + ]; + + let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { + channel_id: "any".to_string(), + denom: "denom".to_string(), + quotas, + }]); + + // allocate GrantRole and RevokeRole to `foobar` + let management_msg = ExecuteMsg::GrantRole { + signer: "foobar".to_string(), + roles: vec![Roles::GrantRole, Roles::RevokeRole], + }; + + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + // non gov cant invoke + assert!(app + .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .is_err()); + // gov addr can invoke + app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + .unwrap(); + + // set a timelock delay for foobar + let management_msg = ExecuteMsg::SetTimelockDelay { + signer: "foobar".to_string(), + hours: 1, + }; + + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + // non gov cant invoke as insufficient permissions + assert!(app + .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .is_err()); + // gov addr can invoke + app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + .unwrap(); + + // message submitted by foobar should be queued + // allocate GrantRole to foobarbaz + let management_msg = ExecuteMsg::GrantRole { + signer: "foobarbaz".to_string(), + roles: vec![Roles::GrantRole], + }; + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + app.execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .unwrap(); + let response = app + .wrap() + .query_wasm_smart::>(cw_rate_limit_contract.addr(), &QueryMsg::GetMessageIds) + .unwrap(); + assert_eq!(response.len(), 1); + + // any address should be able to trigger queue message processing + let management_msg = ExecuteMsg::ProcessMessages { + count: Some(1), + message_ids: None, + }; + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + app.execute(Addr::unchecked("veryrandomaddress"), cosmos_msg) + .unwrap(); + + // insufficient time has passed so queue should still be 1 + assert_eq!( + app.wrap() + .query_wasm_smart::>( + cw_rate_limit_contract.addr(), + &QueryMsg::GetMessageIds + ) + .unwrap() + .len(), + 1 + ); + + // advance time + app.update_block(|block| { + block.height += 100; + block.time = block.time.plus_seconds(3601) + }); + + // any address should be able to trigger queue message processing + let management_msg = ExecuteMsg::ProcessMessages { + count: Some(1), + message_ids: None, + }; + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + app.execute(Addr::unchecked("veryrandomaddress"), cosmos_msg) + .unwrap(); + + // no messges should be present as time passed and message was executed + assert_eq!( + app.wrap() + .query_wasm_smart::>( + cw_rate_limit_contract.addr(), + &QueryMsg::GetMessageIds + ) + .unwrap() + .len(), + 0 + ); + + // foobarbaz should have the GrantRole permission + let response = app + .wrap() + .query_wasm_smart::>( + cw_rate_limit_contract.addr(), + &QueryMsg::GetRoles { + owner: "foobarbaz".to_string(), + }, + ) + .unwrap(); + assert_eq!(response.len(), 1); + assert_eq!(response[0], Roles::GrantRole); + + app.update_block(|block| { + block.height += 1; + block.time = block.time.plus_seconds(3600); + }); + + let management_msg = ExecuteMsg::RevokeRole { + signer: "foobarbaz".to_string(), + roles: vec![Roles::GrantRole], + }; + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + app.execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .unwrap(); + + let message_ids = app + .wrap() + .query_wasm_smart::>(cw_rate_limit_contract.addr(), &QueryMsg::GetMessageIds) + .unwrap(); + assert_eq!(message_ids.len(), 1); + + app.update_block(|block| { + block.height += 1; + }); + + let management_msg = ExecuteMsg::ProcessMessages { + count: Some(1), + message_ids: None, + }; + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + app.execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .unwrap(); + + // insufficient time has passed so queue length is still 1 + let response = app + .wrap() + .query_wasm_smart::>( + cw_rate_limit_contract.addr(), + &QueryMsg::GetRoles { + owner: "foobarbaz".to_string(), + }, + ) + .unwrap(); + assert_eq!(response.len(), 1); + + // advance time + app.update_block(|block| { + block.height += 100; + block.time = block.time.plus_seconds(3601); + }); + + let management_msg = ExecuteMsg::ProcessMessages { + count: None, + message_ids: Some(message_ids.clone()), + }; + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + app.execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .unwrap(); + + // sufficient time has passed, empty queue + let message_ids = app + .wrap() + .query_wasm_smart::>(cw_rate_limit_contract.addr(), &QueryMsg::GetMessageIds) + .unwrap(); + assert_eq!(message_ids.len(), 0); + + // no rolles allocated, storage key should be removed + assert!(app + .wrap() + .query_wasm_smart::>( + cw_rate_limit_contract.addr(), + &QueryMsg::GetRoles { + owner: "foobarbaz".to_string() + } + ) + .is_err()); + + // error should be returned when all params are None + let management_msg = ExecuteMsg::ProcessMessages { + count: None, + message_ids: None, + }; + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + assert!(app + .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .is_err()); +} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/lib.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/lib.rs new file mode 100644 index 000000000..e37c9258c --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/lib.rs @@ -0,0 +1,24 @@ +#![allow(clippy::result_large_err)] + +// Contract +pub mod contract; +mod error; +pub mod msg; +mod state; + +pub mod blocking; +pub mod message_queue; +pub mod packet; +pub mod rbac; + +// Functions +mod execute; +mod query; +mod sudo; + +// Tests +mod contract_tests; +mod helpers; +mod integration_tests; + +pub use crate::error::ContractError; diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/message_queue.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/message_queue.rs new file mode 100644 index 000000000..998ea75da --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/message_queue.rs @@ -0,0 +1,413 @@ +use cosmwasm_std::{DepsMut, Env, MessageInfo, Response, Storage}; + +use crate::{ + error::ContractError, + msg::ExecuteMsg, + state::{ + rbac::QueuedMessage, + storage::{MESSAGE_QUEUE, TIMELOCK_DELAY}, + }, +}; + +/// Used to iterate over the message queue and process any messages that have passed the time lock delay. +/// +/// If count is a non-zero value, we process no more than `count` message. This can be used to limit the number +/// of message processed in a single transaction to avoid running into OOG (out of gas) errors. +/// +/// Because we iterate over the queue by popping items from the front, multiple transactions can be issued +/// in sequence to iterate over the queue +pub fn process_message_queue( + deps: &mut DepsMut, + env: &Env, + count: Option, + message_ids: Option>, +) -> Result { + let mut response = Response::new(); + + if let Some(message_ids) = message_ids { + let messages = pop_messages(deps.storage, &message_ids)?; + + for message in messages { + let message_id = message.message_id.clone(); + if let Err(err) = try_process_message(deps, env, message) { + response = response.add_attribute(message_id, err.to_string()); + } else { + response = response.add_attribute(message_id, "ok"); + } + } + return Ok(response); + } + + let Some(count) = count else { + return Err(ContractError::InvalidParameters( + "both count and message_ids are None".to_string(), + )); + }; + + let queue_len = MESSAGE_QUEUE.len(deps.storage)? as usize; + + for idx in 0..queue_len { + if idx + 1 > count as usize { + break; + } + if let Some(message) = MESSAGE_QUEUE.pop_front(deps.storage)? { + let message_id = message.message_id.clone(); + if let Err(err) = try_process_message(deps, env, message) { + response = response.add_attribute(message_id, err.to_string()); + } else { + response = response.add_attribute(message_id, "ok"); + } + } + } + Ok(response) +} + +/// Given a message to execute, insert into the message queued with execution delayed by the timelock that is applied to the sender of the message +/// +/// Returns the id of the queued message +pub fn queue_message( + deps: &mut DepsMut, + env: Env, + msg: ExecuteMsg, + info: MessageInfo, +) -> Result { + let timelock_delay = TIMELOCK_DELAY.load(deps.storage, info.sender.to_string())?; + let message_id = format!("{}_{}", env.block.height, env.transaction.unwrap().index); + MESSAGE_QUEUE.push_back( + deps.storage, + &QueuedMessage { + message_id: message_id.clone(), + message: msg, + timelock_delay, + submitted_at: env.block.time, + }, + )?; + Ok(message_id) +} + +/// Check to see if the message sender has a non-zero timelock delay configured +pub fn must_queue_message(deps: &mut DepsMut, info: &MessageInfo) -> bool { + // if a non zero value is set, then it means a timelock delay is required + TIMELOCK_DELAY + .load(deps.storage, info.sender.to_string()) + .unwrap_or(0) + > 0 +} + +/// Removes a message from the message queue if it matches message_id +pub fn remove_message(deps: &mut DepsMut, message_id: String) -> Result<(), ContractError> { + pop_messages(deps.storage, &[message_id])?; + Ok(()) +} + +fn pop_messages( + storage: &mut dyn Storage, + message_ids: &[String], +) -> Result, ContractError> { + let queue_len = MESSAGE_QUEUE.len(storage)? as usize; + let mut messages = Vec::with_capacity(message_ids.len()); + + for _ in 0..queue_len { + if let Some(message) = MESSAGE_QUEUE.pop_front(storage)? { + if message_ids.contains(&message.message_id) { + messages.push(message); + } else { + // reinsert + MESSAGE_QUEUE.push_back(storage, &message)?; + } + } + } + Ok(messages) +} + +// attempts to process the message if the timelock has passed, otherwise reinsert into queue +// +// returns the id of the message +fn try_process_message( + deps: &mut DepsMut, + env: &Env, + message: QueuedMessage, +) -> Result<(), ContractError> { + // compute the minimum time at which the message is unlocked + let min_unlock = message + .submitted_at + .plus_seconds(message.timelock_delay * 60 * 60); + + // check to see if the timelock delay has passed, which we need to first convert from hours into seconds + if env.block.time.ge(&min_unlock) { + crate::contract::match_execute(deps, env, message.message)?; + } else { + MESSAGE_QUEUE.push_back(deps.storage, &message)?; + } + + Ok(()) +} + +#[cfg(test)] +mod tests { + use cosmwasm_std::{ + from_binary, + testing::{mock_dependencies, mock_env}, + Addr, Timestamp, TransactionInfo, + }; + + use crate::{msg::QuotaMsg, query::get_queued_message, rbac::set_timelock_delay}; + + use super::*; + + #[test] + fn test_must_queue_message() { + let mut deps = mock_dependencies(); + let mut deps = deps.as_mut(); + let foobar_info = MessageInfo { + sender: Addr::unchecked("foobar"), + funds: vec![], + }; + let foobarbaz_info = MessageInfo { + sender: Addr::unchecked("foobarbaz"), + funds: vec![], + }; + + TIMELOCK_DELAY + .save(deps.storage, "foobar".to_string(), &1) + .unwrap(); + + assert!(must_queue_message(&mut deps, &foobar_info)); + assert!(!must_queue_message(&mut deps, &foobarbaz_info)); + } + + #[test] + fn test_queue_message() { + let env = mock_env(); + let mut deps = mock_dependencies(); + let mut deps = deps.as_mut(); + + let foobar_info = MessageInfo { + sender: Addr::unchecked("foobar"), + funds: vec![], + }; + let foobarbaz_info = MessageInfo { + sender: Addr::unchecked("foobarbaz"), + funds: vec![], + }; + let foobar_test_msg = ExecuteMsg::AddPath { + channel_id: "channel".to_string(), + denom: "denom".to_string(), + quotas: vec![QuotaMsg { + name: "quota".to_string(), + duration: 5, + send_recv: (10, 10), + }], + }; + let foobarbaz_test_msg = ExecuteMsg::SetTimelockDelay { + signer: "gov".to_string(), + hours: 5, + }; + set_timelock_delay(&mut deps, "foobar".to_string(), 10).unwrap(); + set_timelock_delay(&mut deps, "foobarbaz".to_string(), 1).unwrap(); + let foobar_message_id = { + let mut env = env.clone(); + env.transaction = Some(TransactionInfo { index: 1 }); + queue_message( + &mut deps, + env.clone(), + foobar_test_msg.clone(), + foobar_info.clone(), + ) + .unwrap() + }; + let foobarbaz_message_id = { + let mut env = env.clone(); + env.transaction = Some(TransactionInfo { index: 2 }); + queue_message( + &mut deps, + env.clone(), + foobarbaz_test_msg.clone(), + foobarbaz_info.clone(), + ) + .unwrap() + }; + // get foobar's queued message, and validate the type is as expected + timelock delays + let msg = get_queued_message(deps.storage, foobar_message_id.clone()).unwrap(); + let msg: QueuedMessage = from_binary(&msg).unwrap(); + assert_eq!(msg.timelock_delay, 10); + assert_eq!(msg.message, foobar_test_msg); + + // get foobarbaz's queued message, and validate the type is as expected + timelock delays + let msg = get_queued_message(deps.storage, foobarbaz_message_id.clone()).unwrap(); + let msg: QueuedMessage = from_binary(&msg).unwrap(); + assert_eq!(msg.timelock_delay, 1); + assert_eq!(msg.message, foobarbaz_test_msg); + } + + #[test] + fn test_process_message_queue_basic() { + // basic test which simply iterates over the message queues + // does include tests with some unlocked items vs some locked items + + let mut deps = mock_dependencies(); + let mut deps = deps.as_mut(); + let env = mock_env(); + create_n_messages(&mut deps, 10, &mut |_i: u64| Timestamp::default()); + assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 10); + + process_message_queue(&mut deps, &env.clone(), Some(1), None).unwrap(); + assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 9); + + process_message_queue(&mut deps, &env.clone(), Some(0), None).unwrap(); + assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 9); + + process_message_queue(&mut deps, &env.clone(), Some(5), None).unwrap(); + assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 4); + + process_message_queue(&mut deps, &env.clone(), Some(10), None).unwrap(); + assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 0); + + create_n_messages(&mut deps, 10, &mut |_i: u64| Timestamp::default()); + + assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 10); + + let message_ids = MESSAGE_QUEUE + .iter(deps.storage) + .unwrap() + .filter_map(|msg| Some(msg.ok()?.message_id)) + .collect::>(); + + // get the first 4 message ids + let msg_ids = message_ids[0..4].to_vec(); + process_message_queue(&mut deps, &env.clone(), None, Some(msg_ids)).unwrap(); + // should be 6 messages left + assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 6); + + // get the remaining messages + let msg_ids = message_ids[4..].to_vec(); + process_message_queue(&mut deps, &env.clone(), None, Some(msg_ids)).unwrap(); + // should be 0 messages left + assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 0); + } + + #[test] + fn test_process_message_queue_complete() { + // complete message queues testing, including some locked vs unlocked + // as well as validating execution + + let mut deps = mock_dependencies(); + let mut deps = deps.as_mut(); + let mut env = mock_env(); + + // starting time for tests, may 20th 12:32am PST + let time = Timestamp::from_seconds(1716190293); + env.block.time = time; + + create_n_messages(&mut deps, 10, &mut |i: u64| { + // increment time by 1 hour * i + time.plus_seconds(3600 * i) + }); + + // no messages should be processed as not enough time has passed + process_message_queue(&mut deps, &env.clone(), Some(10), None).unwrap(); + + assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 10); + + // increase time by 24 hours + env.block.time = env.block.time.plus_seconds(3600 * 24); + + // one message should be processed + process_message_queue(&mut deps, &env.clone(), Some(10), None).unwrap(); + + assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 9); + + // signer should have a timelock delay of 1 hour + assert_eq!( + TIMELOCK_DELAY + .load(deps.storage, "signer".to_string()) + .unwrap(), + 1 + ); + + // advance time by 2 hours + env.block.time = env.block.time.plus_seconds(3600 * 2); + + // 2 messages should be processed, + process_message_queue(&mut deps, &env.clone(), Some(10), None).unwrap(); + + assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 7); + + //signer should have a timelock delay of 3 hours + assert_eq!( + TIMELOCK_DELAY + .load(deps.storage, "signer".to_string()) + .unwrap(), + 3 + ); + + // advance time by 24 hours + env.block.time = env.block.time.plus_seconds(3600 * 24); + + // all messages should be processed + process_message_queue(&mut deps, &env.clone(), Some(10), None).unwrap(); + + assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 0); + + // signer should have a delay of 10 hours + assert_eq!( + TIMELOCK_DELAY + .load(deps.storage, "signer".to_string()) + .unwrap(), + 10 + ); + + create_n_messages(&mut deps, 1, &mut |i: u64| { + // increment time by 1 hour * i + time.plus_seconds(3600 * i) + }); + + let message_ids = MESSAGE_QUEUE + .iter(deps.storage) + .unwrap() + .filter_map(|msg| Some(msg.ok()?.message_id)) + .collect::>(); + + process_message_queue(&mut deps, &env.clone(), None, Some(message_ids)).unwrap(); + // signer should have a delay of 1 hours + assert_eq!( + TIMELOCK_DELAY + .load(deps.storage, "signer".to_string()) + .unwrap(), + 1 + ); + } + + #[test] + #[should_panic(expected = "both count and message_ids are None")] + fn test_process_message_queue_invalid_parameters() { + let mut deps = mock_dependencies(); + let mut deps = deps.as_mut(); + let env = mock_env(); + create_n_messages(&mut deps, 10, &mut |_i: u64| Timestamp::default()); + assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 10); + + process_message_queue(&mut deps, &env.clone(), None, None).unwrap(); + } + + // helper function which inserts N messages into the message queue + // message types inserted are of ExecuteMsg::SetTimelockDelay + fn create_n_messages(deps: &mut DepsMut, n: usize, ts: &mut dyn FnMut(u64) -> Timestamp) { + for i in 0..n { + MESSAGE_QUEUE + .push_back( + deps.storage, + &QueuedMessage { + message: ExecuteMsg::SetTimelockDelay { + signer: "signer".to_string(), + hours: i as u64 + 1, + }, + submitted_at: ts(i as u64), + timelock_delay: 24, + message_id: format!("prop-{i}"), + }, + ) + .unwrap(); + } + } +} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/msg.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/msg.rs new file mode 100644 index 000000000..2737691d5 --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/msg.rs @@ -0,0 +1,197 @@ +use cosmwasm_schema::{cw_serde, QueryResponses}; +use cosmwasm_std::Addr; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; + +#[cfg(test)] +use cosmwasm_std::Uint256; + +use crate::{packet::Packet, state::rbac::Roles}; + +// PathMsg contains a channel_id and denom to represent a unique identifier within ibc-go, and a list of rate limit quotas +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] +pub struct PathMsg { + pub channel_id: String, + pub denom: String, + pub quotas: Vec, +} + +impl PathMsg { + pub fn new( + channel: impl Into, + denom: impl Into, + quotas: Vec, + ) -> Self { + PathMsg { + channel_id: channel.into(), + denom: denom.into(), + quotas, + } + } +} + +// QuotaMsg represents a rate limiting Quota when sent as a wasm msg +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] +pub struct QuotaMsg { + pub name: String, + pub duration: u64, + pub send_recv: (u32, u32), +} + +impl QuotaMsg { + pub fn new(name: &str, seconds: u64, send_percentage: u32, recv_percentage: u32) -> Self { + QuotaMsg { + name: name.to_string(), + duration: seconds, + send_recv: (send_percentage, recv_percentage), + } + } +} + +/// Initialize the contract with the address of the IBC module and any existing channels. +/// Only the ibc module is allowed to execute actions on this contract +#[cw_serde] +pub struct InstantiateMsg { + pub gov_module: Addr, + pub ibc_module: Addr, + pub paths: Vec, +} + +/// The caller (IBC module) is responsible for correctly calculating the funds +/// being sent through the channel +#[cw_serde] +pub enum ExecuteMsg { + AddPath { + channel_id: String, + denom: String, + quotas: Vec, + }, + RemovePath { + channel_id: String, + denom: String, + }, + ResetPathQuota { + channel_id: String, + denom: String, + quota_id: String, + }, + SetDenomRestrictions { + denom: String, + allowed_channels: Vec, + }, + UnsetDenomRestrictions { + denom: String, + }, + /// Grants a role to the given signer + GrantRole { + signer: String, + /// full list of roles to grant the signer + roles: Vec, + }, + /// Removes the role that has been granted to the signer + RevokeRole { + signer: String, + /// fill list of roles to revoke from the signer + roles: Vec, + }, + /// Replaces the quota identified by QuotaMsg::Name + EditPathQuota { + channel_id: String, + denom: String, + /// similar to ResetPathQuota, but QuotaMsg::Name is used as the quota_id + quota: QuotaMsg, + }, + /// Used to remove a message from the message queue to prevent execution + RemoveMessage { + message_id: String, + }, + /// Used to change the timelock delay for newly submitted messages + SetTimelockDelay { + /// the address to apply the timelock delay to + signer: String, + hours: std::primitive::u64, + }, + /// Permissionless message that anyone can invoke to trigger execution + /// of queued messages that have passed the timelock delay + /// + /// If both count and message_ids are some, message_ids is used. If both are None returns an error + ProcessMessages { + /// number of queued messages to process, a value of 0 will attempt to process all queued messages + count: Option, + message_ids: Option>, + }, +} + +#[cw_serde] +#[derive(QueryResponses)] +pub enum QueryMsg { + #[returns(Vec)] + GetQuotas { channel_id: String, denom: String }, + /// Returns a vector of all addresses that have been allocated one or more roles + #[returns(Vec)] + GetRoleOwners, + /// Returns a vector of all roles that have been granted to `owner` + #[returns(Vec)] + GetRoles { owner: String }, + /// Returns a vector of queued message id's + #[returns(Vec)] + GetMessageIds, + /// Returns the queued message matching id + #[returns(crate::state::rbac::QueuedMessage)] + GetMessage { id: String }, + /// Returns the restrictions for a given denom + #[returns(Vec)] + GetDenomRestrictions { denom: String }, +} + +#[cw_serde] +pub enum SudoMsg { + SendPacket { + packet: Packet, + #[cfg(test)] + channel_value_mock: Option, + }, + RecvPacket { + packet: Packet, + #[cfg(test)] + channel_value_mock: Option, + }, + UndoSend { + packet: Packet, + }, +} + +#[cw_serde] +pub struct MigrateMsg {} + +impl ExecuteMsg { + /// Given an ExecuteMsg variant returns the required RBAC role + /// that must be held by the address which is invoking the message. + /// + /// If no RBAC role is required, returns None + pub fn required_permission(&self) -> Option { + match self { + Self::AddPath { .. } => Some(Roles::AddRateLimit), + Self::RemovePath { .. } => Some(Roles::RemoveRateLimit), + Self::ResetPathQuota { .. } => Some(Roles::ResetPathQuota), + Self::SetDenomRestrictions { .. } => Some(Roles::ManageDenomRestrictions), + Self::UnsetDenomRestrictions { .. } => Some(Roles::ManageDenomRestrictions), + Self::GrantRole { .. } => Some(Roles::GrantRole), + Self::RevokeRole { .. } => Some(Roles::RevokeRole), + Self::EditPathQuota { .. } => Some(Roles::EditPathQuota), + Self::RemoveMessage { .. } => Some(Roles::RemoveMessage), + Self::SetTimelockDelay { .. } => Some(Roles::SetTimelockDelay), + Self::ProcessMessages { .. } => None, + } + } + /// Checks to see if the message type is able to skip queueing. + /// + /// This is limited to the message type responsible for processing the queue + pub fn skip_queue(&self) -> bool { + #[allow(clippy::match_like_matches_macro)] + match self { + Self::ProcessMessages { .. } => true, + _ => false, + } + } +} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs new file mode 100644 index 000000000..ad628131e --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs @@ -0,0 +1,482 @@ +use crate::state::flow::FlowType; +use cosmwasm_std::{Addr, Deps, StdError, Uint256}; +use osmosis_std_derive::CosmwasmExt; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; +use sha2::{Digest, Sha256}; + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] +pub struct Height { + /// Previously known as "epoch" + pub revision_number: Option, + + /// The height of a block + pub revision_height: Option, +} + +// IBC transfer data +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] +pub struct FungibleTokenData { + pub denom: String, + pub amount: Uint256, + pub sender: Addr, + pub receiver: Addr, +} + +// An IBC packet +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] +pub struct Packet { + pub sequence: u64, + pub source_port: String, + pub source_channel: String, + pub destination_port: String, + pub destination_channel: String, + pub data: FungibleTokenData, + pub timeout_height: Height, + pub timeout_timestamp: Option, +} + +// SupplyOf query message definition. +// osmosis-std doesn't currently support the SupplyOf query, so I'm defining it localy so it can be used to obtain the channel value +#[derive( + Clone, + PartialEq, + Eq, + ::prost::Message, + serde::Serialize, + serde::Deserialize, + schemars::JsonSchema, + CosmwasmExt, +)] +#[proto_message(type_url = "/cosmos.bank.v1beta1.QuerySupplyOfRequest")] +#[proto_query( + path = "/cosmos.bank.v1beta1.Query/SupplyOf", + response_type = QuerySupplyOfResponse +)] +pub struct QuerySupplyOfRequest { + #[prost(string, tag = "1")] + pub denom: ::prost::alloc::string::String, +} + +#[derive( + Clone, + PartialEq, + Eq, + ::prost::Message, + serde::Serialize, + serde::Deserialize, + schemars::JsonSchema, + CosmwasmExt, +)] +#[proto_message(type_url = "/cosmos.bank.v1beta1.QuerySupplyOf")] +pub struct QuerySupplyOfResponse { + #[prost(message, optional, tag = "1")] + pub amount: ::core::option::Option, +} +// End of SupplyOf query message definition + +use std::str::FromStr; // Needed to parse the coin's String as Uint256 + +fn hash_denom(denom: &str) -> String { + let mut hasher = Sha256::new(); + hasher.update(denom.as_bytes()); + let result = hasher.finalize(); + let hash = hex::encode(result); + format!("ibc/{}", hash.to_uppercase()) +} + +impl Packet { + pub fn mock( + source_channel: String, + dest_channel: String, + denom: String, + funds: Uint256, + ) -> Packet { + Packet { + sequence: 0, + source_port: "transfer".to_string(), + source_channel, + destination_port: "transfer".to_string(), + destination_channel: dest_channel, + data: crate::packet::FungibleTokenData { + denom, + amount: funds, + sender: Addr::unchecked("sender"), + receiver: Addr::unchecked("receiver"), + }, + timeout_height: crate::packet::Height { + revision_number: None, + revision_height: None, + }, + timeout_timestamp: None, + } + } + + pub fn channel_value(&self, deps: Deps, direction: &FlowType) -> Result { + let res = QuerySupplyOfRequest { + denom: self.local_denom(direction), + } + .query(&deps.querier)?; + Uint256::from_str(&res.amount.unwrap_or_default().amount) + } + + pub fn get_funds(&self) -> Uint256 { + self.data.amount + } + + fn local_channel(&self, direction: &FlowType) -> String { + // Pick the appropriate channel depending on whether this is a send or a recv + match direction { + FlowType::In => self.destination_channel.clone(), + FlowType::Out => self.source_channel.clone(), + } + } + + fn receiver_chain_is_source(&self) -> bool { + self.data + .denom + .starts_with(&format!("transfer/{}", self.source_channel)) + } + + fn handle_denom_for_sends(&self) -> String { + if !self.data.denom.starts_with("transfer/") { + // For native tokens we just use what's on the packet + return self.data.denom.clone(); + } + // For non-native tokens, we need to generate the IBCDenom + hash_denom(&self.data.denom) + } + + fn handle_denom_for_recvs(&self) -> String { + if self.receiver_chain_is_source() { + // These are tokens that have been sent to the counterparty and are returning + let unprefixed = self + .data + .denom + .strip_prefix(&format!("transfer/{}/", self.source_channel)) + .unwrap_or_default(); + let split: Vec<&str> = unprefixed.split('/').collect(); + if split[0] == unprefixed { + // This is a native token. Return the unprefixed token + unprefixed.to_string() + } else { + // This is a non-native that was sent to the counterparty. + // We need to hash it. + // The ibc-go implementation checks that the denom has been built correctly. We + // don't need to do that here because if it hasn't, the transfer module will catch it. + hash_denom(unprefixed) + } + } else { + // Tokens that come directly from the counterparty. + // Since the sender didn't prefix them, we need to do it here. + let prefixed = format!("transfer/{}/", self.destination_channel) + &self.data.denom; + hash_denom(&prefixed) + } + } + + fn local_denom(&self, direction: &FlowType) -> String { + match direction { + FlowType::In => self.handle_denom_for_recvs(), + FlowType::Out => self.handle_denom_for_sends(), + } + } + + pub fn path_data(&self, direction: &FlowType) -> (String, String) { + (self.local_channel(direction), self.local_denom(direction)) + } +} + +// Helpers + +// Create a new packet for testing +#[cfg(test)] +#[macro_export] +macro_rules! test_msg_send { + (channel_id: $channel_id:expr, denom: $denom:expr, channel_value: $channel_value:expr, funds: $funds:expr) => { + $crate::msg::SudoMsg::SendPacket { + packet: $crate::packet::Packet::mock($channel_id, $channel_id, $denom, $funds), + channel_value_mock: Some($channel_value), + } + }; +} + +#[cfg(test)] +#[macro_export] +macro_rules! test_msg_recv { + (channel_id: $channel_id:expr, denom: $denom:expr, channel_value: $channel_value:expr, funds: $funds:expr) => { + $crate::msg::SudoMsg::RecvPacket { + packet: $crate::packet::Packet::mock( + $channel_id, + $channel_id, + format!("transfer/{}/{}", $channel_id, $denom), + $funds, + ), + channel_value_mock: Some($channel_value), + } + }; +} + +#[cfg(test)] +pub mod tests { + use crate::msg::SudoMsg; + + use super::*; + + #[test] + fn send_native() { + let packet = Packet::mock( + "channel-17-local".to_string(), + "channel-42-counterparty".to_string(), + "uosmo".to_string(), + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::Out), "uosmo"); + } + + #[test] + fn send_non_native() { + // The transfer module "unhashes" the denom from + // ibc/09E4864A262249507925831FBAD69DAD08F66FAAA0640714E765912A0751289A + // to port/channel/denom before passing it along to the contrace + let packet = Packet::mock( + "channel-17-local".to_string(), + "channel-42-counterparty".to_string(), + "transfer/channel-17-local/ujuno".to_string(), + 0_u128.into(), + ); + assert_eq!( + packet.local_denom(&FlowType::Out), + "ibc/09E4864A262249507925831FBAD69DAD08F66FAAA0640714E765912A0751289A" + ); + } + + #[test] + fn receive_non_native() { + // The counterparty chain sends their own native token to us + let packet = Packet::mock( + "channel-42-counterparty".to_string(), // The counterparty's channel is the source here + "channel-17-local".to_string(), // Our channel is the dest channel + "ujuno".to_string(), // This is unwrapped. It is our job to wrap it + 0_u128.into(), + ); + assert_eq!( + packet.local_denom(&FlowType::In), + "ibc/09E4864A262249507925831FBAD69DAD08F66FAAA0640714E765912A0751289A" + ); + } + + #[test] + fn receive_native() { + // The counterparty chain sends us back our native token that they had wrapped + let packet = Packet::mock( + "channel-42-counterparty".to_string(), // The counterparty's channel is the source here + "channel-17-local".to_string(), // Our channel is the dest channel + "transfer/channel-42-counterparty/uosmo".to_string(), + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::In), "uosmo"); + } + + // Let's assume we have two chains A and B (local and counterparty) connected in the following way: + // + // Chain A <---> channel-17-local <---> channel-42-counterparty <---> Chain B + // + // The following tests should pass + // + + const WRAPPED_OSMO_ON_HUB_TRACE: &str = "transfer/channel-141/uosmo"; + const WRAPPED_ATOM_ON_OSMOSIS_TRACE: &str = "transfer/channel-0/uatom"; + const WRAPPED_ATOM_ON_OSMOSIS_HASH: &str = + "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2"; + const WRAPPED_OSMO_ON_HUB_HASH: &str = + "ibc/14F9BC3E44B8A9C1BE1FB08980FAB87034C9905EF17CF2F5008FC085218811CC"; + + #[test] + fn sanity_check() { + // Examples using the official channels as of Nov 2022. + + // uatom sent to osmosis + let packet = Packet::mock( + "channel-141".to_string(), // from: hub + "channel-0".to_string(), // to: osmosis + "uatom".to_string(), + 0_u128.into(), + ); + assert_eq!( + packet.local_denom(&FlowType::In), + WRAPPED_ATOM_ON_OSMOSIS_HASH + ); + + // uatom on osmosis sent back to the hub + let packet = Packet::mock( + "channel-0".to_string(), // from: osmosis + "channel-141".to_string(), // to: hub + WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), // unwrapped before reaching the contract + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::In), "uatom"); + + // osmo sent to the hub + let packet = Packet::mock( + "channel-0".to_string(), // from: osmosis + "channel-141".to_string(), // to: hub + "uosmo".to_string(), + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::Out), "uosmo"); + + // osmo on the hub sent back to osmosis + // send + let packet = Packet::mock( + "channel-141".to_string(), // from: hub + "channel-0".to_string(), // to: osmosis + WRAPPED_OSMO_ON_HUB_TRACE.to_string(), // unwrapped before reaching the contract + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::Out), WRAPPED_OSMO_ON_HUB_HASH); + + // receive + let packet = Packet::mock( + "channel-141".to_string(), // from: hub + "channel-0".to_string(), // to: osmosis + WRAPPED_OSMO_ON_HUB_TRACE.to_string(), // unwrapped before reaching the contract + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::In), "uosmo"); + + // Now let's pretend we're the hub. + // The following tests are from perspective of the the hub (i.e.: if this contract were deployed there) + // + // osmo sent to the hub + let packet = Packet::mock( + "channel-0".to_string(), // from: osmosis + "channel-141".to_string(), // to: hub + "uosmo".to_string(), + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::In), WRAPPED_OSMO_ON_HUB_HASH); + + // uosmo on the hub sent back to the osmosis + let packet = Packet::mock( + "channel-141".to_string(), // from: hub + "channel-0".to_string(), // to: osmosis + WRAPPED_OSMO_ON_HUB_TRACE.to_string(), // unwrapped before reaching the contract + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::In), "uosmo"); + + // uatom sent to osmosis + let packet = Packet::mock( + "channel-141".to_string(), // from: hub + "channel-0".to_string(), // to: osmosis + "uatom".to_string(), + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::Out), "uatom"); + + // utaom on the osmosis sent back to the hub + // send + let packet = Packet::mock( + "channel-0".to_string(), // from: osmosis + "channel-141".to_string(), // to: hub + WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), // unwrapped before reaching the contract + 0_u128.into(), + ); + assert_eq!( + packet.local_denom(&FlowType::Out), + WRAPPED_ATOM_ON_OSMOSIS_HASH + ); + + // receive + let packet = Packet::mock( + "channel-0".to_string(), // from: osmosis + "channel-141".to_string(), // to: hub + WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), // unwrapped before reaching the contract + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::In), "uatom"); + } + + #[test] + fn sanity_double() { + // Now let's deal with double wrapping + + let juno_wrapped_osmosis_wrapped_atom_hash = + "ibc/6CDD4663F2F09CD62285E2D45891FC149A3568E316CE3EBBE201A71A78A69388"; + + // Send uatom on stored on osmosis to juno + // send + let packet = Packet::mock( + "channel-42".to_string(), // from: osmosis + "channel-0".to_string(), // to: juno + WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), // unwrapped before reaching the contract + 0_u128.into(), + ); + assert_eq!( + packet.local_denom(&FlowType::Out), + WRAPPED_ATOM_ON_OSMOSIS_HASH + ); + + // receive + let packet = Packet::mock( + "channel-42".to_string(), // from: osmosis + "channel-0".to_string(), // to: juno + WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), + 0_u128.into(), + ); + assert_eq!( + packet.local_denom(&FlowType::In), + juno_wrapped_osmosis_wrapped_atom_hash + ); + + // Send back that multi-wrapped token to osmosis + // send + let packet = Packet::mock( + "channel-0".to_string(), // from: juno + "channel-42".to_string(), // to: osmosis + format!("{}{}", "transfer/channel-0/", WRAPPED_ATOM_ON_OSMOSIS_TRACE), // unwrapped before reaching the contract + 0_u128.into(), + ); + assert_eq!( + packet.local_denom(&FlowType::Out), + juno_wrapped_osmosis_wrapped_atom_hash + ); + + // receive + let packet = Packet::mock( + "channel-0".to_string(), // from: juno + "channel-42".to_string(), // to: osmosis + format!("{}{}", "transfer/channel-0/", WRAPPED_ATOM_ON_OSMOSIS_TRACE), // unwrapped before reaching the contract + 0_u128.into(), + ); + assert_eq!( + packet.local_denom(&FlowType::In), + WRAPPED_ATOM_ON_OSMOSIS_HASH + ); + } + + #[test] + fn tokenfactory_packet() { + let json = r#"{"send_packet":{"packet":{"sequence":4,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-1491","data":{"denom":"transfer/channel-0/factory/osmo12smx2wdlyttvyzvzg54y2vnqwq2qjateuf7thj/czar","amount":"100000000000000000","sender":"osmo1cyyzpxplxdzkeea7kwsydadg87357qnahakaks","receiver":"osmo1c584m4lq25h83yp6ag8hh4htjr92d954vklzja"},"timeout_height":{},"timeout_timestamp":1668024476848430980}}}"#; + let parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); + //println!("{parsed:?}"); + + match parsed { + SudoMsg::SendPacket { packet, .. } => { + assert_eq!( + packet.local_denom(&FlowType::Out), + "ibc/07A1508F49D0753EDF95FA18CA38C0D6974867D793EB36F13A2AF1A5BB148B22" + ); + } + _ => panic!("parsed into wrong variant"), + } + } + + #[test] + fn packet_with_memo() { + // extra fields (like memo) get ignored. + let json = r#"{"recv_packet":{"packet":{"sequence":1,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-0","data":{"denom":"stake","amount":"1","sender":"osmo177uaalkhra6wth6hc9hu79f72eq903kwcusx4r","receiver":"osmo1fj6yt4pwfea4865z763fvhwktlpe020ef93dlq","memo":"some info"},"timeout_height":{"revision_height":100}}}}"#; + let _parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); + //println!("{parsed:?}"); + } +} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/query.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/query.rs new file mode 100644 index 000000000..1afcb8362 --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/query.rs @@ -0,0 +1,187 @@ +use crate::state::{ + path::Path, + storage::{ + ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM, MESSAGE_QUEUE, RATE_LIMIT_TRACKERS, + RBAC_PERMISSIONS, + }, +}; +use cosmwasm_std::{to_binary, Binary, StdResult}; +use cosmwasm_std::{Order::Ascending, StdError, Storage}; + +pub fn get_quotas( + storage: &dyn Storage, + channel_id: impl Into, + denom: impl Into, +) -> StdResult { + let path = Path::new(channel_id, denom); + to_binary(&RATE_LIMIT_TRACKERS.load(storage, path.into())?) +} + +/// Returns all addresses which have been assigned one or more roles +pub fn get_role_owners(storage: &dyn Storage) -> StdResult { + to_binary( + &RBAC_PERMISSIONS + .keys(storage, None, None, Ascending) + .filter_map(|key| key.ok()) + .collect::>(), + ) +} + +/// Returns all the roles that have been granted to `owner` (if any) +pub fn get_roles(storage: &dyn Storage, owner: String) -> StdResult { + to_binary(&RBAC_PERMISSIONS.load(storage, owner)?) +} + +/// Returns the id's of all queued messages +pub fn get_message_ids(storage: &dyn Storage) -> StdResult { + to_binary( + &MESSAGE_QUEUE + .iter(storage)? + .filter_map(|message| Some(message.ok()?.message_id)) + .collect::>(), + ) +} + +/// Searches MESSAGE_QUEUE for a message_id matching `id` +pub fn get_queued_message(storage: &dyn Storage, id: String) -> StdResult { + to_binary( + &MESSAGE_QUEUE + .iter(storage)? + .find(|message| { + let Ok(message) = message else { return false }; + message.message_id.eq(&id) + }) + .ok_or_else(|| StdError::not_found(id))??, + ) +} + +pub fn get_denom_restrictions(storage: &dyn Storage, denom: String) -> StdResult { + to_binary(&ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM.load(storage, denom)?) +} + +#[cfg(test)] +mod test { + use cosmwasm_std::{from_binary, testing::mock_dependencies, Timestamp}; + + use crate::{ + msg::ExecuteMsg, + state::rbac::{QueuedMessage, Roles}, + }; + + use super::*; + #[test] + fn test_get_role_owners() { + let mut deps = mock_dependencies(); + + // test getting role owners when no owners exist + let response = get_role_owners(deps.as_ref().storage).unwrap(); + let decoded: Vec = from_binary(&response).unwrap(); + assert!(decoded.is_empty()); + + // insert 1 role owner, and test getting role owners + RBAC_PERMISSIONS + .save( + &mut deps.storage, + "foobar".to_string(), + &vec![Roles::SetTimelockDelay].into_iter().collect(), + ) + .unwrap(); + let response = get_role_owners(deps.as_ref().storage).unwrap(); + let decoded: Vec = from_binary(&response).unwrap(); + assert_eq!(decoded.len(), 1); + assert_eq!(decoded[0], "foobar"); + + // insert another role owner and test getting role owners + RBAC_PERMISSIONS + .save( + &mut deps.storage, + "foobarbaz".to_string(), + &vec![Roles::SetTimelockDelay].into_iter().collect(), + ) + .unwrap(); + let response = get_role_owners(deps.as_ref().storage).unwrap(); + let decoded: Vec = from_binary(&response).unwrap(); + assert_eq!(decoded.len(), 2); + assert_eq!(decoded[0], "foobar"); + assert_eq!(decoded[1], "foobarbaz"); + } + + #[test] + fn test_get_roles() { + let mut deps = mock_dependencies(); + + // test retrieving roles for a missing role owner + assert!(get_roles(deps.as_ref().storage, "foobar".to_string()).is_err()); + + // assign roles and test retrieving roles owned by address + RBAC_PERMISSIONS + .save( + &mut deps.storage, + "foobar".to_string(), + &vec![Roles::SetTimelockDelay].into_iter().collect(), + ) + .unwrap(); + let response = get_roles(deps.as_ref().storage, "foobar".to_string()).unwrap(); + let decoded: Vec = from_binary(&response).unwrap(); + assert_eq!(decoded.len(), 1); + assert_eq!(decoded[0], Roles::SetTimelockDelay); + + // add additional roles foobar, and test retrierval + RBAC_PERMISSIONS + .save( + &mut deps.storage, + "foobar".to_string(), + &vec![Roles::SetTimelockDelay, Roles::EditPathQuota] + .into_iter() + .collect(), + ) + .unwrap(); + let response = get_roles(deps.as_ref().storage, "foobar".to_string()).unwrap(); + let decoded: Vec = from_binary(&response).unwrap(); + assert_eq!(decoded.len(), 2); + assert!(decoded.contains(&Roles::SetTimelockDelay)); + assert!(decoded.contains(&Roles::EditPathQuota)); + } + + #[test] + fn test_get_messageids() { + let mut deps = mock_dependencies(); + let response = get_message_ids(deps.as_ref().storage).unwrap(); + let decoded: Vec = from_binary(&response).unwrap(); + assert_eq!(decoded.len(), 0); + + MESSAGE_QUEUE + .push_back( + &mut deps.storage, + &QueuedMessage { + message_id: "prop-1".to_string(), + message: ExecuteMsg::ProcessMessages { + count: Some(1), + message_ids: None, + }, + submitted_at: Timestamp::default(), + timelock_delay: 0, + }, + ) + .unwrap(); + MESSAGE_QUEUE + .push_back( + &mut deps.storage, + &QueuedMessage { + message_id: "prop-2".to_string(), + message: ExecuteMsg::ProcessMessages { + count: Some(1), + message_ids: None, + }, + submitted_at: Timestamp::default(), + timelock_delay: 0, + }, + ) + .unwrap(); + let response = get_message_ids(deps.as_ref().storage).unwrap(); + let decoded: Vec = from_binary(&response).unwrap(); + assert_eq!(decoded.len(), 2); + assert_eq!(decoded[0], "prop-1"); + assert_eq!(decoded[1], "prop-2"); + } +} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/rbac.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/rbac.rs new file mode 100644 index 000000000..b85675b4d --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/rbac.rs @@ -0,0 +1,452 @@ +use cosmwasm_std::{DepsMut, MessageInfo}; + +use crate::{ + msg::ExecuteMsg, + state::{ + rbac::Roles, + storage::{RBAC_PERMISSIONS, TIMELOCK_DELAY}, + }, + ContractError, +}; + +/// Check to see if the sender of the message can invoke the message by holding the required rbac role +/// +/// # Errors +/// +/// ContractError::Unauthorized if the sender does not have the required permission +/// +/// StdErr::NotFound if the RBAC_PERMISSIONS storage variable does not have an entry for the sender +pub fn can_invoke_message( + deps: &DepsMut, + info: &MessageInfo, + msg: &ExecuteMsg, +) -> Result<(), ContractError> { + // get the required permission to execute the message + let Some(required_permission) = msg.required_permission() else { + // no permission required so return ok + return Ok(()); + }; + let permissions = RBAC_PERMISSIONS + .load(deps.storage, info.sender.to_string()) + .unwrap_or_default(); + if permissions.contains(&required_permission) { + return Ok(()); + } + Err(ContractError::Unauthorized {}) +} + +/// Sets a timelock delay for `signer` of `hours` +pub fn set_timelock_delay( + deps: &mut DepsMut, + signer: String, + hours: u64, +) -> Result<(), ContractError> { + let signer = deps.api.addr_validate(&signer)?; + Ok(TIMELOCK_DELAY.save(deps.storage, signer.to_string(), &hours)?) +} + +/// Grants `roles` to `signer` +pub fn grant_role( + deps: &mut DepsMut, + signer: String, + roles: Vec, +) -> Result<(), ContractError> { + let signer = deps.api.addr_validate(&signer)?; + // get the current roles, if no current roles will be an empty vec + let mut current_roles = RBAC_PERMISSIONS + .load(deps.storage, signer.to_string()) + .unwrap_or_default(); + for role in roles { + current_roles.insert(role); + } + + // persist new roles + Ok(RBAC_PERMISSIONS.save(deps.storage, signer.to_string(), ¤t_roles)?) +} + +// Revokes `roles` from `signer`, if this results in an empty set of roles remove the storage variable +pub fn revoke_role( + deps: &mut DepsMut, + signer: String, + roles: Vec, +) -> Result<(), ContractError> { + let signer = deps.api.addr_validate(&signer)?; + + let mut current_roles = RBAC_PERMISSIONS.load(deps.storage, signer.to_string())?; + for role in roles { + current_roles.remove(&role); + } + if current_roles.is_empty() { + // no more roles, remove storage variable to save resources + RBAC_PERMISSIONS.remove(deps.storage, signer.to_string()); + Ok(()) + } else { + Ok(RBAC_PERMISSIONS.save(deps.storage, signer.to_string(), ¤t_roles)?) + } +} + +#[cfg(test)] +mod test { + use std::collections::BTreeSet; + + use crate::{msg::QuotaMsg, state::rbac::Roles}; + use cosmwasm_std::{testing::mock_dependencies, Addr}; + use itertools::Itertools; + + use super::*; + #[test] + fn test_set_timelock_delay() { + let mut deps = mock_dependencies(); + assert!(TIMELOCK_DELAY + .load(&deps.storage, "foobar".to_string()) + .is_err()); + set_timelock_delay(&mut deps.as_mut(), "foobar".to_string(), 6).unwrap(); + assert_eq!( + TIMELOCK_DELAY + .load(&deps.storage, "foobar".to_string()) + .unwrap(), + 6 + ); + } + #[test] + fn test_can_invoke_add_path() { + let mut deps = mock_dependencies(); + + let info_foobar = MessageInfo { + sender: Addr::unchecked("foobar".to_string()), + funds: vec![], + }; + let info_foobarbaz = MessageInfo { + sender: Addr::unchecked("foobarbaz".to_string()), + funds: vec![], + }; + let msg = ExecuteMsg::AddPath { + channel_id: "channelid".into(), + denom: "denom".into(), + quotas: vec![], + }; + RBAC_PERMISSIONS + .save( + &mut deps.storage, + "foobar".to_string(), + &vec![Roles::AddRateLimit].into_iter().collect(), + ) + .unwrap(); + + assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); + assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_err()); + } + + #[test] + fn test_can_invoke_remove_path() { + let mut deps = mock_dependencies(); + + let info_foobar = MessageInfo { + sender: Addr::unchecked("foobar".to_string()), + funds: vec![], + }; + let info_foobarbaz = MessageInfo { + sender: Addr::unchecked("foobarbaz".to_string()), + funds: vec![], + }; + let msg = ExecuteMsg::RemovePath { + channel_id: "channelid".into(), + denom: "denom".into(), + }; + RBAC_PERMISSIONS + .save( + &mut deps.storage, + "foobar".to_string(), + &vec![Roles::RemoveRateLimit].into_iter().collect(), + ) + .unwrap(); + + assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); + assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_err()); + } + + #[test] + fn test_can_invoke_reset_path_quota() { + let mut deps = mock_dependencies(); + + let info_foobar = MessageInfo { + sender: Addr::unchecked("foobar".to_string()), + funds: vec![], + }; + let info_foobarbaz = MessageInfo { + sender: Addr::unchecked("foobarbaz".to_string()), + funds: vec![], + }; + + let msg = ExecuteMsg::ResetPathQuota { + channel_id: "channelid".into(), + denom: "denom".into(), + quota_id: "quota".into(), + }; + RBAC_PERMISSIONS + .save( + &mut deps.storage, + "foobar".to_string(), + &vec![Roles::ResetPathQuota].into_iter().collect(), + ) + .unwrap(); + + assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); + assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_err()); + } + + #[test] + fn test_can_invoke_grant_role() { + let mut deps = mock_dependencies(); + + let info_foobar = MessageInfo { + sender: Addr::unchecked("foobar".to_string()), + funds: vec![], + }; + let info_foobarbaz = MessageInfo { + sender: Addr::unchecked("foobarbaz".to_string()), + funds: vec![], + }; + + let msg = ExecuteMsg::GrantRole { + signer: "signer".into(), + roles: vec![Roles::GrantRole], + }; + RBAC_PERMISSIONS + .save( + &mut deps.storage, + "foobar".to_string(), + &vec![Roles::GrantRole].into_iter().collect(), + ) + .unwrap(); + + assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); + assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_err()); + } + + #[test] + fn test_can_invoke_revoke_role() { + let mut deps = mock_dependencies(); + + let info_foobar = MessageInfo { + sender: Addr::unchecked("foobar".to_string()), + funds: vec![], + }; + let info_foobarbaz = MessageInfo { + sender: Addr::unchecked("foobarbaz".to_string()), + funds: vec![], + }; + + let msg = ExecuteMsg::RevokeRole { + signer: "signer".into(), + roles: vec![Roles::GrantRole], + }; + RBAC_PERMISSIONS + .save( + &mut deps.storage, + "foobar".to_string(), + &vec![Roles::RevokeRole].into_iter().collect(), + ) + .unwrap(); + assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); + assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_err()); + } + + #[test] + fn test_can_invoke_edit_path_quota() { + let mut deps = mock_dependencies(); + + let info_foobar = MessageInfo { + sender: Addr::unchecked("foobar".to_string()), + funds: vec![], + }; + let info_foobarbaz = MessageInfo { + sender: Addr::unchecked("foobarbaz".to_string()), + funds: vec![], + }; + + let msg = ExecuteMsg::EditPathQuota { + quota: QuotaMsg { + name: "name".into(), + duration: 0, + send_recv: (1, 2), + }, + channel_id: "channel_id".into(), + denom: "denom".into(), + }; + RBAC_PERMISSIONS + .save( + &mut deps.storage, + "foobar".to_string(), + &vec![Roles::EditPathQuota].into_iter().collect(), + ) + .unwrap(); + assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); + assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_err()); + } + + #[test] + fn test_can_invoke_remove_message() { + let mut deps = mock_dependencies(); + + let info_foobar = MessageInfo { + sender: Addr::unchecked("foobar".to_string()), + funds: vec![], + }; + let info_foobarbaz = MessageInfo { + sender: Addr::unchecked("foobarbaz".to_string()), + funds: vec![], + }; + + let msg = ExecuteMsg::RemoveMessage { + message_id: "message".into(), + }; + RBAC_PERMISSIONS + .save( + &mut deps.storage, + "foobar".to_string(), + &vec![Roles::RemoveMessage].into_iter().collect(), + ) + .unwrap(); + assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); + assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_err()); + } + + #[test] + fn test_can_invoke_set_timelock_delay() { + let mut deps = mock_dependencies(); + + let info_foobar = MessageInfo { + sender: Addr::unchecked("foobar".to_string()), + funds: vec![], + }; + let info_foobarbaz = MessageInfo { + sender: Addr::unchecked("foobarbaz".to_string()), + funds: vec![], + }; + + let msg = ExecuteMsg::SetTimelockDelay { + signer: "signer".into(), + hours: 5, + }; + RBAC_PERMISSIONS + .save( + &mut deps.storage, + "foobar".to_string(), + &vec![Roles::SetTimelockDelay].into_iter().collect(), + ) + .unwrap(); + assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); + assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_err()); + } + + #[test] + fn test_can_invoke_process_messages() { + let mut deps = mock_dependencies(); + + let info_foobar = MessageInfo { + sender: Addr::unchecked("foobar".to_string()), + funds: vec![], + }; + let info_foobarbaz = MessageInfo { + sender: Addr::unchecked("foobarbaz".to_string()), + funds: vec![], + }; + + let msg = ExecuteMsg::ProcessMessages { + count: Some(1), + message_ids: None, + }; + + // all addresses should be able to invoke this + assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); + assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_ok()); + + // try again with message_ids Some + + let msg = ExecuteMsg::ProcessMessages { + count: None, + message_ids: Some(vec!["foobar".to_string()]), + }; + + // all addresses should be able to invoke this + assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); + assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_ok()); + } + + #[test] + fn test_grant_role() { + let mut deps = mock_dependencies(); + let mut deps = deps.as_mut(); + + let all_roles = Roles::all_roles().into_iter().chunks(2); + + // no roles, should fail + assert!(RBAC_PERMISSIONS + .load(deps.storage, "signer".to_string()) + .is_err()); + + let mut granted_roles = BTreeSet::new(); + + for roles in &all_roles { + let roles = roles.collect::>(); + + grant_role(&mut deps, "signer".to_string(), roles.clone()).unwrap(); + roles.iter().for_each(|role| { + granted_roles.insert(*role); + }); + + let assigned_roles = RBAC_PERMISSIONS + .load(deps.storage, "signer".to_string()) + .unwrap(); + + assert_eq!(granted_roles, assigned_roles); + } + } + + #[test] + fn test_revoke_role() { + let mut deps = mock_dependencies(); + let mut deps = deps.as_mut(); + + let all_roles = Roles::all_roles(); + // no roles, should fail + assert!(RBAC_PERMISSIONS + .load(deps.storage, "signer".to_string()) + .is_err()); + + // grant all roles + RBAC_PERMISSIONS + .save( + deps.storage, + "signer".to_string(), + &all_roles.iter().copied().collect::>(), + ) + .unwrap(); + + let mut granted_roles: BTreeSet<_> = all_roles.iter().copied().collect(); + + for roles in &all_roles.iter().chunks(2) { + let roles = roles.copied().collect::>(); + + revoke_role(&mut deps, "signer".to_string(), roles.clone()).unwrap(); + + roles.iter().for_each(|role| { + granted_roles.remove(role); + }); + + if granted_roles.is_empty() { + // no roles, should fail + assert!(RBAC_PERMISSIONS + .load(deps.storage, "signer".to_string()) + .is_err()); + } else { + let assigned_roles = RBAC_PERMISSIONS + .load(deps.storage, "signer".to_string()) + .unwrap(); + + assert_eq!(assigned_roles, granted_roles); + } + } + } +} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/state/flow.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/state/flow.rs new file mode 100644 index 000000000..db55515f3 --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/state/flow.rs @@ -0,0 +1,167 @@ +use cosmwasm_std::{Timestamp, Uint256}; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; + +use super::quota::Quota; + +#[derive(Debug, Clone)] +pub enum FlowType { + In, + Out, +} + +/// A Flow represents the transfer of value for a denom through an IBC channel +/// during a time window. +/// +/// It tracks inflows (transfers into osmosis) and outflows (transfers out of +/// osmosis). +/// +/// The period_end represents the last point in time for which this Flow is +/// tracking the value transfer. +/// +/// Periods are discrete repeating windows. A period only starts when a contract +/// call to update the Flow (SendPacket/RecvPackt) is made, and not right after +/// the period ends. This means that if no calls happen after a period expires, +/// the next period will begin at the time of the next call and be valid for the +/// specified duration for the quota. +/// +/// This is a design decision to avoid the period calculations and thus reduce gas consumption +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema, Copy)] +pub struct Flow { + pub inflow: Uint256, + pub outflow: Uint256, + pub period_end: Timestamp, +} + +impl Flow { + pub fn new( + inflow: impl Into, + outflow: impl Into, + now: Timestamp, + duration: u64, + ) -> Self { + Self { + inflow: inflow.into(), + outflow: outflow.into(), + period_end: now.plus_seconds(duration), + } + } + + /// The balance of a flow is how much absolute value for the denom has moved + /// through the channel before period_end. It returns a tuple of + /// (balance_in, balance_out) where balance_in in is how much has been + /// transferred into the flow, and balance_out is how much value transferred + /// out. + pub fn balance(&self) -> (Uint256, Uint256) { + ( + self.inflow.saturating_sub(self.outflow), + self.outflow.saturating_sub(self.inflow), + ) + } + + /// checks if the flow, in the current state, has exceeded a max allowance + pub fn exceeds(&self, direction: &FlowType, max_inflow: Uint256, max_outflow: Uint256) -> bool { + let (balance_in, balance_out) = self.balance(); + match direction { + FlowType::In => balance_in > max_inflow, + FlowType::Out => balance_out > max_outflow, + } + } + + /// returns the balance in a direction. This is used for displaying cleaner errors + pub fn balance_on(&self, direction: &FlowType) -> Uint256 { + let (balance_in, balance_out) = self.balance(); + match direction { + FlowType::In => balance_in, + FlowType::Out => balance_out, + } + } + + /// If now is greater than the period_end, the Flow is considered expired. + pub fn is_expired(&self, now: Timestamp) -> bool { + self.period_end < now + } + + // Mutating methods + + /// Expire resets the Flow to start tracking the value transfer from the + /// moment this method is called. + pub fn expire(&mut self, now: Timestamp, duration: u64) { + self.inflow = Uint256::zero(); + self.outflow = Uint256::zero(); + self.period_end = now.plus_seconds(duration); + } + + /// Updates the current flow incrementing it by a transfer of value. + pub fn add_flow(&mut self, direction: FlowType, value: Uint256) { + match direction { + FlowType::In => self.inflow = self.inflow.saturating_add(value), + FlowType::Out => self.outflow = self.outflow.saturating_add(value), + } + } + + /// Updates the current flow reducing it by a transfer of value. + pub fn undo_flow(&mut self, direction: FlowType, value: Uint256) { + match direction { + FlowType::In => self.inflow = self.inflow.saturating_sub(value), + FlowType::Out => self.outflow = self.outflow.saturating_sub(value), + } + } + + /// Applies a transfer. If the Flow is expired (now > period_end), it will + /// reset it before applying the transfer. + pub(crate) fn apply_transfer( + &mut self, + direction: &FlowType, + funds: Uint256, + now: Timestamp, + quota: &Quota, + ) -> bool { + let mut expired = false; + if self.is_expired(now) { + self.expire(now, quota.duration); + expired = true; + } + self.add_flow(direction.clone(), funds); + expired + } +} + +#[cfg(test)] +pub mod tests { + use super::*; + + pub const RESET_TIME_DAILY: u64 = 60 * 60 * 24; + pub const RESET_TIME_WEEKLY: u64 = 60 * 60 * 24 * 7; + pub const RESET_TIME_MONTHLY: u64 = 60 * 60 * 24 * 30; + + #[test] + fn flow() { + let epoch = Timestamp::from_seconds(0); + let mut flow = Flow::new(0_u32, 0_u32, epoch, RESET_TIME_WEEKLY); + + assert!(!flow.is_expired(epoch)); + assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_DAILY))); + assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY))); + assert!(flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY).plus_nanos(1))); + + assert_eq!(flow.balance(), (0_u32.into(), 0_u32.into())); + flow.add_flow(FlowType::In, 5_u32.into()); + assert_eq!(flow.balance(), (5_u32.into(), 0_u32.into())); + flow.add_flow(FlowType::Out, 2_u32.into()); + assert_eq!(flow.balance(), (3_u32.into(), 0_u32.into())); + // Adding flow doesn't affect expiration + assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_DAILY))); + + flow.expire(epoch.plus_seconds(RESET_TIME_WEEKLY), RESET_TIME_WEEKLY); + assert_eq!(flow.balance(), (0_u32.into(), 0_u32.into())); + assert_eq!(flow.inflow, Uint256::from(0_u32)); + assert_eq!(flow.outflow, Uint256::from(0_u32)); + assert_eq!(flow.period_end, epoch.plus_seconds(RESET_TIME_WEEKLY * 2)); + + // Expiration has moved + assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY).plus_nanos(1))); + assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY * 2))); + assert!(flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY * 2).plus_nanos(1))); + } +} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/state/mod.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/state/mod.rs new file mode 100644 index 000000000..ed5e13610 --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/state/mod.rs @@ -0,0 +1,8 @@ +//! The state module provides utilities for working with contract state, as well as interacting with key-value storage + +pub mod flow; +pub mod path; +pub mod quota; +pub mod rate_limit; +pub mod rbac; +pub mod storage; diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/state/path.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/state/path.rs new file mode 100644 index 000000000..03d5a2fe0 --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/state/path.rs @@ -0,0 +1,33 @@ +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; + +/// This represents the key for our rate limiting tracker. A tuple of a denom and +/// a channel. When interacting with storage, it's preffered to use this struct +/// and call path.into() on it to convert it to the composite key of the +/// RATE_LIMIT_TRACKERS map +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] +pub struct Path { + pub denom: String, + pub channel: String, +} + +impl Path { + pub fn new(channel: impl Into, denom: impl Into) -> Self { + Path { + channel: channel.into(), + denom: denom.into(), + } + } +} + +impl From for (String, String) { + fn from(path: Path) -> (String, String) { + (path.channel, path.denom) + } +} + +impl From<&Path> for (String, String) { + fn from(path: &Path) -> (String, String) { + (path.channel.to_owned(), path.denom.to_owned()) + } +} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/state/quota.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/state/quota.rs new file mode 100644 index 000000000..ee7c543b3 --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/state/quota.rs @@ -0,0 +1,64 @@ +use cosmwasm_std::Uint256; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; + +use crate::msg::QuotaMsg; + +use super::flow::FlowType; + +/// A Quota is the percentage of the denom's total value that can be transferred +/// through the channel in a given period of time (duration) +/// +/// Percentages can be different for send and recv +/// +/// The name of the quota is expected to be a human-readable representation of +/// the duration (i.e.: "weekly", "daily", "every-six-months", ...) +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] +pub struct Quota { + pub name: String, + pub max_percentage_send: u32, + pub max_percentage_recv: u32, + pub duration: u64, + pub channel_value: Option, +} + +impl Quota { + /// Calculates the max capacity (absolute value in the same unit as + /// total_value) in each direction based on the total value of the denom in + /// the channel. The result tuple represents the max capacity when the + /// transfer is in directions: (FlowType::In, FlowType::Out) + pub fn capacity(&self) -> (Uint256, Uint256) { + match self.channel_value { + Some(total_value) => ( + total_value * Uint256::from(self.max_percentage_recv) / Uint256::from(100_u32), + total_value * Uint256::from(self.max_percentage_send) / Uint256::from(100_u32), + ), + None => (0_u32.into(), 0_u32.into()), // This should never happen, but ig the channel value is not set, we disallow any transfer + } + } + + /// returns the capacity in a direction. This is used for displaying cleaner errors + pub fn capacity_on(&self, direction: &FlowType) -> Uint256 { + let (max_in, max_out) = self.capacity(); + match direction { + FlowType::In => max_in, + FlowType::Out => max_out, + } + } +} + +impl From<&QuotaMsg> for Quota { + fn from(msg: &QuotaMsg) -> Self { + let send_recv = ( + std::cmp::min(msg.send_recv.0, 100), + std::cmp::min(msg.send_recv.1, 100), + ); + Quota { + name: msg.name.clone(), + max_percentage_send: send_recv.0, + max_percentage_recv: send_recv.1, + duration: msg.duration, + channel_value: None, + } + } +} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/state/rate_limit.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/state/rate_limit.rs new file mode 100644 index 000000000..fba96b48c --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/state/rate_limit.rs @@ -0,0 +1,98 @@ +use cosmwasm_std::{Timestamp, Uint256}; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; + +use crate::ContractError; + +use super::{ + flow::{Flow, FlowType}, + path::Path, + quota::Quota, +}; + +/// RateLimit is the main structure tracked for each channel/denom pair. Its quota +/// represents rate limit configuration, and the flow its +/// current state (i.e.: how much value has been transfered in the current period) +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] +pub struct RateLimit { + pub quota: Quota, + pub flow: Flow, +} + +impl RateLimit { + /// Checks if a transfer is allowed and updates the data structures + /// accordingly. + /// + /// If the transfer is not allowed, it will return a RateLimitExceeded error. + /// + /// Otherwise it will return a RateLimitResponse with the updated data structures + pub fn allow_transfer( + &mut self, + path: &Path, + direction: &FlowType, + funds: Uint256, + channel_value: Uint256, + now: Timestamp, + ) -> Result { + // Flow used before this transaction is applied. + // This is used to make error messages more informative + let initial_flow = self.flow.balance_on(direction); + + // Apply the transfer. From here on, we will updated the flow with the new transfer + // and check if it exceeds the quota at the current time + + let expired = self.flow.apply_transfer(direction, funds, now, &self.quota); + // Cache the channel value if it has never been set or it has expired. + if self.quota.channel_value.is_none() || expired { + self.quota.channel_value = Some(calculate_channel_value( + channel_value, + &path.denom, + funds, + direction, + )) + } + + let (max_in, max_out) = self.quota.capacity(); + // Return the effects of applying the transfer or an error. + match self.flow.exceeds(direction, max_in, max_out) { + true => Err(ContractError::RateLimitExceded { + channel: path.channel.to_string(), + denom: path.denom.to_string(), + amount: funds, + quota_name: self.quota.name.to_string(), + used: initial_flow, + max: self.quota.capacity_on(direction), + reset: self.flow.period_end, + }), + false => Ok(RateLimit { + quota: self.quota.clone(), // Cloning here because self.quota.name (String) does not allow us to implement Copy + flow: self.flow, // We can Copy flow, so this is slightly more efficient than cloning the whole RateLimit + }), + } + } +} + +// The channel value on send depends on the amount on escrow. The ibc transfer +// module modifies the escrow amount by "funds" on sends before calling the +// contract. This function takes that into account so that the channel value +// that we track matches the channel value at the moment when the ibc +// transaction started executing +fn calculate_channel_value( + channel_value: Uint256, + denom: &str, + funds: Uint256, + direction: &FlowType, +) -> Uint256 { + match direction { + FlowType::Out => { + if denom.starts_with("ibc") { + channel_value + funds // Non-Native tokens get removed from the supply on send. Add that amount back + } else { + // The commented-out code in the golang calculate channel value is what we want, but we're currently using the whole supply temporarily for efficiency. see rate_limit.go/CalculateChannelValue(..) + //channel_value - funds // Native tokens increase escrow amount on send. Remove that amount here + channel_value + } + } + FlowType::In => channel_value, + } +} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/state/rbac.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/state/rbac.rs new file mode 100644 index 000000000..76de0e70e --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/state/rbac.rs @@ -0,0 +1,78 @@ +use cosmwasm_std::Timestamp; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; + +use crate::msg::ExecuteMsg; + +/// Roles defines the available permissions that can be assigned to addresses as part of the RBAC system +#[derive( + Serialize, Deserialize, Clone, Copy, Debug, PartialEq, Eq, JsonSchema, PartialOrd, Ord, Hash, +)] +pub enum Roles { + /// Has the ability to add a new rate limit + AddRateLimit, + /// Has the ability to complete remove a configured rate limit + RemoveRateLimit, + /// Has the ability to reset tracked quotas + ResetPathQuota, + /// Has the ability to edit existing quotas + EditPathQuota, + /// Has the ability to grant roles to an address + GrantRole, + /// Has the ability to revoke granted roles to an address + RevokeRole, + /// Has the ability to remove queued messages + RemoveMessage, + /// Has the ability to alter timelock delay's + SetTimelockDelay, + // Has the ability to manage denom restrictions + ManageDenomRestrictions, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] +pub struct QueuedMessage { + /// the message that submitted to the contract after a sucessful governance proposal + pub message: ExecuteMsg, + /// the time which the message was processed by the contract + pub submitted_at: Timestamp, + /// the timelock delay that was in place when the message was queued for execution + pub timelock_delay: u64, + /// Constructed using format!("{}_{}", Env::BlockInfo::Height Env::Transaction::Index) + /// + /// Can be used to remove a message from the queue without processing it + pub message_id: String, +} + +impl Roles { + /// helper function that returns a vec containing all variants of the Roles enum + pub fn all_roles() -> Vec { + vec![ + Roles::AddRateLimit, + Roles::RemoveRateLimit, + Roles::ResetPathQuota, + Roles::EditPathQuota, + Roles::GrantRole, + Roles::RevokeRole, + Roles::RemoveMessage, + Roles::SetTimelockDelay, + Roles::ManageDenomRestrictions, + ] + } +} + +#[cfg(test)] +mod test { + use super::*; + #[test] + fn test_all_roles() { + let roles = Roles::all_roles(); + assert!(roles.contains(&Roles::AddRateLimit)); + assert!(roles.contains(&Roles::RemoveRateLimit)); + assert!(roles.contains(&Roles::ResetPathQuota)); + assert!(roles.contains(&Roles::EditPathQuota)); + assert!(roles.contains(&Roles::GrantRole)); + assert!(roles.contains(&Roles::RevokeRole)); + assert!(roles.contains(&Roles::RemoveMessage)); + assert!(roles.contains(&Roles::SetTimelockDelay)); + } +} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/state/storage.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/state/storage.rs new file mode 100644 index 000000000..6e230d3a9 --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/state/storage.rs @@ -0,0 +1,53 @@ +//! storage variables + +use std::collections::BTreeSet; + +use cosmwasm_std::Addr; +use cw_storage_plus::{Deque, Item, Map}; + +use super::{ + rate_limit::RateLimit, + rbac::{QueuedMessage, Roles}, +}; + +/// Only this address can manage the contract. This will likely be the +/// governance module, but could be set to something else if needed +pub const GOVMODULE: Item = Item::new("gov_module"); +/// Only this address can execute transfers. This will likely be the +/// IBC transfer module, but could be set to something else if needed +pub const IBCMODULE: Item = Item::new("ibc_module"); + +/// RATE_LIMIT_TRACKERS is the main state for this contract. It maps a path (IBC +/// Channel + denom) to a vector of `RateLimit`s. +/// +/// The `RateLimit` struct contains the information about how much value of a +/// denom has moved through the channel during the currently active time period +/// (channel_flow.flow) and what percentage of the denom's value we are +/// allowing to flow through that channel in a specific duration (quota) +/// +/// For simplicity, the channel in the map keys refers to the "host" channel on +/// the osmosis side. This means that on PacketSend it will refer to the source +/// channel while on PacketRecv it refers to the destination channel. +/// +/// It is the responsibility of the go module to pass the appropriate channel +/// when sending the messages +/// +/// The map key (String, String) represents (channel_id, denom). We use +/// composite keys instead of a struct to avoid having to implement the +/// PrimaryKey trait +pub const RATE_LIMIT_TRACKERS: Map<(String, String), Vec> = Map::new("flow"); + +/// Maps address -> delay, automatically applying a timelock delay to all +/// messages submitted by a specific address +pub const TIMELOCK_DELAY: Map = Map::new("timelock_delay"); + +/// Storage variable which is used to queue messages for execution that are the result of a successful dao message. +/// In order for the message to be processed, X hours must past from QueuedMessage::submited_at +pub const MESSAGE_QUEUE: Deque = Deque::new("queued_messages"); + +/// Storage variable that is used to map signing addresses and the permissions they have been granted +pub const RBAC_PERMISSIONS: Map> = Map::new("rbac"); + +/// Accepted channels for restricted denom. This is a map of denom -> channels. +/// If a denom is not in this map, it is unrestricted. +pub const ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM: Map> = Map::new("acfd"); diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/sudo.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/sudo.rs new file mode 100644 index 000000000..b3b39de4e --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/sudo.rs @@ -0,0 +1,199 @@ +use cosmwasm_std::{DepsMut, Response, Timestamp, Uint256}; + +use crate::{ + blocking::check_restricted_denoms, + packet::Packet, + state::{flow::FlowType, path::Path, rate_limit::RateLimit, storage::RATE_LIMIT_TRACKERS}, + ContractError, +}; + +// This function will process a packet and extract the paths information, funds, +// and channel value from it. This is will have to interact with the chain via grpc queries to properly +// obtain this information. +// +// For backwards compatibility, we're teporarily letting the chain override the +// denom and channel value, but these should go away in favour of the contract +// extracting these from the packet +pub fn process_packet( + deps: DepsMut, + packet: Packet, + direction: FlowType, + now: Timestamp, + #[cfg(test)] channel_value_mock: Option, +) -> Result { + check_restricted_denoms(deps.as_ref(), &packet, &direction)?; + + let (channel_id, denom) = packet.path_data(&direction); + #[allow(clippy::needless_borrow)] + let path = &Path::new(channel_id, denom); + let funds = packet.get_funds(); + + #[cfg(test)] + // When testing we override the channel value with the mock since we can't get it from the chain + let channel_value = match channel_value_mock { + Some(channel_value) => channel_value, + None => packet.channel_value(deps.as_ref(), &direction)?, // This should almost never be used, but left for completeness in case we want to send an empty channel_value from the test + }; + + #[cfg(not(test))] + let channel_value = packet.channel_value(deps.as_ref(), &direction)?; + + try_transfer(deps, path, channel_value, funds, direction, now) +} + +/// This function checks the rate limit and, if successful, stores the updated data about the value +/// that has been transfered through the channel for a specific denom. +/// If the period for a RateLimit has ended, the Flow information is reset. +/// +/// The channel_value is the current value of the denom for the the channel as +/// calculated by the caller. This should be the total supply of a denom +pub fn try_transfer( + deps: DepsMut, + path: &Path, + channel_value: Uint256, + funds: Uint256, + direction: FlowType, + now: Timestamp, +) -> Result { + // Sudo call. Only go modules should be allowed to access this + + // Fetch potential trackers for "any" channel of the required token + let any_path = Path::new("any", path.denom.clone()); + let mut any_trackers = RATE_LIMIT_TRACKERS + .may_load(deps.storage, any_path.clone().into())? + .unwrap_or_default(); + // Fetch trackers for the requested path + let mut trackers = RATE_LIMIT_TRACKERS + .may_load(deps.storage, path.into())? + .unwrap_or_default(); + + let not_configured = trackers.is_empty() && any_trackers.is_empty(); + + if not_configured { + // No Quota configured for the current path. Allowing all messages. + return Ok(Response::new() + .add_attribute("method", "try_transfer") + .add_attribute("channel_id", path.channel.to_string()) + .add_attribute("denom", path.denom.to_string()) + .add_attribute("quota", "none")); + } + + // If any of the RateLimits fails, allow_transfer() will return + // ContractError::RateLimitExceded, which we'll propagate out + let results: Vec = trackers + .iter_mut() + .map(|limit| limit.allow_transfer(path, &direction, funds, channel_value, now)) + .collect::>()?; + + let any_results: Vec = any_trackers + .iter_mut() + .map(|limit| limit.allow_transfer(path, &direction, funds, channel_value, now)) + .collect::>()?; + + RATE_LIMIT_TRACKERS.save(deps.storage, path.into(), &results)?; + RATE_LIMIT_TRACKERS.save(deps.storage, any_path.into(), &any_results)?; + + let response = Response::new() + .add_attribute("method", "try_transfer") + .add_attribute("channel_id", path.channel.to_string()) + .add_attribute("denom", path.denom.to_string()); + + // Adds the attributes for each path to the response. In prod, the + // addtribute add_rate_limit_attributes is a noop + let response: Result = + any_results.iter().try_fold(response, |acc, result| { + Ok(add_rate_limit_attributes(acc, result)) + }); + + results.iter().try_fold(response?, |acc, result| { + Ok(add_rate_limit_attributes(acc, result)) + }) +} + +// #[cfg(any(feature = "verbose_responses", test))] +fn add_rate_limit_attributes(response: Response, result: &RateLimit) -> Response { + let (used_in, used_out) = result.flow.balance(); + let (max_in, max_out) = result.quota.capacity(); + // These attributes are only added during testing. That way we avoid + // calculating these again on prod. + response + .add_attribute( + format!("{}_used_in", result.quota.name), + used_in.to_string(), + ) + .add_attribute( + format!("{}_used_out", result.quota.name), + used_out.to_string(), + ) + .add_attribute(format!("{}_max_in", result.quota.name), max_in.to_string()) + .add_attribute( + format!("{}_max_out", result.quota.name), + max_out.to_string(), + ) + .add_attribute( + format!("{}_period_end", result.quota.name), + result.flow.period_end.to_string(), + ) +} + +// Leaving the attributes in until we can conditionally compile the contract +// for the go tests in CI: https://github.com/mandrean/cw-optimizoor/issues/19 +// +// #[cfg(not(any(feature = "verbose_responses", test)))] +// fn add_rate_limit_attributes(response: Response, _result: &RateLimit) -> Response { +// response +// } + +// This function manually injects an inflow. This is used when reverting a +// packet that failed ack or timed-out. +pub fn undo_send(deps: DepsMut, packet: Packet) -> Result { + // Sudo call. Only go modules should be allowed to access this + let (channel_id, denom) = packet.path_data(&FlowType::Out); // Sends have direction out. + #[allow(clippy::needless_borrow)] + let path = &Path::new(channel_id, &denom); + let any_path = Path::new("any", &denom); + let funds = packet.get_funds(); + + let mut any_trackers = RATE_LIMIT_TRACKERS + .may_load(deps.storage, any_path.clone().into())? + .unwrap_or_default(); + let mut trackers = RATE_LIMIT_TRACKERS + .may_load(deps.storage, path.into())? + .unwrap_or_default(); + + let not_configured = trackers.is_empty() && any_trackers.is_empty(); + + if not_configured { + // No Quota configured for the current path. Allowing all messages. + return Ok(Response::new() + .add_attribute("method", "try_transfer") + .add_attribute("channel_id", path.channel.to_string()) + .add_attribute("denom", path.denom.to_string()) + .add_attribute("quota", "none")); + } + + // We force update the flow to remove a failed send + let results: Vec = trackers + .iter_mut() + .map(|limit| { + limit.flow.undo_flow(FlowType::Out, funds); + limit.to_owned() + }) + .collect(); + let any_results: Vec = any_trackers + .iter_mut() + .map(|limit| { + limit.flow.undo_flow(FlowType::Out, funds); + limit.to_owned() + }) + .collect(); + + RATE_LIMIT_TRACKERS.save(deps.storage, path.into(), &results)?; + RATE_LIMIT_TRACKERS.save(deps.storage, any_path.into(), &any_results)?; + + Ok(Response::new() + .add_attribute("method", "undo_send") + .add_attribute("channel_id", path.channel.to_string()) + .add_attribute("denom", path.denom.to_string()) + .add_attribute("any_channel", (!any_trackers.is_empty()).to_string())) +} diff --git a/x/ibc-rate-limit/genesis.go b/x/ibc-rate-limit/genesis.go new file mode 100644 index 000000000..d3f9c875c --- /dev/null +++ b/x/ibc-rate-limit/genesis.go @@ -0,0 +1,20 @@ +package ibc_rate_limit + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" +) + +// InitGenesis initializes the x/ibc-rate-limit module's state from a provided genesis +// state, which includes the parameter for the contract address. +func (i *ICS4Wrapper) InitGenesis(ctx sdk.Context, genState types.GenesisState) { + i.SetParams(ctx, genState.Params) +} + +// ExportGenesis returns the x/ibc-rate-limit module's exported genesis. +func (i *ICS4Wrapper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + return &types.GenesisState{ + Params: i.GetParams(ctx), + } +} diff --git a/x/ibc-rate-limit/genesis_test.go b/x/ibc-rate-limit/genesis_test.go new file mode 100644 index 000000000..703f5b49e --- /dev/null +++ b/x/ibc-rate-limit/genesis_test.go @@ -0,0 +1,43 @@ +package ibc_rate_limit_test + +import ( + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/suite" + + "github.com/neutron-org/neutron/v4/app/apptesting" + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" +) + +type GenesisTestSuite struct { + apptesting.KeeperTestHelper +} + +func TestGenesisTestSuite(t *testing.T) { + suite.Run(t, new(GenesisTestSuite)) +} + +func (suite *GenesisTestSuite) SetupTest() { + suite.Setup() +} + +func (suite *GenesisTestSuite) TestInitExportGenesis() { + testAddress := sdk.AccAddress([]byte("addr1_______________")).String() + suite.SetupTest() + k := suite.App.RateLimitingICS4Wrapper + + initialGenesis := types.GenesisState{ + Params: types.Params{ + ContractAddress: testAddress, + }, + } + + k.InitGenesis(suite.Ctx, initialGenesis) + + suite.Require().Equal(testAddress, k.GetParams(suite.Ctx).ContractAddress) + + exportedGenesis := k.ExportGenesis(suite.Ctx) + + suite.Require().Equal(initialGenesis, *exportedGenesis) +} diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go new file mode 100644 index 000000000..f1c7207f9 --- /dev/null +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -0,0 +1,663 @@ +package ibc_rate_limit_test + +import ( + "fmt" + "os" + "strconv" + "strings" + "testing" + "time" + + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + + bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" + + abci "github.com/cometbft/cometbft/abci/types" + sdk "github.com/cosmos/cosmos-sdk/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + "github.com/stretchr/testify/suite" + + txfeetypes "github.com/neutron-org/neutron/v4/x/txfees/types" + "github.com/osmosis-labs/osmosis/osmomath" + + "github.com/neutron-org/neutron/v4/app/apptesting" + "github.com/neutron-org/neutron/v4/tests/osmosisibctesting" + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" +) + +type MiddlewareTestSuite struct { + apptesting.KeeperTestHelper + + coordinator *ibctesting.Coordinator + + // testing chains used for convenience and readability + chainA *osmosisibctesting.TestChain + chainB *osmosisibctesting.TestChain + chainC *osmosisibctesting.TestChain + path *ibctesting.Path + pathAC *ibctesting.Path +} + +var oldConsensusMinFee = txfeetypes.ConsensusMinFee + +// Setup +func TestMiddlewareTestSuite(t *testing.T) { + suite.Run(t, new(MiddlewareTestSuite)) +} + +func NewTransferPath(chainA, chainB *osmosisibctesting.TestChain) *ibctesting.Path { + path := ibctesting.NewPath(chainA.TestChain, chainB.TestChain) + path.EndpointA.ChannelConfig.PortID = ibctesting.TransferPort + path.EndpointB.ChannelConfig.PortID = ibctesting.TransferPort + path.EndpointA.ChannelConfig.Version = transfertypes.Version + path.EndpointB.ChannelConfig.Version = transfertypes.Version + return path +} + +func (suite *MiddlewareTestSuite) SetupTest() { + suite.SkipIfWSL() + // TODO: This needs to get removed. Waiting on https://github.com/cosmos/ibc-go/issues/3123 + txfeetypes.ConsensusMinFee = osmomath.ZeroDec() + suite.Setup() + ibctesting.DefaultTestingAppInit = osmosisibctesting.SetupTestingApp + suite.coordinator = ibctesting.NewCoordinator(suite.T(), 3) + suite.chainA = &osmosisibctesting.TestChain{ + TestChain: suite.coordinator.GetChain(ibctesting.GetChainID(1)), + } + // Remove epochs to prevent minting + err := suite.chainA.MoveEpochsToTheFuture() + suite.Require().NoError(err) + // Create second chain + suite.chainB = &osmosisibctesting.TestChain{ + TestChain: suite.coordinator.GetChain(ibctesting.GetChainID(2)), + } + suite.path = NewTransferPath(suite.chainA, suite.chainB) + err = suite.chainB.MoveEpochsToTheFuture() + suite.Require().NoError(err) + suite.coordinator.Setup(suite.path) + // setup a third chain + suite.chainC = &osmosisibctesting.TestChain{ + TestChain: suite.coordinator.GetChain(ibctesting.GetChainID(3)), + } + suite.pathAC = NewTransferPath(suite.chainA, suite.chainC) + err = suite.chainC.MoveEpochsToTheFuture() + suite.Require().NoError(err) + suite.coordinator.Setup(suite.pathAC) +} + +// TODO: This needs to get removed. Waiting on https://github.com/cosmos/ibc-go/issues/3123 +func (suite *MiddlewareTestSuite) TearDownSuite() { + txfeetypes.ConsensusMinFee = oldConsensusMinFee + + for _, dir := range osmosisibctesting.TestingDirectories { + os.RemoveAll(dir) + } +} + +// Helpers +func (suite *MiddlewareTestSuite) MessageFromAToB(denom string, amount osmomath.Int) sdk.Msg { + coin := sdk.NewCoin(denom, amount) + port := suite.path.EndpointA.ChannelConfig.PortID + channel := suite.path.EndpointA.ChannelID + accountFrom := suite.chainA.SenderAccount.GetAddress().String() + accountTo := suite.chainB.SenderAccount.GetAddress().String() + timeoutHeight := clienttypes.NewHeight(10, 100) + return transfertypes.NewMsgTransfer( + port, + channel, + coin, + accountFrom, + accountTo, + timeoutHeight, + uint64(time.Now().UnixNano()), + "", + ) +} + +func (suite *MiddlewareTestSuite) MessageFromBToA(denom string, amount osmomath.Int) sdk.Msg { + coin := sdk.NewCoin(denom, amount) + port := suite.path.EndpointB.ChannelConfig.PortID + channel := suite.path.EndpointB.ChannelID + accountFrom := suite.chainB.SenderAccount.GetAddress().String() + accountTo := suite.chainA.SenderAccount.GetAddress().String() + timeoutHeight := clienttypes.NewHeight(10, 100) + return transfertypes.NewMsgTransfer( + port, + channel, + coin, + accountFrom, + accountTo, + timeoutHeight, + uint64(time.Now().UnixNano()), + "", + ) +} + +func (suite *MiddlewareTestSuite) MessageFromAToC(denom string, amount osmomath.Int) sdk.Msg { + coin := sdk.NewCoin(denom, amount) + port := suite.pathAC.EndpointA.ChannelConfig.PortID + channel := suite.pathAC.EndpointA.ChannelID + accountFrom := suite.chainA.SenderAccount.GetAddress().String() + accountTo := suite.chainC.SenderAccount.GetAddress().String() + timeoutHeight := clienttypes.NewHeight(10, 100) + return transfertypes.NewMsgTransfer( + port, + channel, + coin, + accountFrom, + accountTo, + timeoutHeight, + uint64(time.Now().UnixNano()), + "", + ) +} + +func CalculateChannelValue(ctx sdk.Context, denom string, bankKeeper bankkeeper.Keeper) osmomath.Int { + return bankKeeper.GetSupplyWithOffset(ctx, denom).Amount + + // ToDo: The commented-out code below is what we want to happen, but we're temporarily + // using the whole supply for efficiency until there's a solution for + // https://github.com/cosmos/ibc-go/issues/2664 + + // For non-native (ibc) tokens, return the supply if the token in osmosis + //if strings.HasPrefix(denom, "ibc/") { + // return bankKeeper.GetSupplyWithOffset(ctx, denom).Amount + //} + // + // For native tokens, obtain the balance held in escrow for all potential channels + //channels := channelKeeper.GetAllChannels(ctx) + //balance := osmomath.NewInt(0) + //for _, channel := range channels { + // escrowAddress := transfertypes.GetEscrowAddress("transfer", channel.ChannelId) + // balance = balance.Add(bankKeeper.GetBalance(ctx, escrowAddress, denom).Amount) + // + //} + //return balance +} + +func (suite *MiddlewareTestSuite) FullSendBToA(msg sdk.Msg) (*abci.ExecTxResult, string, error) { + sendResult, err := suite.chainB.SendMsgsNoCheck(msg) + suite.Require().NoError(err) + + packet, err := ibctesting.ParsePacketFromEvents(sendResult.GetEvents()) + suite.Require().NoError(err) + + err = suite.path.EndpointA.UpdateClient() + suite.Require().NoError(err) + + res, err := suite.path.EndpointA.RecvPacketWithResult(packet) + suite.Require().NoError(err) + + ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) + suite.Require().NoError(err) + + err = suite.path.EndpointA.UpdateClient() + suite.Require().NoError(err) + err = suite.path.EndpointB.UpdateClient() + suite.Require().NoError(err) + + return sendResult, string(ack), err +} + +func (suite *MiddlewareTestSuite) FullSendAToB(msg sdk.Msg) (*abci.ExecTxResult, string, error) { + sendResult, err := suite.chainA.SendMsgsNoCheck(msg) + if err != nil { + return nil, "", err + } + + packet, err := ibctesting.ParsePacketFromEvents(sendResult.GetEvents()) + if err != nil { + return nil, "", err + } + + err = suite.path.EndpointB.UpdateClient() + if err != nil { + return nil, "", err + } + + res, err := suite.path.EndpointB.RecvPacketWithResult(packet) + if err != nil { + return nil, "", err + } + + ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) + if err != nil { + return nil, "", err + } + + err = suite.path.EndpointA.UpdateClient() + if err != nil { + return nil, "", err + } + err = suite.path.EndpointB.UpdateClient() + if err != nil { + return nil, "", err + } + + return sendResult, string(ack), nil +} + +func (suite *MiddlewareTestSuite) FullSendAToC(msg sdk.Msg) (*abci.ExecTxResult, string, error) { + sendResult, err := suite.chainA.SendMsgsNoCheck(msg) + if err != nil { + return nil, "", err + } + + packet, err := ibctesting.ParsePacketFromEvents(sendResult.GetEvents()) + if err != nil { + return nil, "", err + } + + err = suite.pathAC.EndpointB.UpdateClient() + if err != nil { + return nil, "", err + } + + res, err := suite.pathAC.EndpointB.RecvPacketWithResult(packet) + if err != nil { + return nil, "", err + } + + ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) + if err != nil { + return nil, "", err + } + + err = suite.pathAC.EndpointA.UpdateClient() + if err != nil { + return nil, "", err + } + err = suite.pathAC.EndpointB.UpdateClient() + if err != nil { + return nil, "", err + } + + return sendResult, string(ack), nil +} + +func (suite *MiddlewareTestSuite) AssertReceive(success bool, msg sdk.Msg) (string, error) { + _, ack, err := suite.FullSendBToA(msg) + if success { + suite.Require().NoError(err) + suite.Require().NotContains(ack, "error", + "acknowledgment is an error") + } else { + suite.Require().Contains(ack, "error", + "acknowledgment is not an error") + suite.Require().Contains(ack, fmt.Sprintf("ABCI code: %d", types.ErrRateLimitExceeded.ABCICode()), + "acknowledgment error is not of the right type") + } + return ack, err +} + +func (suite *MiddlewareTestSuite) AssertSend(success bool, msg sdk.Msg) (*abci.ExecTxResult, error) { + r, _, err := suite.FullSendAToB(msg) + if success { + suite.Require().NoError(err, "IBC send failed. Expected success. %s", err) + } else { + suite.Require().Error(err, "IBC send succeeded. Expected failure") + suite.ErrorContains(err, types.ErrRateLimitExceeded.Error(), "Bad error type") + } + return r, err +} + +func (suite *MiddlewareTestSuite) BuildChannelQuota(name, channel, denom string, duration, send_percentage, recv_percentage uint32) string { + return fmt.Sprintf(` + {"channel_id": "%s", "denom": "%s", "quotas": [{"name":"%s", "duration": %d, "send_recv":[%d, %d]}] } + `, channel, denom, name, duration, send_percentage, recv_percentage) +} + +// Tests + +// Test that Sending IBC messages works when the middleware isn't configured +func (suite *MiddlewareTestSuite) TestSendTransferNoContract() { + one := osmomath.NewInt(1) + _, err := suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, one)) + suite.Require().NoError(err) +} + +// Test that Receiving IBC messages works when the middleware isn't configured +func (suite *MiddlewareTestSuite) TestReceiveTransferNoContract() { + one := osmomath.NewInt(1) + _, err := suite.AssertReceive(true, suite.MessageFromBToA(sdk.DefaultBondDenom, one)) + suite.Require().NoError(err) +} + +func (suite *MiddlewareTestSuite) initializeEscrow() (totalEscrow, expectedSed osmomath.Int) { + osmosisApp := suite.chainA.GetOsmosisApp() + supply := osmosisApp.BankKeeper.GetSupplyWithOffset(suite.chainA.GetContext(), sdk.DefaultBondDenom) + + // Move some funds from chainA to chainB so that there is something in escrow + // Each user has 10% of the supply, so we send most of the funds from one user to chainA + transferAmount := supply.Amount.QuoRaw(20) + + // When sending, the amount we're sending goes into escrow before we enter the middleware and thus + // it's used as part of the channel value in the rate limiting contract + // To account for that, we subtract the amount we'll send first (2.5% of transferAmount) here + sendAmount := transferAmount.QuoRaw(40) + + // Send from A to B + _, _, err := suite.FullSendAToB(suite.MessageFromAToB(sdk.DefaultBondDenom, transferAmount.Sub(sendAmount))) + suite.Require().NoError(err) + // Send from A to B + _, _, err = suite.FullSendBToA(suite.MessageFromBToA(sdk.DefaultBondDenom, transferAmount.Sub(sendAmount))) + suite.Require().NoError(err) + + return transferAmount, sendAmount +} + +func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { + quotaPercentage := 5 + suite.initializeEscrow() + // Get the denom and amount to send + denom := sdk.DefaultBondDenom + channel := "channel-0" + if !native { + denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-0", denom)) + fmt.Println(denomTrace) + denom = denomTrace.IBCDenom() + } + + osmosisApp := suite.chainA.GetOsmosisApp() + + // This is the first one. Inside the tests. It works as expected. + channelValue := CalculateChannelValue(suite.chainA.GetContext(), denom, osmosisApp.BankKeeper) + + // The amount to be sent is send 2.5% (quota is 5%) + quota := channelValue.QuoRaw(int64(100 / quotaPercentage)) + sendAmount := quota.QuoRaw(2) + + fmt.Printf("Testing send rate limiting for denom=%s, channelValue=%s, quota=%s, sendAmount=%s\n", denom, channelValue, quota, sendAmount) + + // Setup contract + suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + quotas := suite.BuildChannelQuota("weekly", channel, denom, 604800, 5, 5) + fmt.Println(quotas) + addr := suite.chainA.InstantiateRLContract(&suite.Suite, quotas) + suite.chainA.RegisterRateLimitingContract(addr) + + // send 2.5% (quota is 5%) + fmt.Printf("Sending %s from A to B. Represented in chain A as wrapped? %v\n", denom, !native) + _, err := suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) + suite.Require().NoError(err) + + // send 2.5% (quota is 5%) + fmt.Println("trying to send ", sendAmount) + r, _ := suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) + + // Calculate remaining allowance in the quota + attrs := suite.ExtractAttributes(suite.FindEvent(r.GetEvents(), "wasm")) + + used, ok := osmomath.NewIntFromString(attrs["weekly_used_out"]) + suite.Require().True(ok) + + suite.Require().Equal(used, sendAmount.MulRaw(2)) + + // Sending above the quota should fail. We use 2 instead of 1 here to avoid rounding issues + _, err = suite.AssertSend(false, suite.MessageFromAToB(denom, osmomath.NewInt(2))) + suite.Require().Error(err) + return attrs +} + +// Test rate limiting on sends +func (suite *MiddlewareTestSuite) TestSendTransferWithRateLimitingNative() { + // Sends denom=stake from A->B. Rate limit receives "stake" in the packet. Nothing to do in the contract + suite.fullSendTest(true) +} + +// Test rate limiting on sends +func (suite *MiddlewareTestSuite) TestSendTransferWithRateLimitingNonNative() { + // Sends denom=ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878 from A->B. + // Rate limit receives "transfer/channel-0/stake" in the packet (because transfer.relay.SendTransfer is called before the middleware) + // and should hash it before calculating the value + suite.fullSendTest(false) +} + +// Test rate limits are reset when the specified time period has passed +func (suite *MiddlewareTestSuite) TestSendTransferReset() { + // Same test as above, but the quotas get reset after time passes + attrs := suite.fullSendTest(true) + parts := strings.Split(attrs["weekly_period_end"], ".") // Splitting timestamp into secs and nanos + secs, err := strconv.ParseInt(parts[0], 10, 64) + suite.Require().NoError(err) + nanos, err := strconv.ParseInt(parts[1], 10, 64) + suite.Require().NoError(err) + resetTime := time.Unix(secs, nanos) + + // Move chainA forward one block + suite.chainA.NextBlock() + + // Reset time + one second + oneSecAfterReset := resetTime.Add(time.Second) + suite.coordinator.IncrementTimeBy(oneSecAfterReset.Sub(suite.coordinator.CurrentTime)) + + // Sending should succeed again + _, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, osmomath.NewInt(1))) + suite.Require().NoError(err) +} + +// Test rate limiting on receives +func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { + quotaPercentage := 4 + suite.initializeEscrow() + // Get the denom and amount to send + sendDenom := sdk.DefaultBondDenom + localDenom := sdk.DefaultBondDenom + channel := "channel-0" + if native { + denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-0", localDenom)) + localDenom = denomTrace.IBCDenom() + } else { + denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-0", sendDenom)) + sendDenom = denomTrace.IBCDenom() + } + + osmosisApp := suite.chainA.GetOsmosisApp() + + channelValue := CalculateChannelValue(suite.chainA.GetContext(), localDenom, osmosisApp.BankKeeper) + + // The amount to be sent is 2% (quota is 4%) + quota := channelValue.QuoRaw(int64(100 / quotaPercentage)) + sendAmount := quota.QuoRaw(2) + + fmt.Printf("Testing recv rate limiting for denom=%s, channelValue=%s, quota=%s, sendAmount=%s\n", localDenom, channelValue, quota, sendAmount) + + // Setup contract + suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + quotas := suite.BuildChannelQuota("weekly", channel, localDenom, 604800, 4, 4) + addr := suite.chainA.InstantiateRLContract(&suite.Suite, quotas) + suite.chainA.RegisterRateLimitingContract(addr) + + // receive 2.5% (quota is 5%) + fmt.Printf("Sending %s from B to A. Represented in chain A as wrapped? %v\n", sendDenom, native) + _, err := suite.AssertReceive(true, suite.MessageFromBToA(sendDenom, sendAmount)) + suite.Require().NoError(err) + + // receive 2.5% (quota is 5%) + _, err = suite.AssertReceive(true, suite.MessageFromBToA(sendDenom, sendAmount)) + suite.Require().NoError(err) + + // Sending above the quota should fail. We send 2 instead of 1 to account for rounding errors + _, err = suite.AssertReceive(false, suite.MessageFromBToA(sendDenom, osmomath.NewInt(2))) + suite.Require().NoError(err) +} + +func (suite *MiddlewareTestSuite) TestRecvTransferWithRateLimitingNative() { + // Sends denom=stake from B->A. + // Rate limit receives "stake" in the packet and should wrap it before calculating the value + // types.ReceiverChainIsSource(packet.GetSourcePort(), packet.GetSourceChannel(), data.Denom) should return false => Wrap the token + suite.fullRecvTest(true) +} + +func (suite *MiddlewareTestSuite) TestRecvTransferWithRateLimitingNonNative() { + // Sends denom=ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878 from B->A. + // Rate limit receives "transfer/channel-0/stake" in the packet and should turn it into "stake" + // types.ReceiverChainIsSource(packet.GetSourcePort(), packet.GetSourceChannel(), data.Denom) should return true => unprefix. If unprefixed is not local, hash. + suite.fullRecvTest(false) +} + +// Test no rate limiting occurs when the contract is set, but no quotas are configured for the path +func (suite *MiddlewareTestSuite) TestSendTransferNoQuota() { + // Setup contract + suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + addr := suite.chainA.InstantiateRLContract(&suite.Suite, ``) + suite.chainA.RegisterRateLimitingContract(addr) + + // send 1 token. + // If the contract doesn't have a quota for the current channel, all transfers are allowed + _, err := suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, osmomath.NewInt(1))) + suite.Require().NoError(err) +} + +// Test rate limits are reverted if a "send" fails +func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { + suite.initializeEscrow() + // Setup contract + suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) + addr := suite.chainA.InstantiateRLContract(&suite.Suite, quotas) + suite.chainA.RegisterRateLimitingContract(addr) + + // Get the escrowed amount + osmosisApp := suite.chainA.GetOsmosisApp() + // ToDo: This is what we eventually want here, but using the full supply temporarily for performance reasons. See CalculateChannelValue + // escrowAddress := transfertypes.GetEscrowAddress("transfer", "channel-0") + // escrowed := osmosisApp.BankKeeper.GetBalance(suite.chainA.GetContext(), escrowAddress, sdk.DefaultBondDenom) + escrowed := osmosisApp.BankKeeper.GetSupplyWithOffset(suite.chainA.GetContext(), sdk.DefaultBondDenom) + quota := escrowed.Amount.QuoRaw(100) // 1% of the escrowed amount + + // Use the whole quota + coins := sdk.NewCoin(sdk.DefaultBondDenom, quota) + port := suite.path.EndpointA.ChannelConfig.PortID + channel := suite.path.EndpointA.ChannelID + accountFrom := suite.chainA.SenderAccount.GetAddress().String() + timeoutHeight := clienttypes.NewHeight(10, 100) + msg := transfertypes.NewMsgTransfer(port, channel, coins, accountFrom, "INVALID", timeoutHeight, 0, "") + + // Sending the message manually because AssertSend updates both clients. We need to update the clients manually + // for this test so that the failure to receive on chain B happens after the second packet is sent from chain A. + // That way we validate that chain A is blocking as expected, but the flow is reverted after the receive failure is + // acknowledged on chain A + res, err := suite.chainA.SendMsgsNoCheck(msg) + suite.Require().NoError(err) + + // Sending again fails as the quota is filled + _, err = suite.AssertSend(false, suite.MessageFromAToB(sdk.DefaultBondDenom, quota)) + suite.Require().Error(err) + + // Move forward one block + suite.chainA.NextBlock() + suite.chainA.Coordinator.IncrementTime() + + // Update both clients + err = suite.path.EndpointA.UpdateClient() + suite.Require().NoError(err) + err = suite.path.EndpointB.UpdateClient() + suite.Require().NoError(err) + + // Execute the acknowledgement from chain B in chain A + + // extract the sent packet + packet, err := ibctesting.ParsePacketFromEvents(res.GetEvents()) + suite.Require().NoError(err) + + // recv in chain b + newRes, err := suite.path.EndpointB.RecvPacketWithResult(packet) + suite.Require().NoError(err) + + // get the ack from the chain b's response + ack, err := ibctesting.ParseAckFromEvents(newRes.GetEvents()) + suite.Require().NoError(err) + + // manually relay it to chain a + err = suite.path.EndpointA.AcknowledgePacket(packet, ack) + suite.Require().NoError(err) + + // We should be able to send again because the packet that exceeded the quota failed and has been reverted + _, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, osmomath.NewInt(1))) + suite.Require().NoError(err) +} + +func (suite *MiddlewareTestSuite) TestUnsetRateLimitingContract() { + // Setup contract + suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + addr := suite.chainA.InstantiateRLContract(&suite.Suite, "") + suite.chainA.RegisterRateLimitingContract(addr) + + // Unset the contract param + params, err := types.NewParams("") + suite.Require().NoError(err) + osmosisApp := suite.chainA.GetOsmosisApp() + paramSpace, ok := osmosisApp.AppKeepers.ParamsKeeper.GetSubspace(types.ModuleName) + suite.Require().True(ok) + // N.B.: this panics if validation fails. + paramSpace.SetParamSet(suite.chainA.GetContext(), ¶ms) +} + +// Test rate limits are reverted if a "send" fails +func (suite *MiddlewareTestSuite) TestNonICS20() { + suite.initializeEscrow() + // Setup contract + suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) + addr := suite.chainA.InstantiateRLContract(&suite.Suite, quotas) + suite.chainA.RegisterRateLimitingContract(addr) + + osmosisApp := suite.chainA.GetOsmosisApp() + + data := []byte("{}") + _, err := osmosisApp.RateLimitingICS4Wrapper.SendPacket(suite.chainA.GetContext(), capabilitytypes.NewCapability(1), "wasm.osmo1873ls0d60tg7hk00976teq9ywhzv45u3hk2urw8t3eau9eusa4eqtun9xn", "channel-0", clienttypes.NewHeight(0, 0), 1, data) + + suite.Require().Error(err) + // This will error out, but not because of rate limiting + suite.Require().NotContains(err.Error(), "rate limit") + suite.Require().Contains(err.Error(), "channel not found") +} + +func (suite *MiddlewareTestSuite) TestDenomRestrictionFlow() { + // Setup contract + suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) + contractAddr := suite.chainA.InstantiateRLContract(&suite.Suite, quotas) + suite.chainA.RegisterRateLimitingContract(contractAddr) + osmosisApp := suite.chainA.GetOsmosisApp() + govModule := osmosisApp.AccountKeeper.GetModuleAddress(govtypes.ModuleName) + + denom := sdk.DefaultBondDenom + sendAmount := osmomath.NewInt(1000) + acceptedChannel := suite.path.EndpointA.ChannelID + + // Successfully send a denom before any restrictions are added. + _, err := suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) + suite.Require().NoError(err, "Send should succeed without restrictions") + + // Sending on a diff channel should work + _, _, err = suite.FullSendAToC(suite.MessageFromAToC(denom, sendAmount)) + suite.Require().NoError(err, "Send on alternative channel should work") + + // Add a restriction that only allows sending on the accepted channel + restrictionMsg := fmt.Sprintf(`{"set_denom_restrictions": {"denom":"%s","allowed_channels":["%s"]}}`, denom, acceptedChannel) + _, err = suite.chainA.ExecuteContract(contractAddr, govModule, []byte(restrictionMsg), sdk.Coins{}) + suite.Require().NoError(err) + + // Sending on the accepted channel should succeed + _, err = suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) + suite.Require().NoError(err, "Send on accepted channel should succeed") + + // Sending on any other channel should fail + _, err = suite.AssertSend(false, suite.MessageFromAToC(denom, sendAmount)) + suite.Require().Error(err, "Send on blocked channel should fail") + + // Unset the restriction and verify that sending on other channels works again + unsetMsg := fmt.Sprintf(`{"unset_denom_restrictions": {"denom":"%s"}}`, denom) + _, err = suite.chainA.ExecuteContract(contractAddr, govModule, []byte(unsetMsg), sdk.Coins{}) + suite.Require().NoError(err, "Unsetting denom restriction should succeed") + + // Sending again on the previously blocked channel should now succeed + _, _, err = suite.FullSendAToC(suite.MessageFromAToC(denom, sendAmount)) + suite.Require().NoError(err, "Send on previously blocked channel should succeed after unsetting restriction") + +} diff --git a/x/ibc-rate-limit/ibc_module.go b/x/ibc-rate-limit/ibc_module.go new file mode 100644 index 000000000..6b101b410 --- /dev/null +++ b/x/ibc-rate-limit/ibc_module.go @@ -0,0 +1,257 @@ +package ibc_rate_limit + +import ( + "encoding/json" + "strings" + + "github.com/neutron-org/neutron/v4/x/ibc-hooks/utils" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + "github.com/cosmos/ibc-go/v8/modules/core/exported" + + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" +) + +type IBCModule struct { + app porttypes.IBCModule + ics4Middleware *ICS4Wrapper +} + +func NewIBCModule(app porttypes.IBCModule, ics4 *ICS4Wrapper) IBCModule { + return IBCModule{ + app: app, + ics4Middleware: ics4, + } +} + +// OnChanOpenInit implements the IBCModule interface +func (im *IBCModule) OnChanOpenInit(ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID string, + channelID string, + channelCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + version string, +) (string, error) { + return im.app.OnChanOpenInit( + ctx, + order, + connectionHops, + portID, + channelID, + channelCap, + counterparty, + version, + ) +} + +// OnChanOpenTry implements the IBCModule interface +func (im *IBCModule) OnChanOpenTry( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID, + channelID string, + channelCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + counterpartyVersion string, +) (string, error) { + return im.app.OnChanOpenTry(ctx, order, connectionHops, portID, channelID, channelCap, counterparty, counterpartyVersion) +} + +// OnChanOpenAck implements the IBCModule interface +func (im *IBCModule) OnChanOpenAck( + ctx sdk.Context, + portID, + channelID string, + counterpartyChannelID string, + counterpartyVersion string, +) error { + // Here we can add initial limits when a new channel is open. For now, they can be added manually on the contract + return im.app.OnChanOpenAck(ctx, portID, channelID, counterpartyChannelID, counterpartyVersion) +} + +// OnChanOpenConfirm implements the IBCModule interface +func (im *IBCModule) OnChanOpenConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + // Here we can add initial limits when a new channel is open. For now, they can be added manually on the contract + return im.app.OnChanOpenConfirm(ctx, portID, channelID) +} + +// OnChanCloseInit implements the IBCModule interface +func (im *IBCModule) OnChanCloseInit( + ctx sdk.Context, + portID, + channelID string, +) error { + // Here we can remove the limits when a new channel is closed. For now, they can remove them manually on the contract + return im.app.OnChanCloseInit(ctx, portID, channelID) +} + +// OnChanCloseConfirm implements the IBCModule interface +func (im *IBCModule) OnChanCloseConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + // Here we can remove the limits when a new channel is closed. For now, they can remove them manually on the contract + return im.app.OnChanCloseConfirm(ctx, portID, channelID) +} + +type receiverParser struct { + Receiver string `protobuf:"bytes,4,opt,name=receiver,proto3" json:"receiver,omitempty"` +} + +func ValidateReceiverAddress(packet exported.PacketI) error { + var receiverObj receiverParser + + if err := json.Unmarshal(packet.GetData(), &receiverObj); err != nil { + return err + } + if len(receiverObj.Receiver) >= 4096 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "IBC Receiver address too long. Max supported length is %d", 4096) + } + return nil +} + +// OnRecvPacket implements the IBCModule interface +func (im *IBCModule) OnRecvPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) exported.Acknowledgement { + if err := ValidateReceiverAddress(packet); err != nil { + return utils.NewEmitErrorAcknowledgement(ctx, types.ErrBadMessage, err.Error()) + } + + contract := im.ics4Middleware.GetContractAddress(ctx) + if contract == "" { + // The contract has not been configured. Continue as usual + return im.app.OnRecvPacket(ctx, packet, relayer) + } + + err := CheckAndUpdateRateLimits(ctx, im.ics4Middleware.ContractKeeper, "recv_packet", contract, packet) + if err != nil { + if strings.Contains(err.Error(), "rate limit exceeded") { + return utils.NewEmitErrorAcknowledgement(ctx, types.ErrRateLimitExceeded) + } + fullError := errorsmod.Wrap(types.ErrContractError, err.Error()) + return utils.NewEmitErrorAcknowledgement(ctx, fullError) + } + + // if this returns an Acknowledgement that isn't successful, all state changes are discarded + return im.app.OnRecvPacket(ctx, packet, relayer) +} + +// OnAcknowledgementPacket implements the IBCModule interface +func (im *IBCModule) OnAcknowledgementPacket( + ctx sdk.Context, + packet channeltypes.Packet, + acknowledgement []byte, + relayer sdk.AccAddress, +) error { + if ctx.IsCheckTx() || ctx.IsReCheckTx() { + return nil + // return im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) + } + var ack channeltypes.Acknowledgement + if err := json.Unmarshal(acknowledgement, &ack); err != nil { + return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet acknowledgement: %v", err) + } + + if utils.IsAckError(acknowledgement) { + err := im.RevertSentPacket(ctx, packet) // If there is an error here we should still handle the ack + if err != nil { + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventBadRevert, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyFailureType, "acknowledgment"), + sdk.NewAttribute(types.AttributeKeyPacket, string(packet.GetData())), + sdk.NewAttribute(types.AttributeKeyAck, string(acknowledgement)), + ), + ) + } + } + + return im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) +} + +// OnTimeoutPacket implements the IBCModule interface +func (im *IBCModule) OnTimeoutPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) error { + err := im.RevertSentPacket(ctx, packet) // If there is an error here we should still handle the timeout + if err != nil { + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventBadRevert, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyFailureType, "timeout"), + sdk.NewAttribute(types.AttributeKeyPacket, string(packet.GetData())), + ), + ) + } + return im.app.OnTimeoutPacket(ctx, packet, relayer) +} + +// RevertSentPacket Notifies the contract that a sent packet wasn't properly received +func (im *IBCModule) RevertSentPacket( + ctx sdk.Context, + packet exported.PacketI, +) error { + contract := im.ics4Middleware.GetContractAddress(ctx) + if contract == "" { + // The contract has not been configured. Continue as usual + return nil + } + + if err := UndoSendRateLimit( + ctx, + im.ics4Middleware.ContractKeeper, + contract, + packet, + ); err != nil { + return err + } + return nil +} + +// SendPacket implements the ICS4 Wrapper interface +func (im *IBCModule) SendPacket( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + sourcePort, sourceChannel string, + timeoutHeight clienttypes.Height, + timeoutTimestamp uint64, + data []byte, +) (uint64, error) { + return im.ics4Middleware.SendPacket(ctx, chanCap, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data) +} + +// WriteAcknowledgement implements the ICS4 Wrapper interface +func (im *IBCModule) WriteAcknowledgement( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + packet exported.PacketI, + ack exported.Acknowledgement, +) error { + return im.ics4Middleware.WriteAcknowledgement(ctx, chanCap, packet, ack) +} + +func (im *IBCModule) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { + return im.ics4Middleware.GetAppVersion(ctx, portID, channelID) +} diff --git a/x/ibc-rate-limit/ibcratelimitmodule/module.go b/x/ibc-rate-limit/ibcratelimitmodule/module.go new file mode 100644 index 000000000..11bdc2c24 --- /dev/null +++ b/x/ibc-rate-limit/ibcratelimitmodule/module.go @@ -0,0 +1,133 @@ +package ibcratelimitmodule + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + + "cosmossdk.io/core/appmodule" + + ibcratelimit "github.com/neutron-org/neutron/v4/x/ibc-rate-limit" + ibcratelimitclient "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client" + ibcratelimitcli "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client/cli" + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client/grpc" + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client/queryproto" + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" +) + +var ( + _ module.AppModuleBasic = AppModuleBasic{} + _ module.HasGenesisBasics = AppModuleBasic{} + + _ appmodule.AppModule = AppModule{} + _ module.HasConsensusVersion = AppModule{} + _ module.HasGenesis = AppModule{} + _ module.HasServices = AppModule{} +) + +type AppModuleBasic struct{} + +func (AppModuleBasic) Name() string { return types.ModuleName } + +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { +} + +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis performs genesis state validation for the ibc-rate-limit module. +func (b AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +// --------------------------------------- +// Interfaces. +func (b AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + queryproto.RegisterQueryHandlerClient(context.Background(), mux, queryproto.NewQueryClient(clientCtx)) //nolint:errcheck +} + +func (b AppModuleBasic) GetTxCmd() *cobra.Command { + return nil +} + +func (b AppModuleBasic) GetQueryCmd() *cobra.Command { + return ibcratelimitcli.GetQueryCmd() +} + +// RegisterInterfaces registers interfaces and implementations of the ibc-rate-limit module. +func (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) { +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface for the capability module. +type AppModule struct { + AppModuleBasic + + ics4wrapper ibcratelimit.ICS4Wrapper +} + +func NewAppModule(ics4wrapper ibcratelimit.ICS4Wrapper) AppModule { + return AppModule{ + AppModuleBasic: AppModuleBasic{}, + ics4wrapper: ics4wrapper, + } +} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} + +// IsOnePerModuleType is a marker function just indicates that this is a one-per-module type. +func (am AppModule) IsOnePerModuleType() {} + +// Name returns the txfees module's name. +func (am AppModule) Name() string { + return am.AppModuleBasic.Name() +} + +// QuerierRoute returns the ibc-rate-limit module's query routing key. +func (AppModule) QuerierRoute() string { return types.RouterKey } + +// RegisterServices registers a GRPC query service to respond to the +// module-specific GRPC queries. +func (am AppModule) RegisterServices(cfg module.Configurator) { + queryproto.RegisterQueryServer(cfg.QueryServer(), grpc.Querier{Q: ibcratelimitclient.Querier{K: am.ics4wrapper}}) +} + +// RegisterInvariants registers the txfees module's invariants. +func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} + +// InitGenesis performs the txfees module's genesis initialization It returns +// no validator updates. +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) { + var genState types.GenesisState + // Initialize global index to index in genesis state + cdc.MustUnmarshalJSON(gs, &genState) + am.ics4wrapper.InitGenesis(ctx, genState) +} + +// ExportGenesis returns the txfees module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState := am.ics4wrapper.ExportGenesis(ctx) + return cdc.MustMarshalJSON(genState) +} + +// ConsensusVersion implements AppModule/ConsensusVersion. +func (AppModule) ConsensusVersion() uint64 { return 1 } diff --git a/x/ibc-rate-limit/ics4_wrapper.go b/x/ibc-rate-limit/ics4_wrapper.go new file mode 100644 index 000000000..f42bafb6f --- /dev/null +++ b/x/ibc-rate-limit/ics4_wrapper.go @@ -0,0 +1,120 @@ +package ibc_rate_limit + +import ( + "encoding/json" + + errorsmod "cosmossdk.io/errors" + + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + sdk "github.com/cosmos/cosmos-sdk/types" + authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" + bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + "github.com/cosmos/ibc-go/v8/modules/core/exported" + + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" +) + +var ( + _ porttypes.Middleware = &IBCModule{} + _ porttypes.ICS4Wrapper = &ICS4Wrapper{} +) + +type ICS4Wrapper struct { + channel porttypes.ICS4Wrapper + accountKeeper *authkeeper.AccountKeeper + bankKeeper *bankkeeper.BaseKeeper + ContractKeeper *wasmkeeper.PermissionedKeeper + paramSpace paramtypes.Subspace +} + +func (i *ICS4Wrapper) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { + return i.channel.GetAppVersion(ctx, portID, channelID) +} + +func NewICS4Middleware( + channel porttypes.ICS4Wrapper, + accountKeeper *authkeeper.AccountKeeper, contractKeeper *wasmkeeper.PermissionedKeeper, + bankKeeper *bankkeeper.BaseKeeper, paramSpace paramtypes.Subspace, +) ICS4Wrapper { + if !paramSpace.HasKeyTable() { + paramSpace = paramSpace.WithKeyTable(types.ParamKeyTable()) + } + return ICS4Wrapper{ + channel: channel, + accountKeeper: accountKeeper, + ContractKeeper: contractKeeper, + bankKeeper: bankKeeper, + paramSpace: paramSpace, + } +} + +// SendPacket implements the ICS4 interface and is called when sending packets. +// This method retrieves the contract from the middleware's parameters and checks if the limits have been exceeded for +// the current transfer, in which case it returns an error preventing the IBC send from taking place. +// If the contract param is not configured, or the contract doesn't have a configuration for the (channel+denom) being +// used, transfers are not prevented and handled by the wrapped IBC app +func (i *ICS4Wrapper) SendPacket(ctx sdk.Context, chanCap *capabilitytypes.Capability, sourcePort, sourceChannel string, timeoutHeight clienttypes.Height, timeoutTimestamp uint64, data []byte) (uint64, error) { + var packetdata transfertypes.FungibleTokenPacketData + if err := json.Unmarshal(data, &packetdata); err != nil { + return i.channel.SendPacket(ctx, chanCap, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data) + } + if packetdata.Denom == "" || packetdata.Amount == "" { + return i.channel.SendPacket(ctx, chanCap, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data) + } + contract := i.GetContractAddress(ctx) + if contract == "" { + // The contract has not been configured. Continue as usual + return i.channel.SendPacket(ctx, chanCap, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data) + } + + // setting 0 as a default so it can be properly parsed by cosmwasm + fullPacket := channeltypes.Packet{ + Sequence: 0, + SourcePort: sourcePort, + SourceChannel: sourceChannel, + DestinationPort: "omitted", + DestinationChannel: "omitted", + Data: data, + TimeoutTimestamp: timeoutTimestamp, + TimeoutHeight: timeoutHeight, + } + + err := CheckAndUpdateRateLimits(ctx, i.ContractKeeper, "send_packet", contract, fullPacket) + if err != nil { + return 0, errorsmod.Wrap(err, "rate limit SendPacket failed to authorize transfer") + } + + return i.channel.SendPacket(ctx, chanCap, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data) +} + +func (i *ICS4Wrapper) WriteAcknowledgement(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet exported.PacketI, ack exported.Acknowledgement) error { + return i.channel.WriteAcknowledgement(ctx, chanCap, packet, ack) +} + +func (i *ICS4Wrapper) GetContractAddress(ctx sdk.Context) (contract string) { + return i.GetParams(ctx).ContractAddress +} + +func (i *ICS4Wrapper) GetParams(ctx sdk.Context) (params types.Params) { + // This was previously done via i.paramSpace.GetParamSet(ctx, ¶ms). That will + // panic if the params don't exist. This is a workaround to avoid that panic. + // Params should be refactored to just use a raw kvstore. + empty := types.Params{} + for _, pair := range params.ParamSetPairs() { + i.paramSpace.GetIfExists(ctx, pair.Key, pair.Value) + } + if params == empty { + return types.DefaultParams() + } + return params +} + +func (i *ICS4Wrapper) SetParams(ctx sdk.Context, params types.Params) { + i.paramSpace.SetParamSet(ctx, ¶ms) +} diff --git a/x/ibc-rate-limit/rate_limit.go b/x/ibc-rate-limit/rate_limit.go new file mode 100644 index 000000000..81572cf07 --- /dev/null +++ b/x/ibc-rate-limit/rate_limit.go @@ -0,0 +1,154 @@ +package ibc_rate_limit + +import ( + "encoding/json" + + errorsmod "cosmossdk.io/errors" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + sdk "github.com/cosmos/cosmos-sdk/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + "github.com/cosmos/ibc-go/v8/modules/core/exported" + + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" +) + +var ( + msgSend = "send_packet" + msgRecv = "recv_packet" +) + +func CheckAndUpdateRateLimits(ctx sdk.Context, contractKeeper *wasmkeeper.PermissionedKeeper, + msgType, contract string, packet exported.PacketI, +) error { + contractAddr, err := sdk.AccAddressFromBech32(contract) + if err != nil { + return err + } + + sendPacketMsg, err := BuildWasmExecMsg( + msgType, + packet, + ) + if err != nil { + return err + } + + _, err = contractKeeper.Sudo(ctx, contractAddr, sendPacketMsg) + + if err != nil { + return errorsmod.Wrap(types.ErrRateLimitExceeded, err.Error()) + } + + return nil +} + +type UndoSendMsg struct { + UndoSend UndoPacketMsg `json:"undo_send"` +} + +type UndoPacketMsg struct { + Packet UnwrappedPacket `json:"packet"` +} + +func UndoSendRateLimit(ctx sdk.Context, contractKeeper *wasmkeeper.PermissionedKeeper, + contract string, + packet exported.PacketI, +) error { + contractAddr, err := sdk.AccAddressFromBech32(contract) + if err != nil { + return err + } + + unwrapped, err := unwrapPacket(packet) + if err != nil { + return err + } + + msg := UndoSendMsg{UndoSend: UndoPacketMsg{Packet: unwrapped}} + asJson, err := json.Marshal(msg) + if err != nil { + return err + } + + _, err = contractKeeper.Sudo(ctx, contractAddr, asJson) + if err != nil { + return errorsmod.Wrap(types.ErrContractError, err.Error()) + } + + return nil +} + +type SendPacketMsg struct { + SendPacket PacketMsg `json:"send_packet"` +} + +type RecvPacketMsg struct { + RecvPacket PacketMsg `json:"recv_packet"` +} + +type PacketMsg struct { + Packet UnwrappedPacket `json:"packet"` +} + +type UnwrappedPacket struct { + Sequence uint64 `json:"sequence"` + SourcePort string `json:"source_port"` + SourceChannel string `json:"source_channel"` + DestinationPort string `json:"destination_port"` + DestinationChannel string `json:"destination_channel"` + Data transfertypes.FungibleTokenPacketData `json:"data"` + TimeoutHeight clienttypes.Height `json:"timeout_height"` + TimeoutTimestamp uint64 `json:"timeout_timestamp,omitempty"` +} + +func unwrapPacket(packet exported.PacketI) (UnwrappedPacket, error) { + var packetData transfertypes.FungibleTokenPacketData + err := json.Unmarshal(packet.GetData(), &packetData) + if err != nil { + return UnwrappedPacket{}, err + } + height, ok := packet.GetTimeoutHeight().(clienttypes.Height) + if !ok { + return UnwrappedPacket{}, types.ErrBadMessage + } + return UnwrappedPacket{ + Sequence: packet.GetSequence(), + SourcePort: packet.GetSourcePort(), + SourceChannel: packet.GetSourceChannel(), + DestinationPort: packet.GetDestPort(), + DestinationChannel: packet.GetDestChannel(), + Data: packetData, + TimeoutHeight: height, + TimeoutTimestamp: packet.GetTimeoutTimestamp(), + }, nil +} + +func BuildWasmExecMsg(msgType string, packet exported.PacketI) ([]byte, error) { + unwrapped, err := unwrapPacket(packet) + if err != nil { + return []byte{}, err + } + + var asJson []byte + switch { + case msgType == msgSend: + msg := SendPacketMsg{SendPacket: PacketMsg{ + Packet: unwrapped, + }} + asJson, err = json.Marshal(msg) + case msgType == msgRecv: + msg := RecvPacketMsg{RecvPacket: PacketMsg{ + Packet: unwrapped, + }} + asJson, err = json.Marshal(msg) + default: + return []byte{}, types.ErrBadMessage + } + + if err != nil { + return []byte{}, err + } + + return asJson, nil +} diff --git a/x/ibc-rate-limit/types/errors.go b/x/ibc-rate-limit/types/errors.go new file mode 100644 index 000000000..42116a7e1 --- /dev/null +++ b/x/ibc-rate-limit/types/errors.go @@ -0,0 +1,11 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" +) + +var ( + ErrRateLimitExceeded = errorsmod.Register(ModuleName, 2, "rate limit exceeded") + ErrBadMessage = errorsmod.Register(ModuleName, 3, "bad message") + ErrContractError = errorsmod.Register(ModuleName, 4, "contract error") +) diff --git a/x/ibc-rate-limit/types/events.go b/x/ibc-rate-limit/types/events.go new file mode 100644 index 000000000..36d31181e --- /dev/null +++ b/x/ibc-rate-limit/types/events.go @@ -0,0 +1,8 @@ +package types + +const ( + EventBadRevert = "bad_revert" + AttributeKeyPacket = "packet" + AttributeKeyAck = "acknowledgement" + AttributeKeyFailureType = "failure_type" +) diff --git a/x/ibc-rate-limit/types/genesis.go b/x/ibc-rate-limit/types/genesis.go new file mode 100644 index 000000000..9167936c6 --- /dev/null +++ b/x/ibc-rate-limit/types/genesis.go @@ -0,0 +1,17 @@ +package types + +// DefaultGenesis creates a default GenesisState object. +func DefaultGenesis() *GenesisState { + return &GenesisState{ + Params: DefaultParams(), + } +} + +// Validate performs basic genesis state validation returning an error upon any +// failure. +func (gs GenesisState) Validate() error { + if err := gs.Params.Validate(); err != nil { + return err + } + return nil +} diff --git a/x/ibc-rate-limit/types/genesis.pb.go b/x/ibc-rate-limit/types/genesis.pb.go new file mode 100644 index 000000000..e6c8183ef --- /dev/null +++ b/x/ibc-rate-limit/types/genesis.pb.go @@ -0,0 +1,329 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: osmosis/ibcratelimit/v1beta1/genesis.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/codec/types" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GenesisState defines the ibc-rate-limit module's genesis state. +type GenesisState struct { + // params are all the parameters of the module + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_37b7c83ed1422177, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.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 *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "osmosis.ibcratelimit.v1beta1.GenesisState") +} + +func init() { + proto.RegisterFile("osmosis/ibcratelimit/v1beta1/genesis.proto", fileDescriptor_37b7c83ed1422177) +} + +var fileDescriptor_37b7c83ed1422177 = []byte{ + // 248 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0xca, 0x2f, 0xce, 0xcd, + 0x2f, 0xce, 0x2c, 0xd6, 0xcf, 0x4c, 0x4a, 0x2e, 0x4a, 0x2c, 0x49, 0xcd, 0xc9, 0xcc, 0xcd, 0x2c, + 0xd1, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, + 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x81, 0xaa, 0xd5, 0x43, 0x56, 0xab, 0x07, 0x55, + 0x2b, 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x56, 0xa8, 0x0f, 0x62, 0x41, 0xf4, 0x48, 0x49, 0x26, + 0x83, 0x35, 0xc5, 0x43, 0x24, 0x20, 0x1c, 0x98, 0x54, 0x7a, 0x7e, 0x7e, 0x7a, 0x4e, 0xaa, 0x3e, + 0x98, 0x97, 0x54, 0x9a, 0xa6, 0x9f, 0x98, 0x57, 0x09, 0x95, 0xd2, 0xc4, 0xeb, 0xaa, 0x82, 0xc4, + 0xa2, 0xc4, 0x5c, 0xa8, 0x29, 0x4a, 0x41, 0x5c, 0x3c, 0xee, 0x10, 0x57, 0x06, 0x97, 0x24, 0x96, + 0xa4, 0x0a, 0x39, 0x71, 0xb1, 0x41, 0xe4, 0x25, 0x18, 0x15, 0x18, 0x35, 0xb8, 0x8d, 0x54, 0xf4, + 0xf0, 0xb9, 0x5a, 0x2f, 0x00, 0xac, 0xd6, 0x89, 0xe5, 0xc4, 0x3d, 0x79, 0x86, 0x20, 0xa8, 0x4e, + 0xa7, 0x90, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, + 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0xb2, 0x4a, 0xcf, 0x2c, + 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x87, 0x9a, 0xab, 0x9b, 0x93, 0x98, 0x54, 0x0c, + 0xe3, 0xe8, 0x97, 0x19, 0x99, 0xe9, 0x57, 0x80, 0x9c, 0xad, 0x0b, 0xb2, 0x4b, 0x17, 0xe2, 0xf0, + 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0xb0, 0x83, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, + 0xd1, 0x8a, 0xb8, 0xa8, 0x73, 0x01, 0x00, 0x00, +} + +func (m *GenesisState) 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 *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) 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 ErrIntOverflowGenesis + } + 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: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/ibc-rate-limit/types/keys.go b/x/ibc-rate-limit/types/keys.go new file mode 100644 index 000000000..8a278c9f5 --- /dev/null +++ b/x/ibc-rate-limit/types/keys.go @@ -0,0 +1,12 @@ +package types + +import "strings" + +const ( + ModuleName = "rate-limited-ibc" // IBC at the end to avoid conflicts with the ibc prefix + +) + +// RouterKey is the message route. Can only contain +// alphanumeric characters. +var RouterKey = strings.ReplaceAll(ModuleName, "-", "") diff --git a/x/ibc-rate-limit/types/params.go b/x/ibc-rate-limit/types/params.go new file mode 100644 index 000000000..35b172863 --- /dev/null +++ b/x/ibc-rate-limit/types/params.go @@ -0,0 +1,73 @@ +package types + +import ( + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" +) + +// Parameter store keys. +var ( + KeyContractAddress = []byte("contract") + + _ paramtypes.ParamSet = &Params{} +) + +func ParamKeyTable() paramtypes.KeyTable { + return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) +} + +func NewParams(contractAddress string) (Params, error) { + return Params{ + ContractAddress: contractAddress, + }, nil +} + +// default gamm module parameters. +func DefaultParams() Params { + return Params{ + ContractAddress: "", + } +} + +// validate params. +func (p Params) Validate() error { + if err := validateContractAddress(p.ContractAddress); err != nil { + return err + } + + return nil +} + +// Implements params.ParamSet. +func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { + return paramtypes.ParamSetPairs{ + paramtypes.NewParamSetPair(KeyContractAddress, &p.ContractAddress, validateContractAddress), + } +} + +func validateContractAddress(i interface{}) error { + v, ok := i.(string) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + // Empty strings are valid for unsetting the param + if v == "" { + return nil + } + + // Checks that the contract address is valid + bech32, err := sdk.AccAddressFromBech32(v) + if err != nil { + return err + } + + err = sdk.VerifyAddressFormat(bech32) + if err != nil { + return err + } + + return nil +} diff --git a/x/ibc-rate-limit/types/params.pb.go b/x/ibc-rate-limit/types/params.pb.go new file mode 100644 index 000000000..d0080cac4 --- /dev/null +++ b/x/ibc-rate-limit/types/params.pb.go @@ -0,0 +1,322 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: osmosis/ibcratelimit/v1beta1/params.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Params defines the parameters for the ibc-rate-limit module. +type Params struct { + ContractAddress string `protobuf:"bytes,1,opt,name=contract_address,json=contractAddress,proto3" json:"contract_address,omitempty" yaml:"contract_address"` +} + +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_4b7974c8f0f9446a, []int{0} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.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 *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func (m *Params) GetContractAddress() string { + if m != nil { + return m.ContractAddress + } + return "" +} + +func init() { + proto.RegisterType((*Params)(nil), "osmosis.ibcratelimit.v1beta1.Params") +} + +func init() { + proto.RegisterFile("osmosis/ibcratelimit/v1beta1/params.proto", fileDescriptor_4b7974c8f0f9446a) +} + +var fileDescriptor_4b7974c8f0f9446a = []byte{ + // 220 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0xcc, 0x2f, 0xce, 0xcd, + 0x2f, 0xce, 0x2c, 0xd6, 0xcf, 0x4c, 0x4a, 0x2e, 0x4a, 0x2c, 0x49, 0xcd, 0xc9, 0xcc, 0xcd, 0x2c, + 0xd1, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x2f, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0xd6, + 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x81, 0x2a, 0xd5, 0x43, 0x56, 0xaa, 0x07, 0x55, 0x2a, + 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x56, 0xa8, 0x0f, 0x62, 0x41, 0xf4, 0x28, 0x05, 0x70, 0xb1, + 0x05, 0x80, 0xcd, 0x10, 0x72, 0xe3, 0x12, 0x48, 0xce, 0xcf, 0x2b, 0x29, 0x4a, 0x4c, 0x2e, 0x89, + 0x4f, 0x4c, 0x49, 0x29, 0x4a, 0x2d, 0x2e, 0x96, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x74, 0x92, 0xfe, + 0x74, 0x4f, 0x5e, 0xbc, 0x32, 0x31, 0x37, 0xc7, 0x4a, 0x09, 0x5d, 0x85, 0x52, 0x10, 0x3f, 0x4c, + 0xc8, 0x11, 0x22, 0xe2, 0x14, 0x72, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, + 0xc9, 0x31, 0x4e, 0x78, 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, + 0x56, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x50, 0xa7, 0xea, 0xe6, + 0x24, 0x26, 0x15, 0xc3, 0x38, 0xfa, 0x65, 0x46, 0x66, 0xfa, 0x15, 0x20, 0x8f, 0xea, 0x82, 0x9c, + 0xaf, 0x0b, 0xf1, 0x6a, 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, 0xd8, 0xb9, 0xc6, 0x80, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x4d, 0x3f, 0x4f, 0xbc, 0x0f, 0x01, 0x00, 0x00, +} + +func (m *Params) 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 *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ContractAddress) > 0 { + i -= len(m.ContractAddress) + copy(dAtA[i:], m.ContractAddress) + i = encodeVarintParams(dAtA, i, uint64(len(m.ContractAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintParams(dAtA []byte, offset int, v uint64) int { + offset -= sovParams(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ContractAddress) + if l > 0 { + n += 1 + l + sovParams(uint64(l)) + } + return n +} + +func sovParams(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozParams(x uint64) (n int) { + return sovParams(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Params) 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 ErrIntOverflowParams + } + 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: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContractAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + 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 ErrInvalidLengthParams + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContractAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipParams(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthParams + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipParams(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthParams + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupParams + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthParams + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthParams = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowParams = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupParams = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/ibc-rate-limit/types/params_test.go b/x/ibc-rate-limit/types/params_test.go new file mode 100644 index 000000000..f37e4d886 --- /dev/null +++ b/x/ibc-rate-limit/types/params_test.go @@ -0,0 +1,79 @@ +package types + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestValidateContractAddress(t *testing.T) { + testCases := map[string]struct { + addr interface{} + expected bool + }{ + // ToDo: Why do tests expect the bech32 prefix to be cosmos? + "valid_addr": { + addr: "cosmos1qm0hhug8kszhcp9f3ryuecz5yw8s3e5v0n2ckd", + expected: true, + }, + "invalid_addr": { + addr: "cosmos1234", + expected: false, + }, + "invalid parameter type": { + addr: 123456, + expected: false, + }, + } + + for name, tc := range testCases { + t.Run(name, func(t *testing.T) { + err := validateContractAddress(tc.addr) + + // Assertions. + if !tc.expected { + require.Error(t, err) + return + } + + require.NoError(t, err) + }) + } +} + +func TestValidateParams(t *testing.T) { + testCases := map[string]struct { + addr interface{} + expected bool + }{ + // ToDo: Why do tests expect the bech32 prefix to be cosmos? + "valid_addr": { + addr: "cosmos1qm0hhug8kszhcp9f3ryuecz5yw8s3e5v0n2ckd", + expected: true, + }, + "invalid_addr": { + addr: "cosmos1234", + expected: false, + }, + } + + for name, tc := range testCases { + t.Run(name, func(t *testing.T) { + addr, ok := tc.addr.(string) + require.True(t, ok, "unexpected type of address") + + params := Params{ + ContractAddress: addr, + } + + err := params.Validate() + + // Assertions. + if !tc.expected { + require.Error(t, err) + } else { + require.NoError(t, err) + } + }) + } +} From 95f27b0bd126a3b41bec8652668d56131e194920 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 3 Sep 2024 09:20:00 -0300 Subject: [PATCH 012/127] init ibc-rate-limit module --- app/app.go | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/app/app.go b/app/app.go index d25bc5583..9de1a9428 100644 --- a/app/app.go +++ b/app/app.go @@ -12,7 +12,6 @@ import ( "github.com/neutron-org/neutron/v4/x/dynamicfees" dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types" - "github.com/skip-mev/feemarket/x/feemarket" feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper" feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" @@ -130,6 +129,8 @@ import ( ibc "github.com/cosmos/ibc-go/v8/modules/core" ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck ibcconnectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + ibcratelimit "github.com/neutron-org/neutron/v4/x/ibc-rate-limit" + ibcratelimittypes "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" //nolint:staticcheck ibcporttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" @@ -375,8 +376,10 @@ type App struct { PFMModule packetforward.AppModule - HooksTransferIBCModule *ibchooks.IBCMiddleware - HooksICS4Wrapper ibchooks.ICS4Middleware + HooksTransferIBCModule *ibchooks.IBCMiddleware + Ics20WasmHooks *ibchooks.WasmHooks + RateLimitingICS4Wrapper *ibcratelimit.ICS4Wrapper + HooksICS4Wrapper ibchooks.ICS4Middleware // make scoped keepers public for test purposes ScopedIBCKeeper capabilitykeeper.ScopedKeeper @@ -391,7 +394,8 @@ type App struct { ConsensusParamsKeeper consensusparamkeeper.Keeper - WasmKeeper wasmkeeper.Keeper + WasmKeeper wasmkeeper.Keeper + ContractKeeper *wasmkeeper.PermissionedKeeper // slinky MarketMapKeeper *marketmapkeeper.Keeper @@ -595,9 +599,20 @@ func New( appCodec, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), &app.ConsumerKeeper, app.UpgradeKeeper, scopedIBCKeeper, authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), ) + // ChannelKeeper wrapper for rate limiting SendPacket(). The wasmKeeper needs to be added after it's created + rateLimitingICS4Wrapper := ibcratelimit.NewICS4Middleware( + app.HooksICS4Wrapper, + &app.AccountKeeper, + // wasm keeper we set later. + nil, + &app.BankKeeper, + app.GetSubspace(ibcratelimittypes.ModuleName), + ) + app.RateLimitingICS4Wrapper = &rateLimitingICS4Wrapper + app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( appCodec, keys[icacontrollertypes.StoreKey], app.GetSubspace(icacontrollertypes.SubModuleName), - app.IBCKeeper.ChannelKeeper, // may be replaced with middleware such as ics29 feerefunder + app.RateLimitingICS4Wrapper, // may be replaced with middleware such as ics29 feerefunder app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, scopedICAControllerKeeper, app.MsgServiceRouter(), authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), @@ -605,7 +620,7 @@ func New( app.ICAHostKeeper = icahostkeeper.NewKeeper( appCodec, keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName), - app.IBCKeeper.ChannelKeeper, // may be replaced with middleware such as ics29 feerefunder + app.RateLimitingICS4Wrapper, // may be replaced with middleware such as ics29 feerefunder app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, app.AccountKeeper, scopedICAHostKeeper, app.MsgServiceRouter(), authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), @@ -665,7 +680,7 @@ func New( appCodec, keys[ibctransfertypes.StoreKey], app.GetSubspace(ibctransfertypes.ModuleName), - app.HooksICS4Wrapper, // essentially still app.IBCKeeper.ChannelKeeper under the hood because no hook overrides + app.RateLimitingICS4Wrapper, // essentially still app.IBCKeeper.ChannelKeeper under the hood because no hook overrides app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, app.AccountKeeper, @@ -862,7 +877,7 @@ func New( &app.BankKeeper, nil, nil, - app.IBCKeeper.ChannelKeeper, // may be replaced with middleware such as ics29 feerefunder + app.RateLimitingICS4Wrapper, // may be replaced with middleware such as ics29 feerefunder app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, scopedWasmKeeper, @@ -876,6 +891,9 @@ func New( wasmOpts..., ) wasmHooks.ContractKeeper = &app.WasmKeeper + app.ContractKeeper = wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) + app.RateLimitingICS4Wrapper.ContractKeeper = app.ContractKeeper + app.Ics20WasmHooks.ContractKeeper = &app.WasmKeeper app.CronKeeper.WasmMsgServer = wasmkeeper.NewMsgServerImpl(&app.WasmKeeper) cronModule := cron.NewAppModule(appCodec, app.CronKeeper) From fcb1313a76ddf520fa726acb7df3b9ef107128ed Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 3 Sep 2024 09:50:50 -0300 Subject: [PATCH 013/127] insert midlleware properly --- app/app.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/app.go b/app/app.go index 9de1a9428..91bb422fa 100644 --- a/app/app.go +++ b/app/app.go @@ -942,6 +942,13 @@ func New( ibcStack = ibcswap.NewIBCMiddleware(ibcStack, app.SwapKeeper) ibcStack = gmpmiddleware.NewIBCMiddleware(ibcStack) + // RateLimiting IBC Middleware + rateLimitingTransferModule := ibcratelimit.NewIBCModule(ibcStack, app.RateLimitingICS4Wrapper) + + // Hooks Middleware + hooksTransferModule := ibchooks.NewIBCMiddleware(&rateLimitingTransferModule, &app.HooksICS4Wrapper) + app.HooksTransferIBCModule = &hooksTransferModule + ibcRouter.AddRoute(icacontrollertypes.SubModuleName, icaControllerStack). AddRoute(icahosttypes.SubModuleName, icaHostIBCModule). AddRoute(ibctransfertypes.ModuleName, ibcStack). From 9192032691067dbd851da47baf7df28e11099e06 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 3 Sep 2024 12:40:15 -0300 Subject: [PATCH 014/127] set pfm & ibc rate middleware init earlier --- app/app.go | 44 ++++++++++++++-------------------- x/ibc-rate-limit/msg_server.go | 1 + 2 files changed, 19 insertions(+), 26 deletions(-) create mode 100644 x/ibc-rate-limit/msg_server.go diff --git a/app/app.go b/app/app.go index 91bb422fa..0de723e61 100644 --- a/app/app.go +++ b/app/app.go @@ -599,6 +599,24 @@ func New( appCodec, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), &app.ConsumerKeeper, app.UpgradeKeeper, scopedIBCKeeper, authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), ) + // PFMKeeper must be created before TransferKeeper + app.PFMKeeper = pfmkeeper.NewKeeper( + appCodec, + app.keys[pfmtypes.StoreKey], + app.TransferKeeper.Keeper, + app.IBCKeeper.ChannelKeeper, + app.FeeBurnerKeeper, + &app.BankKeeper, + app.IBCKeeper.ChannelKeeper, + authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), + ) + wasmHooks := ibchooks.NewWasmHooks(nil, sdk.GetConfig().GetBech32AccountAddrPrefix()) // The contract keeper needs to be set later + app.HooksICS4Wrapper = ibchooks.NewICS4Middleware( + app.IBCKeeper.ChannelKeeper, + app.PFMKeeper, + &wasmHooks, + ) + // ChannelKeeper wrapper for rate limiting SendPacket(). The wasmKeeper needs to be added after it's created rateLimitingICS4Wrapper := ibcratelimit.NewICS4Middleware( app.HooksICS4Wrapper, @@ -657,24 +675,6 @@ func New( app.GlobalFeeKeeper = globalfeekeeper.NewKeeper(appCodec, keys[globalfeetypes.StoreKey], authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String()) - // PFMKeeper must be created before TransferKeeper - app.PFMKeeper = pfmkeeper.NewKeeper( - appCodec, - app.keys[pfmtypes.StoreKey], - app.TransferKeeper.Keeper, - app.IBCKeeper.ChannelKeeper, - app.FeeBurnerKeeper, - &app.BankKeeper, - app.IBCKeeper.ChannelKeeper, - authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), - ) - wasmHooks := ibchooks.NewWasmHooks(nil, sdk.GetConfig().GetBech32AccountAddrPrefix()) // The contract keeper needs to be set later - app.HooksICS4Wrapper = ibchooks.NewICS4Middleware( - app.IBCKeeper.ChannelKeeper, - app.PFMKeeper, - &wasmHooks, - ) - // Create Transfer Keepers app.TransferKeeper = wrapkeeper.NewKeeper( appCodec, @@ -905,7 +905,6 @@ func New( // receive call order: wasmHooks#OnRecvPacketOverride(transferIbcModule#OnRecvPacket()) ibcHooksMiddleware := ibchooks.NewIBCMiddleware(&transferIBCModule, &app.HooksICS4Wrapper) app.HooksTransferIBCModule = &ibcHooksMiddleware - // Create static IBC router, add transfer route, then set and seal it ibcRouter := ibcporttypes.NewRouter() @@ -942,13 +941,6 @@ func New( ibcStack = ibcswap.NewIBCMiddleware(ibcStack, app.SwapKeeper) ibcStack = gmpmiddleware.NewIBCMiddleware(ibcStack) - // RateLimiting IBC Middleware - rateLimitingTransferModule := ibcratelimit.NewIBCModule(ibcStack, app.RateLimitingICS4Wrapper) - - // Hooks Middleware - hooksTransferModule := ibchooks.NewIBCMiddleware(&rateLimitingTransferModule, &app.HooksICS4Wrapper) - app.HooksTransferIBCModule = &hooksTransferModule - ibcRouter.AddRoute(icacontrollertypes.SubModuleName, icaControllerStack). AddRoute(icahosttypes.SubModuleName, icaHostIBCModule). AddRoute(ibctransfertypes.ModuleName, ibcStack). diff --git a/x/ibc-rate-limit/msg_server.go b/x/ibc-rate-limit/msg_server.go new file mode 100644 index 000000000..f9a98fe03 --- /dev/null +++ b/x/ibc-rate-limit/msg_server.go @@ -0,0 +1 @@ +package ibc_rate_limit From 03ddf4c01be913052043fab4c3801a50cf15d289 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 3 Sep 2024 12:55:19 -0300 Subject: [PATCH 015/127] init modules in proper order --- app/app.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/app.go b/app/app.go index 0de723e61..05a6699b9 100644 --- a/app/app.go +++ b/app/app.go @@ -12,6 +12,7 @@ import ( "github.com/neutron-org/neutron/v4/x/dynamicfees" dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/ibcratelimitmodule" "github.com/skip-mev/feemarket/x/feemarket" feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper" feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" @@ -486,7 +487,7 @@ func New( icahosttypes.StoreKey, capabilitytypes.StoreKey, interchainqueriesmoduletypes.StoreKey, contractmanagermoduletypes.StoreKey, interchaintxstypes.StoreKey, wasmtypes.StoreKey, feetypes.StoreKey, feeburnertypes.StoreKey, adminmoduletypes.StoreKey, ccvconsumertypes.StoreKey, tokenfactorytypes.StoreKey, pfmtypes.StoreKey, - crontypes.StoreKey, ibchookstypes.StoreKey, consensusparamtypes.StoreKey, crisistypes.StoreKey, dextypes.StoreKey, auctiontypes.StoreKey, + crontypes.StoreKey, ibcratelimittypes.ModuleName, ibchookstypes.StoreKey, consensusparamtypes.StoreKey, crisistypes.StoreKey, dextypes.StoreKey, auctiontypes.StoreKey, oracletypes.StoreKey, marketmaptypes.StoreKey, feemarkettypes.StoreKey, dynamicfeestypes.StoreKey, globalfeetypes.StoreKey, ) tkeys := storetypes.NewTransientStoreKeys(paramstypes.TStoreKey, dextypes.TStoreKey) @@ -926,6 +927,7 @@ func New( ) interchainTxsModule := interchaintxs.NewAppModule(appCodec, app.InterchainTxsKeeper, app.AccountKeeper, app.BankKeeper) contractManagerModule := contractmanager.NewAppModule(appCodec, app.ContractManagerKeeper) + ibcRateLimitmodule := ibcratelimitmodule.NewAppModule(*app.RateLimitingICS4Wrapper) ibcHooksModule := ibchooks.NewAppModule(app.AccountKeeper) app.PFMModule = packetforward.NewAppModule(app.PFMKeeper, app.GetSubspace(pfmtypes.ModuleName)) @@ -983,6 +985,7 @@ func New( feeBurnerModule, contractManagerModule, adminModule, + ibcRateLimitmodule, ibcHooksModule, tokenfactory.NewAppModule(appCodec, *app.TokenFactoryKeeper, app.AccountKeeper, app.BankKeeper), cronModule, @@ -1032,6 +1035,7 @@ func New( feetypes.ModuleName, feeburnertypes.ModuleName, adminmoduletypes.ModuleName, + ibcratelimittypes.ModuleName, ibchookstypes.ModuleName, pfmtypes.ModuleName, crontypes.ModuleName, @@ -1069,6 +1073,7 @@ func New( feetypes.ModuleName, feeburnertypes.ModuleName, adminmoduletypes.ModuleName, + ibcratelimittypes.ModuleName, ibchookstypes.ModuleName, pfmtypes.ModuleName, crontypes.ModuleName, @@ -1111,6 +1116,7 @@ func New( feetypes.ModuleName, feeburnertypes.ModuleName, adminmoduletypes.ModuleName, + ibcratelimittypes.ModuleName, ibchookstypes.ModuleName, // after auth keeper pfmtypes.ModuleName, crontypes.ModuleName, From 316a82f5fbf8268c270cd856e041ee01535b9214 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 3 Sep 2024 12:55:54 -0300 Subject: [PATCH 016/127] wip adapting tests --- testutil/test_helpers.go | 94 ++++++++ x/ibc-rate-limit/genesis_test.go | 2 +- x/ibc-rate-limit/ibc_middleware_test.go | 284 ++++++++++++------------ 3 files changed, 231 insertions(+), 149 deletions(-) diff --git a/testutil/test_helpers.go b/testutil/test_helpers.go index 87757dbef..7b4b848f0 100644 --- a/testutil/test_helpers.go +++ b/testutil/test_helpers.go @@ -4,14 +4,20 @@ import ( "bytes" "encoding/json" "fmt" + "math/rand" "os" "path" "testing" "time" + "cosmossdk.io/api/tendermint/abci" tmrand "github.com/cometbft/cometbft/libs/rand" + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" icacontrollerkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/keeper" icacontrollertypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types" + "github.com/stretchr/testify/require" "github.com/neutron-org/neutron/v4/utils" @@ -48,6 +54,7 @@ import ( ccv "github.com/cosmos/interchain-security/v5/x/ccv/types" cmttypes "github.com/cometbft/cometbft/types" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" ) var ( @@ -85,14 +92,17 @@ type IBCConnectionTestSuite struct { ChainProvider *ibctesting.TestChain ChainA *ibctesting.TestChain ChainB *ibctesting.TestChain + ChainC *ibctesting.TestChain ProviderApp e2e.ProviderApp ChainAApp e2e.ConsumerApp ChainBApp e2e.ConsumerApp + ChainCApp e2e.ConsumerApp CCVPathA *ibctesting.Path CCVPathB *ibctesting.Path Path *ibctesting.Path + PathAC *ibctesting.Path TransferPath *ibctesting.Path } @@ -130,9 +140,11 @@ func (suite *IBCConnectionTestSuite) SetupTest() { suite.ChainProvider = suite.Coordinator.GetChain(ibctesting.GetChainID(1)) suite.ChainA = suite.Coordinator.GetChain(ibctesting.GetChainID(2)) suite.ChainB = suite.Coordinator.GetChain(ibctesting.GetChainID(3)) + suite.ChainC = suite.Coordinator.GetChain(ibctesting.GetChainID(4)) suite.ProviderApp = suite.ChainProvider.App.(*appProvider.App) suite.ChainAApp = suite.ChainA.App.(*app.App) suite.ChainBApp = suite.ChainB.App.(*app.App) + suite.ChainCApp = suite.ChainB.App.(*app.App) providerKeeper := suite.ProviderApp.GetProviderKeeper() consumerKeeperA := suite.ChainAApp.GetConsumerKeeper() @@ -216,6 +228,11 @@ func (suite *IBCConnectionTestSuite) SetupTest() { suite.Path = NewICAPath(suite.ChainA, suite.ChainB, suite.ChainProvider) suite.Coordinator.SetupConnections(suite.Path) + + suite.PathAC = NewICAPath(suite.ChainA, suite.ChainC, suite.ChainProvider) + + suite.Coordinator.SetupConnections(suite.Path) + } func (suite *IBCConnectionTestSuite) ConfigureTransferChannel() { @@ -520,3 +537,80 @@ func SetupTransferPath(path *ibctesting.Path) error { return path.EndpointB.ChanOpenConfirm() } + +// SendMsgsNoCheck is an alternative to ibctesting.TestChain.SendMsgs so that it doesn't check for errors. That should be handled by the caller +func (suite *IBCConnectionTestSuite) SendMsgsNoCheck(chain *ibctesting.TestChain, msgs ...sdk.Msg) (*abci.ExecTxResult, error) { + // ensure the suite has the latest time + suite.Coordinator.UpdateTimeForChain(chain) + + // increment acc sequence regardless of success or failure tx execution + defer func() { + err := suite.ChainA.SenderAccount.SetSequence(chain.SenderAccount.GetSequence() + 1) + if err != nil { + panic(err) + } + }() + + resp, err := SignAndDeliver(chain.TB, chain.TxConfig, chain.App.GetBaseApp(), msgs, chain.ChainID, []uint64{chain.SenderAccount.GetAccountNumber()}, []uint64{suite.SenderAccount.GetSequence()}, suite.CurrentHeader.GetTime(), suite.NextVals.Hash(), suite.SenderPrivKey) + if err != nil { + return nil, err + } + + chain.commitBlock(resp) + + suite.Coordinator.IncrementTime() + + require.Len(chain.TB, resp.TxResults, 1) + txResult := resp.TxResults[0] + + if txResult.Code != 0 { + return txResult, fmt.Errorf("%s/%d: %q", txResult.Codespace, txResult.Code, txResult.Log) + } + + suite.Coordinator.IncrementTime() + + return txResult, nil +} + +// SignAndDeliver signs and delivers a transaction without asserting the results. This overrides the function +// from ibctesting +func SignAndDeliver( + tb testing.TB, + txCfg client.TxConfig, + app *baseapp.BaseApp, + msgs []sdk.Msg, + chainID string, + accNums, accSeqs []uint64, + blockTime time.Time, + nextValHash []byte, + priv ...cryptotypes.PrivKey, +) (res *abci.ResponseFinalizeBlock, err error) { + tb.Helper() + tx, err := simtestutil.GenSignedMockTx( + rand.New(rand.NewSource(time.Now().UnixNano())), + txCfg, + msgs, + sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)}, + simtestutil.DefaultGenTxGas, + chainID, + accNums, + accSeqs, + priv..., + ) + + if err != nil { + return nil, err + } + + txBytes, err := txCfg.TxEncoder()(tx) + if err != nil { + return nil, err + } + + return app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: app.LastBlockHeight() + 1, + Time: blockTime, + NextValidatorsHash: nextValHash, + Txs: [][]byte{txBytes}, + }) +} diff --git a/x/ibc-rate-limit/genesis_test.go b/x/ibc-rate-limit/genesis_test.go index 703f5b49e..afa8f7c30 100644 --- a/x/ibc-rate-limit/genesis_test.go +++ b/x/ibc-rate-limit/genesis_test.go @@ -6,7 +6,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/suite" - "github.com/neutron-org/neutron/v4/app/apptesting" + "github.com/neutron-org/neutron/v4/testutil/apptesting" "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" ) diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index f1c7207f9..35f2e8340 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -2,13 +2,14 @@ package ibc_rate_limit_test import ( "fmt" - "os" "strconv" "strings" "testing" "time" + sdkmath "cosmossdk.io/math" capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + "github.com/neutron-org/neutron/v4/testutil" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" @@ -20,36 +21,22 @@ import ( ibctesting "github.com/cosmos/ibc-go/v8/testing" "github.com/stretchr/testify/suite" - txfeetypes "github.com/neutron-org/neutron/v4/x/txfees/types" - "github.com/osmosis-labs/osmosis/osmomath" - - "github.com/neutron-org/neutron/v4/app/apptesting" - "github.com/neutron-org/neutron/v4/tests/osmosisibctesting" "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" ) type MiddlewareTestSuite struct { - apptesting.KeeperTestHelper - - coordinator *ibctesting.Coordinator - - // testing chains used for convenience and readability - chainA *osmosisibctesting.TestChain - chainB *osmosisibctesting.TestChain - chainC *osmosisibctesting.TestChain - path *ibctesting.Path - pathAC *ibctesting.Path + testutil.IBCConnectionTestSuite } -var oldConsensusMinFee = txfeetypes.ConsensusMinFee +//var oldConsensusMinFee = txfeetypes.ConsensusMinFee // Setup func TestMiddlewareTestSuite(t *testing.T) { suite.Run(t, new(MiddlewareTestSuite)) } -func NewTransferPath(chainA, chainB *osmosisibctesting.TestChain) *ibctesting.Path { - path := ibctesting.NewPath(chainA.TestChain, chainB.TestChain) +func NewTransferPath(chainA, chainB *ibctesting.TestChain) *ibctesting.Path { + path := ibctesting.NewPath(chainA, chainB) path.EndpointA.ChannelConfig.PortID = ibctesting.TransferPort path.EndpointB.ChannelConfig.PortID = ibctesting.TransferPort path.EndpointA.ChannelConfig.Version = transfertypes.Version @@ -57,53 +44,54 @@ func NewTransferPath(chainA, chainB *osmosisibctesting.TestChain) *ibctesting.Pa return path } -func (suite *MiddlewareTestSuite) SetupTest() { - suite.SkipIfWSL() - // TODO: This needs to get removed. Waiting on https://github.com/cosmos/ibc-go/issues/3123 - txfeetypes.ConsensusMinFee = osmomath.ZeroDec() - suite.Setup() - ibctesting.DefaultTestingAppInit = osmosisibctesting.SetupTestingApp - suite.coordinator = ibctesting.NewCoordinator(suite.T(), 3) - suite.chainA = &osmosisibctesting.TestChain{ - TestChain: suite.coordinator.GetChain(ibctesting.GetChainID(1)), - } - // Remove epochs to prevent minting - err := suite.chainA.MoveEpochsToTheFuture() - suite.Require().NoError(err) - // Create second chain - suite.chainB = &osmosisibctesting.TestChain{ - TestChain: suite.coordinator.GetChain(ibctesting.GetChainID(2)), - } - suite.path = NewTransferPath(suite.chainA, suite.chainB) - err = suite.chainB.MoveEpochsToTheFuture() - suite.Require().NoError(err) - suite.coordinator.Setup(suite.path) - // setup a third chain - suite.chainC = &osmosisibctesting.TestChain{ - TestChain: suite.coordinator.GetChain(ibctesting.GetChainID(3)), - } - suite.pathAC = NewTransferPath(suite.chainA, suite.chainC) - err = suite.chainC.MoveEpochsToTheFuture() - suite.Require().NoError(err) - suite.coordinator.Setup(suite.pathAC) -} +// +//func (suite *MiddlewareTestSuite) SetupTest() { +// suite.SkipIfWSL() +// // TODO: This needs to get removed. Waiting on https://github.com/cosmos/ibc-go/issues/3123 +// txfeetypes.ConsensusMinFee = osmomath.ZeroDec() +// suite.Setup() +// ibctesting.DefaultTestingAppInit = osmosisibctesting.SetupTestingApp +// suite.coordinator = ibctesting.NewCoordinator(suite.T(), 3) +// suite.chainA = &osmosisibctesting.TestChain{ +// TestChain: suite.coordinator.GetChain(ibctesting.GetChainID(1)), +// } +// // Remove epochs to prevent minting +// err := suite.chainA.MoveEpochsToTheFuture() +// suite.Require().NoError(err) +// // Create second chain +// suite.chainB = &osmosisibctesting.TestChain{ +// TestChain: suite.coordinator.GetChain(ibctesting.GetChainID(2)), +// } +// suite.path = NewTransferPath(suite.chainA, suite.chainB) +// err = suite.chainB.MoveEpochsToTheFuture() +// suite.Require().NoError(err) +// suite.coordinator.Setup(suite.path) +// // setup a third chain +// suite.chainC = &osmosisibctesting.TestChain{ +// TestChain: suite.coordinator.GetChain(ibctesting.GetChainID(3)), +// } +// suite.pathAC = NewTransferPath(suite.chainA, suite.chainC) +// err = suite.chainC.MoveEpochsToTheFuture() +// suite.Require().NoError(err) +// suite.coordinator.Setup(suite.pathAC) +//} // TODO: This needs to get removed. Waiting on https://github.com/cosmos/ibc-go/issues/3123 -func (suite *MiddlewareTestSuite) TearDownSuite() { - txfeetypes.ConsensusMinFee = oldConsensusMinFee - - for _, dir := range osmosisibctesting.TestingDirectories { - os.RemoveAll(dir) - } -} +//func (suite *MiddlewareTestSuite) TearDownSuite() { +// txfeetypes.ConsensusMinFee = oldConsensusMinFee +// +// for _, dir := range osmosisibctesting.TestingDirectories { +// os.RemoveAll(dir) +// } +//} // Helpers -func (suite *MiddlewareTestSuite) MessageFromAToB(denom string, amount osmomath.Int) sdk.Msg { +func (suite *MiddlewareTestSuite) MessageFromAToB(denom string, amount sdkmath.Int) sdk.Msg { coin := sdk.NewCoin(denom, amount) - port := suite.path.EndpointA.ChannelConfig.PortID - channel := suite.path.EndpointA.ChannelID - accountFrom := suite.chainA.SenderAccount.GetAddress().String() - accountTo := suite.chainB.SenderAccount.GetAddress().String() + port := suite.Path.EndpointA.ChannelConfig.PortID + channel := suite.Path.EndpointA.ChannelID + accountFrom := suite.ChainA.SenderAccount.GetAddress().String() + accountTo := suite.ChainB.SenderAccount.GetAddress().String() timeoutHeight := clienttypes.NewHeight(10, 100) return transfertypes.NewMsgTransfer( port, @@ -117,12 +105,12 @@ func (suite *MiddlewareTestSuite) MessageFromAToB(denom string, amount osmomath. ) } -func (suite *MiddlewareTestSuite) MessageFromBToA(denom string, amount osmomath.Int) sdk.Msg { +func (suite *MiddlewareTestSuite) MessageFromBToA(denom string, amount sdkmath.Int) sdk.Msg { coin := sdk.NewCoin(denom, amount) - port := suite.path.EndpointB.ChannelConfig.PortID - channel := suite.path.EndpointB.ChannelID - accountFrom := suite.chainB.SenderAccount.GetAddress().String() - accountTo := suite.chainA.SenderAccount.GetAddress().String() + port := suite.Path.EndpointB.ChannelConfig.PortID + channel := suite.Path.EndpointB.ChannelID + accountFrom := suite.ChainB.SenderAccount.GetAddress().String() + accountTo := suite.ChainA.SenderAccount.GetAddress().String() timeoutHeight := clienttypes.NewHeight(10, 100) return transfertypes.NewMsgTransfer( port, @@ -136,12 +124,12 @@ func (suite *MiddlewareTestSuite) MessageFromBToA(denom string, amount osmomath. ) } -func (suite *MiddlewareTestSuite) MessageFromAToC(denom string, amount osmomath.Int) sdk.Msg { +func (suite *MiddlewareTestSuite) MessageFromAToC(denom string, amount sdkmath.Int) sdk.Msg { coin := sdk.NewCoin(denom, amount) - port := suite.pathAC.EndpointA.ChannelConfig.PortID - channel := suite.pathAC.EndpointA.ChannelID - accountFrom := suite.chainA.SenderAccount.GetAddress().String() - accountTo := suite.chainC.SenderAccount.GetAddress().String() + port := suite.PathAC.EndpointA.ChannelConfig.PortID + channel := suite.PathAC.EndpointA.ChannelID + accountFrom := suite.ChainA.SenderAccount.GetAddress().String() + accountTo := suite.ChainC.SenderAccount.GetAddress().String() timeoutHeight := clienttypes.NewHeight(10, 100) return transfertypes.NewMsgTransfer( port, @@ -155,8 +143,8 @@ func (suite *MiddlewareTestSuite) MessageFromAToC(denom string, amount osmomath. ) } -func CalculateChannelValue(ctx sdk.Context, denom string, bankKeeper bankkeeper.Keeper) osmomath.Int { - return bankKeeper.GetSupplyWithOffset(ctx, denom).Amount +func CalculateChannelValue(ctx sdk.Context, denom string, bankKeeper bankkeeper.Keeper) sdkmath.Int { + return bankKeeper.GetSupply(ctx, denom).Amount // ToDo: The commented-out code below is what we want to happen, but we're temporarily // using the whole supply for efficiency until there's a solution for @@ -179,31 +167,31 @@ func CalculateChannelValue(ctx sdk.Context, denom string, bankKeeper bankkeeper. } func (suite *MiddlewareTestSuite) FullSendBToA(msg sdk.Msg) (*abci.ExecTxResult, string, error) { - sendResult, err := suite.chainB.SendMsgsNoCheck(msg) + sendResult, err := suite.SendMsgsNoCheck(suite.ChainA, msg) suite.Require().NoError(err) packet, err := ibctesting.ParsePacketFromEvents(sendResult.GetEvents()) suite.Require().NoError(err) - err = suite.path.EndpointA.UpdateClient() + err = suite.Path.EndpointA.UpdateClient() suite.Require().NoError(err) - res, err := suite.path.EndpointA.RecvPacketWithResult(packet) + res, err := suite.Path.EndpointA.RecvPacketWithResult(packet) suite.Require().NoError(err) ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) suite.Require().NoError(err) - err = suite.path.EndpointA.UpdateClient() + err = suite.Path.EndpointA.UpdateClient() suite.Require().NoError(err) - err = suite.path.EndpointB.UpdateClient() + err = suite.Path.EndpointB.UpdateClient() suite.Require().NoError(err) return sendResult, string(ack), err } func (suite *MiddlewareTestSuite) FullSendAToB(msg sdk.Msg) (*abci.ExecTxResult, string, error) { - sendResult, err := suite.chainA.SendMsgsNoCheck(msg) + sendResult, err := suite.SendMsgsNoCheck(suite.ChainA, msg) if err != nil { return nil, "", err } @@ -213,12 +201,12 @@ func (suite *MiddlewareTestSuite) FullSendAToB(msg sdk.Msg) (*abci.ExecTxResult, return nil, "", err } - err = suite.path.EndpointB.UpdateClient() + err = suite.Path.EndpointB.UpdateClient() if err != nil { return nil, "", err } - res, err := suite.path.EndpointB.RecvPacketWithResult(packet) + res, err := suite.Path.EndpointB.RecvPacketWithResult(packet) if err != nil { return nil, "", err } @@ -228,11 +216,11 @@ func (suite *MiddlewareTestSuite) FullSendAToB(msg sdk.Msg) (*abci.ExecTxResult, return nil, "", err } - err = suite.path.EndpointA.UpdateClient() + err = suite.Path.EndpointA.UpdateClient() if err != nil { return nil, "", err } - err = suite.path.EndpointB.UpdateClient() + err = suite.Path.EndpointB.UpdateClient() if err != nil { return nil, "", err } @@ -241,7 +229,7 @@ func (suite *MiddlewareTestSuite) FullSendAToB(msg sdk.Msg) (*abci.ExecTxResult, } func (suite *MiddlewareTestSuite) FullSendAToC(msg sdk.Msg) (*abci.ExecTxResult, string, error) { - sendResult, err := suite.chainA.SendMsgsNoCheck(msg) + sendResult, err := suite.SendMsgsNoCheck(suite.ChainA, msg) if err != nil { return nil, "", err } @@ -251,12 +239,12 @@ func (suite *MiddlewareTestSuite) FullSendAToC(msg sdk.Msg) (*abci.ExecTxResult, return nil, "", err } - err = suite.pathAC.EndpointB.UpdateClient() + err = suite.PathAC.EndpointB.UpdateClient() if err != nil { return nil, "", err } - res, err := suite.pathAC.EndpointB.RecvPacketWithResult(packet) + res, err := suite.PathAC.EndpointB.RecvPacketWithResult(packet) if err != nil { return nil, "", err } @@ -266,11 +254,11 @@ func (suite *MiddlewareTestSuite) FullSendAToC(msg sdk.Msg) (*abci.ExecTxResult, return nil, "", err } - err = suite.pathAC.EndpointA.UpdateClient() + err = suite.PathAC.EndpointA.UpdateClient() if err != nil { return nil, "", err } - err = suite.pathAC.EndpointB.UpdateClient() + err = suite.PathAC.EndpointB.UpdateClient() if err != nil { return nil, "", err } @@ -314,21 +302,21 @@ func (suite *MiddlewareTestSuite) BuildChannelQuota(name, channel, denom string, // Test that Sending IBC messages works when the middleware isn't configured func (suite *MiddlewareTestSuite) TestSendTransferNoContract() { - one := osmomath.NewInt(1) + one := sdkmath.NewInt(1) _, err := suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, one)) suite.Require().NoError(err) } // Test that Receiving IBC messages works when the middleware isn't configured func (suite *MiddlewareTestSuite) TestReceiveTransferNoContract() { - one := osmomath.NewInt(1) + one := sdkmath.NewInt(1) _, err := suite.AssertReceive(true, suite.MessageFromBToA(sdk.DefaultBondDenom, one)) suite.Require().NoError(err) } -func (suite *MiddlewareTestSuite) initializeEscrow() (totalEscrow, expectedSed osmomath.Int) { - osmosisApp := suite.chainA.GetOsmosisApp() - supply := osmosisApp.BankKeeper.GetSupplyWithOffset(suite.chainA.GetContext(), sdk.DefaultBondDenom) +func (suite *MiddlewareTestSuite) initializeEscrow() (totalEscrow, expectedSed sdkmath.Int) { + app := suite.GetNeutronZoneApp(suite.ChainA) + supply := app.BankKeeper.GetSupply(suite.ChainA.GetContext(), sdk.DefaultBondDenom) // Move some funds from chainA to chainB so that there is something in escrow // Each user has 10% of the supply, so we send most of the funds from one user to chainA @@ -361,10 +349,10 @@ func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { denom = denomTrace.IBCDenom() } - osmosisApp := suite.chainA.GetOsmosisApp() + app := suite.GetNeutronZoneApp(suite.ChainA) // This is the first one. Inside the tests. It works as expected. - channelValue := CalculateChannelValue(suite.chainA.GetContext(), denom, osmosisApp.BankKeeper) + channelValue := CalculateChannelValue(suite.ChainA.GetContext(), denom, app.BankKeeper) // The amount to be sent is send 2.5% (quota is 5%) quota := channelValue.QuoRaw(int64(100 / quotaPercentage)) @@ -373,11 +361,11 @@ func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { fmt.Printf("Testing send rate limiting for denom=%s, channelValue=%s, quota=%s, sendAmount=%s\n", denom, channelValue, quota, sendAmount) // Setup contract - suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + suite.ChainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", channel, denom, 604800, 5, 5) fmt.Println(quotas) - addr := suite.chainA.InstantiateRLContract(&suite.Suite, quotas) - suite.chainA.RegisterRateLimitingContract(addr) + addr := suite.ChainA.InstantiateRLContract(&suite.Suite, quotas) + suite.ChainA.RegisterRateLimitingContract(addr) // send 2.5% (quota is 5%) fmt.Printf("Sending %s from A to B. Represented in chain A as wrapped? %v\n", denom, !native) @@ -391,13 +379,13 @@ func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { // Calculate remaining allowance in the quota attrs := suite.ExtractAttributes(suite.FindEvent(r.GetEvents(), "wasm")) - used, ok := osmomath.NewIntFromString(attrs["weekly_used_out"]) + used, ok := sdkmath.NewIntFromString(attrs["weekly_used_out"]) suite.Require().True(ok) suite.Require().Equal(used, sendAmount.MulRaw(2)) // Sending above the quota should fail. We use 2 instead of 1 here to avoid rounding issues - _, err = suite.AssertSend(false, suite.MessageFromAToB(denom, osmomath.NewInt(2))) + _, err = suite.AssertSend(false, suite.MessageFromAToB(denom, sdkmath.NewInt(2))) suite.Require().Error(err) return attrs } @@ -428,14 +416,14 @@ func (suite *MiddlewareTestSuite) TestSendTransferReset() { resetTime := time.Unix(secs, nanos) // Move chainA forward one block - suite.chainA.NextBlock() + suite.ChainA.NextBlock() // Reset time + one second oneSecAfterReset := resetTime.Add(time.Second) - suite.coordinator.IncrementTimeBy(oneSecAfterReset.Sub(suite.coordinator.CurrentTime)) + suite.Coordinator.IncrementTimeBy(oneSecAfterReset.Sub(suite.Coordinator.CurrentTime)) // Sending should succeed again - _, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, osmomath.NewInt(1))) + _, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sdkmath.NewInt(1))) suite.Require().NoError(err) } @@ -455,9 +443,9 @@ func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { sendDenom = denomTrace.IBCDenom() } - osmosisApp := suite.chainA.GetOsmosisApp() + app := suite.GetNeutronZoneApp(suite.ChainA) - channelValue := CalculateChannelValue(suite.chainA.GetContext(), localDenom, osmosisApp.BankKeeper) + channelValue := CalculateChannelValue(suite.ChainA.GetContext(), localDenom, app.BankKeeper) // The amount to be sent is 2% (quota is 4%) quota := channelValue.QuoRaw(int64(100 / quotaPercentage)) @@ -466,10 +454,10 @@ func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { fmt.Printf("Testing recv rate limiting for denom=%s, channelValue=%s, quota=%s, sendAmount=%s\n", localDenom, channelValue, quota, sendAmount) // Setup contract - suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + suite.ChainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", channel, localDenom, 604800, 4, 4) - addr := suite.chainA.InstantiateRLContract(&suite.Suite, quotas) - suite.chainA.RegisterRateLimitingContract(addr) + addr := suite.ChainA.InstantiateRLContract(&suite.Suite, quotas) + suite.ChainA.RegisterRateLimitingContract(addr) // receive 2.5% (quota is 5%) fmt.Printf("Sending %s from B to A. Represented in chain A as wrapped? %v\n", sendDenom, native) @@ -481,7 +469,7 @@ func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { suite.Require().NoError(err) // Sending above the quota should fail. We send 2 instead of 1 to account for rounding errors - _, err = suite.AssertReceive(false, suite.MessageFromBToA(sendDenom, osmomath.NewInt(2))) + _, err = suite.AssertReceive(false, suite.MessageFromBToA(sendDenom, sdkmath.NewInt(2))) suite.Require().NoError(err) } @@ -502,13 +490,13 @@ func (suite *MiddlewareTestSuite) TestRecvTransferWithRateLimitingNonNative() { // Test no rate limiting occurs when the contract is set, but no quotas are configured for the path func (suite *MiddlewareTestSuite) TestSendTransferNoQuota() { // Setup contract - suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") - addr := suite.chainA.InstantiateRLContract(&suite.Suite, ``) - suite.chainA.RegisterRateLimitingContract(addr) + suite.ChainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + addr := suite.ChainA.InstantiateRLContract(&suite.Suite, ``) + suite.ChainA.RegisterRateLimitingContract(addr) // send 1 token. // If the contract doesn't have a quota for the current channel, all transfers are allowed - _, err := suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, osmomath.NewInt(1))) + _, err := suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sdkmath.NewInt(1))) suite.Require().NoError(err) } @@ -516,24 +504,24 @@ func (suite *MiddlewareTestSuite) TestSendTransferNoQuota() { func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { suite.initializeEscrow() // Setup contract - suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + suite.ChainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) - addr := suite.chainA.InstantiateRLContract(&suite.Suite, quotas) - suite.chainA.RegisterRateLimitingContract(addr) + addr := suite.ChainA.InstantiateRLContract(&suite.Suite, quotas) + suite.ChainA.RegisterRateLimitingContract(addr) // Get the escrowed amount - osmosisApp := suite.chainA.GetOsmosisApp() + osmosisApp := suite.GetNeutronZoneApp(suite.ChainA) // ToDo: This is what we eventually want here, but using the full supply temporarily for performance reasons. See CalculateChannelValue // escrowAddress := transfertypes.GetEscrowAddress("transfer", "channel-0") // escrowed := osmosisApp.BankKeeper.GetBalance(suite.chainA.GetContext(), escrowAddress, sdk.DefaultBondDenom) - escrowed := osmosisApp.BankKeeper.GetSupplyWithOffset(suite.chainA.GetContext(), sdk.DefaultBondDenom) + escrowed := osmosisApp.BankKeeper.GetSupply(suite.ChainA.GetContext(), sdk.DefaultBondDenom) quota := escrowed.Amount.QuoRaw(100) // 1% of the escrowed amount // Use the whole quota coins := sdk.NewCoin(sdk.DefaultBondDenom, quota) - port := suite.path.EndpointA.ChannelConfig.PortID - channel := suite.path.EndpointA.ChannelID - accountFrom := suite.chainA.SenderAccount.GetAddress().String() + port := suite.Path.EndpointA.ChannelConfig.PortID + channel := suite.Path.EndpointA.ChannelID + accountFrom := suite.ChainA.SenderAccount.GetAddress().String() timeoutHeight := clienttypes.NewHeight(10, 100) msg := transfertypes.NewMsgTransfer(port, channel, coins, accountFrom, "INVALID", timeoutHeight, 0, "") @@ -541,7 +529,7 @@ func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { // for this test so that the failure to receive on chain B happens after the second packet is sent from chain A. // That way we validate that chain A is blocking as expected, but the flow is reverted after the receive failure is // acknowledged on chain A - res, err := suite.chainA.SendMsgsNoCheck(msg) + res, err := suite.SendMsgsNoCheck(suite.ChainA, msg) suite.Require().NoError(err) // Sending again fails as the quota is filled @@ -549,13 +537,13 @@ func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { suite.Require().Error(err) // Move forward one block - suite.chainA.NextBlock() - suite.chainA.Coordinator.IncrementTime() + suite.ChainA.NextBlock() + suite.ChainA.Coordinator.IncrementTime() // Update both clients - err = suite.path.EndpointA.UpdateClient() + err = suite.Path.EndpointA.UpdateClient() suite.Require().NoError(err) - err = suite.path.EndpointB.UpdateClient() + err = suite.Path.EndpointB.UpdateClient() suite.Require().NoError(err) // Execute the acknowledgement from chain B in chain A @@ -565,7 +553,7 @@ func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { suite.Require().NoError(err) // recv in chain b - newRes, err := suite.path.EndpointB.RecvPacketWithResult(packet) + newRes, err := suite.Path.EndpointB.RecvPacketWithResult(packet) suite.Require().NoError(err) // get the ack from the chain b's response @@ -573,43 +561,43 @@ func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { suite.Require().NoError(err) // manually relay it to chain a - err = suite.path.EndpointA.AcknowledgePacket(packet, ack) + err = suite.Path.EndpointA.AcknowledgePacket(packet, ack) suite.Require().NoError(err) // We should be able to send again because the packet that exceeded the quota failed and has been reverted - _, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, osmomath.NewInt(1))) + _, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sdkmath.NewInt(1))) suite.Require().NoError(err) } func (suite *MiddlewareTestSuite) TestUnsetRateLimitingContract() { // Setup contract - suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") - addr := suite.chainA.InstantiateRLContract(&suite.Suite, "") - suite.chainA.RegisterRateLimitingContract(addr) + suite.ChainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + addr := suite.ChainA.InstantiateRLContract(&suite.Suite, "") + suite.ChainA.RegisterRateLimitingContract(addr) // Unset the contract param params, err := types.NewParams("") suite.Require().NoError(err) - osmosisApp := suite.chainA.GetOsmosisApp() - paramSpace, ok := osmosisApp.AppKeepers.ParamsKeeper.GetSubspace(types.ModuleName) + app := suite.GetNeutronZoneApp(suite.ChainA) + paramSpace, ok := app.ParamsKeeper.GetSubspace(types.ModuleName) suite.Require().True(ok) // N.B.: this panics if validation fails. - paramSpace.SetParamSet(suite.chainA.GetContext(), ¶ms) + paramSpace.SetParamSet(suite.ChainA.GetContext(), ¶ms) } // Test rate limits are reverted if a "send" fails func (suite *MiddlewareTestSuite) TestNonICS20() { suite.initializeEscrow() // Setup contract - suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + suite.ChainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) - addr := suite.chainA.InstantiateRLContract(&suite.Suite, quotas) - suite.chainA.RegisterRateLimitingContract(addr) + addr := suite.ChainA.InstantiateRLContract(&suite.Suite, quotas) + suite.ChainA.RegisterRateLimitingContract(addr) - osmosisApp := suite.chainA.GetOsmosisApp() + osmosisApp := suite.GetNeutronZoneApp(suite.ChainA) data := []byte("{}") - _, err := osmosisApp.RateLimitingICS4Wrapper.SendPacket(suite.chainA.GetContext(), capabilitytypes.NewCapability(1), "wasm.osmo1873ls0d60tg7hk00976teq9ywhzv45u3hk2urw8t3eau9eusa4eqtun9xn", "channel-0", clienttypes.NewHeight(0, 0), 1, data) + _, err := osmosisApp.RateLimitingICS4Wrapper.SendPacket(suite.ChainA.GetContext(), capabilitytypes.NewCapability(1), "wasm.osmo1873ls0d60tg7hk00976teq9ywhzv45u3hk2urw8t3eau9eusa4eqtun9xn", "channel-0", clienttypes.NewHeight(0, 0), 1, data) suite.Require().Error(err) // This will error out, but not because of rate limiting @@ -619,16 +607,16 @@ func (suite *MiddlewareTestSuite) TestNonICS20() { func (suite *MiddlewareTestSuite) TestDenomRestrictionFlow() { // Setup contract - suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + suite.ChainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) - contractAddr := suite.chainA.InstantiateRLContract(&suite.Suite, quotas) - suite.chainA.RegisterRateLimitingContract(contractAddr) - osmosisApp := suite.chainA.GetOsmosisApp() + contractAddr := suite.ChainA.InstantiateRLContract(&suite.Suite, quotas) + suite.ChainA.RegisterRateLimitingContract(contractAddr) + osmosisApp := suite.GetNeutronZoneApp(suite.ChainA) govModule := osmosisApp.AccountKeeper.GetModuleAddress(govtypes.ModuleName) denom := sdk.DefaultBondDenom - sendAmount := osmomath.NewInt(1000) - acceptedChannel := suite.path.EndpointA.ChannelID + sendAmount := sdkmath.NewInt(1000) + acceptedChannel := suite.Path.EndpointA.ChannelID // Successfully send a denom before any restrictions are added. _, err := suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) @@ -640,7 +628,7 @@ func (suite *MiddlewareTestSuite) TestDenomRestrictionFlow() { // Add a restriction that only allows sending on the accepted channel restrictionMsg := fmt.Sprintf(`{"set_denom_restrictions": {"denom":"%s","allowed_channels":["%s"]}}`, denom, acceptedChannel) - _, err = suite.chainA.ExecuteContract(contractAddr, govModule, []byte(restrictionMsg), sdk.Coins{}) + _, err = suite.ChainA.ExecuteContract(contractAddr, govModule, []byte(restrictionMsg), sdk.Coins{}) suite.Require().NoError(err) // Sending on the accepted channel should succeed @@ -653,7 +641,7 @@ func (suite *MiddlewareTestSuite) TestDenomRestrictionFlow() { // Unset the restriction and verify that sending on other channels works again unsetMsg := fmt.Sprintf(`{"unset_denom_restrictions": {"denom":"%s"}}`, denom) - _, err = suite.chainA.ExecuteContract(contractAddr, govModule, []byte(unsetMsg), sdk.Coins{}) + _, err = suite.ChainA.ExecuteContract(contractAddr, govModule, []byte(unsetMsg), sdk.Coins{}) suite.Require().NoError(err, "Unsetting denom restriction should succeed") // Sending again on the previously blocked channel should now succeed From 829a63aff8941a7610afc7ffef08e8537a5cfe3e Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 3 Sep 2024 12:56:19 -0300 Subject: [PATCH 017/127] wip msg server --- x/ibc-rate-limit/msg_server.go | 42 ++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/x/ibc-rate-limit/msg_server.go b/x/ibc-rate-limit/msg_server.go index f9a98fe03..e595f16fe 100644 --- a/x/ibc-rate-limit/msg_server.go +++ b/x/ibc-rate-limit/msg_server.go @@ -1 +1,43 @@ package ibc_rate_limit + +import sdk "github.com/cosmos/cosmos-sdk/types" + +import ( + "context" + + "cosmossdk.io/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/neutron-org/neutron/v4/x/feerefunder/types" +) + +type msgServer struct { + Keeper +} + +// NewMsgServerImpl returns an implementation of the MsgServer interface +// for the provided Keeper. +func NewMsgServerImpl(keeper Keeper) types.MsgServer { + return &msgServer{Keeper: keeper} +} + +var _ types.MsgServer = msgServer{} + +// UpdateParams updates the module parameters +func (k Keeper) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + if err := req.Validate(); err != nil { + return nil, errors.Wrap(err, "failed to validate MsgUpdateParams") + } + + authority := k.GetAuthority() + if authority != req.Authority { + return nil, errors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid authority; expected %s, got %s", authority, req.Authority) + } + + ctx := sdk.UnwrapSDKContext(goCtx) + if err := k.SetParams(ctx, req.Params); err != nil { + return nil, err + } + + return &types.MsgUpdateParamsResponse{}, nil +} From b2931d75dc68c85c6d225089882135322a2c702b Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 3 Sep 2024 14:04:29 -0300 Subject: [PATCH 018/127] modify init once again --- app/app.go | 1 + x/ibc-rate-limit/msg_server.go | 43 ---------------------------------- 2 files changed, 1 insertion(+), 43 deletions(-) delete mode 100644 x/ibc-rate-limit/msg_server.go diff --git a/app/app.go b/app/app.go index 05a6699b9..5e6cf16b3 100644 --- a/app/app.go +++ b/app/app.go @@ -1659,6 +1659,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(tokenfactorytypes.StoreKey).WithKeyTable(tokenfactorytypes.ParamKeyTable()) paramsKeeper.Subspace(interchainqueriesmoduletypes.StoreKey).WithKeyTable(interchainqueriesmoduletypes.ParamKeyTable()) paramsKeeper.Subspace(interchaintxstypes.StoreKey).WithKeyTable(interchaintxstypes.ParamKeyTable()) + paramsKeeper.Subspace(ibcratelimittypes.ModuleName).WithKeyTable(ibcratelimittypes.ParamKeyTable()) return paramsKeeper } diff --git a/x/ibc-rate-limit/msg_server.go b/x/ibc-rate-limit/msg_server.go deleted file mode 100644 index e595f16fe..000000000 --- a/x/ibc-rate-limit/msg_server.go +++ /dev/null @@ -1,43 +0,0 @@ -package ibc_rate_limit - -import sdk "github.com/cosmos/cosmos-sdk/types" - -import ( - "context" - - "cosmossdk.io/errors" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - - "github.com/neutron-org/neutron/v4/x/feerefunder/types" -) - -type msgServer struct { - Keeper -} - -// NewMsgServerImpl returns an implementation of the MsgServer interface -// for the provided Keeper. -func NewMsgServerImpl(keeper Keeper) types.MsgServer { - return &msgServer{Keeper: keeper} -} - -var _ types.MsgServer = msgServer{} - -// UpdateParams updates the module parameters -func (k Keeper) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { - if err := req.Validate(); err != nil { - return nil, errors.Wrap(err, "failed to validate MsgUpdateParams") - } - - authority := k.GetAuthority() - if authority != req.Authority { - return nil, errors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid authority; expected %s, got %s", authority, req.Authority) - } - - ctx := sdk.UnwrapSDKContext(goCtx) - if err := k.SetParams(ctx, req.Params); err != nil { - return nil, err - } - - return &types.MsgUpdateParamsResponse{}, nil -} From 5e3a1618ecb0fd2ba60337caf30fec474eac757f Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 3 Sep 2024 14:04:55 -0300 Subject: [PATCH 019/127] update testutil w some helpers --- testutil/test_helpers.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/testutil/test_helpers.go b/testutil/test_helpers.go index 7b4b848f0..36150529b 100644 --- a/testutil/test_helpers.go +++ b/testutil/test_helpers.go @@ -10,7 +10,7 @@ import ( "testing" "time" - "cosmossdk.io/api/tendermint/abci" + abcit "github.com/cometbft/cometbft/abci/types" tmrand "github.com/cometbft/cometbft/libs/rand" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" @@ -31,6 +31,7 @@ import ( consumertypes "github.com/cosmos/interchain-security/v5/x/ccv/consumer/types" "github.com/CosmWasm/wasmd/x/wasm/keeper" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" @@ -539,7 +540,7 @@ func SetupTransferPath(path *ibctesting.Path) error { } // SendMsgsNoCheck is an alternative to ibctesting.TestChain.SendMsgs so that it doesn't check for errors. That should be handled by the caller -func (suite *IBCConnectionTestSuite) SendMsgsNoCheck(chain *ibctesting.TestChain, msgs ...sdk.Msg) (*abci.ExecTxResult, error) { +func (suite *IBCConnectionTestSuite) SendMsgsNoCheck(chain *ibctesting.TestChain, msgs ...sdk.Msg) (*abcit.ExecTxResult, error) { // ensure the suite has the latest time suite.Coordinator.UpdateTimeForChain(chain) @@ -551,12 +552,12 @@ func (suite *IBCConnectionTestSuite) SendMsgsNoCheck(chain *ibctesting.TestChain } }() - resp, err := SignAndDeliver(chain.TB, chain.TxConfig, chain.App.GetBaseApp(), msgs, chain.ChainID, []uint64{chain.SenderAccount.GetAccountNumber()}, []uint64{suite.SenderAccount.GetSequence()}, suite.CurrentHeader.GetTime(), suite.NextVals.Hash(), suite.SenderPrivKey) + resp, err := SignAndDeliver(chain.TB, chain.TxConfig, chain.App.GetBaseApp(), msgs, chain.ChainID, []uint64{chain.SenderAccount.GetAccountNumber()}, []uint64{suite.ChainA.SenderAccount.GetSequence()}, suite.ChainA.CurrentHeader.GetTime(), suite.ChainA.NextVals.Hash(), suite.ChainA.SenderPrivKey) if err != nil { return nil, err } - chain.commitBlock(resp) + //chain.commitBlock(resp) suite.Coordinator.IncrementTime() @@ -584,7 +585,7 @@ func SignAndDeliver( blockTime time.Time, nextValHash []byte, priv ...cryptotypes.PrivKey, -) (res *abci.ResponseFinalizeBlock, err error) { +) (res *abcit.ResponseFinalizeBlock, err error) { tb.Helper() tx, err := simtestutil.GenSignedMockTx( rand.New(rand.NewSource(time.Now().UnixNano())), @@ -607,10 +608,17 @@ func SignAndDeliver( return nil, err } - return app.FinalizeBlock(&abci.RequestFinalizeBlock{ + return app.FinalizeBlock(&abcit.RequestFinalizeBlock{ Height: app.LastBlockHeight() + 1, Time: blockTime, NextValidatorsHash: nextValHash, Txs: [][]byte{txBytes}, }) + +} + +func (suite *IBCConnectionTestSuite) ExecuteContract(contract, sender sdk.AccAddress, msg []byte, funds sdk.Coins) ([]byte, error) { + app := suite.GetNeutronZoneApp(suite.ChainA) + contractKeeper := wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) + return contractKeeper.Execute(suite.ChainA.GetContext(), contract, sender, msg, funds) } From 1d258fbbb821bdb0d93ad3165c78748fd4339b72 Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Tue, 3 Sep 2024 14:04:15 -0400 Subject: [PATCH 020/127] Always sort tokens when making pairID --- x/dex/keeper/grpc_query_simulate_deposit.go | 2 +- x/dex/keeper/grpc_query_simulate_withdrawal.go | 2 +- x/dex/keeper/msg_server.go | 4 ++-- x/dex/types/pair_id.go | 12 ++++-------- x/dex/types/trade_pair_id.go | 2 +- 5 files changed, 9 insertions(+), 13 deletions(-) diff --git a/x/dex/keeper/grpc_query_simulate_deposit.go b/x/dex/keeper/grpc_query_simulate_deposit.go index d1f6ca489..ca3bb77c3 100644 --- a/x/dex/keeper/grpc_query_simulate_deposit.go +++ b/x/dex/keeper/grpc_query_simulate_deposit.go @@ -25,7 +25,7 @@ func (k Keeper) SimulateDeposit( callerAddr := sdk.MustAccAddressFromBech32(msg.Creator) receiverAddr := sdk.MustAccAddressFromBech32(msg.Receiver) - pairID, err := types.NewPairIDFromUnsorted(msg.TokenA, msg.TokenB) + pairID, err := types.NewPairID(msg.TokenA, msg.TokenB) if err != nil { return nil, err } diff --git a/x/dex/keeper/grpc_query_simulate_withdrawal.go b/x/dex/keeper/grpc_query_simulate_withdrawal.go index d0bcbfdf7..4348dd7eb 100644 --- a/x/dex/keeper/grpc_query_simulate_withdrawal.go +++ b/x/dex/keeper/grpc_query_simulate_withdrawal.go @@ -23,7 +23,7 @@ func (k Keeper) SimulateWithdrawal( callerAddr := sdk.MustAccAddressFromBech32(msg.Creator) receiverAddr := sdk.MustAccAddressFromBech32(msg.Receiver) - pairID, err := types.NewPairIDFromUnsorted(msg.TokenA, msg.TokenB) + pairID, err := types.NewPairID(msg.TokenA, msg.TokenB) if err != nil { return nil, err } diff --git a/x/dex/keeper/msg_server.go b/x/dex/keeper/msg_server.go index 20ee76cc4..df50b21a1 100644 --- a/x/dex/keeper/msg_server.go +++ b/x/dex/keeper/msg_server.go @@ -38,7 +38,7 @@ func (k MsgServer) Deposit( callerAddr := sdk.MustAccAddressFromBech32(msg.Creator) receiverAddr := sdk.MustAccAddressFromBech32(msg.Receiver) - pairID, err := types.NewPairIDFromUnsorted(msg.TokenA, msg.TokenB) + pairID, err := types.NewPairID(msg.TokenA, msg.TokenB) if err != nil { return nil, err } @@ -86,7 +86,7 @@ func (k MsgServer) Withdrawal( callerAddr := sdk.MustAccAddressFromBech32(msg.Creator) receiverAddr := sdk.MustAccAddressFromBech32(msg.Receiver) - pairID, err := types.NewPairIDFromUnsorted(msg.TokenA, msg.TokenB) + pairID, err := types.NewPairID(msg.TokenA, msg.TokenB) if err != nil { return nil, err } diff --git a/x/dex/types/pair_id.go b/x/dex/types/pair_id.go index dd2b9b9e6..4809e7e38 100644 --- a/x/dex/types/pair_id.go +++ b/x/dex/types/pair_id.go @@ -7,7 +7,8 @@ import ( sdkerrors "cosmossdk.io/errors" ) -func NewPairID(token0, token1 string) (*PairID, error) { +func NewPairID(tokenA, tokenB string) (*PairID, error) { + token0, token1 := SortTokens(tokenA, tokenB) if token0 == token1 { return nil, sdkerrors.Wrapf(ErrInvalidTradingPair, "%s<>%s", token0, token1) } @@ -17,19 +18,14 @@ func NewPairID(token0, token1 string) (*PairID, error) { }, nil } -func MustNewPairID(token0, token1 string) *PairID { - pairID, err := NewPairID(token0, token1) +func MustNewPairID(tokenA, tokenB string) *PairID { + pairID, err := NewPairID(tokenA, tokenB) if err != nil { panic(err) } return pairID } -func NewPairIDFromUnsorted(tokenA, tokenB string) (*PairID, error) { - token0, token1 := SortTokens(tokenA, tokenB) - return NewPairID(token0, token1) -} - func (p *PairID) CanonicalString() string { return fmt.Sprintf("%s<>%s", p.Token0, p.Token1) } diff --git a/x/dex/types/trade_pair_id.go b/x/dex/types/trade_pair_id.go index 54b8469b6..565bd0185 100644 --- a/x/dex/types/trade_pair_id.go +++ b/x/dex/types/trade_pair_id.go @@ -68,7 +68,7 @@ func (p TradePairID) MustPairID() *PairID { } func (p TradePairID) PairID() (*PairID, error) { - return NewPairIDFromUnsorted(p.MakerDenom, p.TakerDenom) + return NewPairID(p.MakerDenom, p.TakerDenom) } func (p TradePairID) Reversed() *TradePairID { From 4523a1a988242c8a89580f84e61f55a2624114f4 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 3 Sep 2024 15:21:04 -0300 Subject: [PATCH 021/127] play w initialization 1 more time --- app/app.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/app/app.go b/app/app.go index 5e6cf16b3..164d4f2fe 100644 --- a/app/app.go +++ b/app/app.go @@ -891,10 +891,6 @@ func New( authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), wasmOpts..., ) - wasmHooks.ContractKeeper = &app.WasmKeeper - app.ContractKeeper = wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) - app.RateLimitingICS4Wrapper.ContractKeeper = app.ContractKeeper - app.Ics20WasmHooks.ContractKeeper = &app.WasmKeeper app.CronKeeper.WasmMsgServer = wasmkeeper.NewMsgServerImpl(&app.WasmKeeper) cronModule := cron.NewAppModule(appCodec, app.CronKeeper) @@ -942,6 +938,17 @@ func New( ibcStack = ibcswap.NewIBCMiddleware(ibcStack, app.SwapKeeper) ibcStack = gmpmiddleware.NewIBCMiddleware(ibcStack) + // RateLimiting IBC Middleware + rateLimitingTransferModule := ibcratelimit.NewIBCModule(ibcStack, app.RateLimitingICS4Wrapper) + + // Hooks Middleware + hooksTransferModule := ibchooks.NewIBCMiddleware(&rateLimitingTransferModule, &app.HooksICS4Wrapper) + app.HooksTransferIBCModule = &hooksTransferModule + + wasmHooks.ContractKeeper = &app.WasmKeeper + app.ContractKeeper = wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) + app.RateLimitingICS4Wrapper.ContractKeeper = app.ContractKeeper + app.Ics20WasmHooks.ContractKeeper = &app.WasmKeeper ibcRouter.AddRoute(icacontrollertypes.SubModuleName, icaControllerStack). AddRoute(icahosttypes.SubModuleName, icaHostIBCModule). From b8725a5ee60fcca41db4deb35662a5050b296a07 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 3 Sep 2024 15:21:14 -0300 Subject: [PATCH 022/127] upd tests --- testutil/test_helpers.go | 4 +- x/ibc-rate-limit/client/cli/query.go | 48 +++++---- x/ibc-rate-limit/ibc_middleware_test.go | 131 +++++++++++++++++++----- 3 files changed, 129 insertions(+), 54 deletions(-) diff --git a/testutil/test_helpers.go b/testutil/test_helpers.go index 36150529b..1d2555e41 100644 --- a/testutil/test_helpers.go +++ b/testutil/test_helpers.go @@ -141,7 +141,7 @@ func (suite *IBCConnectionTestSuite) SetupTest() { suite.ChainProvider = suite.Coordinator.GetChain(ibctesting.GetChainID(1)) suite.ChainA = suite.Coordinator.GetChain(ibctesting.GetChainID(2)) suite.ChainB = suite.Coordinator.GetChain(ibctesting.GetChainID(3)) - suite.ChainC = suite.Coordinator.GetChain(ibctesting.GetChainID(4)) + //suite.ChainC = suite.Coordinator.GetChain(ibctesting.GetChainID(4)) suite.ProviderApp = suite.ChainProvider.App.(*appProvider.App) suite.ChainAApp = suite.ChainA.App.(*app.App) suite.ChainBApp = suite.ChainB.App.(*app.App) @@ -230,7 +230,7 @@ func (suite *IBCConnectionTestSuite) SetupTest() { suite.Coordinator.SetupConnections(suite.Path) - suite.PathAC = NewICAPath(suite.ChainA, suite.ChainC, suite.ChainProvider) + //suite.PathAC = NewICAPath(suite.ChainA, suite.ChainC, suite.ChainProvider) suite.Coordinator.SetupConnections(suite.Path) diff --git a/x/ibc-rate-limit/client/cli/query.go b/x/ibc-rate-limit/client/cli/query.go index 685dd8c2a..bc6597708 100644 --- a/x/ibc-rate-limit/client/cli/query.go +++ b/x/ibc-rate-limit/client/cli/query.go @@ -6,8 +6,6 @@ import ( "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" ) @@ -31,27 +29,27 @@ func GetQueryCmd() *cobra.Command { // GetParams returns the params for the module func GetParams() *cobra.Command { - cmd := &cobra.Command{ - Use: "params [flags]", - Short: "Get the params for the x/ibc-rate-limit module", - Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, _ []string) error { - clientCtx, err := client.GetClientQueryContext(cmd) - if err != nil { - return err - } - queryClient := types.NewQueryClient(clientCtx) - - res, err := queryClient.Params(cmd.Context(), &types.QueryParamsRequest{}) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd + //cmd := &cobra.Command{ + // Use: "params [flags]", + // Short: "Get the params for the x/ibc-rate-limit module", + // Args: cobra.ExactArgs(0), + // RunE: func(cmd *cobra.Command, _ []string) error { + // clientCtx, err := client.GetClientQueryContext(cmd) + // if err != nil { + // return err + // } + // queryClient := types.NewQueryClient(clientCtx) + // + // res, err := queryClient.Params(cmd.Context(), &types.QueryParamsRequest{}) + // if err != nil { + // return err + // } + // + // return clientCtx.PrintProto(res) + // }, + //} + // + //flags.AddQueryFlagsToCmd(cmd) + + return nil } diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index 35f2e8340..341abc190 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -8,8 +8,11 @@ import ( "time" sdkmath "cosmossdk.io/math" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" "github.com/neutron-org/neutron/v4/testutil" + "github.com/stretchr/testify/require" + "golang.org/x/exp/slices" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" @@ -361,11 +364,12 @@ func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { fmt.Printf("Testing send rate limiting for denom=%s, channelValue=%s, quota=%s, sendAmount=%s\n", denom, channelValue, quota, sendAmount) // Setup contract - suite.ChainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + creator := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) + suite.StoreTestCode(suite.ChainA.GetContext(), creator, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", channel, denom, 604800, 5, 5) fmt.Println(quotas) - addr := suite.ChainA.InstantiateRLContract(&suite.Suite, quotas) - suite.ChainA.RegisterRateLimitingContract(addr) + addr := suite.InstantiateRLContract(quotas) + suite.RegisterRateLimitingContract(addr) // send 2.5% (quota is 5%) fmt.Printf("Sending %s from A to B. Represented in chain A as wrapped? %v\n", denom, !native) @@ -454,10 +458,12 @@ func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { fmt.Printf("Testing recv rate limiting for denom=%s, channelValue=%s, quota=%s, sendAmount=%s\n", localDenom, channelValue, quota, sendAmount) // Setup contract - suite.ChainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + suite.GetNeutronZoneApp(suite.ChainA) + creator := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) + suite.StoreTestCode(suite.ChainA.GetContext(), creator, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", channel, localDenom, 604800, 4, 4) - addr := suite.ChainA.InstantiateRLContract(&suite.Suite, quotas) - suite.ChainA.RegisterRateLimitingContract(addr) + addr := suite.InstantiateRLContract(quotas) + suite.RegisterRateLimitingContract(addr) // receive 2.5% (quota is 5%) fmt.Printf("Sending %s from B to A. Represented in chain A as wrapped? %v\n", sendDenom, native) @@ -490,9 +496,11 @@ func (suite *MiddlewareTestSuite) TestRecvTransferWithRateLimitingNonNative() { // Test no rate limiting occurs when the contract is set, but no quotas are configured for the path func (suite *MiddlewareTestSuite) TestSendTransferNoQuota() { // Setup contract - suite.ChainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") - addr := suite.ChainA.InstantiateRLContract(&suite.Suite, ``) - suite.ChainA.RegisterRateLimitingContract(addr) + app := suite.GetNeutronZoneApp(suite.ChainA) + creator := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) + suite.StoreTestCode(suite.ChainA.GetContext(), creator, "./bytecode/rate_limiter.wasm") + addr := suite.InstantiateRLContract(``) + suite.RegisterRateLimitingContract(addr) // send 1 token. // If the contract doesn't have a quota for the current channel, all transfers are allowed @@ -504,10 +512,12 @@ func (suite *MiddlewareTestSuite) TestSendTransferNoQuota() { func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { suite.initializeEscrow() // Setup contract - suite.ChainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + app := suite.GetNeutronZoneApp(suite.ChainA) + creator := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) + suite.StoreTestCode(suite.ChainA.GetContext(), creator, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) - addr := suite.ChainA.InstantiateRLContract(&suite.Suite, quotas) - suite.ChainA.RegisterRateLimitingContract(addr) + addr := suite.InstantiateRLContract(quotas) + suite.RegisterRateLimitingContract(addr) // Get the escrowed amount osmosisApp := suite.GetNeutronZoneApp(suite.ChainA) @@ -571,14 +581,15 @@ func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { func (suite *MiddlewareTestSuite) TestUnsetRateLimitingContract() { // Setup contract - suite.ChainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") - addr := suite.ChainA.InstantiateRLContract(&suite.Suite, "") - suite.ChainA.RegisterRateLimitingContract(addr) + app := suite.GetNeutronZoneApp(suite.ChainA) + creator := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) + suite.StoreTestCode(suite.ChainA.GetContext(), creator, "./bytecode/rate_limiter.wasm") + addr := suite.InstantiateRLContract("") + suite.RegisterRateLimitingContract(addr) // Unset the contract param params, err := types.NewParams("") suite.Require().NoError(err) - app := suite.GetNeutronZoneApp(suite.ChainA) paramSpace, ok := app.ParamsKeeper.GetSubspace(types.ModuleName) suite.Require().True(ok) // N.B.: this panics if validation fails. @@ -589,15 +600,15 @@ func (suite *MiddlewareTestSuite) TestUnsetRateLimitingContract() { func (suite *MiddlewareTestSuite) TestNonICS20() { suite.initializeEscrow() // Setup contract - suite.ChainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + app := suite.GetNeutronZoneApp(suite.ChainA) + creator := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) + suite.StoreTestCode(suite.ChainA.GetContext(), creator, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) - addr := suite.ChainA.InstantiateRLContract(&suite.Suite, quotas) - suite.ChainA.RegisterRateLimitingContract(addr) - - osmosisApp := suite.GetNeutronZoneApp(suite.ChainA) + addr := suite.InstantiateRLContract(quotas) + suite.RegisterRateLimitingContract(addr) data := []byte("{}") - _, err := osmosisApp.RateLimitingICS4Wrapper.SendPacket(suite.ChainA.GetContext(), capabilitytypes.NewCapability(1), "wasm.osmo1873ls0d60tg7hk00976teq9ywhzv45u3hk2urw8t3eau9eusa4eqtun9xn", "channel-0", clienttypes.NewHeight(0, 0), 1, data) + _, err := app.RateLimitingICS4Wrapper.SendPacket(suite.ChainA.GetContext(), capabilitytypes.NewCapability(1), "wasm.osmo1873ls0d60tg7hk00976teq9ywhzv45u3hk2urw8t3eau9eusa4eqtun9xn", "channel-0", clienttypes.NewHeight(0, 0), 1, data) suite.Require().Error(err) // This will error out, but not because of rate limiting @@ -607,10 +618,12 @@ func (suite *MiddlewareTestSuite) TestNonICS20() { func (suite *MiddlewareTestSuite) TestDenomRestrictionFlow() { // Setup contract - suite.ChainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + app := suite.GetNeutronZoneApp(suite.ChainA) + creator := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) + suite.StoreTestCode(suite.ChainA.GetContext(), creator, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) - contractAddr := suite.ChainA.InstantiateRLContract(&suite.Suite, quotas) - suite.ChainA.RegisterRateLimitingContract(contractAddr) + contractAddr := suite.InstantiateRLContract(quotas) + suite.RegisterRateLimitingContract(contractAddr) osmosisApp := suite.GetNeutronZoneApp(suite.ChainA) govModule := osmosisApp.AccountKeeper.GetModuleAddress(govtypes.ModuleName) @@ -628,7 +641,7 @@ func (suite *MiddlewareTestSuite) TestDenomRestrictionFlow() { // Add a restriction that only allows sending on the accepted channel restrictionMsg := fmt.Sprintf(`{"set_denom_restrictions": {"denom":"%s","allowed_channels":["%s"]}}`, denom, acceptedChannel) - _, err = suite.ChainA.ExecuteContract(contractAddr, govModule, []byte(restrictionMsg), sdk.Coins{}) + _, err = suite.ExecuteContract(contractAddr, govModule, []byte(restrictionMsg), sdk.Coins{}) suite.Require().NoError(err) // Sending on the accepted channel should succeed @@ -641,7 +654,7 @@ func (suite *MiddlewareTestSuite) TestDenomRestrictionFlow() { // Unset the restriction and verify that sending on other channels works again unsetMsg := fmt.Sprintf(`{"unset_denom_restrictions": {"denom":"%s"}}`, denom) - _, err = suite.ChainA.ExecuteContract(contractAddr, govModule, []byte(unsetMsg), sdk.Coins{}) + _, err = suite.ExecuteContract(contractAddr, govModule, []byte(unsetMsg), sdk.Coins{}) suite.Require().NoError(err, "Unsetting denom restriction should succeed") // Sending again on the previously blocked channel should now succeed @@ -649,3 +662,67 @@ func (suite *MiddlewareTestSuite) TestDenomRestrictionFlow() { suite.Require().NoError(err, "Send on previously blocked channel should succeed after unsetting restriction") } + +func (suite *MiddlewareTestSuite) InstantiateRLContract(quotas string) sdk.AccAddress { + app := suite.GetNeutronZoneApp(suite.ChainA) + transferModule := app.AccountKeeper.GetModuleAddress(transfertypes.ModuleName) + govModule := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) + + initMsgBz := []byte(fmt.Sprintf(`{ + "gov_module": "%s", + "ibc_module":"%s", + "paths": [%s] + }`, + govModule, transferModule, quotas)) + + contractKeeper := wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) + codeID := uint64(1) + creator := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) + addr, _, err := contractKeeper.Instantiate(suite.ChainA.GetContext(), codeID, creator, creator, initMsgBz, "rate limiting contract", nil) + suite.Require().NoError(err) + return addr +} + +func (suite *MiddlewareTestSuite) RegisterRateLimitingContract(addr []byte) { + addrStr, err := sdk.Bech32ifyAddressBytes("neutron", addr) + require.NoError(suite.ChainA.TB, err) + params, err := types.NewParams(addrStr) + require.NoError(suite.ChainA.TB, err) + app := suite.GetNeutronZoneApp(suite.ChainA) + paramSpace, ok := app.ParamsKeeper.GetSubspace(types.ModuleName) + require.True(suite.ChainA.TB, ok) + paramSpace.SetParamSet(suite.ChainA.GetContext(), ¶ms) +} + +// AssertEventEmitted asserts that ctx's event manager has emitted the given number of events +// of the given type. +func (s *MiddlewareTestSuite) AssertEventEmitted(ctx sdk.Context, eventTypeExpected string, numEventsExpected int) { + allEvents := ctx.EventManager().Events() + // filter out other events + actualEvents := make([]sdk.Event, 0) + for _, event := range allEvents { + if event.Type == eventTypeExpected { + actualEvents = append(actualEvents, event) + } + } + s.Require().Equal(numEventsExpected, len(actualEvents)) +} + +func (s *MiddlewareTestSuite) FindEvent(events []abci.Event, name string) abci.Event { + index := slices.IndexFunc(events, func(e abci.Event) bool { return e.Type == name }) + if index == -1 { + return abci.Event{} + } + return events[index] +} + +func (s *MiddlewareTestSuite) ExtractAttributes(event abci.Event) map[string]string { + attrs := make(map[string]string) + if event.Attributes == nil { + return attrs + } + for _, a := range event.Attributes { + attrs[a.Key] = a.Value + } + return attrs +} From 8a58c2dc0307c61a67ccf76f8a725f1ee9bbbddb Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 3 Sep 2024 15:36:40 -0300 Subject: [PATCH 023/127] fix hooks init) --- app/app.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/app.go b/app/app.go index 164d4f2fe..59afcd0e9 100644 --- a/app/app.go +++ b/app/app.go @@ -612,6 +612,7 @@ func New( authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), ) wasmHooks := ibchooks.NewWasmHooks(nil, sdk.GetConfig().GetBech32AccountAddrPrefix()) // The contract keeper needs to be set later + app.Ics20WasmHooks = &wasmHooks app.HooksICS4Wrapper = ibchooks.NewICS4Middleware( app.IBCKeeper.ChannelKeeper, app.PFMKeeper, @@ -945,8 +946,8 @@ func New( hooksTransferModule := ibchooks.NewIBCMiddleware(&rateLimitingTransferModule, &app.HooksICS4Wrapper) app.HooksTransferIBCModule = &hooksTransferModule - wasmHooks.ContractKeeper = &app.WasmKeeper app.ContractKeeper = wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) + app.RateLimitingICS4Wrapper.ContractKeeper = app.ContractKeeper app.Ics20WasmHooks.ContractKeeper = &app.WasmKeeper From ee432629a671f833add6ca769e9b1258a25b9656 Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Tue, 3 Sep 2024 16:17:31 -0400 Subject: [PATCH 024/127] add more dex tx events for easier indexing and frontend --- x/dex/keeper/cancel_limit_order.go | 2 +- x/dex/keeper/place_limit_order.go | 31 ++++++++++++--------- x/dex/keeper/withdraw_filled_limit_order.go | 1 + x/dex/types/events.go | 26 ++++++++++++++--- 4 files changed, 42 insertions(+), 18 deletions(-) diff --git a/x/dex/keeper/cancel_limit_order.go b/x/dex/keeper/cancel_limit_order.go index 8c3af443e..f298b239a 100644 --- a/x/dex/keeper/cancel_limit_order.go +++ b/x/dex/keeper/cancel_limit_order.go @@ -41,8 +41,8 @@ func (k Keeper) CancelLimitOrderCore( pairID.Token1, tradePairID.MakerDenom, tradePairID.TakerDenom, - makerCoinOut.Amount, takerCoinOut.Amount, + makerCoinOut.Amount, trancheKey, )) diff --git a/x/dex/keeper/place_limit_order.go b/x/dex/keeper/place_limit_order.go index 161707765..b35a7a58d 100644 --- a/x/dex/keeper/place_limit_order.go +++ b/x/dex/keeper/place_limit_order.go @@ -72,19 +72,24 @@ func (k Keeper) PlaceLimitOrderCore( // This will never panic because we've already successfully constructed a TradePairID above pairID := takerTradePairID.MustPairID() - ctx.EventManager().EmitEvent(types.CreatePlaceLimitOrderEvent( - callerAddr, - receiverAddr, - pairID.Token0, - pairID.Token1, - tokenIn, - tokenOut, - totalIn, - tickIndexInToOut, - orderType.String(), - sharesIssued, - trancheKey, - )) + types.EmitEventWithTimestamp( + ctx, + types.CreatePlaceLimitOrderEvent( + callerAddr, + receiverAddr, + pairID.Token0, + pairID.Token1, + tokenIn, + tokenOut, + totalIn, + tickIndexInToOut, + orderType.String(), + sharesIssued, + trancheKey, + swapInCoin.Amount, + swapOutCoin.Amount, + ), + ) return trancheKey, totalInCoin, swapInCoin, swapOutCoin, nil } diff --git a/x/dex/keeper/withdraw_filled_limit_order.go b/x/dex/keeper/withdraw_filled_limit_order.go index b6d25c460..f85450732 100644 --- a/x/dex/keeper/withdraw_filled_limit_order.go +++ b/x/dex/keeper/withdraw_filled_limit_order.go @@ -42,6 +42,7 @@ func (k Keeper) WithdrawFilledLimitOrderCore( tradePairID.MakerDenom, tradePairID.TakerDenom, amountOutTokenOut, + remainingTokenIn, trancheKey, )) diff --git a/x/dex/types/events.go b/x/dex/types/events.go index f24ebcb00..d822c79fc 100644 --- a/x/dex/types/events.go +++ b/x/dex/types/events.go @@ -3,6 +3,7 @@ package types import ( "strconv" "strings" + "time" "cosmossdk.io/math" "cosmossdk.io/store/types" @@ -19,6 +20,8 @@ const ( AttributeTokenOut = "TokenOut" AttributeAmountIn = "AmountIn" AttributeAmountOut = "AmountOut" + AttributeSwapAmountIn = "SwapAmountIn" + AttributeSwapAmountOut = "SwapAmountOut" AttributeTokenInAmountOut = "TokenInAmountOut" AttributeTokenOutAmountOut = "TokenOutAmountOut" AttributeTickIndex = "TickIndex" @@ -47,6 +50,7 @@ const ( AttributeInc = "inc" AttributeDec = "dec" AttributePairID = "pair_id" + AttributeTimestamp = "Timestamp" ) // Event Keys @@ -64,6 +68,12 @@ const ( EventTypeNeutronMessage = "neutron" ) +func EmitEventWithTimestamp(ctx sdk.Context, event sdk.Event) { + timestamp := sdk.NewAttribute(AttributeTimestamp, ctx.BlockTime().Format(time.RFC3339)) + event = event.AppendAttributes(timestamp) + ctx.EventManager().EmitEvent(event) +} + func CreateDepositEvent( creator sdk.AccAddress, receiver sdk.AccAddress, @@ -162,6 +172,8 @@ func CreatePlaceLimitOrderEvent( orderType string, shares math.Int, trancheKey string, + swapAmountIn math.Int, + swapAmountOut math.Int, ) sdk.Event { attrs := []sdk.Attribute{ sdk.NewAttribute(sdk.AttributeKeyModule, "dex"), @@ -177,6 +189,8 @@ func CreatePlaceLimitOrderEvent( sdk.NewAttribute(AttributeOrderType, orderType), sdk.NewAttribute(AttributeShares, shares.String()), sdk.NewAttribute(AttributeTrancheKey, trancheKey), + sdk.NewAttribute(AttributeSwapAmountIn, swapAmountIn.String()), + sdk.NewAttribute(AttributeSwapAmountOut, swapAmountOut.String()), } return sdk.NewEvent(sdk.EventTypeMessage, attrs...) @@ -188,7 +202,8 @@ func WithdrawFilledLimitOrderEvent( token1 string, makerDenom string, tokenOut string, - amountOut math.Int, + amountOutTaker math.Int, + amountOutMaker math.Int, trancheKey string, ) sdk.Event { attrs := []sdk.Attribute{ @@ -201,7 +216,10 @@ func WithdrawFilledLimitOrderEvent( sdk.NewAttribute(AttributeTokenIn, makerDenom), sdk.NewAttribute(AttributeTokenOut, tokenOut), sdk.NewAttribute(AttributeTrancheKey, trancheKey), - sdk.NewAttribute(AttributeAmountOut, amountOut.String()), + // DEPRECATED: `AmountOut` will be removed in the next release + sdk.NewAttribute(AttributeAmountOut, amountOutTaker.String()), + sdk.NewAttribute(AttributeTokenOutAmountOut, amountOutTaker.String()), + sdk.NewAttribute(AttributeTokenInAmountOut, amountOutMaker.String()), } return sdk.NewEvent(sdk.EventTypeMessage, attrs...) @@ -213,8 +231,8 @@ func CancelLimitOrderEvent( token1 string, makerDenom string, tokenOut string, - amountOutMaker math.Int, amountOutTaker math.Int, + amountOutMaker math.Int, trancheKey string, ) sdk.Event { attrs := []sdk.Attribute{ @@ -226,8 +244,8 @@ func CancelLimitOrderEvent( sdk.NewAttribute(AttributeToken1, token1), sdk.NewAttribute(AttributeTokenIn, makerDenom), sdk.NewAttribute(AttributeTokenOut, tokenOut), - sdk.NewAttribute(AttributeTokenInAmountOut, amountOutMaker.String()), sdk.NewAttribute(AttributeTokenOutAmountOut, amountOutTaker.String()), + sdk.NewAttribute(AttributeTokenInAmountOut, amountOutMaker.String()), sdk.NewAttribute(AttributeTrancheKey, trancheKey), } From 8dc0bf9b2d683f6b9940d19aa644582ae8ee1791 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Wed, 4 Sep 2024 07:51:36 -0300 Subject: [PATCH 025/127] wip --- testutil/test_helpers.go | 4 ++-- x/ibc-rate-limit/client/cli/query.go | 27 +++++++++++---------------- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/testutil/test_helpers.go b/testutil/test_helpers.go index 1d2555e41..cc369431a 100644 --- a/testutil/test_helpers.go +++ b/testutil/test_helpers.go @@ -98,7 +98,7 @@ type IBCConnectionTestSuite struct { ProviderApp e2e.ProviderApp ChainAApp e2e.ConsumerApp ChainBApp e2e.ConsumerApp - ChainCApp e2e.ConsumerApp + //ChainCApp e2e.ConsumerApp CCVPathA *ibctesting.Path CCVPathB *ibctesting.Path @@ -145,7 +145,7 @@ func (suite *IBCConnectionTestSuite) SetupTest() { suite.ProviderApp = suite.ChainProvider.App.(*appProvider.App) suite.ChainAApp = suite.ChainA.App.(*app.App) suite.ChainBApp = suite.ChainB.App.(*app.App) - suite.ChainCApp = suite.ChainB.App.(*app.App) + //suite.ChainCApp = suite.ChainB.App.(*app.App) providerKeeper := suite.ProviderApp.GetProviderKeeper() consumerKeeperA := suite.ChainAApp.GetConsumerKeeper() diff --git a/x/ibc-rate-limit/client/cli/query.go b/x/ibc-rate-limit/client/cli/query.go index bc6597708..073495ff0 100644 --- a/x/ibc-rate-limit/client/cli/query.go +++ b/x/ibc-rate-limit/client/cli/query.go @@ -1,30 +1,25 @@ package cli import ( - "fmt" - "github.com/spf13/cobra" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" ) // GetQueryCmd returns the cli query commands for this module func GetQueryCmd() *cobra.Command { // Group ibc-rate-limit queries under a subcommand - cmd := &cobra.Command{ - Use: types.ModuleName, - Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - RunE: client.ValidateCmd, - } + //cmd := &cobra.Command{ + // Use: types.ModuleName, + // Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), + // DisableFlagParsing: true, + // SuggestionsMinimumDistance: 2, + // RunE: client.ValidateCmd, + //} - cmd.AddCommand( - GetParams(), - ) + //cmd.AddCommand( + // GetParams(), + //) - return cmd + return nil } // GetParams returns the params for the module From 0e5e0b913f89b2cc16caf559cbaa85716b8ba0d3 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Wed, 4 Sep 2024 11:55:01 -0300 Subject: [PATCH 026/127] archeologic works on unit tests --- testutil/test_helpers.go | 19 +- x/ibc-rate-limit/ibc_middleware_test.go | 329 +++++++++++------------- 2 files changed, 154 insertions(+), 194 deletions(-) diff --git a/testutil/test_helpers.go b/testutil/test_helpers.go index cc369431a..906839be3 100644 --- a/testutil/test_helpers.go +++ b/testutil/test_helpers.go @@ -10,11 +10,13 @@ import ( "testing" "time" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" abcit "github.com/cometbft/cometbft/abci/types" tmrand "github.com/cometbft/cometbft/libs/rand" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" icacontrollerkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/keeper" icacontrollertypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types" "github.com/stretchr/testify/require" @@ -31,7 +33,6 @@ import ( consumertypes "github.com/cosmos/interchain-security/v5/x/ccv/consumer/types" "github.com/CosmWasm/wasmd/x/wasm/keeper" - wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" @@ -55,7 +56,6 @@ import ( ccv "github.com/cosmos/interchain-security/v5/x/ccv/types" cmttypes "github.com/cometbft/cometbft/types" - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" ) var ( @@ -93,17 +93,14 @@ type IBCConnectionTestSuite struct { ChainProvider *ibctesting.TestChain ChainA *ibctesting.TestChain ChainB *ibctesting.TestChain - ChainC *ibctesting.TestChain ProviderApp e2e.ProviderApp ChainAApp e2e.ConsumerApp ChainBApp e2e.ConsumerApp - //ChainCApp e2e.ConsumerApp CCVPathA *ibctesting.Path CCVPathB *ibctesting.Path Path *ibctesting.Path - PathAC *ibctesting.Path TransferPath *ibctesting.Path } @@ -141,11 +138,9 @@ func (suite *IBCConnectionTestSuite) SetupTest() { suite.ChainProvider = suite.Coordinator.GetChain(ibctesting.GetChainID(1)) suite.ChainA = suite.Coordinator.GetChain(ibctesting.GetChainID(2)) suite.ChainB = suite.Coordinator.GetChain(ibctesting.GetChainID(3)) - //suite.ChainC = suite.Coordinator.GetChain(ibctesting.GetChainID(4)) suite.ProviderApp = suite.ChainProvider.App.(*appProvider.App) suite.ChainAApp = suite.ChainA.App.(*app.App) suite.ChainBApp = suite.ChainB.App.(*app.App) - //suite.ChainCApp = suite.ChainB.App.(*app.App) providerKeeper := suite.ProviderApp.GetProviderKeeper() consumerKeeperA := suite.ChainAApp.GetConsumerKeeper() @@ -229,11 +224,6 @@ func (suite *IBCConnectionTestSuite) SetupTest() { suite.Path = NewICAPath(suite.ChainA, suite.ChainB, suite.ChainProvider) suite.Coordinator.SetupConnections(suite.Path) - - //suite.PathAC = NewICAPath(suite.ChainA, suite.ChainC, suite.ChainProvider) - - suite.Coordinator.SetupConnections(suite.Path) - } func (suite *IBCConnectionTestSuite) ConfigureTransferChannel() { @@ -546,13 +536,13 @@ func (suite *IBCConnectionTestSuite) SendMsgsNoCheck(chain *ibctesting.TestChain // increment acc sequence regardless of success or failure tx execution defer func() { - err := suite.ChainA.SenderAccount.SetSequence(chain.SenderAccount.GetSequence() + 1) + err := chain.SenderAccount.SetSequence(chain.SenderAccount.GetSequence() + 1) if err != nil { panic(err) } }() - resp, err := SignAndDeliver(chain.TB, chain.TxConfig, chain.App.GetBaseApp(), msgs, chain.ChainID, []uint64{chain.SenderAccount.GetAccountNumber()}, []uint64{suite.ChainA.SenderAccount.GetSequence()}, suite.ChainA.CurrentHeader.GetTime(), suite.ChainA.NextVals.Hash(), suite.ChainA.SenderPrivKey) + resp, err := SignAndDeliver(chain.TB, chain.TxConfig, chain.App.GetBaseApp(), msgs, chain.ChainID, []uint64{chain.SenderAccount.GetAccountNumber()}, []uint64{chain.SenderAccount.GetSequence()}, chain.CurrentHeader.GetTime(), chain.NextVals.Hash(), chain.SenderPrivKey) if err != nil { return nil, err } @@ -621,4 +611,5 @@ func (suite *IBCConnectionTestSuite) ExecuteContract(contract, sender sdk.AccAdd app := suite.GetNeutronZoneApp(suite.ChainA) contractKeeper := wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) return contractKeeper.Execute(suite.ChainA.GetContext(), contract, sender, msg, funds) + } diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index 341abc190..d862c9ee6 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -9,7 +9,6 @@ import ( sdkmath "cosmossdk.io/math" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" "github.com/neutron-org/neutron/v4/testutil" "github.com/stretchr/testify/require" "golang.org/x/exp/slices" @@ -24,6 +23,7 @@ import ( ibctesting "github.com/cosmos/ibc-go/v8/testing" "github.com/stretchr/testify/suite" + sdktypes "github.com/cosmos/cosmos-sdk/types" "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" ) @@ -47,52 +47,12 @@ func NewTransferPath(chainA, chainB *ibctesting.TestChain) *ibctesting.Path { return path } -// -//func (suite *MiddlewareTestSuite) SetupTest() { -// suite.SkipIfWSL() -// // TODO: This needs to get removed. Waiting on https://github.com/cosmos/ibc-go/issues/3123 -// txfeetypes.ConsensusMinFee = osmomath.ZeroDec() -// suite.Setup() -// ibctesting.DefaultTestingAppInit = osmosisibctesting.SetupTestingApp -// suite.coordinator = ibctesting.NewCoordinator(suite.T(), 3) -// suite.chainA = &osmosisibctesting.TestChain{ -// TestChain: suite.coordinator.GetChain(ibctesting.GetChainID(1)), -// } -// // Remove epochs to prevent minting -// err := suite.chainA.MoveEpochsToTheFuture() -// suite.Require().NoError(err) -// // Create second chain -// suite.chainB = &osmosisibctesting.TestChain{ -// TestChain: suite.coordinator.GetChain(ibctesting.GetChainID(2)), -// } -// suite.path = NewTransferPath(suite.chainA, suite.chainB) -// err = suite.chainB.MoveEpochsToTheFuture() -// suite.Require().NoError(err) -// suite.coordinator.Setup(suite.path) -// // setup a third chain -// suite.chainC = &osmosisibctesting.TestChain{ -// TestChain: suite.coordinator.GetChain(ibctesting.GetChainID(3)), -// } -// suite.pathAC = NewTransferPath(suite.chainA, suite.chainC) -// err = suite.chainC.MoveEpochsToTheFuture() -// suite.Require().NoError(err) -// suite.coordinator.Setup(suite.pathAC) -//} - -// TODO: This needs to get removed. Waiting on https://github.com/cosmos/ibc-go/issues/3123 -//func (suite *MiddlewareTestSuite) TearDownSuite() { -// txfeetypes.ConsensusMinFee = oldConsensusMinFee -// -// for _, dir := range osmosisibctesting.TestingDirectories { -// os.RemoveAll(dir) -// } -//} - // Helpers func (suite *MiddlewareTestSuite) MessageFromAToB(denom string, amount sdkmath.Int) sdk.Msg { coin := sdk.NewCoin(denom, amount) - port := suite.Path.EndpointA.ChannelConfig.PortID - channel := suite.Path.EndpointA.ChannelID + port := suite.TransferPath.EndpointA.ChannelConfig.PortID + channel := suite.TransferPath.EndpointA.ChannelID + fmt.Println(channel) accountFrom := suite.ChainA.SenderAccount.GetAddress().String() accountTo := suite.ChainB.SenderAccount.GetAddress().String() timeoutHeight := clienttypes.NewHeight(10, 100) @@ -127,24 +87,24 @@ func (suite *MiddlewareTestSuite) MessageFromBToA(denom string, amount sdkmath.I ) } -func (suite *MiddlewareTestSuite) MessageFromAToC(denom string, amount sdkmath.Int) sdk.Msg { - coin := sdk.NewCoin(denom, amount) - port := suite.PathAC.EndpointA.ChannelConfig.PortID - channel := suite.PathAC.EndpointA.ChannelID - accountFrom := suite.ChainA.SenderAccount.GetAddress().String() - accountTo := suite.ChainC.SenderAccount.GetAddress().String() - timeoutHeight := clienttypes.NewHeight(10, 100) - return transfertypes.NewMsgTransfer( - port, - channel, - coin, - accountFrom, - accountTo, - timeoutHeight, - uint64(time.Now().UnixNano()), - "", - ) -} +//func (suite *MiddlewareTestSuite) MessageFromAToC(denom string, amount sdkmath.Int) sdk.Msg { +// coin := sdk.NewCoin(denom, amount) +// port := suite.PathAC.EndpointA.ChannelConfig.PortID +// channel := suite.PathAC.EndpointA.ChannelID +// accountFrom := suite.ChainA.SenderAccount.GetAddress().String() +// accountTo := suite.ChainC.SenderAccount.GetAddress().String() +// timeoutHeight := clienttypes.NewHeight(10, 100) +// return transfertypes.NewMsgTransfer( +// port, +// channel, +// coin, +// accountFrom, +// accountTo, +// timeoutHeight, +// uint64(time.Now().UnixNano()), +// "", +// ) +//} func CalculateChannelValue(ctx sdk.Context, denom string, bankKeeper bankkeeper.Keeper) sdkmath.Int { return bankKeeper.GetSupply(ctx, denom).Amount @@ -170,24 +130,24 @@ func CalculateChannelValue(ctx sdk.Context, denom string, bankKeeper bankkeeper. } func (suite *MiddlewareTestSuite) FullSendBToA(msg sdk.Msg) (*abci.ExecTxResult, string, error) { - sendResult, err := suite.SendMsgsNoCheck(suite.ChainA, msg) + sendResult, err := suite.SendMsgsNoCheck(suite.ChainB, msg) suite.Require().NoError(err) packet, err := ibctesting.ParsePacketFromEvents(sendResult.GetEvents()) suite.Require().NoError(err) - err = suite.Path.EndpointA.UpdateClient() + err = suite.TransferPath.EndpointA.UpdateClient() suite.Require().NoError(err) - res, err := suite.Path.EndpointA.RecvPacketWithResult(packet) + res, err := suite.TransferPath.EndpointA.RecvPacketWithResult(packet) suite.Require().NoError(err) ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) suite.Require().NoError(err) - err = suite.Path.EndpointA.UpdateClient() + err = suite.TransferPath.EndpointA.UpdateClient() suite.Require().NoError(err) - err = suite.Path.EndpointB.UpdateClient() + err = suite.TransferPath.EndpointB.UpdateClient() suite.Require().NoError(err) return sendResult, string(ack), err @@ -198,32 +158,40 @@ func (suite *MiddlewareTestSuite) FullSendAToB(msg sdk.Msg) (*abci.ExecTxResult, if err != nil { return nil, "", err } + fmt.Println(sendResult.Log) + fmt.Println(sendResult.Info) + fmt.Println(sendResult.Code) + fmt.Println(sendResult.Events) + fmt.Println(sendResult.GasUsed) packet, err := ibctesting.ParsePacketFromEvents(sendResult.GetEvents()) if err != nil { return nil, "", err } + fmt.Println(2) - err = suite.Path.EndpointB.UpdateClient() + err = suite.TransferPath.EndpointB.UpdateClient() if err != nil { return nil, "", err } + fmt.Println(3) - res, err := suite.Path.EndpointB.RecvPacketWithResult(packet) + res, err := suite.TransferPath.EndpointB.RecvPacketWithResult(packet) if err != nil { return nil, "", err } - + fmt.Println(4) ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) if err != nil { return nil, "", err } - - err = suite.Path.EndpointA.UpdateClient() + fmt.Println(5) + err = suite.TransferPath.EndpointA.UpdateClient() + fmt.Println(6) if err != nil { return nil, "", err } - err = suite.Path.EndpointB.UpdateClient() + err = suite.TransferPath.EndpointB.UpdateClient() if err != nil { return nil, "", err } @@ -231,43 +199,43 @@ func (suite *MiddlewareTestSuite) FullSendAToB(msg sdk.Msg) (*abci.ExecTxResult, return sendResult, string(ack), nil } -func (suite *MiddlewareTestSuite) FullSendAToC(msg sdk.Msg) (*abci.ExecTxResult, string, error) { - sendResult, err := suite.SendMsgsNoCheck(suite.ChainA, msg) - if err != nil { - return nil, "", err - } - - packet, err := ibctesting.ParsePacketFromEvents(sendResult.GetEvents()) - if err != nil { - return nil, "", err - } - - err = suite.PathAC.EndpointB.UpdateClient() - if err != nil { - return nil, "", err - } - - res, err := suite.PathAC.EndpointB.RecvPacketWithResult(packet) - if err != nil { - return nil, "", err - } - - ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) - if err != nil { - return nil, "", err - } - - err = suite.PathAC.EndpointA.UpdateClient() - if err != nil { - return nil, "", err - } - err = suite.PathAC.EndpointB.UpdateClient() - if err != nil { - return nil, "", err - } - - return sendResult, string(ack), nil -} +//func (suite *MiddlewareTestSuite) FullSendAToC(msg sdk.Msg) (*abci.ExecTxResult, string, error) { +// sendResult, err := suite.SendMsgsNoCheck(suite.ChainA, msg) +// if err != nil { +// return nil, "", err +// } +// +// packet, err := ibctesting.ParsePacketFromEvents(sendResult.GetEvents()) +// if err != nil { +// return nil, "", err +// } +// +// err = suite.PathAC.EndpointB.UpdateClient() +// if err != nil { +// return nil, "", err +// } +// +// res, err := suite.PathAC.EndpointB.RecvPacketWithResult(packet) +// if err != nil { +// return nil, "", err +// } +// +// ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) +// if err != nil { +// return nil, "", err +// } +// +// err = suite.PathAC.EndpointA.UpdateClient() +// if err != nil { +// return nil, "", err +// } +// err = suite.PathAC.EndpointB.UpdateClient() +// if err != nil { +// return nil, "", err +// } +// +// return sendResult, string(ack), nil +//} func (suite *MiddlewareTestSuite) AssertReceive(success bool, msg sdk.Msg) (string, error) { _, ack, err := suite.FullSendBToA(msg) @@ -496,9 +464,9 @@ func (suite *MiddlewareTestSuite) TestRecvTransferWithRateLimitingNonNative() { // Test no rate limiting occurs when the contract is set, but no quotas are configured for the path func (suite *MiddlewareTestSuite) TestSendTransferNoQuota() { // Setup contract - app := suite.GetNeutronZoneApp(suite.ChainA) - creator := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) - suite.StoreTestCode(suite.ChainA.GetContext(), creator, "./bytecode/rate_limiter.wasm") + //app := suite.GetNeutronZoneApp(suite.ChainA) + testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) + suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") addr := suite.InstantiateRLContract(``) suite.RegisterRateLimitingContract(addr) @@ -510,6 +478,7 @@ func (suite *MiddlewareTestSuite) TestSendTransferNoQuota() { // Test rate limits are reverted if a "send" fails func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { + suite.ConfigureTransferChannel() suite.initializeEscrow() // Setup contract app := suite.GetNeutronZoneApp(suite.ChainA) @@ -597,87 +566,87 @@ func (suite *MiddlewareTestSuite) TestUnsetRateLimitingContract() { } // Test rate limits are reverted if a "send" fails -func (suite *MiddlewareTestSuite) TestNonICS20() { - suite.initializeEscrow() - // Setup contract - app := suite.GetNeutronZoneApp(suite.ChainA) - creator := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) - suite.StoreTestCode(suite.ChainA.GetContext(), creator, "./bytecode/rate_limiter.wasm") - quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) - addr := suite.InstantiateRLContract(quotas) - suite.RegisterRateLimitingContract(addr) - - data := []byte("{}") - _, err := app.RateLimitingICS4Wrapper.SendPacket(suite.ChainA.GetContext(), capabilitytypes.NewCapability(1), "wasm.osmo1873ls0d60tg7hk00976teq9ywhzv45u3hk2urw8t3eau9eusa4eqtun9xn", "channel-0", clienttypes.NewHeight(0, 0), 1, data) - - suite.Require().Error(err) - // This will error out, but not because of rate limiting - suite.Require().NotContains(err.Error(), "rate limit") - suite.Require().Contains(err.Error(), "channel not found") -} - -func (suite *MiddlewareTestSuite) TestDenomRestrictionFlow() { - // Setup contract - app := suite.GetNeutronZoneApp(suite.ChainA) - creator := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) - suite.StoreTestCode(suite.ChainA.GetContext(), creator, "./bytecode/rate_limiter.wasm") - quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) - contractAddr := suite.InstantiateRLContract(quotas) - suite.RegisterRateLimitingContract(contractAddr) - osmosisApp := suite.GetNeutronZoneApp(suite.ChainA) - govModule := osmosisApp.AccountKeeper.GetModuleAddress(govtypes.ModuleName) - - denom := sdk.DefaultBondDenom - sendAmount := sdkmath.NewInt(1000) - acceptedChannel := suite.Path.EndpointA.ChannelID - - // Successfully send a denom before any restrictions are added. - _, err := suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) - suite.Require().NoError(err, "Send should succeed without restrictions") - - // Sending on a diff channel should work - _, _, err = suite.FullSendAToC(suite.MessageFromAToC(denom, sendAmount)) - suite.Require().NoError(err, "Send on alternative channel should work") - - // Add a restriction that only allows sending on the accepted channel - restrictionMsg := fmt.Sprintf(`{"set_denom_restrictions": {"denom":"%s","allowed_channels":["%s"]}}`, denom, acceptedChannel) - _, err = suite.ExecuteContract(contractAddr, govModule, []byte(restrictionMsg), sdk.Coins{}) - suite.Require().NoError(err) - - // Sending on the accepted channel should succeed - _, err = suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) - suite.Require().NoError(err, "Send on accepted channel should succeed") - - // Sending on any other channel should fail - _, err = suite.AssertSend(false, suite.MessageFromAToC(denom, sendAmount)) - suite.Require().Error(err, "Send on blocked channel should fail") - - // Unset the restriction and verify that sending on other channels works again - unsetMsg := fmt.Sprintf(`{"unset_denom_restrictions": {"denom":"%s"}}`, denom) - _, err = suite.ExecuteContract(contractAddr, govModule, []byte(unsetMsg), sdk.Coins{}) - suite.Require().NoError(err, "Unsetting denom restriction should succeed") - - // Sending again on the previously blocked channel should now succeed - _, _, err = suite.FullSendAToC(suite.MessageFromAToC(denom, sendAmount)) - suite.Require().NoError(err, "Send on previously blocked channel should succeed after unsetting restriction") +//func (suite *MiddlewareTestSuite) TestNonICS20() { +// suite.initializeEscrow() +// // Setup contract +// app := suite.GetNeutronZoneApp(suite.ChainA) +// testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) +// suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") +// quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) +// addr := suite.InstantiateRLContract(quotas) +// suite.RegisterRateLimitingContract(addr) +// +// data := []byte("{}") +// _, err := app.RateLimitingICS4Wrapper.SendPacket(suite.ChainA.GetContext(), capabilitytypes.NewCapability(1), "wasm.neutron1873ls0d60tg7hk00976teq9ywhzv45u3hk2urw8t3eau9eusa4eqtun9xn", "channel-0", clienttypes.NewHeight(0, 0), 1, data) +// +// suite.Require().Error(err) +// // This will error out, but not because of rate limiting +// suite.Require().NotContains(err.Error(), "rate limit") +// suite.Require().Contains(err.Error(), "channel not found") +//} -} +//func (suite *MiddlewareTestSuite) TestDenomRestrictionFlow() { +// // Setup contract +// app := suite.GetNeutronZoneApp(suite.ChainA) +// creator := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) +// suite.StoreTestCode(suite.ChainA.GetContext(), creator, "./bytecode/rate_limiter.wasm") +// quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) +// contractAddr := suite.InstantiateRLContract(quotas) +// suite.RegisterRateLimitingContract(contractAddr) +// osmosisApp := suite.GetNeutronZoneApp(suite.ChainA) +// govModule := osmosisApp.AccountKeeper.GetModuleAddress(govtypes.ModuleName) +// +// denom := sdk.DefaultBondDenom +// sendAmount := sdkmath.NewInt(1000) +// acceptedChannel := suite.Path.EndpointA.ChannelID +// +// // Successfully send a denom before any restrictions are added. +// _, err := suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) +// suite.Require().NoError(err, "Send should succeed without restrictions") +// +// // Sending on a diff channel should work +// _, _, err = suite.FullSendAToC(suite.MessageFromAToC(denom, sendAmount)) +// suite.Require().NoError(err, "Send on alternative channel should work") +// +// // Add a restriction that only allows sending on the accepted channel +// restrictionMsg := fmt.Sprintf(`{"set_denom_restrictions": {"denom":"%s","allowed_channels":["%s"]}}`, denom, acceptedChannel) +// _, err = suite.ExecuteContract(contractAddr, govModule, []byte(restrictionMsg), sdk.Coins{}) +// suite.Require().NoError(err) +// +// // Sending on the accepted channel should succeed +// _, err = suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) +// suite.Require().NoError(err, "Send on accepted channel should succeed") +// +// // Sending on any other channel should fail +// _, err = suite.AssertSend(false, suite.MessageFromAToC(denom, sendAmount)) +// suite.Require().Error(err, "Send on blocked channel should fail") +// +// // Unset the restriction and verify that sending on other channels works again +// unsetMsg := fmt.Sprintf(`{"unset_denom_restrictions": {"denom":"%s"}}`, denom) +// _, err = suite.ExecuteContract(contractAddr, govModule, []byte(unsetMsg), sdk.Coins{}) +// suite.Require().NoError(err, "Unsetting denom restriction should succeed") +// +// // Sending again on the previously blocked channel should now succeed +// _, _, err = suite.FullSendAToC(suite.MessageFromAToC(denom, sendAmount)) +// suite.Require().NoError(err, "Send on previously blocked channel should succeed after unsetting restriction") +// +//} func (suite *MiddlewareTestSuite) InstantiateRLContract(quotas string) sdk.AccAddress { app := suite.GetNeutronZoneApp(suite.ChainA) transferModule := app.AccountKeeper.GetModuleAddress(transfertypes.ModuleName) - govModule := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) + //govModule := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) initMsgBz := []byte(fmt.Sprintf(`{ "gov_module": "%s", "ibc_module":"%s", "paths": [%s] }`, - govModule, transferModule, quotas)) + suite.ChainA.SenderAccount.GetAddress(), transferModule, quotas)) contractKeeper := wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) codeID := uint64(1) - creator := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) + creator := suite.ChainA.SenderAccount.GetAddress() addr, _, err := contractKeeper.Instantiate(suite.ChainA.GetContext(), codeID, creator, creator, initMsgBz, "rate limiting contract", nil) suite.Require().NoError(err) return addr From 802d88d8c992849af8810c9102e13e08c481805b Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Wed, 4 Sep 2024 16:25:04 -0400 Subject: [PATCH 027/127] remove wasm bindings --- wasmbinding/bindings/query.go | 16 --------- wasmbinding/queries.go | 45 -------------------------- wasmbinding/stargate_allowlist.go | 6 ---- x/dex/types/wasm.go | 54 ------------------------------- 4 files changed, 121 deletions(-) diff --git a/wasmbinding/bindings/query.go b/wasmbinding/bindings/query.go index 4fb87b2fc..88615da60 100644 --- a/wasmbinding/bindings/query.go +++ b/wasmbinding/bindings/query.go @@ -273,18 +273,6 @@ type DexQuery struct { PoolMetadata *dextypes.QueryGetPoolMetadataRequest `json:"pool_metadata"` // Queries a list of PoolMetadata items. PoolMetadataAll *dextypes.QueryAllPoolMetadataRequest `json:"pool_metadata_all"` - /// Simulates MsgDeposit - SimulateDeposit *dextypes.QuerySimulateDepositRequest `json:"simulate_deposit"` - /// Simulates MsgWithdrawal - SimulateWithdrawal *dextypes.QuerySimulateWithdrawalRequest `json:"simulate_withdrawal"` - /// Simulates MsgPlaceLimitOrder - SimulatePlaceLimitOrder *QuerySimulatePlaceLimitOrderRequest `json:"simulate_place_limit_order"` - /// Simulates MsgWithdrawFilledLimitOrder - SimulateWithdrawFilledLimitOrder *dextypes.QuerySimulateWithdrawFilledLimitOrderRequest `json:"simulate_withdraw_filled_limit_order"` - /// Simulates MsgCancelLimitOrder - SimulateCancelLimitOrder *dextypes.QuerySimulateCancelLimitOrderRequest `json:"simulate_cancel_limit_order"` - /// Simulates MsgMultiHopSwap - SimulateMultiHopSwap *dextypes.QuerySimulateMultiHopSwapRequest `json:"simulate_multi_hop_swap"` } // QueryEstimatePlaceLimitOrderRequest is a copy dextypes.QueryEstimatePlaceLimitOrderRequest with altered ExpirationTime field, @@ -301,7 +289,3 @@ type QueryEstimatePlaceLimitOrderRequest struct { ExpirationTime *uint64 `json:"expiration_time,omitempty"` MaxAmountOut *math.Int `json:"max_amount_out"` } - -type QuerySimulatePlaceLimitOrderRequest struct { - Msg *MsgPlaceLimitOrder `json:"msg"` -} diff --git a/wasmbinding/queries.go b/wasmbinding/queries.go index 1bf73d369..b7f34fc64 100644 --- a/wasmbinding/queries.go +++ b/wasmbinding/queries.go @@ -16,7 +16,6 @@ import ( sdkquery "github.com/cosmos/cosmos-sdk/types/query" dextypes "github.com/neutron-org/neutron/v4/x/dex/types" - dexutils "github.com/neutron-org/neutron/v4/x/dex/utils" contractmanagertypes "github.com/neutron-org/neutron/v4/x/contractmanager/types" @@ -202,50 +201,6 @@ func (qp *QueryPlugin) DexQuery(ctx sdk.Context, query bindings.DexQuery) (data data, err = dexQuery(ctx, query.TickLiquidityAll, qp.dexKeeper.TickLiquidityAll) case query.UserDepositsAll != nil: data, err = dexQuery(ctx, query.UserDepositsAll, qp.dexKeeper.UserDepositsAll) - case query.SimulateDeposit != nil: - data, err = dexQuery(ctx, query.SimulateDeposit, qp.dexKeeper.SimulateDeposit) - case query.SimulateWithdrawal != nil: - data, err = dexQuery(ctx, query.SimulateWithdrawal, qp.dexKeeper.SimulateWithdrawal) - case query.SimulatePlaceLimitOrder != nil: - q := dextypes.QuerySimulatePlaceLimitOrderRequest{ - Msg: &dextypes.MsgPlaceLimitOrder{ - TokenIn: query.SimulatePlaceLimitOrder.Msg.TokenIn, - TokenOut: query.SimulatePlaceLimitOrder.Msg.TokenOut, - //nolint: staticcheck // TODO: remove in next release - TickIndexInToOut: query.SimulatePlaceLimitOrder.Msg.TickIndexInToOut, - AmountIn: query.SimulatePlaceLimitOrder.Msg.AmountIn, - MaxAmountOut: query.SimulatePlaceLimitOrder.Msg.MaxAmountOut, - }, - } - orderTypeInt, ok := dextypes.LimitOrderType_value[query.SimulatePlaceLimitOrder.Msg.OrderType] - if !ok { - return nil, errors.Wrap(dextypes.ErrInvalidOrderType, - fmt.Sprintf( - "got \"%s\", expected one of %s", - query.SimulatePlaceLimitOrder.Msg.OrderType, - strings.Join(maps.Keys(dextypes.LimitOrderType_value), ", ")), - ) - } - q.Msg.OrderType = dextypes.LimitOrderType(orderTypeInt) - if query.SimulatePlaceLimitOrder.Msg.ExpirationTime != nil { - t := time.Unix(int64(*query.SimulatePlaceLimitOrder.Msg.ExpirationTime), 0) - q.Msg.ExpirationTime = &t - } - if limitPriceStr := query.SimulatePlaceLimitOrder.Msg.LimitSellPrice; limitPriceStr != "" { - limitPriceDec, err := dexutils.ParsePrecDecScientificNotation(limitPriceStr) - if err != nil { - return nil, errors.Wrapf(err, "cannot parse string %s for limit price", limitPriceStr) - } - q.Msg.LimitSellPrice = &limitPriceDec - } - data, err = dexQuery(ctx, &q, qp.dexKeeper.SimulatePlaceLimitOrder) - case query.SimulateWithdrawFilledLimitOrder != nil: - data, err = dexQuery(ctx, query.SimulateWithdrawFilledLimitOrder, qp.dexKeeper.SimulateWithdrawFilledLimitOrder) - case query.SimulateCancelLimitOrder != nil: - data, err = dexQuery(ctx, query.SimulateCancelLimitOrder, qp.dexKeeper.SimulateCancelLimitOrder) - case query.SimulateMultiHopSwap != nil: - data, err = dexQuery(ctx, query.SimulateMultiHopSwap, qp.dexKeeper.SimulateMultiHopSwap) - default: return nil, wasmvmtypes.UnsupportedRequest{Kind: "unknown neutron.dex query type"} } diff --git a/wasmbinding/stargate_allowlist.go b/wasmbinding/stargate_allowlist.go index 1fa16677c..13d8ab761 100644 --- a/wasmbinding/stargate_allowlist.go +++ b/wasmbinding/stargate_allowlist.go @@ -90,12 +90,6 @@ func AcceptedStargateQueries() wasmkeeper.AcceptedQueries { "/neutron.dex.Query/PoolByID": &dextypes.QueryPoolResponse{}, "/neutron.dex.Query/PoolMetadata": &dextypes.QueryGetPoolMetadataResponse{}, "/neutron.dex.Query/PoolMetadataAll": &dextypes.QueryAllPoolMetadataResponse{}, - "/neutron.dex.Query/SimulateDeposit": &dextypes.QuerySimulateDepositResponse{}, - "/neutron.dex.Query/SimulateWithdrawal": &dextypes.QuerySimulateWithdrawalResponse{}, - "/neutron.dex.Query/SimulatePlaceLimitOrder": &dextypes.QuerySimulatePlaceLimitOrderResponse{}, - "/neutron.dex.Query/SimulateWithdrawFilledLimitOrder": &dextypes.QuerySimulateWithdrawFilledLimitOrderResponse{}, - "/neutron.dex.Query/SimulateCancelLimitOrder": &dextypes.QuerySimulateCancelLimitOrderResponse{}, - "/neutron.dex.Query/SimulateMultiHopSwap": &dextypes.QuerySimulateMultiHopSwapResponse{}, // oracle "/slinky.oracle.v1.Query/GetAllCurrencyPairs": &oracletypes.GetAllCurrencyPairsResponse{}, diff --git a/x/dex/types/wasm.go b/x/dex/types/wasm.go index 6688d94b2..3b35d87be 100644 --- a/x/dex/types/wasm.go +++ b/x/dex/types/wasm.go @@ -203,57 +203,3 @@ func (t *QueryAllLimitOrderTrancheUserByAddressResponse) MarshalBinding() ([]byt } return json.Marshal(&allLimitOrders) } - -func (t *QuerySimulateDepositRequest) MarshalBinding() ([]byte, error) { - type QuerySimulateDepositRequestBinding struct { - Msg *MsgDeposit `json:"msg,omitempty"` - } - - metadata := QuerySimulateDepositRequestBinding(*t) - return json.Marshal(&metadata) -} - -func (t *QuerySimulateWithdrawalRequest) MarshalBinding() ([]byte, error) { - type QuerySimulateWithdrawalRequestBinding struct { - Msg *MsgWithdrawal `json:"msg,omitempty"` - } - - metadata := QuerySimulateWithdrawalRequestBinding(*t) - return json.Marshal(&metadata) -} - -func (t *QuerySimulatePlaceLimitOrderRequest) MarshalBinding() ([]byte, error) { - type QuerySimulatePlaceLimitOrderRequestBinding struct { - Msg *MsgPlaceLimitOrder `json:"msg,omitempty"` - } - - metadata := QuerySimulatePlaceLimitOrderRequestBinding(*t) - return json.Marshal(&metadata) -} - -func (t *QuerySimulateWithdrawFilledLimitOrderRequest) MarshalBinding() ([]byte, error) { - type QuerySimulateWithdrawFilledLimitOrderRequestBinding struct { - Msg *MsgWithdrawFilledLimitOrder `json:"msg,omitempty"` - } - - metadata := QuerySimulateWithdrawFilledLimitOrderRequestBinding(*t) - return json.Marshal(&metadata) -} - -func (t *QuerySimulateCancelLimitOrderRequest) MarshalBinding() ([]byte, error) { - type QuerySimulateCancelLimitOrderRequestBinding struct { - Msg *MsgCancelLimitOrder `json:"msg,omitempty"` - } - - metadata := QuerySimulateCancelLimitOrderRequestBinding(*t) - return json.Marshal(&metadata) -} - -func (t *QuerySimulateMultiHopSwapRequest) MarshalBinding() ([]byte, error) { - type QuerySimulateMultiHopSwapRequestBinding struct { - Msg *MsgMultiHopSwap `json:"msg,omitempty"` - } - - metadata := QuerySimulateMultiHopSwapRequestBinding(*t) - return json.Marshal(&metadata) -} From 2a01f29fe4e205758610e4b7ebc32f3e2deeb3cb Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Wed, 4 Sep 2024 16:56:19 -0400 Subject: [PATCH 028/127] fix comment --- x/dex/keeper/cancel_limit_order.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/dex/keeper/cancel_limit_order.go b/x/dex/keeper/cancel_limit_order.go index 4129deab5..526138487 100644 --- a/x/dex/keeper/cancel_limit_order.go +++ b/x/dex/keeper/cancel_limit_order.go @@ -35,7 +35,7 @@ func (k Keeper) CancelLimitOrderCore( makerDenom := makerCoinOut.Denom takerDenom := takerCoinOut.Denom - // This will never panic since TradePairID has already been successfully constructed by ExecuteWithdrawFilledLimitOrder + // This will never panic since PairID has already been successfully constructed during tranche creation pairID := types.MustNewPairID(makerDenom, takerDenom) ctx.EventManager().EmitEvent(types.CancelLimitOrderEvent( callerAddr, From 0316a8afc1800067068444415c1110423e771012 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Wed, 4 Sep 2024 18:01:57 -0300 Subject: [PATCH 029/127] rewrite kepeers & ibnc module init --- app/app.go | 151 +++++++++++++++++++++++++++-------------------------- 1 file changed, 77 insertions(+), 74 deletions(-) diff --git a/app/app.go b/app/app.go index 59afcd0e9..40e329e4f 100644 --- a/app/app.go +++ b/app/app.go @@ -377,7 +377,7 @@ type App struct { PFMModule packetforward.AppModule - HooksTransferIBCModule *ibchooks.IBCMiddleware + TransferStack *ibchooks.IBCMiddleware Ics20WasmHooks *ibchooks.WasmHooks RateLimitingICS4Wrapper *ibcratelimit.ICS4Wrapper HooksICS4Wrapper ibchooks.ICS4Middleware @@ -600,36 +600,6 @@ func New( appCodec, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), &app.ConsumerKeeper, app.UpgradeKeeper, scopedIBCKeeper, authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), ) - // PFMKeeper must be created before TransferKeeper - app.PFMKeeper = pfmkeeper.NewKeeper( - appCodec, - app.keys[pfmtypes.StoreKey], - app.TransferKeeper.Keeper, - app.IBCKeeper.ChannelKeeper, - app.FeeBurnerKeeper, - &app.BankKeeper, - app.IBCKeeper.ChannelKeeper, - authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), - ) - wasmHooks := ibchooks.NewWasmHooks(nil, sdk.GetConfig().GetBech32AccountAddrPrefix()) // The contract keeper needs to be set later - app.Ics20WasmHooks = &wasmHooks - app.HooksICS4Wrapper = ibchooks.NewICS4Middleware( - app.IBCKeeper.ChannelKeeper, - app.PFMKeeper, - &wasmHooks, - ) - - // ChannelKeeper wrapper for rate limiting SendPacket(). The wasmKeeper needs to be added after it's created - rateLimitingICS4Wrapper := ibcratelimit.NewICS4Middleware( - app.HooksICS4Wrapper, - &app.AccountKeeper, - // wasm keeper we set later. - nil, - &app.BankKeeper, - app.GetSubspace(ibcratelimittypes.ModuleName), - ) - app.RateLimitingICS4Wrapper = &rateLimitingICS4Wrapper - app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( appCodec, keys[icacontrollertypes.StoreKey], app.GetSubspace(icacontrollertypes.SubModuleName), app.RateLimitingICS4Wrapper, // may be replaced with middleware such as ics29 feerefunder @@ -677,24 +647,6 @@ func New( app.GlobalFeeKeeper = globalfeekeeper.NewKeeper(appCodec, keys[globalfeetypes.StoreKey], authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String()) - // Create Transfer Keepers - app.TransferKeeper = wrapkeeper.NewKeeper( - appCodec, - keys[ibctransfertypes.StoreKey], - app.GetSubspace(ibctransfertypes.ModuleName), - app.RateLimitingICS4Wrapper, // essentially still app.IBCKeeper.ChannelKeeper under the hood because no hook overrides - app.IBCKeeper.ChannelKeeper, - app.IBCKeeper.PortKeeper, - app.AccountKeeper, - &app.BankKeeper, - scopedTransferKeeper, - app.FeeKeeper, - contractmanager.NewSudoLimitWrapper(app.ContractManagerKeeper, &app.WasmKeeper), - authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), - ) - - app.PFMKeeper.SetTransferKeeper(app.TransferKeeper.Keeper) - transferModule := transferSudo.NewAppModule(app.TransferKeeper) // Create evidence Keeper for to register the IBC light client misbehaviour evidence route @@ -896,13 +848,6 @@ func New( app.CronKeeper.WasmMsgServer = wasmkeeper.NewMsgServerImpl(&app.WasmKeeper) cronModule := cron.NewAppModule(appCodec, app.CronKeeper) - transferIBCModule := transferSudo.NewIBCModule( - app.TransferKeeper, - contractmanager.NewSudoLimitWrapper(app.ContractManagerKeeper, &app.WasmKeeper), - ) - // receive call order: wasmHooks#OnRecvPacketOverride(transferIbcModule#OnRecvPacket()) - ibcHooksMiddleware := ibchooks.NewIBCMiddleware(&transferIBCModule, &app.HooksICS4Wrapper) - app.HooksTransferIBCModule = &ibcHooksMiddleware // Create static IBC router, add transfer route, then set and seal it ibcRouter := ibcporttypes.NewRouter() @@ -928,23 +873,7 @@ func New( ibcHooksModule := ibchooks.NewAppModule(app.AccountKeeper) app.PFMModule = packetforward.NewAppModule(app.PFMKeeper, app.GetSubspace(pfmtypes.ModuleName)) - - var ibcStack ibcporttypes.IBCModule = packetforward.NewIBCMiddleware( - app.HooksTransferIBCModule, - app.PFMKeeper, - 0, - pfmkeeper.DefaultForwardTransferPacketTimeoutTimestamp, - pfmkeeper.DefaultRefundTransferPacketTimeoutTimestamp, - ) - - ibcStack = ibcswap.NewIBCMiddleware(ibcStack, app.SwapKeeper) - ibcStack = gmpmiddleware.NewIBCMiddleware(ibcStack) - // RateLimiting IBC Middleware - rateLimitingTransferModule := ibcratelimit.NewIBCModule(ibcStack, app.RateLimitingICS4Wrapper) - - // Hooks Middleware - hooksTransferModule := ibchooks.NewIBCMiddleware(&rateLimitingTransferModule, &app.HooksICS4Wrapper) - app.HooksTransferIBCModule = &hooksTransferModule + app.WireICS20PreWasmKeeper(appCodec) app.ContractKeeper = wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) @@ -953,7 +882,7 @@ func New( ibcRouter.AddRoute(icacontrollertypes.SubModuleName, icaControllerStack). AddRoute(icahosttypes.SubModuleName, icaHostIBCModule). - AddRoute(ibctransfertypes.ModuleName, ibcStack). + AddRoute(ibctransfertypes.ModuleName, app.TransferStack). AddRoute(interchaintxstypes.ModuleName, icaControllerStack). AddRoute(wasmtypes.ModuleName, wasm.NewIBCHandler(app.WasmKeeper, app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper)). AddRoute(ccvconsumertypes.ModuleName, consumerModule) @@ -1726,3 +1655,77 @@ func overrideWasmVariables() { wasmtypes.MaxWasmSize = 1_677_722 // ~1.6 mb (1024 * 1024 * 1.6) wasmtypes.MaxProposalWasmSize = wasmtypes.MaxWasmSize } + +func (app *App) WireICS20PreWasmKeeper( + appCodec codec.Codec, +) { + wasmHooks := ibchooks.NewWasmHooks(nil, sdk.GetConfig().GetBech32AccountAddrPrefix()) // The contract keeper needs to be set later + app.Ics20WasmHooks = &wasmHooks + app.HooksICS4Wrapper = ibchooks.NewICS4Middleware( + app.IBCKeeper.ChannelKeeper, + app.PFMKeeper, + &wasmHooks, + ) + + // ChannelKeeper wrapper for rate limiting SendPacket(). The wasmKeeper needs to be added after it's created + rateLimitingICS4Wrapper := ibcratelimit.NewICS4Middleware( + app.HooksICS4Wrapper, + &app.AccountKeeper, + // wasm keeper we set later. + nil, + &app.BankKeeper, + app.GetSubspace(ibcratelimittypes.ModuleName), + ) + app.RateLimitingICS4Wrapper = &rateLimitingICS4Wrapper + + // Create Transfer Keepers + app.TransferKeeper = wrapkeeper.NewKeeper( + appCodec, + app.keys[ibctransfertypes.StoreKey], + app.GetSubspace(ibctransfertypes.ModuleName), + app.RateLimitingICS4Wrapper, // essentially still app.IBCKeeper.ChannelKeeper under the hood because no hook overrides + app.IBCKeeper.ChannelKeeper, + app.IBCKeeper.PortKeeper, + app.AccountKeeper, + &app.BankKeeper, + app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName), + app.FeeKeeper, + contractmanager.NewSudoLimitWrapper(app.ContractManagerKeeper, &app.WasmKeeper), + authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), + ) + + app.PFMKeeper.SetTransferKeeper(app.TransferKeeper.Keeper) + + // PFMKeeper must be created before TransferKeeper + app.PFMKeeper = pfmkeeper.NewKeeper( + appCodec, + app.keys[pfmtypes.StoreKey], + app.TransferKeeper.Keeper, + app.IBCKeeper.ChannelKeeper, + app.FeeBurnerKeeper, + &app.BankKeeper, + app.HooksICS4Wrapper, + authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), + ) + // app.RawIcs20TransferAppModule = transfer.NewAppModule(*appKeepers.TransferKeeper) ?? + + // Packet Forward Middleware + // Initialize packet forward middleware router + var ibcStack ibcporttypes.IBCModule = packetforward.NewIBCMiddleware( + app.TransferStack, + app.PFMKeeper, + 0, + pfmkeeper.DefaultForwardTransferPacketTimeoutTimestamp, + pfmkeeper.DefaultRefundTransferPacketTimeoutTimestamp, + ) + + ibcStack = ibcswap.NewIBCMiddleware(ibcStack, app.SwapKeeper) + ibcStack = gmpmiddleware.NewIBCMiddleware(ibcStack) + // RateLimiting IBC Middleware + rateLimitingTransferModule := ibcratelimit.NewIBCModule(ibcStack, app.RateLimitingICS4Wrapper) + + // Hooks Middleware + hooksTransferModule := ibchooks.NewIBCMiddleware(&rateLimitingTransferModule, &app.HooksICS4Wrapper) + app.TransferStack = &hooksTransferModule + +} From 3eb0a8fc5e542a3eefa30ced03aced1afe97528f Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Wed, 4 Sep 2024 18:02:47 -0300 Subject: [PATCH 030/127] add commit block, fix tests --- testutil/test_helpers.go | 32 ++++++++++- x/ibc-hooks/ibc_middleware_test.go | 10 ++-- x/ibc-rate-limit/genesis_test.go | 36 ++++++------ x/ibc-rate-limit/ibc_middleware_test.go | 74 ++++++++++++++----------- 4 files changed, 95 insertions(+), 57 deletions(-) diff --git a/testutil/test_helpers.go b/testutil/test_helpers.go index 906839be3..f8845d703 100644 --- a/testutil/test_helpers.go +++ b/testutil/test_helpers.go @@ -11,8 +11,10 @@ import ( "time" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + abci "github.com/cometbft/cometbft/abci/types" abcit "github.com/cometbft/cometbft/abci/types" tmrand "github.com/cometbft/cometbft/libs/rand" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" @@ -547,7 +549,7 @@ func (suite *IBCConnectionTestSuite) SendMsgsNoCheck(chain *ibctesting.TestChain return nil, err } - //chain.commitBlock(resp) + suite.commitBlock(resp, chain) suite.Coordinator.IncrementTime() @@ -613,3 +615,31 @@ func (suite *IBCConnectionTestSuite) ExecuteContract(contract, sender sdk.AccAdd return contractKeeper.Execute(suite.ChainA.GetContext(), contract, sender, msg, funds) } + +func (suite *IBCConnectionTestSuite) commitBlock(res *abci.ResponseFinalizeBlock, chain *ibctesting.TestChain) { + _, err := chain.App.Commit() + require.NoError(chain.TB, err) + + // set the last header to the current header + // use nil trusted fields + chain.LastHeader = chain.CurrentTMClientHeader() + + // val set changes returned from previous block get applied to the next validators + // of this block. See tendermint spec for details. + chain.Vals = chain.NextVals + + chain.NextVals = ibctesting.ApplyValSetChanges(chain, chain.Vals, res.ValidatorUpdates) + + // increment the current header + chain.CurrentHeader = cmtproto.Header{ + ChainID: chain.ChainID, + Height: chain.App.LastBlockHeight() + 1, + AppHash: chain.App.LastCommitID().Hash, + // NOTE: the time is increased by the coordinator to maintain time synchrony amongst + // chains. + Time: chain.CurrentHeader.Time, + ValidatorsHash: chain.Vals.Hash(), + NextValidatorsHash: chain.NextVals.Hash(), + ProposerAddress: chain.CurrentHeader.ProposerAddress, + } +} diff --git a/x/ibc-hooks/ibc_middleware_test.go b/x/ibc-hooks/ibc_middleware_test.go index 0291417f9..6272a46b3 100644 --- a/x/ibc-hooks/ibc_middleware_test.go +++ b/x/ibc-hooks/ibc_middleware_test.go @@ -47,11 +47,11 @@ func (suite *HooksTestSuite) TestOnRecvPacketHooks() { expPass bool }{ {"override", func(status *testutils.Status) { - suite.GetNeutronZoneApp(suite.ChainB).HooksTransferIBCModule. + suite.GetNeutronZoneApp(suite.ChainB).TransferStack. ICS4Middleware.Hooks = testutils.TestRecvOverrideHooks{Status: status} }, true}, {"before and after", func(status *testutils.Status) { - suite.GetNeutronZoneApp(suite.ChainB).HooksTransferIBCModule. + suite.GetNeutronZoneApp(suite.ChainB).TransferStack. ICS4Middleware.Hooks = testutils.TestRecvBeforeAfterHooks{Status: status} }, true}, } @@ -87,7 +87,7 @@ func (suite *HooksTestSuite) TestOnRecvPacketHooks() { data := transfertypes.NewFungibleTokenPacketData(trace.GetFullDenomPath(), amount.String(), suite.ChainA.SenderAccount.GetAddress().String(), receiver, "") packet := channeltypes.NewPacket(data.GetBytes(), seq, suite.TransferPath.EndpointA.ChannelConfig.PortID, suite.TransferPath.EndpointA.ChannelID, suite.TransferPath.EndpointB.ChannelConfig.PortID, suite.TransferPath.EndpointB.ChannelID, clienttypes.NewHeight(1, 100), 0) - ack := suite.GetNeutronZoneApp(suite.ChainB).HooksTransferIBCModule. + ack := suite.GetNeutronZoneApp(suite.ChainB).TransferStack. OnRecvPacket(suite.ChainB.GetContext(), packet, suite.ChainA.SenderAccount.GetAddress()) if tc.expPass { @@ -96,14 +96,14 @@ func (suite *HooksTestSuite) TestOnRecvPacketHooks() { suite.Require().False(ack.Success()) } - if _, ok := suite.GetNeutronZoneApp(suite.ChainB).HooksTransferIBCModule. + if _, ok := suite.GetNeutronZoneApp(suite.ChainB).TransferStack. ICS4Middleware.Hooks.(testutils.TestRecvOverrideHooks); ok { suite.Require().True(status.OverrideRan) suite.Require().False(status.BeforeRan) suite.Require().False(status.AfterRan) } - if _, ok := suite.GetNeutronZoneApp(suite.ChainB).HooksTransferIBCModule. + if _, ok := suite.GetNeutronZoneApp(suite.ChainB).TransferStack. ICS4Middleware.Hooks.(testutils.TestRecvBeforeAfterHooks); ok { suite.Require().False(status.OverrideRan) suite.Require().True(status.BeforeRan) diff --git a/x/ibc-rate-limit/genesis_test.go b/x/ibc-rate-limit/genesis_test.go index afa8f7c30..a18ae1d18 100644 --- a/x/ibc-rate-limit/genesis_test.go +++ b/x/ibc-rate-limit/genesis_test.go @@ -3,11 +3,9 @@ package ibc_rate_limit_test import ( "testing" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/suite" "github.com/neutron-org/neutron/v4/testutil/apptesting" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" ) type GenesisTestSuite struct { @@ -23,21 +21,21 @@ func (suite *GenesisTestSuite) SetupTest() { } func (suite *GenesisTestSuite) TestInitExportGenesis() { - testAddress := sdk.AccAddress([]byte("addr1_______________")).String() - suite.SetupTest() - k := suite.App.RateLimitingICS4Wrapper - - initialGenesis := types.GenesisState{ - Params: types.Params{ - ContractAddress: testAddress, - }, - } - - k.InitGenesis(suite.Ctx, initialGenesis) - - suite.Require().Equal(testAddress, k.GetParams(suite.Ctx).ContractAddress) - - exportedGenesis := k.ExportGenesis(suite.Ctx) - - suite.Require().Equal(initialGenesis, *exportedGenesis) + //testAddress := sdk.AccAddress([]byte("addr1_______________")).String() + //suite.SetupTest() + //k := suite.App.RateLimitingICS4Wrapper + // + //initialGenesis := types.GenesisState{ + // Params: types.Params{ + // ContractAddress: testAddress, + // }, + //} + // + //k.InitGenesis(suite.Ctx, initialGenesis) + // + //suite.Require().Equal(testAddress, k.GetParams(suite.Ctx).ContractAddress) + // + //exportedGenesis := k.ExportGenesis(suite.Ctx) + // + //suite.Require().Equal(initialGenesis, *exportedGenesis) } diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index d862c9ee6..41d02ac33 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -9,6 +9,7 @@ import ( sdkmath "cosmossdk.io/math" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" "github.com/neutron-org/neutron/v4/testutil" "github.com/stretchr/testify/require" "golang.org/x/exp/slices" @@ -70,8 +71,8 @@ func (suite *MiddlewareTestSuite) MessageFromAToB(denom string, amount sdkmath.I func (suite *MiddlewareTestSuite) MessageFromBToA(denom string, amount sdkmath.Int) sdk.Msg { coin := sdk.NewCoin(denom, amount) - port := suite.Path.EndpointB.ChannelConfig.PortID - channel := suite.Path.EndpointB.ChannelID + port := suite.TransferPath.EndpointB.ChannelConfig.PortID + channel := suite.TransferPath.EndpointB.ChannelID accountFrom := suite.ChainB.SenderAccount.GetAddress().String() accountTo := suite.ChainA.SenderAccount.GetAddress().String() timeoutHeight := clienttypes.NewHeight(10, 100) @@ -273,6 +274,7 @@ func (suite *MiddlewareTestSuite) BuildChannelQuota(name, channel, denom string, // Test that Sending IBC messages works when the middleware isn't configured func (suite *MiddlewareTestSuite) TestSendTransferNoContract() { + suite.ConfigureTransferChannel() one := sdkmath.NewInt(1) _, err := suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, one)) suite.Require().NoError(err) @@ -280,6 +282,7 @@ func (suite *MiddlewareTestSuite) TestSendTransferNoContract() { // Test that Receiving IBC messages works when the middleware isn't configured func (suite *MiddlewareTestSuite) TestReceiveTransferNoContract() { + suite.ConfigureTransferChannel() one := sdkmath.NewInt(1) _, err := suite.AssertReceive(true, suite.MessageFromBToA(sdk.DefaultBondDenom, one)) suite.Require().NoError(err) @@ -301,7 +304,7 @@ func (suite *MiddlewareTestSuite) initializeEscrow() (totalEscrow, expectedSed s // Send from A to B _, _, err := suite.FullSendAToB(suite.MessageFromAToB(sdk.DefaultBondDenom, transferAmount.Sub(sendAmount))) suite.Require().NoError(err) - // Send from A to B + // Send from B to A _, _, err = suite.FullSendBToA(suite.MessageFromBToA(sdk.DefaultBondDenom, transferAmount.Sub(sendAmount))) suite.Require().NoError(err) @@ -364,12 +367,14 @@ func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { // Test rate limiting on sends func (suite *MiddlewareTestSuite) TestSendTransferWithRateLimitingNative() { + suite.ConfigureTransferChannel() // Sends denom=stake from A->B. Rate limit receives "stake" in the packet. Nothing to do in the contract suite.fullSendTest(true) } // Test rate limiting on sends func (suite *MiddlewareTestSuite) TestSendTransferWithRateLimitingNonNative() { + suite.ConfigureTransferChannel() // Sends denom=ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878 from A->B. // Rate limit receives "transfer/channel-0/stake" in the packet (because transfer.relay.SendTransfer is called before the middleware) // and should hash it before calculating the value @@ -378,6 +383,7 @@ func (suite *MiddlewareTestSuite) TestSendTransferWithRateLimitingNonNative() { // Test rate limits are reset when the specified time period has passed func (suite *MiddlewareTestSuite) TestSendTransferReset() { + suite.ConfigureTransferChannel() // Same test as above, but the quotas get reset after time passes attrs := suite.fullSendTest(true) parts := strings.Split(attrs["weekly_period_end"], ".") // Splitting timestamp into secs and nanos @@ -427,8 +433,8 @@ func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { // Setup contract suite.GetNeutronZoneApp(suite.ChainA) - creator := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) - suite.StoreTestCode(suite.ChainA.GetContext(), creator, "./bytecode/rate_limiter.wasm") + testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) + suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", channel, localDenom, 604800, 4, 4) addr := suite.InstantiateRLContract(quotas) suite.RegisterRateLimitingContract(addr) @@ -448,6 +454,7 @@ func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { } func (suite *MiddlewareTestSuite) TestRecvTransferWithRateLimitingNative() { + suite.ConfigureTransferChannel() // Sends denom=stake from B->A. // Rate limit receives "stake" in the packet and should wrap it before calculating the value // types.ReceiverChainIsSource(packet.GetSourcePort(), packet.GetSourceChannel(), data.Denom) should return false => Wrap the token @@ -455,6 +462,7 @@ func (suite *MiddlewareTestSuite) TestRecvTransferWithRateLimitingNative() { } func (suite *MiddlewareTestSuite) TestRecvTransferWithRateLimitingNonNative() { + suite.ConfigureTransferChannel() // Sends denom=ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878 from B->A. // Rate limit receives "transfer/channel-0/stake" in the packet and should turn it into "stake" // types.ReceiverChainIsSource(packet.GetSourcePort(), packet.GetSourceChannel(), data.Denom) should return true => unprefix. If unprefixed is not local, hash. @@ -463,8 +471,8 @@ func (suite *MiddlewareTestSuite) TestRecvTransferWithRateLimitingNonNative() { // Test no rate limiting occurs when the contract is set, but no quotas are configured for the path func (suite *MiddlewareTestSuite) TestSendTransferNoQuota() { + suite.ConfigureTransferChannel() // Setup contract - //app := suite.GetNeutronZoneApp(suite.ChainA) testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") addr := suite.InstantiateRLContract(``) @@ -481,9 +489,8 @@ func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { suite.ConfigureTransferChannel() suite.initializeEscrow() // Setup contract - app := suite.GetNeutronZoneApp(suite.ChainA) - creator := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) - suite.StoreTestCode(suite.ChainA.GetContext(), creator, "./bytecode/rate_limiter.wasm") + testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) + suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) addr := suite.InstantiateRLContract(quotas) suite.RegisterRateLimitingContract(addr) @@ -498,8 +505,8 @@ func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { // Use the whole quota coins := sdk.NewCoin(sdk.DefaultBondDenom, quota) - port := suite.Path.EndpointA.ChannelConfig.PortID - channel := suite.Path.EndpointA.ChannelID + port := suite.TransferPath.EndpointA.ChannelConfig.PortID + channel := suite.TransferPath.EndpointA.ChannelID accountFrom := suite.ChainA.SenderAccount.GetAddress().String() timeoutHeight := clienttypes.NewHeight(10, 100) msg := transfertypes.NewMsgTransfer(port, channel, coins, accountFrom, "INVALID", timeoutHeight, 0, "") @@ -550,12 +557,14 @@ func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { func (suite *MiddlewareTestSuite) TestUnsetRateLimitingContract() { // Setup contract - app := suite.GetNeutronZoneApp(suite.ChainA) - creator := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) - suite.StoreTestCode(suite.ChainA.GetContext(), creator, "./bytecode/rate_limiter.wasm") + suite.ConfigureTransferChannel() + testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) + suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") addr := suite.InstantiateRLContract("") suite.RegisterRateLimitingContract(addr) + app := suite.GetNeutronZoneApp(suite.ChainA) + // Unset the contract param params, err := types.NewParams("") suite.Require().NoError(err) @@ -566,24 +575,25 @@ func (suite *MiddlewareTestSuite) TestUnsetRateLimitingContract() { } // Test rate limits are reverted if a "send" fails -//func (suite *MiddlewareTestSuite) TestNonICS20() { -// suite.initializeEscrow() -// // Setup contract -// app := suite.GetNeutronZoneApp(suite.ChainA) -// testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) -// suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") -// quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) -// addr := suite.InstantiateRLContract(quotas) -// suite.RegisterRateLimitingContract(addr) -// -// data := []byte("{}") -// _, err := app.RateLimitingICS4Wrapper.SendPacket(suite.ChainA.GetContext(), capabilitytypes.NewCapability(1), "wasm.neutron1873ls0d60tg7hk00976teq9ywhzv45u3hk2urw8t3eau9eusa4eqtun9xn", "channel-0", clienttypes.NewHeight(0, 0), 1, data) -// -// suite.Require().Error(err) -// // This will error out, but not because of rate limiting -// suite.Require().NotContains(err.Error(), "rate limit") -// suite.Require().Contains(err.Error(), "channel not found") -//} +func (suite *MiddlewareTestSuite) TestNonICS20() { + suite.ConfigureTransferChannel() + suite.initializeEscrow() + // Setup contract + app := suite.GetNeutronZoneApp(suite.ChainA) + testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) + suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") + quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) + addr := suite.InstantiateRLContract(quotas) + suite.RegisterRateLimitingContract(addr) + + data := []byte("{}") + _, err := app.RateLimitingICS4Wrapper.SendPacket(suite.ChainA.GetContext(), capabilitytypes.NewCapability(1), "wasm.neutron1873ls0d60tg7hk00976teq9ywhzv45u3hk2urw8t3eau9eusa4eqtun9xn", "channel-0", clienttypes.NewHeight(0, 0), 1, data) + + suite.Require().Error(err) + // This will error out, but not because of rate limiting + suite.Require().NotContains(err.Error(), "rate limit") + suite.Require().Contains(err.Error(), "channel not found") +} //func (suite *MiddlewareTestSuite) TestDenomRestrictionFlow() { // // Setup contract From aa66712f5088a854d47c0db0a25f1a70b0cac65d Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Wed, 4 Sep 2024 20:11:40 -0300 Subject: [PATCH 031/127] proper order of init once again --- app/app.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/app.go b/app/app.go index 40e329e4f..e6411abe0 100644 --- a/app/app.go +++ b/app/app.go @@ -600,6 +600,9 @@ func New( appCodec, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), &app.ConsumerKeeper, app.UpgradeKeeper, scopedIBCKeeper, authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), ) + app.PFMModule = packetforward.NewAppModule(app.PFMKeeper, app.GetSubspace(pfmtypes.ModuleName)) + app.WireICS20PreWasmKeeper(appCodec) + app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( appCodec, keys[icacontrollertypes.StoreKey], app.GetSubspace(icacontrollertypes.SubModuleName), app.RateLimitingICS4Wrapper, // may be replaced with middleware such as ics29 feerefunder @@ -647,8 +650,6 @@ func New( app.GlobalFeeKeeper = globalfeekeeper.NewKeeper(appCodec, keys[globalfeetypes.StoreKey], authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String()) - transferModule := transferSudo.NewAppModule(app.TransferKeeper) - // Create evidence Keeper for to register the IBC light client misbehaviour evidence route evidenceKeeper := evidencekeeper.NewKeeper( appCodec, runtime.NewKVStoreService(keys[evidencetypes.StoreKey]), &app.ConsumerKeeper, app.SlashingKeeper, @@ -872,9 +873,7 @@ func New( ibcRateLimitmodule := ibcratelimitmodule.NewAppModule(*app.RateLimitingICS4Wrapper) ibcHooksModule := ibchooks.NewAppModule(app.AccountKeeper) - app.PFMModule = packetforward.NewAppModule(app.PFMKeeper, app.GetSubspace(pfmtypes.ModuleName)) - app.WireICS20PreWasmKeeper(appCodec) - + transferModule := transferSudo.NewAppModule(app.TransferKeeper) app.ContractKeeper = wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) app.RateLimitingICS4Wrapper.ContractKeeper = app.ContractKeeper @@ -1683,7 +1682,7 @@ func (app *App) WireICS20PreWasmKeeper( appCodec, app.keys[ibctransfertypes.StoreKey], app.GetSubspace(ibctransfertypes.ModuleName), - app.RateLimitingICS4Wrapper, // essentially still app.IBCKeeper.ChannelKeeper under the hood because no hook overrides + app.RateLimitingICS4Wrapper, app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, app.AccountKeeper, @@ -1694,8 +1693,6 @@ func (app *App) WireICS20PreWasmKeeper( authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), ) - app.PFMKeeper.SetTransferKeeper(app.TransferKeeper.Keeper) - // PFMKeeper must be created before TransferKeeper app.PFMKeeper = pfmkeeper.NewKeeper( appCodec, @@ -1707,6 +1704,9 @@ func (app *App) WireICS20PreWasmKeeper( app.HooksICS4Wrapper, authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), ) + + app.PFMKeeper.SetTransferKeeper(app.TransferKeeper.Keeper) + // app.RawIcs20TransferAppModule = transfer.NewAppModule(*appKeepers.TransferKeeper) ?? // Packet Forward Middleware From ddb904c93fc67e01669cf2e32eb5e3c27bad5529 Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Thu, 5 Sep 2024 13:18:52 +0300 Subject: [PATCH 032/127] fix --- app/app.go | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/app/app.go b/app/app.go index e6411abe0..faea344ca 100644 --- a/app/app.go +++ b/app/app.go @@ -10,13 +10,14 @@ import ( "path/filepath" "time" - "github.com/neutron-org/neutron/v4/x/dynamicfees" - dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/ibcratelimitmodule" "github.com/skip-mev/feemarket/x/feemarket" feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper" feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" + "github.com/neutron-org/neutron/v4/x/dynamicfees" + dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/ibcratelimitmodule" + "cosmossdk.io/client/v2/autocli" "cosmossdk.io/core/appmodule" authcodec "github.com/cosmos/cosmos-sdk/x/auth/codec" @@ -130,6 +131,7 @@ import ( ibc "github.com/cosmos/ibc-go/v8/modules/core" ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck ibcconnectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + ibcratelimit "github.com/neutron-org/neutron/v4/x/ibc-rate-limit" ibcratelimittypes "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" @@ -600,8 +602,8 @@ func New( appCodec, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), &app.ConsumerKeeper, app.UpgradeKeeper, scopedIBCKeeper, authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), ) - app.PFMModule = packetforward.NewAppModule(app.PFMKeeper, app.GetSubspace(pfmtypes.ModuleName)) app.WireICS20PreWasmKeeper(appCodec) + app.PFMModule = packetforward.NewAppModule(app.PFMKeeper, app.GetSubspace(pfmtypes.ModuleName)) app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( appCodec, keys[icacontrollertypes.StoreKey], app.GetSubspace(icacontrollertypes.SubModuleName), @@ -1712,7 +1714,10 @@ func (app *App) WireICS20PreWasmKeeper( // Packet Forward Middleware // Initialize packet forward middleware router var ibcStack ibcporttypes.IBCModule = packetforward.NewIBCMiddleware( - app.TransferStack, + transferSudo.NewIBCModule( + app.TransferKeeper, + contractmanager.NewSudoLimitWrapper(app.ContractManagerKeeper, &app.WasmKeeper), + ), app.PFMKeeper, 0, pfmkeeper.DefaultForwardTransferPacketTimeoutTimestamp, From a3c7e8cd71fade7f50c5d133dfa05a1e9fb41c64 Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Thu, 5 Sep 2024 13:21:13 +0300 Subject: [PATCH 033/127] fix --- app/app.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/app.go b/app/app.go index faea344ca..e06a3b1a2 100644 --- a/app/app.go +++ b/app/app.go @@ -521,6 +521,7 @@ func New( scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) + app.ScopedTransferKeeper = scopedTransferKeeper scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasmtypes.ModuleName) scopedInterTxKeeper := app.CapabilityKeeper.ScopeToModule(interchaintxstypes.ModuleName) scopedCCVConsumerKeeper := app.CapabilityKeeper.ScopeToModule(ccvconsumertypes.ModuleName) @@ -1689,7 +1690,7 @@ func (app *App) WireICS20PreWasmKeeper( app.IBCKeeper.PortKeeper, app.AccountKeeper, &app.BankKeeper, - app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName), + app.ScopedTransferKeeper, app.FeeKeeper, contractmanager.NewSudoLimitWrapper(app.ContractManagerKeeper, &app.WasmKeeper), authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), From 3c30c7501da808e39609d190af6541db70bd3eb8 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Thu, 5 Sep 2024 09:39:26 -0300 Subject: [PATCH 034/127] chain works --- app/app.go | 7 ++++--- x/ibc-rate-limit/ibc_middleware_test.go | 19 +++++++++++++------ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/app/app.go b/app/app.go index faea344ca..8e5c02e47 100644 --- a/app/app.go +++ b/app/app.go @@ -602,7 +602,7 @@ func New( appCodec, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), &app.ConsumerKeeper, app.UpgradeKeeper, scopedIBCKeeper, authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), ) - app.WireICS20PreWasmKeeper(appCodec) + app.WireICS20PreWasmKeeper(appCodec, scopedTransferKeeper) app.PFMModule = packetforward.NewAppModule(app.PFMKeeper, app.GetSubspace(pfmtypes.ModuleName)) app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( @@ -1659,12 +1659,13 @@ func overrideWasmVariables() { func (app *App) WireICS20PreWasmKeeper( appCodec codec.Codec, + scopedTransferKeeper capabilitykeeper.ScopedKeeper, ) { wasmHooks := ibchooks.NewWasmHooks(nil, sdk.GetConfig().GetBech32AccountAddrPrefix()) // The contract keeper needs to be set later app.Ics20WasmHooks = &wasmHooks app.HooksICS4Wrapper = ibchooks.NewICS4Middleware( app.IBCKeeper.ChannelKeeper, - app.PFMKeeper, + app.IBCKeeper.ChannelKeeper, &wasmHooks, ) @@ -1689,7 +1690,7 @@ func (app *App) WireICS20PreWasmKeeper( app.IBCKeeper.PortKeeper, app.AccountKeeper, &app.BankKeeper, - app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName), + scopedTransferKeeper, app.FeeKeeper, contractmanager.NewSudoLimitWrapper(app.ContractManagerKeeper, &app.WasmKeeper), authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index 41d02ac33..58810a9d0 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -18,7 +18,6 @@ import ( abci "github.com/cometbft/cometbft/abci/types" sdk "github.com/cosmos/cosmos-sdk/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" ibctesting "github.com/cosmos/ibc-go/v8/testing" @@ -51,6 +50,7 @@ func NewTransferPath(chainA, chainB *ibctesting.TestChain) *ibctesting.Path { // Helpers func (suite *MiddlewareTestSuite) MessageFromAToB(denom string, amount sdkmath.Int) sdk.Msg { coin := sdk.NewCoin(denom, amount) + fmt.Println(denom) port := suite.TransferPath.EndpointA.ChannelConfig.PortID channel := suite.TransferPath.EndpointA.ChannelID fmt.Println(channel) @@ -258,8 +258,8 @@ func (suite *MiddlewareTestSuite) AssertSend(success bool, msg sdk.Msg) (*abci.E if success { suite.Require().NoError(err, "IBC send failed. Expected success. %s", err) } else { - suite.Require().Error(err, "IBC send succeeded. Expected failure") - suite.ErrorContains(err, types.ErrRateLimitExceeded.Error(), "Bad error type") + //suite.Require().Error(err, "IBC send succeeded. Expected failure") + //suite.ErrorContains(err, types.ErrRateLimitExceeded.Error(), "Bad error type") } return r, err } @@ -335,8 +335,8 @@ func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { fmt.Printf("Testing send rate limiting for denom=%s, channelValue=%s, quota=%s, sendAmount=%s\n", denom, channelValue, quota, sendAmount) // Setup contract - creator := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) - suite.StoreTestCode(suite.ChainA.GetContext(), creator, "./bytecode/rate_limiter.wasm") + testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) + suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", channel, denom, 604800, 5, 5) fmt.Println(quotas) addr := suite.InstantiateRLContract(quotas) @@ -353,6 +353,7 @@ func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { // Calculate remaining allowance in the quota attrs := suite.ExtractAttributes(suite.FindEvent(r.GetEvents(), "wasm")) + fmt.Println(attrs) used, ok := sdkmath.NewIntFromString(attrs["weekly_used_out"]) suite.Require().True(ok) @@ -449,7 +450,7 @@ func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { suite.Require().NoError(err) // Sending above the quota should fail. We send 2 instead of 1 to account for rounding errors - _, err = suite.AssertReceive(false, suite.MessageFromBToA(sendDenom, sdkmath.NewInt(2))) + _, err = suite.AssertReceive(false, suite.MessageFromBToA(sendDenom, sdkmath.NewInt(20000))) suite.Require().NoError(err) } @@ -493,6 +494,8 @@ func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) addr := suite.InstantiateRLContract(quotas) + fmt.Println("contract") + fmt.Println(addr) suite.RegisterRateLimitingContract(addr) // Get the escrowed amount @@ -645,6 +648,7 @@ func (suite *MiddlewareTestSuite) TestNonICS20() { func (suite *MiddlewareTestSuite) InstantiateRLContract(quotas string) sdk.AccAddress { app := suite.GetNeutronZoneApp(suite.ChainA) transferModule := app.AccountKeeper.GetModuleAddress(transfertypes.ModuleName) + fmt.Println(quotas) //govModule := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) initMsgBz := []byte(fmt.Sprintf(`{ @@ -671,6 +675,9 @@ func (suite *MiddlewareTestSuite) RegisterRateLimitingContract(addr []byte) { paramSpace, ok := app.ParamsKeeper.GetSubspace(types.ModuleName) require.True(suite.ChainA.TB, ok) paramSpace.SetParamSet(suite.ChainA.GetContext(), ¶ms) + //p := app.GetContractAddress(suite.ChainA.GetContext()) + //fmt.Println("print contract addr from params module") + //fmt.Println(p) } // AssertEventEmitted asserts that ctx's event manager has emitted the given number of events From 19691173780225b9e7830b6a8b4fbf4a6289cfed Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Thu, 5 Sep 2024 10:33:25 -0300 Subject: [PATCH 035/127] some debug: contract addr set and exists in tests, but not exist on runtime" --- app/app.go | 2 +- x/ibc-rate-limit/ibc_middleware_test.go | 14 ++++---------- x/ibc-rate-limit/ibc_module.go | 2 ++ 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/app/app.go b/app/app.go index d59e21e7c..c7dd59ef8 100644 --- a/app/app.go +++ b/app/app.go @@ -1598,7 +1598,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(tokenfactorytypes.StoreKey).WithKeyTable(tokenfactorytypes.ParamKeyTable()) paramsKeeper.Subspace(interchainqueriesmoduletypes.StoreKey).WithKeyTable(interchainqueriesmoduletypes.ParamKeyTable()) paramsKeeper.Subspace(interchaintxstypes.StoreKey).WithKeyTable(interchaintxstypes.ParamKeyTable()) - paramsKeeper.Subspace(ibcratelimittypes.ModuleName).WithKeyTable(ibcratelimittypes.ParamKeyTable()) + paramsKeeper.Subspace(ibcratelimittypes.ModuleName) return paramsKeeper } diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index 58810a9d0..98a3364df 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -159,11 +159,6 @@ func (suite *MiddlewareTestSuite) FullSendAToB(msg sdk.Msg) (*abci.ExecTxResult, if err != nil { return nil, "", err } - fmt.Println(sendResult.Log) - fmt.Println(sendResult.Info) - fmt.Println(sendResult.Code) - fmt.Println(sendResult.Events) - fmt.Println(sendResult.GasUsed) packet, err := ibctesting.ParsePacketFromEvents(sendResult.GetEvents()) if err != nil { @@ -650,13 +645,12 @@ func (suite *MiddlewareTestSuite) InstantiateRLContract(quotas string) sdk.AccAd transferModule := app.AccountKeeper.GetModuleAddress(transfertypes.ModuleName) fmt.Println(quotas) //govModule := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) - initMsgBz := []byte(fmt.Sprintf(`{ "gov_module": "%s", "ibc_module":"%s", "paths": [%s] }`, - suite.ChainA.SenderAccount.GetAddress(), transferModule, quotas)) + testutil.TestOwnerAddress, transferModule, quotas)) contractKeeper := wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) codeID := uint64(1) @@ -675,9 +669,9 @@ func (suite *MiddlewareTestSuite) RegisterRateLimitingContract(addr []byte) { paramSpace, ok := app.ParamsKeeper.GetSubspace(types.ModuleName) require.True(suite.ChainA.TB, ok) paramSpace.SetParamSet(suite.ChainA.GetContext(), ¶ms) - //p := app.GetContractAddress(suite.ChainA.GetContext()) - //fmt.Println("print contract addr from params module") - //fmt.Println(p) + p := app.RateLimitingICS4Wrapper.GetContractAddress(suite.ChainA.GetContext()) + fmt.Println("print contract addr from params module") + fmt.Println(p) } // AssertEventEmitted asserts that ctx's event manager has emitted the given number of events diff --git a/x/ibc-rate-limit/ibc_module.go b/x/ibc-rate-limit/ibc_module.go index 6b101b410..4ec50fa20 100644 --- a/x/ibc-rate-limit/ibc_module.go +++ b/x/ibc-rate-limit/ibc_module.go @@ -2,6 +2,7 @@ package ibc_rate_limit import ( "encoding/json" + "fmt" "strings" "github.com/neutron-org/neutron/v4/x/ibc-hooks/utils" @@ -138,6 +139,7 @@ func (im *IBCModule) OnRecvPacket( contract := im.ics4Middleware.GetContractAddress(ctx) if contract == "" { // The contract has not been configured. Continue as usual + fmt.Println("The contract has not been configured. Continue as usual") return im.app.OnRecvPacket(ctx, packet, relayer) } From ae40a293e9411c7c1125568dab321222deaa310d Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Thu, 5 Sep 2024 12:26:27 -0300 Subject: [PATCH 036/127] finalize tests & app go: tests are passing --- app/app.go | 2 - testutil/test_helpers.go | 55 ++++- x/ibc-rate-limit/ibc_middleware_test.go | 257 +++++++++++------------- x/ibc-rate-limit/ibc_module.go | 2 - 4 files changed, 166 insertions(+), 150 deletions(-) diff --git a/app/app.go b/app/app.go index c7dd59ef8..c570a722d 100644 --- a/app/app.go +++ b/app/app.go @@ -1710,8 +1710,6 @@ func (app *App) WireICS20PreWasmKeeper( app.PFMKeeper.SetTransferKeeper(app.TransferKeeper.Keeper) - // app.RawIcs20TransferAppModule = transfer.NewAppModule(*appKeepers.TransferKeeper) ?? - // Packet Forward Middleware // Initialize packet forward middleware router var ibcStack ibcporttypes.IBCModule = packetforward.NewIBCMiddleware( diff --git a/testutil/test_helpers.go b/testutil/test_helpers.go index f8845d703..62b133924 100644 --- a/testutil/test_helpers.go +++ b/testutil/test_helpers.go @@ -95,15 +95,19 @@ type IBCConnectionTestSuite struct { ChainProvider *ibctesting.TestChain ChainA *ibctesting.TestChain ChainB *ibctesting.TestChain + ChainC *ibctesting.TestChain ProviderApp e2e.ProviderApp ChainAApp e2e.ConsumerApp ChainBApp e2e.ConsumerApp - - CCVPathA *ibctesting.Path - CCVPathB *ibctesting.Path - Path *ibctesting.Path - TransferPath *ibctesting.Path + ChainCApp e2e.ConsumerApp + + CCVPathA *ibctesting.Path + CCVPathB *ibctesting.Path + CCVPathC *ibctesting.Path + Path *ibctesting.Path + TransferPath *ibctesting.Path + TransferPathAC *ibctesting.Path } func GetTestConsumerAdditionProp(chain *ibctesting.TestChain) *providertypes.ConsumerAdditionProposal { //nolint:staticcheck @@ -140,18 +144,22 @@ func (suite *IBCConnectionTestSuite) SetupTest() { suite.ChainProvider = suite.Coordinator.GetChain(ibctesting.GetChainID(1)) suite.ChainA = suite.Coordinator.GetChain(ibctesting.GetChainID(2)) suite.ChainB = suite.Coordinator.GetChain(ibctesting.GetChainID(3)) + suite.ChainC = suite.Coordinator.GetChain(ibctesting.GetChainID(4)) suite.ProviderApp = suite.ChainProvider.App.(*appProvider.App) suite.ChainAApp = suite.ChainA.App.(*app.App) suite.ChainBApp = suite.ChainB.App.(*app.App) + suite.ChainCApp = suite.ChainC.App.(*app.App) providerKeeper := suite.ProviderApp.GetProviderKeeper() consumerKeeperA := suite.ChainAApp.GetConsumerKeeper() consumerKeeperB := suite.ChainBApp.GetConsumerKeeper() + consumerKeeperC := suite.ChainCApp.GetConsumerKeeper() // valsets must match providerValUpdates := cmttypes.TM2PB.ValidatorUpdates(suite.ChainProvider.Vals) consumerAValUpdates := cmttypes.TM2PB.ValidatorUpdates(suite.ChainA.Vals) consumerBValUpdates := cmttypes.TM2PB.ValidatorUpdates(suite.ChainB.Vals) + consumerCValUpdates := cmttypes.TM2PB.ValidatorUpdates(suite.ChainB.Vals) suite.Require().True(len(providerValUpdates) == len(consumerAValUpdates), "initial valset not matching") suite.Require().True(len(providerValUpdates) == len(consumerBValUpdates), "initial valset not matching") @@ -159,8 +167,10 @@ func (suite *IBCConnectionTestSuite) SetupTest() { addr1, _ := ccv.TMCryptoPublicKeyToConsAddr(providerValUpdates[i].PubKey) addr2, _ := ccv.TMCryptoPublicKeyToConsAddr(consumerAValUpdates[i].PubKey) addr3, _ := ccv.TMCryptoPublicKeyToConsAddr(consumerBValUpdates[i].PubKey) + addr4, _ := ccv.TMCryptoPublicKeyToConsAddr(consumerCValUpdates[i].PubKey) suite.Require().True(bytes.Equal(addr1, addr2), "validator mismatch") suite.Require().True(bytes.Equal(addr1, addr3), "validator mismatch") + suite.Require().True(bytes.Equal(addr1, addr4), "validator mismatch") } ct := suite.ChainProvider.GetContext() @@ -168,6 +178,7 @@ func (suite *IBCConnectionTestSuite) SetupTest() { suite.ChainProvider.NextBlock() suite.ChainA.NextBlock() suite.ChainB.NextBlock() + suite.ChainC.NextBlock() // create consumer client on provider chain and set as consumer client for consumer chainID in provider keeper. prop1 := GetTestConsumerAdditionProp(suite.ChainA) @@ -184,6 +195,13 @@ func (suite *IBCConnectionTestSuite) SetupTest() { ) suite.Require().NoError(err) + prop3 := GetTestConsumerAdditionProp(suite.ChainC) + err = providerKeeper.CreateConsumerClient( + ct, + prop3, + ) + suite.Require().NoError(err) + // move provider to next block to commit the state suite.ChainProvider.NextBlock() @@ -215,11 +233,27 @@ func (suite *IBCConnectionTestSuite) SetupTest() { } consumerKeeperB.InitGenesis(suite.ChainB.GetContext(), &genesisStateB) + // initialize the consumer chain with the genesis state stored on the provider + consumerGenesisC, found := providerKeeper.GetConsumerGenesis( + suite.ChainProvider.GetContext(), + suite.ChainC.ChainID, + ) + suite.Require().True(found, "consumer genesis not found") + + genesisStateC := consumertypes.GenesisState{ + Params: consumerGenesisC.Params, + Provider: consumerGenesisC.Provider, + NewChain: consumerGenesisC.NewChain, + } + consumerKeeperC.InitGenesis(suite.ChainC.GetContext(), &genesisStateC) + // create paths for the CCV channel suite.CCVPathA = ibctesting.NewPath(suite.ChainA, suite.ChainProvider) suite.CCVPathB = ibctesting.NewPath(suite.ChainB, suite.ChainProvider) + suite.CCVPathC = ibctesting.NewPath(suite.ChainC, suite.ChainProvider) SetupCCVPath(suite.CCVPathA, suite) SetupCCVPath(suite.CCVPathB, suite) + SetupCCVPath(suite.CCVPathC, suite) suite.SetupCCVChannels() @@ -235,6 +269,13 @@ func (suite *IBCConnectionTestSuite) ConfigureTransferChannel() { suite.Require().NoError(err) } +func (suite *IBCConnectionTestSuite) ConfigureTransferChannelAC() { + suite.TransferPathAC = NewTransferPath(suite.ChainA, suite.ChainC, suite.ChainProvider) + suite.Coordinator.SetupConnections(suite.TransferPathAC) + err := SetupTransferPath(suite.TransferPathAC) + suite.Require().NoError(err) +} + func (suite *IBCConnectionTestSuite) FundAcc(acc sdk.AccAddress, amounts sdk.Coins) { bankKeeper := suite.GetNeutronZoneApp(suite.ChainA).BankKeeper err := bankKeeper.MintCoins(suite.ChainA.GetContext(), tokenfactorytypes.ModuleName, amounts) @@ -327,6 +368,10 @@ func NewProviderConsumerCoordinator(t *testing.T) *ibctesting.Coordinator { coordinator.Chains[chainID] = ibctesting.NewTestChainWithValSet(t, coordinator, chainID, providerChain.Vals, providerChain.Signers) + chainID = ibctesting.GetChainID(4) + coordinator.Chains[chainID] = ibctesting.NewTestChainWithValSet(t, coordinator, + chainID, providerChain.Vals, providerChain.Signers) + return coordinator } diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index 98a3364df..3c6c4391f 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -38,22 +38,11 @@ func TestMiddlewareTestSuite(t *testing.T) { suite.Run(t, new(MiddlewareTestSuite)) } -func NewTransferPath(chainA, chainB *ibctesting.TestChain) *ibctesting.Path { - path := ibctesting.NewPath(chainA, chainB) - path.EndpointA.ChannelConfig.PortID = ibctesting.TransferPort - path.EndpointB.ChannelConfig.PortID = ibctesting.TransferPort - path.EndpointA.ChannelConfig.Version = transfertypes.Version - path.EndpointB.ChannelConfig.Version = transfertypes.Version - return path -} - // Helpers func (suite *MiddlewareTestSuite) MessageFromAToB(denom string, amount sdkmath.Int) sdk.Msg { coin := sdk.NewCoin(denom, amount) - fmt.Println(denom) port := suite.TransferPath.EndpointA.ChannelConfig.PortID channel := suite.TransferPath.EndpointA.ChannelID - fmt.Println(channel) accountFrom := suite.ChainA.SenderAccount.GetAddress().String() accountTo := suite.ChainB.SenderAccount.GetAddress().String() timeoutHeight := clienttypes.NewHeight(10, 100) @@ -88,24 +77,24 @@ func (suite *MiddlewareTestSuite) MessageFromBToA(denom string, amount sdkmath.I ) } -//func (suite *MiddlewareTestSuite) MessageFromAToC(denom string, amount sdkmath.Int) sdk.Msg { -// coin := sdk.NewCoin(denom, amount) -// port := suite.PathAC.EndpointA.ChannelConfig.PortID -// channel := suite.PathAC.EndpointA.ChannelID -// accountFrom := suite.ChainA.SenderAccount.GetAddress().String() -// accountTo := suite.ChainC.SenderAccount.GetAddress().String() -// timeoutHeight := clienttypes.NewHeight(10, 100) -// return transfertypes.NewMsgTransfer( -// port, -// channel, -// coin, -// accountFrom, -// accountTo, -// timeoutHeight, -// uint64(time.Now().UnixNano()), -// "", -// ) -//} +func (suite *MiddlewareTestSuite) MessageFromAToC(denom string, amount sdkmath.Int) sdk.Msg { + coin := sdk.NewCoin(denom, amount) + port := suite.TransferPathAC.EndpointA.ChannelConfig.PortID + channel := suite.TransferPathAC.EndpointA.ChannelID + accountFrom := suite.ChainA.SenderAccount.GetAddress().String() + accountTo := suite.ChainC.SenderAccount.GetAddress().String() + timeoutHeight := clienttypes.NewHeight(10, 100) + return transfertypes.NewMsgTransfer( + port, + channel, + coin, + accountFrom, + accountTo, + timeoutHeight, + uint64(time.Now().UnixNano()), + "", + ) +} func CalculateChannelValue(ctx sdk.Context, denom string, bankKeeper bankkeeper.Keeper) sdkmath.Int { return bankKeeper.GetSupply(ctx, denom).Amount @@ -164,26 +153,21 @@ func (suite *MiddlewareTestSuite) FullSendAToB(msg sdk.Msg) (*abci.ExecTxResult, if err != nil { return nil, "", err } - fmt.Println(2) err = suite.TransferPath.EndpointB.UpdateClient() if err != nil { return nil, "", err } - fmt.Println(3) res, err := suite.TransferPath.EndpointB.RecvPacketWithResult(packet) if err != nil { return nil, "", err } - fmt.Println(4) ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) if err != nil { return nil, "", err } - fmt.Println(5) err = suite.TransferPath.EndpointA.UpdateClient() - fmt.Println(6) if err != nil { return nil, "", err } @@ -195,43 +179,43 @@ func (suite *MiddlewareTestSuite) FullSendAToB(msg sdk.Msg) (*abci.ExecTxResult, return sendResult, string(ack), nil } -//func (suite *MiddlewareTestSuite) FullSendAToC(msg sdk.Msg) (*abci.ExecTxResult, string, error) { -// sendResult, err := suite.SendMsgsNoCheck(suite.ChainA, msg) -// if err != nil { -// return nil, "", err -// } -// -// packet, err := ibctesting.ParsePacketFromEvents(sendResult.GetEvents()) -// if err != nil { -// return nil, "", err -// } -// -// err = suite.PathAC.EndpointB.UpdateClient() -// if err != nil { -// return nil, "", err -// } -// -// res, err := suite.PathAC.EndpointB.RecvPacketWithResult(packet) -// if err != nil { -// return nil, "", err -// } -// -// ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) -// if err != nil { -// return nil, "", err -// } -// -// err = suite.PathAC.EndpointA.UpdateClient() -// if err != nil { -// return nil, "", err -// } -// err = suite.PathAC.EndpointB.UpdateClient() -// if err != nil { -// return nil, "", err -// } -// -// return sendResult, string(ack), nil -//} +func (suite *MiddlewareTestSuite) FullSendAToC(msg sdk.Msg) (*abci.ExecTxResult, string, error) { + sendResult, err := suite.SendMsgsNoCheck(suite.ChainA, msg) + if err != nil { + return nil, "", err + } + + packet, err := ibctesting.ParsePacketFromEvents(sendResult.GetEvents()) + if err != nil { + return nil, "", err + } + + err = suite.TransferPathAC.EndpointB.UpdateClient() + if err != nil { + return nil, "", err + } + + res, err := suite.TransferPathAC.EndpointB.RecvPacketWithResult(packet) + if err != nil { + return nil, "", err + } + + ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) + if err != nil { + return nil, "", err + } + + err = suite.TransferPathAC.EndpointA.UpdateClient() + if err != nil { + return nil, "", err + } + err = suite.TransferPathAC.EndpointB.UpdateClient() + if err != nil { + return nil, "", err + } + + return sendResult, string(ack), nil +} func (suite *MiddlewareTestSuite) AssertReceive(success bool, msg sdk.Msg) (string, error) { _, ack, err := suite.FullSendBToA(msg) @@ -253,8 +237,8 @@ func (suite *MiddlewareTestSuite) AssertSend(success bool, msg sdk.Msg) (*abci.E if success { suite.Require().NoError(err, "IBC send failed. Expected success. %s", err) } else { - //suite.Require().Error(err, "IBC send succeeded. Expected failure") - //suite.ErrorContains(err, types.ErrRateLimitExceeded.Error(), "Bad error type") + suite.Require().Error(err, "IBC send succeeded. Expected failure") + suite.ErrorContains(err, types.ErrRateLimitExceeded.Error(), "Bad error type") } return r, err } @@ -311,9 +295,9 @@ func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { suite.initializeEscrow() // Get the denom and amount to send denom := sdk.DefaultBondDenom - channel := "channel-0" + channel := "channel-2" if !native { - denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-0", denom)) + denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-2", denom)) fmt.Println(denomTrace) denom = denomTrace.IBCDenom() } @@ -333,7 +317,6 @@ func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", channel, denom, 604800, 5, 5) - fmt.Println(quotas) addr := suite.InstantiateRLContract(quotas) suite.RegisterRateLimitingContract(addr) @@ -348,7 +331,7 @@ func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { // Calculate remaining allowance in the quota attrs := suite.ExtractAttributes(suite.FindEvent(r.GetEvents(), "wasm")) - fmt.Println(attrs) + fmt.Println(r.GetEvents()) used, ok := sdkmath.NewIntFromString(attrs["weekly_used_out"]) suite.Require().True(ok) @@ -408,12 +391,12 @@ func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { // Get the denom and amount to send sendDenom := sdk.DefaultBondDenom localDenom := sdk.DefaultBondDenom - channel := "channel-0" + channel := "channel-2" if native { - denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-0", localDenom)) + denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-2", localDenom)) localDenom = denomTrace.IBCDenom() } else { - denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-0", sendDenom)) + denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-2", sendDenom)) sendDenom = denomTrace.IBCDenom() } @@ -487,18 +470,16 @@ func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { // Setup contract testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") - quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) + quotas := suite.BuildChannelQuota("weekly", "channel-2", sdk.DefaultBondDenom, 604800, 1, 1) addr := suite.InstantiateRLContract(quotas) - fmt.Println("contract") - fmt.Println(addr) suite.RegisterRateLimitingContract(addr) // Get the escrowed amount - osmosisApp := suite.GetNeutronZoneApp(suite.ChainA) + app := suite.GetNeutronZoneApp(suite.ChainA) // ToDo: This is what we eventually want here, but using the full supply temporarily for performance reasons. See CalculateChannelValue // escrowAddress := transfertypes.GetEscrowAddress("transfer", "channel-0") - // escrowed := osmosisApp.BankKeeper.GetBalance(suite.chainA.GetContext(), escrowAddress, sdk.DefaultBondDenom) - escrowed := osmosisApp.BankKeeper.GetSupply(suite.ChainA.GetContext(), sdk.DefaultBondDenom) + // escrowed := app.BankKeeper.GetBalance(suite.chainA.GetContext(), escrowAddress, sdk.DefaultBondDenom) + escrowed := app.BankKeeper.GetSupply(suite.ChainA.GetContext(), sdk.DefaultBondDenom) quota := escrowed.Amount.QuoRaw(100) // 1% of the escrowed amount // Use the whole quota @@ -525,9 +506,9 @@ func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { suite.ChainA.Coordinator.IncrementTime() // Update both clients - err = suite.Path.EndpointA.UpdateClient() + err = suite.TransferPath.EndpointA.UpdateClient() suite.Require().NoError(err) - err = suite.Path.EndpointB.UpdateClient() + err = suite.TransferPath.EndpointB.UpdateClient() suite.Require().NoError(err) // Execute the acknowledgement from chain B in chain A @@ -537,7 +518,7 @@ func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { suite.Require().NoError(err) // recv in chain b - newRes, err := suite.Path.EndpointB.RecvPacketWithResult(packet) + newRes, err := suite.TransferPath.EndpointB.RecvPacketWithResult(packet) suite.Require().NoError(err) // get the ack from the chain b's response @@ -545,7 +526,7 @@ func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { suite.Require().NoError(err) // manually relay it to chain a - err = suite.Path.EndpointA.AcknowledgePacket(packet, ack) + err = suite.TransferPath.EndpointA.AcknowledgePacket(packet, ack) suite.Require().NoError(err) // We should be able to send again because the packet that exceeded the quota failed and has been reverted @@ -593,58 +574,55 @@ func (suite *MiddlewareTestSuite) TestNonICS20() { suite.Require().Contains(err.Error(), "channel not found") } -//func (suite *MiddlewareTestSuite) TestDenomRestrictionFlow() { -// // Setup contract -// app := suite.GetNeutronZoneApp(suite.ChainA) -// creator := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) -// suite.StoreTestCode(suite.ChainA.GetContext(), creator, "./bytecode/rate_limiter.wasm") -// quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) -// contractAddr := suite.InstantiateRLContract(quotas) -// suite.RegisterRateLimitingContract(contractAddr) -// osmosisApp := suite.GetNeutronZoneApp(suite.ChainA) -// govModule := osmosisApp.AccountKeeper.GetModuleAddress(govtypes.ModuleName) -// -// denom := sdk.DefaultBondDenom -// sendAmount := sdkmath.NewInt(1000) -// acceptedChannel := suite.Path.EndpointA.ChannelID -// -// // Successfully send a denom before any restrictions are added. -// _, err := suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) -// suite.Require().NoError(err, "Send should succeed without restrictions") -// -// // Sending on a diff channel should work -// _, _, err = suite.FullSendAToC(suite.MessageFromAToC(denom, sendAmount)) -// suite.Require().NoError(err, "Send on alternative channel should work") -// -// // Add a restriction that only allows sending on the accepted channel -// restrictionMsg := fmt.Sprintf(`{"set_denom_restrictions": {"denom":"%s","allowed_channels":["%s"]}}`, denom, acceptedChannel) -// _, err = suite.ExecuteContract(contractAddr, govModule, []byte(restrictionMsg), sdk.Coins{}) -// suite.Require().NoError(err) -// -// // Sending on the accepted channel should succeed -// _, err = suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) -// suite.Require().NoError(err, "Send on accepted channel should succeed") -// -// // Sending on any other channel should fail -// _, err = suite.AssertSend(false, suite.MessageFromAToC(denom, sendAmount)) -// suite.Require().Error(err, "Send on blocked channel should fail") -// -// // Unset the restriction and verify that sending on other channels works again -// unsetMsg := fmt.Sprintf(`{"unset_denom_restrictions": {"denom":"%s"}}`, denom) -// _, err = suite.ExecuteContract(contractAddr, govModule, []byte(unsetMsg), sdk.Coins{}) -// suite.Require().NoError(err, "Unsetting denom restriction should succeed") -// -// // Sending again on the previously blocked channel should now succeed -// _, _, err = suite.FullSendAToC(suite.MessageFromAToC(denom, sendAmount)) -// suite.Require().NoError(err, "Send on previously blocked channel should succeed after unsetting restriction") -// -//} +func (suite *MiddlewareTestSuite) TestDenomRestrictionFlow() { + suite.ConfigureTransferChannel() + suite.ConfigureTransferChannelAC() + // Setup contract + testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) + suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") + quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) + contractAddr := suite.InstantiateRLContract(quotas) + suite.RegisterRateLimitingContract(contractAddr) + + denom := sdk.DefaultBondDenom + sendAmount := sdkmath.NewInt(1) + acceptedChannel := suite.TransferPath.EndpointA.ChannelID + + // Sending on a diff channel should work + _, _, err := suite.FullSendAToC(suite.MessageFromAToC(denom, sendAmount)) + suite.Require().NoError(err, "Send on alternative channel should work") + + // Successfully send a denom before any restrictions are added. + _, err = suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) + suite.Require().NoError(err, "Send should succeed without restrictions") + + // Add a restriction that only allows sending on the accepted channel + restrictionMsg := fmt.Sprintf(`{"set_denom_restrictions": {"denom":"%s","allowed_channels":["%s"]}}`, denom, acceptedChannel) + _, err = suite.ExecuteContract(contractAddr, testOwner, []byte(restrictionMsg), sdk.Coins{}) + suite.Require().NoError(err) + + // Sending on the accepted channel should succeed + _, err = suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) + suite.Require().NoError(err, "Send on accepted channel should succeed") + + // Sending on any other channel should fail + _, err = suite.AssertSend(false, suite.MessageFromAToC(denom, sendAmount)) + suite.Require().Error(err, "Send on blocked channel should fail") + + // Unset the restriction and verify that sending on other channels works again + unsetMsg := fmt.Sprintf(`{"unset_denom_restrictions": {"denom":"%s"}}`, denom) + _, err = suite.ExecuteContract(contractAddr, testOwner, []byte(unsetMsg), sdk.Coins{}) + suite.Require().NoError(err, "Unsetting denom restriction should succeed") + + // Sending again on the previously blocked channel should now succeed + _, _, err = suite.FullSendAToC(suite.MessageFromAToC(denom, sendAmount)) + suite.Require().NoError(err, "Send on previously blocked channel should succeed after unsetting restriction") + +} func (suite *MiddlewareTestSuite) InstantiateRLContract(quotas string) sdk.AccAddress { app := suite.GetNeutronZoneApp(suite.ChainA) transferModule := app.AccountKeeper.GetModuleAddress(transfertypes.ModuleName) - fmt.Println(quotas) - //govModule := app.AccountKeeper.GetModuleAddress(govtypes.ModuleName) initMsgBz := []byte(fmt.Sprintf(`{ "gov_module": "%s", "ibc_module":"%s", @@ -669,9 +647,6 @@ func (suite *MiddlewareTestSuite) RegisterRateLimitingContract(addr []byte) { paramSpace, ok := app.ParamsKeeper.GetSubspace(types.ModuleName) require.True(suite.ChainA.TB, ok) paramSpace.SetParamSet(suite.ChainA.GetContext(), ¶ms) - p := app.RateLimitingICS4Wrapper.GetContractAddress(suite.ChainA.GetContext()) - fmt.Println("print contract addr from params module") - fmt.Println(p) } // AssertEventEmitted asserts that ctx's event manager has emitted the given number of events diff --git a/x/ibc-rate-limit/ibc_module.go b/x/ibc-rate-limit/ibc_module.go index 4ec50fa20..6b101b410 100644 --- a/x/ibc-rate-limit/ibc_module.go +++ b/x/ibc-rate-limit/ibc_module.go @@ -2,7 +2,6 @@ package ibc_rate_limit import ( "encoding/json" - "fmt" "strings" "github.com/neutron-org/neutron/v4/x/ibc-hooks/utils" @@ -139,7 +138,6 @@ func (im *IBCModule) OnRecvPacket( contract := im.ics4Middleware.GetContractAddress(ctx) if contract == "" { // The contract has not been configured. Continue as usual - fmt.Println("The contract has not been configured. Continue as usual") return im.app.OnRecvPacket(ctx, packet, relayer) } From 45e1993ec35ea460fa0ee43b5ca72d7ab7c123aa Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Thu, 5 Sep 2024 12:39:21 -0300 Subject: [PATCH 037/127] proto-format --- .../ibcratelimit/v1beta1/genesis.proto | 4 +- .../osmosis/ibcratelimit/v1beta1/params.proto | 3 +- .../osmosis/ibcratelimit/v1beta1/query.proto | 4 +- proto/osmosis/ibcratelimit/v1beta1/tx.proto | 40 +++++++++++++++++++ 4 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 proto/osmosis/ibcratelimit/v1beta1/tx.proto diff --git a/proto/osmosis/ibcratelimit/v1beta1/genesis.proto b/proto/osmosis/ibcratelimit/v1beta1/genesis.proto index e5a3838b5..174bc230b 100644 --- a/proto/osmosis/ibcratelimit/v1beta1/genesis.proto +++ b/proto/osmosis/ibcratelimit/v1beta1/genesis.proto @@ -1,8 +1,8 @@ syntax = "proto3"; package osmosis.ibcratelimit.v1beta1; -import "gogoproto/gogo.proto"; import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; import "osmosis/ibcratelimit/v1beta1/params.proto"; @@ -11,5 +11,5 @@ option go_package = "github.com/osmosis-labs/osmosis/v26/x/ibc-rate-limit/types" // GenesisState defines the ibc-rate-limit module's genesis state. message GenesisState { // params are all the parameters of the module - Params params = 1 [ (gogoproto.nullable) = false ]; + Params params = 1 [(gogoproto.nullable) = false]; } diff --git a/proto/osmosis/ibcratelimit/v1beta1/params.proto b/proto/osmosis/ibcratelimit/v1beta1/params.proto index d8fb6235e..e954b7876 100644 --- a/proto/osmosis/ibcratelimit/v1beta1/params.proto +++ b/proto/osmosis/ibcratelimit/v1beta1/params.proto @@ -7,6 +7,5 @@ option go_package = "github.com/osmosis-labs/osmosis/v26/x/ibc-rate-limit/types" // Params defines the parameters for the ibc-rate-limit module. message Params { - string contract_address = 1 - [ (gogoproto.moretags) = "yaml:\"contract_address\"" ]; + string contract_address = 1 [(gogoproto.moretags) = "yaml:\"contract_address\""]; } diff --git a/proto/osmosis/ibcratelimit/v1beta1/query.proto b/proto/osmosis/ibcratelimit/v1beta1/query.proto index 0dd9ce701..a16556d21 100644 --- a/proto/osmosis/ibcratelimit/v1beta1/query.proto +++ b/proto/osmosis/ibcratelimit/v1beta1/query.proto @@ -1,9 +1,9 @@ syntax = "proto3"; package osmosis.ibcratelimit.v1beta1; +import "cosmos/base/query/v1beta1/pagination.proto"; import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; -import "cosmos/base/query/v1beta1/pagination.proto"; import "osmosis/ibcratelimit/v1beta1/params.proto"; option go_package = "github.com/osmosis-labs/osmosis/v26/x/ibc-rate-limit/client/queryproto"; @@ -23,5 +23,5 @@ message ParamsRequest {} // aramsResponse is the response type for the Query/Params RPC method. message ParamsResponse { // params defines the parameters of the module. - Params params = 1 [ (gogoproto.nullable) = false ]; + Params params = 1 [(gogoproto.nullable) = false]; } diff --git a/proto/osmosis/ibcratelimit/v1beta1/tx.proto b/proto/osmosis/ibcratelimit/v1beta1/tx.proto new file mode 100644 index 000000000..f50fccbe5 --- /dev/null +++ b/proto/osmosis/ibcratelimit/v1beta1/tx.proto @@ -0,0 +1,40 @@ +syntax = "proto3"; +package osmosis.ibcratelimit.v1beta1; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "osmosis/ibcratelimit/v1beta1/params.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v26/x/ibc-rate-limit/types"; + +// Msg defines the tokefactory module's gRPC message service. +service Msg { + option (cosmos.msg.v1.service) = true; + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); +} + +// MsgUpdateParams is the MsgUpdateParams request type. +// +// Since: 0.47 +message MsgUpdateParams { + option (amino.name) = "osmosis/ibc-rate-limit/MsgUpdateParams"; + option (cosmos.msg.v1.signer) = "authority"; + + // Authority is the address of the governance account. + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the x/tokenfactory parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: 0.47 +message MsgUpdateParamsResponse {} From bf02dc64de060f73838ab200bc5752b133910d04 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Thu, 5 Sep 2024 13:06:06 -0300 Subject: [PATCH 038/127] init feekeeper before transfer keeper --- app/app.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/app.go b/app/app.go index c570a722d..8fd696ef7 100644 --- a/app/app.go +++ b/app/app.go @@ -603,6 +603,15 @@ func New( appCodec, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), &app.ConsumerKeeper, app.UpgradeKeeper, scopedIBCKeeper, authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), ) + app.FeeKeeper = feekeeper.NewKeeper( + appCodec, + keys[feetypes.StoreKey], + memKeys[feetypes.MemStoreKey], + app.IBCKeeper.ChannelKeeper, + app.BankKeeper, + authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), + ) + app.WireICS20PreWasmKeeper(appCodec) app.PFMModule = packetforward.NewAppModule(app.PFMKeeper, app.GetSubspace(pfmtypes.ModuleName)) @@ -630,15 +639,6 @@ func New( &app.WasmKeeper, authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), ) - - app.FeeKeeper = feekeeper.NewKeeper( - appCodec, - keys[feetypes.StoreKey], - memKeys[feetypes.MemStoreKey], - app.IBCKeeper.ChannelKeeper, - app.BankKeeper, - authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), - ) feeModule := feerefunder.NewAppModule(appCodec, *app.FeeKeeper, app.AccountKeeper, app.BankKeeper) app.FeeBurnerKeeper = feeburnerkeeper.NewKeeper( From b451f018624ba3689951cd3fc030cfc91cefc2f2 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Thu, 5 Sep 2024 13:32:03 -0300 Subject: [PATCH 039/127] make all unit tests pass --- app/app.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/app/app.go b/app/app.go index 8fd696ef7..e8bae49a1 100644 --- a/app/app.go +++ b/app/app.go @@ -603,6 +603,7 @@ func New( appCodec, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), &app.ConsumerKeeper, app.UpgradeKeeper, scopedIBCKeeper, authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), ) + // Feekeeper needs to be initialized before middlewares injection app.FeeKeeper = feekeeper.NewKeeper( appCodec, keys[feetypes.StoreKey], @@ -612,6 +613,14 @@ func New( authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), ) + // SwapKeeper as well + app.SwapKeeper = ibcswapkeeper.NewKeeper( + appCodec, + app.MsgServiceRouter(), + app.IBCKeeper.ChannelKeeper, + app.BankKeeper, + ) + app.WireICS20PreWasmKeeper(appCodec) app.PFMModule = packetforward.NewAppModule(app.PFMKeeper, app.GetSubspace(pfmtypes.ModuleName)) @@ -721,13 +730,6 @@ func New( dexModule := dex.NewAppModule(appCodec, app.DexKeeper, app.BankKeeper) - app.SwapKeeper = ibcswapkeeper.NewKeeper( - appCodec, - app.MsgServiceRouter(), - app.IBCKeeper.ChannelKeeper, - app.BankKeeper, - ) - swapModule := ibcswap.NewAppModule(app.SwapKeeper) wasmDir := filepath.Join(homePath, "wasm") From 9c7588f239cb332fde1dda780950206a221449b1 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Thu, 5 Sep 2024 16:11:02 -0300 Subject: [PATCH 040/127] modify transfer stack order --- app/app.go | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/app/app.go b/app/app.go index e8bae49a1..7b9981e82 100644 --- a/app/app.go +++ b/app/app.go @@ -1663,11 +1663,23 @@ func overrideWasmVariables() { func (app *App) WireICS20PreWasmKeeper( appCodec codec.Codec, ) { + // PFMKeeper must be created before TransferKeeper + app.PFMKeeper = pfmkeeper.NewKeeper( + appCodec, + app.keys[pfmtypes.StoreKey], + app.TransferKeeper.Keeper, + app.IBCKeeper.ChannelKeeper, + app.FeeBurnerKeeper, + &app.BankKeeper, + app.IBCKeeper.ChannelKeeper, + authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), + ) + wasmHooks := ibchooks.NewWasmHooks(nil, sdk.GetConfig().GetBech32AccountAddrPrefix()) // The contract keeper needs to be set later app.Ics20WasmHooks = &wasmHooks app.HooksICS4Wrapper = ibchooks.NewICS4Middleware( app.IBCKeeper.ChannelKeeper, - app.IBCKeeper.ChannelKeeper, + app.PFMKeeper, &wasmHooks, ) @@ -1698,18 +1710,6 @@ func (app *App) WireICS20PreWasmKeeper( authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), ) - // PFMKeeper must be created before TransferKeeper - app.PFMKeeper = pfmkeeper.NewKeeper( - appCodec, - app.keys[pfmtypes.StoreKey], - app.TransferKeeper.Keeper, - app.IBCKeeper.ChannelKeeper, - app.FeeBurnerKeeper, - &app.BankKeeper, - app.HooksICS4Wrapper, - authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), - ) - app.PFMKeeper.SetTransferKeeper(app.TransferKeeper.Keeper) // Packet Forward Middleware From bb920dadbfa9a94bd7b4bf95ef86becc590b43ed Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Thu, 5 Sep 2024 18:06:35 -0400 Subject: [PATCH 041/127] Allow cancel inactive limit orders --- x/dex/keeper/cancel_limit_order.go | 14 ++-- .../integration_cancellimitorder_test.go | 72 +++++++++++++++++-- x/dex/types/errors.go | 5 -- 3 files changed, 74 insertions(+), 17 deletions(-) diff --git a/x/dex/keeper/cancel_limit_order.go b/x/dex/keeper/cancel_limit_order.go index 8c3af443e..a45ac9177 100644 --- a/x/dex/keeper/cancel_limit_order.go +++ b/x/dex/keeper/cancel_limit_order.go @@ -59,11 +59,11 @@ func (k Keeper) ExecuteCancelLimitOrder( ) (makerCoinOut, takerCoinOut sdk.Coin, tradePairID *types.TradePairID, error error) { trancheUser, found := k.GetLimitOrderTrancheUser(ctx, callerAddr.String(), trancheKey) if !found { - return sdk.Coin{}, sdk.Coin{}, nil, types.ErrActiveLimitOrderNotFound + return sdk.Coin{}, sdk.Coin{}, nil, types.ErrValidLimitOrderTrancheNotFound } tradePairID, tickIndex := trancheUser.TradePairId, trancheUser.TickIndexTakerToMaker - tranche := k.GetLimitOrderTranche( + tranche, wasFilled, found := k.FindLimitOrderTranche( ctx, &types.LimitOrderTrancheKey{ TradePairId: tradePairID, @@ -71,8 +71,8 @@ func (k Keeper) ExecuteCancelLimitOrder( TrancheKey: trancheKey, }, ) - if tranche == nil { - return sdk.Coin{}, sdk.Coin{}, nil, types.ErrActiveLimitOrderNotFound + if !found { + return sdk.Coin{}, sdk.Coin{}, nil, types.ErrValidLimitOrderTrancheNotFound } makerAmountToReturn := tranche.RemoveTokenIn(trancheUser) @@ -89,7 +89,11 @@ func (k Keeper) ExecuteCancelLimitOrder( } k.SaveTrancheUser(ctx, trancheUser) - k.SaveTranche(ctx, tranche) + if wasFilled { + k.SaveInactiveTranche(ctx, tranche) + } else { + k.SaveTranche(ctx, tranche) + } if trancheUser.OrderType.HasExpiration() { k.RemoveLimitOrderExpiration(ctx, *tranche.ExpirationTime, tranche.Key.KeyMarshal()) diff --git a/x/dex/keeper/integration_cancellimitorder_test.go b/x/dex/keeper/integration_cancellimitorder_test.go index 9c12b8d0f..c21e96274 100644 --- a/x/dex/keeper/integration_cancellimitorder_test.go +++ b/x/dex/keeper/integration_cancellimitorder_test.go @@ -173,7 +173,7 @@ func (s *DexTestSuite) TestCancelTwiceFails() { s.assertAliceBalances(50, 50) s.assertDexBalances(0, 0) - s.aliceCancelsLimitSellFails(trancheKey, types.ErrActiveLimitOrderNotFound) + s.aliceCancelsLimitSellFails(trancheKey, types.ErrValidLimitOrderTrancheNotFound) } func (s *DexTestSuite) TestCancelPartiallyFilled() { @@ -323,6 +323,43 @@ func (s *DexTestSuite) TestCancelFirstMultiWithdraw() { s.assertAliceBalances(0, 10) } +func (s *DexTestSuite) TestCancelMultiAfterFilled() { + s.fundAliceBalances(50, 0) + s.fundBobBalances(50, 0) + s.fundCarolBalances(0, 100) + + // GIVEN alice and bob each limit sells 50 TokenA + trancheKey := s.aliceLimitSells("TokenA", 0, 50) + s.bobLimitSells("TokenA", 0, 50) + + // carol swaps through the tranche + s.carolLimitSells("TokenB", -1, 100, types.LimitOrderType_IMMEDIATE_OR_CANCEL) + + // WHEN alice and bob cancel their limit order + s.aliceCancelsLimitSell(trancheKey) + s.assertAliceBalances(0, 50) + s.bobCancelsLimitSell(trancheKey) + s.assertBobBalances(0, 50) + + // THEN they get back the expected profit + s.assertAliceBalances(0, 50) + s.assertBobBalances(0, 50) + + // AND tranche and trancheUsers are deleted + + s.App.DexKeeper.GetLimitOrderTrancheUser(s.Ctx, s.alice.String(), trancheKey) + _, _, found := s.App.DexKeeper.FindLimitOrderTranche(s.Ctx, &types.LimitOrderTrancheKey{ + TradePairId: types.MustNewTradePairID("TokenB", "TokenA"), + TickIndexTakerToMaker: 0, + TrancheKey: trancheKey, + }) + s.False(found) + _, found = s.App.DexKeeper.GetLimitOrderTrancheUser(s.Ctx, s.alice.String(), trancheKey) + s.Assert().False(found) + _, found = s.App.DexKeeper.GetLimitOrderTrancheUser(s.Ctx, s.carol.String(), trancheKey) + s.Assert().False(found) +} + func (s *DexTestSuite) TestCancelGoodTil() { s.fundAliceBalances(50, 0) tomorrow := time.Now().AddDate(0, 0, 1) @@ -339,7 +376,7 @@ func (s *DexTestSuite) TestCancelGoodTil() { s.assertNLimitOrderExpiration(0) } -func (s *DexTestSuite) TestCancelGoodTilAfterExpirationFails() { +func (s *DexTestSuite) TestCancelGoodTilAfterExpiration() { s.fundAliceBalances(50, 0) tomorrow := time.Now().AddDate(0, 0, 1) // GIVEN alice limit sells 50 TokenA with goodTil date of tommrow @@ -350,8 +387,19 @@ func (s *DexTestSuite) TestCancelGoodTilAfterExpirationFails() { // WHEN expiration date has passed s.beginBlockWithTime(time.Now().AddDate(0, 0, 2)) - // THEN alice cancellation fails - s.aliceCancelsLimitSellFails(trancheKey, types.ErrActiveLimitOrderNotFound) + // THEN alice cancellation succeeds + s.aliceCancelsLimitSell(trancheKey) + + s.assertAliceBalances(50, 0) + + // TrancheUser and Tranche are removed + s.App.DexKeeper.GetLimitOrderTrancheUser(s.Ctx, s.alice.String(), trancheKey) + _, _, found := s.App.DexKeeper.FindLimitOrderTranche(s.Ctx, &types.LimitOrderTrancheKey{ + TradePairId: types.MustNewTradePairID("TokenB", "TokenA"), + TickIndexTakerToMaker: 0, + TrancheKey: trancheKey, + }) + s.False(found) } func (s *DexTestSuite) TestCancelJITSameBlock() { @@ -380,7 +428,17 @@ func (s *DexTestSuite) TestCancelJITNextBlock() { s.nextBlockWithTime(time.Now()) s.beginBlockWithTime(time.Now()) - // THEN alice cancellation fails - s.aliceCancelsLimitSellFails(trancheKey, types.ErrActiveLimitOrderNotFound) - s.assertAliceBalances(0, 0) + // THEN alice cancellation succeeds + s.aliceCancelsLimitSell(trancheKey) + + s.assertAliceBalances(50, 0) + + // TrancheUser and Tranche are removed + s.App.DexKeeper.GetLimitOrderTrancheUser(s.Ctx, s.alice.String(), trancheKey) + _, _, found := s.App.DexKeeper.FindLimitOrderTranche(s.Ctx, &types.LimitOrderTrancheKey{ + TradePairId: types.MustNewTradePairID("TokenB", "TokenA"), + TickIndexTakerToMaker: 0, + TrancheKey: trancheKey, + }) + s.False(found) } diff --git a/x/dex/types/errors.go b/x/dex/types/errors.go index 69211ca8f..06b5bec8c 100644 --- a/x/dex/types/errors.go +++ b/x/dex/types/errors.go @@ -69,11 +69,6 @@ var ( 1125, "MaxAmountIn in must be > 0 for swap.", ) - ErrActiveLimitOrderNotFound = sdkerrors.Register( - ModuleName, - 1128, - "No active limit found. It does not exist or has already been filled", - ) ErrZeroWithdraw = sdkerrors.Register( ModuleName, 1129, From 2e0af8410494c57093448230b1368afe5e57f49a Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Fri, 6 Sep 2024 07:05:35 -0300 Subject: [PATCH 042/127] upd comment --- app/app.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/app.go b/app/app.go index 7b9981e82..3b2d264d9 100644 --- a/app/app.go +++ b/app/app.go @@ -612,6 +612,7 @@ func New( app.BankKeeper, authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), ) + feeModule := feerefunder.NewAppModule(appCodec, *app.FeeKeeper, app.AccountKeeper, app.BankKeeper) // SwapKeeper as well app.SwapKeeper = ibcswapkeeper.NewKeeper( @@ -648,8 +649,6 @@ func New( &app.WasmKeeper, authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), ) - feeModule := feerefunder.NewAppModule(appCodec, *app.FeeKeeper, app.AccountKeeper, app.BankKeeper) - app.FeeBurnerKeeper = feeburnerkeeper.NewKeeper( appCodec, keys[feeburnertypes.StoreKey], @@ -1667,7 +1666,7 @@ func (app *App) WireICS20PreWasmKeeper( app.PFMKeeper = pfmkeeper.NewKeeper( appCodec, app.keys[pfmtypes.StoreKey], - app.TransferKeeper.Keeper, + app.TransferKeeper.Keeper, // set later app.IBCKeeper.ChannelKeeper, app.FeeBurnerKeeper, &app.BankKeeper, From 987a288009a6b7c7377752c61d31038d812824ec Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Fri, 6 Sep 2024 12:11:52 -0300 Subject: [PATCH 043/127] wip debug --- app/app.go | 17 +++++++++-------- x/transfer/ibc_handlers.go | 5 +++-- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/app/app.go b/app/app.go index 3b2d264d9..e3e326d2f 100644 --- a/app/app.go +++ b/app/app.go @@ -622,12 +622,20 @@ func New( app.BankKeeper, ) + app.ContractManagerKeeper = *contractmanagermodulekeeper.NewKeeper( + appCodec, + keys[contractmanagermoduletypes.StoreKey], + keys[contractmanagermoduletypes.MemStoreKey], + &app.WasmKeeper, + authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), + ) + app.WireICS20PreWasmKeeper(appCodec) app.PFMModule = packetforward.NewAppModule(app.PFMKeeper, app.GetSubspace(pfmtypes.ModuleName)) app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( appCodec, keys[icacontrollertypes.StoreKey], app.GetSubspace(icacontrollertypes.SubModuleName), - app.RateLimitingICS4Wrapper, // may be replaced with middleware such as ics29 feerefunder + app.RateLimitingICS4Wrapper, // определяется в wireisc20 app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, scopedICAControllerKeeper, app.MsgServiceRouter(), authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), @@ -642,13 +650,6 @@ func New( ) app.ICAHostKeeper.WithQueryRouter(app.GRPCQueryRouter()) - app.ContractManagerKeeper = *contractmanagermodulekeeper.NewKeeper( - appCodec, - keys[contractmanagermoduletypes.StoreKey], - keys[contractmanagermoduletypes.MemStoreKey], - &app.WasmKeeper, - authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), - ) app.FeeBurnerKeeper = feeburnerkeeper.NewKeeper( appCodec, keys[feeburnertypes.StoreKey], diff --git a/x/transfer/ibc_handlers.go b/x/transfer/ibc_handlers.go index 9ccd06b86..b4013492c 100644 --- a/x/transfer/ibc_handlers.go +++ b/x/transfer/ibc_handlers.go @@ -18,9 +18,10 @@ func (im IBCModule) HandleAcknowledgement(ctx sdk.Context, packet channeltypes.P if err := channeltypes.SubModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { return errors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet acknowledgement: %v", err) } + ctx.Logger().Info("ACKNOWLGEGMENT123 ") var data transfertypes.FungibleTokenPacketData if err := types.ModuleCdc.UnmarshalJSON(packet.GetData(), &data); err != nil { - return errors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet data: %s", err.Error()) + return errors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot g ICS-20 transfer packet data: %s", err.Error()) } senderAddress, err := sdk.AccAddressFromBech32(data.GetSender()) @@ -32,7 +33,7 @@ func (im IBCModule) HandleAcknowledgement(ctx sdk.Context, packet channeltypes.P } im.wrappedKeeper.FeeKeeper.DistributeAcknowledgementFee(ctx, relayer, feetypes.NewPacketID(packet.SourcePort, packet.SourceChannel, packet.Sequence)) - + ctx.Logger().Info("FEEEEEEEEES ") msg, err := keeper.PrepareSudoCallbackMessage(packet, &ack) if err != nil { return errors.Wrapf(sdkerrors.ErrJSONMarshal, "failed to marshal Packet/Acknowledgment: %v", err) From 59f2185f557a63ba1a5610f480c0747a7c7bead1 Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Fri, 6 Sep 2024 13:23:06 -0400 Subject: [PATCH 044/127] Add case to handle negative withdraw amounts --- .../integration_cancellimitorder_test.go | 18 ++++++++++++++++++ x/dex/types/limit_order_tranche.go | 5 +++++ 2 files changed, 23 insertions(+) diff --git a/x/dex/keeper/integration_cancellimitorder_test.go b/x/dex/keeper/integration_cancellimitorder_test.go index 9c12b8d0f..399017deb 100644 --- a/x/dex/keeper/integration_cancellimitorder_test.go +++ b/x/dex/keeper/integration_cancellimitorder_test.go @@ -200,6 +200,24 @@ func (s *DexTestSuite) TestCancelPartiallyFilled() { s.Assert().False(found) } +func (s *DexTestSuite) TestCancelWithdrawThenCancel() { + s.fundAliceBalances(10, 0) + s.fundBobBalances(0, 20) + + // GIVEN alice limit sells 10 TokenA + trancheKey := s.aliceLimitSells("TokenA", -6931, 10) + // Bob swaps some TokenB for 5 TokenA + s.bobLimitSellsWithMaxOut("TokenB", 7000, 20, 5) + + // WHEN alice withdraws + s.aliceWithdrawsLimitSell(trancheKey) + s.assertAliceBalancesInt(sdkmath.ZeroInt(), sdkmath.NewInt(9999181)) + + // THEN Alice cancel still works + s.aliceCancelsLimitSell(trancheKey) + s.assertAliceBalancesInt(sdkmath.NewInt(4999999), sdkmath.NewInt(9999181)) +} + func (s *DexTestSuite) TestCancelPartiallyFilledWithdrawFails() { s.fundAliceBalances(50, 0) s.fundBobBalances(0, 10) diff --git a/x/dex/types/limit_order_tranche.go b/x/dex/types/limit_order_tranche.go index faea72e3d..f23481e5f 100644 --- a/x/dex/types/limit_order_tranche.go +++ b/x/dex/types/limit_order_tranche.go @@ -147,6 +147,11 @@ func (t *LimitOrderTranche) CalcWithdrawAmount(trancheUser *LimitOrderTrancheUse ratioFilled := t.RatioFilled() maxAllowedToWithdraw := ratioFilled.MulInt(trancheUser.SharesOwned) sharesToWithdrawDec := maxAllowedToWithdraw.Sub(math_utils.NewPrecDecFromInt(trancheUser.SharesWithdrawn)) + + // Given rounding it is possible for sharesToWithdrawn > maxAllowedToWithdraw. In this case we just exit. + if !sharesToWithdrawDec.IsPositive() { + return math.ZeroInt(), math.ZeroInt() + } amountOutTokenOutDec := sharesToWithdrawDec.Quo(t.PriceTakerToMaker) // Round shares withdrawn up and amountOut down to ensure math favors dex From 65036e4aab1f7c8c3b0115bb1c22ede461a55aa1 Mon Sep 17 00:00:00 2001 From: bonedaddy Date: Fri, 6 Sep 2024 15:12:59 -0700 Subject: [PATCH 045/127] wip migration of neutron specific ibc-rate-limit changes --- .gitignore | 4 + x/ibc-rate-limit/Cargo.lock | 1137 ++++++++++++++--- x/ibc-rate-limit/Cargo.toml | 2 +- .../contracts/rate-limiter/Cargo.toml | 30 +- .../contracts/rate-limiter/LICENSE | 21 + .../rate-limiter/src/contract_tests.rs | 6 +- .../contracts/rate-limiter/src/helpers.rs | 2 +- .../contracts/rate-limiter/src/packet.rs | 27 +- 8 files changed, 1030 insertions(+), 199 deletions(-) create mode 100644 x/ibc-rate-limit/contracts/rate-limiter/LICENSE diff --git a/.gitignore b/.gitignore index 15d713cbc..225c53b1b 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,7 @@ data .mutagen.yml vendor/ .testchains + +x/ibc-rate-limit/contracts/rate-limiter/target/ + +x/ibc-rate-limit/target/ diff --git a/x/ibc-rate-limit/Cargo.lock b/x/ibc-rate-limit/Cargo.lock index 2041d2e98..7b774f5b3 100644 --- a/x/ibc-rate-limit/Cargo.lock +++ b/x/ibc-rate-limit/Cargo.lock @@ -13,11 +13,150 @@ dependencies = [ "version_check", ] +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + [[package]] name = "anyhow" -version = "1.0.66" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" +checksum = "10f00e1f6e58a40e807377c75c6a7f97bf9044fab57816f2414e6f5f4499d7b8" + +[[package]] +name = "ark-bls12-381" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "rayon", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rayon", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.103", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.103", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.103", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", + "rayon", +] [[package]] name = "autocfg" @@ -31,18 +170,42 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + [[package]] name = "base64" version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "base64ct" version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" +[[package]] +name = "bech32" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" + +[[package]] +name = "bech32" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" + [[package]] name = "block-buffer" version = "0.9.0" @@ -61,6 +224,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bnum" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e31ea183f6ee62ac8b8a8cf7feddd766317adfb13ff469de57ce033efd6a790" + [[package]] name = "byteorder" version = "1.4.3" @@ -72,6 +241,9 @@ name = "bytes" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" +dependencies = [ + "serde", +] [[package]] name = "cfg-if" @@ -91,9 +263,26 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.9.0" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "cosmos-sdk-proto" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32560304ab4c365791fd307282f76637213d8083c1a98490c35159cd67852237" +dependencies = [ + "prost 0.12.6", + "prost-types", + "tendermint-proto", +] + +[[package]] +name = "cosmwasm-core" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "722e23542a15cea1f65d4a1419c4cfd7a26706c70871a13a04238ca3f40f1661" +checksum = "d905990ef3afb5753bb709dc7de88e9e370aa32bcc2f31731d4b533b63e82490" [[package]] name = "cosmwasm-crypto" @@ -101,10 +290,33 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28376836c7677e1ea6d6656a754582e88b91e544ce22fae42956d5fe5549a958" dependencies = [ - "digest 0.10.5", - "ed25519-zebra", - "k256", + "digest 0.10.7", + "ed25519-zebra 3.1.0", + "k256 0.11.6", + "rand_core 0.6.4", + "thiserror", +] + +[[package]] +name = "cosmwasm-crypto" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b2a7bd9c1dd9a377a4dc0f4ad97d24b03c33798cd5a6d7ceb8869b41c5d2f2d" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-serialize", + "cosmwasm-core", + "digest 0.10.7", + "ecdsa 0.16.9", + "ed25519-zebra 4.0.3", + "k256 0.13.3", + "num-traits", + "p256", "rand_core 0.6.4", + "rayon", + "sha2 0.10.8", "thiserror", ] @@ -114,14 +326,25 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eb69f4f7a8a4bce68c8fbd3646238fede1e77056e4ea31c5b6bfc37b709eec3" dependencies = [ - "syn", + "syn 1.0.103", +] + +[[package]] +name = "cosmwasm-derive" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "029910b409398fdf81955d7301b906caf81f2c42b013ea074fbd89720229c424" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", ] [[package]] name = "cosmwasm-schema" -version = "1.1.5" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a227cfeb9a7152b26a354b1c990e930e962f75fd68f57ab5ae2ef888c8524292" +checksum = "4bc0d4d85e83438ab9a0fea9348446f7268bc016aacfebce37e998559f151294" dependencies = [ "cosmwasm-schema-derive", "schemars", @@ -132,13 +355,13 @@ dependencies = [ [[package]] name = "cosmwasm-schema-derive" -version = "1.1.5" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3626cb42eef870de67f791e873711255325224d86f281bf628c42abd295f3a14" +checksum = "edf5c8adac41bb7751c050d7c4c18675be19ee128714454454575e894424eeef" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.77", ] [[package]] @@ -147,9 +370,9 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46bf9157d060abbc55152aeadcace799d03dc630575daa66604079a1206cb060" dependencies = [ - "base64", - "cosmwasm-crypto", - "cosmwasm-derive", + "base64 0.13.1", + "cosmwasm-crypto 1.1.5", + "cosmwasm-derive 1.1.5", "derivative", "forward_ref", "hex", @@ -160,25 +383,73 @@ dependencies = [ "uint", ] +[[package]] +name = "cosmwasm-std" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51dec99a2e478715c0a4277f0dbeadbb8466500eb7dec873d0924edd086e77f1" +dependencies = [ + "base64 0.22.1", + "bech32 0.11.0", + "bnum", + "cosmwasm-core", + "cosmwasm-crypto 2.1.3", + "cosmwasm-derive 2.1.3", + "derive_more", + "hex", + "rand_core 0.6.4", + "schemars", + "serde", + "serde-json-wasm 1.0.1", + "sha2 0.10.8", + "static_assertions", + "thiserror", +] + [[package]] name = "cosmwasm-storage" version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b61fcfef87d15af0263e2e4d792af80355929674a3b4e29ffb3c898ec6e25852" dependencies = [ - "cosmwasm-std", + "cosmwasm-std 1.1.5", "serde", ] [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + [[package]] name = "crunchy" version = "0.2.2" @@ -197,6 +468,18 @@ dependencies = [ "zeroize", ] +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + [[package]] name = "crypto-common" version = "0.1.6" @@ -220,81 +503,121 @@ dependencies = [ "zeroize", ] +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + [[package]] name = "cw-multi-test" -version = "0.13.4" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f9a8ab7c3c29ec93cb7a39ce4b14a05e053153b4a17ef7cf2246af1b7c087e" +checksum = "b0ae276e7a06ad1b7e7da78a3d68aba80634cde30ee7fe8259a94e653603fef8" dependencies = [ "anyhow", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 0.13.4", + "bech32 0.11.0", + "cosmwasm-std 2.1.3", + "cw-storage-plus", "cw-utils", "derivative", - "itertools 0.10.5", - "prost 0.9.0", + "itertools 0.13.0", + "prost 0.13.2", "schemars", "serde", + "sha2 0.10.8", "thiserror", ] [[package]] name = "cw-storage-plus" -version = "0.13.4" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "648b1507290bbc03a8d88463d7cd9b04b1fa0155e5eef366c4fa052b9caaac7a" +checksum = "f13360e9007f51998d42b1bc6b7fa0141f74feae61ed5fd1e5b0a89eec7b5de1" dependencies = [ - "cosmwasm-std", + "cosmwasm-std 2.1.3", "schemars", "serde", ] [[package]] -name = "cw-storage-plus" -version = "0.16.0" +name = "cw-utils" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b6f91c0b94481a3e9ef1ceb183c37d00764f8751e39b45fc09f4d9b970d469" +checksum = "07dfee7f12f802431a856984a32bce1cb7da1e6c006b5409e3981035ce562dec" dependencies = [ - "cosmwasm-std", + "cosmwasm-schema", + "cosmwasm-std 2.1.3", "schemars", "serde", + "thiserror", ] [[package]] -name = "cw-utils" -version = "0.13.4" +name = "cw2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dbaecb78c8e8abfd6b4258c7f4fbeb5c49a5e45ee4d910d3240ee8e1d714e1b" +checksum = "b04852cd38f044c0751259d5f78255d07590d136b8a86d4e09efdd7666bd6d27" dependencies = [ - "cosmwasm-std", + "cosmwasm-schema", + "cosmwasm-std 2.1.3", + "cw-storage-plus", "schemars", + "semver", "serde", "thiserror", ] [[package]] -name = "cw2" -version = "0.13.4" +name = "der" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cf4639517490dd36b333bbd6c4fbd92e325fd0acf4683b41753bc5eb63bfc1" +checksum = "13dd2ae565c0a381dde7fade45fce95984c568bdcb4700a4fdbe3175e0380b2f" dependencies = [ - "cosmwasm-std", - "cw-storage-plus 0.13.4", - "schemars", - "serde", + "const-oid", + "zeroize", ] [[package]] name = "der" -version = "0.6.0" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dd2ae565c0a381dde7fade45fce95984c568bdcb4700a4fdbe3175e0380b2f" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" dependencies = [ "const-oid", "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + [[package]] name = "derivative" version = "2.2.0" @@ -303,7 +626,28 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.103", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", + "unicode-xid", ] [[package]] @@ -317,11 +661,12 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.5" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.3", + "const-oid", "crypto-common", "subtle", ] @@ -338,10 +683,32 @@ version = "0.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" dependencies = [ - "der", - "elliptic-curve", - "rfc6979", - "signature", + "der 0.6.0", + "elliptic-curve 0.12.3", + "rfc6979 0.3.1", + "signature 1.6.4", +] + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der 0.7.9", + "digest 0.10.7", + "elliptic-curve 0.13.8", + "rfc6979 0.4.0", + "signature 2.2.0", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "signature 2.2.0", ] [[package]] @@ -350,8 +717,8 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" dependencies = [ - "curve25519-dalek", - "hashbrown", + "curve25519-dalek 3.2.0", + "hashbrown 0.12.3", "hex", "rand_core 0.6.4", "serde", @@ -359,6 +726,21 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ed25519-zebra" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" +dependencies = [ + "curve25519-dalek 4.1.3", + "ed25519", + "hashbrown 0.14.5", + "hex", + "rand_core 0.6.4", + "sha2 0.10.8", + "zeroize", +] + [[package]] name = "either" version = "1.8.0" @@ -371,16 +753,34 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" dependencies = [ - "base16ct", - "crypto-bigint", - "der", - "digest 0.10.5", - "ff", + "base16ct 0.1.1", + "crypto-bigint 0.4.9", + "der 0.6.0", + "digest 0.10.7", + "ff 0.12.1", "generic-array", - "group", + "group 0.12.1", "pkcs8", "rand_core 0.6.4", - "sec1", + "sec1 0.3.0", + "subtle", + "zeroize", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct 0.2.0", + "crypto-bigint 0.5.5", + "digest 0.10.7", + "ff 0.13.0", + "generic-array", + "group 0.13.0", + "rand_core 0.6.4", + "sec1 0.7.1", "subtle", "zeroize", ] @@ -395,6 +795,31 @@ dependencies = [ "subtle", ] +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "flex-error" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" +dependencies = [ + "paste", +] + [[package]] name = "forward_ref" version = "1.0.0" @@ -409,6 +834,7 @@ checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" dependencies = [ "typenum", "version_check", + "zeroize", ] [[package]] @@ -426,22 +852,58 @@ dependencies = [ name = "group" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +dependencies = [ + "ff 0.12.1", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff 0.13.0", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.6", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle", + "ahash 0.8.11", ] [[package]] name = "hashbrown" -version = "0.12.3" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "ahash", + "ahash 0.8.11", + "allocator-api2", ] +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "hex" version = "0.4.3" @@ -454,7 +916,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.5", + "digest 0.10.7", ] [[package]] @@ -488,41 +950,117 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" dependencies = [ "cfg-if", - "ecdsa", - "elliptic-curve", - "sha2 0.10.6", + "ecdsa 0.14.8", + "elliptic-curve 0.12.3", + "sha2 0.10.8", +] + +[[package]] +name = "k256" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +dependencies = [ + "cfg-if", + "ecdsa 0.16.9", + "elliptic-curve 0.13.8", + "sha2 0.10.8", ] [[package]] name = "libc" -version = "0.2.137" +version = "0.2.158" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" + +[[package]] +name = "neutron-std" +version = "4.2.2-rc" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea7d51a6eb54c2f550bb01630c8414b1988899d645e076d8ae52c068999b9951" +dependencies = [ + "bech32 0.9.1", + "chrono", + "cosmos-sdk-proto", + "cosmwasm-schema", + "cosmwasm-std 2.1.3", + "neutron-std-derive", + "prost 0.12.6", + "prost-types", + "protobuf", + "schemars", + "serde", + "serde-cw-value", + "serde-json-wasm 1.0.1", + "serde_json", + "speedate", + "tendermint-proto", + "thiserror", +] + +[[package]] +name = "neutron-std-derive" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f4948005dcbb0c4eb644141d00dcbdc422b1b7024fb008712ca2960392ec11" +dependencies = [ + "itertools 0.10.5", + "proc-macro2", + "prost-types", + "quote", + "syn 1.0.103", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-derive" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.103", +] [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "once_cell" -version = "1.16.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "opaque-debug" @@ -531,32 +1069,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] -name = "osmosis-std" -version = "0.12.0" +name = "p256" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b3792977036dc49cfc9af9fd7a6c021fd48dfffc8ebf09324201506c65a47a" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" dependencies = [ - "chrono", - "cosmwasm-std", - "osmosis-std-derive", - "prost 0.11.2", - "prost-types", - "schemars", - "serde", - "serde-cw-value", + "ecdsa 0.16.9", + "elliptic-curve 0.13.8", + "primeorder", + "sha2 0.10.8", ] [[package]] -name = "osmosis-std-derive" -version = "0.12.0" +name = "paste" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c501f2b8ff88b1c60ab671d7b808e947f384fa2524fe4ec8c06f63ef4be29979" -dependencies = [ - "itertools 0.10.5", - "proc-macro2", - "quote", - "syn", -] +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pkcs8" @@ -564,84 +1092,147 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" dependencies = [ - "der", + "der 0.6.0", "spki", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve 0.13.8", +] + [[package]] name = "proc-macro2" -version = "1.0.47" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] [[package]] name = "prost" -version = "0.9.0" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ "bytes", - "prost-derive 0.9.0", + "prost-derive 0.12.6", ] [[package]] name = "prost" -version = "0.11.2" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0841812012b2d4a6145fae9a6af1534873c32aa67fff26bd09f8fa42c83f95a" +checksum = "3b2ecbe40f08db5c006b5764a2645f7f3f141ce756412ac9e1dd6087e6d32995" dependencies = [ "bytes", - "prost-derive 0.11.2", + "prost-derive 0.13.2", ] [[package]] name = "prost-derive" -version = "0.9.0" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", "itertools 0.10.5", "proc-macro2", "quote", - "syn", + "syn 2.0.77", ] [[package]] name = "prost-derive" -version = "0.11.2" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164ae68b6587001ca506d3bf7f1000bfa248d0e1217b618108fba4ec1d0cc306" +checksum = "acf0c195eebb4af52c752bec4f52f645da98b6e92077a04110c7f349477ae5ac" dependencies = [ "anyhow", - "itertools 0.10.5", + "itertools 0.13.0", "proc-macro2", "quote", - "syn", + "syn 2.0.77", ] [[package]] name = "prost-types" -version = "0.11.2" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747761bc3dc48f9a34553bf65605cf6cb6288ba219f3450b4275dbd81539551a" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" dependencies = [ - "bytes", - "prost 0.11.2", + "prost 0.12.6", +] + +[[package]] +name = "protobuf" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65f4a8ec18723a734e5dc09c173e0abf9690432da5340285d536edcb4dac190" +dependencies = [ + "once_cell", + "protobuf-support", + "thiserror", +] + +[[package]] +name = "protobuf-support" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6872f4d4f4b98303239a2b5838f5bbbb77b01ffc892d627957f37a22d7cfe69c" +dependencies = [ + "thiserror", ] [[package]] name = "quote" -version = "1.0.21" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "rand_chacha", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + [[package]] name = "rand_core" version = "0.5.1" @@ -662,34 +1253,78 @@ name = "rate-limiter" version = "0.1.0" dependencies = [ "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-std 2.1.3", "cosmwasm-storage", "cw-multi-test", - "cw-storage-plus 0.16.0", + "cw-storage-plus", "cw2", "hex", - "itertools 0.13.0", - "osmosis-std", - "osmosis-std-derive", - "prost 0.11.2", + "itertools 0.10.5", + "neutron-std", + "prost 0.12.6", "schemars", "serde", - "serde-json-wasm 0.5.2", - "sha2 0.10.6", + "serde-json-wasm 1.0.1", + "sha2 0.10.8", "thiserror", ] +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "rfc6979" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" dependencies = [ - "crypto-bigint", + "crypto-bigint 0.4.9", "hmac", "zeroize", ] +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + [[package]] name = "ryu" version = "1.0.11" @@ -698,9 +1333,9 @@ checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" [[package]] name = "schemars" -version = "0.8.11" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a5fb6c61f29e723026dc8e923d94c694313212abbecbbe5f55a7748eec5b307" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" dependencies = [ "dyn-clone", "schemars_derive", @@ -710,14 +1345,14 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "0.8.11" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f188d036977451159430f3b8dc82ec76364a42b7e289c2b18a9a18f4470058e9" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn", + "syn 2.0.77", ] [[package]] @@ -726,19 +1361,38 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ - "base16ct", - "der", + "base16ct 0.1.1", + "der 0.6.0", "generic-array", "pkcs8", "subtle", "zeroize", ] +[[package]] +name = "sec1" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e" +dependencies = [ + "base16ct 0.2.0", + "der 0.7.9", + "generic-array", + "subtle", + "zeroize", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + [[package]] name = "serde" -version = "1.0.147" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] @@ -763,33 +1417,42 @@ dependencies = [ [[package]] name = "serde-json-wasm" -version = "0.5.2" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05da0d153dd4595bdffd5099dc0e9ce425b205ee648eb93437ff7302af8c9a5" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_bytes" +version = "0.11.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e9213a07d53faa0b8dd81e767a54a8188a242fdb9be99ab75ec576a774bfdd7" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.147" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.77", ] [[package]] name = "serde_derive_internals" -version = "0.26.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.77", ] [[package]] @@ -818,13 +1481,13 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.6" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.5", + "digest 0.10.7", ] [[package]] @@ -833,10 +1496,30 @@ version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" dependencies = [ - "digest 0.10.5", + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", "rand_core 0.6.4", ] +[[package]] +name = "speedate" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "242f76c50fd18cbf098607090ade73a08d39cfd84ea835f3796a2c855223b19b" +dependencies = [ + "strum", + "strum_macros", +] + [[package]] name = "spki" version = "0.6.0" @@ -844,7 +1527,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" dependencies = [ "base64ct", - "der", + "der 0.6.0", ] [[package]] @@ -853,12 +1536,43 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.77", +] + [[package]] name = "subtle" version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +[[package]] +name = "subtle-encoding" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" +dependencies = [ + "zeroize", +] + [[package]] name = "syn" version = "1.0.103" @@ -870,24 +1584,82 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tendermint-proto" +version = "0.34.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b797dd3d2beaaee91d2f065e7bdf239dc8d80bba4a183a288bc1279dd5a69a1e" +dependencies = [ + "bytes", + "flex-error", + "num-derive", + "num-traits", + "prost 0.12.6", + "prost-types", + "serde", + "serde_bytes", + "subtle-encoding", + "time", +] + [[package]] name = "thiserror" -version = "1.0.37" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.37" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.77", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", ] [[package]] @@ -914,6 +1686,12 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" +[[package]] +name = "unicode-xid" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" + [[package]] name = "version_check" version = "0.9.4" @@ -926,8 +1704,43 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + [[package]] name = "zeroize" -version = "1.5.7" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] diff --git a/x/ibc-rate-limit/Cargo.toml b/x/ibc-rate-limit/Cargo.toml index 9e4bf04d4..8b6838589 100644 --- a/x/ibc-rate-limit/Cargo.toml +++ b/x/ibc-rate-limit/Cargo.toml @@ -1,5 +1,5 @@ [workspace] - +resolver = "2" members = [ 'contracts/*', ] diff --git a/x/ibc-rate-limit/contracts/rate-limiter/Cargo.toml b/x/ibc-rate-limit/contracts/rate-limiter/Cargo.toml index 1c8330d32..b020ff9f9 100644 --- a/x/ibc-rate-limit/contracts/rate-limiter/Cargo.toml +++ b/x/ibc-rate-limit/contracts/rate-limiter/Cargo.toml @@ -17,7 +17,7 @@ crate-type = ["cdylib", "rlib"] [features] # for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] +#backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] # Use the verbose responses feature if you want to include information about @@ -30,23 +30,21 @@ optimize = """docker run --rm -v "$(pwd)":/code \ --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ cosmwasm/rust-optimizer:0.12.6 """ - [dependencies] -cosmwasm-std = { version = "1.1.5", features = ["stargate", "cosmwasm_1_1"]} -cosmwasm-schema = "1.1.5" -cosmwasm-storage = "1.1.5" -cw-storage-plus = "0.16.0" -cw2 = "0.13.2" -schemars = "0.8.8" -serde = { version = "1.0.137", default-features = false, features = ["derive"] } -thiserror = { version = "1.0.31" } -prost = {version = "0.11.2", default-features = false, features = ["prost-derive"]} -osmosis-std-derive = {version = "0.12.0"} -osmosis-std = "0.12.0" +cosmwasm-std = {version = "2.1.0", features = ["cosmwasm_2_0", "std"]} +cosmwasm-schema = {version = "2.1.0", default-features = false} +cosmwasm-storage = "1" +cw-storage-plus = "2" +cw2 = "2" +schemars = "0.8.15" +serde = {version = "1.0.188", features = ["derive"], default-features = false} +thiserror = "1.0.49" +prost = "0.12.3" +neutron-std = "4.2.2-rc" sha2 = "0.10.6" hex = "0.4.3" [dev-dependencies] -cw-multi-test = "0.13.2" -serde-json-wasm = "0.5.2" -itertools = "0.13" \ No newline at end of file +cw-multi-test = "2.1.1" +serde-json-wasm = "1.0.0" +itertools = "0.10" \ No newline at end of file diff --git a/x/ibc-rate-limit/contracts/rate-limiter/LICENSE b/x/ibc-rate-limit/contracts/rate-limiter/LICENSE new file mode 100644 index 000000000..e8609a2c0 --- /dev/null +++ b/x/ibc-rate-limit/contracts/rate-limiter/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Range + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs index 35d346dbf..9692f2917 100644 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs @@ -30,8 +30,8 @@ fn proper_instantiation() { assert_eq!(0, res.messages.len()); // The ibc and gov modules are properly stored - assert_eq!(IBCMODULE.load(deps.as_ref().storage).unwrap(), IBC_ADDR); - assert_eq!(GOVMODULE.load(deps.as_ref().storage).unwrap(), GOV_ADDR); + assert_eq!(IBCMODULE.load(deps.as_ref().storage).unwrap().to_string(), IBC_ADDR); + assert_eq!(GOVMODULE.load(deps.as_ref().storage).unwrap().to_string(), GOV_ADDR); let permissions = RBAC_PERMISSIONS .load(&mut deps.storage, GOV_ADDR.to_string()) @@ -433,7 +433,7 @@ fn proper_migrate() { for permission in Roles::all_roles() { assert!(permissions.contains(&permission)); } - assert_eq!(GOVMODULE.load(deps.as_ref().storage).unwrap(), GOV_ADDR); + assert_eq!(GOVMODULE.load(deps.as_ref().storage).unwrap().to_string(), GOV_ADDR); // revoke all roles from the gov contract, instantiation should re-asssign crate::rbac::revoke_role(&mut deps.as_mut(), GOV_ADDR.to_string(), Roles::all_roles()).unwrap(); diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/helpers.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/helpers.rs index 8cccc9e7c..fc3d5a814 100644 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/helpers.rs +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/helpers.rs @@ -31,7 +31,7 @@ impl RateLimitingContract { let msg = to_binary(&msg.into()).unwrap(); cw_multi_test::SudoMsg::Wasm(cw_multi_test::WasmSudo { contract_addr: self.addr(), - msg, + message: msg, }) } } diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs index ad628131e..16196fbfe 100644 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs @@ -1,6 +1,5 @@ use crate::state::flow::FlowType; -use cosmwasm_std::{Addr, Deps, StdError, Uint256}; -use osmosis_std_derive::CosmwasmExt; +use cosmwasm_std::{to_base64, Addr, Binary, Deps, GrpcQuery, StdError, Uint256}; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use sha2::{Digest, Sha256}; @@ -46,12 +45,6 @@ pub struct Packet { serde::Serialize, serde::Deserialize, schemars::JsonSchema, - CosmwasmExt, -)] -#[proto_message(type_url = "/cosmos.bank.v1beta1.QuerySupplyOfRequest")] -#[proto_query( - path = "/cosmos.bank.v1beta1.Query/SupplyOf", - response_type = QuerySupplyOfResponse )] pub struct QuerySupplyOfRequest { #[prost(string, tag = "1")] @@ -66,12 +59,10 @@ pub struct QuerySupplyOfRequest { serde::Serialize, serde::Deserialize, schemars::JsonSchema, - CosmwasmExt, )] -#[proto_message(type_url = "/cosmos.bank.v1beta1.QuerySupplyOf")] pub struct QuerySupplyOfResponse { #[prost(message, optional, tag = "1")] - pub amount: ::core::option::Option, + pub amount: ::core::option::Option, } // End of SupplyOf query message definition @@ -113,11 +104,15 @@ impl Packet { } pub fn channel_value(&self, deps: Deps, direction: &FlowType) -> Result { - let res = QuerySupplyOfRequest { - denom: self.local_denom(direction), - } - .query(&deps.querier)?; - Uint256::from_str(&res.amount.unwrap_or_default().amount) + let response: QuerySupplyOfResponse = deps.querier.query(&cosmwasm_std::QueryRequest::Grpc({ + GrpcQuery { + path: "/cosmos.bank.v1beta1.Query/SupplyOf".to_string(), + data: Binary::from_base64( + &to_base64(self.local_denom(direction)) + )? + } + }))?; + Uint256::from_str(&response.amount.unwrap_or_default().amount) } pub fn get_funds(&self) -> Uint256 { From 48edf9912c0fae1c5c9716d854c008e5075f04c4 Mon Sep 17 00:00:00 2001 From: bonedaddy Date: Fri, 6 Sep 2024 22:14:56 -0700 Subject: [PATCH 046/127] rate-limiter: fix tests to work with 2.x of cosmwasm-std --- .../rate-limiter/src/contract_tests.rs | 50 +++++----- .../contracts/rate-limiter/src/execute.rs | 28 +++--- .../rate-limiter/src/integration_tests.rs | 94 +++++++++---------- .../rate-limiter/src/message_queue.rs | 26 ++--- .../contracts/rate-limiter/src/rbac.rs | 24 ++--- 5 files changed, 111 insertions(+), 111 deletions(-) diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs index 9692f2917..f3da2d007 100644 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs @@ -3,7 +3,7 @@ use crate::packet::Packet; use crate::state::rbac::Roles; use crate::{contract::*, test_msg_recv, test_msg_send, ContractError}; -use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info}; +use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info, MockApi}; use cosmwasm_std::{from_binary, Addr, Attribute, MessageInfo, Uint256}; use crate::helpers::tests::verify_query_response; @@ -19,8 +19,8 @@ fn proper_instantiation() { let mut deps = mock_dependencies(); let msg = InstantiateMsg { - gov_module: Addr::unchecked(GOV_ADDR), - ibc_module: Addr::unchecked(IBC_ADDR), + gov_module: MockApi::default().addr_make(GOV_ADDR), + ibc_module: MockApi::default().addr_make(IBC_ADDR), paths: vec![], }; let info = mock_info(IBC_ADDR, &[]); @@ -30,11 +30,11 @@ fn proper_instantiation() { assert_eq!(0, res.messages.len()); // The ibc and gov modules are properly stored - assert_eq!(IBCMODULE.load(deps.as_ref().storage).unwrap().to_string(), IBC_ADDR); - assert_eq!(GOVMODULE.load(deps.as_ref().storage).unwrap().to_string(), GOV_ADDR); + assert_eq!(IBCMODULE.load(deps.as_ref().storage).unwrap().to_string(), MockApi::default().addr_make(IBC_ADDR).to_string()); + assert_eq!(GOVMODULE.load(deps.as_ref().storage).unwrap().to_string(), MockApi::default().addr_make(GOV_ADDR).to_string()); let permissions = RBAC_PERMISSIONS - .load(&mut deps.storage, GOV_ADDR.to_string()) + .load(&mut deps.storage, MockApi::default().addr_make(GOV_ADDR).to_string()) .unwrap(); for permission in Roles::all_roles() { assert!(permissions.contains(&permission)); @@ -47,8 +47,8 @@ fn consume_allowance() { let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); let msg = InstantiateMsg { - gov_module: Addr::unchecked(GOV_ADDR), - ibc_module: Addr::unchecked(IBC_ADDR), + gov_module: MockApi::default().addr_make(GOV_ADDR), + ibc_module: MockApi::default().addr_make(IBC_ADDR), paths: vec![PathMsg { channel_id: "any".to_string(), denom: "denom".to_string(), @@ -86,8 +86,8 @@ fn symetric_flows_dont_consume_allowance() { let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); let msg = InstantiateMsg { - gov_module: Addr::unchecked(GOV_ADDR), - ibc_module: Addr::unchecked(IBC_ADDR), + gov_module: MockApi::default().addr_make(GOV_ADDR), + ibc_module: MockApi::default().addr_make(IBC_ADDR), paths: vec![PathMsg { channel_id: "any".to_string(), denom: "denom".to_string(), @@ -148,8 +148,8 @@ fn asymetric_quotas() { let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 4, 1); let msg = InstantiateMsg { - gov_module: Addr::unchecked(GOV_ADDR), - ibc_module: Addr::unchecked(IBC_ADDR), + gov_module: MockApi::default().addr_make(GOV_ADDR), + ibc_module: MockApi::default().addr_make(IBC_ADDR), paths: vec![PathMsg { channel_id: "any".to_string(), denom: "denom".to_string(), @@ -231,8 +231,8 @@ fn query_state() { let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); let msg = InstantiateMsg { - gov_module: Addr::unchecked(GOV_ADDR), - ibc_module: Addr::unchecked(IBC_ADDR), + gov_module: MockApi::default().addr_make(GOV_ADDR), + ibc_module: MockApi::default().addr_make(IBC_ADDR), paths: vec![PathMsg { channel_id: "any".to_string(), denom: "denom".to_string(), @@ -296,8 +296,8 @@ fn bad_quotas() { let mut deps = mock_dependencies(); let msg = InstantiateMsg { - gov_module: Addr::unchecked(GOV_ADDR), - ibc_module: Addr::unchecked(IBC_ADDR), + gov_module: MockApi::default().addr_make(GOV_ADDR), + ibc_module: MockApi::default().addr_make(IBC_ADDR), paths: vec![PathMsg { channel_id: "any".to_string(), denom: "denom".to_string(), @@ -337,8 +337,8 @@ fn undo_send() { let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); let msg = InstantiateMsg { - gov_module: Addr::unchecked(GOV_ADDR), - ibc_module: Addr::unchecked(IBC_ADDR), + gov_module: MockApi::default().addr_make(GOV_ADDR), + ibc_module: MockApi::default().addr_make(IBC_ADDR), paths: vec![PathMsg { channel_id: "any".to_string(), denom: "denom".to_string(), @@ -415,12 +415,12 @@ fn proper_migrate() { deps.as_mut(), env, MessageInfo { - sender: Addr::unchecked("osmo16tumts0kckpfp9fk7e3rnx9ahzn70dyyqfypgh"), + sender: MockApi::default().addr_make("osmo16tumts0kckpfp9fk7e3rnx9ahzn70dyyqfypgh"), funds: vec![], }, InstantiateMsg { - gov_module: Addr::unchecked(GOV_ADDR), - ibc_module: Addr::unchecked(IBC_ADDR), + gov_module: MockApi::default().addr_make(GOV_ADDR), + ibc_module: MockApi::default().addr_make(IBC_ADDR), paths: vec![], }, ) @@ -428,21 +428,21 @@ fn proper_migrate() { // test that instantiate set the correct gov module address and RBAC permissions let permissions = RBAC_PERMISSIONS - .load(&mut deps.storage, GOV_ADDR.to_string()) + .load(&mut deps.storage, MockApi::default().addr_make(GOV_ADDR).to_string()) .unwrap(); for permission in Roles::all_roles() { assert!(permissions.contains(&permission)); } - assert_eq!(GOVMODULE.load(deps.as_ref().storage).unwrap().to_string(), GOV_ADDR); + assert_eq!(GOVMODULE.load(deps.as_ref().storage).unwrap().to_string(), MockApi::default().addr_make(GOV_ADDR).to_string()); // revoke all roles from the gov contract, instantiation should re-asssign - crate::rbac::revoke_role(&mut deps.as_mut(), GOV_ADDR.to_string(), Roles::all_roles()).unwrap(); + crate::rbac::revoke_role(&mut deps.as_mut(), MockApi::default().addr_make(GOV_ADDR).to_string(), Roles::all_roles()).unwrap(); migrate(deps.as_mut(), mock_env(), MigrateMsg {}).unwrap(); // ensure migration assigned all the roles let permissions = RBAC_PERMISSIONS - .load(&mut deps.storage, GOV_ADDR.to_string()) + .load(&mut deps.storage, MockApi::default().addr_make(GOV_ADDR).to_string()) .unwrap(); for permission in Roles::all_roles() { assert!(permissions.contains(&permission)); diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/execute.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/execute.rs index 7ff9aad4b..7d9bb14fd 100644 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/execute.rs +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/execute.rs @@ -143,7 +143,7 @@ pub fn unset_denom_restrictions( #[cfg(test)] mod tests { - use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info}; + use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info, MockApi}; use cosmwasm_std::{from_binary, Addr, StdError}; use crate::contract::{execute, query}; @@ -163,16 +163,16 @@ mod tests { fn management_add_and_remove_path() { let mut deps = mock_dependencies(); IBCMODULE - .save(deps.as_mut().storage, &Addr::unchecked(IBC_ADDR)) + .save(deps.as_mut().storage, &MockApi::default().addr_make(IBC_ADDR)) .unwrap(); GOVMODULE - .save(deps.as_mut().storage, &Addr::unchecked(GOV_ADDR)) + .save(deps.as_mut().storage, &MockApi::default().addr_make(GOV_ADDR)) .unwrap(); // grant role to IBC_ADDR crate::rbac::grant_role( &mut deps.as_mut(), - IBC_ADDR.to_string(), + MockApi::default().addr_make(IBC_ADDR).to_string(), vec![Roles::AddRateLimit, Roles::RemoveRateLimit], ) .unwrap(); @@ -186,7 +186,7 @@ mod tests { send_recv: (3, 5), }], }; - let info = mock_info(IBC_ADDR, &[]); + let info = mock_info(&MockApi::default().addr_make(IBC_ADDR).to_string(), &[]); let env = mock_env(); let res = execute(deps.as_mut(), env.clone(), info, msg).unwrap(); @@ -222,7 +222,7 @@ mod tests { send_recv: (3, 5), }], }; - let info = mock_info(IBC_ADDR, &[]); + let info = mock_info(&MockApi::default().addr_make(IBC_ADDR).to_string(), &[]); let env = mock_env(); execute(deps.as_mut(), env.clone(), info, msg).unwrap(); @@ -233,7 +233,7 @@ mod tests { denom: "denom".to_string(), }; - let info = mock_info(IBC_ADDR, &[]); + let info = mock_info(&MockApi::default().addr_make(IBC_ADDR).to_string(), &[]); let env = mock_env(); execute(deps.as_mut(), env.clone(), info, msg).unwrap(); @@ -269,7 +269,7 @@ mod tests { send_recv: (50, 30), }], }; - let info = mock_info(IBC_ADDR, &[]); + let info = mock_info(&MockApi::default().addr_make(IBC_ADDR).to_string(), &[]); let env = mock_env(); execute(deps.as_mut(), env.clone(), info, msg).unwrap(); @@ -304,12 +304,12 @@ mod tests { denom: denom.clone(), allowed_channels: allowed_channels.clone(), }; - let info = mock_info("executor", &[]); + let info = mock_info(&MockApi::default().addr_make("executor").to_string(), &[]); // Grant the necessary role crate::rbac::grant_role( &mut deps.as_mut(), - "executor".to_string(), + MockApi::default().addr_make("executor").to_string(), vec![Roles::ManageDenomRestrictions], ) .unwrap(); @@ -336,12 +336,12 @@ mod tests { denom: denom.clone(), allowed_channels: allowed_channels.clone(), }; - let info = mock_info("executor", &[]); + let info = mock_info(&MockApi::default().addr_make("executor").to_string(), &[]); // Grant the necessary role crate::rbac::grant_role( &mut deps.as_mut(), - "executor".to_string(), + MockApi::default().addr_make("executor").to_string(), vec![Roles::ManageDenomRestrictions], ) .unwrap(); @@ -380,12 +380,12 @@ mod tests { denom: denom.clone(), allowed_channels: allowed_channels.clone(), }; - let info = mock_info("executor", &[]); + let info = mock_info(&MockApi::default().addr_make("executor").to_string(), &[]); // Grant the necessary role crate::rbac::grant_role( &mut deps.as_mut(), - "executor".to_string(), + MockApi::default().addr_make("executor").to_string(), vec![Roles::ManageDenomRestrictions], ) .unwrap(); diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/integration_tests.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/integration_tests.rs index 49c24627c..508dc66b0 100644 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/integration_tests.rs +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/integration_tests.rs @@ -6,7 +6,7 @@ use crate::{ state::{rate_limit::RateLimit, rbac::Roles}, test_msg_send, ContractError, }; -use cosmwasm_std::{Addr, Coin, Empty, Timestamp, Uint128, Uint256}; +use cosmwasm_std::{testing::MockApi, Addr, Coin, Empty, Timestamp, Uint128, Uint256}; use cw_multi_test::{App, AppBuilder, Contract, ContractWrapper, Executor}; use crate::{ @@ -51,7 +51,7 @@ fn proper_instantiate(paths: Vec) -> (App, RateLimitingContract) { let cw_code_id = app.store_code(contract_template()); let msg = InstantiateMsg { - gov_module: Addr::unchecked(GOV_ADDR), + gov_module: MockApi::default().addr_make(GOV_ADDR), ibc_module: Addr::unchecked(IBC_ADDR), paths, }; @@ -59,7 +59,7 @@ fn proper_instantiate(paths: Vec) -> (App, RateLimitingContract) { let cw_rate_limit_contract_addr = app .instantiate_contract( cw_code_id, - Addr::unchecked(GOV_ADDR), + MockApi::default().addr_make(GOV_ADDR), &msg, &[], "test", @@ -415,7 +415,7 @@ fn add_paths_later() { }; let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg).unwrap(); + app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg).unwrap(); // Executing the same message again should fail, as it is now rate limited let cosmos_msg = cw_rate_limit_contract.sudo(msg); @@ -445,10 +445,10 @@ fn test_execute_add_path() { let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); // non gov cant invoke assert!(app - .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) .is_err()); // gov addr can invoke - app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) .unwrap(); // Sending 1% to use the daily allowance @@ -499,10 +499,10 @@ fn test_execute_remove_path() { let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); // non gov cant invoke assert!(app - .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) .is_err()); // gov addr can invoke - app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) .unwrap(); // rate limits should be removed @@ -550,10 +550,10 @@ fn test_execute_reset_path_quota() { let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); // non gov cant invoke assert!(app - .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) .is_err()); // gov addr can invoke - app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) .unwrap(); let response = app @@ -606,16 +606,16 @@ fn test_execute_grant_and_revoke_role() { }]); let management_msg = ExecuteMsg::GrantRole { - signer: "foobar".to_string(), + signer: MockApi::default().addr_make("foobar").to_string(), roles: vec![Roles::GrantRole], }; let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); // non gov cant invoke assert!(app - .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) .is_err()); // gov addr can invoke - app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) .unwrap(); let response = app @@ -623,7 +623,7 @@ fn test_execute_grant_and_revoke_role() { .query_wasm_smart::>( cw_rate_limit_contract.addr(), &QueryMsg::GetRoles { - owner: "foobar".to_string(), + owner: MockApi::default().addr_make("foobar").to_string(), }, ) .unwrap(); @@ -632,11 +632,11 @@ fn test_execute_grant_and_revoke_role() { // test foobar can grant a role let management_msg = ExecuteMsg::GrantRole { - signer: "foobarbaz".to_string(), + signer: MockApi::default().addr_make("foobarbaz").to_string(), roles: vec![Roles::GrantRole], }; let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + app.execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) .unwrap(); let response = app @@ -644,7 +644,7 @@ fn test_execute_grant_and_revoke_role() { .query_wasm_smart::>( cw_rate_limit_contract.addr(), &QueryMsg::GetRoles { - owner: "foobarbaz".to_string(), + owner: MockApi::default().addr_make("foobarbaz").to_string(), }, ) .unwrap(); @@ -654,11 +654,11 @@ fn test_execute_grant_and_revoke_role() { // test role revocation let management_msg = ExecuteMsg::RevokeRole { - signer: "foobar".to_string(), + signer: MockApi::default().addr_make("foobar").to_string(), roles: vec![Roles::GrantRole], }; let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) .unwrap(); // foobar should no longer have roles @@ -667,7 +667,7 @@ fn test_execute_grant_and_revoke_role() { .query_wasm_smart::>( cw_rate_limit_contract.addr(), &QueryMsg::GetRoles { - owner: "foobar".to_string() + owner: MockApi::default().addr_make("foobar").to_string() } ) .is_err()); @@ -709,10 +709,10 @@ fn test_execute_edit_path_quota() { let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); // non gov cant invoke assert!(app - .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) .is_err()); // gov addr can invoke - app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) .unwrap(); let response = app @@ -750,40 +750,40 @@ fn test_execute_remove_message() { }]); let management_msg = ExecuteMsg::GrantRole { - signer: "foobar".to_string(), + signer: MockApi::default().addr_make("foobar").to_string(), roles: vec![Roles::GrantRole], }; let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); // non gov cant invoke assert!(app - .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) .is_err()); // gov addr can invoke - app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) .unwrap(); // set a timelock delay for foobar let management_msg = ExecuteMsg::SetTimelockDelay { - signer: "foobar".to_string(), + signer: MockApi::default().addr_make("foobar").to_string(), hours: 1, }; let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); // non gov cant invoke as insufficient permissions assert!(app - .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) .is_err()); // gov addr can invoke - app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) .unwrap(); // message submitter by foobar should not be queued let management_msg = ExecuteMsg::GrantRole { - signer: "foobarbaz".to_string(), + signer: MockApi::default().addr_make("foobarbaz").to_string(), roles: vec![Roles::GrantRole], }; let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + app.execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) .unwrap(); let response = app .wrap() @@ -796,7 +796,7 @@ fn test_execute_remove_message() { message_id: response[0].clone(), }; let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) .unwrap(); // no messges should be present @@ -828,42 +828,42 @@ fn test_execute_process_messages() { // allocate GrantRole and RevokeRole to `foobar` let management_msg = ExecuteMsg::GrantRole { - signer: "foobar".to_string(), + signer: MockApi::default().addr_make("foobar").to_string(), roles: vec![Roles::GrantRole, Roles::RevokeRole], }; let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); // non gov cant invoke assert!(app - .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) .is_err()); // gov addr can invoke - app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) .unwrap(); // set a timelock delay for foobar let management_msg = ExecuteMsg::SetTimelockDelay { - signer: "foobar".to_string(), + signer: MockApi::default().addr_make("foobar").to_string(), hours: 1, }; let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); // non gov cant invoke as insufficient permissions assert!(app - .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) .is_err()); // gov addr can invoke - app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg.clone()) + app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) .unwrap(); // message submitted by foobar should be queued // allocate GrantRole to foobarbaz let management_msg = ExecuteMsg::GrantRole { - signer: "foobarbaz".to_string(), + signer: MockApi::default().addr_make("foobarbaz").to_string(), roles: vec![Roles::GrantRole], }; let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + app.execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) .unwrap(); let response = app .wrap() @@ -925,7 +925,7 @@ fn test_execute_process_messages() { .query_wasm_smart::>( cw_rate_limit_contract.addr(), &QueryMsg::GetRoles { - owner: "foobarbaz".to_string(), + owner: MockApi::default().addr_make("foobarbaz").to_string(), }, ) .unwrap(); @@ -938,11 +938,11 @@ fn test_execute_process_messages() { }); let management_msg = ExecuteMsg::RevokeRole { - signer: "foobarbaz".to_string(), + signer: MockApi::default().addr_make("foobarbaz").to_string(), roles: vec![Roles::GrantRole], }; let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + app.execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) .unwrap(); let message_ids = app @@ -960,7 +960,7 @@ fn test_execute_process_messages() { message_ids: None, }; let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + app.execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) .unwrap(); // insufficient time has passed so queue length is still 1 @@ -969,7 +969,7 @@ fn test_execute_process_messages() { .query_wasm_smart::>( cw_rate_limit_contract.addr(), &QueryMsg::GetRoles { - owner: "foobarbaz".to_string(), + owner: MockApi::default().addr_make("foobarbaz").to_string(), }, ) .unwrap(); @@ -986,7 +986,7 @@ fn test_execute_process_messages() { message_ids: Some(message_ids.clone()), }; let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + app.execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) .unwrap(); // sufficient time has passed, empty queue @@ -1002,7 +1002,7 @@ fn test_execute_process_messages() { .query_wasm_smart::>( cw_rate_limit_contract.addr(), &QueryMsg::GetRoles { - owner: "foobarbaz".to_string() + owner: MockApi::default().addr_make("foobarbaz").to_string() } ) .is_err()); @@ -1014,6 +1014,6 @@ fn test_execute_process_messages() { }; let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); assert!(app - .execute(Addr::unchecked("foobar"), cosmos_msg.clone()) + .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) .is_err()); } diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/message_queue.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/message_queue.rs index 998ea75da..93619a418 100644 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/message_queue.rs +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/message_queue.rs @@ -147,7 +147,7 @@ fn try_process_message( mod tests { use cosmwasm_std::{ from_binary, - testing::{mock_dependencies, mock_env}, + testing::{mock_dependencies, mock_env, MockApi}, Addr, Timestamp, TransactionInfo, }; @@ -160,16 +160,16 @@ mod tests { let mut deps = mock_dependencies(); let mut deps = deps.as_mut(); let foobar_info = MessageInfo { - sender: Addr::unchecked("foobar"), + sender: MockApi::default().addr_make("foobar"), funds: vec![], }; let foobarbaz_info = MessageInfo { - sender: Addr::unchecked("foobarbaz"), + sender: MockApi::default().addr_make("foobarbaz"), funds: vec![], }; TIMELOCK_DELAY - .save(deps.storage, "foobar".to_string(), &1) + .save(deps.storage, MockApi::default().addr_make("foobar").to_string(), &1) .unwrap(); assert!(must_queue_message(&mut deps, &foobar_info)); @@ -183,11 +183,11 @@ mod tests { let mut deps = deps.as_mut(); let foobar_info = MessageInfo { - sender: Addr::unchecked("foobar"), + sender: MockApi::default().addr_make("foobar"), funds: vec![], }; let foobarbaz_info = MessageInfo { - sender: Addr::unchecked("foobarbaz"), + sender: MockApi::default().addr_make("foobarbaz"), funds: vec![], }; let foobar_test_msg = ExecuteMsg::AddPath { @@ -203,8 +203,8 @@ mod tests { signer: "gov".to_string(), hours: 5, }; - set_timelock_delay(&mut deps, "foobar".to_string(), 10).unwrap(); - set_timelock_delay(&mut deps, "foobarbaz".to_string(), 1).unwrap(); + set_timelock_delay(&mut deps, MockApi::default().addr_make("foobar").to_string(), 10).unwrap(); + set_timelock_delay(&mut deps, MockApi::default().addr_make("foobarbaz").to_string(), 1).unwrap(); let foobar_message_id = { let mut env = env.clone(); env.transaction = Some(TransactionInfo { index: 1 }); @@ -320,7 +320,7 @@ mod tests { // signer should have a timelock delay of 1 hour assert_eq!( TIMELOCK_DELAY - .load(deps.storage, "signer".to_string()) + .load(deps.storage, MockApi::default().addr_make("signer").to_string()) .unwrap(), 1 ); @@ -336,7 +336,7 @@ mod tests { //signer should have a timelock delay of 3 hours assert_eq!( TIMELOCK_DELAY - .load(deps.storage, "signer".to_string()) + .load(deps.storage, MockApi::default().addr_make("signer").to_string()) .unwrap(), 3 ); @@ -352,7 +352,7 @@ mod tests { // signer should have a delay of 10 hours assert_eq!( TIMELOCK_DELAY - .load(deps.storage, "signer".to_string()) + .load(deps.storage, MockApi::default().addr_make("signer").to_string()) .unwrap(), 10 ); @@ -372,7 +372,7 @@ mod tests { // signer should have a delay of 1 hours assert_eq!( TIMELOCK_DELAY - .load(deps.storage, "signer".to_string()) + .load(deps.storage, MockApi::default().addr_make("signer").to_string()) .unwrap(), 1 ); @@ -399,7 +399,7 @@ mod tests { deps.storage, &QueuedMessage { message: ExecuteMsg::SetTimelockDelay { - signer: "signer".to_string(), + signer: MockApi::default().addr_make("signer").to_string(), hours: i as u64 + 1, }, submitted_at: ts(i as u64), diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/rbac.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/rbac.rs index b85675b4d..ce571f6ac 100644 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/rbac.rs +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/rbac.rs @@ -90,7 +90,7 @@ mod test { use std::collections::BTreeSet; use crate::{msg::QuotaMsg, state::rbac::Roles}; - use cosmwasm_std::{testing::mock_dependencies, Addr}; + use cosmwasm_std::{testing::{mock_dependencies, MockApi}, Addr}; use itertools::Itertools; use super::*; @@ -98,12 +98,12 @@ mod test { fn test_set_timelock_delay() { let mut deps = mock_dependencies(); assert!(TIMELOCK_DELAY - .load(&deps.storage, "foobar".to_string()) + .load(&deps.storage, MockApi::default().addr_make("foobar").to_string()) .is_err()); - set_timelock_delay(&mut deps.as_mut(), "foobar".to_string(), 6).unwrap(); + set_timelock_delay(&mut deps.as_mut(), MockApi::default().addr_make("foobar").to_string(), 6).unwrap(); assert_eq!( TIMELOCK_DELAY - .load(&deps.storage, "foobar".to_string()) + .load(&deps.storage, MockApi::default().addr_make("foobar").to_string()) .unwrap(), 6 ); @@ -383,7 +383,7 @@ mod test { // no roles, should fail assert!(RBAC_PERMISSIONS - .load(deps.storage, "signer".to_string()) + .load(deps.storage, MockApi::default().addr_make("signer").to_string()) .is_err()); let mut granted_roles = BTreeSet::new(); @@ -391,13 +391,13 @@ mod test { for roles in &all_roles { let roles = roles.collect::>(); - grant_role(&mut deps, "signer".to_string(), roles.clone()).unwrap(); + grant_role(&mut deps, MockApi::default().addr_make("signer").to_string(), roles.clone()).unwrap(); roles.iter().for_each(|role| { granted_roles.insert(*role); }); let assigned_roles = RBAC_PERMISSIONS - .load(deps.storage, "signer".to_string()) + .load(deps.storage, MockApi::default().addr_make("signer").to_string()) .unwrap(); assert_eq!(granted_roles, assigned_roles); @@ -412,14 +412,14 @@ mod test { let all_roles = Roles::all_roles(); // no roles, should fail assert!(RBAC_PERMISSIONS - .load(deps.storage, "signer".to_string()) + .load(deps.storage, MockApi::default().addr_make("signer").to_string()) .is_err()); // grant all roles RBAC_PERMISSIONS .save( deps.storage, - "signer".to_string(), + MockApi::default().addr_make("signer").to_string(), &all_roles.iter().copied().collect::>(), ) .unwrap(); @@ -429,7 +429,7 @@ mod test { for roles in &all_roles.iter().chunks(2) { let roles = roles.copied().collect::>(); - revoke_role(&mut deps, "signer".to_string(), roles.clone()).unwrap(); + revoke_role(&mut deps, MockApi::default().addr_make("signer").to_string(), roles.clone()).unwrap(); roles.iter().for_each(|role| { granted_roles.remove(role); @@ -438,11 +438,11 @@ mod test { if granted_roles.is_empty() { // no roles, should fail assert!(RBAC_PERMISSIONS - .load(deps.storage, "signer".to_string()) + .load(deps.storage, MockApi::default().addr_make("signer").to_string()) .is_err()); } else { let assigned_roles = RBAC_PERMISSIONS - .load(deps.storage, "signer".to_string()) + .load(deps.storage, MockApi::default().addr_make("signer").to_string()) .unwrap(); assert_eq!(assigned_roles, granted_roles); From aee1ddeb179d15dcc4b0543970b9614f3186ce67 Mon Sep 17 00:00:00 2001 From: bonedaddy Date: Fri, 6 Sep 2024 22:15:05 -0700 Subject: [PATCH 047/127] rate-limit: update cargo.lock --- x/ibc-rate-limit/Cargo.lock | 371 ++++++++++++------------------------ 1 file changed, 127 insertions(+), 244 deletions(-) diff --git a/x/ibc-rate-limit/Cargo.lock b/x/ibc-rate-limit/Cargo.lock index 7b774f5b3..45587b50e 100644 --- a/x/ibc-rate-limit/Cargo.lock +++ b/x/ibc-rate-limit/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "ahash" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ "getrandom", "once_cell", @@ -95,7 +95,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" dependencies = [ "quote", - "syn 1.0.103", + "syn 1.0.109", ] [[package]] @@ -108,7 +108,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 1.0.103", + "syn 1.0.109", ] [[package]] @@ -144,7 +144,7 @@ checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" dependencies = [ "proc-macro2", "quote", - "syn 1.0.103", + "syn 1.0.109", ] [[package]] @@ -160,15 +160,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "base16ct" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "base16ct" @@ -178,9 +172,9 @@ checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] name = "base64" -version = "0.13.1" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64" @@ -190,9 +184,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.5.3" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "bech32" @@ -217,13 +211,19 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] +[[package]] +name = "bnum" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56953345e39537a3e18bdaeba4cb0c58a78c1f61f361dc0fa7c5c7340ae87c5f" + [[package]] name = "bnum" version = "0.11.0" @@ -232,15 +232,15 @@ checksum = "3e31ea183f6ee62ac8b8a8cf7feddd766317adfb13ff469de57ce033efd6a790" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.2.1" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" dependencies = [ "serde", ] @@ -253,11 +253,10 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.23" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ - "num-integer", "num-traits", ] @@ -286,13 +285,13 @@ checksum = "d905990ef3afb5753bb709dc7de88e9e370aa32bcc2f31731d4b533b63e82490" [[package]] name = "cosmwasm-crypto" -version = "1.1.5" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28376836c7677e1ea6d6656a754582e88b91e544ce22fae42956d5fe5549a958" +checksum = "0f862b355f7e47711e0acfe6af92cb3fd8fd5936b66a9eaa338b51edabd1e77d" dependencies = [ "digest 0.10.7", "ed25519-zebra 3.1.0", - "k256 0.11.6", + "k256", "rand_core 0.6.4", "thiserror", ] @@ -309,9 +308,9 @@ dependencies = [ "ark-serialize", "cosmwasm-core", "digest 0.10.7", - "ecdsa 0.16.9", + "ecdsa", "ed25519-zebra 4.0.3", - "k256 0.13.3", + "k256", "num-traits", "p256", "rand_core 0.6.4", @@ -322,11 +321,11 @@ dependencies = [ [[package]] name = "cosmwasm-derive" -version = "1.1.5" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eb69f4f7a8a4bce68c8fbd3646238fede1e77056e4ea31c5b6bfc37b709eec3" +checksum = "cd85de6467cd1073688c86b39833679ae6db18cf4771471edd9809f15f1679f1" dependencies = [ - "syn 1.0.103", + "syn 1.0.109", ] [[package]] @@ -366,21 +365,24 @@ dependencies = [ [[package]] name = "cosmwasm-std" -version = "1.1.5" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46bf9157d060abbc55152aeadcace799d03dc630575daa66604079a1206cb060" +checksum = "2685c2182624b2e9e17f7596192de49a3f86b7a0c9a5f6b25c1df5e24592e836" dependencies = [ - "base64 0.13.1", - "cosmwasm-crypto 1.1.5", - "cosmwasm-derive 1.1.5", + "base64 0.21.7", + "bech32 0.9.1", + "bnum 0.10.0", + "cosmwasm-crypto 1.5.7", + "cosmwasm-derive 1.5.7", "derivative", "forward_ref", "hex", "schemars", "serde", - "serde-json-wasm 0.4.1", + "serde-json-wasm 0.5.2", + "sha2 0.10.8", + "static_assertions", "thiserror", - "uint", ] [[package]] @@ -391,7 +393,7 @@ checksum = "51dec99a2e478715c0a4277f0dbeadbb8466500eb7dec873d0924edd086e77f1" dependencies = [ "base64 0.22.1", "bech32 0.11.0", - "bnum", + "bnum 0.11.0", "cosmwasm-core", "cosmwasm-crypto 2.1.3", "cosmwasm-derive 2.1.3", @@ -408,11 +410,11 @@ dependencies = [ [[package]] name = "cosmwasm-storage" -version = "1.1.5" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b61fcfef87d15af0263e2e4d792af80355929674a3b4e29ffb3c898ec6e25852" +checksum = "66de2ab9db04757bcedef2b5984fbe536903ada4a8a9766717a4a71197ef34f6" dependencies = [ - "cosmwasm-std 1.1.5", + "cosmwasm-std 1.5.7", "serde", ] @@ -450,24 +452,6 @@ version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "crypto-bigint" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" -dependencies = [ - "generic-array", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - [[package]] name = "crypto-bigint" version = "0.5.5" @@ -589,16 +573,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "der" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dd2ae565c0a381dde7fade45fce95984c568bdcb4700a4fdbe3175e0380b2f" -dependencies = [ - "const-oid", - "zeroize", -] - [[package]] name = "der" version = "0.7.9" @@ -626,7 +600,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn 1.0.103", + "syn 1.0.109", ] [[package]] @@ -665,7 +639,7 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.3", + "block-buffer 0.10.4", "const-oid", "crypto-common", "subtle", @@ -673,21 +647,9 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f94fa09c2aeea5b8839e414b7b841bf429fd25b9c522116ac97ee87856d88b2" - -[[package]] -name = "ecdsa" -version = "0.14.8" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" -dependencies = [ - "der 0.6.0", - "elliptic-curve 0.12.3", - "rfc6979 0.3.1", - "signature 1.6.4", -] +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] name = "ecdsa" @@ -695,11 +657,12 @@ version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ - "der 0.7.9", + "der", "digest 0.10.7", - "elliptic-curve 0.13.8", - "rfc6979 0.4.0", - "signature 2.2.0", + "elliptic-curve", + "rfc6979", + "signature", + "spki", ] [[package]] @@ -708,7 +671,7 @@ version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ - "signature 2.2.0", + "signature", ] [[package]] @@ -743,29 +706,9 @@ dependencies = [ [[package]] name = "either" -version = "1.8.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" - -[[package]] -name = "elliptic-curve" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" -dependencies = [ - "base16ct 0.1.1", - "crypto-bigint 0.4.9", - "der 0.6.0", - "digest 0.10.7", - "ff 0.12.1", - "generic-array", - "group 0.12.1", - "pkcs8", - "rand_core 0.6.4", - "sec1 0.3.0", - "subtle", - "zeroize", -] +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "elliptic-curve" @@ -773,28 +716,19 @@ version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ - "base16ct 0.2.0", - "crypto-bigint 0.5.5", + "base16ct", + "crypto-bigint", "digest 0.10.7", - "ff 0.13.0", + "ff", "generic-array", - "group 0.13.0", + "group", + "pkcs8", "rand_core 0.6.4", - "sec1 0.7.1", + "sec1", "subtle", "zeroize", ] -[[package]] -name = "ff" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "ff" version = "0.13.0" @@ -828,9 +762,9 @@ checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e" [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -839,33 +773,22 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", "wasi", ] -[[package]] -name = "group" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" -dependencies = [ - "ff 0.12.1", - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "group" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ - "ff 0.13.0", + "ff", "rand_core 0.6.4", "subtle", ] @@ -876,7 +799,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash 0.7.6", + "ahash 0.7.8", ] [[package]] @@ -930,30 +853,27 @@ dependencies = [ [[package]] name = "itertools" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ "either", ] [[package]] -name = "itoa" -version = "1.0.4" +name = "itertools" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] [[package]] -name = "k256" -version = "0.11.6" +name = "itoa" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" -dependencies = [ - "cfg-if", - "ecdsa 0.14.8", - "elliptic-curve 0.12.3", - "sha2 0.10.8", -] +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "k256" @@ -962,9 +882,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" dependencies = [ "cfg-if", - "ecdsa 0.16.9", - "elliptic-curve 0.13.8", + "ecdsa", + "elliptic-curve", + "once_cell", "sha2 0.10.8", + "signature", ] [[package]] @@ -973,6 +895,12 @@ version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + [[package]] name = "neutron-std" version = "4.2.2-rc" @@ -1008,7 +936,7 @@ dependencies = [ "proc-macro2", "prost-types", "quote", - "syn 1.0.103", + "syn 1.0.109", ] [[package]] @@ -1035,7 +963,7 @@ checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ "proc-macro2", "quote", - "syn 1.0.103", + "syn 1.0.109", ] [[package]] @@ -1064,9 +992,9 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "opaque-debug" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "p256" @@ -1074,8 +1002,8 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" dependencies = [ - "ecdsa 0.16.9", - "elliptic-curve 0.13.8", + "ecdsa", + "elliptic-curve", "primeorder", "sha2 0.10.8", ] @@ -1088,11 +1016,11 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pkcs8" -version = "0.9.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der 0.6.0", + "der", "spki", ] @@ -1117,7 +1045,7 @@ version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" dependencies = [ - "elliptic-curve 0.13.8", + "elliptic-curve", ] [[package]] @@ -1156,7 +1084,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools 0.10.5", + "itertools 0.12.1", "proc-macro2", "quote", "syn 2.0.77", @@ -1289,17 +1217,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "rfc6979" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" -dependencies = [ - "crypto-bigint 0.4.9", - "hmac", - "zeroize", -] - [[package]] name = "rfc6979" version = "0.4.0" @@ -1327,9 +1244,9 @@ checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "ryu" -version = "1.0.11" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "schemars" @@ -1357,31 +1274,18 @@ dependencies = [ [[package]] name = "sec1" -version = "0.3.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ - "base16ct 0.1.1", - "der 0.6.0", + "base16ct", + "der", "generic-array", "pkcs8", "subtle", "zeroize", ] -[[package]] -name = "sec1" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e" -dependencies = [ - "base16ct 0.2.0", - "der 0.7.9", - "generic-array", - "subtle", - "zeroize", -] - [[package]] name = "semver" version = "1.0.23" @@ -1408,9 +1312,9 @@ dependencies = [ [[package]] name = "serde-json-wasm" -version = "0.4.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479b4dbc401ca13ee8ce902851b834893251404c4f3c65370a49e047a6be09a5" +checksum = "9e9213a07d53faa0b8dd81e767a54a8188a242fdb9be99ab75ec576a774bfdd7" dependencies = [ "serde", ] @@ -1457,11 +1361,12 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.87" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -1490,16 +1395,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "signature" -version = "1.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" -dependencies = [ - "digest 0.10.7", - "rand_core 0.6.4", -] - [[package]] name = "signature" version = "2.2.0" @@ -1522,12 +1417,12 @@ dependencies = [ [[package]] name = "spki" -version = "0.6.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", - "der 0.6.0", + "der", ] [[package]] @@ -1560,9 +1455,9 @@ dependencies = [ [[package]] name = "subtle" -version = "2.4.1" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "subtle-encoding" @@ -1575,9 +1470,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.103" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -1664,27 +1559,15 @@ dependencies = [ [[package]] name = "typenum" -version = "1.15.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" - -[[package]] -name = "uint" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a45526d29728d135c2900b0d30573fe3ee79fceb12ef534c7bb30e810a91b601" -dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", -] +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-ident" -version = "1.0.5" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-xid" @@ -1694,9 +1577,9 @@ checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wasi" From b03a01ffe0a6b3788ebeb9dbc2bb98e41d6f83ea Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Mon, 9 Sep 2024 08:03:34 -0300 Subject: [PATCH 048/127] wip debug --- x/transfer/ibc_handlers.go | 1 + 1 file changed, 1 insertion(+) diff --git a/x/transfer/ibc_handlers.go b/x/transfer/ibc_handlers.go index b4013492c..5a7cb6b50 100644 --- a/x/transfer/ibc_handlers.go +++ b/x/transfer/ibc_handlers.go @@ -29,6 +29,7 @@ func (im IBCModule) HandleAcknowledgement(ctx sdk.Context, packet channeltypes.P return errors.Wrapf(sdkerrors.ErrInvalidAddress, "failed to decode address from bech32: %v", err) } if !im.sudoKeeper.HasContractInfo(ctx, senderAddress) { + ctx.Logger().Info("NOCONTRACT!!!! ") return nil } From 8d114582d78d2806a825e8f242a9409864720f03 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Mon, 9 Sep 2024 08:50:57 -0300 Subject: [PATCH 049/127] tidy --- go.mod | 1 - 1 file changed, 1 deletion(-) diff --git a/go.mod b/go.mod index 45e02d20c..4d8def83b 100644 --- a/go.mod +++ b/go.mod @@ -229,4 +229,3 @@ replace ( github.com/prometheus/procfs => github.com/prometheus/procfs v0.12.0 github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 ) - From 9ca43ad6e39f3f215a9a42edb0370c177a31fa81 Mon Sep 17 00:00:00 2001 From: bonedaddy Date: Mon, 9 Sep 2024 10:49:05 -0700 Subject: [PATCH 050/127] ranme .cargo/config to .cargo/config.toml --- .../contracts/rate-limiter/.cargo/{config => config.toml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename x/ibc-rate-limit/contracts/rate-limiter/.cargo/{config => config.toml} (100%) diff --git a/x/ibc-rate-limit/contracts/rate-limiter/.cargo/config b/x/ibc-rate-limit/contracts/rate-limiter/.cargo/config.toml similarity index 100% rename from x/ibc-rate-limit/contracts/rate-limiter/.cargo/config rename to x/ibc-rate-limit/contracts/rate-limiter/.cargo/config.toml From 8c2006472053c31f264eb2fa81e80306c03d639c Mon Sep 17 00:00:00 2001 From: bonedaddy Date: Mon, 9 Sep 2024 10:49:49 -0700 Subject: [PATCH 051/127] replace osmosis addresses in tests with neutron addresses --- x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs | 4 ++-- x/ibc-rate-limit/contracts/rate-limiter/src/execute.rs | 4 ++-- .../contracts/rate-limiter/src/integration_tests.rs | 4 ++-- x/ibc-rate-limit/contracts/rate-limiter/src/state/storage.rs | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs index f3da2d007..cf1c795b1 100644 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs @@ -11,8 +11,8 @@ use crate::msg::{InstantiateMsg, MigrateMsg, PathMsg, QueryMsg, QuotaMsg, SudoMs use crate::state::flow::tests::RESET_TIME_WEEKLY; use crate::state::rate_limit::RateLimit; use crate::state::storage::{GOVMODULE, IBCMODULE, RATE_LIMIT_TRACKERS, RBAC_PERMISSIONS}; -const IBC_ADDR: &str = "osmo1vz5e6tzdjlzy2f7pjvx0ecv96h8r4m2y92thdm"; -const GOV_ADDR: &str = "osmo1tzz5zf2u68t00un2j4lrrnkt2ztd46kfzfp58r"; +const IBC_ADDR: &str = "neutron1cdlz8scnf3mmxdnf4njmtp7vz4gps7fswphrqn"; +const GOV_ADDR: &str = "neutron1w02khza7ux68ccwmz2hln97mkjspjxes8y2k9v"; #[test] // Tests we ccan instantiate the contract and that the owners are set correctly fn proper_instantiation() { diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/execute.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/execute.rs index 7d9bb14fd..a39c5faac 100644 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/execute.rs +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/execute.rs @@ -156,8 +156,8 @@ mod tests { }; use crate::ContractError; - const IBC_ADDR: &str = "osmo1vz5e6tzdjlzy2f7pjvx0ecv96h8r4m2y92thdm"; - const GOV_ADDR: &str = "osmo1tzz5zf2u68t00un2j4lrrnkt2ztd46kfzfp58r"; + const IBC_ADDR: &str = "neutron1cdlz8scnf3mmxdnf4njmtp7vz4gps7fswphrqn"; + const GOV_ADDR: &str = "neutron1w02khza7ux68ccwmz2hln97mkjspjxes8y2k9v"; #[test] // Tests AddPath and RemovePath messages fn management_add_and_remove_path() { diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/integration_tests.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/integration_tests.rs index 508dc66b0..c86b19972 100644 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/integration_tests.rs +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/integration_tests.rs @@ -25,8 +25,8 @@ pub fn contract_template() -> Box> { } const USER: &str = "USER"; -const IBC_ADDR: &str = "osmo1vz5e6tzdjlzy2f7pjvx0ecv96h8r4m2y92thdm"; -const GOV_ADDR: &str = "osmo1tzz5zf2u68t00un2j4lrrnkt2ztd46kfzfp58r"; +const IBC_ADDR: &str = "neutron1cdlz8scnf3mmxdnf4njmtp7vz4gps7fswphrqn"; +const GOV_ADDR: &str = "neutron1w02khza7ux68ccwmz2hln97mkjspjxes8y2k9v"; const NATIVE_DENOM: &str = "nosmo"; fn mock_app() -> App { diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/state/storage.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/state/storage.rs index 6e230d3a9..e8cb0a7af 100644 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/state/storage.rs +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/state/storage.rs @@ -26,7 +26,7 @@ pub const IBCMODULE: Item = Item::new("ibc_module"); /// allowing to flow through that channel in a specific duration (quota) /// /// For simplicity, the channel in the map keys refers to the "host" channel on -/// the osmosis side. This means that on PacketSend it will refer to the source +/// the neutron side. This means that on PacketSend it will refer to the source /// channel while on PacketRecv it refers to the destination channel. /// /// It is the responsibility of the go module to pass the appropriate channel From 676c58eb5cb899273779cc40dc418332a746eab6 Mon Sep 17 00:00:00 2001 From: bonedaddy Date: Mon, 9 Sep 2024 10:50:09 -0700 Subject: [PATCH 052/127] update comments to reference neutron instead of osmosis where applicable --- x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs | 1 - x/ibc-rate-limit/contracts/rate-limiter/src/state/flow.rs | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs index 16196fbfe..ef81121a5 100644 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs @@ -36,7 +36,6 @@ pub struct Packet { } // SupplyOf query message definition. -// osmosis-std doesn't currently support the SupplyOf query, so I'm defining it localy so it can be used to obtain the channel value #[derive( Clone, PartialEq, diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/state/flow.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/state/flow.rs index db55515f3..a230ae2ca 100644 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/state/flow.rs +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/state/flow.rs @@ -13,8 +13,8 @@ pub enum FlowType { /// A Flow represents the transfer of value for a denom through an IBC channel /// during a time window. /// -/// It tracks inflows (transfers into osmosis) and outflows (transfers out of -/// osmosis). +/// It tracks inflows (transfers into neturon) and outflows (transfers out of +/// neturon). /// /// The period_end represents the last point in time for which this Flow is /// tracking the value transfer. From 124320a772882862c26def8f066d25c90ad671f5 Mon Sep 17 00:00:00 2001 From: bonedaddy Date: Mon, 9 Sep 2024 10:50:22 -0700 Subject: [PATCH 053/127] remove feature activation deprecated in cosmwasm-std 2 --- x/ibc-rate-limit/contracts/rate-limiter/Cargo.toml | 3 --- 1 file changed, 3 deletions(-) diff --git a/x/ibc-rate-limit/contracts/rate-limiter/Cargo.toml b/x/ibc-rate-limit/contracts/rate-limiter/Cargo.toml index b020ff9f9..8a40ba6c6 100644 --- a/x/ibc-rate-limit/contracts/rate-limiter/Cargo.toml +++ b/x/ibc-rate-limit/contracts/rate-limiter/Cargo.toml @@ -16,9 +16,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -#backtraces = ["cosmwasm-std/backtraces"] -# use library feature to disable all instantiate/execute/query exports library = [] # Use the verbose responses feature if you want to include information about # the remaining quotas in the SendPacket/RecvPacket responses From e12fa86fe1ede436768a0f1741cac0db18ed3849 Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Mon, 9 Sep 2024 15:11:12 -0400 Subject: [PATCH 054/127] add back simulations to allow list --- wasmbinding/stargate_allowlist.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/wasmbinding/stargate_allowlist.go b/wasmbinding/stargate_allowlist.go index 13d8ab761..1fa16677c 100644 --- a/wasmbinding/stargate_allowlist.go +++ b/wasmbinding/stargate_allowlist.go @@ -90,6 +90,12 @@ func AcceptedStargateQueries() wasmkeeper.AcceptedQueries { "/neutron.dex.Query/PoolByID": &dextypes.QueryPoolResponse{}, "/neutron.dex.Query/PoolMetadata": &dextypes.QueryGetPoolMetadataResponse{}, "/neutron.dex.Query/PoolMetadataAll": &dextypes.QueryAllPoolMetadataResponse{}, + "/neutron.dex.Query/SimulateDeposit": &dextypes.QuerySimulateDepositResponse{}, + "/neutron.dex.Query/SimulateWithdrawal": &dextypes.QuerySimulateWithdrawalResponse{}, + "/neutron.dex.Query/SimulatePlaceLimitOrder": &dextypes.QuerySimulatePlaceLimitOrderResponse{}, + "/neutron.dex.Query/SimulateWithdrawFilledLimitOrder": &dextypes.QuerySimulateWithdrawFilledLimitOrderResponse{}, + "/neutron.dex.Query/SimulateCancelLimitOrder": &dextypes.QuerySimulateCancelLimitOrderResponse{}, + "/neutron.dex.Query/SimulateMultiHopSwap": &dextypes.QuerySimulateMultiHopSwapResponse{}, // oracle "/slinky.oracle.v1.Query/GetAllCurrencyPairs": &oracletypes.GetAllCurrencyPairsResponse{}, From fd1348646b4e56c7144fb3c3e5c3b86a6c705d74 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 10 Sep 2024 09:39:24 -0300 Subject: [PATCH 055/127] rm debug logs --- x/transfer/ibc_handlers.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/x/transfer/ibc_handlers.go b/x/transfer/ibc_handlers.go index 5a7cb6b50..feeddbcbe 100644 --- a/x/transfer/ibc_handlers.go +++ b/x/transfer/ibc_handlers.go @@ -18,10 +18,9 @@ func (im IBCModule) HandleAcknowledgement(ctx sdk.Context, packet channeltypes.P if err := channeltypes.SubModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { return errors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet acknowledgement: %v", err) } - ctx.Logger().Info("ACKNOWLGEGMENT123 ") var data transfertypes.FungibleTokenPacketData if err := types.ModuleCdc.UnmarshalJSON(packet.GetData(), &data); err != nil { - return errors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot g ICS-20 transfer packet data: %s", err.Error()) + return errors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet data: %s", err.Error()) } senderAddress, err := sdk.AccAddressFromBech32(data.GetSender()) @@ -29,12 +28,10 @@ func (im IBCModule) HandleAcknowledgement(ctx sdk.Context, packet channeltypes.P return errors.Wrapf(sdkerrors.ErrInvalidAddress, "failed to decode address from bech32: %v", err) } if !im.sudoKeeper.HasContractInfo(ctx, senderAddress) { - ctx.Logger().Info("NOCONTRACT!!!! ") return nil } im.wrappedKeeper.FeeKeeper.DistributeAcknowledgementFee(ctx, relayer, feetypes.NewPacketID(packet.SourcePort, packet.SourceChannel, packet.Sequence)) - ctx.Logger().Info("FEEEEEEEEES ") msg, err := keeper.PrepareSudoCallbackMessage(packet, &ack) if err != nil { return errors.Wrapf(sdkerrors.ErrJSONMarshal, "failed to marshal Packet/Acknowledgment: %v", err) From d0a672ae8f91db4bf1dc39f69e6a48edc3fea677 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 10 Sep 2024 10:14:20 -0300 Subject: [PATCH 056/127] partial lint --- testutil/test_helpers.go | 15 ++++---- x/ibc-rate-limit/client/cli/query.go | 12 +++---- x/ibc-rate-limit/client/query_proto_wrap.go | 2 +- x/ibc-rate-limit/genesis.go | 2 +- x/ibc-rate-limit/genesis_test.go | 2 +- x/ibc-rate-limit/ibc_middleware_test.go | 34 ++++++++----------- x/ibc-rate-limit/ibc_module.go | 2 +- x/ibc-rate-limit/ibcratelimitmodule/module.go | 8 ++--- x/ibc-rate-limit/ics4_wrapper.go | 2 +- x/ibc-rate-limit/rate_limit.go | 6 ++-- 10 files changed, 39 insertions(+), 46 deletions(-) diff --git a/testutil/test_helpers.go b/testutil/test_helpers.go index 62b133924..ff9b2eaaf 100644 --- a/testutil/test_helpers.go +++ b/testutil/test_helpers.go @@ -10,15 +10,12 @@ import ( "testing" "time" - wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" abci "github.com/cometbft/cometbft/abci/types" - abcit "github.com/cometbft/cometbft/abci/types" tmrand "github.com/cometbft/cometbft/libs/rand" cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" icacontrollerkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/keeper" icacontrollertypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types" "github.com/stretchr/testify/require" @@ -577,7 +574,7 @@ func SetupTransferPath(path *ibctesting.Path) error { } // SendMsgsNoCheck is an alternative to ibctesting.TestChain.SendMsgs so that it doesn't check for errors. That should be handled by the caller -func (suite *IBCConnectionTestSuite) SendMsgsNoCheck(chain *ibctesting.TestChain, msgs ...sdk.Msg) (*abcit.ExecTxResult, error) { +func (suite *IBCConnectionTestSuite) SendMsgsNoCheck(chain *ibctesting.TestChain, msgs ...sdk.Msg) (*cometbfttypes.ExecTxResult, error) { // ensure the suite has the latest time suite.Coordinator.UpdateTimeForChain(chain) @@ -622,14 +619,14 @@ func SignAndDeliver( blockTime time.Time, nextValHash []byte, priv ...cryptotypes.PrivKey, -) (res *abcit.ResponseFinalizeBlock, err error) { +) (res *cometbfttypes.ResponseFinalizeBlock, err error) { tb.Helper() - tx, err := simtestutil.GenSignedMockTx( + tx, err := sims.GenSignedMockTx( rand.New(rand.NewSource(time.Now().UnixNano())), txCfg, msgs, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)}, - simtestutil.DefaultGenTxGas, + sims.DefaultGenTxGas, chainID, accNums, accSeqs, @@ -645,7 +642,7 @@ func SignAndDeliver( return nil, err } - return app.FinalizeBlock(&abcit.RequestFinalizeBlock{ + return app.FinalizeBlock(&cometbfttypes.RequestFinalizeBlock{ Height: app.LastBlockHeight() + 1, Time: blockTime, NextValidatorsHash: nextValHash, @@ -656,7 +653,7 @@ func SignAndDeliver( func (suite *IBCConnectionTestSuite) ExecuteContract(contract, sender sdk.AccAddress, msg []byte, funds sdk.Coins) ([]byte, error) { app := suite.GetNeutronZoneApp(suite.ChainA) - contractKeeper := wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) + contractKeeper := keeper.NewDefaultPermissionKeeper(app.WasmKeeper) return contractKeeper.Execute(suite.ChainA.GetContext(), contract, sender, msg, funds) } diff --git a/x/ibc-rate-limit/client/cli/query.go b/x/ibc-rate-limit/client/cli/query.go index 073495ff0..ec490d6af 100644 --- a/x/ibc-rate-limit/client/cli/query.go +++ b/x/ibc-rate-limit/client/cli/query.go @@ -7,15 +7,15 @@ import ( // GetQueryCmd returns the cli query commands for this module func GetQueryCmd() *cobra.Command { // Group ibc-rate-limit queries under a subcommand - //cmd := &cobra.Command{ + // cmd := &cobra.Command{ // Use: types.ModuleName, // Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), // DisableFlagParsing: true, // SuggestionsMinimumDistance: 2, // RunE: client.ValidateCmd, - //} + // } - //cmd.AddCommand( + // cmd.AddCommand( // GetParams(), //) @@ -24,7 +24,7 @@ func GetQueryCmd() *cobra.Command { // GetParams returns the params for the module func GetParams() *cobra.Command { - //cmd := &cobra.Command{ + // cmd := &cobra.Command{ // Use: "params [flags]", // Short: "Get the params for the x/ibc-rate-limit module", // Args: cobra.ExactArgs(0), @@ -42,9 +42,9 @@ func GetParams() *cobra.Command { // // return clientCtx.PrintProto(res) // }, - //} + // } // - //flags.AddQueryFlagsToCmd(cmd) + // flags.AddQueryFlagsToCmd(cmd) return nil } diff --git a/x/ibc-rate-limit/client/query_proto_wrap.go b/x/ibc-rate-limit/client/query_proto_wrap.go index 8461ecda8..364479b2d 100644 --- a/x/ibc-rate-limit/client/query_proto_wrap.go +++ b/x/ibc-rate-limit/client/query_proto_wrap.go @@ -14,7 +14,7 @@ type Querier struct { } func (q Querier) Params(ctx sdk.Context, - req queryproto.ParamsRequest, + _ queryproto.ParamsRequest, ) (*queryproto.ParamsResponse, error) { params := q.K.GetParams(ctx) return &queryproto.ParamsResponse{Params: params}, nil diff --git a/x/ibc-rate-limit/genesis.go b/x/ibc-rate-limit/genesis.go index d3f9c875c..a22e6d0f4 100644 --- a/x/ibc-rate-limit/genesis.go +++ b/x/ibc-rate-limit/genesis.go @@ -1,4 +1,4 @@ -package ibc_rate_limit +package ibcratelimit import ( sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/ibc-rate-limit/genesis_test.go b/x/ibc-rate-limit/genesis_test.go index a18ae1d18..10759b0bd 100644 --- a/x/ibc-rate-limit/genesis_test.go +++ b/x/ibc-rate-limit/genesis_test.go @@ -1,4 +1,4 @@ -package ibc_rate_limit_test +package ibcratelimit_test import ( "testing" diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index 3c6c4391f..23cb40586 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -1,4 +1,4 @@ -package ibc_rate_limit_test +package ibcratelimit_test import ( "fmt" @@ -23,7 +23,6 @@ import ( ibctesting "github.com/cosmos/ibc-go/v8/testing" "github.com/stretchr/testify/suite" - sdktypes "github.com/cosmos/cosmos-sdk/types" "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" ) @@ -31,8 +30,6 @@ type MiddlewareTestSuite struct { testutil.IBCConnectionTestSuite } -//var oldConsensusMinFee = txfeetypes.ConsensusMinFee - // Setup func TestMiddlewareTestSuite(t *testing.T) { suite.Run(t, new(MiddlewareTestSuite)) @@ -243,10 +240,10 @@ func (suite *MiddlewareTestSuite) AssertSend(success bool, msg sdk.Msg) (*abci.E return r, err } -func (suite *MiddlewareTestSuite) BuildChannelQuota(name, channel, denom string, duration, send_percentage, recv_percentage uint32) string { +func (suite *MiddlewareTestSuite) BuildChannelQuota(name, channel, denom string, duration, sendPercentage, recvPercentage uint32) string { return fmt.Sprintf(` {"channel_id": "%s", "denom": "%s", "quotas": [{"name":"%s", "duration": %d, "send_recv":[%d, %d]}] } - `, channel, denom, name, duration, send_percentage, recv_percentage) + `, channel, denom, name, duration, sendPercentage, recvPercentage) } // Tests @@ -267,7 +264,7 @@ func (suite *MiddlewareTestSuite) TestReceiveTransferNoContract() { suite.Require().NoError(err) } -func (suite *MiddlewareTestSuite) initializeEscrow() (totalEscrow, expectedSed sdkmath.Int) { +func (suite *MiddlewareTestSuite) initializeEscrow() { app := suite.GetNeutronZoneApp(suite.ChainA) supply := app.BankKeeper.GetSupply(suite.ChainA.GetContext(), sdk.DefaultBondDenom) @@ -287,7 +284,6 @@ func (suite *MiddlewareTestSuite) initializeEscrow() (totalEscrow, expectedSed s _, _, err = suite.FullSendBToA(suite.MessageFromBToA(sdk.DefaultBondDenom, transferAmount.Sub(sendAmount))) suite.Require().NoError(err) - return transferAmount, sendAmount } func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { @@ -314,7 +310,7 @@ func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { fmt.Printf("Testing send rate limiting for denom=%s, channelValue=%s, quota=%s, sendAmount=%s\n", denom, channelValue, quota, sendAmount) // Setup contract - testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) + testOwner := sdk.MustAccAddressFromBech32(testutil.TestOwnerAddress) suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", channel, denom, 604800, 5, 5) addr := suite.InstantiateRLContract(quotas) @@ -412,7 +408,7 @@ func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { // Setup contract suite.GetNeutronZoneApp(suite.ChainA) - testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) + testOwner := sdk.MustAccAddressFromBech32(testutil.TestOwnerAddress) suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", channel, localDenom, 604800, 4, 4) addr := suite.InstantiateRLContract(quotas) @@ -452,7 +448,7 @@ func (suite *MiddlewareTestSuite) TestRecvTransferWithRateLimitingNonNative() { func (suite *MiddlewareTestSuite) TestSendTransferNoQuota() { suite.ConfigureTransferChannel() // Setup contract - testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) + testOwner := sdk.MustAccAddressFromBech32(testutil.TestOwnerAddress) suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") addr := suite.InstantiateRLContract(``) suite.RegisterRateLimitingContract(addr) @@ -468,7 +464,7 @@ func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { suite.ConfigureTransferChannel() suite.initializeEscrow() // Setup contract - testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) + testOwner := sdk.MustAccAddressFromBech32(testutil.TestOwnerAddress) suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", "channel-2", sdk.DefaultBondDenom, 604800, 1, 1) addr := suite.InstantiateRLContract(quotas) @@ -537,7 +533,7 @@ func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { func (suite *MiddlewareTestSuite) TestUnsetRateLimitingContract() { // Setup contract suite.ConfigureTransferChannel() - testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) + testOwner := sdk.MustAccAddressFromBech32(testutil.TestOwnerAddress) suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") addr := suite.InstantiateRLContract("") suite.RegisterRateLimitingContract(addr) @@ -559,7 +555,7 @@ func (suite *MiddlewareTestSuite) TestNonICS20() { suite.initializeEscrow() // Setup contract app := suite.GetNeutronZoneApp(suite.ChainA) - testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) + testOwner := sdk.MustAccAddressFromBech32(testutil.TestOwnerAddress) suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) addr := suite.InstantiateRLContract(quotas) @@ -578,7 +574,7 @@ func (suite *MiddlewareTestSuite) TestDenomRestrictionFlow() { suite.ConfigureTransferChannel() suite.ConfigureTransferChannelAC() // Setup contract - testOwner := sdktypes.MustAccAddressFromBech32(testutil.TestOwnerAddress) + testOwner := sdk.MustAccAddressFromBech32(testutil.TestOwnerAddress) suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) contractAddr := suite.InstantiateRLContract(quotas) @@ -651,7 +647,7 @@ func (suite *MiddlewareTestSuite) RegisterRateLimitingContract(addr []byte) { // AssertEventEmitted asserts that ctx's event manager has emitted the given number of events // of the given type. -func (s *MiddlewareTestSuite) AssertEventEmitted(ctx sdk.Context, eventTypeExpected string, numEventsExpected int) { +func (suite *MiddlewareTestSuite) AssertEventEmitted(ctx sdk.Context, eventTypeExpected string, numEventsExpected int) { allEvents := ctx.EventManager().Events() // filter out other events actualEvents := make([]sdk.Event, 0) @@ -660,10 +656,10 @@ func (s *MiddlewareTestSuite) AssertEventEmitted(ctx sdk.Context, eventTypeExpec actualEvents = append(actualEvents, event) } } - s.Require().Equal(numEventsExpected, len(actualEvents)) + suite.Require().Equal(numEventsExpected, len(actualEvents)) } -func (s *MiddlewareTestSuite) FindEvent(events []abci.Event, name string) abci.Event { +func (suite *MiddlewareTestSuite) FindEvent(events []abci.Event, name string) abci.Event { index := slices.IndexFunc(events, func(e abci.Event) bool { return e.Type == name }) if index == -1 { return abci.Event{} @@ -671,7 +667,7 @@ func (s *MiddlewareTestSuite) FindEvent(events []abci.Event, name string) abci.E return events[index] } -func (s *MiddlewareTestSuite) ExtractAttributes(event abci.Event) map[string]string { +func (suite *MiddlewareTestSuite) ExtractAttributes(event abci.Event) map[string]string { attrs := make(map[string]string) if event.Attributes == nil { return attrs diff --git a/x/ibc-rate-limit/ibc_module.go b/x/ibc-rate-limit/ibc_module.go index 6b101b410..55c05cfd7 100644 --- a/x/ibc-rate-limit/ibc_module.go +++ b/x/ibc-rate-limit/ibc_module.go @@ -1,4 +1,4 @@ -package ibc_rate_limit +package ibcratelimit import ( "encoding/json" diff --git a/x/ibc-rate-limit/ibcratelimitmodule/module.go b/x/ibc-rate-limit/ibcratelimitmodule/module.go index 11bdc2c24..d9099f96d 100644 --- a/x/ibc-rate-limit/ibcratelimitmodule/module.go +++ b/x/ibc-rate-limit/ibcratelimitmodule/module.go @@ -39,15 +39,15 @@ type AppModuleBasic struct{} func (AppModuleBasic) Name() string { return types.ModuleName } -func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { +func (AppModuleBasic) RegisterLegacyAminoCodec(_ *codec.LegacyAmino) { } func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { return cdc.MustMarshalJSON(types.DefaultGenesis()) } -// ValidateGenesis performs genesis state validation for the ibc-rate-limit module. -func (b AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { +// ValidateGenesis performs genesis state validation for the ibcratelimit module. +func (b AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingConfig, bz json.RawMessage) error { var genState types.GenesisState if err := cdc.UnmarshalJSON(bz, &genState); err != nil { return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) @@ -70,7 +70,7 @@ func (b AppModuleBasic) GetQueryCmd() *cobra.Command { } // RegisterInterfaces registers interfaces and implementations of the ibc-rate-limit module. -func (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) { +func (AppModuleBasic) RegisterInterfaces(_ codectypes.InterfaceRegistry) { } // ---------------------------------------------------------------------------- diff --git a/x/ibc-rate-limit/ics4_wrapper.go b/x/ibc-rate-limit/ics4_wrapper.go index f42bafb6f..a97ce509b 100644 --- a/x/ibc-rate-limit/ics4_wrapper.go +++ b/x/ibc-rate-limit/ics4_wrapper.go @@ -1,4 +1,4 @@ -package ibc_rate_limit +package ibcratelimit import ( "encoding/json" diff --git a/x/ibc-rate-limit/rate_limit.go b/x/ibc-rate-limit/rate_limit.go index 81572cf07..3f70215e4 100644 --- a/x/ibc-rate-limit/rate_limit.go +++ b/x/ibc-rate-limit/rate_limit.go @@ -1,4 +1,4 @@ -package ibc_rate_limit +package ibcratelimit import ( "encoding/json" @@ -66,12 +66,12 @@ func UndoSendRateLimit(ctx sdk.Context, contractKeeper *wasmkeeper.PermissionedK } msg := UndoSendMsg{UndoSend: UndoPacketMsg{Packet: unwrapped}} - asJson, err := json.Marshal(msg) + asJSON, err := json.Marshal(msg) if err != nil { return err } - _, err = contractKeeper.Sudo(ctx, contractAddr, asJson) + _, err = contractKeeper.Sudo(ctx, contractAddr, asJSON) if err != nil { return errorsmod.Wrap(types.ErrContractError, err.Error()) } From b24769d3a1b24505b9c33e66023a8576372463e8 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 10 Sep 2024 10:23:45 -0300 Subject: [PATCH 057/127] second iteration of lint --- testutil/test_helpers.go | 4 +-- x/ibc-rate-limit/genesis_test.go | 36 +++++++++++++------------ x/ibc-rate-limit/ibc_middleware_test.go | 19 ------------- x/ibc-rate-limit/rate_limit.go | 8 +++--- 4 files changed, 25 insertions(+), 42 deletions(-) diff --git a/testutil/test_helpers.go b/testutil/test_helpers.go index ff9b2eaaf..393c7df0e 100644 --- a/testutil/test_helpers.go +++ b/testutil/test_helpers.go @@ -10,7 +10,6 @@ import ( "testing" "time" - abci "github.com/cometbft/cometbft/abci/types" tmrand "github.com/cometbft/cometbft/libs/rand" cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" @@ -622,6 +621,7 @@ func SignAndDeliver( ) (res *cometbfttypes.ResponseFinalizeBlock, err error) { tb.Helper() tx, err := sims.GenSignedMockTx( + // #nosec G404 - math/rand is acceptable for non-cryptographic purposes rand.New(rand.NewSource(time.Now().UnixNano())), txCfg, msgs, @@ -658,7 +658,7 @@ func (suite *IBCConnectionTestSuite) ExecuteContract(contract, sender sdk.AccAdd } -func (suite *IBCConnectionTestSuite) commitBlock(res *abci.ResponseFinalizeBlock, chain *ibctesting.TestChain) { +func (suite *IBCConnectionTestSuite) commitBlock(res *cometbfttypes.ResponseFinalizeBlock, chain *ibctesting.TestChain) { _, err := chain.App.Commit() require.NoError(chain.TB, err) diff --git a/x/ibc-rate-limit/genesis_test.go b/x/ibc-rate-limit/genesis_test.go index 10759b0bd..485d97406 100644 --- a/x/ibc-rate-limit/genesis_test.go +++ b/x/ibc-rate-limit/genesis_test.go @@ -3,6 +3,8 @@ package ibcratelimit_test import ( "testing" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" "github.com/stretchr/testify/suite" "github.com/neutron-org/neutron/v4/testutil/apptesting" @@ -21,21 +23,21 @@ func (suite *GenesisTestSuite) SetupTest() { } func (suite *GenesisTestSuite) TestInitExportGenesis() { - //testAddress := sdk.AccAddress([]byte("addr1_______________")).String() - //suite.SetupTest() - //k := suite.App.RateLimitingICS4Wrapper - // - //initialGenesis := types.GenesisState{ - // Params: types.Params{ - // ContractAddress: testAddress, - // }, - //} - // - //k.InitGenesis(suite.Ctx, initialGenesis) - // - //suite.Require().Equal(testAddress, k.GetParams(suite.Ctx).ContractAddress) - // - //exportedGenesis := k.ExportGenesis(suite.Ctx) - // - //suite.Require().Equal(initialGenesis, *exportedGenesis) + testAddress := sdk.AccAddress([]byte("addr1_______________")).String() + suite.SetupTest() + k := suite.App.RateLimitingICS4Wrapper + + initialGenesis := types.GenesisState{ + Params: types.Params{ + ContractAddress: testAddress, + }, + } + + k.InitGenesis(suite.Ctx, initialGenesis) + + suite.Require().Equal(testAddress, k.GetParams(suite.Ctx).ContractAddress) + + exportedGenesis := k.ExportGenesis(suite.Ctx) + + suite.Require().Equal(initialGenesis, *exportedGenesis) } diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index 23cb40586..ff422c2f8 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -95,25 +95,6 @@ func (suite *MiddlewareTestSuite) MessageFromAToC(denom string, amount sdkmath.I func CalculateChannelValue(ctx sdk.Context, denom string, bankKeeper bankkeeper.Keeper) sdkmath.Int { return bankKeeper.GetSupply(ctx, denom).Amount - - // ToDo: The commented-out code below is what we want to happen, but we're temporarily - // using the whole supply for efficiency until there's a solution for - // https://github.com/cosmos/ibc-go/issues/2664 - - // For non-native (ibc) tokens, return the supply if the token in osmosis - //if strings.HasPrefix(denom, "ibc/") { - // return bankKeeper.GetSupplyWithOffset(ctx, denom).Amount - //} - // - // For native tokens, obtain the balance held in escrow for all potential channels - //channels := channelKeeper.GetAllChannels(ctx) - //balance := osmomath.NewInt(0) - //for _, channel := range channels { - // escrowAddress := transfertypes.GetEscrowAddress("transfer", channel.ChannelId) - // balance = balance.Add(bankKeeper.GetBalance(ctx, escrowAddress, denom).Amount) - // - //} - //return balance } func (suite *MiddlewareTestSuite) FullSendBToA(msg sdk.Msg) (*abci.ExecTxResult, string, error) { diff --git a/x/ibc-rate-limit/rate_limit.go b/x/ibc-rate-limit/rate_limit.go index 3f70215e4..52b3a4808 100644 --- a/x/ibc-rate-limit/rate_limit.go +++ b/x/ibc-rate-limit/rate_limit.go @@ -130,18 +130,18 @@ func BuildWasmExecMsg(msgType string, packet exported.PacketI) ([]byte, error) { return []byte{}, err } - var asJson []byte + var asJSON []byte switch { case msgType == msgSend: msg := SendPacketMsg{SendPacket: PacketMsg{ Packet: unwrapped, }} - asJson, err = json.Marshal(msg) + asJSON, err = json.Marshal(msg) case msgType == msgRecv: msg := RecvPacketMsg{RecvPacket: PacketMsg{ Packet: unwrapped, }} - asJson, err = json.Marshal(msg) + asJSON, err = json.Marshal(msg) default: return []byte{}, types.ErrBadMessage } @@ -150,5 +150,5 @@ func BuildWasmExecMsg(msgType string, packet exported.PacketI) ([]byte, error) { return []byte{}, err } - return asJson, nil + return asJSON, nil } From 29109e62de8088944aeac94df24565c4fdf10f43 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 10 Sep 2024 10:33:32 -0300 Subject: [PATCH 058/127] final iteration of lint: gofumpt w -extra --- app/app.go | 1 - testutil/test_helpers.go | 3 --- x/ibc-rate-limit/ibc_middleware_test.go | 2 -- x/ibc-rate-limit/rate_limit.go | 1 - 4 files changed, 7 deletions(-) diff --git a/app/app.go b/app/app.go index e3e326d2f..663976100 100644 --- a/app/app.go +++ b/app/app.go @@ -1733,5 +1733,4 @@ func (app *App) WireICS20PreWasmKeeper( // Hooks Middleware hooksTransferModule := ibchooks.NewIBCMiddleware(&rateLimitingTransferModule, &app.HooksICS4Wrapper) app.TransferStack = &hooksTransferModule - } diff --git a/testutil/test_helpers.go b/testutil/test_helpers.go index 393c7df0e..a60efd6a7 100644 --- a/testutil/test_helpers.go +++ b/testutil/test_helpers.go @@ -632,7 +632,6 @@ func SignAndDeliver( accSeqs, priv..., ) - if err != nil { return nil, err } @@ -648,14 +647,12 @@ func SignAndDeliver( NextValidatorsHash: nextValHash, Txs: [][]byte{txBytes}, }) - } func (suite *IBCConnectionTestSuite) ExecuteContract(contract, sender sdk.AccAddress, msg []byte, funds sdk.Coins) ([]byte, error) { app := suite.GetNeutronZoneApp(suite.ChainA) contractKeeper := keeper.NewDefaultPermissionKeeper(app.WasmKeeper) return contractKeeper.Execute(suite.ChainA.GetContext(), contract, sender, msg, funds) - } func (suite *IBCConnectionTestSuite) commitBlock(res *cometbfttypes.ResponseFinalizeBlock, chain *ibctesting.TestChain) { diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index ff422c2f8..ee9a27dd7 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -264,7 +264,6 @@ func (suite *MiddlewareTestSuite) initializeEscrow() { // Send from B to A _, _, err = suite.FullSendBToA(suite.MessageFromBToA(sdk.DefaultBondDenom, transferAmount.Sub(sendAmount))) suite.Require().NoError(err) - } func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { @@ -594,7 +593,6 @@ func (suite *MiddlewareTestSuite) TestDenomRestrictionFlow() { // Sending again on the previously blocked channel should now succeed _, _, err = suite.FullSendAToC(suite.MessageFromAToC(denom, sendAmount)) suite.Require().NoError(err, "Send on previously blocked channel should succeed after unsetting restriction") - } func (suite *MiddlewareTestSuite) InstantiateRLContract(quotas string) sdk.AccAddress { diff --git a/x/ibc-rate-limit/rate_limit.go b/x/ibc-rate-limit/rate_limit.go index 52b3a4808..67945d02b 100644 --- a/x/ibc-rate-limit/rate_limit.go +++ b/x/ibc-rate-limit/rate_limit.go @@ -35,7 +35,6 @@ func CheckAndUpdateRateLimits(ctx sdk.Context, contractKeeper *wasmkeeper.Permis } _, err = contractKeeper.Sudo(ctx, contractAddr, sendPacketMsg) - if err != nil { return errorsmod.Wrap(types.ErrRateLimitExceeded, err.Error()) } From c5f61f062404722ea9463bf4f88a6103afe4e87f Mon Sep 17 00:00:00 2001 From: bonedaddy Date: Tue, 10 Sep 2024 21:13:15 -0700 Subject: [PATCH 059/127] move .cargo folder to workspace root --- x/ibc-rate-limit/{contracts/rate-limiter => }/.cargo/config.toml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename x/ibc-rate-limit/{contracts/rate-limiter => }/.cargo/config.toml (100%) diff --git a/x/ibc-rate-limit/contracts/rate-limiter/.cargo/config.toml b/x/ibc-rate-limit/.cargo/config.toml similarity index 100% rename from x/ibc-rate-limit/contracts/rate-limiter/.cargo/config.toml rename to x/ibc-rate-limit/.cargo/config.toml From 0148c5c07d5cb6b7983bf1e88b6bc955e14edbe8 Mon Sep 17 00:00:00 2001 From: bonedaddy Date: Tue, 10 Sep 2024 21:14:47 -0700 Subject: [PATCH 060/127] recompile rate limit wasm contract --- x/ibc-rate-limit/bytecode/rate_limiter.wasm | Bin 355373 -> 1942300 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/x/ibc-rate-limit/bytecode/rate_limiter.wasm b/x/ibc-rate-limit/bytecode/rate_limiter.wasm index d3300802df224ad147f00776abd8956e20c10b4a..319f23a5e2e6ca8bda5f419d87b41787380fdbcf 100644 GIT binary patch literal 1942300 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�?2MU~2|i|B0C{<3!YoeAoA@(+L}Qa*{(T2BbvkBCTdYdIY-pZs!9k;bAcb&YSd7KC+0RjC3p$3H6SFewsgy(rG!+u zkqJo!#z?6~GXjQyI1;}N*}FEaG6&fyQDuJmmno4NVS#Uy>8q7_dDk6ut1nmPJITA- zObMh_$*BmK@;}GTXndtHUfMlOY@kn$Oocp#cC=h#H=$DGxQ5X zN3l+F35r#kyhnOHinUDbvyV}kif<>QCV^;`?lLu4X_C#ZLN>WVS?9;W_7!)b(=eGr zrPxnJ&DmoqD@=0Jc{4<5tFMqsrF>e6X+?_zG!YnrV=r(^k2FN^8dMR1Qz5 zoX0JlcWNJGugI(wZTs5#O4aRI)@yv$GmW41^p2o88qN(??{J>Wlr`yGqnu-s)8?vz z)Xlo6P}Gc}F3?2y#Zz&Lv}=l}gk9yL2=fQ0hU(6{IxDr9on%=`R5tM?Z%Gz?E5;&xz0=sf4r=_sTDE`sU7I+tcd>!|?wwON z4%_kr$>nL^$!-X%hY~J2=WD%{s=jJYJBfTVuBq0hy**o-){sm$yMB?r5R{E^GHOvn zN+{zTF|KkyOdrw5R?ekHOBK8^rlnxHx)rri3D8%&wE!I$Im`Lz60}p|dWioo-K5z{ zB}QYdC+Xii(zr= zv}(?ajb7BQJWo-JRB$F}#5$R&as&l~k^YmQpd&f8zr6K>hg5QXk?mw2xEB;fC26Mu z+nd{Me=ScytRK3{eV^O?s;-SEgjq?wcg<H!#|<4cIvF@y@rH%$ELTBi>JS9|Ceh0J8c{<`RL9j&yZ<*h z6Vw${%uocT-rwTQ^35TwAR_PNBE2a29*FS}oUIvDE$nAfde7a5RB}dP!hSX-qAw*E z>17vh`r!6^knW4^PI4{{a;gNG9V|h}^&uvldv=1cUyjQQZTZ{fN^|X1hj6q(NGSgY z7zD17A|MTkz}^)0h3<~!-*Ox&R-^+<;e^ixP@s}9Uc}!pH%pReMNP-};WTY6cTxe{a)K;NA(0)= z%anag8e5V6z)3^CV?m7;cNV5%RB8F~cf6^4ewptHJ0NrCHv<_@hhWxreCe#9IR?6} zw8QL8f$NLYk|o-f=g|LoxXYN9JR%_!HklrpV`BIH$_dm1M1$y>kCf4=iRco}Rj%W^ z@_Lkw9k~)B|5vb~4SahrO%5<#aOD7Jl>^M#{*X));4C=6A~u4sP_%YRh4go11trXA zFW^%69zvd<$FE!8Vp4RrzrkKSy?82vrXs=ur*Ov+l7A=H0nHkAA`^mDh1wAE!qyB& zqE9)y;U3qqwEd6jB?aHuPOQr`QU*JMnd3_*5j8Kunt zj18^#NS!SdHeplvx63ny{Gq?|foy!A*9V9aN@`&mi-3&o^BSF|W~G3Mxi?2f!3(Q3 z-3X$t0`rK#Oa>FBSnT@2WVlY5Y;8-vm`azHPvEPOT&RsB#8?J1u~vM`Tg_=R{wwUu z^_(aic5cmv4FrC?PTWAyE#?Lj3Lngws_K+2HgegCa#jzH2)X}W(Q@yagM4swkQ&f~ zD3(+=p96F$Ne86U+$;nZDE_uWPhqnG%d&#RR&)=KHtKjfT$7WNysWA}_!B2-BhRSo z%{1Wze_&B1)f9SfHehj{Bc?L9R^I}xYH=ZZg08p=NDk9z;kB48|F6Z_ZlWZkJVmc} z%3tz>qZ@ff9j%mh%3rnzy+)o;9Y$Ko`>gv7Gwus%6KRL-g|jT!&aj3kD%l)$ zA~-=^4c2*Q4mdP@?LZx6ajg80-sW}>tr2pPT6yA*VojeBm+XnO>60Dg^d%=^BPWSM z85kFl(VV0wSRFbjCy0fGtX}q*Qo%jhkaVHz+*!JpTrbAiB`*o2Ou10`egg?!q_M4! z>*a5y;bo5(F9Y70h$(i6cqV`+htq*?L?SMP{CiFA#nbJAb(*+OXv!0Tk)t0HT1PfC zb(dEJZmOcc%uSJjA&AS_Yv?bV=~wz|?A*0Jp$r4a}J47{fA0}RUAe`X<4eI6J zZ?tOYqBXYeK4KVZc4_J&oEy_cZD+8-lp3sbQQ*m@F4D>zB9teV@z^eZ-4srzp^0qA zsqJ=p{7-GSld>I^80$Ni{^sx-{>zuX^4WVH4q8Z=>nH}L1=O+&wvN?}1&hYJX-WUs z2C4CG6hWjLGcr@sKW*q(=^v#E@#a*mf2K%a!S2{W1aO;+%NnV8=LX_lrgxNlDl#np zM-Q#tNGxJBY&SC@Yf2nN>#*)07_6anlnihbt#jD5&fzQ$L%VM(P312K=L}C~D=F8~ zR7#6nYiW_pS=QTM0E~?!)Wp4+TkFW9?aJ|I z1T-zSwsCw{PN5AV4cVbW*p;(sIA64^yBmfZi+SIbV?i(pszKxsDAuc9d_`!!?%#Li z=#ethwxZK5zo^*2X`Avg*K-D^QKSKY28IsXAlWEc7Ve&lTyWEP-%$(SRxLL)Hfi2YN{S~9pX}xEF zx<0k=12wGA`?KLj%kfvvs86m)Zc^A9)z}=&M*xS`Oa)nF0f*@X{boq!IDs*9Y1W2> z&vkcd$j0XP8th?*gy(dI@u9&&oj5+r?6iF&1%XLJ%?6>RIN@%{-x*B#o)V!XsyH*m zS_1RlVzIX*a;}2t>Wv7WH)KwyNpq#;Wi;ybVN@oKo|b%Drsm01r~BCUCDYZQgV^x4 z1aw3veyV8UOw5fs6Yyhj?i~lnclrK6+!DOPIho6VaP)@=VVhm2FtKd@ zKCxDt`qB{jbbDM$avns@-6hH?#-cT|5k{R2&(B!g)ZW~wJ{$BLk9BJfaK!S=)F5?eK);veG z@=J@8NTH8v=MR?8`jii+4ujX!ks%@xL|zj|GvPIvGh2I2w6*e*WdJ8?#Y3Y2Vv{WK zCLBAWSi4TO=n9qa%PA#LdPOoHG^-zq7#@S`mhF01PEw*g5{wmW} zpE!;+>}(<)j%ZNtZp0l7SF#GVn2OcB<8WpZcvTA&Fz>M)^EvhESgw2NQT{!(!5= zkD68m97HL(YjjXP7#--s3|n)^*}&W7pf-4L_?qGbiAc^l9?L{TY2~WIK&?`; zVkLw?OET+g`H?uS7qKHJrTm;NPJq8V0~^F7B$CW4ckJM8Q>NxXfOuOuv-hr^~%9gsuvBUqos zPXIOrWyWPe_*eMMM8q@@BC^>yb|HH(D5cNfTG2HqHsm^Os-$@6-EL4cRC6rKJ&K%F z*>vI>*3&(i6YU_OCP0Wn9ui9JgpXBHw3W_{>~BVxF{q5NtM0;2&A{YZxThm`BkJWU z`c-jJ9WpT|Y>Z~kmg9fNDJiwfqP0Xk1|nQJG|m)K9HrH;?cr3RxUF3;MkQ3iuzXv4 zt=8CXL5tJ=EysPMo$G-E(Ab&k07TDYg`KH&1%H>A%`v?X8`M!wrD+apX%tBBWJ&7J zO~;XTFV~t+ zUlBfzCiJptNP1ALKyFJ@cU0$hz#ais8@Y{z{BO3@X|;0PF{uX`$ERkWrvD&p;XTyd zLrr#Q5p)F!H2c^nv7GwX)WkOgX~MHD!OZ5uznNS@3JSjk=Kv0XNbAi(m@H0E+GM3Q z%rPEu4VH(ve1FxLlwKk7n0cQL=6%-a9K~K;Txp1(H7gHb7LyCs-C**}*CV5Y)QgwC zL}#XKOD>BXse|yoBaSp99#{~rgS>3X5Cih%q~#1~u@$O-&(*nZ}sy-{7iX@ptAxS1t%nxU=#$iRp@wJ+^b*X#ijB`VFWnvmK zaBQg&`^wl(%h*n{I?nrkwpPVKBJGdJ3flo&afjZlDJYvYPg`U-22tHoxw*yitn^Sa zV79nIVQq`82wOZY&&+eCwVo2W))c5ox~y*0MNO+~4PbSRELdI75Fc}`nVCiAaj|x}>ADvsAG0E?|BI84(4FaNi}4e&S?;ySpu`9-L5+>EzNsO{O0~Hq^o7$= zt;3AYsT7#}S}GJT2xtTL(`-%AgK%Xu{0lFhH@5LDo?ohzN6S0|&T5#Px8k z=0T~xo)#31MPF3~Tct}PmoTiBiH}yq^va#lxP_FwGp$}VAjG;k<5qzc=@9qCG;cIo zR6Zk*8nXbcA6r;Sco?ghG$Tqh$awpVwQDC8QlBA>F)(HMJ#Ki zhgzDa>QxDyVQWaR{p>oLlE>0bf0n1=T{Gyl!Q zADihNpGe1-M?aw)AAG$k&^L07?|6ELK#8*lceE98JY_(kXL~l43lgW0nrk{WgIe_=?`j86B!Xz5C4lE8<;oj$AYOo5&+=lo{f9y{O_<;-At?9rTT*x#xGw_TMcyhue1#RVWWU0=8 zoht9Q2}N8y6=P0moph=UU+b+-g`s);1k~shI^A13c3W*tNmgo0Icc*(WXFS zC1Pzl;l*B@Hn8cHaDIrSpl4(?$ zd_@Ch23;^!q^aCqNNn#xVk7mw)ZSfb2x@*`N_;)WT2;_|-={A1(5vte{A8Up_=y>X zaTDk9v$kOT8WwzNU?aO!z}}h;r+odT(etq(4w&+=nftw@pnbxvQ2uMmCFqX#o>8A?o{qw8(Z!zBtT0 zKg5ra?$Ur+JwsmlzL51RSAaicr{S)6CYGyZaA&hp6J50Blx^+gbRR)VI20CNV{MH9 zj;}g;F3DI^XVp#lq8QDWhVD_rb#tm z>`FX>crBC}$;)A(vq!+utd{vwRddc;Bpd`PuQfyj1jM7^eMhJ*A-Hj&mZL~>#Svg@ zozS!~7V1YQn5{tpwbX58W9pp!fWY-;V-oEeYnO*_mSfmFXWVmf%0IIQ(fBCRV5vCR zg{F-;Mq8Gl(O#jg^=@O<8=uR@DCfAcG3)6B=&EUy))2IOt>egzci1uNPS#r253qxk zLuDtrhK4jk{A8d`M*ool-P?`grv|w<-&Jc)c1HwRohI zX>m6ZOIZ}VU>()W(n#7xWd^D1W^jl{n=m~f)nh3elHI^pDyC&Bt$dn%2huK#^J;FZ zED(N+nMo|s3F-{4J5g7-Zk;50LzO91zg$`F$d<#A97LOGj7dykDkH9&uPr(-gst== zo&!^AO>qg2k4sj}I0LoK=YZM{{bW>ysJROISS$ug^9vsEy>Q%rU7us~!(Ph6x?fU_$IX?3cJ=m|$2rGY zVNI`Ggg$=Dv4*4 z9b>Yw*mNg{;**7?I9w%?DKBielNZcEt<+l;Y{S2Dg%svlIvL3pD8WWxIAt>w>u@^A z0XvbFBMRx-T(b#f8g0g@YZvPb+rLe&2h$LWjxB@esAtn6txnH4UbCi#+b)_E#&8ehDCql+Z=7O=Pp2oolRYVW zkMH||llSA6am?rnGkRbFt)sLq(WlBt68Ef*>Sdn7fRspQ@ZsYdKTvcnNYL^n^+<2E zPkFpZXS<8vO4AEO9z{dfbt~je+JY{JlPv}T(&;f#rTXzm3c7S}XUxP1veUPta5Z+^ z6#KQ|rXwHA8W&Cg#xcjMB6R7++J4?p*fhnve2R%pWP-K#L%c(73|G_~v?eo)ku6{! zK&hSq1q4D#{}3Str~6e;;mUi{fb+Z>4!uAGphB>LOsIekl???LENFZe`?IJJIFE91 z%b5DdRwpg>PwmC!VWF4ZdeAudz&3R4!WG%Qz0Pga#W=%|*uneRw#Li~G-J35OGs3& zW2GBIqQhuqHR;f;tbot3cdOaPDr<{c2pW=3Kf%I`900fcs<=|OSVbS0=x|()won{Q z%kr$6X+ljcsAj0!HBHl^#VUj<)5~a)Um%y+S(h1XTVORmw1Kr5{=5LJRKx7s6kP_~ zo4^H^=I9Wd4RlDnGpPXIsIWj&&~9Uhtlz`YR*@dngtRR?EJ$7e;T@b7$}fdw4uO}j z#b|pV7k6+(NFpt<#1Lixy7VgI>?z6snADi&NHz-jr3}eN#6&li3cxOqOzc>D8H8jD zQ7q26=GcEX_*Y}Pne3@Nnwpsiw~ELFHz%a9Iw61d0FA4EZlCrXgLABy^J&AMqb?-0 zF!|Rf;a^n3&jA)TB_@S|rOE^>CN~e32x`5(jR1uK<`TLM=_d82;p(aU;xOSx91$o7 zu19rK^LFk|4-K=2VJ@xHL(OHQ(?fL{rTg4-$t=J}Pr^3ENH=xGxBiwuke~X&Ei9;l zJC34j=jIYyX!z7ktg5WxQ#U@WvW8FHP+MhHh6E5nBB|Qnj#6qqbKh-=&s?tau%Gf$ z-%shM-ASZIK;u~#&~|j4pRQczYpeF0FFG z{QlR!g}Hk>a>}x76+7=>?%w{lw}JW6qZxS} znf#WiTokTNg`H5jR4Ciye1KCuA_D1P;_4nc*U_cbJr-^%J`msE(EUcdPrqxh-_f<7Q~kwc6iYr-jmpr7SDR zi4C^7Q9Pwd{Sso%H%M;Dlj3-gkXq}HTXr12z_HgeRVP*LIzk&Qm}EW z&1EDtK64j5L4k2_88*Ea-SCxcIiU!LX}8d)-$WmLQ)$uv#-NXBZ2f>f;LRFM0kVlE zQrxe?Df|W%P8lXSTEXZ_-ia8~NPyLiWuNS&qnNj$mC=j@Mgog%(ub*O13!q8JNY~l zAF&D_sWeWG0nCt3i^X6O%a9dQ?~~U-Ngo2t(c&2qqIxg|h_VHkfTeQn7M3aJ>Kz_R zl9e8kC+~F81kpmo*QaBCb?nzN77b{k0#-SfW!Wo5Ap6%nxF+6pLe!o=8*qp832#ma z$^)v)LQ8siq8RJfPzv>sf`QI0My1!$r?oX=voC^6)n#5ogS3Twa;x#bGos9FTnZ`CvKVtL z#wEG72(J&jx21b z7!+ftlgsEdAD!@4awXoSGd$NY>5zCJe>#)LEHJ_(v)-!sTS3bQvURvF;4>3O>qGhN z0O+$qG*of=UElK-eHt5&17F~lw^Xn4423fBXZ(^lj=C@7i#fp{44y;jW^0^xp`0H&Hs3DSTU0#Rt)Sn)17&7-c}#JX}tIk+Uim6yc&3?MW&OZ zQ;r@(;&fc%z*ix3scA*l%Jb3_?oqsLm|YV&mh(?(W__3@zd&gAppn%?A}0rJR4G3i zA_sghkAUF?0VHVwPH_NzoHs)ls0EX+A#(BsBIoz}>2hR?H!QF`ViFht4i z3>G=-#S&;|)(1gxr_i5$Fb*zjw&R)~RydiZHy3@UKO0+r@;Okz2cXnFyf}tRh36+A z>_H?uSf=qw4>Mz_xJd~5YM?9=&40z%=E%}Av>EdlfHxSkg^sdLPS}~^1hKga#e0b{ z51JJ+{rxs$Ca1KqW09;g=2d6RDu8n;YmGGUk|a(dh)nyylGAd`K>3DsD?%LY#O{$1Tgph&Z7O zG~@fWeEYl%_2X_~+nyao#k;Y+cR(pT9@M%u_JU^!vgvUnuB zfgT`0uIEcS^u1i({sUWDM7xon#Kqalv-t_S)$*EpZHET1q~^b$R0hgTewUB&3F)~6 zy+`@EA#wqb>51cK84&rqbjuoHdUfC3LaxVyCvau?t$Sq{OOFGG$Fwkvn7?A zJ~GRmu*-}v_S0%ilv@(yF?K0jqpS4GP$^>+_in(R-y3l{JvT$I%FQs))NRO3$knnj zShnuc^UC^sOW_=}QZaN7{&?~RB$prmDmN2lytof-m$bAT&-#`b>gGRe zy+Re3)LxHwjc$<29pJGlqT~$TosgE+z!hFMPol@r4pdY?WC!=PH3;5n*x0Z!nB z(?jV!<)c3)9Q(N5x=ihz;8V}>ZUR{^PJUHSt;*<+E0WP)_R>M@#DgtXWm2nVRf;Rn z#O#AbaoG>UTEMCFsF-CfF10QOvyp9}qB@uQ9bW}7;~ z;PYeL$n01Cc;?JiC_osel%lZ~!_3M|4X9>o%Gw&&W)Ne+<^vJs+J@Q5kiF4IRz7f& zIVxYm9o(#qmJA$~xS31Xh9a*Q$EvUbY0d>Nn@3B1+eXV<<=94}Gw|v(7ufLCH2abx z*(aCQlNG&dYAuHzq_PF@`0F?@=<)K=DiQpy!ULI_o_eJcrQ{w9F)0^ zyjSxbc&d0W;TMJ!;`idco4V(D;IlAS?y1@(2@gObN=z<*NJ>-cm}9PQelKFYkfNqO zFkWy^v{^IWgYFPC#(P!dyTB1V6Scu~oMYoD(1%(QzzP(;;Pa|51w^8aHDAnAuI>tj zx(Ys92gaDz|89_t>M;7PR^D1jtvd8UDu9-<2;reg&oFN(dbd>1of2;I`LX>2kLzil z{E!x?$I^EJIDQ^}Bi&W8*NB_IYLu)AS+#MX$U_Kz94xX*@m{A$UfDWkUtJ`c0Xx*C zxX0_O^aX5d!K0}se02?WOlkQfvSXq-I?=bdu|~xEmy|M4-UJwj*8VM3K2AcaS&|H> z6MiFSsy?VK7TXP-Xal7Z!l8W#g5}C+~r>Y)Bh|f^z86vU&CJ zQ1`_vu+qdia1^VAqY7-ec>O{o30)S$r3GOp%kzSD z(HDO+b0V0Ca#BTCPhb44AJ9YmjSn!hWs; zOcZ94oke24uyFJUUL+=olgODJpBoL!MS`XXLFxSl`~&WgMWSx8L}8ooL-5Zk&sifU z{`zd$cH{s%@d#D6TxU4XKm);lI86=yII|Pi31muhLo*fpwLmhBk$g$5^K;xa!r#mr49L{n}s4Jn2-$pUR4W=f)rj%HYU&z|{HLY^F}1Fo9v za89-`e`^ai*4Y@=Zhe)2VXmdUV?eo7F@0WAMN#>vY>4YGfToG~mGLY9a(#tCxpn%6 zSzazFCdrkMeDd4+VtX9|X84xaD4ZoGUxi`T96vw|6UVXzu0N{UCHN-4y{9aP!!(xgz zvK!rIyul0x5YjtmI>(jCt2BqNF%D`kU+XWw(p9))wv&r4=p_lFqx#KPv%xjVcj`9= ztvn}aEPCgav!$0OS9$p{xw;QKp!ln9S886P+swfQbo+4VwK3vr;xIv~3433eI5C17 zxsXX&HZ16Ty|-C@`0cQ#^3%K{1Zit>^l6(Wr?PoXPG$3&oXXmooVHp7RgU(BoG2|q z%ujA3frWZoGoa|;jmu{!)CRct@d1ZpT%4zx?FgL%51NU6&Tw2ik zN}bzgM;~jbbJ!G4R>Dy!Oe}3M)3@ISS@?V-2JHAAO}nHRSSM)!!buvquD64sw{M}L zw-t50o%r-q-I`C=3&{u?sWlQ6d4p9V?_rhn1QoE$MPhT?>1}~K@$N2<+9V>dO1SzZ z4oX9lJ(P4{Qi*E{l5r?W&7)yT25#9t^J?=Cys7F+P(136oZQ|KX;qe5&$Kn2w_|$~ z8yj%=+|oNm8C%z14}% zBRP+@6IUM(|!nDK;rQozN4G~KeQEos9c!}C^-w63?H z5qh>%cCTX!mu%-z-pQml(cs?$61MK3m3UtXzIpN$=qDkCfgY%1=;yY$L*Eqn$$*y` zaL_meUn-pqd0LLOJHST7Watk9gCs=5L&heL`%7p5*H% zisgc$dP4NTCjCSWdlNm z$9%kY0w3_uCNDdN3tNbS8xcQ!ctX3dAn#CJI5-a zM_$Ptv6R+Td-cH2#WhCIdJrlp^HwQ>o6d+XJ1jdgJ?wlDFNBv4%okA-J!H0TX1}n$ z%#~zuun8|>MP`#9a^hy53o(%wP#=`-Zb1k5yVs@{Z9QP zysrGta!c3BJJGITeh$Z^Q}FI6atS&kOiE^cAXCww(Hz5gZHwk$6&1~m<4ikAQqf|X zBRgL`{qw};Gzgv5RF`~1s7`e2bpE$Qb@S708kK}Qvp)g$T*hFW<%)NceM!<@*aX|v zZkosHxwRIs!$6|Eu2zTvPRacWA1q5HTPIYNV~ z!E^)#jp-ZdVyHceynszKl_*6`m5(IV;`;yjUSZp*f z2<#e}**((8rkP=@dTCA=I7Q+@sj#)KY>MX(U?QtrY;~x@JmlF_*p`)jwg|(=U@wWZ zEW`|qj!BWuHS0R9mIF8vZ|Kp&|MPxQ-f?1viC~+nw4I3BX&Z*AfSzmSE#J!e5$~oA7|5{DU<3mMehq_8*>@P|(Zc`pekvHG0R|1%p-q|wWSXgk z@|j|5AhGE%aQS2aE#`(tx&W_>H7y2sIzjYQ4QN(@iQlw#Fxe+}L(6<`f z=s#t7YMFsr^`ze|fD2_GpXFH?h@s$8}14iL!tRYg3iTBhilBxP!H z2I~bdlQHEw8;%QKAG3r{HsWf{kcFh&Z)71*=XimqqOV0X2j}RIvOJpybuWM#gTO)U z!7K1fftrgzO*}iGo_w$ZbWecpI-q$+$$YiB**+*(@}O)U(Bca~0&0wF5;dTE252e` zfbJQf6?4)Abk6|Ib|RHlfbO9s187vx8_?`}0no(!3()F^0UEnkfbO3g(0pA3I>45B z0nqFy(n_rWO`VGX-D?2)W1X}gt>V-8=xZRO*~N%Q)gz-*!pUy5_O^KWniE7sCas-|I~avPhbvkOv+gJW6$%B+ z6Cofwd9Z=hpwA9Ltw&I<5!X3kt(m&`iXq_1-Yy$i7E$6D}2 zxx*7rRG1Y_2f9+DL$>y&22wfg@E@f`6o+#Q-Hng@tUrxHA6CvzTT_0_Y%tY^gvUi3 zR!$UEO(%pCOgzXV00Ma%QSG^Bd|uRW@WUSMt%@L=X$TY*DTLI46m3MZLCXst9u7r< zBI3j+9>s9;ZKBI*+49LP_SF5S9@yi^vHh=<2F)9ov3bXv2;oso!|1xpSBAFrqt_oS z4W**8t_(oztyg1VbAQm-3O^19=`zjoV?rfqUhXmv%bgAEmZ5}xBw_DroR&)2Its$o z%bj+*3Kg@FOzetZ+WHhJgeE8<+9*6zR6=~FCx>IduJT@>0n?;+E$m`7SEKq#v(={= zGeXxIkv>#*P|dK%gEs2T+2`(G)jODnq+Qj!bANWeVOdZ5Hoyz5(%O&E*a*;wpwKKi z9KtNMKw-1g28BUf`?Z+EYGs;T_Y5)-lptU2|G2>6>Se1DJ?42psroG6;j_hf;lMQz z8a^Gay9pDJiAN{c?iI12F|1UNTEnXPU{y6Hcr?mZeY}kOM=<>7B3dT z4&-QX3Wb7YSo~6nGE3u+nV9d&vx5;K3a}-5wqc+X%tZ(5`Tj_`a9oHAcP`+xRV#5f zUMQy6DaN0cfX%1%Yu7_3V!Y+Jz%Ss4$f6ntRSp6xq^`L z3JK2HD~{$Hls8Y?rCe_$uciE|6J;+>K~J(t1K@=#)7M>-+EVmJcCD?s$_(xcS0vDC zOp)~-lyz#o>PP~%)RB4u28`5sN& zy@}Tm~nDx|nRe_Ta@nG_!dRcdtffvkBT$B*{X~e#Lz>Gz=c|0DuAD&d9 z&TtmCQR>_@osf)bZQs{l0+TA}N^X`0Md?dX)J@bu5^EN}YqW;+0$MA*HE5lYf7(ak z4XC3Z0)^v-IiA|MNCUH>SSdViDYl6)ZOmMwiUbk4ZC*14%c#zL6)KjN9tXt`~Ye;GyhS-ZbTCt#Dm5kAP3tDs&%J41?bSW1x1jk z*8Kg+K3vY>Nu}=qpes4cNS4_HG7jm)!_4}r0C<1`3A$=tn`J=>BotE|&Ty<6!YPhe z;&s7*ryTUL(dH#v!0BV>@qXRjBm%T|f$llBp3W%#2wM)j9u^iHayFZb%`0a=jU zK*AnR?<9Orn}iikb5rzwz*cTCj@cj|F-j*N`8z;B=qySFrS@{Ez!O72@oJf&)*^DN zTRtU3jIvAirUicA$V7UtI+G7MJMo@$oRe5j5Ukimyr_U}mM)0(Hb2a4SbJhDuZ$2r z;xlB(i`TpQqS(dwpul(36tYmEVpPP2Jj#klF~O#yLhD0rtxusq27W;_c)d8Kk*sW5 zJiT>isqrS)v=l#3bu0*FD63n(Ow_`h+-$N2taZ^Pa<0q-grg|OVO&v;1XJ>lWi;EA z-62+KLoj9GR>k2dSbh)zV?gga<2CCIf&nyR|H>~^9l_G!+jBdXgP8qRdeLfcx`z9!Jv*}5Vhs&ATszkXb~L|(rPwm17wG-(oAhyl{)>6yw*eEH_nTYmj|~H+r?Y zB9+wp`d4q?0wLG9yDIwUwC`U2IST;#?}aj!$-tH&{iBNJ>;c5M9BQj*&PHBdlOCou z=;ZZEgh#Iw&B^6j@Am6hHDwx(k#OAna}Ej=hY|3bW!^IL%WS~%#z7o=7ig4tidY1k z)5D_hJG?#e?;R@;h0d&M(zZGY00_Z)&a(oc(@o}CJZmS}5Bn92eGIqy7;g7$4)|MH zj~mK+(Qwb%CU=(7>zQyyE}1NP4~r~Dvi94jc|gdS7{wipY-Kde(Jb*Bp-s(Zc56}R zA;bP%lTQghN7tokG$b3F#LP~G#1)bDz`xMM6ZeHnrF>8~li$*(QFcn2A zlNA<{uuwHi%I7}G%c2iJ^-TO7+TBoBo={9%`6H+K8^4^fR70dqkz5{LoXc+Y8SC{w zS=4Joesy4`E?|Jtz|X3Ij#m|yq3DcOKsB@{{jm?t_qc_jx#O`K8)I#btvvMz^=f3; zMGnXRWl@h1-`*cstGD>{ed^Fs`Db>OoAEjOb+`3o$$N4}HNu*rtItSoG|4Z6wC>03D$`29rV_mlcPy1+_)xAEcAjo*J{m7E`O?o!r`GK^_! zXT*7dPyS4x(%59;_%yHj6YhUW>~~b(|GwQfzC@W|9fLPNXT6)lnje>RX?*_6_W6GY zFwX_WpK1*H4;#NfW=)*$>vMzed|#itZ3sDWM+PJQ8S4%U{Qm#KM`eg-?okJ6#Sw5s z*|2wh;b*mv9>DDQhCds-{>fXd-TmC}mp4eC7t!^HYc$P|3E06kYRa}2&zrm|Epd%X zuH&`MwK(gw?DK}?4XK@@gkhX-9FM2f8=Gm>*^?>tM2Y7Ou;(K}ieU2jr)TP?gr3ho zy{~@y!1kxFuPXkYZC~C{J-cz+v!L4p!dn{8M*k|GbFqgx0;uo-9dgyhrQS)qnJ*Rc zeMdf1&_&ddRpZwEL{DVpGC7HDzIFw|VbWRYWNBt$BMQgJ{B)YXPw0YecT;^;&Fo#P zYA&^G%Tt`{yh{kE-Xt3v4z#pTgJOEPqzG-02Y`UE+zO_tw;p=ta_vnBI9dE1MwO>Y zs#PQpxiI`u)eZb9C)A}TY{^A}fE$7}!6-H6OHiSebR|#H%)4hGGFIIHk-QVsZ_jK% z&1ZxeXgKk?5~{^<8&vhJjnL|lpo|DN`s4uDZ3Oh9Ya!`HDi>wMvSpDG!6IsE4c&$d z+W{EbE{J|JNvbX&&Rp6ITv_l%0Ie`-BfNiZLxh+bpYyvDXcUEryYP7!yEQmi*r34b zFl#o5@=>w}=o``CaHj?}X`5X8$n_lZ;9 z&V2Qp1HyxTF{{JHaWSh?Y(^VC=Nha(3w&PyY%oDb`Baz1GYcMnvzkIA%{6u2-lfm~ z6Ie;BmC@+>O0X3bx~?~1@bFjCMBCMU49oi z+XZjId$N(;Xt8$k2Fq6$Ib3$k|EYX}JCLw?R$_P|HzuA-O9`*&TJ%=B#_M2me6glF z@!4xFwyM)bPJD{W(0VGFKnd|x5_J4pufMc94_oqX9$e*t->s(C~_k@hoCw_!M5YFYCsnNxY zGzc0AgAg>Eg9va}PKny+vL4H=-gwjDy}p3UF%27yp~)CMZpofapRKgef$L-hFfzV* zC3d@@i&gM)rB^=BD*g#3(*lWx)Vu0L5NdhTD8+#WV%BqH4m24S!iTH|kcB0v$9kbg z%+WjYI^~gKGxBx0=;Ry4d%mG%hfD!jG~{MU$D5+yvNNM zRyF;7RwqL&qTk~TAH?_N#3gx_oX0Hj+++i^x7d30gLerILxP{!I%TL<&;wf%lo`re zal++b=#AZwL&CaZH$A#~V!z>UUxrAbgu4}3g}ne9To8Pww~O`*Ub4zQN+^^Z)u5Wli$bFqdNU6FTY=8a72gT zh?p25QNUZeq092fp3+M?(#ilGQrzW=&Uut4$3;a15$FpA_MFwVu&jCZ4z8Iz#`cg= z&&sUE&<#qgm3v^f@t?KLL`}>ei1Nrggc%sHd6^#~AHz$nPSCcN@3-KIyh%^}1*fBX z=y?6+SD2YidQl8D_{<0qok4_H=d15F6OOaAB(5w#C_qdIB}OFfEB4^nV+GbddQIz& zJyu$w4qrx+!NTOFz!p$sBZDvmXOd&ydt*eZ5z0^b(|T`1Wi`Vh+Cj`kgVStlHp`P* zQuN8xY(J*5INP>@%`;sMygr@fCd)TAC9R3(t!knrKAGqzRT~rixURJFgsyk{666;{ znGi(Jwz%?(Nwo9e_%1f$GpyH$aR4a(mOyAMlAvE^-{v^e9CKd1-ldbg!aVpKf1WD|W_xUje+~Z3lLBEh32}zEI22A(-t1oF zcoxIw_~}dB>abAS-*$Y6%)!bVEUQ&+F!9-Ll{3-K;+X6p4d|Q@l02W@6i8MvhJcc} zU|!Mvy^aZ+lx?H?1(;w2dbeQ$9XcN-oK;I;0zTRcCV63kcRvZk3&bw$3aB7L^Q=p4 z3}E@Xq;vBaV40Zg&AS(1z~=)7JQgs3grZFh_<&7{KrX28dH!00z*x zoiX6d0t|S5Jixg8d3ZonbS{Vo)GEg}kPB40#6m9c_}9P%?)xTify|Dra`ocV()Dl* zR5&1Jyod`(*3-Er4oKG5T;M)%Kn$;v^)UM9#|1Ezqa1)OnVv|2RQf=5PS;k}kn^Hl zNrAwnq0vOTyt4u)VIC**#g6t8wPr|r7 zO2fYgoEAg`|F`mn#XtPTPpG%uR(L_RdhF}YD?kmV{VplgWitBD*`iFkl@du9tqw_G zzEBesR>cH7I76}ub1xqMQ0teo+z_vY&Ha+$NaSt*Vh z-*C=i`>m>ySnIOAvHQ(z{w<%eidk4wJU!jO(q=ogE|&R{X`I|+7O5U6Q=}9LiTQ!v zfg(U|;$gG^*6f5gL07lD{tQ9pwF50{;^u-}8v-2|Inf3!e_&07iYg*J(lB&z}O+8~DYSF(=kxzZH_Tae2?0$Jd$dbY@L3Y{ZHc>)Y1`4p|k^nHqx%4~b zgG$CzZj@iNq&)9C$^7E8rzNrk=&G{(LVT&aHe3amF))GB|@pXxV^Nim@cv z_XefN0=(ZB0AFMfOi}{#Gz(A!JJL3raUtVwxwto!|QBj2!+CmRiGDhV;Dc{ z-K=?I52PllO1NVwmNaW20SYZ~z(;mW-BOY?g7SMhp+)wNK2Gq{Qk-%@ znN%Bn3h_mTDyb_~8X8M#fbx7h_==9E5DE9#fJK^AVrMi@O6NJ%u2j~{dquscjcSIh zs?a6%VVdwYOKey)bVR5zUyG+&p_GbR)qAQHJ;>S*VyYF=xq#Y^XV#^jx}?64U4;Sa z_+FtI#}K`mB?UVJ1Bcxk$*%^=a!)Vi_|(p~5|ET{dE?EbAM)f|SxB3sVR#N0Y#@z0 zBLRWNp$DD=rh4F+bM(M-z{CgPb@enBsf%P$;Z<_K^hp0hSMmRICjD9A^LLaF>lzcT zl#g2JM)^#ubTRI$zdFm8cToxeWrD@G%}M_(7x)c#=~MWq8D$RX_o1e<)5THf|&{RN-JY7KT7G%c7YT@>u`qaQWbm93f^I=bZ_E_~mZrr> z{F^3jR+@?lMXSR9Rjs`!tqfUfg#TmUHdepslcsQ40hoFNxJj@Ax0EmO!>$^-O&t40 zajF6AvKj(Dt$HP^u@XlnN~uS+R}UPS^uWS>r_sqkscSVWaG8F}FSun?pT z7h%xkUCEp(nJXR5k{h3~yn!77%2AJK$DtZH2?89cJWX54wgd_~R^B&{4MRSV7&^uU2qJ%~J^Bc5Q{k>Jnj zm9pAfcML#7%TNt$y2T38)gxG0UajR1X#e2P2<=~5KA~$xf(wc5y({VN7^&KHs~esh zK@4VH2wa%mcWFSZtuULsCvRdakfcduzz6_e)sRRRMpW*M9TQmLpY&49bpMIFP~Dr9A%cxkE58s5+QC;?#hL4e)cb0KAkfzI5p+4 zZ*Vzgol=XIxM@u1EXNz%3I%+u*|f;)*K z$<5`A`7U zf`Q;HZ488AF%aopI}GH9)tD6HY6KTr0cR#?1X^mD>-X6E%>fN4yX9%|-tvdj@@xwm z7Z*E%*v1!;K6qznW5}``kp*_P496PIRy4P~EFrF$<%n$KX4RX;ijayR1BS2qG~+_6 z>$wE9`W{EC8v#H-s~h;ie!8-SS3dv36h0SZ0@R*kabU6pH5#v8Zy^)Xmb#PYW zSDLTc=)`Q|TJFjeI)bgNPIncf>8eiwb+a)*bt`b6yMtV)x8P!w#UTjm{01@i>tb9! z0Z^_v}Om4Dih*ou7m(YkhdCs#xNKnN3ZyJ52vQ8P^i zE}+c;(>+q}#07SXPa@yeqI^?AMfA&ECyG5%3gH7tI^oD_)ZKz?GX-z92iZ0o6?-Jz z*2KA8J7m6g7d@rMqydv|YhHA7h~}# z&fF9)GCb)OlVTTgO?i-z`lj`=47Z{ibv*!)uL#S#dA6Gl3L`z~TId^S$iJcqckzan;P43*xp;Hkq4mJUn;t~?gfCpY zsddB~nKzZL(H;dYeB`hi7ZV553Mdi9TjT_w193E(T@gDG5)jSvk#%UkvcP4wp$Lz; zkdF!LT+CmJtywY6h0e!Pvzf(rTp7*mJZ0xYT91%f%QJqlXT*MHOk~PY!0c8c;PgwM z`1Q@?GMW6mLOaN&Z1Op=Twcj!=g0S9l-2v@An-k882PGS`U{G?_ttGqv!!h>LMVn? zh~Hubz>h3e*MF&mXUXU(#h+h+;DQ}DbNU)aRB>ypzw0ncGkxcdKh`G9TTn&P^2{&) zo6&U~Wj9R?HUyQ!3d8xwx!!6WfJ{)Yd0yyvbqF#}0B~#aZoxue0D>AMS7I2%(d~DA zBBdUHwZZxT#+tGWI$pN{)rUU+$BT2i=-3Z>{@@or@P*_$seC?CCb=FdW_5d@nz-g5 z6@KtF4boOT&oRi~zc_I7;0iRPeW~Ugl)FN~ z?2AuN)m~6PbMRl@`@{VP!um8Ck)ZnNEf=U%2QOFyVNIvw_dbLr!izTf(U?n-yjc|u zgr%%TSZ=l>Y`y?t|Da8l3&)Aq(R``IJMA=96219Q=TWw6C>zE~kXC!BQv5E;Fq75(9LOb%!TeKJdI={ zr($>PL-ri<83ehv7wA-+b3 zL+9)yg>|agOhzB*W!*Z~hBL=Ae_)&if3Rhr7Zdh>VxVhP7B5~B?#2TNl%A`~Ew&WT zk5W5xCsGkK!K;>0j00VicRppygEllkcEAqniU@)+wCE?eB(biyg}St(w?2zXaVbD# ze~}$mV?>**QGzI*Kvg!^8FWF>xOHNS#!^7sRZcRC;Zx7nDJASGR|jmw=nQ<0iWGhD zd>YOV*e}_`9Gvj2^CDx^ai)asv|DYpM^G0)@Z*@ctfM$_SrZIW{SsdY@rK$K(|VJ! zYln!Mi8;uE-%L6Ogi`4o0MinanSeH+g%9o21-buxeAtI-Q`(z`!SaR%oBHuDKtWxr z;6xh?uhA6B4(*%5pf)sY;f3npDh|r~08jyLYqP$BpAzOmwJ@_fs!^XaQDCWpe&r61 zV^?y#uf0B5J&7G-cK#Eks_ba(qk$Ci6lmqkOBtT&^+7?R>IDEi@<^HsZD8+Z24##ixp` zq&@LiIg&gav!G;8ea-zE0I3`;i?pRCAGo46o*~8rk-9 z-W*g=N@NSwfgXxF^)u0!aE^aZ?wvKTVl zPH`xG4Q0oJ_8hC~DEc_j75`6}2QW=c*|>3w@l(jECcbu&p$^&;K$_Vi;|VUU!TinM zehgD46*I%U&P(S(mwjM$VgFv|=87{08H2f2}2NYSTD< zpJSZmIkli!zgEX}_>p)*ow<`x;n+dn3u_qB@N$y)%&8^t4)M&;kY^AZO(Ebkra6`YJSQ1Wu~t#6#>DBHFWY107{s{6WC z_f>#ACSl06)MAx4(^LM{%#TSzW$#&IDNaytMXZeOUtJB^XXI*zdeYxuKshgY`QJ5Q zE2C@a`B*z`*eQ<_8I#1Gh1B2ceC|eZMdfiCsunUW*;EA(*}OS~=-pdRtn`vR&(jP+ zJlaT-@=t#KV;{s*mC=upnC<95k{o~P|NgCa{l?Gz`(OH#66k=r8vJ6}6JX#oq{>B*n5s2!awsAW#U$(+S@TtlQ)*5>r#&^03E zvKz6{V8|rH{){A<Ok22edDUK>|cC2JnRaC5TW6lxWbmek0q~?9~GC?Z}#rIGATez+yls@78 zqxr4lO9Ys(WlqTMpZuuJS7-8&HGYYDOHE)Hm& zqGT%My{87l$JCPJ;BH;McS^VmI~?(QbGZSkUg2nk`*p4py z^2gDh;4-V@NmWE23iVQOC+ zN+{i`8H0BSf?QxGJegbiU@3a6v(5GmTZg21R-Vukl)Rt!lA1Z^X%N zNN;!7BV!~7gS}^iFJQd(kmTcg3Sa|R^pd{9(?57KOGW&qBJ}Pc@nnlZWJ=lD0knhr zZ5*Q4A2VtnOdb{uYK;=T26QTR>r6?_e|~GR{9zR7E?qI2ZGPoE0=%a|bw^a;TqJUR zt9Jx>jO(tvYI&ttX;_C)cboOtNBTzcHV%HbX1>@hV>c~!J1zu_6YJisN?g>L0xbM$ z9e8R}Jr5xSfP)NqwWQ&bTS5Tz`ieac1&r}q0md$=U)BxOuiJt7j>e{76d~X+lKKiM z8%c=tQc2-MNg@YA5HQb?cq`K`@rO}?#wnT(f$gmh)5V3*!W5iPUT1hwQFAus+M zHEmkS%^pW3g%o3Ba!w+dBMK}45EYOBVCH3+ojzDSrD^HfwRT!r5*%Kju; zha!fWQ!pt9be63=2xe-L4os$&IY1OL#|(@aKYYwlB#J)AG#7^6h)c!B0nQK|RbKC3 zoAF|8$o4Q=kSzy)$-qS{U{?!(ST(70b5QrR{(M2lgobs}ulJJ-W+!LERSlt$GfmNQO%r!b@4+VAvre_zXV`q2>J9pt1*RyiLIC55d) z$&Z8hG~z9n2wRz#)!nA77GO+TzX3@Yzy%I_F_{{QJcw>WKK^0r6}nPOaW&71LaM7t zZ*ShDHx_OIc%T|~|I~8_@Z)4k0qZcQ0-Zqpc;(%`|5c;$o%vfk{5Ql@9P?l6T%N}} zO>=PzKWU{8YSQQb35~b%CLW(Lg|>mnXHsO4Ve&E;)3ePHfrDJ!pj>r?t~7<8@B=k3 z*rts21bcE|qNMUzL7|ZwqnAh~0?^ZRDM+axE^&<+tC;q~HKY%)(;M?(i4J8j@cFy3 zFonPQ2@fyG%FpMDRtrV9O_#y`mE+lTmH#FPoL!;P;L5^IZ8sJhw>{}?5W8WDxDQ7F z?+*6rE>n-9y*iXi8tv634#%UT{ze)JlHQTQGr~f{I7Q%<8LaPMJhG1vyEN3WSceEf zna7pIIvg=g)a0zbG0B^PsM}CO;G9>pd6&;-!)P6$AR4UZ& z@<%@@mN*K=svM)c1hn1d`|QC=c)&Un58#Ts%MaRvNq9h99uJVryUSm(2Yae7Iy`{E z?Uw!g)UW@WcbWa%r4X*OyZmgces(4Bz?73G?7^;34QIOW0KgBXsPMsBucS0;8)da9 zLwVgrfoVxHaCc+i?wPKQnbx3l#L1D1))8gs7&6TT6w}1F!*=Hq%-vx$cf;W#OM|3u z+-8nzZ08YY335#*4WpL=7X_lJDEU!YP<6KQqxo6Mi;e6o0fBLhdsT2BS+%6bnO6Tm zhXKE6RIHf&c$rfp%`}$8yeF{|_YE&HAuow0VAiN6#NVY_IHUp z9RkO5r-LRp(w!;GnvX~FP}lf!ah6kt8VwJ`sp`D%gvS-4@Lo_F>cy&4of&4#SxzMt zGFkaZhHWxlQ`L@^ACvv#h_GxH7#xQ%l#L9I!(rm;5C+1Uz#rIj-TBBH7Ia>a`v!I1 z44&dX%r8RgA=k;_euQ`;~%2D26APr$Fk9{F&JuNE!G*-*d?i*BY$9>fdNY8jG`&!|# zNs%He6cR1lI=Hp{AT2b9<(+KPnuj%f^xmj^^OzPm&RJoxD=P7HhF~d7Uyz?Z`sA-b z)UNY%Z+P>?@r!&;wtLUEYd-5i^GT;K3EujlB|I729PV?x zc)S1J44o2fNZ(f-KzT`H4M_06k%<+2`Uu!PQ=%>z=vY&^vnyX}QGC&%w#}W7ME81X zP&@K9wIkMjjbcpZ&1*+=+2G%F>#ys`@J^EEa_a9cAHPe;*bQn%rd|OrdbGRzf<5Y0 z8c1r7c<{(6eG?xL%*g|(KGLuL{L?@5!5{m~mp=06=vUa7Ji+SgaB2Dc&)bQ0w~-cg zLXQ@9V%-#{MV(le=G2+4Yg~r$4RvW$tkXM$a-~b8lzgkf9?f)*5!UWVSXQiAHuO?l ztmsaYsmgc$M}+jA+X!bioqDCmib^-E2>6s%T8UG9(}LQX*N!MSmv*$}+R;`+JHi$L zNjlSS)%6k0h6%JQ96M^65Rt*ys(bw&nis$iwFGe07v2j3coE^T@D`fYb-9zxnhEv5mc^$SJe+Md{PBU}$|>_C6_CA&915f@D^60Kknk+7gQZ6$#O5 zRE1$euGk4+Hc=*WeC`_>bFDut#+gDMl89}UItPq713f*W?KsLGk6>VR}KQJ zE?RbJe06xWXKr3EH*Stf4y=)vK#1C zAwbZmRUNGe1DE$UXjFXc%rBo3RVak7G>;`L3{!-HUSFeW)axVkTQvX()Phixd^uYF z(58I8pU@e(4? zk?hO5ZXC&;*7d-V>?vKZIFdc7>q|*KrE5XrDqW|fjLKP;&CDb<=K9%BiZQJCYLuWW z>s{CTl&PHS*-rGaO*Zd>IahqHjM{WH_Ykms+MFmBb2R}kVnQOV;U0yL-~w|H$K%s3 zJD#w2W^z1x!{yV-xL|j+G~^dDt>Hsfq*Zb`=3rgo{5bqgJJO1V}n2Qt6tLj{22N4>R;t!i%i4 zU;cIRgw@LYNT!F;{7ZxnBl+v*!^?SsLyqtH&}tC256eY0UNdMHVjnh_(KkI$WtwVWyPiDgvwwndyBndEJyPP zI^3-qO=Zgs<+&vr`!;zJ!aB*f+}k+lJ+;e zua1I|45gxWy&vJ|lDnZN8)NZ~dMpZT<>(WARIDLxs_GuF=aw${!=v_PeI`~$H%4x*Rd;ckmH#EV*d z*%1U0*EO}o6%UEEKD0&j`>hCme@*hUwtx zA<&3tX&v2MF2zs`5&XjmW6Y+S0mlnlM|V(14l2+71vM!=xRO3%mg%c_7aV$QsriRsk~wIqD6>vJRmuZA2O&vHq*?- z9{$^<F$s#0toSwJnzuCn0*qOH_>Uc$>>v^tV3{0*dp56>8K@J zTtTxuE{cE^5UYZJ6GcpQxnKd=?gD=HLx4%N+4XJ+Tw?!hh^y$@-ls$|x`S$y*fvtz zo`5h-j%#I|Bgs8AN~M(-+E>(Am?@e)Fy%!0S=|F^H7w~O5s^Wu;<)^T3{$edWRY7z zTjx7x&g8)eO#}-m^}+6g*20Q3CHkkTU%-G+jcipqPgAL*x%U=1oKjM!^ekjo%OUP+~^*-#k1c1 zGvy|ucgohJgpINLj(b|M4Gq&uEA+`*t3sdPnL-&&$v#a9gJjw*;K^degh$mTzz4dm zZR7P$7}~2A)f{*VnXd3>!R$r+sln}AVrQnvRY(B@8=ElLZz@T+50GkEv+!S*LGL7o}abUVyrErZZ*W1iI0uPpeNExC(XW zFq{Ia!&j<@){GzS`f#GE9^g@^*{Eg zS+T}OTsQm>%GPFAkjpp}T+vpF-=hhK(7V=7zuN7kT0@9uLuSBr0%s>5D&}JJyae8Y zh8B3X6GYXU!!0&*weR)1YT9Lb;4t{qX}^tn=qi*&Uk5ncb*eG5($0!1x^$bQt?Fr1 zCz&qW5XUGDI%SHIL{Dwa*j_TW8R^dlX`O3%HV%7RVwJ*qAldM16hU9Mov285u{Ly_ z0~trX@ZqX-L4Z*k{ov_V0^T{;g(}r>bLv4V#p#gVv0bm-GQD zvg8K|jgl^xut!z|&7F7zc+5^;j*8GuUriuU1M328GWvAZ$!xo2rKZ$*bU?-2(JyC0 z8n|=3ib9<*wWg*JDP1p?8&0`^Wh;ra6Hrn6vK7iNw?|KCQuGK(_(7W*b|y0#W~|24 zrfgGvHIDg?Y3)ijAFE4N(>#Kg&}(C|LrMXgB|(owm~jS3fp>iKt#3b`o}Bh2eeG@v zyY3(VYWnuqLyt}VXtQwu2`ELX=vWlD?V(m175BS)u!z&O3AugeCwML=EUh<>@RTr! z=RiMhhib2uzZVYIRvLryX}fvW{%UcVqLUxks@bF2n2k#A(Zh1muH-%|JVzzwPO5wI zki9=F|HIoul43&J;d(^C?p2L0Tn8OGr`QjS&e!}V-m!JN6>opH)4gN2L{?@3D6XHoL zTrh{f8Rk%oveCI`Lg!kQJa@iI-~g&*Eg;z49}*VrZqN(vqqA1Hb5E!Oq;tMnB%=>? z{#)1DVaDj|D@0ZG`~8If_+Q5~)<6G*#vjym*PP$^YmK6L&DoSkh%_zlve%+&-UX&n zs`Aq`c&!PQKVh%M&~@Q=<2BRZtshTYKY||45tObu-)A51U935qb`BvtPtEz`R%h>P z(VWeEF$1nKhUcp}|MmY*Y&^*?@aB#aE4v0udA79F?ev!VOG``1Qfdfrug>!-C?6rMi4i}kl+D%!0!ghQHJbBgfkfLWlq6Q-BEHdHDl>8HW?OZ0DnUZh+ zXcMjH5YbFHGbMl2UWo^qwoIf@Bg_ozx;IahGo-nq|-Acr;S!d7lOeTOdhSy8uiYb zjTZ&^@5?VTtCYfcQ5+l2B1tBZC_sgI`m-kElGT=$&ozt8@79=MgO9Yv=Cq4BI4gTn z=ikJ96Sl15dN%Ez+R~%^LgsUx`Dms%!gZVN)G*uK{trHX_dhLgE=Z(R>h0fOq}@tv zx>9!U&#Ax5<-f3N&`KZD&Ez*+RJY}$9kKG1y}T6gUP?uNMuTkJ>SECg>XEQY?b4`RW&DLms{1q z7b|L_SjJ?;m|7Lk2gQokPgf|?cdNx<3PW5i$q&!!P0{BQJ;#WnW899^1M(`Xcgox} zx_P!j3}{jDM2I;IFASCoo=NaaiTY)2%@3!T8%xK>qO1@XZ7k`wv9w0>_q2k!pxZjo zM*G@3VZEVaMY`eJa%>?4SWYqt=FBynWe0UGEV-vZB)Lrp&ftR zN}?9-&MXxzc4oZ~r}uUu&~O+1a|?3RupnjN!)|m;PlxXOku^T5R9QK&%CA`Sfh^rw zdh!?O5n-;M62zy8mhjRtn0!^CiK@Hp%|NrfX`0&mtZ;Ajrfm80qgJ@5Dg;&WtyIz0HU<~FZQ^$j76s9DT)2aaKtGDi#RoBTqh`h#;-g9 z79X;k3s&oYB|Z1_$laJ|uR_LtIz~1REgRW9v>4fTzg@RD zS!dn+L5ooA`Iad$G#uHb&zo=n>2!tBb(gO=miGGH!O{@ebg<`{8bqC?*p{EF!@hkl z+K2(49nKQV)|A-JeicXajXJHgVr?eVez{(q%0$SdPNFz9RAxJJqrO|{>;;(6{Md+P zy`pmeR#x=WLt<>EvJ6m zMD3C6VO^h%`_u8E@+h9-##-_IK5ZD?E1&!&XaOtk)6^&!(5?^E;O^aSz_J5C@_k41htqP1 zi}f?=pK@r6sXiM#-e<)qGQ_U;Jay>O%{Pwrk) zQn3i;@Jh8g!OMZKjfANSn-;trPDg8oQ^=)FUS=sgx?)hX`*ryJnBcj(~Ma5VjIrGI6WouFd;xk2a#7Lj+LNJ_JoMhS!i+~`@E4R*vh;jx^CJbP{ppd>rus%JPTrvp~R6pR31)etfKJ0I~uVo)B?||U%lA8 z?7wJ4}W!0pb#xf(pG0k9Tp7b7}9YrjB76d1($_^z`8I99-MI#BT#!Dyc{;X652hY|ZX z&y!;X&@{OZi-(c>h&f!XDGGeZ$oA`GL-7P|OEq2bq-|{ITf`1; zCvK8@br55g%VF#nE>~&c)D$7-At;mLA;`7z>5+(^wknqK6)T~os^m1wI6{IQn8<0> zqc}1S6)+8oIs+4-oZ1-8Ms{z;QEXh#X0sKY%r@R74k2dZOyf+5NYz?kWNmyr`H0@4 zq|!~!4r_E!A(C7I_JO)s@H~Tz5O?Do^&yL=Tu%=P*XMfo&?D@~4KtjjrA%+EYjuWv zaw(l5fK=wbIMtV94kNMcbpX&ymBf$d#AcLC8d9P3`AAp zDR&UWUy~E@*S_jkQT^JeejToUT^)X54x2t<$AM1BhOv3iA3u>FPbPotIxI8Hy5t_y zH%vAh$On_((!xG{&^j=Af+Ro6XWj~N;a-r($};~B2sVs7JV2j}%aivz>u>i%6c$E=pUX;#|ma5&MBR;vbvU?mCoidAw@NFp9e-i4~dVQ9%a zh8$|xDYx*wpkZ-FutCoYqLgZ|15GpvTD~PKt{2in7p&c<8rFVXDb=vFTPdPd6Wd*6 zHnIIt!++;htqz#F-@rb#ei}5Rb%%v^l~EIKKw%}I&a z!4Y@pib4*+m(c(f+2M*qs05m*5y_DMyu0` z{ZP101za|$%a}-DG@pNHtD&ttrn{s08R3Q)N@O=QIQiF(qcE1y)ELaY^oKXZg#N2= zpWlGEpqWtm;rNBoKSqoQ-#&#!n7RXt$QU*deR?#rjdA?^G61P@*o?SG8MO|~ctlqj zcY=cE^MR9exO@qBO!MRe-k`W+nQ`Ex&!d$3O4LD0WdpUMGQ5l87AlBDu1UplBU+#c z(>Z!<%r1@qi~v|hxPx-})ytPs(Gy@CTzVCUqqiMc>Po~k$TR689QrrU}+6ULmHVyVeynoi-`(=<0URab2!K^9J|#t^hw-t@}D#4>3bo%0xM zT54{qp-iGDHHW`N4&!t8EJsx@QbV6ZCRVRrY&A44Te(SXCJHmV6rBc%%oNbKQGlu9 zXy6vD*)nEPo@%^ga&@yVU^Zl3$^%)N5iRU6rp zBUcli8qGKbuc;>J>FKbc!aWF(xLBxAu)vqKH4MtILq5^%GK(XYg(#9*vA( zcKt@EZgO1Q{nJc)=_4XStd;H&8fufM3ei18xh)cP-9s(581v8(dAiFLo~HI;%?tEngMLZ=f<*DSl%gI4U*)#33HAJQ~9|d569|!WMN8zXdXixbe zuQm-Ra}CIF3eN(PqEdmJ1EPvwLOWdc#}{v zkL6)bPXSR=I9D7)8K;gynytcnW-ok|bhzS$HJ!tC5!a+p)$lj)uj$vSpl-GBBe1bt z!Eegcsuy3u361)-x40xUzpuD7{JN}oLHM=5xIFxVU9oWpr63`=67h=0J<|wKZJ3 zKGBB|3j}kH_tKuJU3A#gF65p>tJJPq9;mjL~&$NQ|VAI|EKFET8-WdW22tsbSeu#`;eAq?tq-a^*ED zB=RY*OW6KS(R^(mY1f8wQa+OlQ@7Vfd80NL&EB`kN87cip=Y~`YoWYR3kkcTf{Nf3 zxim#QqC<*~F?F4sq{#~Uu2^~$7d|F`(w{uk?u)q(?QogxBRa)imKtJA@zzMrw7r^b zG_54kv>|Z-9dVPyZ!Aa zurv_So~*Z@Y}Ag4gVhsB>bqeG51Q?Swt_4F)oeBBl=oI7L2lqDqLl!OAj1-2$^kxd z5s&ycL8kJyI}`1pb}FD-RK86)M{5`8Rho7htlJ@#0*k2YlXsp3aan1`r{DP9-Qjor z&NCK(KP?}UZXVCu))XNyj9-0uT1uC6 zPIvkn)J*SEnJ*An*^a80-m4aM%vs|q8j1!QZkV060!B2_MP8kW5kGUQGd-up+G8ix z<^Uuq-CW8=cB~ZFuND(z=E>=KW%7%PAqvYg8_7p>S1l%7pwm+XVR$PLIXIA`P7W8r zTNw?XmX8nx7ZozD%}CvqEq8I&X4sG5i*kmMY$I0d)uttQ+fc&k6I zsj60i9&SzC1v+1SzADyLtIP)Si{?``z6e_#GE9_@eYZ$wT;vtk1foPV7T217*lnvo z4!s8KzJaSitKx>eiUZ!KNiUCvDSX229{w@PCO=>C&Wc}NY$g!n3R|r0{PyJO+En!A zhv#KXq7PkUUKV3A&piy`=sbJ=`bI)*=0zS!3>*DskA%}tWRc}4@w=vERgfc*01)H6 z;y4Yn+LD=*~{V+4B z2BT@1p}c0Rg5(()Npe~u8Tc#ot{_+SHQk}FwZq(BrLX3=^}g0mV?Ql8l!y1?%c+LR zh|xABpr1s;59+Ruq#A&ppdy_YzQ1+@TBzJO|u*rNIiri(T4stE<{ggyStqo zZ2Bv!^K!vd0dn-<0QD$JCxOIWXGL*HWQyBDnB5!}m}sePLwmk1G6lzo?sHS{HW%I3 z$B2k*!ve>8XCu`ip49kdoT%Vp5U&@-diNEk{yXX8nB3<}c96+eWg84FnpF#cX? z5V5|C4aOM9|IGv=!!>&CP7~uBIFu~{Nr==j$5dmy(%Yw~iuK;yC1_dEutteyox4vQ zkGS$ggQW6!!^B3{q|ql0(eQ!r-dLv$UXfF!2kVJZ{fs0QR)ZAN*|*qA9klTBM3E|{ z@^Kud9jIHvjjcJO7|{}j(gfSPs4P;_f8jYygEKYW^!(>;cvDop~1t=1g$|tf^ zj&C7y?z4BH#KHw7bcz%Sv`S#6f58b=$>ht6p=7OC(&L+5q~ zNO7Dr72mb}xmXelo6r+qX{hiRkA@at^kiG~oCSL6$wuYTuovf5d?Y}_M&k~`6VKl< zeh$aWF!XPyK(81-cX0x}6v-KvOT;v9l2b{-SwR&Y)<|8Qa!NOc5#Fq(zT}i{4kJBj zi+VS|oiPMhR-zt~Miw^YB;+nS$Il}<>1P#7c*4d4%pwD*MI&<3*D}QGOipULt2Q#@ z4bZ|u-T*DMctadM&2412G@j}HdI3fjt8iI>v1J@JTT@ecc6?%85+^ZZsd5Yb$ZBte zxZy7UHBJiK%5I)@{dL*D9XS=X8>3&Y-!dbf-eOe}mTfu3)YU~#P}*a)3@`7Xyx|0E zyIswce9Xp;Iht69xIIQ6Ve_ke+V@X$9SgyC?9`TYsLr=wp+{@boOrFc{$0B4BcEIU z0Ff|z$^luFy7K%RIW{6)ILNvRmt!Sd@9V@*UpmmC&`#?x%RNW4*K=W3UuVqElF3ZU zhwuI2{%e8fM5-!7=8)gC!5KJ8G`MQW)F@s067>5)F`1HnlaY^AKj{bAX=1i~U?wH%Z*!XlOQW-~iMa7Z%wmA5fJ+@GDhM~&aJEqVmUp`u5WJ>gmE=QhNS zaA1f-93KJaf~)r0hwo2d2A72=m3`q)&?_$wPbzw0+79Gr?O?1GM#W<~$d77;XGJpC zORMTuXfu>m3kY3Rv`IzyZ1(fempZHY;Nb)KSI*)a){Ejq(gtYJR%`5rhHSmbZfKz| z-PdkVQf(o`ZXiA%4_q+501bNC;kxYVSax+RTPrRBY|?V~NIl>HXS>)M)1@VAar$!| zd9!$?)uw$a)1O$TW+J%yI(lJ$7+}AAgmtPeub$vnh%up(Q_S8A)W`sC4kle<=F=s` zUg<%5eX+xV3APt0>Znmsu~tkbUlc_bUA8|-yJS;UVMx3tYpoAX4orOa!=d4qNal;k zXrp2ceQT~y>oiABhLLmxuf<8A3Lv2zH{UU!Gq1W*{7Oa=>x>obg4*WJEw|td>p~+o zqpyL}UG;$c6V`*>>g%pzcjFLt?S3-;vh4hYg-&#IqSI51j?v@?PXY@Z;{!tRgOfZ= zIH=JDg0uoM%xqpA6AVRpU>G{HN$>}T&pdDy5;_%Gx;*i!j5ua5vN|YcFR1VEa>Itit4-tVqDy8s6?}Oh``&6P!Kg96%e^ppjF`oRj5lz6QhPA<&9HcNI zf^fa1LoZ%9q1v0R%FqBck3!8Omu7X%^uo^jXxFWkG5N-|sJxX0={)-E$Tsw(9NU@I zM|WgiLH(?4Uk!v7K?P@Cz5NCfGWMl1&`}ECZC!uaJS{7%=Oxp1>XY zB5c+?_2%b3nPN93mt$XH$4J+-U|I!^Jk|V2?Tj``!_6gcT0 zlzM`b{thmMPC~Xfh>MFJ`dhu^M!zUHmgOh8=WpQ$UGtFFkGu^MXOb*t-ivvOAA!YM z-ycMVT+1thk~+?msz;9!d-i#oc>_mSrgzP(A_uj5AUjD78`|2byW}qJ_F0Fhk+u#b z?2%!ofT>$B3Tr9wmSAkUQNfclsj-|T@d;IypH63Z>o^rw2PZcSO&;w#nk<15s_{Vb zBDUf167L4f(yFK|OIwwY4acf3Ag|3ho$+U|J?xha@80CAKJtz1>cyUiSJYLQ_Siuk z6VYiit?Pbfp0ZR3qHA}I_S`0u-?nNoB2P@^j)NcMfgdP=C)}B|yYa;P^CQtW7Hx!r zAi?uT8yoNB-)X1-qrx6BZKoK(G5MYNSbB2w`)T_^J^n?&H?L&_`0lzC{vfm>X3b<( zL`R06A-DV)DxQptnIl*mBT@3S(ky%f`Rthyl4J2qTIg)KLQELMiV)N5MSv|!EcqSc z#&*^D9fD@5eujwYHw0LxSUC#)fV$9;cCyKWqqadMr>Lw~-B1?+ZDHFFRi)JpV#?yb zB4vLaFt&yKCXDgM*K0(-22n3sBRcOJ-~x;{xU<-z-k9lfD~6`jZSzzt(eC`3vk?bw}FjT}ooH$R{yA{{ur8%Cy1rHW(3R*_Ruypl` zPim$POl*6Ayx*ThRVIMKfs(qALo>%=2WAR49U|9o1JB+NU2kO9F6ND|YtF6MErzf0 zMp&&Pq48SacC1rN|3AdCv3_?lh znaGzXTh@z0C(20T+{sLaxkX4T?2ai8GsML5n|Yj^HdiF$T`TO!7mIaMOTLh^TI{~L zd@F+iIC+^{{$+X<63Q`RdJG^M9ZHesIUSxUS+Z7$?tD|R$DAH}%be5-3%e_0Io*12Cs7qRKgoIO1em0%4uULl4 z1*tK-8`K!9qEcgU?l(B`=XT)4&)vJVnUvG=?EARZkxNSGfRD)W3+I= zYJT;_*`{ZpjErVS<|jtud@HK2LTt2G(_#xwVF;X!CCG}~JrK&ygzIUpJOzYDvinqK zfCR)1hUa|F-{N@`bz)C95woYS9Jyd~{1!R+?ukJ}DqU%DX+FpvR%rTKbB)wd^7_R* z?gnv@sHuezbz4P!)No)&SY1oMfYqb)H3G}}4YW?F|3K?+Pc+aznps0}I~}%2m3Cwf z0lz~%QvT@h4E^ZR`fi)9b=gr^3q%OQoUV1Py_FL6d~_|m8xa93T}$X?+AJcK(Eb`n zE{t$%6>104_6ai8xoXO^wPsV%4if{r+K5UJ4-D+P0<^1{a34>w!!&>AV_-1bwjFkL z(+>MCx5IW~U`|sPqBlfHGFdH1x|!t`gLI1;#`44Ms9-)`DVTqmrJa~v<}7~ud>u<< zleI}HDpbd$nlN*q70Rg+=9x^v!W7U^!FoW}96PXqhb6P6)Qt5dDByd(I?7{ArzlBg znI*X3&SX<}njv?y$rHf}%4BKjwT`%PCa*tt%vHr>?ED*o+oeZTK_XQQ{1=mY-{4Zwl>cC=^oIhewkVqA!j@IpAqB~hMaf76 zZQz71O>8(sHc&LOX&aVddF;ieV4F_CDQtqQq4li8tdU*Df^9m+u4#Ke-{0??)7^LO z;6ahHvJoLo_dVTx9>4ebo!|K#0oO`M&;Q!9qE=p0@Q>#%R$gKXR>-`q>+@JeP!V?* zTcdeVB)6!n`HG5cdmw~mW`yZ($mThXh^ERb}!eWAU z2QFand((?1>$ape`3-pw;%`MtoS?Dq^|k>0qB)Cbm`+3&mquH&4ZYvArg9gp9O+dJ zGz~L&Cwvs6ts2K2+J?LvY(o>;W*e#vo!DF{5RgAl;UT9gxd$>Vk&fv^A|IS0kf7aVK7 zwIB=nA|AowXf8#xeD7%b(U#azU^mrf$dnBp!0&kC4a2$~xXKd(76pGe6Q_4Ww@s&D z7Hf$KgfDXA#Ht0eY=)1!AGpD%Ht?j-40hcLBI52!q5bq*@_qk9J9!;Ks=e|O!miKbxMYZjpuA!VRT3T& zU&`P2aQkW(3^6@?d{jG_wl8^#zkwhsYs71-)kWh=d@37rE3FpW0g%_~NB{J+#040!O1vK|t|fzpW((-=SJb>=m3G(CgI;?dC#IybGjmC;T! zON1SPN?Q{B5qG;Ak1)wWxxV6VZ{v|IaoZ#A_BS43kl*89ad&TgB(EgfrI+z9NV6@I z<18x1n?1_VjF+@MuV7_ESKhg(YtW2qp=>o=&vNDI%^sTZg33f_Mh1hg3P8|Iue{zf znQgBz3K1t@7f$KS&7PS3x@r;e(AWF8eW&gMlC~5aL>M9)s_)*(_F&NhkjL*}bo(5+ zD6?X~R>famrfq*TWRK52YJzeV_0O?bXdt76`)Q)MPl|)5_e%hI7kqJ_vU`iTxpQw3 zw}tL5;>OXP#g3qKdekk4ABuIquiK+LG&sPlbtQw!;3w55Ilk?u5dgPN3b9UqBm(e9 z+{K3dkqE#aaTj-Y`XdNHXMRy3cd_ICNCe=I1m4tZItVG8#>6?4ef?{{#=#+_EKc8{ zV+VBZD8KQqIGq7H7ckFth^OFsrXx5n6#FVTpX&_w%@y|x&if3`AY>_jryx61VuiAQ z*AJhvUq}wYzKQ1hihD!P_NN`J)vnfRr)!TE1nqMjqATvN59Ty0*g!k7qH=G*gaPn1 zZ+Nf#;?zVv%l?WyEvlPP8TBm*Dw0KFz5Rmu87p|@kCksp5VP3ttmGu-e!TC=a2(VA)5oTc|{DfJe1x`@=JTG7K)XWiA!0-%aI z=<}&_xP;*hzSL9o&#F&c>-+(>F17qa5~ITqEs-Z3g?nPxK zi83cGWsL#;)ZvBB+2NHxT^%ADs0HeC~o{KNk;#QJBzo9LL3<>H78Yg0}_nt z(o`1e^0d-~qApM9$~&iYjXUx}nbfSFNyT!9LS)*dG9Nos7SyFU)GZ@_4X^|B5hg6C zmq@*C>hh}kBif{|v)qCQe^c+VVj`4jnMAg4`0zCX(r)6}5bQ5>k!xIE>`IVN6D*Px z=7p|Y>n6ziCdjeX$gt8=joVb?tR$}eFomg3B!xNU>J-3LsR!z+GtSyD=1hcRG2Gh} z;b`VDg(>znx-BBvgK$ET!W_Y$nV@h1GV1G@NnC$s-PALXKci=brgr|!l#reQ$L)GH zv}YPJqHpwY`%)lKxi5zrwsRgH$D;a$`_dwx{2A^`gMTK33;3gl5uF8hOIXrrsd&3s zljpW^dM5p#E)3o9gsLo^r@h8faj#sn?F7{8h&-9ce6>wkcS_N7N!E#je225n*YRF1 zCL4phri~$n;w=;jcTF2Z4CRlwtN15CS7yDNAIZirX%BEk>pbGl=%>b7o0uOg192Sa zxcPyB6U`5Zw4z$f4>ERbgHX2nd$mO|8`=4+OFj#q6@}OhpjfC2O0V(HdSLyWZ$LBAY=KbrW%U7s z;@b!{G3E!eT_#L&#Pq{%BBmSBj_J!h>BH?%O4pWHEs~Jv(ApjubuNhj1nN9i55WEJ znC^3nS%Ia}PhM?J!cFV2c&;{sSDVA7t43|UjTKL;mZ*eorWMJ$SGzE*zlo5i;Wq(T zD^o|^88i2X?dpieWkOnVFPDjI8w8JJ-w%*-3(?O87oNp@=GQuO8h;sa`wNM54eef* zOkt&a4;A5>bg4pJOYO%bU+nIQhua0D3oCdN)q4u?^RilfkHoUru6%O#mW=+#Qg7F= z%eCK!<$8NM__f+FUXJ6?0mypOU-{MQ6;<}mMrF6I2dRRB}$D#Ju^>i~lY3I|U$ zWKSa!L4#6Hpedwi(q{%4ifT0(U?_@>2`U)K0p;tR)^uEIx}2qmR6}_ii3Pr^)ffx+ zW5P8tf!tx6V<~n;t5kSM0{{_p_}yYg8qnSm{%mzhZw&rreGUMjbvQ;)4sl$KjLf4P zRm@8NmTft9&aExdtT zPqv2IT-R!g^m_%d7h#dDusq*7pF#Q;f3)Y^LV+t+V+#Qlb4}Us8v~ySP{@>w0l4DW z#XS|n=`>pYN44>xm_Z5zePO_?p7uh|0ChI9IAmq1P>+;3*tQB1ej;h9XaVGwg>Y&^ z4<=qiT8c{?AjRvdG;9)T)M>uoba>^T4mvuw`1ohd*?am#l-4arG;k>UV_Wj+0%-rb;-juO z)M`wO#7{88?)NIxCnS!}CX8TP%Vs?nHcS#cx?pV_b8=`7f5#?+euOjl@ zEx`vJ!po*f(h8nB<=_A6Z_jBTlh)MOwKcwvi497@p@jyu`~eeLlA19rb9A&OmG-BRmiIJSv-3yzoJHrQr6 zDt2oz5FK}mZI+EPB7+ZvL!bEz8s~EsNW+X@`^qGBy}4?}-$i233?f^};sS?si!Cbjm8Pl{ZbwOJrF z=aR%{iHDgU%k44RSv^ZU520Bg^)7oRK1Q|>A#^pM4m20LjCzbKu$6aKzp$itRKEb_ zHvP(cdfZjy&#NsT=#476rx8ib=Elk@Z>JwJ+0zf~d2pTwxH!b$cv68CH-)sGZ3byQ z+YHirc3Vh47O?y62I#w?ZIEJ$ne$YThP^c5uz4Ny?7@7!IN@kVF4go!6Ao=GLUGR; zXNWn)(;Zk)k5eQKbFtbcx#{E{e=`*tOlTUm4IMW_MY|8S3ZDeG!@7VOrePASK4DSH zJ#IFQ)NC?bjiYN;>!K(;nyhNj0%;})6tredps+Qz9ZlQcnC`SNJUW%(aT3F$b3m0~ zdx^A>509}6_nmCiwfyZ;1Rzce?mpM)h>-bN)ZbFU9z919>waPy_-VbMqqHBf3NlXu zuVd3gBRUMA=>APaE}J4uO(fMSCB;HjTFW@AE%NIqMtjrjY_qb7lyS9z&HRM#ehS8| z0_;pW9ac2d;Rt6h1Geoj`$sZ*nScRA0zSM9{#KUQMj7B}S5}d~2S2wfTv}4f>|umv z=yVGmXD<%EY)VD;Kd)OR1O|mTm0Yu)@BqmiJ|tSb{s3`KM^&nz_&155r4 z0NJLZusKL7P{eD10jj1aNrn`^18e>aRG2Qbyu3!xPiPZS#GgiHyY2mLhDOFXRU)`D zwy=%J!C%;7b5M63Z8-W+At>cfBq&w-jjAe@MoraDA)sV&jIj6{Z}JIrCS zg^_1XBD95u~ttj>L%_1!7^C>OG74!sFTntF!=*c-s$B5{5;Kye&}psK)R(u;y)4 zo1zq6zXiQC+7ZkqwzFyFSpK&i+^cWi;M6+7aY6HDb3e9)INJ`Jp<6K|OmVi|@LYC* zRACBuHFrP=c(tIe4C^R(nQVHy%v>j~R35`_V4-qNZiC{Xd{tLSgLALgBL4-$AJMQ@ zb~apBxKeUcl=Nat{ES}jD)KmlylVO|2zD!P(La|(`fMpbCNB+*VX??nWbY0xi{4cg zl`*L+h)}bLLuM0;!)X=D1`J_q&AA=h*D5)tXmN6t+)x3_QQTR z)P@YNn8sJlR{}qqHur6$p0A{fEh6P%3c?%|hes%cl~zFtiN@)0)K^lQF6;G#mg{j zKSp5|@?Kb2x#Vr#`qN6v5DJmu+>+t!we-EADL(E#ol;*!J>t`1kj+?GuKJNE0=wmB z{q~GdY7(GZt_u&6H(i$iT{#PJsXzeGxY!W3$fp+zplODdD6Q^Vh@4F8x1q?kzY-`?>9W3giev`W zph#%R&Mag}p?PK@%E<{uLPih-JZ|g(a>i!I{(w|}CQDg-Zac{R88qO}Fa*shVw@`< zsVal~=JkPDhb9%_H;{(M9*Z;@BF0E#qAVf}SRxJ3%8Nl3aaWf` z-!iHY@dYWh8BMgtX`)rFlAENMu;HElLr9A*{8#k!GoK}H;FVAbrxVH3%P-7xB zrjK(?O@lr@Y(_6$Qe<%l*~>Gt45K>6wv#&kIG4h#7Ck@4ub_*c_Ajs&^+1MXuBCCd zA=7!rEK@IOVJtAyzWxr~3Nn+Amh$&M+-A5Efa)^~OzI5pyDBzOH0)4m&iWDo{kFoS z*Fzo+z%yxmiQ@YD5>+lor~%CRceB+d`~HtH#fbYFypI!*@uzd`4%uJYakWhe+1dwC zG0T~W*)l7CH5>fNaelMMOA~Lv+&-%ri+H>(Z9u_FRUotwyORoz@M6J>6rK!)vOnTK z14qH4-iJqB0`S?nTyzPy&?K{9F&|*ZMSKMJQ4S2Kp7i3AHWL`N!St^+`0OXtcl<9} zX2K!;5l==b2&i)83}z3l_I_y8{nE#Y!JqnoJR&k9R0Z16t5651pnU9O!rfo{*eG^{ zxn7aKBl|F8lA_Vy)DhcqIb~!f7Rwcouyirp}x+hf8%`Kncey8qVoBG6Y?%&G&U$j-){?w62P8>hZlEBoFM?b}% zw|y$Kz4n)xy}LgYtp7E=Kj*)0-2Vwanxa<>><4}89Kjm2ExQJ7UUVGg1Qe66i&uH^ zksmCl--~mptvm*owSuS7OPd+Q!AqLDUioK`N7_F<_97p$HYKXiuuoLC%hm18R(b)4 zL40@JltTEW%X;VynUo_g^iJrJZFqc=oqx>2pN1B=93!HK%g05^i}|v4ZE-!`Vl{#5 zi5APOZQVWB8qMj18BU)3i}uHKoF2E+KV-kS+w((DJ!PA=+PFh`ZMJ%CHoe9Zd+mfe zN#y&}{7JPDd>v}ziM@7QuMytzG=I`-#EgX3cw(otxiS4N}s8jG~yHJ;dOALlJR zl~400y@h2L-r|Y9#o>D(khjPY9LGr%LU@ZO_SVz9mFq2}OneIw72e{Bz4at0Kvtdu z+(v@rVmc$VTvc>3Gac^vby8O6d6h3OU!<6`PgD#gG09Oe_~Y*?=Ybp-A48&`V?A!k zEYIMHLV^yyAOWR~m`)S^31U-6x{(J<*o8Ztwa z%F)-1-i_}xTH`~Scv(h%&92PFpGb*R#@B0cqbTBj^%)v1?xbUwB*yoRZ^Z&}X&}ZM)5QL0};{RI%Qzoh7q4?KKM_7TWmh4JZ zV5%j1sVc~pvWxK-d)RF05*eEfe#KCV{qlSck8?ep59N;4%!FSYH7mjO8B-PfKE}eN z#;9i>S6D*X8cu5p22DRs6r|QcE~`py+ry*PF28mX2p5`IliYT2!f31YUY0^yRwODe zS|1rarw2&M_s%O<3}Ve*KWAh^TQ^(tJzBMRF-1T`RP(OZVO90&v(%uT9m-fs3lot} z`AbyQDX-XK+bE=+IZGMThxC?j^Q9b9JNsF!24Hfp$bHSe2o@&LtG=K1$O*_+J0niE zWRWqy)nx~?j$<4Sv^}s6l$)Y?I();9ceBSuYj8?rui~3IiT-u-D*LRDmVf3OMWq}d z@|&tp!?DlG|M^)UM>df^(ZKYL4GZ8dAA8UI?CWXn9lo7$VryrtHMYDAo^fO!$}ZDc zwfj;a4cedewf^_alkcKH`(C8WT7+M#x(=I_U-GU)t8W>cro*B8@nhu)@^R|ruY{L7 zn#>HI*XusGOL_c&?~Nwtj9NNGyMtE+76l30BN>iXDL28aG~`}VD0!=I33Jv=Er!=@ zVI*eh!julh?saiLJH(OwI^W}jGQav&;$b}rNNUPbw){e?K-k#A7@zR^!x<&kBX-R2 zE8{s|hF~C@*JVtD_y7s~v6mY0~c&=?(!uo4d2>0^4E~F$AvhS`EF`#?Jto*rHb=?NnDQCTL9Xl)j+&U{e&PCp^EfW){Z5t^nn~|G_b8`IDrv$$tFk^8jZB+k{3bzm;|0V{q zsCxy2R%g_$Yx}x<9Z-fX7uv@4>y*~FjYF1?wunRsWa&p_7^70Qm`AW(F~&7{xYgDd z1G8YO%GZeu8$Uw)W-F|xakL`7J8CO$nm{@cqZPbOr3}8oP_;xtFbjFTKFu)6I>Wux z_!X6XQmkxN4E@ybAEIaaUP3c~NUF#H6})P`E_Ft=4Sqffz7I(yE#^-o4F#l@q_Ger zLb~!$*h!p7)jToNc8yl_X-jOP<=SGX%JHf=jmL#+BDK_SJu~XmH))aEV6BiajZx#~ zXoybvl8+n1+Qy9~*C{`@aoj7Ed(C0oK!D$jK8>68g>r1%AN6s6*vAcd+PERt8R=jr z{Y&{mH*4iPcWSyP5)d%#d`n*jCGrSD`NMC7~hqCu$Y9QH`j|~?P=3e%F%Akf0#Yi=n$7lZZI5NTb6$y(&xvLhr zq;X>OG=jbyO_S7S+?SqQs%aKi_2vazgQp1&6XQUm35>2U) zrcS1^u}f%|9G zf^2jvbjju-Zro5h?J|V3NNVt)H!A^8NZbgYV&Pr$GfpTIx)T8qua45uLcN1H`D$G5 zP`2oAGi?uLhe3KaY>CbSXs0-?R6{+K{g*~>e;~>Yl_XA$uqjtoMI-IOHzKuRzNQZ3 z4pO*P$D3)FLcK3E>+LLBA7&@^VafVXmp)VdErxpa@D8NURDW=1(g#bi-a8jQQ`RY? zQbi@H&4S)~!FD_I=}$ zD+e;vM-mZKz^MadtD&eSmZlutw--xxQZ8mx6iY@ANh}4RLVZr)>|g!iqYF7|SWD%X zO*nPKY2HS_(g|Y%i7vP3Dq@RPfNWxw+tjrn08grG0T!pO1&!U5bmQcz1sdVQR+MwC zf;edjX%kVyip7xqj^kNckzmsRRB83EAi2s@BbROYLZ_8yI;-2nS|HRnO)jPWqt;9= z8KO)sX*^~bYxS1iFx$`~16Rg$ZD3X&1}5DQX6=GoePCE^Hn1IGU^~OWx^B2s2!S-iC|z<(4aHHO zkC4KIWeY!wHi#}u+8d`d8ZEVu@wUG(SL{{@dYC(Nda!?1>;@p)&A1yQ0Ba%&L=%z1 z1ICxBbsvMl6r>n)gzRY=uUSD7S~D_QS%jhoWZLkNh7O0}ck9Yb0;yP_x*eOm8=q^s zVo)5HJyWU2LV;0E?4*e&fdt-{RIqUb2&bqNWb97B9_{rARYB43)0-TnQUR3uuyb|| zyTaySKEwV|M&(%}6m3yioaA#|`VsUibqyUo4eMvX}&|MJv9W}1L-pC#q2$!{3-UsXoi+h zjdY&XptbbDg`ITBYEl3fT58wqe82{lFi%$^w^zwM^XuS49-!0Aj<4z-*N0}p@*~>J zH_Voctz<4z`K&okev?~GDCH$7Z}@~#Ga*f+<)^Xf#@IyKW=zJ9jR~c?@8K!bv~fcD zv`;9X+&H1674YJVsZ0QkYPaBg*$!<@>8BY%@Ju4J1)l{yjztS{AhJ4kYABf1rq@;j zMJTFg;Pzu~?irz_2Dc8U#t6}3xAi5 znp>A-{LU{bP0 z>4cXd=Vk6mONMqhQk-}}c9Gml5{1@tTRLDQ4HdVpkVsv=T<-XZwJN z7SuHVx&25*#Cm>!g=8)tgmA!{B1Kru`}sAw2R~TY!rzA|2@b>eYe`7p8X-5|XA6Qv zKPx)9tsb*f8rK1}x_AI##$|D+8PRmk>_tBhj%F0Z06mgo?T?w7XYU$L%QW7=$&{hX zsTHr4y7k(vyF~)n+jNQw)h$1v@8GEQks>Fdy!X8omt<=_KPWoU2newdEAq;JREPH! z!U10#9sDxl68!0GIpuT;^d<}D&bobPa0KBIj+*ZTICg;}kZl<(sr{gH<~9z5Id%09XlOzmv;@3KzF$Z}(@1 z{ntS*wguK+Ilwauf;@0^@J|gk^n8zk3|WHI*@StuEL#?=q4|QUZJ=iDPJF-|Q`S5U zKa_uf%Ha{{t|S-~iW7xtfkyPkH7=H0acEc0`w@jc@{(h7uBVv`Hqr($3*!AP= z&aeUMO(JGAN(@8-gQ&oIB`!)0_X&-mqUlkOz+2594Up7p&9W}iajh&S#sm~|mA@}e zG494+6uHc{=+ow9YPYNbn)^b#P_3Fb%m=1aELT^ibJ+2!^^)ua8H%iEpNXU-ATxQh@i3A@7NEH z+9gmg=ia-2VQw0qg0`ddre^R-wos)QW2{X{OOXRy#%_lTFzs?7$zGcarcjRyP@Teh zhZgV*gK|Y8PdqE^G2t*H2#|}Xet;**g?~i-Aw1;?svrnZ=0I8aSuwnDLO(+o;Bnnk zreGT`I() z@nOd+sw#5`9jF;EOZh#dHgW@u&S2N8Pb^qdXLaho}MkoH9g8akt2#lMELqwYo?oyCT`xED8xrj&b}80*4vCXozWu*i7N> zMBaIJ2OZ!C&%rIV^Hq9wWC(VRb2c%L{~E+te$EgMZK*cA5ah>LMhEkRSVlCzWP?Zp z!^&xM?knHZnIg$=r`pwVl0?5oB*UFJu*+*5$?enHZFj5oS0KJ|QE(!Wr~kMay_ z-uvSLu2ycF_*fM8m=@cI0*(12ci@oDNERDG&C5Nl<&#$!q7WteTh&ptD%M`P^ucpI zZJP+G3_y?V#qjleLTn+zTx=F*g!UQ~oNMJMmT4Q_0a_=j{xCZjxr<DhLXzTywMC;96jzkr*eLy7dlwrk6dGbu}(bg*h8JjFl zLgwO3f<1efca)syS=_agSlhNiRlT_u+Sc^ZCpX@Mb;2x+tGp|b1xl5}E4FP`q($>I z{b=i2X#O&!vo4R5dT^1%-x9n;)<%=plzb%~pcvbhm8O3{_XryquH+^93=KKp+LPnk zfnpf(K1(dyWXk$*jj7(FttgVzMK%jrU&Sj<>LOzwl#kB2$Vah6uXS4Aa<9NZYi!1v zO*!7f+>Ie>ZU*!Bx$sd)wr}iZyRp1IMT>1vQoxDOjGAlT2B(~kax~f8oTZf)h64>5 z8AeVM?$p@jJkXcsNK``QQ(jW@|9R!L__{me8*#~8;*aNzKO(!+k2~Q9OHX3 zEHG2c2khie5TucQ$VFtXFp>Ux4#{&Ox*cRUJx2Q8$tLMveHLEtk<)sdj5a|^r&llCW&1D zD^>EASTxJpbwgL6Bn_KzPjW58{QydQvvDs_Io_H711V`n<=E4%MB=_#$=CICTZ)1d zdTnBI;;>h+aZ++nXx^M>GaGr$c+hyQo#-A$bYAO;*W^}^S~rCb{59&xZEE&q`Hs1+ z6YwH`!K{l2>~DE4Nrx-X zf|V4R!dv)-t=8F%t=$q3nE=83mo*e>Vd2r-EVIqF3@tYEhHvdul@&Y5hRk zpVXD#C*nh$tb+9sIbXKQ^`F7AEqmo}oY%EK_zg({-l%Eo8t2Qg?cNavq4}vi1`lR` zD)U&@H$=0PeZ!3940&QmV^*i@wZLvN_SkVg8wW(c&`Aj6cXTu7%mi4gO90Cp2YTbp9Yq62f*b;nJC8hUH$ zkt+IldmNNejbM4T@cvZlk*U3@M}*s7p?b7lnR=veP4y^&U0099|FB6?k)3y5GnX99(IqJr^CD)#LJf^<%Yz$bR$3P2a z0>Qi*Ufs50!vK<5fROP^+GDq^Fsfu*F%6MzW$9iwv8^^U`)+AlHOxL*elS~ZKrK0(KSQ@- zTFS(B_h_-503>;|Y6_Ivs;qBRHkbyX=rsA?<=$k|>nr5r&B-8+$5cgJ_Zad<|;GfU$kea9L1bf0i*aG-K zd41|iRdF87;*6XYt0zuPEW=1;nUgWgd|`!Uahd2*^Xxsk#1j_=JV^|{Rpov%5Msg? zW4h(1apzO)5(1{gbFWm7?+2RAOs*{M%mC4?;_giRyjPrUcSCV0af|kY89+-Nh*Oc< z4AYckeVFEnJx$Px6M1DVO1@BzI1I5Y1o;jAJZk@VVg(!VSy+#Y=H+y`)=58@vDNO= z%6j9a|K;9pnki+M3@zATvjO0HAV9V0Urpj9PRJ0;&d`fs8Q z&MH|VIKh}D(q{Qs@=2JHQR81TG8&#@VoH*uc#(UI`GO0cGa^^~O}xZPJPFL552KIx z(?5o0E9a7r7@a47%($qh1%-f7tELE?OA;f%Xig=Hkl{iT+?bF*!1BGsSrG9mzZ(%> zd8L_z_VCBJS9(Q?P+n=4u$HpZrWT_S^CCH^1i^E5#B#Sh$5`hom-LIA4J1~D+DsU^ zRFaixW*Ei3bY&v0UTie##9A*lFRF@b?r8l)_$`1&Wx?W*zvPZ)WvJnfMx(hq8e7P9 zqIC@sx)53kE>wrwNal>$BNB3?X0+tBluW|bnlwpqS6OroXA=~2P?CVG-u?!S+(4H? zl^tE@8|YeXpzDBR>mFaRLn_yBb-+>OC>rS?8^fCHS3{N_pntSrWq4~mK$eKqdB6ff z{fot;3KGx*P!=EX3yj&ZjCY5z15_38-AhL-HgHyhnDVKj|?gHu$&n8~!r0Q!(s0xfy9!rC9T^xY7_r!X;dsvY8`jR~P1 zZPxsbQg!;#O!QVL=2?I)cXbr&t9uNM+!VgR*%JoAx^fLX_v6*82w7B4`y)_qF9^V@uV;TB)p5WIhb3!=V_Q}H`3kyu)3kMc6t zp6PaZ$+WJITEd(}s-`FW3Cf{4IQ zl?;1ZbUl@`=alP(7CAn+uC<2SbiLSOvy`?Nyd!%)CsJcOKTz&!G8~6Hl*z}Q%Dx5)?Wpd&5Ie^SD(Ocr$M*1Yixifo^>QHS zdbRIj4dxpEnSW?^*QhIbqM8Gy8e@jh^tURxZ?NSOQe`MkWaD7n8g}D9=?fQm^5iX8eGZo@$aI{=ALCZ%EtF{&qfA!WcKX1FDT{`38Qoj7hC5|w-6QgVDqVQ&R3-~2jqS9g zM=b`w-?*hoZ(&4K_SDEKS?F?xPNp+-OkM=MR7pV$163{{OY9n6`dQ;w2+9i4ZC*uP z$-(TB-B0q)V*VsEt1pP$-aS97-^Umam!}y=YseV_!<}63>u(c0_B!jhvXCN;xb?&! zgiKH9u9M4XZ*0XxI}~NjKvBDthob)7&uIku3i7j;YUH=qYnxYIh5LayoeErEbt=-8 zcMATjS3U;AYVaGnWmq*hR-94q+I{Lut!sO{Yg)^=kACkN?$my>9ZA{Y}_qT!AMG&sx=%^lVWH``C}WUdE_pQDadsA@#_pOXFNj{ z6IV}v4pSxTa=GC(DG`>&=ZU)N3Rjif1tv6-go$QihvxWj!+3#>FX-C?3@ao#8Sd~N zDWw-Ez&v_uxE5gGy8=Fzz=uCo=>ubL?ik081BuKf%HBu)+k>WkKv+qMvkpj#!#0*U zs{?W@ahAO!%(-$rAi>-mQqdTaz**QXDa-5CP`NRm-vK&QPn>mtcG2oc@~~ezS&9yf zJqc|NDFMQy5^e1@CaNjj0|qA)MYER`8`l-@13|o)47jc0r8f@*)!S~jGr+YyMh*ov znhTRMjJC%Jq3}Tbvt8KRULH5a8?pj2GG$gW#p?-{oRRLVsRx9zNliT=EHiuVD!(p0>yp~Dm0>=vYO^ZYB^jZhF(Y4c*lhe!bgF_{^&KuF&nbg>Jvq?8+kO>Z;q3AL@$PQdqtvRA5*` zF^lAujJxrS*IWMw&s4UIna~&vWMVK=dWWtnM6Kn;L23K9sFLC!T7MVhup^N7Tp(HW zwaHbNlL5l6;=xhk>GQk<%FQyd-XS_ngs7L|$u!7Tv1F|#^D7Aqt3#s+(!1ESJ|jRi zA0c(i=8LzAt=|TDB({!}LR;Bz3DPMLI~jCD&EL(CqZ?BsW2mz+0mLX4joCv#-)i$d z92cM<$!SUbt(pk3<{VN`af@F-IUOVz3RXGHov_v!+DI>;VVFd_SyM;mfAEQ$*;pyp zmU$fLP%>v3ggJBzZKuLd^n(o$S}F8ixTQ;wHLPGZPw^I|U$eBSPYrid2i^m`U$%F|Ts|D8bLyGE|4{Qt zkJ(?v!uklxJD^pxVwV;lTgAbL6o^&q(28TL_^yX^TwL)sJ0G-otHN8+jK2NjyKTL# z!2g6?p&Izcx2b7^%Q&aaIH!>hC}t>ga~3ONa&j?xSZ5xabjdp~Jmf}RHRUushsjwy=*8- z+G`?guWbGMnKDNa7H7F>(j3LC>463iVz+Vh7`B-u3H3u0Pat-?aIcPRzqO1(xa@k$ zT{jmx?wTXZdqdnL#xgfu;j~n^=Wh3KXYp2Mh0KZ~@|sgQri?`~+$BefW~)e=`*cu* z9FPt9+j6SF`;(j`7@TRLpU-6c}>Nj(|WnAh!ZqruyNL_`vT|kVgj7A*5n%eX2AAYJvs< zA3@0nA)_tedxrNF_v2ux(fs(NxiX1Oy||DW?TE?+#bnAQntLV^#H=-8AaS%ol0>F1 zZo|~UH8cVErski98!>Cxks*LZG88|03PmG;vF;*$%$*hHnS1Z9ySv($62Z>dB|C@g zs>#loL?jXs_vuV35MXCmNe?~geJ#K7DZEAHkY7w&LdwN<`4?IdJCywt%OS#B`@!rV zwI6Mf@RLGBd<44r2N})%LIM*ML&9nss^RyG?cpI^S+26tvRs9s$GTB_Sm=7OJ?sc( z*h&eAyGT%A3}IOWwl%T{U=jgn4|z2>yXonxXi?CZr1HrZt7}aGbcyJb6$zl{l%eIJ z{J0iuE`HYTUsL&t-@nSeR<6$ST#ERNuBhh~T><3tx*lSMOV>TDaOsMoKdI~eoFAv_ zUNTPUN;|KpzCLG6=t_#imvtrW<+`ryYPqH>`&q8)O6=ifT?zVpNmuPx*OjyR)^sHv z=YpSc)bk;5TL0lI1?oV`EbCWm7J@UXx?kH0Zv~_ucgWG^HrhNzfPeIo@D+?t%<{{ zFi=Y0a4nHql8*SQhOPCWJ6@fWg7`^I_cX0DQMO`meh{{J6!xG@hMKO>%$lyyjNuBJ zFVq=8Ue!e}|NqYgSA6tjL@+iO0rD*NO;Zq9QofvvWuL}f!uX?K1o zBX~{QB&G1U(^8&O_JvkhDb=cVU0<;lZ^rFnzFNJaaI(}2unO#hc>HI=zhoe+qUG}{ zwp;wef;kUu!Q2ES3+A~+G5nT@O+8?FRsunXky+M00voVN%+%()CtbI?LqyW}8GUDJ zg%u)?%iuN67OeN~M(5}OQASpDYUjdkYUJJC3@i!wj`1c=DR*HK)&%q2T88Dd&#Wyg z`>)q=;yL|#UZOf4aK*+IfSd{0nm{Ii8c>O<^c}pA0faXwe-uEm z^acg8J@ta#orhNR6Vwd8>>mq4+wD8P7@yZ<~IY0V}N~4_Mny_Lk||&ci|7fSpb;6 zCnjoI>ViQZ7;&C19+gfx>+%!9DbC~}zR1s*=F4V#e*CR-ag1QPA5qv=rp`KkZA=c+*7VwPGIEwF%L9%BN){c8h2{@_Mz) zcgou1?Yj-evyXiZe6z1_5sYVFU$K?w$zNNatb2DFizkUq#xV4}tJU>rqY4y_m^(dz zX&W(j*D+F`P!-D|@i8Cr@KDbXDEu zmRkxhwLIkRQp-c`2&J=-yS0{w+!1PLA$K1bnnCeF54`(<6mR!(Fz-nFW!C34UD+Ui zRppG3zgI!x@0fW&yX4U8l%H`Os8?WklT!i)bfKgw+KMe^X9(K6WYusZmVsow9QN?? z1I_Y-vHW1O{Oz&)?U66N9-7?2o^7=!MgmX#AcRrE@-^~Iyd<4Y(RtJDOoX`BhLtAR z*V92bdf}1{rch|S*vV=WA}?vg49iuYS@AYXU$(Br8fxg~>=IaNPB4|5s8@N?8gVEA zB$Y2rL(+x=^zDzSK%DC;D=DdUIdAL8zn`jwNSoICQZVq(_E76foAlz zUW&Br=#MQ52|80(gBIG({s`)<#AVI<$=h)n#MbygLfLpA!GPSUX{cvy0riWeFVRA{XCYASRhv%=R>p;M$4 z9=ATK`xWff&C_^5%)6j_CU){f7+7rdE&)>?1TG_Yl{d-yiHBiUJ`Ii(IVz$fMHArY zNU_PUp)WWw!u=ZW@D`W~6JsXM>nalm=!&z%CdfETY=VrlSY>FD$uXUS<@ zah8xA#hfK4b;Vh7LRXw6$92V7vdmRvufGN|hNqs|{bgpf7tI7iNS-(IN=$oLZ*U$) z!aX!*(&AdP%!I|2W|=__-l>0UP`+4|ffAyrAx?|tF+^DP5;QfrBScseDo=7J3gZeh z6(;o}92@9Zm_JW5hO#$95IHC-LDU0mCWufz^rOa$Xr>Lah_8d^-T2rm(+H{w%$p-W zt8TkDD0Tbx@>6}ToIw@fPd5N>`I%i1IyQ_s5got>F;atzai;JiAJR=-1BbpQHroVe zOeRcuTnY;2imt%{bUBo*g{!I1pgg2j)n)zy=HLKIgTFhR<^QR;fIg5sKp(7TkvbeI zI)ENeFTAh*LKGUPi{$-5LdcSQNb{#=6bCamz)oIh{o8%+lil;%=XJbhcS=K9E_r{2FC=~i-^ls@fVt9JWD#ZMjb1wO0+!&cgs!`fplu+YEwrb=)%dxlqh1K}`w=86Sn*Up>Lu+l zcAIc3YaX*|d#VYqDswrm6OQ!cq`%CZ$9^+w%GXJ*iBAMamVRC8j^-ZD&*>MXtc*~b zeIs408T%aXS}CdT>{&>LN1y$@xN+DE=*CQtmsbA@=@>DPbx-YDM6S3oVsFy5Y~##x zf2<`iyG;szgTYw;aH0bYLzIT1gE~&9*@MFo^5x61LR5ICJXcMv*7Nx>>U1K&3I`dKHx2D{u>xl-!N)M_*Ne@Wp)VY_36nRw zz*ChScicE7k;&N41pxb$L!ygha~<*CV*VUE-8Y;IK)OFTh^HreKJ}2#isd~gMJSIJ zs41Ka&?%pX7U78w%Z_#~KqR}7PGA?ICez2C7?9V}i2*=}RZ5Nqc-~2{y$Xq3vhJPf z4NoKFOB!O>cylsiE;l42a)O%yYnVMsDgu5Ocxf|EnmZh)*#w`Vj4vhHZ+ z(U$OJI5xlvGMGsx8CY{9B=nOE;In?g zs#QA4z>=KVNe12?VN6|QY!mu+x+l<=0I~CS`eYrpuJLyx9g8tGP_oYUIbTt%$yJR+9qvJTDV80^2HRak*gwizGX}Q?})x&JFJebpw52KxAvh}J* z?fp2l<~V=QD+cfzQ`9@zSDZsV%;)#BXNr8bx*M{WtR@;~3VhxIHPC{C=I%+9}WUjuLa_;%3iLTzpaTu+cV( zCp>gphxfF>hUwhhMHk1oHoA`PqX?}!_}a4=2m&V7K@=nHlI-~DToDVtNC@IP7at;h zF|B5zfp6QstTCLWa4pjmLctaIYjtt`d6O;eP6aMzw=%l$OskUI%YjvcjDMM5H*wrXq!9Y znJVgB4J?Q4qg8~bs(3_94+ts^g`Fw(b)^g#sx>0Mu!kFhZt#KEf zbNkHA&1n0Y%D_y=M^^EK+Z$NHR~S~&HNj4CKzcF_F{yFET%4?&8V*UET$xR2F?%EmaZ*qBA~x zsWK(|M~XL+{R8xCXc7Vcik-&TDX)OUnXrOskCj~5`(mbr@SnWgUTzk<%8{79Ea~M4 zEE|f%YP}qJ=;e!5xjv8Un7)MB_9aa7O3JlwOPI1xbEKZuFl8g+8NDVNmEDWvj7yg0 zSBumgX+odM+B67@R%c3N-!)UL; z@WoyQ!?7_|!)cey_)t5V_-VK{|C>0DK-*!|K^I8}ItoI0(q0h-p*(pOA__t|xCoYe zfa{Ba5FM`Z8JbFS%1bqSfIt|G?fs()aN(qhKQNm8_xj6oj`Z|1IXS%RQ1&|`^>ztv?~XR2+B>RQhI7%kL3t5m;6QNWB*-!&=kYyP=TqdBrMXItZa!Rk}%pg?AY?{sTFEU;LrUz#O!dPD`+W z+I>n*-nIa=cKwJYxpa873h6P^f#AESLS$K+xv;O0VPLkt%I?9YBHP5>)tU?v)nLZw ze!{dvtptJJU2R*{$E~P2)n;2`b`ySF%i*2+zT+-yZiFS-<{DOJ$7_Z-S34u~n@Bha z-4TrRha$E;#HVZZr+T(x&n)Y#0&3%z+QjV|7SG?JT*5#7k3L6KAHM zgT%Wh3ZtN6M-5m8l@(y=Dyvdy@&a4(!zfVE(AC6lGAx63@lJ=H-r@k6dt_Lcpd#2} zYx+S%#vuKWPc;324$Vl=H|pt_NSr7v3K)I97-MvIYY6ytKuY#{Ufhk~R}@q9)aW~) z5e*kR^(Xjh3pQ$K(ibMgM}>Rr3?&R`iy+`tF;+Viz<&V-yvy+!5VCx` znHI`aS@Cdw2GvprLmfP_t1G}!7hzx(uq{xJYD_aR*xE4wu>KvH_z1)As33M(-kox* zRFLShzkx3M60GBNX|!ifh>dh9mfVakjrPp%hvjYb20==Wd!T zX!DEj5ajYQ6Mfs0f?xkzVH0gekY(dIfMQP!n;-nhar(%n-05OxEaTl2v&nsRLcpfw z7#2So>S>YcINS#&7;~uGMlE;bc1PXK9qNHqTmnGYyA&H#yX;IlQ^< zP-lnSc4s zn!P^KdcDA&6<|MOLfs?0eUJB!yL)P#^Jk0c8Tl-t?JR+Kqj&UxEaz@&U?;nJOL@0-{U$%~3{>&|@a4vp4&9MkT2pTkR99L*oh zenKSs#r{#2zRJPVPYI|@Jo`g1=1m-F4;T7}Q639zQvR_xa;uN*WrNomOAZ?l@K}QX zyzm#^b}W>(RkfZ+Y(72rH-M*Y6N1|WPnPO{XV!qHfAU}j)8^LbCQMl=+0aAfOUs7s zBP4R|FU72u^ZMz1_#QPk%8Wp0TgfjE^uJ34!Ya&$+LSYm+5*kZ^P<<{In!#1xAZ7{ z9x;A(Hdg3Kx5NOmLJJHrD@K4pW`|pZeO1btwRVi$mPi6n-B3H>c(^639MYTCP`br; z!$6BGYirB+fIQI_$xen?30v6zj;m@*6q(ea&u;xuUasS=+i{eoy}YFBy4^}khMrMd zw5H-P#-DH&T54aN9WCgD=OGV%e^x~31bBUxwNnU?5pNG8hE5;M{+%Ge>S6hOJawpO z(S{LjzYqwkMyf=L2AsJ2T|GHDBU$cmbAwAjvml8pph)bEEeqRgydxoEIV7Z{Ko2@9Hai7VYnYNPH#}ZRU$zDXG#5#_%~1e+x{x3 zpXdR|p8P7J{vGPU+9c{dGbBki!z)q{7!X*Bcpj0FNijTO#0ai_&16F2YACvq)r{qP*pR+SA|If_S z<^PI>OZ}C}{~+`w|LOW9`CpAF$^VrZm;cy<<(FqF`M)~j@}Ci#{Aa`_|Gy*%Y$pH7 zj9_i^SAcBD|CO1#{6Ar~eCTOY{;$li5u&dkki6uzP*+p_pXgWeAB!H+XPHSHKwhX@ zSx3UXthWB!LQmx{gk}1b1uf9AhHBOuPm^V>a-4)-p4Rgm)TYTaJ*g~lnb9j4-YXc= zvXQT2U?0((hhzxr+$$Nv%~`Gm&vfOTS9J}s@Hax)dbnQY%2RYaxj7UN7y%8|Lo|Fw z*~`S~GYgn%Xw>y7jz5-7uJ+kXbyfF_$9FJ@p0BlJ*c~=SFLfTH#ST|#g>nUfO^VOP zh{0^xLX~GHG4)w^5Y)5{HRa2*M~SQg3;(1gP7=utceWqP?H>k?Y`eB)dM!PJI$8Za z!MT6m;Ll0Tt*ANd(?_vXs2`I?*2xbkbT3y%f5E!g{toOKu58&6eDTs^2Vrl~dd*g} z1uMGxk7BnZF04E6VeRF0wGop1&Kp2Tg9SBB8pP?%~nng>N>uVRw@;$~KBoZzLt{lcDBaQ3{Y|F7WFeAW#|g}|6umhCP{-gBb?WXC(2D| zn{XxJw4vuV{gxzZbp1=n7~6hkvgRGxIsK;JXSu51CWG`9+XP^PQdw{|=*kmfoXq>v zS3)fH`O{8smhL!w6754x$8`cqh_aJqj_x-7T_BJPCa{vSvBrC;QU6#zHXf%jLn)xS zBm9pus|(&po}PWxfJ-+W`qgB*i2>0(lt&_W+r*}pBwO9#Gg9lJiMu_we9;@bZpL*^R@6~lwuy}z_Ufb|e9&ha8zu&SLmhGFqq`FW$JXtR%E6K51rz*2LBC#|o&R>wueSwb z(yv%~uSdViI84d_s*p9@P*S(kuk7_T{aQh{reE<=HT3K6);v}C;!Hr{i!=TD_1PgT zek=V-LQ7X4reEtlR}D6KYIOaU`jvi<>sP|hsV2!==g`Mtny3tIb3Ky4&(OFN?MjY~ z4ce7q#0vdE<_oRCUtZ9tT`N>JW`b8|qlZ-5 z6;EIQmQC?oyWZA42nL&8z*dp8Yt?MhuF=a`*RHR}!#PR2UT$Jr68`&~BH7T8bZeZA zpxi6a(FFq?;=?o$q#Sgs=Eo8INw~GQ!Uaiaoz2dexk*3E5ICI-`RN>04*wl=aTlYJX1iD^Dbbl5F|U5-gpU2fa6!+J4N(HGwS7O$-1Q?ZGCF&{m60-fB6@}=O2YIaE;Id$obu1t+hz)7P2yB|>)faE*A zp^)Q?P7*Mem*-fW@Eu!N%j5_##(1$-c-CIK&~G^X&#?GF24(B3!2iYM@faVCMn3eo z4Sc&3Eu>UB9wDPN!`l)*_DR`W5X4+D8$G`&1C`$=)24jQz^+jwOj9Zdm~2;AQ`$r2 z7YZ;3pNpWJZWKjQ z!W^N{iN*@y4+`OxhK=03bC5XazF+qHxGc-TG{i$JIQo z%xN`mO&rf^-m0#=b3xazns+{wiU0LXe9s*)fSy$5v>@L9y=NI4N%kU4WH2-rNC}YH zxSS`j#Qf%#oLL(&<3^`qN>Omr#Z*-iNfCMpIiipe5FZM zu9hL3bwi+|@V{v;ME`ZT09oicH;TR*GcuR}P12+C5!b{u%lSiIDc6A1A&1@pKka$^7JV&1{lA~TP@%WkOr+Aq*u z+o@7s!{O0ZVxD>xwVXc3icn$x0jgMM@xdzcrc*wi6*PzKsCv1@HcJAXueaFiNz47M zhIFSN%2&d=wdIm2SNW_{^0BAjkr3!8W#UKG=tKF3dHAT#3+a@9^sM#xNp2+`K;CgG z4r36ExaFL8;?I@%!p?rzJ%Lnq^gyS)h$w}x34<=zxLx$opKl*MvclJ_nAswF2RiI6NOWakK;Na&aNBA{mhc57$A{p`*bE#vXy591m4Tzpd zJf|mzveg{KD$S5ydodqMkkAYLI-hGhE?XvfW$=#$LQ$nYIuSnMqow@0w(o467w|ky zw81GFC_L)GjX7oB@RT>$FjtI8B`qJi=3wcTGVe(dwH_9dYIKu zbAXzWP-)aWR2~kk>?=k%Y*bArH`F((YV5~YXlCTg$5M);Z7Tja)x@Q40>L`v{|T1> zn4isc_%Wj`Z?Z-$SPExpOl)SzeUGz>)9^vpgV|T|(bS`@4+-T4KV(QVXMHj%6HOFRc-`_B8s89_zuv3(Y55QUq?+AHI8qSZ2V!N;nuN`x|IQT=EIyD7D^*bbLbVdOg63R}M=nRJT#B0!~ zCr%d`N=5vp(>Cj?ZILH_P^Gfw`dpj35KB~JTc80qY$#UJmBU9mqL-0=q!@l*%7+{Q8^p!Dz$`cd#2#gU_9vQ(22X>xTW?AFZ=@-m1!YL!7NNNj7OeIAH zJ+z0>Hb#JGSl|gGaLG_EAQxCH)_!z|nM-E`Ib>T+v}OQ8#4+m0+~^9*052Z1RYyxk znu2Wb6@kX~QZMEtBR47lliJr$*Q^n10@~OLa+b3i;gp9Hsn8m!+(aYOT)+zo!3d{p zsm_uI5|%=h31n<{6UGxp_wM-xeFRb*rY4vK(~2|SEZhLQJI9XjH5ogt3ZBLhz;jk; z5q?i_jA_98B;abyC~HZ^|53bPB+(iYQU`F$KFJiOBvmjYi&+7g;}1+F>I;sItW?qj zn&G5Fb$LVF>{JdEqVjt`l zHAT9}Ot6U7kdMTa7yOcaMg#-jJkBfL3NH@+saFm>Z?E#y2$jCcy3R*1_}A)~@O7iL zK|NXaf>&Ee{-~dny};B^(w(M{Bqs!twImdc>cehSR7mz|^tD(=>g05Lgoi;Q)j=e& zlaUzY$7m@kC8_wYJ(<}hxY0`n10IuVNkQw_{Ht3BP*P{J~ zdbzG&54W*41BMh)FX{hz8C-*}J4j@jAl0yEOi`d9wEx{v8b3HyeUJy#>Jt}||Cj6W z&jd?QE}2F~Olj&*bIu%=r@*oTh)(8x?fZ3+`cO{pUdbMeVOgl}=K`;gua|o0!9%&x zn9-+b?C(YzQ&)8Ag4^?SCQ2psAC-GGB@)wX%CE|o%g5fM1DiC!5Z!4nQG)g3Ujxfmb$BP&8!b*;6>RgN&Q!GK0;YErEjcc&sMx9Pr0jM4 zdlefDXJiAo#cmWcDO*_<$7Pni!wODU z1)LSb8z-v*CA(V6PE-Z_T8_UuSfTZKN;yUT&Bb9jepeO%`$;*Gk;@*^AubO0c~(v) zXUfXCjXx};yIn0zAzfyLYu^UxqzY}!)@>xchfOtGH@;Pdj-RdTca<%wY%$eWYC9<$uZpJd9aJz&rm?gR( zl&lf1m`s_jumJ@v;qsgju1kEFAi=$YCGNI1vc^sGVdm3f;O0AIQ2`=Ov}c;YXyQK1 z=oho%o>~2tU<&ULJ&hAAfH!GMOm^Sqv{5HpYa-=y20*151mb;M**iK*=8_YY{Yubn zjGs3F(`gdzL_Uw&*Lj?pC3kQ7S|=EA3v!SKLY^2bb|FQPajCq zC+4X|*Eg4v9hP2-pPe%0Br$HVJ<-uNG%iTiL-?THSG5rP8OTlQq2Y8|%nNBnPCzp% zgot-QjPNE#pG=`X7gP8Uob-JrFO~FtrZrge8NzeWtrA>C-Y)-N($m6Q@~ODwKWTz> zBoqraNz%a2CSKPKNphq-+QLi}zI3b(t725Ln!7B(oq|-6Z%f)+zAXuD_QdBd)Gy{k zgnW4dHx0tw8d}SeW-#{+4j?Okq$>8=%Sfjjt80hT6Lo^~MDWJsff?~eR7^)hSQ1i6 zNtdbM@X=ydqu>#gV55LO75id|d_X2u5%tF&C5oTHBS1~SB2Z1hB5+N>a`Ki5Sn}g( zcC7x{q37XVUZYjr&zM@!yr@)$gl`w>(26Q;P2Y?$H-voe$5)5gr^ zC7;;{gB2vh6!(#%gMS&jY;&79#Wi!J3uDpSlWq6Yo?=#zB)|Ja>yqE(d6fKU$2i^~ z`6v5B$7KJBjT24-474-`m?T=GLsX1mTyCSRn`LXkCkh$Wx!Pu0@`*<2dz#6XOfk8f zhvpQuGwqNncj^?C`Ev`WDDyZxRnswz&Dj0nSPq`Xrim_^D4(D^nlr_&T1YjKWM{Ef zYl2zB)SXysgo!4gt4d*S1YuGb0}xU&ADh{wcHkesF&HI~F~Ks?&4a+zyvWLxDS?d^ z({sf427xVZ7wqB=JScc#h6CbG*#h43V2=f{Vf|H960XUhQ<}iu^EA zo?;?X6O0NSojf2jt{9N%dj>S44yOTq*vErSbsGf~#abQZH)2q1m}@8{c4Sug-Moe_qeF!?w*Rz!?VTo>|pH~Btf*y0c00xfByLoq_jUe z|Fa#}JaztO?(d|uKg$RK#6-KuHc#BMtau$%G=F*hZqxqQ*Qajrwbkk^yzyy&1kPoS zbddp?+hmcMtF>6ovAmoKPb0CZ5J?7JL0jo)?(IBjA#yqv?Z3TeQ5xlZK;SB~f;WX6u@B+~@ipU?%&$Xbx}jTUjg z$HDC}^7r2ZA&5*4Wq)Y<2T`3du}@Y{>@(N5ofu#&RQQkObI^AjSxTgZ;KBiROQ%asd&U}$A8lr=Q7<;l z0Hk5Y@Z`z;#Jlc|S#K9&Z-vY1gRuW03@N;12!Am9q-gg?+7dSwH*W)HVJiY+7S~4@ z@`5ku6M8ng(98Ev?eBFJyK{>=<^av~(>OEO*2HGO_?_3u zgfTSI#`fa$_QAc>G(XSlU(xNwXFyx7p$J#^6LNAtFuoXw{i(R^O|F7w&`enEsz*iIS&&(7Ik z5M&}3 zz_n2R@X>`{E9buq+L|xFp;g>+*5{BgVMg#Q6Uq7Vvce2V3HZmbeMY~u|E4on=3HXf zG=0B=`WEEdn^fNd-ZAR4tqc}b2;Em!>H-b%Vc1Oc?)g?hq-e3g9Fkl%w!3oJ4`e*6 z%qWiDJ}rTH&`jvJiHS%p#ca`kihN=`UFfv(tc_=A0uKuxCa{B85~JTt60Ej|i9+<2 zSHVq~FCj^n5Ni*&Z)&G0Q|b07jle|saz~uMn7<}6+%0AZ)b08KnUYWv;>T?n+`g&A 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%0A&K=&W(jN_ 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�TSB~{2{Bsd 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 z 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%0AsoAH?Z7&dn(}+Op?-L5`Fh(6RFU_>=;2u0BI&>p zdy5t$c~&@YhtDf;s){ZPmua8JmR!W48SjI5_{ao%1A0vA4OzfsBLWOY*p)b4#eD$V z2iYp2Ps_SmUL0FsOz(Z*u41Cq7DN){jqzwWOsTSG&$l$Oyg1s{cs3TcRV| zU`*2z%vzx>dqT5+7ZR+-f=1*s+u!FiVZn3&hiygb3_c7vZFh_66ew%&w1FLKzCXKm zIe`efQi2PgE4~1~O<*H(W7}ilktOPIC7G5PlG9&5ZZwglr*(9ARk6IJr^3yeK0?Vw zOR{M5?ahybpz(Zjpx=5h8Z`xj9odb8D_>ojZmIo1NXrQXrW>OScNj$nZOl^ZcE0&= zaq<7$UfukpINC7aEVxHcyA{spltb4_P0aIHY*8;*vG9k|@0)*}lV_*(#0k zY8Gq=xaC0hjKc5ATsw8`0#D5|PZgF!^Xw|yY|uD4L&30;Qd4^4!6@*|YZ4oD{64b?%JqD>I*-aZipAoiET(P)C^5F`(uvRm z5bRP{YA2+a-1|IdiCm!yO99U7kWvF7$Q?US{yFNxzz+eM5x@*dLh0pnWH|wkuGcM@ zkvJ^K>wi}N$O~6MpyqH3q;B96L6i>U<|5#{?@zW4a|M?c-9NYxgsa}j z39zEQZd~Kld{D!no*AD3O_%+VjLq5kfMC{Nx4-FH z_pK!-<}T$ZBw%>%(GqQ-^U;qbx#_TGU8pSqMRMP^JqSql+^YNQ*eP2FCgB{z4|+r3 z!O3&(46r{DBCt%V{WMs^Wi?b`rQQo%%E`^1rBiiY__or0ttd)sC z>;XT(w@Pi*;B>J_Hw$K#PjR5k1(c`!1sU71`6mcuZ5j3_G+O47zI3QG>+XJ8{B@37&hs*pV4Dbrl$CS9ihNe|$F zjQu9Vuum?O?jY^slNdOZS-e|ML^#M9gB25+Iq-K$<7=~o15!MaH%0TUzj&!^{4fj( z2-9RrWALCUYObbBMX7ExNy2VTW^#bFd*eTsfXDwQFy zL=r?GpSoAR;h&UOMgP@sO^PFD(92t-$shK#eiYJjk&(5GR3W%93h;y_N=*hH8b>=! z8%SLUTS(tZhE(%)1OUWODXT*%W~vTDyqxx}#9^5?N@rue{X%@l3s1CC`$bphw4V5& zxGxEF)utyCyj1dIXl7?&o(%VujDqHhj4jA7x?xKO1_+nrkPFM~Oge=HSikw>&gN`! z@UB)HynN6{_p3w!A!O7;@g`Tq(k!`bFh2^5QYLQm|x*0h4NmH zfNTAT*z?Iu6gDjy@`ZasRAusn0dBH$Q#0ocMVDAIIqX)D?#G)-yE-M47T83?1)Zw* z%$VL}&RTz$k<1wgsgjWbrzn1o?^lCrNRVqR89D#0g*c08RmS1B(A%Mg0@2CvBK2G3I24k_57 zKfp!GCLEYYav_rCvr{+&e04AC!usFo#NV>|*$Jy1>AJH)R}xy5FQLztyiBw8Nn*kw zO=-5Ay}ItjrzHg+U+7PTo{N6liBlA>@2;=jFX|iH?c}-E`Taa`5qV?SZlFArh-1}AhZL3;Sm~? z%oa$&$xwsOVmDc*)RJH-!Hx>K!#q-cmfW;(VQ?y$3b9m^#C(B@cp}s0NIA*1V`=_l zKnE2R5~E$Ol_0V>m~>_mhMM2q8DLptfmCJfgyR7A>s?=auGvMF!3c5Gw7t9@{#Riu z(1Mt#LrZ=R{?TyV`C?VaSfY;VKtO8<*OHJUvb5O#s)&%0D&TCpeFR{CD8tudqIZY5 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

Zh?g4V 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 Hf6M;^W4|hf delta 210558 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�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

cM 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

^I(q}i#B&6hl$hmUV{oOQ1kgxc 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 Date: Thu, 19 Sep 2024 07:23:32 -0300 Subject: [PATCH 082/127] rm print from tests --- x/ibc-rate-limit/ibc_middleware_test.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index a34ce2f45..788dd1b5d 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -595,12 +595,6 @@ func (suite *MiddlewareTestSuite) TestDenomRestrictionFlow() { func (suite *MiddlewareTestSuite) InstantiateRLContract(quotas string) sdk.AccAddress { app := suite.GetNeutronZoneApp(suite.ChainA) transferModule := app.AccountKeeper.GetModuleAddress(transfertypes.ModuleName) - fmt.Println(fmt.Sprintf(`{ - "gov_module": "%s", - "ibc_module":"%s", - "paths": [%s] - }`, - testutil.TestOwnerAddress, transferModule, quotas)) initMsgBz := []byte(fmt.Sprintf(`{ "gov_module": "%s", "ibc_module":"%s", From 166daf286c059e29d171666187bb7c487d5cfe05 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Thu, 19 Sep 2024 10:20:20 -0300 Subject: [PATCH 083/127] uncomment cli --- x/ibc-rate-limit/client/cli/query.go | 70 +++++++++++++++------------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/x/ibc-rate-limit/client/cli/query.go b/x/ibc-rate-limit/client/cli/query.go index ec490d6af..b2a50e191 100644 --- a/x/ibc-rate-limit/client/cli/query.go +++ b/x/ibc-rate-limit/client/cli/query.go @@ -1,50 +1,56 @@ package cli import ( + "fmt" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client/queryproto" + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" "github.com/spf13/cobra" ) // GetQueryCmd returns the cli query commands for this module func GetQueryCmd() *cobra.Command { // Group ibc-rate-limit queries under a subcommand - // cmd := &cobra.Command{ - // Use: types.ModuleName, - // Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), - // DisableFlagParsing: true, - // SuggestionsMinimumDistance: 2, - // RunE: client.ValidateCmd, - // } - - // cmd.AddCommand( - // GetParams(), - //) + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand( + GetParams(), + ) return nil } // GetParams returns the params for the module func GetParams() *cobra.Command { - // cmd := &cobra.Command{ - // Use: "params [flags]", - // Short: "Get the params for the x/ibc-rate-limit module", - // Args: cobra.ExactArgs(0), - // RunE: func(cmd *cobra.Command, _ []string) error { - // clientCtx, err := client.GetClientQueryContext(cmd) - // if err != nil { - // return err - // } - // queryClient := types.NewQueryClient(clientCtx) - // - // res, err := queryClient.Params(cmd.Context(), &types.QueryParamsRequest{}) - // if err != nil { - // return err - // } - // - // return clientCtx.PrintProto(res) - // }, - // } - // - // flags.AddQueryFlagsToCmd(cmd) + cmd := &cobra.Command{ + Use: "params [flags]", + Short: "Get the params for the x/ibc-rate-limit module", + Args: cobra.ExactArgs(0), + RunE: func(cmd *cobra.Command, _ []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := queryproto.NewQueryClient(clientCtx) + + res, err := queryClient.Params(cmd.Context(), &queryproto.ParamsRequest{}) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) return nil } From 9cb8580f2cde7c07d1e6f074680fc589f3700a4c Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Thu, 19 Sep 2024 10:51:16 -0300 Subject: [PATCH 084/127] rm contract code from module bc we have moved it to separate repo --- x/ibc-rate-limit/Beaker.toml | 1 - x/ibc-rate-limit/Cargo.lock | 1629 ----------------- x/ibc-rate-limit/Cargo.toml | 15 - .../contracts/rate-limiter/Cargo.toml | 47 - .../contracts/rate-limiter/LICENSE | 21 - .../contracts/rate-limiter/examples/schema.rs | 13 - .../contracts/rate-limiter/src/blocking.rs | 150 -- .../contracts/rate-limiter/src/contract.rs | 203 -- .../rate-limiter/src/contract_tests.rs | 450 ----- .../contracts/rate-limiter/src/error.rs | 34 - .../contracts/rate-limiter/src/execute.rs | 440 ----- .../contracts/rate-limiter/src/helpers.rs | 61 - .../rate-limiter/src/integration_tests.rs | 1019 ----------- .../contracts/rate-limiter/src/lib.rs | 24 - .../rate-limiter/src/message_queue.rs | 413 ----- .../contracts/rate-limiter/src/msg.rs | 197 -- .../contracts/rate-limiter/src/packet.rs | 468 ----- .../contracts/rate-limiter/src/query.rs | 187 -- .../contracts/rate-limiter/src/rbac.rs | 452 ----- .../contracts/rate-limiter/src/state/flow.rs | 167 -- .../contracts/rate-limiter/src/state/mod.rs | 8 - .../contracts/rate-limiter/src/state/path.rs | 33 - .../contracts/rate-limiter/src/state/quota.rs | 64 - .../rate-limiter/src/state/rate_limit.rs | 98 - .../contracts/rate-limiter/src/state/rbac.rs | 78 - .../rate-limiter/src/state/storage.rs | 53 - .../contracts/rate-limiter/src/sudo.rs | 199 -- 27 files changed, 6524 deletions(-) delete mode 100644 x/ibc-rate-limit/Beaker.toml delete mode 100644 x/ibc-rate-limit/Cargo.lock delete mode 100644 x/ibc-rate-limit/Cargo.toml delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/Cargo.toml delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/LICENSE delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/examples/schema.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/blocking.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/contract.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/error.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/execute.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/helpers.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/integration_tests.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/lib.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/message_queue.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/msg.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/query.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/rbac.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/state/flow.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/state/mod.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/state/path.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/state/quota.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/state/rate_limit.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/state/rbac.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/state/storage.rs delete mode 100644 x/ibc-rate-limit/contracts/rate-limiter/src/sudo.rs diff --git a/x/ibc-rate-limit/Beaker.toml b/x/ibc-rate-limit/Beaker.toml deleted file mode 100644 index f3f1f298b..000000000 --- a/x/ibc-rate-limit/Beaker.toml +++ /dev/null @@ -1 +0,0 @@ -name = "ibc-rate-limit" diff --git a/x/ibc-rate-limit/Cargo.lock b/x/ibc-rate-limit/Cargo.lock deleted file mode 100644 index 45587b50e..000000000 --- a/x/ibc-rate-limit/Cargo.lock +++ /dev/null @@ -1,1629 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - -[[package]] -name = "ahash" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "allocator-api2" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" - -[[package]] -name = "anyhow" -version = "1.0.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f00e1f6e58a40e807377c75c6a7f97bf9044fab57816f2414e6f5f4499d7b8" - -[[package]] -name = "ark-bls12-381" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", - "itertools 0.10.5", - "num-traits", - "rayon", - "zeroize", -] - -[[package]] -name = "ark-ff" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" -dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest 0.10.7", - "itertools 0.10.5", - "num-bigint", - "num-traits", - "paste", - "rayon", - "rustc_version", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-ff-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest 0.10.7", - "num-bigint", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand", - "rayon", -] - -[[package]] -name = "autocfg" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" - -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "base64ct" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" - -[[package]] -name = "bech32" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" - -[[package]] -name = "bech32" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "bnum" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56953345e39537a3e18bdaeba4cb0c58a78c1f61f361dc0fa7c5c7340ae87c5f" - -[[package]] -name = "bnum" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e31ea183f6ee62ac8b8a8cf7feddd766317adfb13ff469de57ce033efd6a790" - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" -dependencies = [ - "serde", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" -dependencies = [ - "num-traits", -] - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[package]] -name = "cosmos-sdk-proto" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32560304ab4c365791fd307282f76637213d8083c1a98490c35159cd67852237" -dependencies = [ - "prost 0.12.6", - "prost-types", - "tendermint-proto", -] - -[[package]] -name = "cosmwasm-core" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d905990ef3afb5753bb709dc7de88e9e370aa32bcc2f31731d4b533b63e82490" - -[[package]] -name = "cosmwasm-crypto" -version = "1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f862b355f7e47711e0acfe6af92cb3fd8fd5936b66a9eaa338b51edabd1e77d" -dependencies = [ - "digest 0.10.7", - "ed25519-zebra 3.1.0", - "k256", - "rand_core 0.6.4", - "thiserror", -] - -[[package]] -name = "cosmwasm-crypto" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b2a7bd9c1dd9a377a4dc0f4ad97d24b03c33798cd5a6d7ceb8869b41c5d2f2d" -dependencies = [ - "ark-bls12-381", - "ark-ec", - "ark-ff", - "ark-serialize", - "cosmwasm-core", - "digest 0.10.7", - "ecdsa", - "ed25519-zebra 4.0.3", - "k256", - "num-traits", - "p256", - "rand_core 0.6.4", - "rayon", - "sha2 0.10.8", - "thiserror", -] - -[[package]] -name = "cosmwasm-derive" -version = "1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd85de6467cd1073688c86b39833679ae6db18cf4771471edd9809f15f1679f1" -dependencies = [ - "syn 1.0.109", -] - -[[package]] -name = "cosmwasm-derive" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029910b409398fdf81955d7301b906caf81f2c42b013ea074fbd89720229c424" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - -[[package]] -name = "cosmwasm-schema" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bc0d4d85e83438ab9a0fea9348446f7268bc016aacfebce37e998559f151294" -dependencies = [ - "cosmwasm-schema-derive", - "schemars", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cosmwasm-schema-derive" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edf5c8adac41bb7751c050d7c4c18675be19ee128714454454575e894424eeef" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - -[[package]] -name = "cosmwasm-std" -version = "1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2685c2182624b2e9e17f7596192de49a3f86b7a0c9a5f6b25c1df5e24592e836" -dependencies = [ - "base64 0.21.7", - "bech32 0.9.1", - "bnum 0.10.0", - "cosmwasm-crypto 1.5.7", - "cosmwasm-derive 1.5.7", - "derivative", - "forward_ref", - "hex", - "schemars", - "serde", - "serde-json-wasm 0.5.2", - "sha2 0.10.8", - "static_assertions", - "thiserror", -] - -[[package]] -name = "cosmwasm-std" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51dec99a2e478715c0a4277f0dbeadbb8466500eb7dec873d0924edd086e77f1" -dependencies = [ - "base64 0.22.1", - "bech32 0.11.0", - "bnum 0.11.0", - "cosmwasm-core", - "cosmwasm-crypto 2.1.3", - "cosmwasm-derive 2.1.3", - "derive_more", - "hex", - "rand_core 0.6.4", - "schemars", - "serde", - "serde-json-wasm 1.0.1", - "sha2 0.10.8", - "static_assertions", - "thiserror", -] - -[[package]] -name = "cosmwasm-storage" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66de2ab9db04757bcedef2b5984fbe536903ada4a8a9766717a4a71197ef34f6" -dependencies = [ - "cosmwasm-std 1.5.7", - "serde", -] - -[[package]] -name = "cpufeatures" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" -dependencies = [ - "libc", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "curve25519-dalek" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek" -version = "4.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" -dependencies = [ - "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "digest 0.10.7", - "fiat-crypto", - "rustc_version", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - -[[package]] -name = "cw-multi-test" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0ae276e7a06ad1b7e7da78a3d68aba80634cde30ee7fe8259a94e653603fef8" -dependencies = [ - "anyhow", - "bech32 0.11.0", - "cosmwasm-std 2.1.3", - "cw-storage-plus", - "cw-utils", - "derivative", - "itertools 0.13.0", - "prost 0.13.2", - "schemars", - "serde", - "sha2 0.10.8", - "thiserror", -] - -[[package]] -name = "cw-storage-plus" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f13360e9007f51998d42b1bc6b7fa0141f74feae61ed5fd1e5b0a89eec7b5de1" -dependencies = [ - "cosmwasm-std 2.1.3", - "schemars", - "serde", -] - -[[package]] -name = "cw-utils" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07dfee7f12f802431a856984a32bce1cb7da1e6c006b5409e3981035ce562dec" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std 2.1.3", - "schemars", - "serde", - "thiserror", -] - -[[package]] -name = "cw2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b04852cd38f044c0751259d5f78255d07590d136b8a86d4e09efdd7666bd6d27" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std 2.1.3", - "cw-storage-plus", - "schemars", - "semver", - "serde", - "thiserror", -] - -[[package]] -name = "der" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" -dependencies = [ - "const-oid", - "zeroize", -] - -[[package]] -name = "deranged" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_more" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" -dependencies = [ - "derive_more-impl", -] - -[[package]] -name = "derive_more-impl" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", - "unicode-xid", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer 0.10.4", - "const-oid", - "crypto-common", - "subtle", -] - -[[package]] -name = "dyn-clone" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" - -[[package]] -name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" -dependencies = [ - "der", - "digest 0.10.7", - "elliptic-curve", - "rfc6979", - "signature", - "spki", -] - -[[package]] -name = "ed25519" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" -dependencies = [ - "signature", -] - -[[package]] -name = "ed25519-zebra" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" -dependencies = [ - "curve25519-dalek 3.2.0", - "hashbrown 0.12.3", - "hex", - "rand_core 0.6.4", - "serde", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "ed25519-zebra" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" -dependencies = [ - "curve25519-dalek 4.1.3", - "ed25519", - "hashbrown 0.14.5", - "hex", - "rand_core 0.6.4", - "sha2 0.10.8", - "zeroize", -] - -[[package]] -name = "either" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" - -[[package]] -name = "elliptic-curve" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest 0.10.7", - "ff", - "generic-array", - "group", - "pkcs8", - "rand_core 0.6.4", - "sec1", - "subtle", - "zeroize", -] - -[[package]] -name = "ff" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "fiat-crypto" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" - -[[package]] -name = "flex-error" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" -dependencies = [ - "paste", -] - -[[package]] -name = "forward_ref" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e" - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "getrandom" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.8", -] - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash 0.8.11", -] - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash 0.8.11", - "allocator-api2", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" - -[[package]] -name = "k256" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" -dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "once_cell", - "sha2 0.10.8", - "signature", -] - -[[package]] -name = "libc" -version = "0.2.158" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" - -[[package]] -name = "memchr" -version = "2.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[package]] -name = "neutron-std" -version = "4.2.2-rc" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea7d51a6eb54c2f550bb01630c8414b1988899d645e076d8ae52c068999b9951" -dependencies = [ - "bech32 0.9.1", - "chrono", - "cosmos-sdk-proto", - "cosmwasm-schema", - "cosmwasm-std 2.1.3", - "neutron-std-derive", - "prost 0.12.6", - "prost-types", - "protobuf", - "schemars", - "serde", - "serde-cw-value", - "serde-json-wasm 1.0.1", - "serde_json", - "speedate", - "tendermint-proto", - "thiserror", -] - -[[package]] -name = "neutron-std-derive" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f4948005dcbb0c4eb644141d00dcbdc422b1b7024fb008712ca2960392ec11" -dependencies = [ - "itertools 0.10.5", - "proc-macro2", - "prost-types", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-derive" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "opaque-debug" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" - -[[package]] -name = "p256" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2 0.10.8", -] - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "primeorder" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" -dependencies = [ - "elliptic-curve", -] - -[[package]] -name = "proc-macro2" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prost" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" -dependencies = [ - "bytes", - "prost-derive 0.12.6", -] - -[[package]] -name = "prost" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2ecbe40f08db5c006b5764a2645f7f3f141ce756412ac9e1dd6087e6d32995" -dependencies = [ - "bytes", - "prost-derive 0.13.2", -] - -[[package]] -name = "prost-derive" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" -dependencies = [ - "anyhow", - "itertools 0.12.1", - "proc-macro2", - "quote", - "syn 2.0.77", -] - -[[package]] -name = "prost-derive" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acf0c195eebb4af52c752bec4f52f645da98b6e92077a04110c7f349477ae5ac" -dependencies = [ - "anyhow", - "itertools 0.13.0", - "proc-macro2", - "quote", - "syn 2.0.77", -] - -[[package]] -name = "prost-types" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" -dependencies = [ - "prost 0.12.6", -] - -[[package]] -name = "protobuf" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65f4a8ec18723a734e5dc09c173e0abf9690432da5340285d536edcb4dac190" -dependencies = [ - "once_cell", - "protobuf-support", - "thiserror", -] - -[[package]] -name = "protobuf-support" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6872f4d4f4b98303239a2b5838f5bbbb77b01ffc892d627957f37a22d7cfe69c" -dependencies = [ - "thiserror", -] - -[[package]] -name = "quote" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "rand_chacha", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "rate-limiter" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std 2.1.3", - "cosmwasm-storage", - "cw-multi-test", - "cw-storage-plus", - "cw2", - "hex", - "itertools 0.10.5", - "neutron-std", - "prost 0.12.6", - "schemars", - "serde", - "serde-json-wasm 1.0.1", - "sha2 0.10.8", - "thiserror", -] - -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac", - "subtle", -] - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] - -[[package]] -name = "rustversion" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" - -[[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - -[[package]] -name = "schemars" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" -dependencies = [ - "dyn-clone", - "schemars_derive", - "serde", - "serde_json", -] - -[[package]] -name = "schemars_derive" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals", - "syn 2.0.77", -] - -[[package]] -name = "sec1" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct", - "der", - "generic-array", - "pkcs8", - "subtle", - "zeroize", -] - -[[package]] -name = "semver" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" - -[[package]] -name = "serde" -version = "1.0.210" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde-cw-value" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75d32da6b8ed758b7d850b6c3c08f1d7df51a4df3cb201296e63e34a78e99d4" -dependencies = [ - "serde", -] - -[[package]] -name = "serde-json-wasm" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e9213a07d53faa0b8dd81e767a54a8188a242fdb9be99ab75ec576a774bfdd7" -dependencies = [ - "serde", -] - -[[package]] -name = "serde-json-wasm" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f05da0d153dd4595bdffd5099dc0e9ce425b205ee648eb93437ff7302af8c9a5" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_bytes" -version = "0.11.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_derive" -version = "1.0.210" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - -[[package]] -name = "serde_derive_internals" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - -[[package]] -name = "serde_json" -version = "1.0.128" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest 0.10.7", - "rand_core 0.6.4", -] - -[[package]] -name = "speedate" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "242f76c50fd18cbf098607090ade73a08d39cfd84ea835f3796a2c855223b19b" -dependencies = [ - "strum", - "strum_macros", -] - -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "strum" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.77", -] - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "subtle-encoding" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" -dependencies = [ - "zeroize", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tendermint-proto" -version = "0.34.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b797dd3d2beaaee91d2f065e7bdf239dc8d80bba4a183a288bc1279dd5a69a1e" -dependencies = [ - "bytes", - "flex-error", - "num-derive", - "num-traits", - "prost 0.12.6", - "prost-types", - "serde", - "serde_bytes", - "subtle-encoding", - "time", -] - -[[package]] -name = "thiserror" -version = "1.0.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - -[[package]] -name = "time" -version = "0.3.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" -dependencies = [ - "deranged", - "num-conv", - "powerfmt", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" - -[[package]] -name = "time-macros" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-xid" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "byteorder", - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - -[[package]] -name = "zeroize" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] diff --git a/x/ibc-rate-limit/Cargo.toml b/x/ibc-rate-limit/Cargo.toml deleted file mode 100644 index 64e7f0b3a..000000000 --- a/x/ibc-rate-limit/Cargo.toml +++ /dev/null @@ -1,15 +0,0 @@ -[workspace] -members = [ - 'contracts/*', -] - -[profile.release] -codegen-units = 1 -debug = false -debug-assertions = false -incremental = false -lto = true -opt-level = 3 -overflow-checks = true -panic = 'abort' -rpath = false diff --git a/x/ibc-rate-limit/contracts/rate-limiter/Cargo.toml b/x/ibc-rate-limit/contracts/rate-limiter/Cargo.toml deleted file mode 100644 index 8a40ba6c6..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/Cargo.toml +++ /dev/null @@ -1,47 +0,0 @@ -[package] -name = "rate-limiter" -version = "0.1.0" -authors = ["Nicolas Lara "] -edition = "2021" - -exclude = [ - # Those files are rust-optimizer artifacts. You might want to commit them for convenience but they should not be part of the source code publication. - "contract.wasm", - "hash.txt", -] - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[lib] -crate-type = ["cdylib", "rlib"] - -[features] -library = [] -# Use the verbose responses feature if you want to include information about -# the remaining quotas in the SendPacket/RecvPacket responses -verbose_responses = [] - -[package.metadata.scripts] -optimize = """docker run --rm -v "$(pwd)":/code \ - --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \ - --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ - cosmwasm/rust-optimizer:0.12.6 -""" -[dependencies] -cosmwasm-std = {version = "2.1.0", features = ["cosmwasm_2_0", "std"]} -cosmwasm-schema = {version = "2.1.0", default-features = false} -cosmwasm-storage = "1" -cw-storage-plus = "2" -cw2 = "2" -schemars = "0.8.15" -serde = {version = "1.0.188", features = ["derive"], default-features = false} -thiserror = "1.0.49" -prost = "0.12.3" -neutron-std = "4.2.2-rc" -sha2 = "0.10.6" -hex = "0.4.3" - -[dev-dependencies] -cw-multi-test = "2.1.1" -serde-json-wasm = "1.0.0" -itertools = "0.10" \ No newline at end of file diff --git a/x/ibc-rate-limit/contracts/rate-limiter/LICENSE b/x/ibc-rate-limit/contracts/rate-limiter/LICENSE deleted file mode 100644 index e8609a2c0..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 Range - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/x/ibc-rate-limit/contracts/rate-limiter/examples/schema.rs b/x/ibc-rate-limit/contracts/rate-limiter/examples/schema.rs deleted file mode 100644 index 954edd462..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/examples/schema.rs +++ /dev/null @@ -1,13 +0,0 @@ -use cosmwasm_schema::write_api; - -use rate_limiter::msg::{ExecuteMsg, InstantiateMsg, MigrateMsg, QueryMsg, SudoMsg}; - -fn main() { - write_api! { - instantiate: InstantiateMsg, - query: QueryMsg, - execute: ExecuteMsg, - sudo: SudoMsg, - migrate: MigrateMsg, - } -} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/blocking.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/blocking.rs deleted file mode 100644 index 936750c10..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/blocking.rs +++ /dev/null @@ -1,150 +0,0 @@ -use cosmwasm_std::Deps; - -use crate::{ - packet::Packet, - state::{flow::FlowType, storage::ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM}, - ContractError, -}; - -pub fn check_restricted_denoms( - deps: Deps, - packet: &Packet, - direction: &FlowType, -) -> Result<(), ContractError> { - // we are only limiting out-flow. In-flow is always allowed - if matches!(direction, FlowType::In) { - return Ok(()); - } - - let channels = ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM - .load(deps.storage, packet.data.denom.to_string()) - .unwrap_or_default(); - - // if no channels are blocked, we can return early - if channels.is_empty() { - return Ok(()); - } - - // Only channels in the list are allowed. If the source channel is not in the list, we reject the packet - if !channels.contains(&packet.source_channel) { - return Err(ContractError::ChannelBlocked { - denom: packet.data.denom.clone(), - channel: packet.source_channel.to_string(), - }); - } - - Ok(()) -} - -#[cfg(test)] -mod tests { - use super::*; - use cosmwasm_std::testing::mock_dependencies; - use cosmwasm_std::Uint256; - - #[test] - fn test_in_flow_allowed() { - let deps = mock_dependencies(); - let packet = Packet::mock( - "src_channel".to_string(), - "dest_channel".to_string(), - "denom1".to_string(), - Uint256::from(100u128), - ); - let flow_type = FlowType::In; - - let result = check_restricted_denoms(deps.as_ref(), &packet, &flow_type); - assert!(result.is_ok()); - } - - #[test] - fn test_out_flow_unrestricted_denom() { - let deps = mock_dependencies(); - let packet = Packet::mock( - "src_channel".to_string(), - "dest_channel".to_string(), - "denom2".to_string(), - Uint256::from(100u128), - ); - let flow_type = FlowType::Out; - - // denom2 is not in the restricted list - let result = check_restricted_denoms(deps.as_ref(), &packet, &flow_type); - assert!(result.is_ok()); - } - - #[test] - fn test_out_flow_restricted_denom_allowed_channel() { - let mut deps = mock_dependencies(); - let packet = Packet::mock( - "src_channel_allowed".to_string(), - "dest_channel".to_string(), - "denom1".to_string(), - Uint256::from(100u128), - ); - let flow_type = FlowType::Out; - - // Add denom1 to restricted list with allowed channels - ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM - .save( - deps.as_mut().storage, - "denom1".to_string(), - &vec!["src_channel_allowed".to_string()], - ) - .unwrap(); - - let result = check_restricted_denoms(deps.as_ref(), &packet, &flow_type); - assert!(result.is_ok()); - } - - #[test] - fn test_out_flow_restricted_denom_blocked_channel() { - let mut deps = mock_dependencies(); - let packet = Packet::mock( - "src_channel_blocked".to_string(), - "dest_channel".to_string(), - "denom1".to_string(), - Uint256::from(100u128), - ); - let flow_type = FlowType::Out; - - // Add denom1 to restricted list with allowed channels - ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM - .save( - deps.as_mut().storage, - "denom1".to_string(), - &vec!["src_channel_allowed".to_string()], - ) - .unwrap(); - - let result = check_restricted_denoms(deps.as_ref(), &packet, &flow_type); - assert!(result.is_err()); - - if let Err(ContractError::ChannelBlocked { denom, channel }) = result { - assert_eq!(denom, "denom1".to_string()); - assert_eq!(channel, "src_channel_blocked".to_string()); - } else { - panic!("Expected ChannelBlocked error"); - } - } - - #[test] - fn test_out_flow_restricted_denom_empty_channel_list() { - let mut deps = mock_dependencies(); - let packet = Packet::mock( - "src_channel_blocked".to_string(), - "dest_channel".to_string(), - "denom1".to_string(), - Uint256::from(100u128), - ); - let flow_type = FlowType::Out; - - // Add denom1 to restricted list but with an empty allowed channels list - ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM - .save(deps.as_mut().storage, "denom1".to_string(), &vec![]) - .unwrap(); - - let result = check_restricted_denoms(deps.as_ref(), &packet, &flow_type); - assert!(result.is_ok()); - } -} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/contract.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/contract.rs deleted file mode 100644 index d046d111c..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/contract.rs +++ /dev/null @@ -1,203 +0,0 @@ -#[cfg(not(feature = "library"))] -use cosmwasm_std::entry_point; -use cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult}; -use cw2::{get_contract_version, set_contract_version}; - -use crate::error::ContractError; -use crate::message_queue::{must_queue_message, queue_message}; -use crate::msg::{ExecuteMsg, InstantiateMsg, MigrateMsg, QueryMsg, SudoMsg}; -use crate::rbac::can_invoke_message; -use crate::state::rbac::Roles; -use crate::state::storage::RBAC_PERMISSIONS; -use crate::state::{ - flow::FlowType, - storage::{GOVMODULE, IBCMODULE}, -}; -use crate::{execute, message_queue, query, rbac, sudo}; - -// version info for migration info -const CONTRACT_NAME: &str = "crates.io:rate-limiter"; -const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION"); - -#[cfg_attr(not(feature = "library"), entry_point)] -pub fn instantiate( - mut deps: DepsMut, - env: Env, - _info: MessageInfo, - msg: InstantiateMsg, -) -> Result { - set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; - IBCMODULE.save(deps.storage, &msg.ibc_module)?; - GOVMODULE.save(deps.storage, &msg.gov_module)?; - // grant the gov address full permissions - RBAC_PERMISSIONS.save( - deps.storage, - msg.gov_module.to_string(), - &Roles::all_roles().into_iter().collect(), - )?; - - execute::add_new_paths(&mut deps, msg.paths, env.block.time)?; - - Ok(Response::new() - .add_attribute("method", "instantiate") - .add_attribute("ibc_module", msg.ibc_module.to_string()) - .add_attribute("gov_module", msg.gov_module.to_string())) -} - -#[cfg_attr(not(feature = "library"), entry_point)] -pub fn execute( - mut deps: DepsMut, - env: Env, - info: MessageInfo, - msg: ExecuteMsg, -) -> Result { - // check to see if special permissions are required to invoke the message, and that the sender has the required permissions - can_invoke_message(&deps, &info, &msg)?; - // check to see if messages sent by MessageInfo::sender require a timelock - // - // if a timelock is required the message must be queued for execution - - if msg.skip_queue() { - match_execute(&mut deps, &env, msg) - } else if must_queue_message(&mut deps, &info) { - let message_id = queue_message(&mut deps, env, msg, info)?; - Ok(Response::new().add_attribute("message.id", message_id)) - } else { - match_execute(&mut deps, &env, msg) - } -} - -#[cfg_attr(not(feature = "library"), entry_point)] -pub fn sudo(deps: DepsMut, env: Env, msg: SudoMsg) -> Result { - match msg { - SudoMsg::SendPacket { - packet, - #[cfg(test)] - channel_value_mock, - } => sudo::process_packet( - deps, - packet, - FlowType::Out, - env.block.time, - #[cfg(test)] - channel_value_mock, - ), - SudoMsg::RecvPacket { - packet, - #[cfg(test)] - channel_value_mock, - } => sudo::process_packet( - deps, - packet, - FlowType::In, - env.block.time, - #[cfg(test)] - channel_value_mock, - ), - SudoMsg::UndoSend { packet } => sudo::undo_send(deps, packet), - } -} - -#[cfg_attr(not(feature = "library"), entry_point)] -pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { - match msg { - QueryMsg::GetQuotas { channel_id, denom } => { - query::get_quotas(deps.storage, channel_id, denom) - } - QueryMsg::GetRoleOwners => query::get_role_owners(deps.storage), - QueryMsg::GetRoles { owner } => query::get_roles(deps.storage, owner), - QueryMsg::GetMessageIds => query::get_message_ids(deps.storage), - QueryMsg::GetMessage { id } => query::get_queued_message(deps.storage, id), - QueryMsg::GetDenomRestrictions { denom } => { - query::get_denom_restrictions(deps.storage, denom) - } - } -} - -#[cfg_attr(not(feature = "library"), entry_point)] -pub fn migrate(deps: DepsMut, _env: Env, _msg: MigrateMsg) -> Result { - let contract_version = get_contract_version(deps.storage)?; - - // check contract version, and apply version specific migrations - if contract_version.version.eq("0.1.0") { - let gov_module = GOVMODULE.load(deps.storage)?; - - // grant the gov address full permissions - RBAC_PERMISSIONS.save( - deps.storage, - gov_module.to_string(), - &Roles::all_roles().into_iter().collect(), - )?; - } - - // update contract version - set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; - - Ok(Response::new() - .add_attribute("method", "migrate") - .add_attribute("version.old", contract_version.version) - .add_attribute("version.new", CONTRACT_VERSION)) -} - -/// Processes `msg` and executes the corresponding message handler -/// -/// This shouldn't be called directly and instead invoked by the `execute` function, or internally via message queue processing -pub(crate) fn match_execute( - deps: &mut DepsMut, - env: &Env, - msg: ExecuteMsg, -) -> Result { - match msg { - ExecuteMsg::AddPath { - channel_id, - denom, - quotas, - } => execute::try_add_path(deps, channel_id, denom, quotas, env.block.time), - ExecuteMsg::RemovePath { channel_id, denom } => { - execute::try_remove_path(deps, channel_id, denom) - } - ExecuteMsg::ResetPathQuota { - channel_id, - denom, - quota_id, - } => execute::try_reset_path_quota(deps, channel_id, denom, quota_id, env.block.time), - ExecuteMsg::SetDenomRestrictions { - denom, - allowed_channels, - } => execute::set_denom_restrictions(deps, denom, allowed_channels), - ExecuteMsg::UnsetDenomRestrictions { denom } => { - execute::unset_denom_restrictions(deps, denom) - } - ExecuteMsg::GrantRole { signer, roles } => { - rbac::grant_role(deps, signer, roles)?; - Ok(Response::new().add_attribute("method", "grant_role")) - } - ExecuteMsg::RevokeRole { signer, roles } => { - rbac::revoke_role(deps, signer, roles)?; - Ok(Response::new().add_attribute("method", "revoke_role")) - } - ExecuteMsg::EditPathQuota { - channel_id, - denom, - quota, - } => { - execute::edit_path_quota(deps, channel_id, denom, quota)?; - Ok(Response::new().add_attribute("method", "edit_path_quota")) - } - ExecuteMsg::RemoveMessage { message_id } => { - message_queue::remove_message(deps, message_id)?; - Ok(Response::new().add_attribute("method", "remove_message")) - } - ExecuteMsg::SetTimelockDelay { signer, hours } => { - crate::rbac::set_timelock_delay(deps, signer.clone(), hours)?; - Ok(Response::new() - .add_attribute("method", "set_timelock_delay") - .add_attribute("signer", signer) - .add_attribute("hours", hours.to_string())) - } - ExecuteMsg::ProcessMessages { count, message_ids } => { - message_queue::process_message_queue(deps, env, count, message_ids)?; - Ok(Response::new().add_attribute("method", "process_messages")) - } - } -} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs deleted file mode 100644 index cf1c795b1..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/contract_tests.rs +++ /dev/null @@ -1,450 +0,0 @@ -#![cfg(test)] - -use crate::packet::Packet; -use crate::state::rbac::Roles; -use crate::{contract::*, test_msg_recv, test_msg_send, ContractError}; -use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info, MockApi}; -use cosmwasm_std::{from_binary, Addr, Attribute, MessageInfo, Uint256}; - -use crate::helpers::tests::verify_query_response; -use crate::msg::{InstantiateMsg, MigrateMsg, PathMsg, QueryMsg, QuotaMsg, SudoMsg}; -use crate::state::flow::tests::RESET_TIME_WEEKLY; -use crate::state::rate_limit::RateLimit; -use crate::state::storage::{GOVMODULE, IBCMODULE, RATE_LIMIT_TRACKERS, RBAC_PERMISSIONS}; -const IBC_ADDR: &str = "neutron1cdlz8scnf3mmxdnf4njmtp7vz4gps7fswphrqn"; -const GOV_ADDR: &str = "neutron1w02khza7ux68ccwmz2hln97mkjspjxes8y2k9v"; - -#[test] // Tests we ccan instantiate the contract and that the owners are set correctly -fn proper_instantiation() { - let mut deps = mock_dependencies(); - - let msg = InstantiateMsg { - gov_module: MockApi::default().addr_make(GOV_ADDR), - ibc_module: MockApi::default().addr_make(IBC_ADDR), - paths: vec![], - }; - let info = mock_info(IBC_ADDR, &[]); - - // we can just call .unwrap() to assert this was a success - let res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - assert_eq!(0, res.messages.len()); - - // The ibc and gov modules are properly stored - assert_eq!(IBCMODULE.load(deps.as_ref().storage).unwrap().to_string(), MockApi::default().addr_make(IBC_ADDR).to_string()); - assert_eq!(GOVMODULE.load(deps.as_ref().storage).unwrap().to_string(), MockApi::default().addr_make(GOV_ADDR).to_string()); - - let permissions = RBAC_PERMISSIONS - .load(&mut deps.storage, MockApi::default().addr_make(GOV_ADDR).to_string()) - .unwrap(); - for permission in Roles::all_roles() { - assert!(permissions.contains(&permission)); - } -} - -#[test] // Tests that when a packet is transferred, the peropper allowance is consummed -fn consume_allowance() { - let mut deps = mock_dependencies(); - - let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); - let msg = InstantiateMsg { - gov_module: MockApi::default().addr_make(GOV_ADDR), - ibc_module: MockApi::default().addr_make(IBC_ADDR), - paths: vec![PathMsg { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quotas: vec![quota], - }], - }; - let info = mock_info(GOV_ADDR, &[]); - let _res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom") , - channel_value: 3_300_u32.into(), - funds: 300_u32.into() - ); - let res = sudo(deps.as_mut(), mock_env(), msg).unwrap(); - - let Attribute { key, value } = &res.attributes[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "300"); - - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_300_u32.into(), - funds: 300_u32.into() - ); - let err = sudo(deps.as_mut(), mock_env(), msg).unwrap_err(); - assert!(matches!(err, ContractError::RateLimitExceded { .. })); -} - -#[test] // Tests that the balance of send and receive is maintained (i.e: recives are sustracted from the send allowance and sends from the receives) -fn symetric_flows_dont_consume_allowance() { - let mut deps = mock_dependencies(); - - let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); - let msg = InstantiateMsg { - gov_module: MockApi::default().addr_make(GOV_ADDR), - ibc_module: MockApi::default().addr_make(IBC_ADDR), - paths: vec![PathMsg { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quotas: vec![quota], - }], - }; - let info = mock_info(GOV_ADDR, &[]); - let _res = instantiate(deps.as_mut(), mock_env(), info.clone(), msg).unwrap(); - - let send_msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_300_u32.into(), - funds: 300_u32.into() - ); - let recv_msg = test_msg_recv!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_000_u32.into(), - funds: 300_u32.into() - ); - - let res = sudo(deps.as_mut(), mock_env(), send_msg.clone()).unwrap(); - let Attribute { key, value } = &res.attributes[3]; - assert_eq!(key, "weekly_used_in"); - assert_eq!(value, "0"); - let Attribute { key, value } = &res.attributes[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "300"); - - let res = sudo(deps.as_mut(), mock_env(), recv_msg.clone()).unwrap(); - let Attribute { key, value } = &res.attributes[3]; - assert_eq!(key, "weekly_used_in"); - assert_eq!(value, "0"); - let Attribute { key, value } = &res.attributes[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "0"); - - // We can still use the path. Even if we have sent more than the - // allowance through the path (900 > 3000*.1), the current "balance" - // of inflow vs outflow is still lower than the path's capacity/quota - let res = sudo(deps.as_mut(), mock_env(), recv_msg.clone()).unwrap(); - let Attribute { key, value } = &res.attributes[3]; - assert_eq!(key, "weekly_used_in"); - assert_eq!(value, "300"); - let Attribute { key, value } = &res.attributes[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "0"); - - let err = sudo(deps.as_mut(), mock_env(), recv_msg.clone()).unwrap_err(); - - assert!(matches!(err, ContractError::RateLimitExceded { .. })); -} - -#[test] // Tests that we can have different quotas for send and receive. In this test we use 4% send and 1% receive -fn asymetric_quotas() { - let mut deps = mock_dependencies(); - - let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 4, 1); - let msg = InstantiateMsg { - gov_module: MockApi::default().addr_make(GOV_ADDR), - ibc_module: MockApi::default().addr_make(IBC_ADDR), - paths: vec![PathMsg { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quotas: vec![quota], - }], - }; - let info = mock_info(GOV_ADDR, &[]); - let _res = instantiate(deps.as_mut(), mock_env(), info.clone(), msg).unwrap(); - - // Sending 2% - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_060_u32.into(), - funds: 60_u32.into() - ); - let res = sudo(deps.as_mut(), mock_env(), msg).unwrap(); - let Attribute { key, value } = &res.attributes[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "60"); - - // Sending 2% more. Allowed, as sending has a 4% allowance - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_060_u32.into(), - funds: 60_u32.into() - ); - - let res = sudo(deps.as_mut(), mock_env(), msg).unwrap(); - let Attribute { key, value } = &res.attributes[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "120"); - - // Receiving 1% should still work. 4% *sent* through the path, but we can still receive. - let recv_msg = test_msg_recv!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_000_u32.into(), - funds: 30_u32.into() - ); - let res = sudo(deps.as_mut(), mock_env(), recv_msg).unwrap(); - let Attribute { key, value } = &res.attributes[3]; - assert_eq!(key, "weekly_used_in"); - assert_eq!(value, "0"); - let Attribute { key, value } = &res.attributes[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "90"); - - // Sending 2%. Should fail. In balance, we've sent 4% and received 1%, so only 1% left to send. - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_060_u32.into(), - funds: 60_u32.into() - ); - let err = sudo(deps.as_mut(), mock_env(), msg.clone()).unwrap_err(); - assert!(matches!(err, ContractError::RateLimitExceded { .. })); - - // Sending 1%: Allowed; because sending has a 4% allowance. We've sent 4% already, but received 1%, so there's send cappacity again - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_060_u32.into(), - funds: 30_u32.into() - ); - let res = sudo(deps.as_mut(), mock_env(), msg.clone()).unwrap(); - let Attribute { key, value } = &res.attributes[3]; - assert_eq!(key, "weekly_used_in"); - assert_eq!(value, "0"); - let Attribute { key, value } = &res.attributes[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "120"); -} - -#[test] // Tests we can get the current state of the trackers -fn query_state() { - let mut deps = mock_dependencies(); - - let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); - let msg = InstantiateMsg { - gov_module: MockApi::default().addr_make(GOV_ADDR), - ibc_module: MockApi::default().addr_make(IBC_ADDR), - paths: vec![PathMsg { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quotas: vec![quota], - }], - }; - let info = mock_info(GOV_ADDR, &[]); - let env = mock_env(); - let _res = instantiate(deps.as_mut(), env.clone(), info, msg).unwrap(); - - let query_msg = QueryMsg::GetQuotas { - channel_id: "any".to_string(), - denom: "denom".to_string(), - }; - - let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); - let value: Vec = from_binary(&res).unwrap(); - assert_eq!(value[0].quota.name, "weekly"); - assert_eq!(value[0].quota.max_percentage_send, 10); - assert_eq!(value[0].quota.max_percentage_recv, 10); - assert_eq!(value[0].quota.duration, RESET_TIME_WEEKLY); - assert_eq!(value[0].flow.inflow, Uint256::from(0_u32)); - assert_eq!(value[0].flow.outflow, Uint256::from(0_u32)); - assert_eq!( - value[0].flow.period_end, - env.block.time.plus_seconds(RESET_TIME_WEEKLY) - ); - - let send_msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_300_u32.into(), - funds: 300_u32.into() - ); - sudo(deps.as_mut(), mock_env(), send_msg.clone()).unwrap(); - - let recv_msg = test_msg_recv!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_000_u32.into(), - funds: 30_u32.into() - ); - sudo(deps.as_mut(), mock_env(), recv_msg.clone()).unwrap(); - - // Query - let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); - let value: Vec = from_binary(&res).unwrap(); - verify_query_response( - &value[0], - "weekly", - (10, 10), - RESET_TIME_WEEKLY, - 30_u32.into(), - 300_u32.into(), - env.block.time.plus_seconds(RESET_TIME_WEEKLY), - ); -} - -#[test] // Tests quota percentages are between [0,100] -fn bad_quotas() { - let mut deps = mock_dependencies(); - - let msg = InstantiateMsg { - gov_module: MockApi::default().addr_make(GOV_ADDR), - ibc_module: MockApi::default().addr_make(IBC_ADDR), - paths: vec![PathMsg { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quotas: vec![QuotaMsg { - name: "bad_quota".to_string(), - duration: 200, - send_recv: (5000, 101), - }], - }], - }; - let info = mock_info(IBC_ADDR, &[]); - - let env = mock_env(); - instantiate(deps.as_mut(), env.clone(), info, msg).unwrap(); - - // If a quota is higher than 100%, we set it to 100% - let query_msg = QueryMsg::GetQuotas { - channel_id: "any".to_string(), - denom: "denom".to_string(), - }; - let res = query(deps.as_ref(), env.clone(), query_msg).unwrap(); - let value: Vec = from_binary(&res).unwrap(); - verify_query_response( - &value[0], - "bad_quota", - (100, 100), - 200, - 0_u32.into(), - 0_u32.into(), - env.block.time.plus_seconds(200), - ); -} - -#[test] // Tests that undo reverts a packet send without affecting expiration or channel value -fn undo_send() { - let mut deps = mock_dependencies(); - - let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); - let msg = InstantiateMsg { - gov_module: MockApi::default().addr_make(GOV_ADDR), - ibc_module: MockApi::default().addr_make(IBC_ADDR), - paths: vec![PathMsg { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quotas: vec![quota], - }], - }; - let info = mock_info(GOV_ADDR, &[]); - let _res = instantiate(deps.as_mut(), mock_env(), info.clone(), msg).unwrap(); - - let send_msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_300_u32.into(), - funds: 300_u32.into() - ); - let undo_msg = SudoMsg::UndoSend { - packet: Packet::mock( - "channel".to_string(), - "channel".to_string(), - "denom".to_string(), - 300_u32.into(), - ), - }; - - sudo(deps.as_mut(), mock_env(), send_msg.clone()).unwrap(); - - let trackers = RATE_LIMIT_TRACKERS - .load(&deps.storage, ("any".to_string(), "denom".to_string())) - .unwrap(); - assert_eq!( - trackers.first().unwrap().flow.outflow, - Uint256::from(300_u32) - ); - let period_end = trackers.first().unwrap().flow.period_end; - let channel_value = trackers.first().unwrap().quota.channel_value; - - sudo(deps.as_mut(), mock_env(), undo_msg.clone()).unwrap(); - - let trackers = RATE_LIMIT_TRACKERS - .load(&deps.storage, ("any".to_string(), "denom".to_string())) - .unwrap(); - assert_eq!(trackers.first().unwrap().flow.outflow, Uint256::from(0_u32)); - assert_eq!(trackers.first().unwrap().flow.period_end, period_end); - assert_eq!(trackers.first().unwrap().quota.channel_value, channel_value); -} - -#[test] -fn test_basic_message() { - let json = r#"{"send_packet":{"packet":{"sequence":2,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-0","data":{"denom":"stake","amount":"125000000000011250","sender":"osmo1dwtagd6xzl4eutwtyv6mewra627lkg3n3w26h6","receiver":"osmo1yvjkt8lnpxucjmspaj5ss4aa8562gx0a3rks8s"},"timeout_height":{"revision_height":100}}}}"#; - let _parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); - //println!("{parsed:?}"); -} - -#[test] -fn test_testnet_message() { - let json = r#"{"send_packet":{"packet":{"sequence":4,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-1491","data":{"denom":"uosmo","amount":"100","sender":"osmo1cyyzpxplxdzkeea7kwsydadg87357qnahakaks","receiver":"osmo1c584m4lq25h83yp6ag8hh4htjr92d954vklzja"},"timeout_height":{},"timeout_timestamp":1668024637477293371}}}"#; - let _parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); - //println!("{parsed:?}"); -} - -#[test] -fn test_tokenfactory_message() { - let json = r#"{"send_packet":{"packet":{"sequence":4,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-1491","data":{"denom":"transfer/channel-0/factory/osmo12smx2wdlyttvyzvzg54y2vnqwq2qjateuf7thj/czar","amount":"100000000000000000","sender":"osmo1cyyzpxplxdzkeea7kwsydadg87357qnahakaks","receiver":"osmo1c584m4lq25h83yp6ag8hh4htjr92d954vklzja"},"timeout_height":{},"timeout_timestamp":1668024476848430980}}}"#; - let _parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); - //println!("{parsed:?}"); -} - -#[test] // Tests we ccan instantiate the contract and that the owners are set correctly -fn proper_migrate() { - let mut deps = mock_dependencies(); - let env = mock_env(); - - crate::contract::instantiate( - deps.as_mut(), - env, - MessageInfo { - sender: MockApi::default().addr_make("osmo16tumts0kckpfp9fk7e3rnx9ahzn70dyyqfypgh"), - funds: vec![], - }, - InstantiateMsg { - gov_module: MockApi::default().addr_make(GOV_ADDR), - ibc_module: MockApi::default().addr_make(IBC_ADDR), - paths: vec![], - }, - ) - .unwrap(); - - // test that instantiate set the correct gov module address and RBAC permissions - let permissions = RBAC_PERMISSIONS - .load(&mut deps.storage, MockApi::default().addr_make(GOV_ADDR).to_string()) - .unwrap(); - for permission in Roles::all_roles() { - assert!(permissions.contains(&permission)); - } - assert_eq!(GOVMODULE.load(deps.as_ref().storage).unwrap().to_string(), MockApi::default().addr_make(GOV_ADDR).to_string()); - - // revoke all roles from the gov contract, instantiation should re-asssign - crate::rbac::revoke_role(&mut deps.as_mut(), MockApi::default().addr_make(GOV_ADDR).to_string(), Roles::all_roles()).unwrap(); - - migrate(deps.as_mut(), mock_env(), MigrateMsg {}).unwrap(); - - // ensure migration assigned all the roles - let permissions = RBAC_PERMISSIONS - .load(&mut deps.storage, MockApi::default().addr_make(GOV_ADDR).to_string()) - .unwrap(); - for permission in Roles::all_roles() { - assert!(permissions.contains(&permission)); - } -} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/error.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/error.rs deleted file mode 100644 index 805dd775e..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/error.rs +++ /dev/null @@ -1,34 +0,0 @@ -use cosmwasm_std::{StdError, Timestamp, Uint256}; -use thiserror::Error; - -#[derive(Error, Debug, PartialEq)] -pub enum ContractError { - #[error("{0}")] - Std(#[from] StdError), - - #[error("Unauthorized")] - Unauthorized {}, - - #[error("IBC Rate Limit exceeded for {channel}/{denom}. Tried to transfer {amount} which exceeds capacity on the '{quota_name}' quota ({used}/{max}). Try again after {reset:?}")] - RateLimitExceded { - channel: String, - denom: String, - amount: Uint256, - quota_name: String, - used: Uint256, - max: Uint256, - reset: Timestamp, - }, - - #[error("Quota {quota_id} not found for channel {channel_id}")] - QuotaNotFound { - quota_id: String, - channel_id: String, - denom: String, - }, - #[error("{0}")] - InvalidParameters(String), - - #[error("Channel {channel} has been blocked for denom {denom}")] - ChannelBlocked { channel: String, denom: String }, -} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/execute.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/execute.rs deleted file mode 100644 index a39c5faac..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/execute.rs +++ /dev/null @@ -1,440 +0,0 @@ -use crate::msg::{PathMsg, QuotaMsg}; - -use crate::state::storage::ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM; -use crate::state::{flow::Flow, path::Path, rate_limit::RateLimit, storage::RATE_LIMIT_TRACKERS}; -use crate::ContractError; -use cosmwasm_std::{DepsMut, Response, Timestamp}; - -pub fn add_new_paths( - deps: &mut DepsMut, - path_msgs: Vec, - now: Timestamp, -) -> Result<(), ContractError> { - for path_msg in path_msgs { - let path = Path::new(path_msg.channel_id, path_msg.denom); - - RATE_LIMIT_TRACKERS.save( - deps.storage, - path.into(), - &path_msg - .quotas - .iter() - .map(|q| RateLimit { - quota: q.into(), - flow: Flow::new(0_u128, 0_u128, now, q.duration), - }) - .collect(), - )? - } - Ok(()) -} - -pub fn try_add_path( - deps: &mut DepsMut, - channel_id: String, - denom: String, - quotas: Vec, - now: Timestamp, -) -> Result { - add_new_paths(deps, vec![PathMsg::new(&channel_id, &denom, quotas)], now)?; - - Ok(Response::new() - .add_attribute("method", "try_add_channel") - .add_attribute("channel_id", channel_id) - .add_attribute("denom", denom)) -} - -pub fn try_remove_path( - deps: &mut DepsMut, - channel_id: String, - denom: String, -) -> Result { - let path = Path::new(&channel_id, &denom); - RATE_LIMIT_TRACKERS.remove(deps.storage, path.into()); - Ok(Response::new() - .add_attribute("method", "try_remove_channel") - .add_attribute("denom", denom) - .add_attribute("channel_id", channel_id)) -} - -// Reset specified quote_id for the given channel_id -pub fn try_reset_path_quota( - deps: &mut DepsMut, - channel_id: String, - denom: String, - quota_id: String, - now: Timestamp, -) -> Result { - let path = Path::new(&channel_id, &denom); - RATE_LIMIT_TRACKERS.update(deps.storage, path.into(), |maybe_rate_limit| { - match maybe_rate_limit { - None => Err(ContractError::QuotaNotFound { - quota_id, - channel_id: channel_id.clone(), - denom: denom.clone(), - }), - Some(mut limits) => { - // Q: What happens here if quote_id not found? seems like we return ok? - limits.iter_mut().for_each(|limit| { - if limit.quota.name == quota_id.as_ref() { - limit.flow.expire(now, limit.quota.duration) - } - }); - Ok(limits) - } - } - })?; - - Ok(Response::new() - .add_attribute("method", "try_reset_channel") - .add_attribute("channel_id", channel_id)) -} - -pub fn edit_path_quota( - deps: &mut DepsMut, - channel_id: String, - denom: String, - quota: QuotaMsg, -) -> Result<(), ContractError> { - let path = Path::new(&channel_id, &denom); - RATE_LIMIT_TRACKERS.update(deps.storage, path.into(), |maybe_rate_limit| { - match maybe_rate_limit { - None => Err(ContractError::QuotaNotFound { - quota_id: quota.name, - channel_id: channel_id.clone(), - denom: denom.clone(), - }), - Some(mut limits) => { - limits.iter_mut().for_each(|limit| { - if limit.quota.name.eq("a.name) { - // TODO: is this the current way of handling channel_value when editing the quota? - - // cache the current channel_value - let channel_value = limit.quota.channel_value; - // update the quota - limit.quota = From::from("a); - // copy the channel_value - limit.quota.channel_value = channel_value; - } - }); - Ok(limits) - } - } - })?; - Ok(()) -} - -pub fn set_denom_restrictions( - deps: &mut DepsMut, - denom: String, - allowed_channels: Vec, -) -> Result { - ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM.save(deps.storage, denom, &allowed_channels)?; - Ok(Response::new().add_attribute("method", "set_denom_restrictions")) -} - -pub fn unset_denom_restrictions( - deps: &mut DepsMut, - denom: String, -) -> Result { - ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM.remove(deps.storage, denom); - Ok(Response::new().add_attribute("method", "unset_denom_restrictions")) -} - -#[cfg(test)] -mod tests { - use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info, MockApi}; - use cosmwasm_std::{from_binary, Addr, StdError}; - - use crate::contract::{execute, query}; - use crate::helpers::tests::verify_query_response; - use crate::msg::{ExecuteMsg, QueryMsg, QuotaMsg}; - use crate::state::rbac::Roles; - use crate::state::{ - rate_limit::RateLimit, - storage::{ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM, GOVMODULE, IBCMODULE}, - }; - use crate::ContractError; - - const IBC_ADDR: &str = "neutron1cdlz8scnf3mmxdnf4njmtp7vz4gps7fswphrqn"; - const GOV_ADDR: &str = "neutron1w02khza7ux68ccwmz2hln97mkjspjxes8y2k9v"; - - #[test] // Tests AddPath and RemovePath messages - fn management_add_and_remove_path() { - let mut deps = mock_dependencies(); - IBCMODULE - .save(deps.as_mut().storage, &MockApi::default().addr_make(IBC_ADDR)) - .unwrap(); - GOVMODULE - .save(deps.as_mut().storage, &MockApi::default().addr_make(GOV_ADDR)) - .unwrap(); - - // grant role to IBC_ADDR - crate::rbac::grant_role( - &mut deps.as_mut(), - MockApi::default().addr_make(IBC_ADDR).to_string(), - vec![Roles::AddRateLimit, Roles::RemoveRateLimit], - ) - .unwrap(); - - let msg = ExecuteMsg::AddPath { - channel_id: "channel".to_string(), - denom: "denom".to_string(), - quotas: vec![QuotaMsg { - name: "daily".to_string(), - duration: 1600, - send_recv: (3, 5), - }], - }; - let info = mock_info(&MockApi::default().addr_make(IBC_ADDR).to_string(), &[]); - - let env = mock_env(); - let res = execute(deps.as_mut(), env.clone(), info, msg).unwrap(); - assert_eq!(0, res.messages.len()); - - let query_msg = QueryMsg::GetQuotas { - channel_id: "channel".to_string(), - denom: "denom".to_string(), - }; - - let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); - - let value: Vec = from_binary(&res).unwrap(); - verify_query_response( - &value[0], - "daily", - (3, 5), - 1600, - 0_u32.into(), - 0_u32.into(), - env.block.time.plus_seconds(1600), - ); - - assert_eq!(value.len(), 1); - - // Add another path - let msg = ExecuteMsg::AddPath { - channel_id: "channel2".to_string(), - denom: "denom".to_string(), - quotas: vec![QuotaMsg { - name: "daily".to_string(), - duration: 1600, - send_recv: (3, 5), - }], - }; - let info = mock_info(&MockApi::default().addr_make(IBC_ADDR).to_string(), &[]); - - let env = mock_env(); - execute(deps.as_mut(), env.clone(), info, msg).unwrap(); - - // remove the first one - let msg = ExecuteMsg::RemovePath { - channel_id: "channel".to_string(), - denom: "denom".to_string(), - }; - - let info = mock_info(&MockApi::default().addr_make(IBC_ADDR).to_string(), &[]); - let env = mock_env(); - execute(deps.as_mut(), env.clone(), info, msg).unwrap(); - - // The channel is not there anymore - let err = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap_err(); - assert!(matches!(err, StdError::NotFound { .. })); - - // The second channel is still there - let query_msg = QueryMsg::GetQuotas { - channel_id: "channel2".to_string(), - denom: "denom".to_string(), - }; - let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); - let value: Vec = from_binary(&res).unwrap(); - assert_eq!(value.len(), 1); - verify_query_response( - &value[0], - "daily", - (3, 5), - 1600, - 0_u32.into(), - 0_u32.into(), - env.block.time.plus_seconds(1600), - ); - - // Paths are overriden if they share a name and denom - let msg = ExecuteMsg::AddPath { - channel_id: "channel2".to_string(), - denom: "denom".to_string(), - quotas: vec![QuotaMsg { - name: "different".to_string(), - duration: 5000, - send_recv: (50, 30), - }], - }; - let info = mock_info(&MockApi::default().addr_make(IBC_ADDR).to_string(), &[]); - - let env = mock_env(); - execute(deps.as_mut(), env.clone(), info, msg).unwrap(); - - let query_msg = QueryMsg::GetQuotas { - channel_id: "channel2".to_string(), - denom: "denom".to_string(), - }; - let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); - let value: Vec = from_binary(&res).unwrap(); - assert_eq!(value.len(), 1); - - verify_query_response( - &value[0], - "different", - (50, 30), - 5000, - 0_u32.into(), - 0_u32.into(), - env.block.time.plus_seconds(5000), - ); - } - - #[test] - fn test_execute_set_denom_restrictions() { - let mut deps = mock_dependencies(); - - // Set up the message and the environment - let denom = "denom1".to_string(); - let allowed_channels = vec!["channel1".to_string(), "channel2".to_string()]; - let msg = ExecuteMsg::SetDenomRestrictions { - denom: denom.clone(), - allowed_channels: allowed_channels.clone(), - }; - let info = mock_info(&MockApi::default().addr_make("executor").to_string(), &[]); - - // Grant the necessary role - crate::rbac::grant_role( - &mut deps.as_mut(), - MockApi::default().addr_make("executor").to_string(), - vec![Roles::ManageDenomRestrictions], - ) - .unwrap(); - - // Execute the message - let res = execute(deps.as_mut(), mock_env(), info, msg).unwrap(); - assert_eq!(res.attributes[0].value, "set_denom_restrictions"); - - // Verify the restriction was set - let stored_channels = ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM - .load(deps.as_ref().storage, denom) - .unwrap(); - assert_eq!(stored_channels, allowed_channels); - } - - #[test] - fn test_execute_unset_denom_restrictions() { - let mut deps = mock_dependencies(); - - // First, set a restriction - let denom = "denom1".to_string(); - let allowed_channels = vec!["channel1".to_string()]; - let set_msg = ExecuteMsg::SetDenomRestrictions { - denom: denom.clone(), - allowed_channels: allowed_channels.clone(), - }; - let info = mock_info(&MockApi::default().addr_make("executor").to_string(), &[]); - - // Grant the necessary role - crate::rbac::grant_role( - &mut deps.as_mut(), - MockApi::default().addr_make("executor").to_string(), - vec![Roles::ManageDenomRestrictions], - ) - .unwrap(); - - // Execute the set message - execute(deps.as_mut(), mock_env(), info.clone(), set_msg).unwrap(); - - // Verify the restriction was set - let stored_channels = ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM - .load(deps.as_ref().storage, denom.clone()) - .unwrap(); - assert_eq!(stored_channels, allowed_channels); - - // Now unset the restriction - let unset_msg = ExecuteMsg::UnsetDenomRestrictions { - denom: denom.clone(), - }; - let res = execute(deps.as_mut(), mock_env(), info, unset_msg).unwrap(); - assert_eq!(res.attributes[0].value, "unset_denom_restrictions"); - - // Verify the restriction was removed - let stored_channels = ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM - .may_load(deps.as_ref().storage, denom) - .unwrap(); - assert!(stored_channels.is_none()); - } - - #[test] - fn test_query_denom_restrictions() { - let mut deps = mock_dependencies(); - - // Set up initial restrictions - let denom = "denom1".to_string(); - let allowed_channels = vec!["channel1".to_string(), "channel2".to_string()]; - let set_msg = ExecuteMsg::SetDenomRestrictions { - denom: denom.clone(), - allowed_channels: allowed_channels.clone(), - }; - let info = mock_info(&MockApi::default().addr_make("executor").to_string(), &[]); - - // Grant the necessary role - crate::rbac::grant_role( - &mut deps.as_mut(), - MockApi::default().addr_make("executor").to_string(), - vec![Roles::ManageDenomRestrictions], - ) - .unwrap(); - - // Execute the set message - execute(deps.as_mut(), mock_env(), info, set_msg).unwrap(); - - // Query the restrictions - let query_msg = QueryMsg::GetDenomRestrictions { - denom: denom.clone(), - }; - let res = query(deps.as_ref(), mock_env(), query_msg).unwrap(); - let returned_channels: Vec = from_binary(&res).unwrap(); - assert_eq!(returned_channels, allowed_channels); - } - - #[test] - fn test_query_unset_denom_restrictions() { - let deps = mock_dependencies(); - - // Attempt to query restrictions on a denom with no restrictions - let denom = "denom1".to_string(); - let query_msg = QueryMsg::GetDenomRestrictions { - denom: denom.clone(), - }; - query(deps.as_ref(), mock_env(), query_msg).unwrap_err(); - } - - #[test] - fn test_permissions_enforced() { - let mut deps = mock_dependencies(); - - // Set up the message and the environment - let denom = "denom1".to_string(); - let allowed_channels = vec!["channel1".to_string(), "channel2".to_string()]; - let msg = ExecuteMsg::SetDenomRestrictions { - denom: denom.clone(), - allowed_channels: allowed_channels.clone(), - }; - let info = mock_info("unauthorized_user", &[]); - - // Attempt to execute the message without the necessary role - let err = execute(deps.as_mut(), mock_env(), info, msg).unwrap_err(); - assert!(matches!(err, ContractError::Unauthorized { .. })); - - // Verify no restrictions were set - let stored_channels = ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM - .may_load(deps.as_ref().storage, denom) - .unwrap(); - assert!(stored_channels.is_none()); - } -} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/helpers.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/helpers.rs deleted file mode 100644 index fc3d5a814..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/helpers.rs +++ /dev/null @@ -1,61 +0,0 @@ -#![cfg(test)] -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; - -use cosmwasm_std::{to_binary, Addr, CosmosMsg, StdResult, WasmMsg}; - -use crate::msg::ExecuteMsg; -use crate::msg::SudoMsg; - -/// CwTemplateContract is a wrapper around Addr that provides a lot of helpers -/// for working with this. -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] -pub struct RateLimitingContract(pub Addr); - -impl RateLimitingContract { - pub fn addr(&self) -> Addr { - self.0.clone() - } - - pub fn call>(&self, msg: T) -> StdResult { - let msg = to_binary(&msg.into())?; - Ok(WasmMsg::Execute { - contract_addr: self.addr().into(), - msg, - funds: vec![], - } - .into()) - } - - pub fn sudo>(&self, msg: T) -> cw_multi_test::SudoMsg { - let msg = to_binary(&msg.into()).unwrap(); - cw_multi_test::SudoMsg::Wasm(cw_multi_test::WasmSudo { - contract_addr: self.addr(), - message: msg, - }) - } -} - -pub mod tests { - use cosmwasm_std::{Timestamp, Uint256}; - - use crate::state::rate_limit::RateLimit; - - pub fn verify_query_response( - value: &RateLimit, - quota_name: &str, - send_recv: (u32, u32), - duration: u64, - inflow: Uint256, - outflow: Uint256, - period_end: Timestamp, - ) { - assert_eq!(value.quota.name, quota_name); - assert_eq!(value.quota.max_percentage_send, send_recv.0); - assert_eq!(value.quota.max_percentage_recv, send_recv.1); - assert_eq!(value.quota.duration, duration); - assert_eq!(value.flow.inflow, inflow); - assert_eq!(value.flow.outflow, outflow); - assert_eq!(value.flow.period_end, period_end); - } -} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/integration_tests.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/integration_tests.rs deleted file mode 100644 index c86b19972..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/integration_tests.rs +++ /dev/null @@ -1,1019 +0,0 @@ -#![cfg(test)] - -use crate::{ - helpers::RateLimitingContract, - msg::{ExecuteMsg, QueryMsg}, - state::{rate_limit::RateLimit, rbac::Roles}, - test_msg_send, ContractError, -}; -use cosmwasm_std::{testing::MockApi, Addr, Coin, Empty, Timestamp, Uint128, Uint256}; -use cw_multi_test::{App, AppBuilder, Contract, ContractWrapper, Executor}; - -use crate::{ - msg::{InstantiateMsg, PathMsg, QuotaMsg}, - state::flow::tests::{RESET_TIME_DAILY, RESET_TIME_MONTHLY, RESET_TIME_WEEKLY}, -}; - -pub fn contract_template() -> Box> { - let contract = ContractWrapper::new( - crate::contract::execute, - crate::contract::instantiate, - crate::contract::query, - ) - .with_sudo(crate::contract::sudo); - Box::new(contract) -} - -const USER: &str = "USER"; -const IBC_ADDR: &str = "neutron1cdlz8scnf3mmxdnf4njmtp7vz4gps7fswphrqn"; -const GOV_ADDR: &str = "neutron1w02khza7ux68ccwmz2hln97mkjspjxes8y2k9v"; -const NATIVE_DENOM: &str = "nosmo"; - -fn mock_app() -> App { - AppBuilder::new().build(|router, _, storage| { - router - .bank - .init_balance( - storage, - &Addr::unchecked(USER), - vec![Coin { - denom: NATIVE_DENOM.to_string(), - amount: Uint128::new(1_000), - }], - ) - .unwrap(); - }) -} - -// Instantiate the contract -fn proper_instantiate(paths: Vec) -> (App, RateLimitingContract) { - let mut app = mock_app(); - let cw_code_id = app.store_code(contract_template()); - - let msg = InstantiateMsg { - gov_module: MockApi::default().addr_make(GOV_ADDR), - ibc_module: Addr::unchecked(IBC_ADDR), - paths, - }; - - let cw_rate_limit_contract_addr = app - .instantiate_contract( - cw_code_id, - MockApi::default().addr_make(GOV_ADDR), - &msg, - &[], - "test", - None, - ) - .unwrap(); - - let cw_rate_limit_contract = RateLimitingContract(cw_rate_limit_contract_addr); - - (app, cw_rate_limit_contract) -} - -use cosmwasm_std::Attribute; - -#[test] // Checks that the RateLimit flows are expired properly when time passes -fn expiration() { - let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); - - let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quotas: vec![quota], - }]); - - // Using all the allowance - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_000_u32.into(), - funds: 300_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - let res = app.sudo(cosmos_msg).unwrap(); - - let Attribute { key, value } = &res.custom_attrs(1)[3]; - assert_eq!(key, "weekly_used_in"); - assert_eq!(value, "0"); - let Attribute { key, value } = &res.custom_attrs(1)[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "300"); - let Attribute { key, value } = &res.custom_attrs(1)[5]; - assert_eq!(key, "weekly_max_in"); - assert_eq!(value, "300"); - let Attribute { key, value } = &res.custom_attrs(1)[6]; - assert_eq!(key, "weekly_max_out"); - assert_eq!(value, "300"); - - // Another packet is rate limited - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_000_u32.into(), - funds: 300_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - let err = app.sudo(cosmos_msg).unwrap_err(); - - assert_eq!( - err.downcast_ref::().unwrap(), - &ContractError::RateLimitExceded { - channel: "channel".to_string(), - denom: "denom".to_string(), - amount: Uint256::from_u128(300), - quota_name: "weekly".to_string(), - used: Uint256::from_u128(300), - max: Uint256::from_u128(300), - reset: Timestamp::from_nanos(1572402219879305533), - } - ); - - // ... Time passes - app.update_block(|b| { - b.height += 1000; - b.time = b.time.plus_seconds(RESET_TIME_WEEKLY + 1) - }); - - // Sending the packet should work now - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_000_u32.into(), - funds: 300_u32.into() - ); - - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - let res = app.sudo(cosmos_msg).unwrap(); - - let Attribute { key, value } = &res.custom_attrs(1)[3]; - assert_eq!(key, "weekly_used_in"); - assert_eq!(value, "0"); - let Attribute { key, value } = &res.custom_attrs(1)[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "300"); - let Attribute { key, value } = &res.custom_attrs(1)[5]; - assert_eq!(key, "weekly_max_in"); - assert_eq!(value, "300"); - let Attribute { key, value } = &res.custom_attrs(1)[6]; - assert_eq!(key, "weekly_max_out"); - assert_eq!(value, "300"); -} - -#[test] // Tests we can have different maximums for different quotaas (daily, weekly, etc) and that they all are active at the same time -fn multiple_quotas() { - let quotas = vec![ - QuotaMsg::new("daily", RESET_TIME_DAILY, 1, 1), - QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), - QuotaMsg::new("monthly", RESET_TIME_MONTHLY, 5, 5), - ]; - - let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quotas, - }]); - - // Sending 1% to use the daily allowance - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap(); - - // Another packet is rate limited - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap_err(); - - // ... One day passes - app.update_block(|b| { - b.height += 10; - b.time = b.time.plus_seconds(RESET_TIME_DAILY + 1) - }); - - // Sending the packet should work now - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap(); - - // Do that for 4 more days - for _ in 1..4 { - // ... One day passes - app.update_block(|b| { - b.height += 10; - b.time = b.time.plus_seconds(RESET_TIME_DAILY + 1) - }); - - // Sending the packet should work now - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap(); - } - - // ... One day passes - app.update_block(|b| { - b.height += 10; - b.time = b.time.plus_seconds(RESET_TIME_DAILY + 1) - }); - - // We now have exceeded the weekly limit! Even if the daily limit allows us, the weekly doesn't - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap_err(); - - // ... One week passes - app.update_block(|b| { - b.height += 10; - b.time = b.time.plus_seconds(RESET_TIME_WEEKLY + 1) - }); - - // We can still can't send because the weekly and monthly limits are the same - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap_err(); - - // Waiting a week again, doesn't help!! - // ... One week passes - app.update_block(|b| { - b.height += 10; - b.time = b.time.plus_seconds(RESET_TIME_WEEKLY + 1) - }); - - // We can still can't send because the monthly limit hasn't passed - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap_err(); - - // Only after two more weeks we can send again - app.update_block(|b| { - b.height += 10; - b.time = b.time.plus_seconds((RESET_TIME_WEEKLY * 2) + 1) // Two weeks - }); - - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap(); -} - -#[test] // Tests that the channel value is based on the value at the beginning of the period -fn channel_value_cached() { - let quotas = vec![ - QuotaMsg::new("daily", RESET_TIME_DAILY, 2, 2), - QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), - ]; - - let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quotas, - }]); - - // Sending 1% (half of the daily allowance) - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 100_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap(); - - // Sending 3% is now rate limited - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 100_u32.into(), - funds: 3_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap_err(); - - // Even if the channel value increases, the percentage is calculated based on the value at period start - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 100000_u32.into(), - funds: 3_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap_err(); - - // ... One day passes - app.update_block(|b| { - b.height += 10; - b.time = b.time.plus_seconds(RESET_TIME_DAILY + 1) - }); - - // New Channel Value world! - - // Sending 1% of a new value (10_000) passes the daily check, cause it - // has expired, but not the weekly check (The value for last week is - // sitll 100, as only 1 day has passed) - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 10_000_u32.into(), - funds: 100_u32.into() - ); - - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap_err(); - - // ... One week passes - app.update_block(|b| { - b.height += 10; - b.time = b.time.plus_seconds(RESET_TIME_WEEKLY + 1) - }); - - // Sending 1% of a new value should work and set the value for the day at 10_000 - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 10_000_u32.into(), - funds: 100_u32.into() - ); - - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap(); - - // If the value magically decreasses. We can still send up to 100 more (1% of 10k) - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 1_u32.into(), - funds: 75_u32.into() - ); - - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap(); -} - -#[test] // Checks that RateLimits added after instantiation are respected -fn add_paths_later() { - let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![]); - - // All sends are allowed - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_000_u32.into(), - funds: 300_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg.clone()); - let res = app.sudo(cosmos_msg).unwrap(); - - let Attribute { key, value } = &res.custom_attrs(1)[3]; - assert_eq!(key, "quota"); - assert_eq!(value, "none"); - - // Add a weekly limit of 1% - let management_msg = ExecuteMsg::AddPath { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quotas: vec![QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 1, 1)], - }; - - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg).unwrap(); - - // Executing the same message again should fail, as it is now rate limited - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap_err(); -} - -#[test] -fn test_execute_add_path() { - let quotas = vec![ - QuotaMsg::new("daily", RESET_TIME_DAILY, 1, 1), - QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), - QuotaMsg::new("monthly", RESET_TIME_MONTHLY, 5, 5), - ]; - - let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quotas, - }]); - - let management_msg = ExecuteMsg::AddPath { - channel_id: "new_channel_id".to_string(), - denom: "new_denom".to_string(), - quotas: vec![QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 1, 1)], - }; - - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - // non gov cant invoke - assert!(app - .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) - .is_err()); - // gov addr can invoke - app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) - .unwrap(); - - // Sending 1% to use the daily allowance - let msg = test_msg_send!( - channel_id: format!("new_channel_id"), - denom: format!("new_denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg.clone()); - app.sudo(cosmos_msg).unwrap(); - - let response: Vec = app - .wrap() - .query_wasm_smart( - cw_rate_limit_contract.addr(), - &QueryMsg::GetQuotas { - channel_id: "new_channel_id".to_string(), - denom: "new_denom".to_string(), - }, - ) - .unwrap(); - assert_eq!(response.len(), 1); - assert_eq!(response[0].flow.outflow, Uint256::one()); - assert_eq!( - response[0].quota.channel_value, - Some(Uint256::from_u128(101)) - ); -} -#[test] -fn test_execute_remove_path() { - let quotas = vec![ - QuotaMsg::new("daily", RESET_TIME_DAILY, 1, 1), - QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), - QuotaMsg::new("monthly", RESET_TIME_MONTHLY, 5, 5), - ]; - - let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quotas, - }]); - - let management_msg = ExecuteMsg::RemovePath { - channel_id: "any".to_string(), - denom: "denom".to_string(), - }; - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - // non gov cant invoke - assert!(app - .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) - .is_err()); - // gov addr can invoke - app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) - .unwrap(); - - // rate limits should be removed - assert!(app - .wrap() - .query_wasm_smart::( - cw_rate_limit_contract.addr(), - &QueryMsg::GetQuotas { - channel_id: "any".to_string(), - denom: "denom".to_string() - } - ) - .is_err()); -} - -#[test] -fn test_execute_reset_path_quota() { - let quotas = vec![ - QuotaMsg::new("daily", RESET_TIME_DAILY, 1, 1), - QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), - QuotaMsg::new("monthly", RESET_TIME_MONTHLY, 5, 5), - ]; - - let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quotas, - }]); - - // Sending 1% to use the daily allowance - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg.clone()); - app.sudo(cosmos_msg).unwrap(); - - let management_msg = ExecuteMsg::ResetPathQuota { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quota_id: "daily".to_string(), - }; - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - // non gov cant invoke - assert!(app - .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) - .is_err()); - // gov addr can invoke - app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) - .unwrap(); - - let response = app - .wrap() - .query_wasm_smart::>( - cw_rate_limit_contract.addr(), - &QueryMsg::GetQuotas { - channel_id: "any".to_string(), - denom: "denom".to_string(), - }, - ) - .unwrap(); - - // daily quota should be reset - let daily_quota = response - .iter() - .find(|rate_limit| rate_limit.quota.name.eq("daily")) - .unwrap(); - assert_eq!(daily_quota.flow.inflow, Uint256::zero()); - assert_eq!(daily_quota.flow.outflow, Uint256::zero()); - - // weekly and monthly should not be reset - let weekly_quota = response - .iter() - .find(|rate_limit| rate_limit.quota.name.eq("weekly")) - .unwrap(); - assert_eq!(weekly_quota.flow.inflow, Uint256::zero()); - assert_eq!(weekly_quota.flow.outflow, Uint256::one()); - - let monthly_quota = response - .iter() - .find(|rate_limit| rate_limit.quota.name.eq("monthly")) - .unwrap(); - assert_eq!(monthly_quota.flow.inflow, Uint256::zero()); - assert_eq!(monthly_quota.flow.outflow, Uint256::one()); -} - -#[test] -fn test_execute_grant_and_revoke_role() { - let quotas = vec![ - QuotaMsg::new("daily", RESET_TIME_DAILY, 1, 1), - QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), - QuotaMsg::new("monthly", RESET_TIME_MONTHLY, 5, 5), - ]; - - let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quotas, - }]); - - let management_msg = ExecuteMsg::GrantRole { - signer: MockApi::default().addr_make("foobar").to_string(), - roles: vec![Roles::GrantRole], - }; - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - // non gov cant invoke - assert!(app - .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) - .is_err()); - // gov addr can invoke - app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) - .unwrap(); - - let response = app - .wrap() - .query_wasm_smart::>( - cw_rate_limit_contract.addr(), - &QueryMsg::GetRoles { - owner: MockApi::default().addr_make("foobar").to_string(), - }, - ) - .unwrap(); - assert_eq!(response.len(), 1); - assert_eq!(response[0], Roles::GrantRole); - - // test foobar can grant a role - let management_msg = ExecuteMsg::GrantRole { - signer: MockApi::default().addr_make("foobarbaz").to_string(), - roles: vec![Roles::GrantRole], - }; - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) - .unwrap(); - - let response = app - .wrap() - .query_wasm_smart::>( - cw_rate_limit_contract.addr(), - &QueryMsg::GetRoles { - owner: MockApi::default().addr_make("foobarbaz").to_string(), - }, - ) - .unwrap(); - assert_eq!(response.len(), 1); - assert_eq!(response[0], Roles::GrantRole); - - // test role revocation - - let management_msg = ExecuteMsg::RevokeRole { - signer: MockApi::default().addr_make("foobar").to_string(), - roles: vec![Roles::GrantRole], - }; - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) - .unwrap(); - - // foobar should no longer have roles - assert!(app - .wrap() - .query_wasm_smart::>( - cw_rate_limit_contract.addr(), - &QueryMsg::GetRoles { - owner: MockApi::default().addr_make("foobar").to_string() - } - ) - .is_err()); -} - -#[test] -fn test_execute_edit_path_quota() { - let quotas = vec![ - QuotaMsg::new("daily", RESET_TIME_DAILY, 1, 1), - QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), - QuotaMsg::new("monthly", RESET_TIME_MONTHLY, 5, 5), - ]; - - let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quotas, - }]); - - // Sending 1% to use the daily allowance - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg.clone()); - app.sudo(cosmos_msg).unwrap(); - - let management_msg = ExecuteMsg::EditPathQuota { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quota: QuotaMsg { - send_recv: (81, 58), - name: "monthly".to_string(), - duration: RESET_TIME_MONTHLY, - }, - }; - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - // non gov cant invoke - assert!(app - .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) - .is_err()); - // gov addr can invoke - app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) - .unwrap(); - - let response = app - .wrap() - .query_wasm_smart::>( - cw_rate_limit_contract.addr(), - &QueryMsg::GetQuotas { - channel_id: "any".to_string(), - denom: "denom".to_string(), - }, - ) - .unwrap(); - let monthly_quota = response - .iter() - .find(|rate_limit| rate_limit.quota.name.eq("monthly")) - .unwrap(); - assert_eq!(monthly_quota.quota.max_percentage_send, 81); - assert_eq!(monthly_quota.quota.max_percentage_recv, 58); -} -#[test] -fn test_execute_remove_message() { - // this test case also covers timelock delay set, as a non zero timelock - // will force the message to be queued, thus allowing queue removal - - let quotas = vec![ - QuotaMsg::new("daily", RESET_TIME_DAILY, 1, 1), - QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), - QuotaMsg::new("monthly", RESET_TIME_MONTHLY, 5, 5), - ]; - - let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quotas, - }]); - - let management_msg = ExecuteMsg::GrantRole { - signer: MockApi::default().addr_make("foobar").to_string(), - roles: vec![Roles::GrantRole], - }; - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - // non gov cant invoke - assert!(app - .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) - .is_err()); - // gov addr can invoke - app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) - .unwrap(); - - // set a timelock delay for foobar - let management_msg = ExecuteMsg::SetTimelockDelay { - signer: MockApi::default().addr_make("foobar").to_string(), - hours: 1, - }; - - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - // non gov cant invoke as insufficient permissions - assert!(app - .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) - .is_err()); - // gov addr can invoke - app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) - .unwrap(); - - // message submitter by foobar should not be queued - let management_msg = ExecuteMsg::GrantRole { - signer: MockApi::default().addr_make("foobarbaz").to_string(), - roles: vec![Roles::GrantRole], - }; - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) - .unwrap(); - let response = app - .wrap() - .query_wasm_smart::>(cw_rate_limit_contract.addr(), &QueryMsg::GetMessageIds) - .unwrap(); - assert_eq!(response.len(), 1); - - // remove the message - let management_msg = ExecuteMsg::RemoveMessage { - message_id: response[0].clone(), - }; - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) - .unwrap(); - - // no messges should be present - assert_eq!( - app.wrap() - .query_wasm_smart::>( - cw_rate_limit_contract.addr(), - &QueryMsg::GetMessageIds - ) - .unwrap() - .len(), - 0 - ); -} - -#[test] -fn test_execute_process_messages() { - let quotas = vec![ - QuotaMsg::new("daily", RESET_TIME_DAILY, 1, 1), - QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), - QuotaMsg::new("monthly", RESET_TIME_MONTHLY, 5, 5), - ]; - - let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { - channel_id: "any".to_string(), - denom: "denom".to_string(), - quotas, - }]); - - // allocate GrantRole and RevokeRole to `foobar` - let management_msg = ExecuteMsg::GrantRole { - signer: MockApi::default().addr_make("foobar").to_string(), - roles: vec![Roles::GrantRole, Roles::RevokeRole], - }; - - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - // non gov cant invoke - assert!(app - .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) - .is_err()); - // gov addr can invoke - app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) - .unwrap(); - - // set a timelock delay for foobar - let management_msg = ExecuteMsg::SetTimelockDelay { - signer: MockApi::default().addr_make("foobar").to_string(), - hours: 1, - }; - - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - // non gov cant invoke as insufficient permissions - assert!(app - .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) - .is_err()); - // gov addr can invoke - app.execute(MockApi::default().addr_make(GOV_ADDR), cosmos_msg.clone()) - .unwrap(); - - // message submitted by foobar should be queued - // allocate GrantRole to foobarbaz - let management_msg = ExecuteMsg::GrantRole { - signer: MockApi::default().addr_make("foobarbaz").to_string(), - roles: vec![Roles::GrantRole], - }; - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) - .unwrap(); - let response = app - .wrap() - .query_wasm_smart::>(cw_rate_limit_contract.addr(), &QueryMsg::GetMessageIds) - .unwrap(); - assert_eq!(response.len(), 1); - - // any address should be able to trigger queue message processing - let management_msg = ExecuteMsg::ProcessMessages { - count: Some(1), - message_ids: None, - }; - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(Addr::unchecked("veryrandomaddress"), cosmos_msg) - .unwrap(); - - // insufficient time has passed so queue should still be 1 - assert_eq!( - app.wrap() - .query_wasm_smart::>( - cw_rate_limit_contract.addr(), - &QueryMsg::GetMessageIds - ) - .unwrap() - .len(), - 1 - ); - - // advance time - app.update_block(|block| { - block.height += 100; - block.time = block.time.plus_seconds(3601) - }); - - // any address should be able to trigger queue message processing - let management_msg = ExecuteMsg::ProcessMessages { - count: Some(1), - message_ids: None, - }; - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(Addr::unchecked("veryrandomaddress"), cosmos_msg) - .unwrap(); - - // no messges should be present as time passed and message was executed - assert_eq!( - app.wrap() - .query_wasm_smart::>( - cw_rate_limit_contract.addr(), - &QueryMsg::GetMessageIds - ) - .unwrap() - .len(), - 0 - ); - - // foobarbaz should have the GrantRole permission - let response = app - .wrap() - .query_wasm_smart::>( - cw_rate_limit_contract.addr(), - &QueryMsg::GetRoles { - owner: MockApi::default().addr_make("foobarbaz").to_string(), - }, - ) - .unwrap(); - assert_eq!(response.len(), 1); - assert_eq!(response[0], Roles::GrantRole); - - app.update_block(|block| { - block.height += 1; - block.time = block.time.plus_seconds(3600); - }); - - let management_msg = ExecuteMsg::RevokeRole { - signer: MockApi::default().addr_make("foobarbaz").to_string(), - roles: vec![Roles::GrantRole], - }; - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) - .unwrap(); - - let message_ids = app - .wrap() - .query_wasm_smart::>(cw_rate_limit_contract.addr(), &QueryMsg::GetMessageIds) - .unwrap(); - assert_eq!(message_ids.len(), 1); - - app.update_block(|block| { - block.height += 1; - }); - - let management_msg = ExecuteMsg::ProcessMessages { - count: Some(1), - message_ids: None, - }; - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) - .unwrap(); - - // insufficient time has passed so queue length is still 1 - let response = app - .wrap() - .query_wasm_smart::>( - cw_rate_limit_contract.addr(), - &QueryMsg::GetRoles { - owner: MockApi::default().addr_make("foobarbaz").to_string(), - }, - ) - .unwrap(); - assert_eq!(response.len(), 1); - - // advance time - app.update_block(|block| { - block.height += 100; - block.time = block.time.plus_seconds(3601); - }); - - let management_msg = ExecuteMsg::ProcessMessages { - count: None, - message_ids: Some(message_ids.clone()), - }; - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) - .unwrap(); - - // sufficient time has passed, empty queue - let message_ids = app - .wrap() - .query_wasm_smart::>(cw_rate_limit_contract.addr(), &QueryMsg::GetMessageIds) - .unwrap(); - assert_eq!(message_ids.len(), 0); - - // no rolles allocated, storage key should be removed - assert!(app - .wrap() - .query_wasm_smart::>( - cw_rate_limit_contract.addr(), - &QueryMsg::GetRoles { - owner: MockApi::default().addr_make("foobarbaz").to_string() - } - ) - .is_err()); - - // error should be returned when all params are None - let management_msg = ExecuteMsg::ProcessMessages { - count: None, - message_ids: None, - }; - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - assert!(app - .execute(MockApi::default().addr_make("foobar"), cosmos_msg.clone()) - .is_err()); -} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/lib.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/lib.rs deleted file mode 100644 index e37c9258c..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/lib.rs +++ /dev/null @@ -1,24 +0,0 @@ -#![allow(clippy::result_large_err)] - -// Contract -pub mod contract; -mod error; -pub mod msg; -mod state; - -pub mod blocking; -pub mod message_queue; -pub mod packet; -pub mod rbac; - -// Functions -mod execute; -mod query; -mod sudo; - -// Tests -mod contract_tests; -mod helpers; -mod integration_tests; - -pub use crate::error::ContractError; diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/message_queue.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/message_queue.rs deleted file mode 100644 index 93619a418..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/message_queue.rs +++ /dev/null @@ -1,413 +0,0 @@ -use cosmwasm_std::{DepsMut, Env, MessageInfo, Response, Storage}; - -use crate::{ - error::ContractError, - msg::ExecuteMsg, - state::{ - rbac::QueuedMessage, - storage::{MESSAGE_QUEUE, TIMELOCK_DELAY}, - }, -}; - -/// Used to iterate over the message queue and process any messages that have passed the time lock delay. -/// -/// If count is a non-zero value, we process no more than `count` message. This can be used to limit the number -/// of message processed in a single transaction to avoid running into OOG (out of gas) errors. -/// -/// Because we iterate over the queue by popping items from the front, multiple transactions can be issued -/// in sequence to iterate over the queue -pub fn process_message_queue( - deps: &mut DepsMut, - env: &Env, - count: Option, - message_ids: Option>, -) -> Result { - let mut response = Response::new(); - - if let Some(message_ids) = message_ids { - let messages = pop_messages(deps.storage, &message_ids)?; - - for message in messages { - let message_id = message.message_id.clone(); - if let Err(err) = try_process_message(deps, env, message) { - response = response.add_attribute(message_id, err.to_string()); - } else { - response = response.add_attribute(message_id, "ok"); - } - } - return Ok(response); - } - - let Some(count) = count else { - return Err(ContractError::InvalidParameters( - "both count and message_ids are None".to_string(), - )); - }; - - let queue_len = MESSAGE_QUEUE.len(deps.storage)? as usize; - - for idx in 0..queue_len { - if idx + 1 > count as usize { - break; - } - if let Some(message) = MESSAGE_QUEUE.pop_front(deps.storage)? { - let message_id = message.message_id.clone(); - if let Err(err) = try_process_message(deps, env, message) { - response = response.add_attribute(message_id, err.to_string()); - } else { - response = response.add_attribute(message_id, "ok"); - } - } - } - Ok(response) -} - -/// Given a message to execute, insert into the message queued with execution delayed by the timelock that is applied to the sender of the message -/// -/// Returns the id of the queued message -pub fn queue_message( - deps: &mut DepsMut, - env: Env, - msg: ExecuteMsg, - info: MessageInfo, -) -> Result { - let timelock_delay = TIMELOCK_DELAY.load(deps.storage, info.sender.to_string())?; - let message_id = format!("{}_{}", env.block.height, env.transaction.unwrap().index); - MESSAGE_QUEUE.push_back( - deps.storage, - &QueuedMessage { - message_id: message_id.clone(), - message: msg, - timelock_delay, - submitted_at: env.block.time, - }, - )?; - Ok(message_id) -} - -/// Check to see if the message sender has a non-zero timelock delay configured -pub fn must_queue_message(deps: &mut DepsMut, info: &MessageInfo) -> bool { - // if a non zero value is set, then it means a timelock delay is required - TIMELOCK_DELAY - .load(deps.storage, info.sender.to_string()) - .unwrap_or(0) - > 0 -} - -/// Removes a message from the message queue if it matches message_id -pub fn remove_message(deps: &mut DepsMut, message_id: String) -> Result<(), ContractError> { - pop_messages(deps.storage, &[message_id])?; - Ok(()) -} - -fn pop_messages( - storage: &mut dyn Storage, - message_ids: &[String], -) -> Result, ContractError> { - let queue_len = MESSAGE_QUEUE.len(storage)? as usize; - let mut messages = Vec::with_capacity(message_ids.len()); - - for _ in 0..queue_len { - if let Some(message) = MESSAGE_QUEUE.pop_front(storage)? { - if message_ids.contains(&message.message_id) { - messages.push(message); - } else { - // reinsert - MESSAGE_QUEUE.push_back(storage, &message)?; - } - } - } - Ok(messages) -} - -// attempts to process the message if the timelock has passed, otherwise reinsert into queue -// -// returns the id of the message -fn try_process_message( - deps: &mut DepsMut, - env: &Env, - message: QueuedMessage, -) -> Result<(), ContractError> { - // compute the minimum time at which the message is unlocked - let min_unlock = message - .submitted_at - .plus_seconds(message.timelock_delay * 60 * 60); - - // check to see if the timelock delay has passed, which we need to first convert from hours into seconds - if env.block.time.ge(&min_unlock) { - crate::contract::match_execute(deps, env, message.message)?; - } else { - MESSAGE_QUEUE.push_back(deps.storage, &message)?; - } - - Ok(()) -} - -#[cfg(test)] -mod tests { - use cosmwasm_std::{ - from_binary, - testing::{mock_dependencies, mock_env, MockApi}, - Addr, Timestamp, TransactionInfo, - }; - - use crate::{msg::QuotaMsg, query::get_queued_message, rbac::set_timelock_delay}; - - use super::*; - - #[test] - fn test_must_queue_message() { - let mut deps = mock_dependencies(); - let mut deps = deps.as_mut(); - let foobar_info = MessageInfo { - sender: MockApi::default().addr_make("foobar"), - funds: vec![], - }; - let foobarbaz_info = MessageInfo { - sender: MockApi::default().addr_make("foobarbaz"), - funds: vec![], - }; - - TIMELOCK_DELAY - .save(deps.storage, MockApi::default().addr_make("foobar").to_string(), &1) - .unwrap(); - - assert!(must_queue_message(&mut deps, &foobar_info)); - assert!(!must_queue_message(&mut deps, &foobarbaz_info)); - } - - #[test] - fn test_queue_message() { - let env = mock_env(); - let mut deps = mock_dependencies(); - let mut deps = deps.as_mut(); - - let foobar_info = MessageInfo { - sender: MockApi::default().addr_make("foobar"), - funds: vec![], - }; - let foobarbaz_info = MessageInfo { - sender: MockApi::default().addr_make("foobarbaz"), - funds: vec![], - }; - let foobar_test_msg = ExecuteMsg::AddPath { - channel_id: "channel".to_string(), - denom: "denom".to_string(), - quotas: vec![QuotaMsg { - name: "quota".to_string(), - duration: 5, - send_recv: (10, 10), - }], - }; - let foobarbaz_test_msg = ExecuteMsg::SetTimelockDelay { - signer: "gov".to_string(), - hours: 5, - }; - set_timelock_delay(&mut deps, MockApi::default().addr_make("foobar").to_string(), 10).unwrap(); - set_timelock_delay(&mut deps, MockApi::default().addr_make("foobarbaz").to_string(), 1).unwrap(); - let foobar_message_id = { - let mut env = env.clone(); - env.transaction = Some(TransactionInfo { index: 1 }); - queue_message( - &mut deps, - env.clone(), - foobar_test_msg.clone(), - foobar_info.clone(), - ) - .unwrap() - }; - let foobarbaz_message_id = { - let mut env = env.clone(); - env.transaction = Some(TransactionInfo { index: 2 }); - queue_message( - &mut deps, - env.clone(), - foobarbaz_test_msg.clone(), - foobarbaz_info.clone(), - ) - .unwrap() - }; - // get foobar's queued message, and validate the type is as expected + timelock delays - let msg = get_queued_message(deps.storage, foobar_message_id.clone()).unwrap(); - let msg: QueuedMessage = from_binary(&msg).unwrap(); - assert_eq!(msg.timelock_delay, 10); - assert_eq!(msg.message, foobar_test_msg); - - // get foobarbaz's queued message, and validate the type is as expected + timelock delays - let msg = get_queued_message(deps.storage, foobarbaz_message_id.clone()).unwrap(); - let msg: QueuedMessage = from_binary(&msg).unwrap(); - assert_eq!(msg.timelock_delay, 1); - assert_eq!(msg.message, foobarbaz_test_msg); - } - - #[test] - fn test_process_message_queue_basic() { - // basic test which simply iterates over the message queues - // does include tests with some unlocked items vs some locked items - - let mut deps = mock_dependencies(); - let mut deps = deps.as_mut(); - let env = mock_env(); - create_n_messages(&mut deps, 10, &mut |_i: u64| Timestamp::default()); - assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 10); - - process_message_queue(&mut deps, &env.clone(), Some(1), None).unwrap(); - assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 9); - - process_message_queue(&mut deps, &env.clone(), Some(0), None).unwrap(); - assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 9); - - process_message_queue(&mut deps, &env.clone(), Some(5), None).unwrap(); - assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 4); - - process_message_queue(&mut deps, &env.clone(), Some(10), None).unwrap(); - assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 0); - - create_n_messages(&mut deps, 10, &mut |_i: u64| Timestamp::default()); - - assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 10); - - let message_ids = MESSAGE_QUEUE - .iter(deps.storage) - .unwrap() - .filter_map(|msg| Some(msg.ok()?.message_id)) - .collect::>(); - - // get the first 4 message ids - let msg_ids = message_ids[0..4].to_vec(); - process_message_queue(&mut deps, &env.clone(), None, Some(msg_ids)).unwrap(); - // should be 6 messages left - assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 6); - - // get the remaining messages - let msg_ids = message_ids[4..].to_vec(); - process_message_queue(&mut deps, &env.clone(), None, Some(msg_ids)).unwrap(); - // should be 0 messages left - assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 0); - } - - #[test] - fn test_process_message_queue_complete() { - // complete message queues testing, including some locked vs unlocked - // as well as validating execution - - let mut deps = mock_dependencies(); - let mut deps = deps.as_mut(); - let mut env = mock_env(); - - // starting time for tests, may 20th 12:32am PST - let time = Timestamp::from_seconds(1716190293); - env.block.time = time; - - create_n_messages(&mut deps, 10, &mut |i: u64| { - // increment time by 1 hour * i - time.plus_seconds(3600 * i) - }); - - // no messages should be processed as not enough time has passed - process_message_queue(&mut deps, &env.clone(), Some(10), None).unwrap(); - - assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 10); - - // increase time by 24 hours - env.block.time = env.block.time.plus_seconds(3600 * 24); - - // one message should be processed - process_message_queue(&mut deps, &env.clone(), Some(10), None).unwrap(); - - assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 9); - - // signer should have a timelock delay of 1 hour - assert_eq!( - TIMELOCK_DELAY - .load(deps.storage, MockApi::default().addr_make("signer").to_string()) - .unwrap(), - 1 - ); - - // advance time by 2 hours - env.block.time = env.block.time.plus_seconds(3600 * 2); - - // 2 messages should be processed, - process_message_queue(&mut deps, &env.clone(), Some(10), None).unwrap(); - - assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 7); - - //signer should have a timelock delay of 3 hours - assert_eq!( - TIMELOCK_DELAY - .load(deps.storage, MockApi::default().addr_make("signer").to_string()) - .unwrap(), - 3 - ); - - // advance time by 24 hours - env.block.time = env.block.time.plus_seconds(3600 * 24); - - // all messages should be processed - process_message_queue(&mut deps, &env.clone(), Some(10), None).unwrap(); - - assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 0); - - // signer should have a delay of 10 hours - assert_eq!( - TIMELOCK_DELAY - .load(deps.storage, MockApi::default().addr_make("signer").to_string()) - .unwrap(), - 10 - ); - - create_n_messages(&mut deps, 1, &mut |i: u64| { - // increment time by 1 hour * i - time.plus_seconds(3600 * i) - }); - - let message_ids = MESSAGE_QUEUE - .iter(deps.storage) - .unwrap() - .filter_map(|msg| Some(msg.ok()?.message_id)) - .collect::>(); - - process_message_queue(&mut deps, &env.clone(), None, Some(message_ids)).unwrap(); - // signer should have a delay of 1 hours - assert_eq!( - TIMELOCK_DELAY - .load(deps.storage, MockApi::default().addr_make("signer").to_string()) - .unwrap(), - 1 - ); - } - - #[test] - #[should_panic(expected = "both count and message_ids are None")] - fn test_process_message_queue_invalid_parameters() { - let mut deps = mock_dependencies(); - let mut deps = deps.as_mut(); - let env = mock_env(); - create_n_messages(&mut deps, 10, &mut |_i: u64| Timestamp::default()); - assert_eq!(MESSAGE_QUEUE.len(deps.storage).unwrap(), 10); - - process_message_queue(&mut deps, &env.clone(), None, None).unwrap(); - } - - // helper function which inserts N messages into the message queue - // message types inserted are of ExecuteMsg::SetTimelockDelay - fn create_n_messages(deps: &mut DepsMut, n: usize, ts: &mut dyn FnMut(u64) -> Timestamp) { - for i in 0..n { - MESSAGE_QUEUE - .push_back( - deps.storage, - &QueuedMessage { - message: ExecuteMsg::SetTimelockDelay { - signer: MockApi::default().addr_make("signer").to_string(), - hours: i as u64 + 1, - }, - submitted_at: ts(i as u64), - timelock_delay: 24, - message_id: format!("prop-{i}"), - }, - ) - .unwrap(); - } - } -} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/msg.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/msg.rs deleted file mode 100644 index 2737691d5..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/msg.rs +++ /dev/null @@ -1,197 +0,0 @@ -use cosmwasm_schema::{cw_serde, QueryResponses}; -use cosmwasm_std::Addr; -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; - -#[cfg(test)] -use cosmwasm_std::Uint256; - -use crate::{packet::Packet, state::rbac::Roles}; - -// PathMsg contains a channel_id and denom to represent a unique identifier within ibc-go, and a list of rate limit quotas -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] -pub struct PathMsg { - pub channel_id: String, - pub denom: String, - pub quotas: Vec, -} - -impl PathMsg { - pub fn new( - channel: impl Into, - denom: impl Into, - quotas: Vec, - ) -> Self { - PathMsg { - channel_id: channel.into(), - denom: denom.into(), - quotas, - } - } -} - -// QuotaMsg represents a rate limiting Quota when sent as a wasm msg -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] -pub struct QuotaMsg { - pub name: String, - pub duration: u64, - pub send_recv: (u32, u32), -} - -impl QuotaMsg { - pub fn new(name: &str, seconds: u64, send_percentage: u32, recv_percentage: u32) -> Self { - QuotaMsg { - name: name.to_string(), - duration: seconds, - send_recv: (send_percentage, recv_percentage), - } - } -} - -/// Initialize the contract with the address of the IBC module and any existing channels. -/// Only the ibc module is allowed to execute actions on this contract -#[cw_serde] -pub struct InstantiateMsg { - pub gov_module: Addr, - pub ibc_module: Addr, - pub paths: Vec, -} - -/// The caller (IBC module) is responsible for correctly calculating the funds -/// being sent through the channel -#[cw_serde] -pub enum ExecuteMsg { - AddPath { - channel_id: String, - denom: String, - quotas: Vec, - }, - RemovePath { - channel_id: String, - denom: String, - }, - ResetPathQuota { - channel_id: String, - denom: String, - quota_id: String, - }, - SetDenomRestrictions { - denom: String, - allowed_channels: Vec, - }, - UnsetDenomRestrictions { - denom: String, - }, - /// Grants a role to the given signer - GrantRole { - signer: String, - /// full list of roles to grant the signer - roles: Vec, - }, - /// Removes the role that has been granted to the signer - RevokeRole { - signer: String, - /// fill list of roles to revoke from the signer - roles: Vec, - }, - /// Replaces the quota identified by QuotaMsg::Name - EditPathQuota { - channel_id: String, - denom: String, - /// similar to ResetPathQuota, but QuotaMsg::Name is used as the quota_id - quota: QuotaMsg, - }, - /// Used to remove a message from the message queue to prevent execution - RemoveMessage { - message_id: String, - }, - /// Used to change the timelock delay for newly submitted messages - SetTimelockDelay { - /// the address to apply the timelock delay to - signer: String, - hours: std::primitive::u64, - }, - /// Permissionless message that anyone can invoke to trigger execution - /// of queued messages that have passed the timelock delay - /// - /// If both count and message_ids are some, message_ids is used. If both are None returns an error - ProcessMessages { - /// number of queued messages to process, a value of 0 will attempt to process all queued messages - count: Option, - message_ids: Option>, - }, -} - -#[cw_serde] -#[derive(QueryResponses)] -pub enum QueryMsg { - #[returns(Vec)] - GetQuotas { channel_id: String, denom: String }, - /// Returns a vector of all addresses that have been allocated one or more roles - #[returns(Vec)] - GetRoleOwners, - /// Returns a vector of all roles that have been granted to `owner` - #[returns(Vec)] - GetRoles { owner: String }, - /// Returns a vector of queued message id's - #[returns(Vec)] - GetMessageIds, - /// Returns the queued message matching id - #[returns(crate::state::rbac::QueuedMessage)] - GetMessage { id: String }, - /// Returns the restrictions for a given denom - #[returns(Vec)] - GetDenomRestrictions { denom: String }, -} - -#[cw_serde] -pub enum SudoMsg { - SendPacket { - packet: Packet, - #[cfg(test)] - channel_value_mock: Option, - }, - RecvPacket { - packet: Packet, - #[cfg(test)] - channel_value_mock: Option, - }, - UndoSend { - packet: Packet, - }, -} - -#[cw_serde] -pub struct MigrateMsg {} - -impl ExecuteMsg { - /// Given an ExecuteMsg variant returns the required RBAC role - /// that must be held by the address which is invoking the message. - /// - /// If no RBAC role is required, returns None - pub fn required_permission(&self) -> Option { - match self { - Self::AddPath { .. } => Some(Roles::AddRateLimit), - Self::RemovePath { .. } => Some(Roles::RemoveRateLimit), - Self::ResetPathQuota { .. } => Some(Roles::ResetPathQuota), - Self::SetDenomRestrictions { .. } => Some(Roles::ManageDenomRestrictions), - Self::UnsetDenomRestrictions { .. } => Some(Roles::ManageDenomRestrictions), - Self::GrantRole { .. } => Some(Roles::GrantRole), - Self::RevokeRole { .. } => Some(Roles::RevokeRole), - Self::EditPathQuota { .. } => Some(Roles::EditPathQuota), - Self::RemoveMessage { .. } => Some(Roles::RemoveMessage), - Self::SetTimelockDelay { .. } => Some(Roles::SetTimelockDelay), - Self::ProcessMessages { .. } => None, - } - } - /// Checks to see if the message type is able to skip queueing. - /// - /// This is limited to the message type responsible for processing the queue - pub fn skip_queue(&self) -> bool { - #[allow(clippy::match_like_matches_macro)] - match self { - Self::ProcessMessages { .. } => true, - _ => false, - } - } -} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs deleted file mode 100644 index abe17a1ee..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs +++ /dev/null @@ -1,468 +0,0 @@ -use crate::state::flow::FlowType; -use cosmwasm_std::{to_base64, Addr, Binary, Deps, GrpcQuery, StdError, Uint256}; -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; -use sha2::{Digest, Sha256}; - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] -pub struct Height { - /// Previously known as "epoch" - pub revision_number: Option, - - /// The height of a block - pub revision_height: Option, -} - -// IBC transfer data -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] -pub struct FungibleTokenData { - pub denom: String, - pub amount: Uint256, - pub sender: Addr, - pub receiver: Addr, -} - -// An IBC packet -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] -pub struct Packet { - pub sequence: u64, - pub source_port: String, - pub source_channel: String, - pub destination_port: String, - pub destination_channel: String, - pub data: FungibleTokenData, - pub timeout_height: Height, - pub timeout_timestamp: Option, -} - -// SupplyOf query message definition. -#[derive( - Clone, - PartialEq, - Eq, - ::prost::Message, - serde::Serialize, - serde::Deserialize, - schemars::JsonSchema, -)] -pub struct QuerySupplyOfRequest { - #[prost(string, tag = "1")] - pub denom: ::prost::alloc::string::String, -} - -#[derive( - Clone, - PartialEq, - Eq, - ::prost::Message, - serde::Serialize, - serde::Deserialize, - schemars::JsonSchema, -)] -pub struct QuerySupplyOfResponse { - #[prost(message, optional, tag = "1")] - pub amount: ::core::option::Option, -} -// End of SupplyOf query message definition - -use std::str::FromStr; // Needed to parse the coin's String as Uint256 - -fn hash_denom(denom: &str) -> String { - let mut hasher = Sha256::new(); - hasher.update(denom.as_bytes()); - let result = hasher.finalize(); - let hash = hex::encode(result); - format!("ibc/{}", hash.to_uppercase()) -} - -impl Packet { - pub fn mock( - source_channel: String, - dest_channel: String, - denom: String, - funds: Uint256, - ) -> Packet { - Packet { - sequence: 0, - source_port: "transfer".to_string(), - source_channel, - destination_port: "transfer".to_string(), - destination_channel: dest_channel, - data: crate::packet::FungibleTokenData { - denom, - amount: funds, - sender: Addr::unchecked("sender"), - receiver: Addr::unchecked("receiver"), - }, - timeout_height: crate::packet::Height { - revision_number: None, - revision_height: None, - }, - timeout_timestamp: None, - } - } - - pub fn channel_value(&self, deps: Deps, direction: &FlowType) -> Result { - Ok(Uint256::from_uint128(deps.querier.query_supply(self.local_denom(direction))?.amount)) - } - - pub fn get_funds(&self) -> Uint256 { - self.data.amount - } - - fn local_channel(&self, direction: &FlowType) -> String { - // Pick the appropriate channel depending on whether this is a send or a recv - match direction { - FlowType::In => self.destination_channel.clone(), - FlowType::Out => self.source_channel.clone(), - } - } - - fn receiver_chain_is_source(&self) -> bool { - self.data - .denom - .starts_with(&format!("transfer/{}", self.source_channel)) - } - - fn handle_denom_for_sends(&self) -> String { - if !self.data.denom.starts_with("transfer/") { - // For native tokens we just use what's on the packet - return self.data.denom.clone(); - } - // For non-native tokens, we need to generate the IBCDenom - hash_denom(&self.data.denom) - } - - fn handle_denom_for_recvs(&self) -> String { - if self.receiver_chain_is_source() { - // These are tokens that have been sent to the counterparty and are returning - let unprefixed = self - .data - .denom - .strip_prefix(&format!("transfer/{}/", self.source_channel)) - .unwrap_or_default(); - let split: Vec<&str> = unprefixed.split('/').collect(); - if split[0] == unprefixed { - // This is a native token. Return the unprefixed token - unprefixed.to_string() - } else { - // This is a non-native that was sent to the counterparty. - // We need to hash it. - // The ibc-go implementation checks that the denom has been built correctly. We - // don't need to do that here because if it hasn't, the transfer module will catch it. - hash_denom(unprefixed) - } - } else { - // Tokens that come directly from the counterparty. - // Since the sender didn't prefix them, we need to do it here. - let prefixed = format!("transfer/{}/", self.destination_channel) + &self.data.denom; - hash_denom(&prefixed) - } - } - - fn local_denom(&self, direction: &FlowType) -> String { - match direction { - FlowType::In => self.handle_denom_for_recvs(), - FlowType::Out => self.handle_denom_for_sends(), - } - } - - pub fn path_data(&self, direction: &FlowType) -> (String, String) { - (self.local_channel(direction), self.local_denom(direction)) - } -} - -// Helpers - -// Create a new packet for testing -#[cfg(test)] -#[macro_export] -macro_rules! test_msg_send { - (channel_id: $channel_id:expr, denom: $denom:expr, channel_value: $channel_value:expr, funds: $funds:expr) => { - $crate::msg::SudoMsg::SendPacket { - packet: $crate::packet::Packet::mock($channel_id, $channel_id, $denom, $funds), - channel_value_mock: Some($channel_value), - } - }; -} - -#[cfg(test)] -#[macro_export] -macro_rules! test_msg_recv { - (channel_id: $channel_id:expr, denom: $denom:expr, channel_value: $channel_value:expr, funds: $funds:expr) => { - $crate::msg::SudoMsg::RecvPacket { - packet: $crate::packet::Packet::mock( - $channel_id, - $channel_id, - format!("transfer/{}/{}", $channel_id, $denom), - $funds, - ), - channel_value_mock: Some($channel_value), - } - }; -} - -#[cfg(test)] -pub mod tests { - use crate::msg::SudoMsg; - - use super::*; - - #[test] - fn send_native() { - let packet = Packet::mock( - "channel-17-local".to_string(), - "channel-42-counterparty".to_string(), - "uosmo".to_string(), - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::Out), "uosmo"); - } - - #[test] - fn send_non_native() { - // The transfer module "unhashes" the denom from - // ibc/09E4864A262249507925831FBAD69DAD08F66FAAA0640714E765912A0751289A - // to port/channel/denom before passing it along to the contrace - let packet = Packet::mock( - "channel-17-local".to_string(), - "channel-42-counterparty".to_string(), - "transfer/channel-17-local/ujuno".to_string(), - 0_u128.into(), - ); - assert_eq!( - packet.local_denom(&FlowType::Out), - "ibc/09E4864A262249507925831FBAD69DAD08F66FAAA0640714E765912A0751289A" - ); - } - - #[test] - fn receive_non_native() { - // The counterparty chain sends their own native token to us - let packet = Packet::mock( - "channel-42-counterparty".to_string(), // The counterparty's channel is the source here - "channel-17-local".to_string(), // Our channel is the dest channel - "ujuno".to_string(), // This is unwrapped. It is our job to wrap it - 0_u128.into(), - ); - assert_eq!( - packet.local_denom(&FlowType::In), - "ibc/09E4864A262249507925831FBAD69DAD08F66FAAA0640714E765912A0751289A" - ); - } - - #[test] - fn receive_native() { - // The counterparty chain sends us back our native token that they had wrapped - let packet = Packet::mock( - "channel-42-counterparty".to_string(), // The counterparty's channel is the source here - "channel-17-local".to_string(), // Our channel is the dest channel - "transfer/channel-42-counterparty/uosmo".to_string(), - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::In), "uosmo"); - } - - // Let's assume we have two chains A and B (local and counterparty) connected in the following way: - // - // Chain A <---> channel-17-local <---> channel-42-counterparty <---> Chain B - // - // The following tests should pass - // - - const WRAPPED_OSMO_ON_HUB_TRACE: &str = "transfer/channel-141/uosmo"; - const WRAPPED_ATOM_ON_OSMOSIS_TRACE: &str = "transfer/channel-0/uatom"; - const WRAPPED_ATOM_ON_OSMOSIS_HASH: &str = - "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2"; - const WRAPPED_OSMO_ON_HUB_HASH: &str = - "ibc/14F9BC3E44B8A9C1BE1FB08980FAB87034C9905EF17CF2F5008FC085218811CC"; - - #[test] - fn sanity_check() { - // Examples using the official channels as of Nov 2022. - - // uatom sent to osmosis - let packet = Packet::mock( - "channel-141".to_string(), // from: hub - "channel-0".to_string(), // to: osmosis - "uatom".to_string(), - 0_u128.into(), - ); - assert_eq!( - packet.local_denom(&FlowType::In), - WRAPPED_ATOM_ON_OSMOSIS_HASH - ); - - // uatom on osmosis sent back to the hub - let packet = Packet::mock( - "channel-0".to_string(), // from: osmosis - "channel-141".to_string(), // to: hub - WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), // unwrapped before reaching the contract - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::In), "uatom"); - - // osmo sent to the hub - let packet = Packet::mock( - "channel-0".to_string(), // from: osmosis - "channel-141".to_string(), // to: hub - "uosmo".to_string(), - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::Out), "uosmo"); - - // osmo on the hub sent back to osmosis - // send - let packet = Packet::mock( - "channel-141".to_string(), // from: hub - "channel-0".to_string(), // to: osmosis - WRAPPED_OSMO_ON_HUB_TRACE.to_string(), // unwrapped before reaching the contract - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::Out), WRAPPED_OSMO_ON_HUB_HASH); - - // receive - let packet = Packet::mock( - "channel-141".to_string(), // from: hub - "channel-0".to_string(), // to: osmosis - WRAPPED_OSMO_ON_HUB_TRACE.to_string(), // unwrapped before reaching the contract - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::In), "uosmo"); - - // Now let's pretend we're the hub. - // The following tests are from perspective of the the hub (i.e.: if this contract were deployed there) - // - // osmo sent to the hub - let packet = Packet::mock( - "channel-0".to_string(), // from: osmosis - "channel-141".to_string(), // to: hub - "uosmo".to_string(), - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::In), WRAPPED_OSMO_ON_HUB_HASH); - - // uosmo on the hub sent back to the osmosis - let packet = Packet::mock( - "channel-141".to_string(), // from: hub - "channel-0".to_string(), // to: osmosis - WRAPPED_OSMO_ON_HUB_TRACE.to_string(), // unwrapped before reaching the contract - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::In), "uosmo"); - - // uatom sent to osmosis - let packet = Packet::mock( - "channel-141".to_string(), // from: hub - "channel-0".to_string(), // to: osmosis - "uatom".to_string(), - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::Out), "uatom"); - - // utaom on the osmosis sent back to the hub - // send - let packet = Packet::mock( - "channel-0".to_string(), // from: osmosis - "channel-141".to_string(), // to: hub - WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), // unwrapped before reaching the contract - 0_u128.into(), - ); - assert_eq!( - packet.local_denom(&FlowType::Out), - WRAPPED_ATOM_ON_OSMOSIS_HASH - ); - - // receive - let packet = Packet::mock( - "channel-0".to_string(), // from: osmosis - "channel-141".to_string(), // to: hub - WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), // unwrapped before reaching the contract - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::In), "uatom"); - } - - #[test] - fn sanity_double() { - // Now let's deal with double wrapping - - let juno_wrapped_osmosis_wrapped_atom_hash = - "ibc/6CDD4663F2F09CD62285E2D45891FC149A3568E316CE3EBBE201A71A78A69388"; - - // Send uatom on stored on osmosis to juno - // send - let packet = Packet::mock( - "channel-42".to_string(), // from: osmosis - "channel-0".to_string(), // to: juno - WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), // unwrapped before reaching the contract - 0_u128.into(), - ); - assert_eq!( - packet.local_denom(&FlowType::Out), - WRAPPED_ATOM_ON_OSMOSIS_HASH - ); - - // receive - let packet = Packet::mock( - "channel-42".to_string(), // from: osmosis - "channel-0".to_string(), // to: juno - WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), - 0_u128.into(), - ); - assert_eq!( - packet.local_denom(&FlowType::In), - juno_wrapped_osmosis_wrapped_atom_hash - ); - - // Send back that multi-wrapped token to osmosis - // send - let packet = Packet::mock( - "channel-0".to_string(), // from: juno - "channel-42".to_string(), // to: osmosis - format!("{}{}", "transfer/channel-0/", WRAPPED_ATOM_ON_OSMOSIS_TRACE), // unwrapped before reaching the contract - 0_u128.into(), - ); - assert_eq!( - packet.local_denom(&FlowType::Out), - juno_wrapped_osmosis_wrapped_atom_hash - ); - - // receive - let packet = Packet::mock( - "channel-0".to_string(), // from: juno - "channel-42".to_string(), // to: osmosis - format!("{}{}", "transfer/channel-0/", WRAPPED_ATOM_ON_OSMOSIS_TRACE), // unwrapped before reaching the contract - 0_u128.into(), - ); - assert_eq!( - packet.local_denom(&FlowType::In), - WRAPPED_ATOM_ON_OSMOSIS_HASH - ); - } - - #[test] - fn tokenfactory_packet() { - let json = r#"{"send_packet":{"packet":{"sequence":4,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-1491","data":{"denom":"transfer/channel-0/factory/osmo12smx2wdlyttvyzvzg54y2vnqwq2qjateuf7thj/czar","amount":"100000000000000000","sender":"osmo1cyyzpxplxdzkeea7kwsydadg87357qnahakaks","receiver":"osmo1c584m4lq25h83yp6ag8hh4htjr92d954vklzja"},"timeout_height":{},"timeout_timestamp":1668024476848430980}}}"#; - let parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); - //println!("{parsed:?}"); - - match parsed { - SudoMsg::SendPacket { packet, .. } => { - assert_eq!( - packet.local_denom(&FlowType::Out), - "ibc/07A1508F49D0753EDF95FA18CA38C0D6974867D793EB36F13A2AF1A5BB148B22" - ); - } - _ => panic!("parsed into wrong variant"), - } - } - - #[test] - fn packet_with_memo() { - // extra fields (like memo) get ignored. - let json = r#"{"recv_packet":{"packet":{"sequence":1,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-0","data":{"denom":"stake","amount":"1","sender":"osmo177uaalkhra6wth6hc9hu79f72eq903kwcusx4r","receiver":"osmo1fj6yt4pwfea4865z763fvhwktlpe020ef93dlq","memo":"some info"},"timeout_height":{"revision_height":100}}}}"#; - let _parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); - //println!("{parsed:?}"); - } -} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/query.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/query.rs deleted file mode 100644 index 1afcb8362..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/query.rs +++ /dev/null @@ -1,187 +0,0 @@ -use crate::state::{ - path::Path, - storage::{ - ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM, MESSAGE_QUEUE, RATE_LIMIT_TRACKERS, - RBAC_PERMISSIONS, - }, -}; -use cosmwasm_std::{to_binary, Binary, StdResult}; -use cosmwasm_std::{Order::Ascending, StdError, Storage}; - -pub fn get_quotas( - storage: &dyn Storage, - channel_id: impl Into, - denom: impl Into, -) -> StdResult { - let path = Path::new(channel_id, denom); - to_binary(&RATE_LIMIT_TRACKERS.load(storage, path.into())?) -} - -/// Returns all addresses which have been assigned one or more roles -pub fn get_role_owners(storage: &dyn Storage) -> StdResult { - to_binary( - &RBAC_PERMISSIONS - .keys(storage, None, None, Ascending) - .filter_map(|key| key.ok()) - .collect::>(), - ) -} - -/// Returns all the roles that have been granted to `owner` (if any) -pub fn get_roles(storage: &dyn Storage, owner: String) -> StdResult { - to_binary(&RBAC_PERMISSIONS.load(storage, owner)?) -} - -/// Returns the id's of all queued messages -pub fn get_message_ids(storage: &dyn Storage) -> StdResult { - to_binary( - &MESSAGE_QUEUE - .iter(storage)? - .filter_map(|message| Some(message.ok()?.message_id)) - .collect::>(), - ) -} - -/// Searches MESSAGE_QUEUE for a message_id matching `id` -pub fn get_queued_message(storage: &dyn Storage, id: String) -> StdResult { - to_binary( - &MESSAGE_QUEUE - .iter(storage)? - .find(|message| { - let Ok(message) = message else { return false }; - message.message_id.eq(&id) - }) - .ok_or_else(|| StdError::not_found(id))??, - ) -} - -pub fn get_denom_restrictions(storage: &dyn Storage, denom: String) -> StdResult { - to_binary(&ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM.load(storage, denom)?) -} - -#[cfg(test)] -mod test { - use cosmwasm_std::{from_binary, testing::mock_dependencies, Timestamp}; - - use crate::{ - msg::ExecuteMsg, - state::rbac::{QueuedMessage, Roles}, - }; - - use super::*; - #[test] - fn test_get_role_owners() { - let mut deps = mock_dependencies(); - - // test getting role owners when no owners exist - let response = get_role_owners(deps.as_ref().storage).unwrap(); - let decoded: Vec = from_binary(&response).unwrap(); - assert!(decoded.is_empty()); - - // insert 1 role owner, and test getting role owners - RBAC_PERMISSIONS - .save( - &mut deps.storage, - "foobar".to_string(), - &vec![Roles::SetTimelockDelay].into_iter().collect(), - ) - .unwrap(); - let response = get_role_owners(deps.as_ref().storage).unwrap(); - let decoded: Vec = from_binary(&response).unwrap(); - assert_eq!(decoded.len(), 1); - assert_eq!(decoded[0], "foobar"); - - // insert another role owner and test getting role owners - RBAC_PERMISSIONS - .save( - &mut deps.storage, - "foobarbaz".to_string(), - &vec![Roles::SetTimelockDelay].into_iter().collect(), - ) - .unwrap(); - let response = get_role_owners(deps.as_ref().storage).unwrap(); - let decoded: Vec = from_binary(&response).unwrap(); - assert_eq!(decoded.len(), 2); - assert_eq!(decoded[0], "foobar"); - assert_eq!(decoded[1], "foobarbaz"); - } - - #[test] - fn test_get_roles() { - let mut deps = mock_dependencies(); - - // test retrieving roles for a missing role owner - assert!(get_roles(deps.as_ref().storage, "foobar".to_string()).is_err()); - - // assign roles and test retrieving roles owned by address - RBAC_PERMISSIONS - .save( - &mut deps.storage, - "foobar".to_string(), - &vec![Roles::SetTimelockDelay].into_iter().collect(), - ) - .unwrap(); - let response = get_roles(deps.as_ref().storage, "foobar".to_string()).unwrap(); - let decoded: Vec = from_binary(&response).unwrap(); - assert_eq!(decoded.len(), 1); - assert_eq!(decoded[0], Roles::SetTimelockDelay); - - // add additional roles foobar, and test retrierval - RBAC_PERMISSIONS - .save( - &mut deps.storage, - "foobar".to_string(), - &vec![Roles::SetTimelockDelay, Roles::EditPathQuota] - .into_iter() - .collect(), - ) - .unwrap(); - let response = get_roles(deps.as_ref().storage, "foobar".to_string()).unwrap(); - let decoded: Vec = from_binary(&response).unwrap(); - assert_eq!(decoded.len(), 2); - assert!(decoded.contains(&Roles::SetTimelockDelay)); - assert!(decoded.contains(&Roles::EditPathQuota)); - } - - #[test] - fn test_get_messageids() { - let mut deps = mock_dependencies(); - let response = get_message_ids(deps.as_ref().storage).unwrap(); - let decoded: Vec = from_binary(&response).unwrap(); - assert_eq!(decoded.len(), 0); - - MESSAGE_QUEUE - .push_back( - &mut deps.storage, - &QueuedMessage { - message_id: "prop-1".to_string(), - message: ExecuteMsg::ProcessMessages { - count: Some(1), - message_ids: None, - }, - submitted_at: Timestamp::default(), - timelock_delay: 0, - }, - ) - .unwrap(); - MESSAGE_QUEUE - .push_back( - &mut deps.storage, - &QueuedMessage { - message_id: "prop-2".to_string(), - message: ExecuteMsg::ProcessMessages { - count: Some(1), - message_ids: None, - }, - submitted_at: Timestamp::default(), - timelock_delay: 0, - }, - ) - .unwrap(); - let response = get_message_ids(deps.as_ref().storage).unwrap(); - let decoded: Vec = from_binary(&response).unwrap(); - assert_eq!(decoded.len(), 2); - assert_eq!(decoded[0], "prop-1"); - assert_eq!(decoded[1], "prop-2"); - } -} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/rbac.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/rbac.rs deleted file mode 100644 index ce571f6ac..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/rbac.rs +++ /dev/null @@ -1,452 +0,0 @@ -use cosmwasm_std::{DepsMut, MessageInfo}; - -use crate::{ - msg::ExecuteMsg, - state::{ - rbac::Roles, - storage::{RBAC_PERMISSIONS, TIMELOCK_DELAY}, - }, - ContractError, -}; - -/// Check to see if the sender of the message can invoke the message by holding the required rbac role -/// -/// # Errors -/// -/// ContractError::Unauthorized if the sender does not have the required permission -/// -/// StdErr::NotFound if the RBAC_PERMISSIONS storage variable does not have an entry for the sender -pub fn can_invoke_message( - deps: &DepsMut, - info: &MessageInfo, - msg: &ExecuteMsg, -) -> Result<(), ContractError> { - // get the required permission to execute the message - let Some(required_permission) = msg.required_permission() else { - // no permission required so return ok - return Ok(()); - }; - let permissions = RBAC_PERMISSIONS - .load(deps.storage, info.sender.to_string()) - .unwrap_or_default(); - if permissions.contains(&required_permission) { - return Ok(()); - } - Err(ContractError::Unauthorized {}) -} - -/// Sets a timelock delay for `signer` of `hours` -pub fn set_timelock_delay( - deps: &mut DepsMut, - signer: String, - hours: u64, -) -> Result<(), ContractError> { - let signer = deps.api.addr_validate(&signer)?; - Ok(TIMELOCK_DELAY.save(deps.storage, signer.to_string(), &hours)?) -} - -/// Grants `roles` to `signer` -pub fn grant_role( - deps: &mut DepsMut, - signer: String, - roles: Vec, -) -> Result<(), ContractError> { - let signer = deps.api.addr_validate(&signer)?; - // get the current roles, if no current roles will be an empty vec - let mut current_roles = RBAC_PERMISSIONS - .load(deps.storage, signer.to_string()) - .unwrap_or_default(); - for role in roles { - current_roles.insert(role); - } - - // persist new roles - Ok(RBAC_PERMISSIONS.save(deps.storage, signer.to_string(), ¤t_roles)?) -} - -// Revokes `roles` from `signer`, if this results in an empty set of roles remove the storage variable -pub fn revoke_role( - deps: &mut DepsMut, - signer: String, - roles: Vec, -) -> Result<(), ContractError> { - let signer = deps.api.addr_validate(&signer)?; - - let mut current_roles = RBAC_PERMISSIONS.load(deps.storage, signer.to_string())?; - for role in roles { - current_roles.remove(&role); - } - if current_roles.is_empty() { - // no more roles, remove storage variable to save resources - RBAC_PERMISSIONS.remove(deps.storage, signer.to_string()); - Ok(()) - } else { - Ok(RBAC_PERMISSIONS.save(deps.storage, signer.to_string(), ¤t_roles)?) - } -} - -#[cfg(test)] -mod test { - use std::collections::BTreeSet; - - use crate::{msg::QuotaMsg, state::rbac::Roles}; - use cosmwasm_std::{testing::{mock_dependencies, MockApi}, Addr}; - use itertools::Itertools; - - use super::*; - #[test] - fn test_set_timelock_delay() { - let mut deps = mock_dependencies(); - assert!(TIMELOCK_DELAY - .load(&deps.storage, MockApi::default().addr_make("foobar").to_string()) - .is_err()); - set_timelock_delay(&mut deps.as_mut(), MockApi::default().addr_make("foobar").to_string(), 6).unwrap(); - assert_eq!( - TIMELOCK_DELAY - .load(&deps.storage, MockApi::default().addr_make("foobar").to_string()) - .unwrap(), - 6 - ); - } - #[test] - fn test_can_invoke_add_path() { - let mut deps = mock_dependencies(); - - let info_foobar = MessageInfo { - sender: Addr::unchecked("foobar".to_string()), - funds: vec![], - }; - let info_foobarbaz = MessageInfo { - sender: Addr::unchecked("foobarbaz".to_string()), - funds: vec![], - }; - let msg = ExecuteMsg::AddPath { - channel_id: "channelid".into(), - denom: "denom".into(), - quotas: vec![], - }; - RBAC_PERMISSIONS - .save( - &mut deps.storage, - "foobar".to_string(), - &vec![Roles::AddRateLimit].into_iter().collect(), - ) - .unwrap(); - - assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); - assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_err()); - } - - #[test] - fn test_can_invoke_remove_path() { - let mut deps = mock_dependencies(); - - let info_foobar = MessageInfo { - sender: Addr::unchecked("foobar".to_string()), - funds: vec![], - }; - let info_foobarbaz = MessageInfo { - sender: Addr::unchecked("foobarbaz".to_string()), - funds: vec![], - }; - let msg = ExecuteMsg::RemovePath { - channel_id: "channelid".into(), - denom: "denom".into(), - }; - RBAC_PERMISSIONS - .save( - &mut deps.storage, - "foobar".to_string(), - &vec![Roles::RemoveRateLimit].into_iter().collect(), - ) - .unwrap(); - - assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); - assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_err()); - } - - #[test] - fn test_can_invoke_reset_path_quota() { - let mut deps = mock_dependencies(); - - let info_foobar = MessageInfo { - sender: Addr::unchecked("foobar".to_string()), - funds: vec![], - }; - let info_foobarbaz = MessageInfo { - sender: Addr::unchecked("foobarbaz".to_string()), - funds: vec![], - }; - - let msg = ExecuteMsg::ResetPathQuota { - channel_id: "channelid".into(), - denom: "denom".into(), - quota_id: "quota".into(), - }; - RBAC_PERMISSIONS - .save( - &mut deps.storage, - "foobar".to_string(), - &vec![Roles::ResetPathQuota].into_iter().collect(), - ) - .unwrap(); - - assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); - assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_err()); - } - - #[test] - fn test_can_invoke_grant_role() { - let mut deps = mock_dependencies(); - - let info_foobar = MessageInfo { - sender: Addr::unchecked("foobar".to_string()), - funds: vec![], - }; - let info_foobarbaz = MessageInfo { - sender: Addr::unchecked("foobarbaz".to_string()), - funds: vec![], - }; - - let msg = ExecuteMsg::GrantRole { - signer: "signer".into(), - roles: vec![Roles::GrantRole], - }; - RBAC_PERMISSIONS - .save( - &mut deps.storage, - "foobar".to_string(), - &vec![Roles::GrantRole].into_iter().collect(), - ) - .unwrap(); - - assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); - assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_err()); - } - - #[test] - fn test_can_invoke_revoke_role() { - let mut deps = mock_dependencies(); - - let info_foobar = MessageInfo { - sender: Addr::unchecked("foobar".to_string()), - funds: vec![], - }; - let info_foobarbaz = MessageInfo { - sender: Addr::unchecked("foobarbaz".to_string()), - funds: vec![], - }; - - let msg = ExecuteMsg::RevokeRole { - signer: "signer".into(), - roles: vec![Roles::GrantRole], - }; - RBAC_PERMISSIONS - .save( - &mut deps.storage, - "foobar".to_string(), - &vec![Roles::RevokeRole].into_iter().collect(), - ) - .unwrap(); - assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); - assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_err()); - } - - #[test] - fn test_can_invoke_edit_path_quota() { - let mut deps = mock_dependencies(); - - let info_foobar = MessageInfo { - sender: Addr::unchecked("foobar".to_string()), - funds: vec![], - }; - let info_foobarbaz = MessageInfo { - sender: Addr::unchecked("foobarbaz".to_string()), - funds: vec![], - }; - - let msg = ExecuteMsg::EditPathQuota { - quota: QuotaMsg { - name: "name".into(), - duration: 0, - send_recv: (1, 2), - }, - channel_id: "channel_id".into(), - denom: "denom".into(), - }; - RBAC_PERMISSIONS - .save( - &mut deps.storage, - "foobar".to_string(), - &vec![Roles::EditPathQuota].into_iter().collect(), - ) - .unwrap(); - assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); - assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_err()); - } - - #[test] - fn test_can_invoke_remove_message() { - let mut deps = mock_dependencies(); - - let info_foobar = MessageInfo { - sender: Addr::unchecked("foobar".to_string()), - funds: vec![], - }; - let info_foobarbaz = MessageInfo { - sender: Addr::unchecked("foobarbaz".to_string()), - funds: vec![], - }; - - let msg = ExecuteMsg::RemoveMessage { - message_id: "message".into(), - }; - RBAC_PERMISSIONS - .save( - &mut deps.storage, - "foobar".to_string(), - &vec![Roles::RemoveMessage].into_iter().collect(), - ) - .unwrap(); - assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); - assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_err()); - } - - #[test] - fn test_can_invoke_set_timelock_delay() { - let mut deps = mock_dependencies(); - - let info_foobar = MessageInfo { - sender: Addr::unchecked("foobar".to_string()), - funds: vec![], - }; - let info_foobarbaz = MessageInfo { - sender: Addr::unchecked("foobarbaz".to_string()), - funds: vec![], - }; - - let msg = ExecuteMsg::SetTimelockDelay { - signer: "signer".into(), - hours: 5, - }; - RBAC_PERMISSIONS - .save( - &mut deps.storage, - "foobar".to_string(), - &vec![Roles::SetTimelockDelay].into_iter().collect(), - ) - .unwrap(); - assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); - assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_err()); - } - - #[test] - fn test_can_invoke_process_messages() { - let mut deps = mock_dependencies(); - - let info_foobar = MessageInfo { - sender: Addr::unchecked("foobar".to_string()), - funds: vec![], - }; - let info_foobarbaz = MessageInfo { - sender: Addr::unchecked("foobarbaz".to_string()), - funds: vec![], - }; - - let msg = ExecuteMsg::ProcessMessages { - count: Some(1), - message_ids: None, - }; - - // all addresses should be able to invoke this - assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); - assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_ok()); - - // try again with message_ids Some - - let msg = ExecuteMsg::ProcessMessages { - count: None, - message_ids: Some(vec!["foobar".to_string()]), - }; - - // all addresses should be able to invoke this - assert!(can_invoke_message(&deps.as_mut(), &info_foobar, &msg).is_ok()); - assert!(can_invoke_message(&deps.as_mut(), &info_foobarbaz, &msg).is_ok()); - } - - #[test] - fn test_grant_role() { - let mut deps = mock_dependencies(); - let mut deps = deps.as_mut(); - - let all_roles = Roles::all_roles().into_iter().chunks(2); - - // no roles, should fail - assert!(RBAC_PERMISSIONS - .load(deps.storage, MockApi::default().addr_make("signer").to_string()) - .is_err()); - - let mut granted_roles = BTreeSet::new(); - - for roles in &all_roles { - let roles = roles.collect::>(); - - grant_role(&mut deps, MockApi::default().addr_make("signer").to_string(), roles.clone()).unwrap(); - roles.iter().for_each(|role| { - granted_roles.insert(*role); - }); - - let assigned_roles = RBAC_PERMISSIONS - .load(deps.storage, MockApi::default().addr_make("signer").to_string()) - .unwrap(); - - assert_eq!(granted_roles, assigned_roles); - } - } - - #[test] - fn test_revoke_role() { - let mut deps = mock_dependencies(); - let mut deps = deps.as_mut(); - - let all_roles = Roles::all_roles(); - // no roles, should fail - assert!(RBAC_PERMISSIONS - .load(deps.storage, MockApi::default().addr_make("signer").to_string()) - .is_err()); - - // grant all roles - RBAC_PERMISSIONS - .save( - deps.storage, - MockApi::default().addr_make("signer").to_string(), - &all_roles.iter().copied().collect::>(), - ) - .unwrap(); - - let mut granted_roles: BTreeSet<_> = all_roles.iter().copied().collect(); - - for roles in &all_roles.iter().chunks(2) { - let roles = roles.copied().collect::>(); - - revoke_role(&mut deps, MockApi::default().addr_make("signer").to_string(), roles.clone()).unwrap(); - - roles.iter().for_each(|role| { - granted_roles.remove(role); - }); - - if granted_roles.is_empty() { - // no roles, should fail - assert!(RBAC_PERMISSIONS - .load(deps.storage, MockApi::default().addr_make("signer").to_string()) - .is_err()); - } else { - let assigned_roles = RBAC_PERMISSIONS - .load(deps.storage, MockApi::default().addr_make("signer").to_string()) - .unwrap(); - - assert_eq!(assigned_roles, granted_roles); - } - } - } -} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/state/flow.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/state/flow.rs deleted file mode 100644 index a230ae2ca..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/state/flow.rs +++ /dev/null @@ -1,167 +0,0 @@ -use cosmwasm_std::{Timestamp, Uint256}; -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; - -use super::quota::Quota; - -#[derive(Debug, Clone)] -pub enum FlowType { - In, - Out, -} - -/// A Flow represents the transfer of value for a denom through an IBC channel -/// during a time window. -/// -/// It tracks inflows (transfers into neturon) and outflows (transfers out of -/// neturon). -/// -/// The period_end represents the last point in time for which this Flow is -/// tracking the value transfer. -/// -/// Periods are discrete repeating windows. A period only starts when a contract -/// call to update the Flow (SendPacket/RecvPackt) is made, and not right after -/// the period ends. This means that if no calls happen after a period expires, -/// the next period will begin at the time of the next call and be valid for the -/// specified duration for the quota. -/// -/// This is a design decision to avoid the period calculations and thus reduce gas consumption -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema, Copy)] -pub struct Flow { - pub inflow: Uint256, - pub outflow: Uint256, - pub period_end: Timestamp, -} - -impl Flow { - pub fn new( - inflow: impl Into, - outflow: impl Into, - now: Timestamp, - duration: u64, - ) -> Self { - Self { - inflow: inflow.into(), - outflow: outflow.into(), - period_end: now.plus_seconds(duration), - } - } - - /// The balance of a flow is how much absolute value for the denom has moved - /// through the channel before period_end. It returns a tuple of - /// (balance_in, balance_out) where balance_in in is how much has been - /// transferred into the flow, and balance_out is how much value transferred - /// out. - pub fn balance(&self) -> (Uint256, Uint256) { - ( - self.inflow.saturating_sub(self.outflow), - self.outflow.saturating_sub(self.inflow), - ) - } - - /// checks if the flow, in the current state, has exceeded a max allowance - pub fn exceeds(&self, direction: &FlowType, max_inflow: Uint256, max_outflow: Uint256) -> bool { - let (balance_in, balance_out) = self.balance(); - match direction { - FlowType::In => balance_in > max_inflow, - FlowType::Out => balance_out > max_outflow, - } - } - - /// returns the balance in a direction. This is used for displaying cleaner errors - pub fn balance_on(&self, direction: &FlowType) -> Uint256 { - let (balance_in, balance_out) = self.balance(); - match direction { - FlowType::In => balance_in, - FlowType::Out => balance_out, - } - } - - /// If now is greater than the period_end, the Flow is considered expired. - pub fn is_expired(&self, now: Timestamp) -> bool { - self.period_end < now - } - - // Mutating methods - - /// Expire resets the Flow to start tracking the value transfer from the - /// moment this method is called. - pub fn expire(&mut self, now: Timestamp, duration: u64) { - self.inflow = Uint256::zero(); - self.outflow = Uint256::zero(); - self.period_end = now.plus_seconds(duration); - } - - /// Updates the current flow incrementing it by a transfer of value. - pub fn add_flow(&mut self, direction: FlowType, value: Uint256) { - match direction { - FlowType::In => self.inflow = self.inflow.saturating_add(value), - FlowType::Out => self.outflow = self.outflow.saturating_add(value), - } - } - - /// Updates the current flow reducing it by a transfer of value. - pub fn undo_flow(&mut self, direction: FlowType, value: Uint256) { - match direction { - FlowType::In => self.inflow = self.inflow.saturating_sub(value), - FlowType::Out => self.outflow = self.outflow.saturating_sub(value), - } - } - - /// Applies a transfer. If the Flow is expired (now > period_end), it will - /// reset it before applying the transfer. - pub(crate) fn apply_transfer( - &mut self, - direction: &FlowType, - funds: Uint256, - now: Timestamp, - quota: &Quota, - ) -> bool { - let mut expired = false; - if self.is_expired(now) { - self.expire(now, quota.duration); - expired = true; - } - self.add_flow(direction.clone(), funds); - expired - } -} - -#[cfg(test)] -pub mod tests { - use super::*; - - pub const RESET_TIME_DAILY: u64 = 60 * 60 * 24; - pub const RESET_TIME_WEEKLY: u64 = 60 * 60 * 24 * 7; - pub const RESET_TIME_MONTHLY: u64 = 60 * 60 * 24 * 30; - - #[test] - fn flow() { - let epoch = Timestamp::from_seconds(0); - let mut flow = Flow::new(0_u32, 0_u32, epoch, RESET_TIME_WEEKLY); - - assert!(!flow.is_expired(epoch)); - assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_DAILY))); - assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY))); - assert!(flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY).plus_nanos(1))); - - assert_eq!(flow.balance(), (0_u32.into(), 0_u32.into())); - flow.add_flow(FlowType::In, 5_u32.into()); - assert_eq!(flow.balance(), (5_u32.into(), 0_u32.into())); - flow.add_flow(FlowType::Out, 2_u32.into()); - assert_eq!(flow.balance(), (3_u32.into(), 0_u32.into())); - // Adding flow doesn't affect expiration - assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_DAILY))); - - flow.expire(epoch.plus_seconds(RESET_TIME_WEEKLY), RESET_TIME_WEEKLY); - assert_eq!(flow.balance(), (0_u32.into(), 0_u32.into())); - assert_eq!(flow.inflow, Uint256::from(0_u32)); - assert_eq!(flow.outflow, Uint256::from(0_u32)); - assert_eq!(flow.period_end, epoch.plus_seconds(RESET_TIME_WEEKLY * 2)); - - // Expiration has moved - assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY).plus_nanos(1))); - assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY * 2))); - assert!(flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY * 2).plus_nanos(1))); - } -} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/state/mod.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/state/mod.rs deleted file mode 100644 index ed5e13610..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/state/mod.rs +++ /dev/null @@ -1,8 +0,0 @@ -//! The state module provides utilities for working with contract state, as well as interacting with key-value storage - -pub mod flow; -pub mod path; -pub mod quota; -pub mod rate_limit; -pub mod rbac; -pub mod storage; diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/state/path.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/state/path.rs deleted file mode 100644 index 03d5a2fe0..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/state/path.rs +++ /dev/null @@ -1,33 +0,0 @@ -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; - -/// This represents the key for our rate limiting tracker. A tuple of a denom and -/// a channel. When interacting with storage, it's preffered to use this struct -/// and call path.into() on it to convert it to the composite key of the -/// RATE_LIMIT_TRACKERS map -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] -pub struct Path { - pub denom: String, - pub channel: String, -} - -impl Path { - pub fn new(channel: impl Into, denom: impl Into) -> Self { - Path { - channel: channel.into(), - denom: denom.into(), - } - } -} - -impl From for (String, String) { - fn from(path: Path) -> (String, String) { - (path.channel, path.denom) - } -} - -impl From<&Path> for (String, String) { - fn from(path: &Path) -> (String, String) { - (path.channel.to_owned(), path.denom.to_owned()) - } -} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/state/quota.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/state/quota.rs deleted file mode 100644 index ee7c543b3..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/state/quota.rs +++ /dev/null @@ -1,64 +0,0 @@ -use cosmwasm_std::Uint256; -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; - -use crate::msg::QuotaMsg; - -use super::flow::FlowType; - -/// A Quota is the percentage of the denom's total value that can be transferred -/// through the channel in a given period of time (duration) -/// -/// Percentages can be different for send and recv -/// -/// The name of the quota is expected to be a human-readable representation of -/// the duration (i.e.: "weekly", "daily", "every-six-months", ...) -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] -pub struct Quota { - pub name: String, - pub max_percentage_send: u32, - pub max_percentage_recv: u32, - pub duration: u64, - pub channel_value: Option, -} - -impl Quota { - /// Calculates the max capacity (absolute value in the same unit as - /// total_value) in each direction based on the total value of the denom in - /// the channel. The result tuple represents the max capacity when the - /// transfer is in directions: (FlowType::In, FlowType::Out) - pub fn capacity(&self) -> (Uint256, Uint256) { - match self.channel_value { - Some(total_value) => ( - total_value * Uint256::from(self.max_percentage_recv) / Uint256::from(100_u32), - total_value * Uint256::from(self.max_percentage_send) / Uint256::from(100_u32), - ), - None => (0_u32.into(), 0_u32.into()), // This should never happen, but ig the channel value is not set, we disallow any transfer - } - } - - /// returns the capacity in a direction. This is used for displaying cleaner errors - pub fn capacity_on(&self, direction: &FlowType) -> Uint256 { - let (max_in, max_out) = self.capacity(); - match direction { - FlowType::In => max_in, - FlowType::Out => max_out, - } - } -} - -impl From<&QuotaMsg> for Quota { - fn from(msg: &QuotaMsg) -> Self { - let send_recv = ( - std::cmp::min(msg.send_recv.0, 100), - std::cmp::min(msg.send_recv.1, 100), - ); - Quota { - name: msg.name.clone(), - max_percentage_send: send_recv.0, - max_percentage_recv: send_recv.1, - duration: msg.duration, - channel_value: None, - } - } -} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/state/rate_limit.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/state/rate_limit.rs deleted file mode 100644 index fba96b48c..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/state/rate_limit.rs +++ /dev/null @@ -1,98 +0,0 @@ -use cosmwasm_std::{Timestamp, Uint256}; -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; - -use crate::ContractError; - -use super::{ - flow::{Flow, FlowType}, - path::Path, - quota::Quota, -}; - -/// RateLimit is the main structure tracked for each channel/denom pair. Its quota -/// represents rate limit configuration, and the flow its -/// current state (i.e.: how much value has been transfered in the current period) -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] -pub struct RateLimit { - pub quota: Quota, - pub flow: Flow, -} - -impl RateLimit { - /// Checks if a transfer is allowed and updates the data structures - /// accordingly. - /// - /// If the transfer is not allowed, it will return a RateLimitExceeded error. - /// - /// Otherwise it will return a RateLimitResponse with the updated data structures - pub fn allow_transfer( - &mut self, - path: &Path, - direction: &FlowType, - funds: Uint256, - channel_value: Uint256, - now: Timestamp, - ) -> Result { - // Flow used before this transaction is applied. - // This is used to make error messages more informative - let initial_flow = self.flow.balance_on(direction); - - // Apply the transfer. From here on, we will updated the flow with the new transfer - // and check if it exceeds the quota at the current time - - let expired = self.flow.apply_transfer(direction, funds, now, &self.quota); - // Cache the channel value if it has never been set or it has expired. - if self.quota.channel_value.is_none() || expired { - self.quota.channel_value = Some(calculate_channel_value( - channel_value, - &path.denom, - funds, - direction, - )) - } - - let (max_in, max_out) = self.quota.capacity(); - // Return the effects of applying the transfer or an error. - match self.flow.exceeds(direction, max_in, max_out) { - true => Err(ContractError::RateLimitExceded { - channel: path.channel.to_string(), - denom: path.denom.to_string(), - amount: funds, - quota_name: self.quota.name.to_string(), - used: initial_flow, - max: self.quota.capacity_on(direction), - reset: self.flow.period_end, - }), - false => Ok(RateLimit { - quota: self.quota.clone(), // Cloning here because self.quota.name (String) does not allow us to implement Copy - flow: self.flow, // We can Copy flow, so this is slightly more efficient than cloning the whole RateLimit - }), - } - } -} - -// The channel value on send depends on the amount on escrow. The ibc transfer -// module modifies the escrow amount by "funds" on sends before calling the -// contract. This function takes that into account so that the channel value -// that we track matches the channel value at the moment when the ibc -// transaction started executing -fn calculate_channel_value( - channel_value: Uint256, - denom: &str, - funds: Uint256, - direction: &FlowType, -) -> Uint256 { - match direction { - FlowType::Out => { - if denom.starts_with("ibc") { - channel_value + funds // Non-Native tokens get removed from the supply on send. Add that amount back - } else { - // The commented-out code in the golang calculate channel value is what we want, but we're currently using the whole supply temporarily for efficiency. see rate_limit.go/CalculateChannelValue(..) - //channel_value - funds // Native tokens increase escrow amount on send. Remove that amount here - channel_value - } - } - FlowType::In => channel_value, - } -} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/state/rbac.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/state/rbac.rs deleted file mode 100644 index 76de0e70e..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/state/rbac.rs +++ /dev/null @@ -1,78 +0,0 @@ -use cosmwasm_std::Timestamp; -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; - -use crate::msg::ExecuteMsg; - -/// Roles defines the available permissions that can be assigned to addresses as part of the RBAC system -#[derive( - Serialize, Deserialize, Clone, Copy, Debug, PartialEq, Eq, JsonSchema, PartialOrd, Ord, Hash, -)] -pub enum Roles { - /// Has the ability to add a new rate limit - AddRateLimit, - /// Has the ability to complete remove a configured rate limit - RemoveRateLimit, - /// Has the ability to reset tracked quotas - ResetPathQuota, - /// Has the ability to edit existing quotas - EditPathQuota, - /// Has the ability to grant roles to an address - GrantRole, - /// Has the ability to revoke granted roles to an address - RevokeRole, - /// Has the ability to remove queued messages - RemoveMessage, - /// Has the ability to alter timelock delay's - SetTimelockDelay, - // Has the ability to manage denom restrictions - ManageDenomRestrictions, -} - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] -pub struct QueuedMessage { - /// the message that submitted to the contract after a sucessful governance proposal - pub message: ExecuteMsg, - /// the time which the message was processed by the contract - pub submitted_at: Timestamp, - /// the timelock delay that was in place when the message was queued for execution - pub timelock_delay: u64, - /// Constructed using format!("{}_{}", Env::BlockInfo::Height Env::Transaction::Index) - /// - /// Can be used to remove a message from the queue without processing it - pub message_id: String, -} - -impl Roles { - /// helper function that returns a vec containing all variants of the Roles enum - pub fn all_roles() -> Vec { - vec![ - Roles::AddRateLimit, - Roles::RemoveRateLimit, - Roles::ResetPathQuota, - Roles::EditPathQuota, - Roles::GrantRole, - Roles::RevokeRole, - Roles::RemoveMessage, - Roles::SetTimelockDelay, - Roles::ManageDenomRestrictions, - ] - } -} - -#[cfg(test)] -mod test { - use super::*; - #[test] - fn test_all_roles() { - let roles = Roles::all_roles(); - assert!(roles.contains(&Roles::AddRateLimit)); - assert!(roles.contains(&Roles::RemoveRateLimit)); - assert!(roles.contains(&Roles::ResetPathQuota)); - assert!(roles.contains(&Roles::EditPathQuota)); - assert!(roles.contains(&Roles::GrantRole)); - assert!(roles.contains(&Roles::RevokeRole)); - assert!(roles.contains(&Roles::RemoveMessage)); - assert!(roles.contains(&Roles::SetTimelockDelay)); - } -} diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/state/storage.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/state/storage.rs deleted file mode 100644 index e8cb0a7af..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/state/storage.rs +++ /dev/null @@ -1,53 +0,0 @@ -//! storage variables - -use std::collections::BTreeSet; - -use cosmwasm_std::Addr; -use cw_storage_plus::{Deque, Item, Map}; - -use super::{ - rate_limit::RateLimit, - rbac::{QueuedMessage, Roles}, -}; - -/// Only this address can manage the contract. This will likely be the -/// governance module, but could be set to something else if needed -pub const GOVMODULE: Item = Item::new("gov_module"); -/// Only this address can execute transfers. This will likely be the -/// IBC transfer module, but could be set to something else if needed -pub const IBCMODULE: Item = Item::new("ibc_module"); - -/// RATE_LIMIT_TRACKERS is the main state for this contract. It maps a path (IBC -/// Channel + denom) to a vector of `RateLimit`s. -/// -/// The `RateLimit` struct contains the information about how much value of a -/// denom has moved through the channel during the currently active time period -/// (channel_flow.flow) and what percentage of the denom's value we are -/// allowing to flow through that channel in a specific duration (quota) -/// -/// For simplicity, the channel in the map keys refers to the "host" channel on -/// the neutron side. This means that on PacketSend it will refer to the source -/// channel while on PacketRecv it refers to the destination channel. -/// -/// It is the responsibility of the go module to pass the appropriate channel -/// when sending the messages -/// -/// The map key (String, String) represents (channel_id, denom). We use -/// composite keys instead of a struct to avoid having to implement the -/// PrimaryKey trait -pub const RATE_LIMIT_TRACKERS: Map<(String, String), Vec> = Map::new("flow"); - -/// Maps address -> delay, automatically applying a timelock delay to all -/// messages submitted by a specific address -pub const TIMELOCK_DELAY: Map = Map::new("timelock_delay"); - -/// Storage variable which is used to queue messages for execution that are the result of a successful dao message. -/// In order for the message to be processed, X hours must past from QueuedMessage::submited_at -pub const MESSAGE_QUEUE: Deque = Deque::new("queued_messages"); - -/// Storage variable that is used to map signing addresses and the permissions they have been granted -pub const RBAC_PERMISSIONS: Map> = Map::new("rbac"); - -/// Accepted channels for restricted denom. This is a map of denom -> channels. -/// If a denom is not in this map, it is unrestricted. -pub const ACCEPTED_CHANNELS_FOR_RESTRICTED_DENOM: Map> = Map::new("acfd"); diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/sudo.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/sudo.rs deleted file mode 100644 index b3b39de4e..000000000 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/sudo.rs +++ /dev/null @@ -1,199 +0,0 @@ -use cosmwasm_std::{DepsMut, Response, Timestamp, Uint256}; - -use crate::{ - blocking::check_restricted_denoms, - packet::Packet, - state::{flow::FlowType, path::Path, rate_limit::RateLimit, storage::RATE_LIMIT_TRACKERS}, - ContractError, -}; - -// This function will process a packet and extract the paths information, funds, -// and channel value from it. This is will have to interact with the chain via grpc queries to properly -// obtain this information. -// -// For backwards compatibility, we're teporarily letting the chain override the -// denom and channel value, but these should go away in favour of the contract -// extracting these from the packet -pub fn process_packet( - deps: DepsMut, - packet: Packet, - direction: FlowType, - now: Timestamp, - #[cfg(test)] channel_value_mock: Option, -) -> Result { - check_restricted_denoms(deps.as_ref(), &packet, &direction)?; - - let (channel_id, denom) = packet.path_data(&direction); - #[allow(clippy::needless_borrow)] - let path = &Path::new(channel_id, denom); - let funds = packet.get_funds(); - - #[cfg(test)] - // When testing we override the channel value with the mock since we can't get it from the chain - let channel_value = match channel_value_mock { - Some(channel_value) => channel_value, - None => packet.channel_value(deps.as_ref(), &direction)?, // This should almost never be used, but left for completeness in case we want to send an empty channel_value from the test - }; - - #[cfg(not(test))] - let channel_value = packet.channel_value(deps.as_ref(), &direction)?; - - try_transfer(deps, path, channel_value, funds, direction, now) -} - -/// This function checks the rate limit and, if successful, stores the updated data about the value -/// that has been transfered through the channel for a specific denom. -/// If the period for a RateLimit has ended, the Flow information is reset. -/// -/// The channel_value is the current value of the denom for the the channel as -/// calculated by the caller. This should be the total supply of a denom -pub fn try_transfer( - deps: DepsMut, - path: &Path, - channel_value: Uint256, - funds: Uint256, - direction: FlowType, - now: Timestamp, -) -> Result { - // Sudo call. Only go modules should be allowed to access this - - // Fetch potential trackers for "any" channel of the required token - let any_path = Path::new("any", path.denom.clone()); - let mut any_trackers = RATE_LIMIT_TRACKERS - .may_load(deps.storage, any_path.clone().into())? - .unwrap_or_default(); - // Fetch trackers for the requested path - let mut trackers = RATE_LIMIT_TRACKERS - .may_load(deps.storage, path.into())? - .unwrap_or_default(); - - let not_configured = trackers.is_empty() && any_trackers.is_empty(); - - if not_configured { - // No Quota configured for the current path. Allowing all messages. - return Ok(Response::new() - .add_attribute("method", "try_transfer") - .add_attribute("channel_id", path.channel.to_string()) - .add_attribute("denom", path.denom.to_string()) - .add_attribute("quota", "none")); - } - - // If any of the RateLimits fails, allow_transfer() will return - // ContractError::RateLimitExceded, which we'll propagate out - let results: Vec = trackers - .iter_mut() - .map(|limit| limit.allow_transfer(path, &direction, funds, channel_value, now)) - .collect::>()?; - - let any_results: Vec = any_trackers - .iter_mut() - .map(|limit| limit.allow_transfer(path, &direction, funds, channel_value, now)) - .collect::>()?; - - RATE_LIMIT_TRACKERS.save(deps.storage, path.into(), &results)?; - RATE_LIMIT_TRACKERS.save(deps.storage, any_path.into(), &any_results)?; - - let response = Response::new() - .add_attribute("method", "try_transfer") - .add_attribute("channel_id", path.channel.to_string()) - .add_attribute("denom", path.denom.to_string()); - - // Adds the attributes for each path to the response. In prod, the - // addtribute add_rate_limit_attributes is a noop - let response: Result = - any_results.iter().try_fold(response, |acc, result| { - Ok(add_rate_limit_attributes(acc, result)) - }); - - results.iter().try_fold(response?, |acc, result| { - Ok(add_rate_limit_attributes(acc, result)) - }) -} - -// #[cfg(any(feature = "verbose_responses", test))] -fn add_rate_limit_attributes(response: Response, result: &RateLimit) -> Response { - let (used_in, used_out) = result.flow.balance(); - let (max_in, max_out) = result.quota.capacity(); - // These attributes are only added during testing. That way we avoid - // calculating these again on prod. - response - .add_attribute( - format!("{}_used_in", result.quota.name), - used_in.to_string(), - ) - .add_attribute( - format!("{}_used_out", result.quota.name), - used_out.to_string(), - ) - .add_attribute(format!("{}_max_in", result.quota.name), max_in.to_string()) - .add_attribute( - format!("{}_max_out", result.quota.name), - max_out.to_string(), - ) - .add_attribute( - format!("{}_period_end", result.quota.name), - result.flow.period_end.to_string(), - ) -} - -// Leaving the attributes in until we can conditionally compile the contract -// for the go tests in CI: https://github.com/mandrean/cw-optimizoor/issues/19 -// -// #[cfg(not(any(feature = "verbose_responses", test)))] -// fn add_rate_limit_attributes(response: Response, _result: &RateLimit) -> Response { -// response -// } - -// This function manually injects an inflow. This is used when reverting a -// packet that failed ack or timed-out. -pub fn undo_send(deps: DepsMut, packet: Packet) -> Result { - // Sudo call. Only go modules should be allowed to access this - let (channel_id, denom) = packet.path_data(&FlowType::Out); // Sends have direction out. - #[allow(clippy::needless_borrow)] - let path = &Path::new(channel_id, &denom); - let any_path = Path::new("any", &denom); - let funds = packet.get_funds(); - - let mut any_trackers = RATE_LIMIT_TRACKERS - .may_load(deps.storage, any_path.clone().into())? - .unwrap_or_default(); - let mut trackers = RATE_LIMIT_TRACKERS - .may_load(deps.storage, path.into())? - .unwrap_or_default(); - - let not_configured = trackers.is_empty() && any_trackers.is_empty(); - - if not_configured { - // No Quota configured for the current path. Allowing all messages. - return Ok(Response::new() - .add_attribute("method", "try_transfer") - .add_attribute("channel_id", path.channel.to_string()) - .add_attribute("denom", path.denom.to_string()) - .add_attribute("quota", "none")); - } - - // We force update the flow to remove a failed send - let results: Vec = trackers - .iter_mut() - .map(|limit| { - limit.flow.undo_flow(FlowType::Out, funds); - limit.to_owned() - }) - .collect(); - let any_results: Vec = any_trackers - .iter_mut() - .map(|limit| { - limit.flow.undo_flow(FlowType::Out, funds); - limit.to_owned() - }) - .collect(); - - RATE_LIMIT_TRACKERS.save(deps.storage, path.into(), &results)?; - RATE_LIMIT_TRACKERS.save(deps.storage, any_path.into(), &any_results)?; - - Ok(Response::new() - .add_attribute("method", "undo_send") - .add_attribute("channel_id", path.channel.to_string()) - .add_attribute("denom", path.denom.to_string()) - .add_attribute("any_channel", (!any_trackers.is_empty()).to_string())) -} From c00327b276c19564853f819244a465cc24b85332 Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Thu, 19 Sep 2024 15:17:15 -0400 Subject: [PATCH 085/127] switch to wrapped error --- x/dex/keeper/cancel_limit_order.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x/dex/keeper/cancel_limit_order.go b/x/dex/keeper/cancel_limit_order.go index a45ac9177..8538313bb 100644 --- a/x/dex/keeper/cancel_limit_order.go +++ b/x/dex/keeper/cancel_limit_order.go @@ -59,7 +59,7 @@ func (k Keeper) ExecuteCancelLimitOrder( ) (makerCoinOut, takerCoinOut sdk.Coin, tradePairID *types.TradePairID, error error) { trancheUser, found := k.GetLimitOrderTrancheUser(ctx, callerAddr.String(), trancheKey) if !found { - return sdk.Coin{}, sdk.Coin{}, nil, types.ErrValidLimitOrderTrancheNotFound + return sdk.Coin{}, sdk.Coin{}, nil, sdkerrors.Wrapf(types.ErrValidLimitOrderTrancheNotFound, "%s", trancheKey) } tradePairID, tickIndex := trancheUser.TradePairId, trancheUser.TickIndexTakerToMaker @@ -72,7 +72,7 @@ func (k Keeper) ExecuteCancelLimitOrder( }, ) if !found { - return sdk.Coin{}, sdk.Coin{}, nil, types.ErrValidLimitOrderTrancheNotFound + return sdk.Coin{}, sdk.Coin{}, nil, sdkerrors.Wrapf(types.ErrValidLimitOrderTrancheNotFound, "%s", trancheKey) } makerAmountToReturn := tranche.RemoveTokenIn(trancheUser) From 94f0b32fb345076d0ec44891a8d569914c7ce980 Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Thu, 19 Sep 2024 15:24:43 -0400 Subject: [PATCH 086/127] fix typo --- x/dex/types/errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/dex/types/errors.go b/x/dex/types/errors.go index 06b5bec8c..04b845b99 100644 --- a/x/dex/types/errors.go +++ b/x/dex/types/errors.go @@ -27,7 +27,7 @@ var ( ErrValidLimitOrderTrancheNotFound = sdkerrors.Register( ModuleName, 1111, - "Limit order trache not found:", + "Limit order tranche not found:", ) // "%d", trancheKey ErrCancelEmptyLimitOrder = sdkerrors.Register( ModuleName, From 3ad6350842601ca76c6a07dc87dcbb8dc530f2e8 Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Thu, 19 Sep 2024 16:02:10 -0400 Subject: [PATCH 087/127] Misc event cleanup + TrancheUserUpdateEvent --- x/dex/keeper/limit_order_tranche_user.go | 2 ++ x/dex/keeper/place_limit_order.go | 33 +++++++++++------------- x/dex/types/events.go | 32 ++++++++++++++++------- 3 files changed, 40 insertions(+), 27 deletions(-) diff --git a/x/dex/keeper/limit_order_tranche_user.go b/x/dex/keeper/limit_order_tranche_user.go index 9df5c072e..e5a862f5c 100644 --- a/x/dex/keeper/limit_order_tranche_user.go +++ b/x/dex/keeper/limit_order_tranche_user.go @@ -93,6 +93,8 @@ func (k Keeper) SaveTrancheUser(ctx sdk.Context, trancheUser *types.LimitOrderTr } else { k.SetLimitOrderTrancheUser(ctx, trancheUser) } + ctx.EventManager().EmitEvent(types.TrancheUserUpdateEvent(*trancheUser)) + } // GetAllLimitOrderTrancheUser returns all LimitOrderTrancheUser diff --git a/x/dex/keeper/place_limit_order.go b/x/dex/keeper/place_limit_order.go index b35a7a58d..fcb562b5b 100644 --- a/x/dex/keeper/place_limit_order.go +++ b/x/dex/keeper/place_limit_order.go @@ -72,24 +72,21 @@ func (k Keeper) PlaceLimitOrderCore( // This will never panic because we've already successfully constructed a TradePairID above pairID := takerTradePairID.MustPairID() - types.EmitEventWithTimestamp( - ctx, - types.CreatePlaceLimitOrderEvent( - callerAddr, - receiverAddr, - pairID.Token0, - pairID.Token1, - tokenIn, - tokenOut, - totalIn, - tickIndexInToOut, - orderType.String(), - sharesIssued, - trancheKey, - swapInCoin.Amount, - swapOutCoin.Amount, - ), - ) + ctx.EventManager().EmitEvent(types.CreatePlaceLimitOrderEvent( + callerAddr, + receiverAddr, + pairID.Token0, + pairID.Token1, + tokenIn, + tokenOut, + totalIn, + tickIndexInToOut, + orderType.String(), + sharesIssued, + trancheKey, + swapInCoin.Amount, + swapOutCoin.Amount, + )) return trancheKey, totalInCoin, swapInCoin, swapOutCoin, nil } diff --git a/x/dex/types/events.go b/x/dex/types/events.go index d822c79fc..e08c1defa 100644 --- a/x/dex/types/events.go +++ b/x/dex/types/events.go @@ -3,7 +3,6 @@ package types import ( "strconv" "strings" - "time" "cosmossdk.io/math" "cosmossdk.io/store/types" @@ -50,7 +49,10 @@ const ( AttributeInc = "inc" AttributeDec = "dec" AttributePairID = "pair_id" - AttributeTimestamp = "Timestamp" + AttributeMakerDenom = "MakerDenom" + AttributeTakerDenom = "TakerDenom" + AttributeSharesOwned = "SharesOwned" + AttributeSharesWithdrawn = "SharesWithdrawn" ) // Event Keys @@ -64,16 +66,12 @@ const ( EventTypeTickUpdate = "TickUpdate" TickUpdateEventKey = "TickUpdate" EventTypeGoodTilPurgeHitGasLimit = "GoodTilPurgeHitGasLimit" + TrancheUserUpdateEventKey = "TrancheUserUpdate" + EventTypeTrancheUserUpdate = "TrancheUserUpdate" // EventTypeNeutronMessage defines the event type used by the Interchain Queries module events. EventTypeNeutronMessage = "neutron" ) -func EmitEventWithTimestamp(ctx sdk.Context, event sdk.Event) { - timestamp := sdk.NewAttribute(AttributeTimestamp, ctx.BlockTime().Format(time.RFC3339)) - event = event.AppendAttributes(timestamp) - ctx.EventManager().EmitEvent(event) -} - func CreateDepositEvent( creator sdk.AccAddress, receiver sdk.AccAddress, @@ -244,8 +242,8 @@ func CancelLimitOrderEvent( sdk.NewAttribute(AttributeToken1, token1), sdk.NewAttribute(AttributeTokenIn, makerDenom), sdk.NewAttribute(AttributeTokenOut, tokenOut), - sdk.NewAttribute(AttributeTokenOutAmountOut, amountOutTaker.String()), sdk.NewAttribute(AttributeTokenInAmountOut, amountOutMaker.String()), + sdk.NewAttribute(AttributeTokenOutAmountOut, amountOutTaker.String()), sdk.NewAttribute(AttributeTrancheKey, trancheKey), } @@ -423,3 +421,19 @@ func GetEventsDecTotalPoolReserves(pairID PairID) sdk.Events { ), } } + +func TrancheUserUpdateEvent(trancheUser LimitOrderTrancheUser) sdk.Event { + attrs := []sdk.Attribute{ + sdk.NewAttribute(sdk.AttributeKeyModule, "dex"), + sdk.NewAttribute(sdk.AttributeKeyAction, TrancheUserUpdateEventKey), + sdk.NewAttribute(AttributeTrancheKey, trancheUser.TrancheKey), + sdk.NewAttribute(AttributeCreator, trancheUser.Address), + sdk.NewAttribute(AttributeTickIndex, strconv.Itoa(int(trancheUser.TickIndexTakerToMaker))), + sdk.NewAttribute(AttributeMakerDenom, trancheUser.TradePairId.MakerDenom), + sdk.NewAttribute(AttributeTakerDenom, trancheUser.TradePairId.TakerDenom), + sdk.NewAttribute(AttributeSharesOwned, trancheUser.SharesOwned.String()), + sdk.NewAttribute(AttributeSharesWithdrawn, trancheUser.SharesWithdrawn.String()), + } + return sdk.NewEvent(EventTypeTickUpdate, attrs...) + +} From b040804e702485e7896a96645187ad6ab572d86e Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Thu, 19 Sep 2024 16:13:13 -0400 Subject: [PATCH 088/127] fmt --- x/dex/keeper/limit_order_tranche_user.go | 1 - x/dex/types/events.go | 1 - 2 files changed, 2 deletions(-) diff --git a/x/dex/keeper/limit_order_tranche_user.go b/x/dex/keeper/limit_order_tranche_user.go index e5a862f5c..ea2896a70 100644 --- a/x/dex/keeper/limit_order_tranche_user.go +++ b/x/dex/keeper/limit_order_tranche_user.go @@ -94,7 +94,6 @@ func (k Keeper) SaveTrancheUser(ctx sdk.Context, trancheUser *types.LimitOrderTr k.SetLimitOrderTrancheUser(ctx, trancheUser) } ctx.EventManager().EmitEvent(types.TrancheUserUpdateEvent(*trancheUser)) - } // GetAllLimitOrderTrancheUser returns all LimitOrderTrancheUser diff --git a/x/dex/types/events.go b/x/dex/types/events.go index e08c1defa..1ebaef969 100644 --- a/x/dex/types/events.go +++ b/x/dex/types/events.go @@ -435,5 +435,4 @@ func TrancheUserUpdateEvent(trancheUser LimitOrderTrancheUser) sdk.Event { sdk.NewAttribute(AttributeSharesWithdrawn, trancheUser.SharesWithdrawn.String()), } return sdk.NewEvent(EventTypeTickUpdate, attrs...) - } From 98b6220723455adb0f993b802cfbb739b520c34d Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Mon, 23 Sep 2024 09:39:08 -0300 Subject: [PATCH 089/127] init v5 --- app/ante_handler.go | 4 +- app/app.go | 84 ++--- app/encoding.go | 2 +- app/proposals_allowlisting.go | 20 +- app/proposals_allowlisting_test.go | 6 +- app/upgrades/types.go | 12 +- app/upgrades/v4.0.1/constants.go | 14 +- app/upgrades/v4.0.1/upgrades.go | 240 +------------- app/upgrades/v4.0.1/upgrades_test.go | 4 +- cmd/neutrond/consumer.go | 2 +- cmd/neutrond/main.go | 4 +- cmd/neutrond/root.go | 4 +- go.mod | 2 +- proto/gaia/globalfee/v1beta1/genesis.proto | 2 +- proto/gaia/globalfee/v1beta1/params.proto | 2 +- proto/gaia/globalfee/v1beta1/query.proto | 2 +- proto/gaia/globalfee/v1beta1/tx.proto | 2 +- proto/neutron/contractmanager/failure.proto | 2 +- proto/neutron/contractmanager/genesis.proto | 2 +- proto/neutron/contractmanager/params.proto | 2 +- proto/neutron/contractmanager/query.proto | 2 +- proto/neutron/contractmanager/tx.proto | 2 +- .../neutron/contractmanager/v1/failure.proto | 2 +- proto/neutron/cron/genesis.proto | 2 +- proto/neutron/cron/params.proto | 2 +- proto/neutron/cron/query.proto | 2 +- proto/neutron/cron/schedule.proto | 2 +- proto/neutron/cron/tx.proto | 2 +- proto/neutron/cron/v1/schedule.proto | 2 +- proto/neutron/dex/deposit_record.proto | 2 +- proto/neutron/dex/genesis.proto | 2 +- .../neutron/dex/limit_order_expiration.proto | 2 +- proto/neutron/dex/limit_order_tranche.proto | 4 +- .../dex/limit_order_tranche_user.proto | 2 +- proto/neutron/dex/pair_id.proto | 2 +- proto/neutron/dex/params.proto | 2 +- proto/neutron/dex/pool.proto | 2 +- proto/neutron/dex/pool_metadata.proto | 2 +- proto/neutron/dex/pool_reserves.proto | 6 +- proto/neutron/dex/query.proto | 4 +- proto/neutron/dex/tick_liquidity.proto | 2 +- proto/neutron/dex/trade_pair_id.proto | 2 +- proto/neutron/dex/tx.proto | 6 +- proto/neutron/dex/v2/params.proto | 4 +- proto/neutron/dynamicfees/v1/genesis.proto | 2 +- proto/neutron/dynamicfees/v1/params.proto | 2 +- proto/neutron/dynamicfees/v1/query.proto | 2 +- proto/neutron/dynamicfees/v1/tx.proto | 2 +- proto/neutron/feeburner/genesis.proto | 2 +- proto/neutron/feeburner/params.proto | 2 +- proto/neutron/feeburner/query.proto | 2 +- .../total_burned_neutrons_amount.proto | 2 +- proto/neutron/feeburner/tx.proto | 2 +- proto/neutron/feerefunder/fee.proto | 2 +- proto/neutron/feerefunder/genesis.proto | 2 +- proto/neutron/feerefunder/params.proto | 2 +- proto/neutron/feerefunder/query.proto | 2 +- proto/neutron/feerefunder/tx.proto | 2 +- proto/neutron/interchainqueries/genesis.proto | 2 +- proto/neutron/interchainqueries/params.proto | 2 +- proto/neutron/interchainqueries/query.proto | 2 +- proto/neutron/interchainqueries/tx.proto | 2 +- proto/neutron/interchaintxs/v1/genesis.proto | 2 +- proto/neutron/interchaintxs/v1/params.proto | 2 +- proto/neutron/interchaintxs/v1/query.proto | 2 +- proto/neutron/interchaintxs/v1/tx.proto | 2 +- proto/neutron/transfer/v1/query.proto | 2 +- proto/neutron/transfer/v1/tx.proto | 2 +- proto/osmosis/tokenfactory/params.proto | 2 +- .../v1beta1/authorityMetadata.proto | 2 +- .../tokenfactory/v1beta1/genesis.proto | 2 +- .../osmosis/tokenfactory/v1beta1/params.proto | 2 +- .../osmosis/tokenfactory/v1beta1/query.proto | 2 +- proto/osmosis/tokenfactory/v1beta1/tx.proto | 2 +- scripts/protocgen.sh | 4 +- tests/e2e/interchain_security_test.go | 6 +- tests/feemarket/go.mod | 2 +- tests/ibc/ibc_setup_test.go | 4 +- testutil/apptesting/test_suite.go | 6 +- testutil/consumer/test_helpers.go | 2 +- .../contractmanager/keeper/contractmanager.go | 4 +- testutil/contractmanager/network/network.go | 6 +- testutil/cron/keeper/cron.go | 4 +- testutil/cron/network/network.go | 8 +- testutil/dex/keeper/dex.go | 4 +- testutil/dynamicfees/keeper/keeper.go | 4 +- testutil/feeburner/keeper/feeburner.go | 4 +- testutil/feerefunder/keeper/fee.go | 4 +- testutil/globalfee/keeper/globalfee.go | 4 +- testutil/integration_test_setup.go | 2 +- .../keeper/interchainqueries.go | 4 +- testutil/interchainqueries/network/network.go | 6 +- .../interchaintxs/keeper/interchaintxs.go | 4 +- .../interchaintxs/keeper/sudo_middleware.go | 4 +- testutil/interchaintxs/network/network.go | 6 +- .../contractmanager/types/expected_keepers.go | 2 +- .../mocks/interchainqueries/keeper/verify.go | 2 +- .../mocks/interchainqueries/types/verify.go | 2 +- .../interchaintxs/types/expected_keepers.go | 2 +- .../mocks/transfer/types/expected_keepers.go | 2 +- testutil/test_helpers.go | 12 +- testutil/tokenfactory/keeper/tokenfactory.go | 6 +- testutil/transfer/keeper/keeper.go | 4 +- utils/bank.go | 2 +- utils/dcli/parsers.go | 2 +- utils/dcli/parsers_test.go | 2 +- wasmbinding/bindings/msg.go | 8 +- wasmbinding/bindings/query.go | 8 +- wasmbinding/custom_querier.go | 2 +- wasmbinding/message_plugin.go | 30 +- wasmbinding/queries.go | 10 +- wasmbinding/query_plugin.go | 14 +- wasmbinding/stargate_allowlist.go | 16 +- wasmbinding/test/custom_message_test.go | 32 +- wasmbinding/test/custom_query_test.go | 16 +- wasmbinding/wasm.go | 18 +- x/contractmanager/client/cli/query.go | 2 +- x/contractmanager/client/cli/query_failure.go | 2 +- .../client/cli/query_failure_test.go | 10 +- x/contractmanager/client/cli/query_params.go | 2 +- x/contractmanager/genesis.go | 4 +- x/contractmanager/genesis_test.go | 10 +- x/contractmanager/ibc_middleware.go | 4 +- x/contractmanager/ibc_middleware_test.go | 8 +- x/contractmanager/keeper/failure.go | 2 +- x/contractmanager/keeper/failure_test.go | 12 +- x/contractmanager/keeper/grpc_query.go | 2 +- .../keeper/grpc_query_failure.go | 2 +- .../keeper/grpc_query_failure_test.go | 8 +- x/contractmanager/keeper/grpc_query_params.go | 2 +- .../keeper/grpc_query_params_test.go | 4 +- x/contractmanager/keeper/keeper.go | 2 +- x/contractmanager/keeper/migrations.go | 2 +- x/contractmanager/keeper/msg_server.go | 2 +- x/contractmanager/keeper/msg_server_test.go | 4 +- x/contractmanager/keeper/params.go | 2 +- x/contractmanager/keeper/params_test.go | 4 +- x/contractmanager/keeper/sudo.go | 2 +- x/contractmanager/keeper/sudo_test.go | 10 +- x/contractmanager/migrations/v2/store.go | 2 +- x/contractmanager/migrations/v2/store_test.go | 8 +- x/contractmanager/module.go | 6 +- x/contractmanager/types/failure.pb.go | 4 +- x/contractmanager/types/genesis.pb.go | 4 +- x/contractmanager/types/genesis_test.go | 2 +- x/contractmanager/types/params.pb.go | 4 +- x/contractmanager/types/query.pb.go | 14 +- x/contractmanager/types/tx.pb.go | 4 +- x/contractmanager/types/v1/failure.pb.go | 4 +- x/cron/client/cli/query.go | 2 +- x/cron/client/cli/query_params.go | 2 +- x/cron/client/cli/query_schedule.go | 2 +- x/cron/client/cli/query_schedule_test.go | 8 +- x/cron/client/cli/tx.go | 2 +- x/cron/genesis.go | 4 +- x/cron/genesis_test.go | 8 +- x/cron/keeper/grpc_query.go | 2 +- x/cron/keeper/grpc_query_params.go | 2 +- x/cron/keeper/grpc_query_params_test.go | 4 +- x/cron/keeper/grpc_query_schedule.go | 2 +- x/cron/keeper/grpc_query_schedule_test.go | 8 +- x/cron/keeper/keeper.go | 2 +- x/cron/keeper/keeper_test.go | 8 +- x/cron/keeper/migrations.go | 2 +- x/cron/keeper/msg_server.go | 2 +- x/cron/keeper/msg_server_test.go | 8 +- x/cron/keeper/params.go | 2 +- x/cron/keeper/params_test.go | 8 +- x/cron/migrations/v2/store.go | 2 +- x/cron/migrations/v2/store_test.go | 8 +- x/cron/module.go | 6 +- x/cron/module_simulation.go | 4 +- x/cron/types/genesis.pb.go | 6 +- x/cron/types/genesis_test.go | 4 +- x/cron/types/params.pb.go | 6 +- x/cron/types/query.pb.go | 64 ++-- x/cron/types/schedule.pb.go | 46 +-- x/cron/types/tx.pb.go | 4 +- x/cron/types/v1/schedule.pb.go | 36 +-- x/dex/client/cli/query.go | 2 +- .../cli/query_inactive_limit_order_tranche.go | 2 +- x/dex/client/cli/query_limit_order_tranche.go | 2 +- .../cli/query_limit_order_tranche_user.go | 2 +- x/dex/client/cli/query_params.go | 2 +- x/dex/client/cli/query_pool.go | 2 +- x/dex/client/cli/query_pool_metadata.go | 2 +- x/dex/client/cli/query_pool_reserves.go | 2 +- x/dex/client/cli/query_tick_liquidity.go | 2 +- x/dex/client/cli/query_user_deposits.go | 2 +- x/dex/client/cli/query_user_limit_orders.go | 2 +- x/dex/client/cli/tx.go | 2 +- x/dex/client/cli/tx_cancel_limit_order.go | 2 +- x/dex/client/cli/tx_deposit.go | 2 +- x/dex/client/cli/tx_multi_hop_swap.go | 4 +- x/dex/client/cli/tx_place_limit_order.go | 4 +- x/dex/client/cli/tx_withdrawl.go | 2 +- .../cli/tx_withdrawl_filled_limit_order.go | 2 +- x/dex/genesis.go | 4 +- x/dex/genesis_test.go | 8 +- x/dex/keeper/cancel_limit_order.go | 4 +- x/dex/keeper/core_helper.go | 6 +- x/dex/keeper/core_helper_test.go | 6 +- x/dex/keeper/deposit.go | 4 +- x/dex/keeper/deposit_record.go | 4 +- x/dex/keeper/deposit_record_test.go | 2 +- x/dex/keeper/grpc_query.go | 2 +- .../grpc_query_estimate_multi_hop_swap.go | 2 +- ...grpc_query_estimate_multi_hop_swap_test.go | 4 +- .../grpc_query_estimate_place_limit_order.go | 2 +- ...grpc_query_inactive_limit_order_tranche.go | 2 +- ...query_inactive_limit_order_tranche_test.go | 6 +- .../keeper/grpc_query_limit_order_tranche.go | 2 +- .../grpc_query_limit_order_tranche_test.go | 6 +- .../grpc_query_limit_order_tranche_user.go | 2 +- ...rpc_query_limit_order_tranche_user_test.go | 8 +- x/dex/keeper/grpc_query_params.go | 2 +- x/dex/keeper/grpc_query_params_test.go | 4 +- x/dex/keeper/grpc_query_pool.go | 2 +- x/dex/keeper/grpc_query_pool_metadata.go | 2 +- x/dex/keeper/grpc_query_pool_metadata_test.go | 6 +- x/dex/keeper/grpc_query_pool_reserves.go | 2 +- x/dex/keeper/grpc_query_pool_reserves_test.go | 6 +- x/dex/keeper/grpc_query_pool_test.go | 6 +- x/dex/keeper/grpc_query_tick_liquidity.go | 2 +- .../keeper/grpc_query_tick_liquidity_test.go | 4 +- x/dex/keeper/grpc_query_user_deposits.go | 6 +- x/dex/keeper/grpc_query_user_deposits_test.go | 8 +- x/dex/keeper/inactive_limit_order_tranche.go | 2 +- .../inactive_limit_order_tranche_test.go | 8 +- .../integration_cancellimitorder_test.go | 2 +- .../integration_deposit_autoswap_unit_test.go | 2 +- .../integration_deposit_doublesided_test.go | 2 +- .../keeper/integration_deposit_multi_test.go | 2 +- .../integration_deposit_singlesided_test.go | 2 +- x/dex/keeper/integration_multihopswap_test.go | 4 +- .../integration_placelimitorder_test.go | 4 +- .../keeper/integration_withdraw_multi_test.go | 2 +- x/dex/keeper/integration_withdraw_test.go | 2 +- .../keeper/integration_withdrawfilled_test.go | 2 +- .../keeper/internal/testutils/test_helpers.go | 2 +- x/dex/keeper/keeper.go | 2 +- x/dex/keeper/limit_order_expiration.go | 2 +- x/dex/keeper/limit_order_expiration_test.go | 4 +- x/dex/keeper/limit_order_tranche.go | 4 +- x/dex/keeper/limit_order_tranche_test.go | 8 +- x/dex/keeper/limit_order_tranche_user.go | 2 +- x/dex/keeper/limit_order_tranche_user_test.go | 8 +- x/dex/keeper/liquidity.go | 4 +- x/dex/keeper/liquidity_iterator.go | 2 +- x/dex/keeper/liquidity_test.go | 2 +- x/dex/keeper/migrations.go | 4 +- x/dex/keeper/msg_server.go | 2 +- x/dex/keeper/msg_server_test.go | 14 +- x/dex/keeper/multihop_swap.go | 4 +- x/dex/keeper/params.go | 2 +- x/dex/keeper/params_test.go | 6 +- x/dex/keeper/place_limit_order.go | 4 +- x/dex/keeper/pool.go | 4 +- x/dex/keeper/pool_metadata.go | 2 +- x/dex/keeper/pool_metadata_test.go | 8 +- x/dex/keeper/pool_reserves.go | 2 +- x/dex/keeper/pool_reserves_test.go | 8 +- x/dex/keeper/pool_test.go | 6 +- x/dex/keeper/tick_iterator.go | 2 +- x/dex/keeper/tick_liquidity.go | 2 +- x/dex/keeper/tick_liquidity_test.go | 6 +- x/dex/keeper/withdraw.go | 2 +- x/dex/keeper/withdraw_filled_limit_order.go | 2 +- x/dex/migrations/v3/store.go | 4 +- x/dex/migrations/v3/store_test.go | 12 +- x/dex/migrations/v4/store.go | 2 +- x/dex/migrations/v4/store_test.go | 8 +- x/dex/module.go | 6 +- x/dex/module_simulation.go | 6 +- x/dex/simulation/cancel_limit_order.go | 4 +- x/dex/simulation/deposit.go | 4 +- x/dex/simulation/multi_hop_swap.go | 4 +- x/dex/simulation/place_limit_order.go | 4 +- x/dex/simulation/withdrawl.go | 4 +- .../withdrawl_filled_limit_order.go | 4 +- x/dex/types/deposit_record.pb.go | 48 +-- x/dex/types/genesis.pb.go | 52 +-- x/dex/types/genesis_test.go | 2 +- x/dex/types/keys.go | 2 +- x/dex/types/limit_order_expiration.pb.go | 4 +- x/dex/types/limit_order_tranche.go | 4 +- x/dex/types/limit_order_tranche.pb.go | 76 ++--- x/dex/types/limit_order_tranche_key.go | 2 +- x/dex/types/limit_order_tranche_user.pb.go | 56 ++-- x/dex/types/liquidity.go | 2 +- x/dex/types/message_multi_hop_swap.go | 2 +- x/dex/types/message_place_limit_order.go | 2 +- x/dex/types/pair_id.pb.go | 4 +- x/dex/types/params.pb.go | 4 +- x/dex/types/pool.go | 4 +- x/dex/types/pool.pb.go | 6 +- x/dex/types/pool_denom_test.go | 2 +- x/dex/types/pool_liquidity.go | 2 +- x/dex/types/pool_metadata.pb.go | 6 +- x/dex/types/pool_reserves.pb.go | 64 ++-- x/dex/types/pool_reserves_key.go | 4 +- x/dex/types/pool_test.go | 2 +- x/dex/types/price.go | 4 +- x/dex/types/price_test.go | 2 +- x/dex/types/query.pb.go | 296 +++++++++--------- x/dex/types/tick_liquidity.go | 2 +- x/dex/types/tick_liquidity.pb.go | 4 +- x/dex/types/tick_liquidity_key.go | 2 +- x/dex/types/tick_liquidity_test.go | 2 +- x/dex/types/trade_pair_id.go | 2 +- x/dex/types/trade_pair_id.pb.go | 6 +- x/dex/types/tx.pb.go | 74 ++--- x/dex/types/v2/params.pb.go | 8 +- x/dex/utils/math.go | 2 +- x/dex/utils/math_test.go | 4 +- x/dynamicfees/client/cli/query.go | 2 +- x/dynamicfees/client/cli/query_params.go | 2 +- x/dynamicfees/genesis.go | 4 +- x/dynamicfees/genesis_test.go | 10 +- x/dynamicfees/keeper/grpc_query.go | 2 +- x/dynamicfees/keeper/grpc_query_params.go | 2 +- .../keeper/grpc_query_params_test.go | 4 +- x/dynamicfees/keeper/keeper.go | 2 +- x/dynamicfees/keeper/msg_server.go | 2 +- x/dynamicfees/keeper/msg_server_test.go | 4 +- x/dynamicfees/keeper/params.go | 2 +- x/dynamicfees/keeper/resolver.go | 4 +- x/dynamicfees/keeper/resolver_test.go | 8 +- x/dynamicfees/module.go | 6 +- x/dynamicfees/module_simulation.go | 6 +- x/dynamicfees/types/genesis.pb.go | 4 +- x/dynamicfees/types/params.pb.go | 4 +- x/dynamicfees/types/query.pb.go | 4 +- x/dynamicfees/types/tx.pb.go | 4 +- x/feeburner/client/cli/query.go | 2 +- x/feeburner/client/cli/query_params.go | 2 +- .../cli/query_total_burned_neutrons_amount.go | 2 +- x/feeburner/genesis.go | 4 +- x/feeburner/genesis_test.go | 10 +- x/feeburner/keeper/grpc_query.go | 2 +- x/feeburner/keeper/grpc_query_params.go | 2 +- x/feeburner/keeper/grpc_query_params_test.go | 6 +- x/feeburner/keeper/grpc_query_test.go | 4 +- x/feeburner/keeper/keeper.go | 2 +- x/feeburner/keeper/keeper_test.go | 8 +- x/feeburner/keeper/msg_server.go | 2 +- x/feeburner/keeper/msg_server_test.go | 6 +- x/feeburner/keeper/params.go | 2 +- x/feeburner/keeper/params_test.go | 6 +- x/feeburner/module.go | 6 +- x/feeburner/module_simulation.go | 6 +- x/feeburner/types/genesis.pb.go | 4 +- x/feeburner/types/genesis_test.go | 10 +- x/feeburner/types/params.go | 2 +- x/feeburner/types/params.pb.go | 6 +- x/feeburner/types/query.pb.go | 52 +-- .../types/total_burned_neutrons_amount.pb.go | 4 +- x/feeburner/types/tx.pb.go | 4 +- x/feerefunder/client/cli/query.go | 2 +- x/feerefunder/client/cli/query_params.go | 2 +- x/feerefunder/client/cli/query_test.go | 8 +- x/feerefunder/genesis.go | 4 +- x/feerefunder/genesis_test.go | 10 +- x/feerefunder/keeper/export_test.go | 2 +- x/feerefunder/keeper/grpc_query.go | 2 +- x/feerefunder/keeper/grpc_query_params.go | 2 +- .../keeper/grpc_query_params_test.go | 4 +- x/feerefunder/keeper/keeper.go | 2 +- x/feerefunder/keeper/keeper_test.go | 8 +- x/feerefunder/keeper/msg_server.go | 2 +- x/feerefunder/keeper/msg_server_test.go | 8 +- x/feerefunder/keeper/params.go | 2 +- x/feerefunder/keeper/params_test.go | 4 +- x/feerefunder/module.go | 6 +- x/feerefunder/types/fee.pb.go | 48 +-- x/feerefunder/types/genesis.pb.go | 38 +-- x/feerefunder/types/genesis_test.go | 6 +- x/feerefunder/types/params.go | 2 +- x/feerefunder/types/params.pb.go | 4 +- x/feerefunder/types/query.pb.go | 52 +-- x/feerefunder/types/tx.pb.go | 4 +- x/globalfee/alias.go | 2 +- x/globalfee/ante/antetest/fee_test.go | 4 +- x/globalfee/ante/antetest/fee_test_setup.go | 12 +- x/globalfee/ante/fee.go | 6 +- x/globalfee/ante/fee_utils.go | 2 +- x/globalfee/client/cli/query.go | 2 +- x/globalfee/genesis_test.go | 6 +- x/globalfee/keeper/grpc_query.go | 2 +- x/globalfee/keeper/grpc_query_params.go | 2 +- x/globalfee/keeper/grpc_query_params_test.go | 4 +- x/globalfee/keeper/keeper.go | 2 +- x/globalfee/keeper/migrations.go | 4 +- x/globalfee/keeper/msg_server.go | 2 +- x/globalfee/migrations/v2/migration.go | 2 +- .../migrations/v2/v2_test/migration_test.go | 4 +- x/globalfee/migrations/v3/migration.go | 2 +- .../migrations/v3/v3_test/migration_test.go | 4 +- x/globalfee/module.go | 6 +- x/globalfee/types/genesis.pb.go | 4 +- x/globalfee/types/params.pb.go | 46 +-- x/globalfee/types/query.pb.go | 4 +- x/globalfee/types/tx.pb.go | 6 +- x/ibc-hooks/client/cli/query.go | 4 +- x/ibc-hooks/ibc_middleware_test.go | 8 +- x/ibc-hooks/ics4_middleware.go | 2 +- x/ibc-hooks/sdkmodule.go | 4 +- x/ibc-hooks/testutils/testing_hooks.go | 2 +- x/ibc-hooks/utils/utils.go | 2 +- x/ibc-hooks/wasm_hook.go | 4 +- x/ibc-rate-limit/target/.rustc_info.json | 1 + x/interchainqueries/client/cli/query.go | 2 +- .../client/cli/query_params.go | 2 +- x/interchainqueries/client/cli/tx.go | 2 +- x/interchainqueries/genesis.go | 4 +- x/interchainqueries/genesis_test.go | 8 +- x/interchainqueries/keeper/grpc_query.go | 2 +- .../keeper/grpc_query_params.go | 2 +- .../keeper/grpc_query_params_test.go | 4 +- x/interchainqueries/keeper/grpc_query_test.go | 4 +- x/interchainqueries/keeper/keeper.go | 2 +- x/interchainqueries/keeper/keeper_test.go | 8 +- x/interchainqueries/keeper/migrations.go | 2 +- x/interchainqueries/keeper/msg_server.go | 2 +- x/interchainqueries/keeper/msg_server_test.go | 8 +- x/interchainqueries/keeper/params.go | 2 +- x/interchainqueries/keeper/params_test.go | 4 +- .../keeper/process_block_results.go | 2 +- .../keeper/process_block_results_test.go | 10 +- .../migrations/v3/migration.go | 2 +- .../migrations/v3/migration_test.go | 6 +- x/interchainqueries/module.go | 6 +- x/interchainqueries/module_simulation.go | 6 +- x/interchainqueries/types/genesis.pb.go | 76 ++--- x/interchainqueries/types/genesis_test.go | 2 +- x/interchainqueries/types/params.go | 2 +- x/interchainqueries/types/params.pb.go | 50 +-- x/interchainqueries/types/query.pb.go | 88 +++--- x/interchainqueries/types/tx.pb.go | 149 ++++----- x/interchainqueries/types/tx_test.go | 2 +- x/interchaintxs/client/cli/query.go | 2 +- .../client/cli/query_interchainaccounts.go | 2 +- x/interchaintxs/client/cli/query_params.go | 2 +- x/interchaintxs/client/cli/tx.go | 2 +- x/interchaintxs/genesis.go | 4 +- x/interchaintxs/genesis_test.go | 8 +- x/interchaintxs/ibc_module.go | 2 +- x/interchaintxs/keeper/grpc_query.go | 2 +- .../keeper/grpc_query_interchainaccount.go | 2 +- .../grpc_query_interchainaccount_test.go | 8 +- x/interchaintxs/keeper/grpc_query_params.go | 2 +- .../keeper/grpc_query_params_test.go | 4 +- x/interchaintxs/keeper/ibc_handlers.go | 8 +- x/interchaintxs/keeper/ibc_handlers_test.go | 12 +- x/interchaintxs/keeper/keeper.go | 2 +- x/interchaintxs/keeper/msg_server.go | 4 +- x/interchaintxs/keeper/msg_server_test.go | 14 +- x/interchaintxs/keeper/params.go | 2 +- x/interchaintxs/keeper/params_test.go | 4 +- x/interchaintxs/module.go | 6 +- x/interchaintxs/module_simulation.go | 4 +- x/interchaintxs/types/expected_keepers.go | 2 +- x/interchaintxs/types/genesis.pb.go | 4 +- x/interchaintxs/types/genesis_test.go | 2 +- x/interchaintxs/types/params.go | 2 +- x/interchaintxs/types/params.pb.go | 4 +- x/interchaintxs/types/query.pb.go | 4 +- x/interchaintxs/types/tx.pb.go | 6 +- x/interchaintxs/types/tx_test.go | 2 +- x/interchaintxs/types/types_test.go | 4 +- x/tokenfactory/client/cli/query.go | 2 +- x/tokenfactory/client/cli/tx.go | 2 +- x/tokenfactory/keeper/admins.go | 2 +- x/tokenfactory/keeper/admins_test.go | 4 +- x/tokenfactory/keeper/bankactions.go | 2 +- x/tokenfactory/keeper/before_send.go | 2 +- x/tokenfactory/keeper/before_send_test.go | 2 +- x/tokenfactory/keeper/createdenom.go | 2 +- x/tokenfactory/keeper/createdenom_test.go | 2 +- x/tokenfactory/keeper/genesis.go | 2 +- x/tokenfactory/keeper/genesis_test.go | 2 +- x/tokenfactory/keeper/grpc_query.go | 2 +- x/tokenfactory/keeper/keeper.go | 2 +- x/tokenfactory/keeper/keeper_test.go | 8 +- x/tokenfactory/keeper/migrations.go | 2 +- x/tokenfactory/keeper/msg_server.go | 2 +- x/tokenfactory/keeper/msg_server_test.go | 10 +- x/tokenfactory/keeper/params.go | 2 +- x/tokenfactory/migrations/v2/store.go | 4 +- x/tokenfactory/migrations/v2/store_test.go | 8 +- x/tokenfactory/module.go | 6 +- x/tokenfactory/types/authorityMetadata.pb.go | 4 +- x/tokenfactory/types/denoms_test.go | 4 +- x/tokenfactory/types/genesis.pb.go | 48 +-- x/tokenfactory/types/genesis_test.go | 4 +- x/tokenfactory/types/params.pb.go | 4 +- x/tokenfactory/types/query.pb.go | 88 +++--- x/tokenfactory/types/tx.pb.go | 132 ++++---- x/tokenfactory/types/v1beta1/params.pb.go | 46 +-- x/transfer/ibc_handlers.go | 6 +- x/transfer/ibc_handlers_test.go | 14 +- x/transfer/keeper/keeper.go | 4 +- x/transfer/keeper/keeper_test.go | 12 +- x/transfer/module.go | 4 +- x/transfer/types/expected_keepers.go | 2 +- x/transfer/types/query.pb.go | 49 +-- x/transfer/types/tx.go | 2 +- x/transfer/types/tx.pb.go | 90 +++--- 508 files changed, 1957 insertions(+), 2192 deletions(-) create mode 100644 x/ibc-rate-limit/target/.rustc_info.json diff --git a/app/ante_handler.go b/app/ante_handler.go index a852c1d30..07a356968 100644 --- a/app/ante_handler.go +++ b/app/ante_handler.go @@ -16,8 +16,8 @@ import ( ibcconsumerkeeper "github.com/cosmos/interchain-security/v5/x/ccv/consumer/keeper" feemarketante "github.com/skip-mev/feemarket/x/feemarket/ante" - globalfeeante "github.com/neutron-org/neutron/v4/x/globalfee/ante" - globalfeekeeper "github.com/neutron-org/neutron/v4/x/globalfee/keeper" + globalfeeante "github.com/neutron-org/neutron/v5/x/globalfee/ante" + globalfeekeeper "github.com/neutron-org/neutron/v5/x/globalfee/keeper" ) // HandlerOptions extend the SDK's AnteHandler options by requiring the IBC diff --git a/app/app.go b/app/app.go index 0d105a861..bc9d6199a 100644 --- a/app/app.go +++ b/app/app.go @@ -10,8 +10,8 @@ import ( "path/filepath" "time" - "github.com/neutron-org/neutron/v4/x/dynamicfees" - dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + "github.com/neutron-org/neutron/v5/x/dynamicfees" + dynamicfeestypes "github.com/neutron-org/neutron/v5/x/dynamicfees/types" "github.com/skip-mev/feemarket/x/feemarket" feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper" @@ -21,7 +21,7 @@ import ( "cosmossdk.io/core/appmodule" authcodec "github.com/cosmos/cosmos-sdk/x/auth/codec" - appconfig "github.com/neutron-org/neutron/v4/app/config" + appconfig "github.com/neutron-org/neutron/v5/app/config" "github.com/skip-mev/slinky/abci/strategies/aggregator" "github.com/skip-mev/slinky/x/oracle" @@ -36,9 +36,9 @@ import ( oracleclient "github.com/skip-mev/slinky/service/clients/oracle" servicemetrics "github.com/skip-mev/slinky/service/metrics" - v401 "github.com/neutron-org/neutron/v4/app/upgrades/v4.0.1" - "github.com/neutron-org/neutron/v4/x/globalfee" - globalfeetypes "github.com/neutron-org/neutron/v4/x/globalfee/types" + v401 "github.com/neutron-org/neutron/v5/app/upgrades/v4.0.1" + "github.com/neutron-org/neutron/v5/x/globalfee" + globalfeetypes "github.com/neutron-org/neutron/v5/x/globalfee/types" "cosmossdk.io/log" db "github.com/cosmos/cosmos-db" @@ -56,11 +56,11 @@ import ( genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" tendermint "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" - "github.com/neutron-org/neutron/v4/docs" + "github.com/neutron-org/neutron/v5/docs" - "github.com/neutron-org/neutron/v4/app/upgrades" + "github.com/neutron-org/neutron/v5/app/upgrades" - "github.com/neutron-org/neutron/v4/x/cron" + "github.com/neutron-org/neutron/v5/x/cron" "cosmossdk.io/x/evidence" evidencekeeper "cosmossdk.io/x/evidence/keeper" @@ -140,12 +140,12 @@ import ( govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" - cronkeeper "github.com/neutron-org/neutron/v4/x/cron/keeper" - crontypes "github.com/neutron-org/neutron/v4/x/cron/types" + cronkeeper "github.com/neutron-org/neutron/v5/x/cron/keeper" + crontypes "github.com/neutron-org/neutron/v5/x/cron/types" - "github.com/neutron-org/neutron/v4/x/tokenfactory" - tokenfactorykeeper "github.com/neutron-org/neutron/v4/x/tokenfactory/keeper" - tokenfactorytypes "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory" + tokenfactorykeeper "github.com/neutron-org/neutron/v5/x/tokenfactory/keeper" + tokenfactorytypes "github.com/neutron-org/neutron/v5/x/tokenfactory/types" "github.com/cosmos/admin-module/v2/x/adminmodule" adminmodulecli "github.com/cosmos/admin-module/v2/x/adminmodule/client/cli" @@ -154,29 +154,29 @@ import ( govclient "github.com/cosmos/cosmos-sdk/x/gov/client" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - appparams "github.com/neutron-org/neutron/v4/app/params" - "github.com/neutron-org/neutron/v4/wasmbinding" - "github.com/neutron-org/neutron/v4/x/contractmanager" - contractmanagermodulekeeper "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" - contractmanagermoduletypes "github.com/neutron-org/neutron/v4/x/contractmanager/types" - dynamicfeeskeeper "github.com/neutron-org/neutron/v4/x/dynamicfees/keeper" - "github.com/neutron-org/neutron/v4/x/feeburner" - feeburnerkeeper "github.com/neutron-org/neutron/v4/x/feeburner/keeper" - feeburnertypes "github.com/neutron-org/neutron/v4/x/feeburner/types" - "github.com/neutron-org/neutron/v4/x/feerefunder" - feekeeper "github.com/neutron-org/neutron/v4/x/feerefunder/keeper" - ibchooks "github.com/neutron-org/neutron/v4/x/ibc-hooks" - ibchookstypes "github.com/neutron-org/neutron/v4/x/ibc-hooks/types" - "github.com/neutron-org/neutron/v4/x/interchainqueries" - interchainqueriesmodulekeeper "github.com/neutron-org/neutron/v4/x/interchainqueries/keeper" - interchainqueriesmoduletypes "github.com/neutron-org/neutron/v4/x/interchainqueries/types" - "github.com/neutron-org/neutron/v4/x/interchaintxs" - interchaintxskeeper "github.com/neutron-org/neutron/v4/x/interchaintxs/keeper" - interchaintxstypes "github.com/neutron-org/neutron/v4/x/interchaintxs/types" - transferSudo "github.com/neutron-org/neutron/v4/x/transfer" - wrapkeeper "github.com/neutron-org/neutron/v4/x/transfer/keeper" - - feetypes "github.com/neutron-org/neutron/v4/x/feerefunder/types" + appparams "github.com/neutron-org/neutron/v5/app/params" + "github.com/neutron-org/neutron/v5/wasmbinding" + "github.com/neutron-org/neutron/v5/x/contractmanager" + contractmanagermodulekeeper "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" + contractmanagermoduletypes "github.com/neutron-org/neutron/v5/x/contractmanager/types" + dynamicfeeskeeper "github.com/neutron-org/neutron/v5/x/dynamicfees/keeper" + "github.com/neutron-org/neutron/v5/x/feeburner" + feeburnerkeeper "github.com/neutron-org/neutron/v5/x/feeburner/keeper" + feeburnertypes "github.com/neutron-org/neutron/v5/x/feeburner/types" + "github.com/neutron-org/neutron/v5/x/feerefunder" + feekeeper "github.com/neutron-org/neutron/v5/x/feerefunder/keeper" + ibchooks "github.com/neutron-org/neutron/v5/x/ibc-hooks" + ibchookstypes "github.com/neutron-org/neutron/v5/x/ibc-hooks/types" + "github.com/neutron-org/neutron/v5/x/interchainqueries" + interchainqueriesmodulekeeper "github.com/neutron-org/neutron/v5/x/interchainqueries/keeper" + interchainqueriesmoduletypes "github.com/neutron-org/neutron/v5/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs" + interchaintxskeeper "github.com/neutron-org/neutron/v5/x/interchaintxs/keeper" + interchaintxstypes "github.com/neutron-org/neutron/v5/x/interchaintxs/types" + transferSudo "github.com/neutron-org/neutron/v5/x/transfer" + wrapkeeper "github.com/neutron-org/neutron/v5/x/transfer/keeper" + + feetypes "github.com/neutron-org/neutron/v5/x/feerefunder/types" ccvconsumer "github.com/cosmos/interchain-security/v5/x/ccv/consumer" ccvconsumerkeeper "github.com/cosmos/interchain-security/v5/x/ccv/consumer/keeper" @@ -189,12 +189,12 @@ import ( pfmkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8/packetforward/keeper" pfmtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8/packetforward/types" - "github.com/neutron-org/neutron/v4/x/dex" - dexkeeper "github.com/neutron-org/neutron/v4/x/dex/keeper" - dextypes "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex" + dexkeeper "github.com/neutron-org/neutron/v5/x/dex/keeper" + dextypes "github.com/neutron-org/neutron/v5/x/dex/types" - globalfeekeeper "github.com/neutron-org/neutron/v4/x/globalfee/keeper" - gmpmiddleware "github.com/neutron-org/neutron/v4/x/gmp" + globalfeekeeper "github.com/neutron-org/neutron/v5/x/globalfee/keeper" + gmpmiddleware "github.com/neutron-org/neutron/v5/x/gmp" // Block-sdk imports blocksdkabci "github.com/skip-mev/block-sdk/v2/abci" diff --git a/app/encoding.go b/app/encoding.go index 7ff2d3085..d102f4380 100644 --- a/app/encoding.go +++ b/app/encoding.go @@ -3,7 +3,7 @@ package app import ( "github.com/cosmos/cosmos-sdk/std" - "github.com/neutron-org/neutron/v4/app/params" + "github.com/neutron-org/neutron/v5/app/params" ) // MakeEncodingConfig creates an EncodingConfig for testing diff --git a/app/proposals_allowlisting.go b/app/proposals_allowlisting.go index 9b360b0ea..19402c0a8 100644 --- a/app/proposals_allowlisting.go +++ b/app/proposals_allowlisting.go @@ -19,17 +19,17 @@ import ( feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types" - dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types" - globalfeetypes "github.com/neutron-org/neutron/v4/x/globalfee/types" + dynamicfeestypes "github.com/neutron-org/neutron/v5/x/dynamicfees/types" + globalfeetypes "github.com/neutron-org/neutron/v5/x/globalfee/types" - contractmanagertypes "github.com/neutron-org/neutron/v4/x/contractmanager/types" - crontypes "github.com/neutron-org/neutron/v4/x/cron/types" - dextypes "github.com/neutron-org/neutron/v4/x/dex/types" - feeburnertypes "github.com/neutron-org/neutron/v4/x/feeburner/types" - feerefundertypes "github.com/neutron-org/neutron/v4/x/feerefunder/types" - interchainqueriestypes "github.com/neutron-org/neutron/v4/x/interchainqueries/types" - interchaintxstypes "github.com/neutron-org/neutron/v4/x/interchaintxs/types" - tokenfactorytypes "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + contractmanagertypes "github.com/neutron-org/neutron/v5/x/contractmanager/types" + crontypes "github.com/neutron-org/neutron/v5/x/cron/types" + dextypes "github.com/neutron-org/neutron/v5/x/dex/types" + feeburnertypes "github.com/neutron-org/neutron/v5/x/feeburner/types" + feerefundertypes "github.com/neutron-org/neutron/v5/x/feerefunder/types" + interchainqueriestypes "github.com/neutron-org/neutron/v5/x/interchainqueries/types" + interchaintxstypes "github.com/neutron-org/neutron/v5/x/interchaintxs/types" + tokenfactorytypes "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) func IsConsumerProposalAllowlisted(content govtypes.Content) bool { diff --git a/app/proposals_allowlisting_test.go b/app/proposals_allowlisting_test.go index e7fc0ad5f..806d7badd 100644 --- a/app/proposals_allowlisting_test.go +++ b/app/proposals_allowlisting_test.go @@ -3,15 +3,15 @@ package app_test import ( "testing" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" cmttypes "github.com/cometbft/cometbft/types" ibctesting "github.com/cosmos/ibc-go/v8/testing" icssimapp "github.com/cosmos/interchain-security/v5/testutil/ibc_testing" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/app" - "github.com/neutron-org/neutron/v4/testutil" + "github.com/neutron-org/neutron/v5/app" + "github.com/neutron-org/neutron/v5/testutil" ) func TestConsumerWhitelistingKeys(t *testing.T) { diff --git a/app/upgrades/types.go b/app/upgrades/types.go index d94491025..293f71c8e 100644 --- a/app/upgrades/types.go +++ b/app/upgrades/types.go @@ -17,13 +17,13 @@ import ( feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper" marketmapkeeper "github.com/skip-mev/slinky/x/marketmap/keeper" - dynamicfeeskeeper "github.com/neutron-org/neutron/v4/x/dynamicfees/keeper" + dynamicfeeskeeper "github.com/neutron-org/neutron/v5/x/dynamicfees/keeper" - contractmanagerkeeper "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" - cronkeeper "github.com/neutron-org/neutron/v4/x/cron/keeper" - feeburnerkeeper "github.com/neutron-org/neutron/v4/x/feeburner/keeper" - icqkeeper "github.com/neutron-org/neutron/v4/x/interchainqueries/keeper" - tokenfactorykeeper "github.com/neutron-org/neutron/v4/x/tokenfactory/keeper" + contractmanagerkeeper "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" + cronkeeper "github.com/neutron-org/neutron/v5/x/cron/keeper" + feeburnerkeeper "github.com/neutron-org/neutron/v5/x/feeburner/keeper" + icqkeeper "github.com/neutron-org/neutron/v5/x/interchainqueries/keeper" + tokenfactorykeeper "github.com/neutron-org/neutron/v5/x/tokenfactory/keeper" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" transferkeeper "github.com/cosmos/ibc-go/v8/modules/apps/transfer/keeper" diff --git a/app/upgrades/v4.0.1/constants.go b/app/upgrades/v4.0.1/constants.go index 6e78acb3b..3e774e6aa 100644 --- a/app/upgrades/v4.0.1/constants.go +++ b/app/upgrades/v4.0.1/constants.go @@ -6,21 +6,15 @@ import ( marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types" oracletypes "github.com/skip-mev/slinky/x/oracle/types" - dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + dynamicfeestypes "github.com/neutron-org/neutron/v5/x/dynamicfees/types" - "github.com/neutron-org/neutron/v4/app/upgrades" - globalfeetypes "github.com/neutron-org/neutron/v4/x/globalfee/types" + "github.com/neutron-org/neutron/v5/app/upgrades" + globalfeetypes "github.com/neutron-org/neutron/v5/x/globalfee/types" ) const ( // UpgradeName defines the on-chain upgrade name. - UpgradeName = "v4.0.1" - - // MarketMapAuthorityMultisig defines the address of a market-map authority governed by a - // multi-sig of contributors. - MarketMapAuthorityMultisig = "neutron1ua63s43u2p4v38pxhcxmps0tj2gudyw2hfeetz" - - DecimalsAdjustment = 1_000_000_000_000 + UpgradeName = "v5.0.0" ) var Upgrade = upgrades.Upgrade{ diff --git a/app/upgrades/v4.0.1/upgrades.go b/app/upgrades/v4.0.1/upgrades.go index a59168406..8baddc48f 100644 --- a/app/upgrades/v4.0.1/upgrades.go +++ b/app/upgrades/v4.0.1/upgrades.go @@ -3,257 +3,25 @@ package v400 import ( "context" "fmt" - "sort" - - "github.com/skip-mev/slinky/cmd/constants/marketmaps" - - appparams "github.com/neutron-org/neutron/v4/app/params" - - "cosmossdk.io/errors" - "cosmossdk.io/math" - - feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper" - feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" - - dynamicfeeskeeper "github.com/neutron-org/neutron/v4/x/dynamicfees/keeper" - dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types" upgradetypes "cosmossdk.io/x/upgrade/types" - comettypes "github.com/cometbft/cometbft/proto/tendermint/types" - adminmoduletypes "github.com/cosmos/admin-module/v2/x/adminmodule/types" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - consensuskeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" - "github.com/cosmos/cosmos-sdk/x/consensus/types" - marketmapkeeper "github.com/skip-mev/slinky/x/marketmap/keeper" - marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types" - - "github.com/neutron-org/neutron/v4/app/upgrades" + "github.com/neutron-org/neutron/v5/app/upgrades" ) func CreateUpgradeHandler( - mm *module.Manager, - configurator module.Configurator, - keepers *upgrades.UpgradeKeepers, + _ *module.Manager, + _ module.Configurator, + _ *upgrades.UpgradeKeepers, _ upgrades.StoreKeys, _ codec.Codec, ) upgradetypes.UpgradeHandler { return func(c context.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { ctx := sdk.UnwrapSDKContext(c) - ctx.Logger().Info("Starting module migrations...") - vm, err := mm.RunMigrations(ctx, configurator, vm) - if err != nil { - return vm, err - } - - ctx.Logger().Info("Setting consensus params...") - err = enableVoteExtensions(ctx, keepers.ConsensusKeeper) - if err != nil { - return nil, err - } - - ctx.Logger().Info("Setting marketmap params...") - err = setMarketMapParams(ctx, keepers.MarketmapKeeper) - if err != nil { - return nil, err - } - - ctx.Logger().Info("Setting dynamicfees/feemarket params...") - err = setFeeMarketParams(ctx, keepers.FeeMarketKeeper) - if err != nil { - return nil, err - } - - err = setDynamicFeesParams(ctx, keepers.DynamicfeesKeeper) - if err != nil { - return nil, err - } - - ctx.Logger().Info("Setting marketmap and oracle state...") - err = setMarketState(ctx, keepers.MarketmapKeeper) - if err != nil { - return nil, err - } - ctx.Logger().Info(fmt.Sprintf("Migration {%s} applied", UpgradeName)) return vm, nil } } - -func setMarketMapParams(ctx sdk.Context, marketmapKeeper *marketmapkeeper.Keeper) error { - marketmapParams := marketmaptypes.Params{ - MarketAuthorities: []string{authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), MarketMapAuthorityMultisig}, - Admin: authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), - } - return marketmapKeeper.SetParams(ctx, marketmapParams) -} - -// NtrnPrices describes prices of any token in NTRN for dynamic fee resolver -// there are several 18decimals coins, we need to adjust all the coins with the same base (6 decimals) prior to do any math -// by dividing by 10^12 -var NtrnPrices = sdk.NewDecCoins( - // Token,Denom,TWAP30D (USD),Price in NTRN (30d TWAP of DENOM / 30d TWAP of NTRN),Price + 30% premium - // wstETH,factory/neutron1ug740qrkquxzrk2hh29qrlx3sktkfml3je7juusc2te7xmvsscns0n2wry/wstETH,3616.34,5779.670768739013,7513.571999360713 - // 18 decimals coin - sdk.NewDecCoinFromDec("factory/neutron1ug740qrkquxzrk2hh29qrlx3sktkfml3je7juusc2te7xmvsscns0n2wry/wstETH", math.LegacyMustNewDecFromStr("7513.571999360713").QuoInt64(DecimalsAdjustment)), - - // stATOM,ibc/B7864B03E1B9FD4F049243E92ABD691586F682137037A9F3FCA5222815620B3C,10.268,16.410420329231,21.333546427991 - sdk.NewDecCoinFromDec("ibc/B7864B03E1B9FD4F049243E92ABD691586F682137037A9F3FCA5222815620B3C", math.LegacyMustNewDecFromStr("21.333546427991")), - - // stTIA,ibc/6569E05DEE32B339D9286A52BE33DFCEFC97267F23EF9CFDE0C055140967A9A5,8.52,13.61674924085,17.70177401312 - sdk.NewDecCoinFromDec("ibc/6569E05DEE32B339D9286A52BE33DFCEFC97267F23EF9CFDE0C055140967A9A5", math.LegacyMustNewDecFromStr("17.70177401312")), - - // stkATOM,ibc/3649CE0C8A2C79048D8C6F31FF18FA69C9BC7EB193512E0BD03B733011290445,9.656,15.432315806297,20.062010548187 - sdk.NewDecCoinFromDec("ibc/3649CE0C8A2C79048D8C6F31FF18FA69C9BC7EB193512E0BD03B733011290445", math.LegacyMustNewDecFromStr("20.062010548187")), - - // USDC.noble,ibc/B559A80D62249C8AA07A380E2A2BEA6E5CA9A6F079C912C3A9E9B494105E4F81,1,1.598210004795,2.077673006235 - sdk.NewDecCoinFromDec("ibc/B559A80D62249C8AA07A380E2A2BEA6E5CA9A6F079C912C3A9E9B494105E4F81", math.LegacyMustNewDecFromStr("2.077673006235")), - - // USDC.axl,ibc/F082B65C88E4B6D5EF1DB243CDA1D331D002759E938A0F5CD3FFDC5D53B3E349,1,1.598210004795,2.077673006235 - sdk.NewDecCoinFromDec("ibc/F082B65C88E4B6D5EF1DB243CDA1D331D002759E938A0F5CD3FFDC5D53B3E349", math.LegacyMustNewDecFromStr("2.077673006235")), - - // USDT,ibc/57503D7852EF4E1899FE6D71C5E81D7C839F76580F86F21E39348FC2BC9D7CE2,1,1.598210004795,2.077673006235 - sdk.NewDecCoinFromDec("ibc/57503D7852EF4E1899FE6D71C5E81D7C839F76580F86F21E39348FC2BC9D7CE2", math.LegacyMustNewDecFromStr("2.077673006235")), - - // http://astro.cw/,ibc/5751B8BCDA688FD0A8EC0B292EEF1CDEAB4B766B63EC632778B196D317C40C3A,0.0693,0.110755953332,0.143982739322 - sdk.NewDecCoinFromDec("ibc/5751B8BCDA688FD0A8EC0B292EEF1CDEAB4B766B63EC632778B196D317C40C3A", math.LegacyMustNewDecFromStr("0.143982739322")), - - // ASTRO,factory/neutron1ffus553eet978k024lmssw0czsxwr97mggyv85lpcsdkft8v9ufsz3sa07/astro,0.0693,0.110755953332,0.143982739322 - sdk.NewDecCoinFromDec("factory/neutron1ffus553eet978k024lmssw0czsxwr97mggyv85lpcsdkft8v9ufsz3sa07/astro", math.LegacyMustNewDecFromStr("0.143982739322")), - - // MARS,ibc/9598CDEB7C6DB7FC21E746C8E0250B30CD5154F39CA111A9D4948A4362F638BD,0.0652,0.104203292313,0.135464280003 - sdk.NewDecCoinFromDec("ibc/9598CDEB7C6DB7FC21E746C8E0250B30CD5154F39CA111A9D4948A4362F638BD", math.LegacyMustNewDecFromStr("0.135464280003")), - - // APOLLO,factory/neutron154gg0wtm2v4h9ur8xg32ep64e8ef0g5twlsgvfeajqwghdryvyqsqhgk8e/APOLLO,0.06079,0.097155186191,0.126301742051 - sdk.NewDecCoinFromDec("factory/neutron154gg0wtm2v4h9ur8xg32ep64e8ef0g5twlsgvfeajqwghdryvyqsqhgk8e/APOLLO", math.LegacyMustNewDecFromStr("0.126301742051")), - - // TIA,ibc/773B4D0A3CD667B2275D5A4A7A2F0909C0BA0F4059C0B9181E680DDF4965DCC7,8.52,13.61674924085,17.70177401312 - sdk.NewDecCoinFromDec("ibc/773B4D0A3CD667B2275D5A4A7A2F0909C0BA0F4059C0B9181E680DDF4965DCC7", math.LegacyMustNewDecFromStr("17.70177401312")), - - // ATOM,ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9,7.559,12.080869426243,15.705130254103 - sdk.NewDecCoinFromDec("ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", math.LegacyMustNewDecFromStr("15.705130254103")), - - // axlWETH,ibc/A585C2D15DCD3B010849B453A2CFCB5E213208A5AB665691792684C26274304D,3616.34,5779.670768739013,7513.571999360713 - // 18 decimals coin - sdk.NewDecCoinFromDec("ibc/A585C2D15DCD3B010849B453A2CFCB5E213208A5AB665691792684C26274304D", math.LegacyMustNewDecFromStr("7513.571999360713").QuoInt64(DecimalsAdjustment)), - - // OSMO,ibc/376222D6D9DAE23092E29740E56B758580935A6D77C24C2ABD57A6A78A1F3955,0.6699,1.070640882212,1.391833146872 - sdk.NewDecCoinFromDec("ibc/376222D6D9DAE23092E29740E56B758580935A6D77C24C2ABD57A6A78A1F3955", math.LegacyMustNewDecFromStr("1.391833146872")), - - // DYM,ibc/4A6A46D4263F2ED3DCE9CF866FE15E6903FB5E12D87EB8BDC1B6B1A1E2D397B4,2.329,3.722231101167,4.838900431527 - // 18 decimals coin - sdk.NewDecCoinFromDec("ibc/4A6A46D4263F2ED3DCE9CF866FE15E6903FB5E12D87EB8BDC1B6B1A1E2D397B4", math.LegacyMustNewDecFromStr("4.838900431527").QuoInt64(DecimalsAdjustment)), - - // DYDX,ibc/2CB87BCE0937B1D1DFCEE79BE4501AAF3C265E923509AEAC410AD85D27F35130,1.71,2.732939108199,3.552820840659 - // 18 decimals coin - sdk.NewDecCoinFromDec("ibc/2CB87BCE0937B1D1DFCEE79BE4501AAF3C265E923509AEAC410AD85D27F35130", math.LegacyMustNewDecFromStr("3.552820840659").QuoInt64(DecimalsAdjustment)), - - // KUJI,ibc/1053E271314D36FECBC915B51474F8B3962597CE88FF3E4A74795B0E3F367A8B,1.22,1.949816205849,2.534761067589 - sdk.NewDecCoinFromDec("ibc/1053E271314D36FECBC915B51474F8B3962597CE88FF3E4A74795B0E3F367A8B", math.LegacyMustNewDecFromStr("2.534761067589")), - - // STARS,ibc/A139C0E0B5E87CBA8EAEEB12B9BEE13AC7C814CFBBFA87BBCADD67E31003466C,0.0138,0.022055298066,0.028671887496 - sdk.NewDecCoinFromDec("ibc/A139C0E0B5E87CBA8EAEEB12B9BEE13AC7C814CFBBFA87BBCADD67E31003466C", math.LegacyMustNewDecFromStr("0.028671887496")), - - // AXL,ibc/C0E66D1C81D8AAF0E6896E05190FDFBC222367148F86AC3EA679C28327A763CD,0.802,1.281764423845,1.666293750985 - sdk.NewDecCoinFromDec("ibc/C0E66D1C81D8AAF0E6896E05190FDFBC222367148F86AC3EA679C28327A763CD", math.LegacyMustNewDecFromStr("1.666293750985")), - - // STRD,ibc/3552CECB7BCE1891DB6070D37EC6E954C972B1400141308FCD85FD148BD06DE5,1.542,2.464439827393,3.203771775613 - sdk.NewDecCoinFromDec("ibc/3552CECB7BCE1891DB6070D37EC6E954C972B1400141308FCD85FD148BD06DE5", math.LegacyMustNewDecFromStr("3.203771775613")), -) - -func setDynamicFeesParams(ctx sdk.Context, dfKeeper *dynamicfeeskeeper.Keeper) error { - dfParams := dynamicfeestypes.Params{ - NtrnPrices: NtrnPrices, - } - err := dfKeeper.SetParams(ctx, dfParams) - if err != nil { - return errors.Wrap(err, "failed to set dynamic fees params") - } - - return nil -} - -func setFeeMarketParams(ctx sdk.Context, feemarketKeeper *feemarketkeeper.Keeper) error { - feemarketParams := feemarkettypes.Params{ - Alpha: math.LegacyZeroDec(), - Beta: math.LegacyZeroDec(), - Delta: math.LegacyZeroDec(), - MinBaseGasPrice: math.LegacyMustNewDecFromStr("0.0053"), - MinLearningRate: math.LegacyMustNewDecFromStr("0.08"), - MaxLearningRate: math.LegacyMustNewDecFromStr("0.08"), - MaxBlockUtilization: 30_000_000, - Window: 1, - FeeDenom: appparams.DefaultDenom, - Enabled: true, - DistributeFees: true, - } - feemarketState := feemarkettypes.NewState(feemarketParams.Window, feemarketParams.MinBaseGasPrice, feemarketParams.MinLearningRate) - err := feemarketKeeper.SetParams(ctx, feemarketParams) - if err != nil { - return errors.Wrap(err, "failed to set feemarket params") - } - err = feemarketKeeper.SetState(ctx, feemarketState) - if err != nil { - return errors.Wrap(err, "failed to set feemarket state") - } - - return nil -} - -func setMarketState(ctx sdk.Context, mmKeeper *marketmapkeeper.Keeper) error { - markets := marketMapToDeterministicallyOrderedMarkets(marketmaps.CoreMarketMap) - for _, market := range markets { - if err := mmKeeper.CreateMarket(ctx, market); err != nil { - return err - } - - if err := mmKeeper.Hooks().AfterMarketCreated(ctx, market); err != nil { - return err - } - - } - return nil -} - -func marketMapToDeterministicallyOrderedMarkets(mm marketmaptypes.MarketMap) []marketmaptypes.Market { - markets := make([]marketmaptypes.Market, 0, len(mm.Markets)) - for _, market := range mm.Markets { - markets = append(markets, market) - } - - // order the markets alphabetically by their ticker.String() - sort.Slice(markets, func(i, j int) bool { - return markets[i].Ticker.String() < markets[j].Ticker.String() - }) - - return markets -} - -func enableVoteExtensions(ctx sdk.Context, consensusKeeper *consensuskeeper.Keeper) error { - oldParams, err := consensusKeeper.Params(ctx, &types.QueryParamsRequest{}) - if err != nil { - return err - } - - oldParams.Params.Version = &comettypes.VersionParams{App: 0} - if err := consensusKeeper.ParamsStore.Set(ctx, *oldParams.Params); err != nil { - return err - } - - // we need to enable VoteExtensions for Slinky - oldParams.Params.Abci = &comettypes.ABCIParams{VoteExtensionsEnableHeight: ctx.BlockHeight() + 4} - - updateParamsMsg := types.MsgUpdateParams{ - Authority: authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), - Block: oldParams.Params.Block, - Evidence: oldParams.Params.Evidence, - Validator: oldParams.Params.Validator, - Abci: oldParams.Params.Abci, - } - - _, err = consensusKeeper.UpdateParams(ctx, &updateParamsMsg) - return err -} diff --git a/app/upgrades/v4.0.1/upgrades_test.go b/app/upgrades/v4.0.1/upgrades_test.go index d05edeeb0..e52f4e299 100644 --- a/app/upgrades/v4.0.1/upgrades_test.go +++ b/app/upgrades/v4.0.1/upgrades_test.go @@ -16,8 +16,8 @@ import ( "github.com/stretchr/testify/suite" - v400 "github.com/neutron-org/neutron/v4/app/upgrades/v4.0.1" - "github.com/neutron-org/neutron/v4/testutil" + v400 "github.com/neutron-org/neutron/v5/app/upgrades/v4.0.1" + "github.com/neutron-org/neutron/v5/testutil" ) type UpgradeTestSuite struct { diff --git a/cmd/neutrond/consumer.go b/cmd/neutrond/consumer.go index 6ef10a887..469658269 100644 --- a/cmd/neutrond/consumer.go +++ b/cmd/neutrond/consumer.go @@ -18,7 +18,7 @@ import ( ccvconsumertypes "github.com/cosmos/interchain-security/v5/x/ccv/consumer/types" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/testutil/consumer" + "github.com/neutron-org/neutron/v5/testutil/consumer" ) func AddConsumerSectionCmd(defaultNodeHome string) *cobra.Command { diff --git a/cmd/neutrond/main.go b/cmd/neutrond/main.go index c417d7abb..da06d4cc0 100644 --- a/cmd/neutrond/main.go +++ b/cmd/neutrond/main.go @@ -3,11 +3,11 @@ package main import ( "os" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" - "github.com/neutron-org/neutron/v4/app" + "github.com/neutron-org/neutron/v5/app" ) func main() { diff --git a/cmd/neutrond/root.go b/cmd/neutrond/root.go index 65171611f..10ef9d36c 100644 --- a/cmd/neutrond/root.go +++ b/cmd/neutrond/root.go @@ -39,8 +39,8 @@ import ( "github.com/spf13/cobra" "github.com/spf13/viper" - "github.com/neutron-org/neutron/v4/app" - "github.com/neutron-org/neutron/v4/app/params" + "github.com/neutron-org/neutron/v5/app" + "github.com/neutron-org/neutron/v5/app/params" ) // NewRootCmd creates a new root command for neutrond. It is called once in the diff --git a/go.mod b/go.mod index eb845f99e..e16bed615 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/neutron-org/neutron/v4 +module github.com/neutron-org/neutron/v5 go 1.22.6 diff --git a/proto/gaia/globalfee/v1beta1/genesis.proto b/proto/gaia/globalfee/v1beta1/genesis.proto index 269b15413..e2ed073be 100644 --- a/proto/gaia/globalfee/v1beta1/genesis.proto +++ b/proto/gaia/globalfee/v1beta1/genesis.proto @@ -4,7 +4,7 @@ package gaia.globalfee.v1beta1; import "gaia/globalfee/v1beta1/params.proto"; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/globalfee/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/globalfee/types"; // GenesisState - initial state of module message GenesisState { diff --git a/proto/gaia/globalfee/v1beta1/params.proto b/proto/gaia/globalfee/v1beta1/params.proto index bced7cd69..473f84ae5 100644 --- a/proto/gaia/globalfee/v1beta1/params.proto +++ b/proto/gaia/globalfee/v1beta1/params.proto @@ -4,7 +4,7 @@ package gaia.globalfee.v1beta1; import "cosmos/base/v1beta1/coin.proto"; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/globalfee/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/globalfee/types"; // Params defines the set of module parameters. message Params { diff --git a/proto/gaia/globalfee/v1beta1/query.proto b/proto/gaia/globalfee/v1beta1/query.proto index ea8879f61..05e3de0e0 100644 --- a/proto/gaia/globalfee/v1beta1/query.proto +++ b/proto/gaia/globalfee/v1beta1/query.proto @@ -5,7 +5,7 @@ import "gaia/globalfee/v1beta1/params.proto"; import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/globalfee/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/globalfee/types"; // Query defines the gRPC querier service. service Query { diff --git a/proto/gaia/globalfee/v1beta1/tx.proto b/proto/gaia/globalfee/v1beta1/tx.proto index ffbdc0d8a..e5410bf35 100644 --- a/proto/gaia/globalfee/v1beta1/tx.proto +++ b/proto/gaia/globalfee/v1beta1/tx.proto @@ -7,7 +7,7 @@ import "cosmos_proto/cosmos.proto"; import "gaia/globalfee/v1beta1/params.proto"; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/globalfee/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/globalfee/types"; // Msg defines the Msg service. service Msg { diff --git a/proto/neutron/contractmanager/failure.proto b/proto/neutron/contractmanager/failure.proto index 87e73b148..4ba42d797 100644 --- a/proto/neutron/contractmanager/failure.proto +++ b/proto/neutron/contractmanager/failure.proto @@ -3,7 +3,7 @@ package neutron.contractmanager; import "ibc/core/channel/v1/channel.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/contractmanager/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/contractmanager/types"; // Failure message contains information about ACK failures and can be used to // replay ACK in case of requirement. diff --git a/proto/neutron/contractmanager/genesis.proto b/proto/neutron/contractmanager/genesis.proto index 74728c4a7..564e35a3a 100644 --- a/proto/neutron/contractmanager/genesis.proto +++ b/proto/neutron/contractmanager/genesis.proto @@ -6,7 +6,7 @@ import "neutron/contractmanager/failure.proto"; import "neutron/contractmanager/params.proto"; // this line is used by starport scaffolding # genesis/proto/import -option go_package = "github.com/neutron-org/neutron/v4/x/contractmanager/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/contractmanager/types"; // GenesisState defines the contractmanager module's genesis state. message GenesisState { diff --git a/proto/neutron/contractmanager/params.proto b/proto/neutron/contractmanager/params.proto index 3eb687a7e..309798cbf 100644 --- a/proto/neutron/contractmanager/params.proto +++ b/proto/neutron/contractmanager/params.proto @@ -3,7 +3,7 @@ package neutron.contractmanager; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/contractmanager/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/contractmanager/types"; // Params defines the parameters for the module. message Params { diff --git a/proto/neutron/contractmanager/query.proto b/proto/neutron/contractmanager/query.proto index 32280f2ae..abda10bf6 100644 --- a/proto/neutron/contractmanager/query.proto +++ b/proto/neutron/contractmanager/query.proto @@ -8,7 +8,7 @@ import "neutron/contractmanager/failure.proto"; import "neutron/contractmanager/params.proto"; // this line is used by starport scaffolding # 1 -option go_package = "github.com/neutron-org/neutron/v4/x/contractmanager/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/contractmanager/types"; // Query defines the gRPC querier service. service Query { diff --git a/proto/neutron/contractmanager/tx.proto b/proto/neutron/contractmanager/tx.proto index cf91f125c..24a98596d 100644 --- a/proto/neutron/contractmanager/tx.proto +++ b/proto/neutron/contractmanager/tx.proto @@ -9,7 +9,7 @@ import "neutron/contractmanager/params.proto"; // this line is used by starport scaffolding # proto/tx/import -option go_package = "github.com/neutron-org/neutron/v4/x/contractmanager/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/contractmanager/types"; // Msg defines the Msg service. service Msg { diff --git a/proto/neutron/contractmanager/v1/failure.proto b/proto/neutron/contractmanager/v1/failure.proto index 595ec7993..36b86bac2 100644 --- a/proto/neutron/contractmanager/v1/failure.proto +++ b/proto/neutron/contractmanager/v1/failure.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package neutron.contractmanager.v1; -option go_package = "github.com/neutron-org/neutron/v4/x/contractmanager/types/v1"; +option go_package = "github.com/neutron-org/neutron/v5/x/contractmanager/types/v1"; // Deprecated. Used only for migration purposes. message Failure { diff --git a/proto/neutron/cron/genesis.proto b/proto/neutron/cron/genesis.proto index eba407f97..9a570c257 100644 --- a/proto/neutron/cron/genesis.proto +++ b/proto/neutron/cron/genesis.proto @@ -6,7 +6,7 @@ import "neutron/cron/params.proto"; import "neutron/cron/schedule.proto"; // this line is used by starport scaffolding # genesis/proto/import -option go_package = "github.com/neutron-org/neutron/v4/x/cron/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/cron/types"; // Defines the cron module's genesis state. message GenesisState { diff --git a/proto/neutron/cron/params.proto b/proto/neutron/cron/params.proto index c3c5cf452..0018d73ed 100644 --- a/proto/neutron/cron/params.proto +++ b/proto/neutron/cron/params.proto @@ -3,7 +3,7 @@ package neutron.cron; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/cron/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/cron/types"; // Defines the parameters for the module. message Params { diff --git a/proto/neutron/cron/query.proto b/proto/neutron/cron/query.proto index 60ee505e0..c75045c1e 100644 --- a/proto/neutron/cron/query.proto +++ b/proto/neutron/cron/query.proto @@ -8,7 +8,7 @@ import "neutron/cron/params.proto"; import "neutron/cron/schedule.proto"; // this line is used by starport scaffolding # 1 -option go_package = "github.com/neutron-org/neutron/v4/x/cron/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/cron/types"; // Defines the gRPC querier service. service Query { diff --git a/proto/neutron/cron/schedule.proto b/proto/neutron/cron/schedule.proto index b6147aed4..7cfa2caa6 100644 --- a/proto/neutron/cron/schedule.proto +++ b/proto/neutron/cron/schedule.proto @@ -3,7 +3,7 @@ package neutron.cron; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/cron/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/cron/types"; // Defines when messages will be executed in the block enum ExecutionStage { diff --git a/proto/neutron/cron/tx.proto b/proto/neutron/cron/tx.proto index fcb9b383a..be869cdd8 100644 --- a/proto/neutron/cron/tx.proto +++ b/proto/neutron/cron/tx.proto @@ -10,7 +10,7 @@ import "neutron/cron/schedule.proto"; // this line is used by starport scaffolding # proto/tx/import -option go_package = "github.com/neutron-org/neutron/v4/x/cron/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/cron/types"; // Defines the Msg service. service Msg { diff --git a/proto/neutron/cron/v1/schedule.proto b/proto/neutron/cron/v1/schedule.proto index 8995431fe..3593f5058 100644 --- a/proto/neutron/cron/v1/schedule.proto +++ b/proto/neutron/cron/v1/schedule.proto @@ -3,7 +3,7 @@ package neutron.cron.v1; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/cron/types/v1"; +option go_package = "github.com/neutron-org/neutron/v5/x/cron/types/v1"; // Defines the schedule for execution message Schedule { diff --git a/proto/neutron/dex/deposit_record.proto b/proto/neutron/dex/deposit_record.proto index 65227075c..e97ce4bf3 100644 --- a/proto/neutron/dex/deposit_record.proto +++ b/proto/neutron/dex/deposit_record.proto @@ -5,7 +5,7 @@ import "gogoproto/gogo.proto"; import "neutron/dex/pair_id.proto"; import "neutron/dex/pool.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/dex/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/dex/types"; message DepositRecord { PairID pair_id = 1; diff --git a/proto/neutron/dex/genesis.proto b/proto/neutron/dex/genesis.proto index 9630fdc02..97e70d559 100644 --- a/proto/neutron/dex/genesis.proto +++ b/proto/neutron/dex/genesis.proto @@ -11,7 +11,7 @@ import "neutron/dex/tick_liquidity.proto"; // this line is used by starport scaffolding # genesis/proto/import -option go_package = "github.com/neutron-org/neutron/v4/x/dex/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/dex/types"; // GenesisState defines the dex module's genesis state. message GenesisState { diff --git a/proto/neutron/dex/limit_order_expiration.proto b/proto/neutron/dex/limit_order_expiration.proto index c678e21cc..e8ceb702f 100644 --- a/proto/neutron/dex/limit_order_expiration.proto +++ b/proto/neutron/dex/limit_order_expiration.proto @@ -4,7 +4,7 @@ package neutron.dex; import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/dex/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/dex/types"; message LimitOrderExpiration { // see limitOrderTranche.proto for details on expiration_time diff --git a/proto/neutron/dex/limit_order_tranche.proto b/proto/neutron/dex/limit_order_tranche.proto index 9d05dcd96..2f54beec0 100644 --- a/proto/neutron/dex/limit_order_tranche.proto +++ b/proto/neutron/dex/limit_order_tranche.proto @@ -6,7 +6,7 @@ import "google/protobuf/timestamp.proto"; import "neutron/dex/pair_id.proto"; import "neutron/dex/trade_pair_id.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/dex/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/dex/types"; message LimitOrderTrancheKey { TradePairID trade_pair_id = 1; @@ -51,7 +51,7 @@ message LimitOrderTranche { ]; string price_taker_to_maker = 7 [ (gogoproto.moretags) = "yaml:\"price_taker_to_maker\"", - (gogoproto.customtype) = "github.com/neutron-org/neutron/v4/utils/math.PrecDec", + (gogoproto.customtype) = "github.com/neutron-org/neutron/v5/utils/math.PrecDec", (gogoproto.nullable) = false, (gogoproto.jsontag) = "price_taker_to_maker" ]; diff --git a/proto/neutron/dex/limit_order_tranche_user.proto b/proto/neutron/dex/limit_order_tranche_user.proto index 89cd817b6..64b6e5a8b 100644 --- a/proto/neutron/dex/limit_order_tranche_user.proto +++ b/proto/neutron/dex/limit_order_tranche_user.proto @@ -5,7 +5,7 @@ import "gogoproto/gogo.proto"; import "neutron/dex/trade_pair_id.proto"; import "neutron/dex/tx.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/dex/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/dex/types"; message LimitOrderTrancheUser { TradePairID trade_pair_id = 1; diff --git a/proto/neutron/dex/pair_id.proto b/proto/neutron/dex/pair_id.proto index f32ba2f49..92ab73532 100644 --- a/proto/neutron/dex/pair_id.proto +++ b/proto/neutron/dex/pair_id.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package neutron.dex; -option go_package = "github.com/neutron-org/neutron/v4/x/dex/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/dex/types"; message PairID { string token0 = 1; diff --git a/proto/neutron/dex/params.proto b/proto/neutron/dex/params.proto index 43c20db29..a25c48d61 100644 --- a/proto/neutron/dex/params.proto +++ b/proto/neutron/dex/params.proto @@ -3,7 +3,7 @@ package neutron.dex; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/dex/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/dex/types"; // Params defines the parameters for the module. message Params { diff --git a/proto/neutron/dex/pool.proto b/proto/neutron/dex/pool.proto index 825182482..231a1df4b 100644 --- a/proto/neutron/dex/pool.proto +++ b/proto/neutron/dex/pool.proto @@ -4,7 +4,7 @@ package neutron.dex; import "gogoproto/gogo.proto"; import "neutron/dex/pool_reserves.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/dex/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/dex/types"; // NOTE: This struct is never actually stored in the KV store. It is merely a // convenience wrapper for holding both sides of a pool. diff --git a/proto/neutron/dex/pool_metadata.proto b/proto/neutron/dex/pool_metadata.proto index b1b32da97..d84ada0c5 100644 --- a/proto/neutron/dex/pool_metadata.proto +++ b/proto/neutron/dex/pool_metadata.proto @@ -3,7 +3,7 @@ package neutron.dex; import "neutron/dex/pair_id.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/dex/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/dex/types"; message PoolMetadata { uint64 id = 1; diff --git a/proto/neutron/dex/pool_reserves.proto b/proto/neutron/dex/pool_reserves.proto index c633a551a..998b2d0cb 100644 --- a/proto/neutron/dex/pool_reserves.proto +++ b/proto/neutron/dex/pool_reserves.proto @@ -4,7 +4,7 @@ package neutron.dex; import "gogoproto/gogo.proto"; import "neutron/dex/trade_pair_id.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/dex/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/dex/types"; message PoolReservesKey { TradePairID trade_pair_id = 1; @@ -22,13 +22,13 @@ message PoolReserves { ]; string price_taker_to_maker = 3 [ (gogoproto.moretags) = "yaml:\"price_taker_to_maker\"", - (gogoproto.customtype) = "github.com/neutron-org/neutron/v4/utils/math.PrecDec", + (gogoproto.customtype) = "github.com/neutron-org/neutron/v5/utils/math.PrecDec", (gogoproto.nullable) = false, (gogoproto.jsontag) = "price_taker_to_maker" ]; string price_opposite_taker_to_maker = 4 [ (gogoproto.moretags) = "yaml:\"price_opposite_taker_to_maker\"", - (gogoproto.customtype) = "github.com/neutron-org/neutron/v4/utils/math.PrecDec", + (gogoproto.customtype) = "github.com/neutron-org/neutron/v5/utils/math.PrecDec", (gogoproto.nullable) = false, (gogoproto.jsontag) = "price_opposite_taker_to_maker" ]; diff --git a/proto/neutron/dex/query.proto b/proto/neutron/dex/query.proto index ef524da0c..305df8257 100644 --- a/proto/neutron/dex/query.proto +++ b/proto/neutron/dex/query.proto @@ -19,7 +19,7 @@ import "neutron/dex/tx.proto"; // this line is used by starport scaffolding # 1 -option go_package = "github.com/neutron-org/neutron/v4/x/dex/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/dex/types"; // Query defines the gRPC querier service. service Query { @@ -271,7 +271,7 @@ message QueryEstimateMultiHopSwapRequest { ]; string exit_limit_price = 5 [ (gogoproto.moretags) = "yaml:\"exit_limit_price\"", - (gogoproto.customtype) = "github.com/neutron-org/neutron/v4/utils/math.PrecDec", + (gogoproto.customtype) = "github.com/neutron-org/neutron/v5/utils/math.PrecDec", (gogoproto.nullable) = false, (gogoproto.jsontag) = "exit_limit_price" ]; diff --git a/proto/neutron/dex/tick_liquidity.proto b/proto/neutron/dex/tick_liquidity.proto index 7d6609ca4..b6b40b73d 100644 --- a/proto/neutron/dex/tick_liquidity.proto +++ b/proto/neutron/dex/tick_liquidity.proto @@ -5,7 +5,7 @@ import "gogoproto/gogo.proto"; import "neutron/dex/limit_order_tranche.proto"; import "neutron/dex/pool_reserves.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/dex/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/dex/types"; message TickLiquidity { oneof liquidity { diff --git a/proto/neutron/dex/trade_pair_id.proto b/proto/neutron/dex/trade_pair_id.proto index c5c359e67..84f154fdb 100644 --- a/proto/neutron/dex/trade_pair_id.proto +++ b/proto/neutron/dex/trade_pair_id.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package neutron.dex; -option go_package = "github.com/neutron-org/neutron/v4/x/dex/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/dex/types"; message TradePairID { string maker_denom = 2; diff --git a/proto/neutron/dex/tx.proto b/proto/neutron/dex/tx.proto index 093591440..264edda6d 100644 --- a/proto/neutron/dex/tx.proto +++ b/proto/neutron/dex/tx.proto @@ -11,7 +11,7 @@ import "neutron/dex/params.proto"; // this line is used by starport scaffolding # proto/tx/import -option go_package = "github.com/neutron-org/neutron/v4/x/dex/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/dex/types"; // Msg defines the Msg service. service Msg { @@ -136,7 +136,7 @@ message MsgPlaceLimitOrder { ]; string limit_sell_price = 11 [ (gogoproto.moretags) = "yaml:\"limit_sell_price\"", - (gogoproto.customtype) = "github.com/neutron-org/neutron/v4/utils/math.PrecDec", + (gogoproto.customtype) = "github.com/neutron-org/neutron/v5/utils/math.PrecDec", (gogoproto.nullable) = true, (gogoproto.jsontag) = "limit_sell_price" ]; @@ -202,7 +202,7 @@ message MsgMultiHopSwap { ]; string exit_limit_price = 5 [ (gogoproto.moretags) = "yaml:\"exit_limit_price\"", - (gogoproto.customtype) = "github.com/neutron-org/neutron/v4/utils/math.PrecDec", + (gogoproto.customtype) = "github.com/neutron-org/neutron/v5/utils/math.PrecDec", (gogoproto.nullable) = false, (gogoproto.jsontag) = "exit_limit_price" ]; diff --git a/proto/neutron/dex/v2/params.proto b/proto/neutron/dex/v2/params.proto index 64df63408..335763b2e 100644 --- a/proto/neutron/dex/v2/params.proto +++ b/proto/neutron/dex/v2/params.proto @@ -3,7 +3,7 @@ package neutron.dex.v2; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/dex/types/v2"; +option go_package = "github.com/neutron-org/neutron/v5/x/dex/types/v2"; // Params defines the parameters for the module. message Params { @@ -11,7 +11,7 @@ message Params { repeated uint64 fee_tiers = 1; string max_true_taker_spread = 2 [ (gogoproto.moretags) = "yaml:\"max_true_taker_spread\"", - (gogoproto.customtype) = "github.com/neutron-org/neutron/v4/utils/math.PrecDec", + (gogoproto.customtype) = "github.com/neutron-org/neutron/v5/utils/math.PrecDec", (gogoproto.nullable) = false, (gogoproto.jsontag) = "max_true_taker_spread" ]; diff --git a/proto/neutron/dynamicfees/v1/genesis.proto b/proto/neutron/dynamicfees/v1/genesis.proto index dcdfe3d18..a889fb4f7 100644 --- a/proto/neutron/dynamicfees/v1/genesis.proto +++ b/proto/neutron/dynamicfees/v1/genesis.proto @@ -4,7 +4,7 @@ package neutron.dynamicfees.v1; import "gogoproto/gogo.proto"; import "neutron/dynamicfees/v1/params.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/dynamicfees/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/dynamicfees/types"; // GenesisState defines the dynamicfees module's genesis state. message GenesisState { diff --git a/proto/neutron/dynamicfees/v1/params.proto b/proto/neutron/dynamicfees/v1/params.proto index 1e87168e2..5cf191528 100644 --- a/proto/neutron/dynamicfees/v1/params.proto +++ b/proto/neutron/dynamicfees/v1/params.proto @@ -4,7 +4,7 @@ package neutron.dynamicfees.v1; import "cosmos/base/v1beta1/coin.proto"; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/dynamicfees/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/dynamicfees/types"; // Params defines the parameters for the module. message Params { diff --git a/proto/neutron/dynamicfees/v1/query.proto b/proto/neutron/dynamicfees/v1/query.proto index aa717bf96..88eab2391 100644 --- a/proto/neutron/dynamicfees/v1/query.proto +++ b/proto/neutron/dynamicfees/v1/query.proto @@ -5,7 +5,7 @@ import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; import "neutron/dynamicfees/v1/params.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/dynamicfees/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/dynamicfees/types"; // Query defines the gRPC querier service. service Query { diff --git a/proto/neutron/dynamicfees/v1/tx.proto b/proto/neutron/dynamicfees/v1/tx.proto index dd02203df..9653ca985 100644 --- a/proto/neutron/dynamicfees/v1/tx.proto +++ b/proto/neutron/dynamicfees/v1/tx.proto @@ -7,7 +7,7 @@ import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; import "neutron/dynamicfees/v1/params.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/dynamicfees/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/dynamicfees/types"; // Msg defines the Msg service. service Msg { diff --git a/proto/neutron/feeburner/genesis.proto b/proto/neutron/feeburner/genesis.proto index 70fb5034b..7d778259b 100644 --- a/proto/neutron/feeburner/genesis.proto +++ b/proto/neutron/feeburner/genesis.proto @@ -6,7 +6,7 @@ import "neutron/feeburner/params.proto"; import "neutron/feeburner/total_burned_neutrons_amount.proto"; // this line is used by starport scaffolding # genesis/proto/import -option go_package = "github.com/neutron-org/neutron/v4/x/feeburner/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/feeburner/types"; // GenesisState defines the feeburner module's genesis state. message GenesisState { diff --git a/proto/neutron/feeburner/params.proto b/proto/neutron/feeburner/params.proto index e940844d7..332faf399 100644 --- a/proto/neutron/feeburner/params.proto +++ b/proto/neutron/feeburner/params.proto @@ -3,7 +3,7 @@ package neutron.feeburner; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/feeburner/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/feeburner/types"; // Params defines the parameters for the module. message Params { diff --git a/proto/neutron/feeburner/query.proto b/proto/neutron/feeburner/query.proto index 3dfd880b7..c605a2c2f 100644 --- a/proto/neutron/feeburner/query.proto +++ b/proto/neutron/feeburner/query.proto @@ -8,7 +8,7 @@ import "neutron/feeburner/params.proto"; import "neutron/feeburner/total_burned_neutrons_amount.proto"; // this line is used by starport scaffolding # 1 -option go_package = "github.com/neutron-org/neutron/v4/x/feeburner/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/feeburner/types"; // Query defines the gRPC querier service. service Query { diff --git a/proto/neutron/feeburner/total_burned_neutrons_amount.proto b/proto/neutron/feeburner/total_burned_neutrons_amount.proto index 30935366f..304b99600 100644 --- a/proto/neutron/feeburner/total_burned_neutrons_amount.proto +++ b/proto/neutron/feeburner/total_burned_neutrons_amount.proto @@ -4,7 +4,7 @@ package neutron.feeburner; import "cosmos/base/v1beta1/coin.proto"; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/feeburner/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/feeburner/types"; // TotalBurnedNeutronsAmount defines total amount of burned neutron fees message TotalBurnedNeutronsAmount { diff --git a/proto/neutron/feeburner/tx.proto b/proto/neutron/feeburner/tx.proto index 94240af8c..d1eb6132c 100644 --- a/proto/neutron/feeburner/tx.proto +++ b/proto/neutron/feeburner/tx.proto @@ -9,7 +9,7 @@ import "neutron/feeburner/params.proto"; // this line is used by starport scaffolding # proto/tx/import -option go_package = "github.com/neutron-org/neutron/v4/x/feeburner/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/feeburner/types"; // Msg defines the Msg service. service Msg { diff --git a/proto/neutron/feerefunder/fee.proto b/proto/neutron/feerefunder/fee.proto index 07540a281..90017bc68 100644 --- a/proto/neutron/feerefunder/fee.proto +++ b/proto/neutron/feerefunder/fee.proto @@ -4,7 +4,7 @@ package neutron.feerefunder; import "cosmos/base/v1beta1/coin.proto"; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/feerefunder/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/feerefunder/types"; // Fee defines the ICS29 receive, acknowledgement and timeout fees message Fee { diff --git a/proto/neutron/feerefunder/genesis.proto b/proto/neutron/feerefunder/genesis.proto index 022f11c2f..d409c245d 100644 --- a/proto/neutron/feerefunder/genesis.proto +++ b/proto/neutron/feerefunder/genesis.proto @@ -6,7 +6,7 @@ import "neutron/feerefunder/fee.proto"; import "neutron/feerefunder/params.proto"; // this line is used by starport scaffolding # genesis/proto/import -option go_package = "github.com/neutron-org/neutron/v4/x/feerefunder/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/feerefunder/types"; // GenesisState defines the fee module's genesis state. message GenesisState { diff --git a/proto/neutron/feerefunder/params.proto b/proto/neutron/feerefunder/params.proto index cdbd7d651..4c72177b5 100644 --- a/proto/neutron/feerefunder/params.proto +++ b/proto/neutron/feerefunder/params.proto @@ -4,7 +4,7 @@ package neutron.feerefunder; import "gogoproto/gogo.proto"; import "neutron/feerefunder/fee.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/feerefunder/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/feerefunder/types"; // Params defines the parameters for the module. message Params { diff --git a/proto/neutron/feerefunder/query.proto b/proto/neutron/feerefunder/query.proto index a032f100c..75329df1f 100644 --- a/proto/neutron/feerefunder/query.proto +++ b/proto/neutron/feerefunder/query.proto @@ -8,7 +8,7 @@ import "neutron/feerefunder/genesis.proto"; import "neutron/feerefunder/params.proto"; // this line is used by starport scaffolding # 1 -option go_package = "github.com/neutron-org/neutron/v4/x/feerefunder/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/feerefunder/types"; // Query defines the gRPC querier service. service Query { diff --git a/proto/neutron/feerefunder/tx.proto b/proto/neutron/feerefunder/tx.proto index 325796af0..d90c23297 100644 --- a/proto/neutron/feerefunder/tx.proto +++ b/proto/neutron/feerefunder/tx.proto @@ -9,7 +9,7 @@ import "neutron/feerefunder/params.proto"; // this line is used by starport scaffolding # proto/tx/import -option go_package = "github.com/neutron-org/neutron/v4/x/feerefunder/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/feerefunder/types"; // Msg defines the Msg service. service Msg { diff --git a/proto/neutron/interchainqueries/genesis.proto b/proto/neutron/interchainqueries/genesis.proto index 41ff37339..41a2870ab 100644 --- a/proto/neutron/interchainqueries/genesis.proto +++ b/proto/neutron/interchainqueries/genesis.proto @@ -6,7 +6,7 @@ import "gogoproto/gogo.proto"; import "ibc/core/client/v1/client.proto"; import "neutron/interchainqueries/params.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/interchainqueries/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/interchainqueries/types"; message RegisteredQuery { // The unique id of the registered query. diff --git a/proto/neutron/interchainqueries/params.proto b/proto/neutron/interchainqueries/params.proto index 7b05c1f58..bbfe620d9 100644 --- a/proto/neutron/interchainqueries/params.proto +++ b/proto/neutron/interchainqueries/params.proto @@ -4,7 +4,7 @@ package neutron.interchainqueries; import "cosmos/base/v1beta1/coin.proto"; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/interchainqueries/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/interchainqueries/types"; // Params defines the parameters for the module. message Params { diff --git a/proto/neutron/interchainqueries/query.proto b/proto/neutron/interchainqueries/query.proto index 0a802d5d7..8f80a9180 100644 --- a/proto/neutron/interchainqueries/query.proto +++ b/proto/neutron/interchainqueries/query.proto @@ -8,7 +8,7 @@ import "neutron/interchainqueries/genesis.proto"; import "neutron/interchainqueries/params.proto"; import "neutron/interchainqueries/tx.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/interchainqueries/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/interchainqueries/types"; // Query defines the gRPC querier service. service Query { diff --git a/proto/neutron/interchainqueries/tx.proto b/proto/neutron/interchainqueries/tx.proto index abde7246d..b1145775f 100644 --- a/proto/neutron/interchainqueries/tx.proto +++ b/proto/neutron/interchainqueries/tx.proto @@ -11,7 +11,7 @@ import "neutron/interchainqueries/params.proto"; import "tendermint/abci/types.proto"; import "tendermint/crypto/proof.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/interchainqueries/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/interchainqueries/types"; // Msg defines the Msg service. service Msg { diff --git a/proto/neutron/interchaintxs/v1/genesis.proto b/proto/neutron/interchaintxs/v1/genesis.proto index 940ad701a..4fcf1f727 100644 --- a/proto/neutron/interchaintxs/v1/genesis.proto +++ b/proto/neutron/interchaintxs/v1/genesis.proto @@ -4,7 +4,7 @@ package neutron.interchaintxs.v1; import "gogoproto/gogo.proto"; import "neutron/interchaintxs/v1/params.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/interchaintxs/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/interchaintxs/types"; // GenesisState defines the interchaintxs module's genesis state. message GenesisState { diff --git a/proto/neutron/interchaintxs/v1/params.proto b/proto/neutron/interchaintxs/v1/params.proto index 9d8febac7..0e8a08c02 100644 --- a/proto/neutron/interchaintxs/v1/params.proto +++ b/proto/neutron/interchaintxs/v1/params.proto @@ -4,7 +4,7 @@ package neutron.interchaintxs.v1; import "cosmos/base/v1beta1/coin.proto"; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/interchaintxs/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/interchaintxs/types"; // Params defines the parameters for the module. message Params { diff --git a/proto/neutron/interchaintxs/v1/query.proto b/proto/neutron/interchaintxs/v1/query.proto index f77bf04b7..82c966942 100644 --- a/proto/neutron/interchaintxs/v1/query.proto +++ b/proto/neutron/interchaintxs/v1/query.proto @@ -6,7 +6,7 @@ import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; import "neutron/interchaintxs/v1/params.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/interchaintxs/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/interchaintxs/types"; // Query defines the gRPC querier service. service Query { diff --git a/proto/neutron/interchaintxs/v1/tx.proto b/proto/neutron/interchaintxs/v1/tx.proto index a2bb14202..18b973877 100644 --- a/proto/neutron/interchaintxs/v1/tx.proto +++ b/proto/neutron/interchaintxs/v1/tx.proto @@ -13,7 +13,7 @@ import "ibc/core/channel/v1/channel.proto"; import "neutron/feerefunder/fee.proto"; import "neutron/interchaintxs/v1/params.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/interchaintxs/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/interchaintxs/types"; // Msg defines the Msg service. service Msg { diff --git a/proto/neutron/transfer/v1/query.proto b/proto/neutron/transfer/v1/query.proto index 088eeb892..3f67dc6b6 100644 --- a/proto/neutron/transfer/v1/query.proto +++ b/proto/neutron/transfer/v1/query.proto @@ -5,7 +5,7 @@ package neutron.transfer; import "google/api/annotations.proto"; import "ibc/applications/transfer/v1/query.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/transfer/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/transfer/types"; // Query provides defines the gRPC querier service. service Query { diff --git a/proto/neutron/transfer/v1/tx.proto b/proto/neutron/transfer/v1/tx.proto index 49ff17e6f..9d40f3fb1 100644 --- a/proto/neutron/transfer/v1/tx.proto +++ b/proto/neutron/transfer/v1/tx.proto @@ -9,7 +9,7 @@ import "ibc/applications/transfer/v1/transfer.proto"; import "ibc/core/client/v1/client.proto"; import "neutron/feerefunder/fee.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/transfer/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/transfer/types"; // Msg defines the ibc/transfer Msg service. service Msg { diff --git a/proto/osmosis/tokenfactory/params.proto b/proto/osmosis/tokenfactory/params.proto index 563a17a4f..778867af2 100644 --- a/proto/osmosis/tokenfactory/params.proto +++ b/proto/osmosis/tokenfactory/params.proto @@ -5,7 +5,7 @@ import "cosmos/base/v1beta1/coin.proto"; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/tokenfactory/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/tokenfactory/types"; // WhitelistedHook describes a beforeSendHook which is allowed to be added and executed // SetBeforeSendHook can only be called on denoms where the denom creator and diff --git a/proto/osmosis/tokenfactory/v1beta1/authorityMetadata.proto b/proto/osmosis/tokenfactory/v1beta1/authorityMetadata.proto index 863570e13..5b7d79ceb 100644 --- a/proto/osmosis/tokenfactory/v1beta1/authorityMetadata.proto +++ b/proto/osmosis/tokenfactory/v1beta1/authorityMetadata.proto @@ -4,7 +4,7 @@ package osmosis.tokenfactory.v1beta1; import "cosmos/base/v1beta1/coin.proto"; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/tokenfactory/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/tokenfactory/types"; // DenomAuthorityMetadata specifies metadata for addresses that have specific // capabilities over a token factory denom. Right now there is only one Admin diff --git a/proto/osmosis/tokenfactory/v1beta1/genesis.proto b/proto/osmosis/tokenfactory/v1beta1/genesis.proto index 82bb3c52a..6b7fd15d6 100644 --- a/proto/osmosis/tokenfactory/v1beta1/genesis.proto +++ b/proto/osmosis/tokenfactory/v1beta1/genesis.proto @@ -5,7 +5,7 @@ import "gogoproto/gogo.proto"; import "osmosis/tokenfactory/params.proto"; import "osmosis/tokenfactory/v1beta1/authorityMetadata.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/tokenfactory/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/tokenfactory/types"; // GenesisState defines the tokenfactory module's genesis state. message GenesisState { diff --git a/proto/osmosis/tokenfactory/v1beta1/params.proto b/proto/osmosis/tokenfactory/v1beta1/params.proto index e7e8b1b7a..8374454d3 100644 --- a/proto/osmosis/tokenfactory/v1beta1/params.proto +++ b/proto/osmosis/tokenfactory/v1beta1/params.proto @@ -5,7 +5,7 @@ import "cosmos/base/v1beta1/coin.proto"; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/tokenfactory/types/v1beta1"; +option go_package = "github.com/neutron-org/neutron/v5/x/tokenfactory/types/v1beta1"; // Params defines the parameters for the tokenfactory module. message Params { diff --git a/proto/osmosis/tokenfactory/v1beta1/query.proto b/proto/osmosis/tokenfactory/v1beta1/query.proto index d7b4d6f8d..0c211bf0c 100644 --- a/proto/osmosis/tokenfactory/v1beta1/query.proto +++ b/proto/osmosis/tokenfactory/v1beta1/query.proto @@ -6,7 +6,7 @@ import "google/api/annotations.proto"; import "osmosis/tokenfactory/params.proto"; import "osmosis/tokenfactory/v1beta1/authorityMetadata.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/tokenfactory/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/tokenfactory/types"; // Query defines the gRPC querier service. service Query { diff --git a/proto/osmosis/tokenfactory/v1beta1/tx.proto b/proto/osmosis/tokenfactory/v1beta1/tx.proto index e122fe71f..8b8c153bf 100644 --- a/proto/osmosis/tokenfactory/v1beta1/tx.proto +++ b/proto/osmosis/tokenfactory/v1beta1/tx.proto @@ -9,7 +9,7 @@ import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; import "osmosis/tokenfactory/params.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/tokenfactory/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/tokenfactory/types"; // Msg defines the tokefactory module's gRPC message service. service Msg { diff --git a/scripts/protocgen.sh b/scripts/protocgen.sh index b9df9c41d..466e4eb21 100755 --- a/scripts/protocgen.sh +++ b/scripts/protocgen.sh @@ -27,5 +27,5 @@ done cd .. # move proto files to the right places -cp -r github.com/neutron-org/neutron/v4/x/* x/ -rm -rf github.com \ No newline at end of file +cp -r github.com/neutron-org/neutron/v5/x/* x/ +rm -rf github.com diff --git a/tests/e2e/interchain_security_test.go b/tests/e2e/interchain_security_test.go index a78a085ad..1473ed93f 100644 --- a/tests/e2e/interchain_security_test.go +++ b/tests/e2e/interchain_security_test.go @@ -9,9 +9,9 @@ import ( icssimapp "github.com/cosmos/interchain-security/v5/testutil/ibc_testing" "github.com/stretchr/testify/suite" - appConsumer "github.com/neutron-org/neutron/v4/app" - appparams "github.com/neutron-org/neutron/v4/app/params" - "github.com/neutron-org/neutron/v4/testutil" + appConsumer "github.com/neutron-org/neutron/v5/app" + appparams "github.com/neutron-org/neutron/v5/app/params" + "github.com/neutron-org/neutron/v5/testutil" ) // Executes the standard group of ccv tests against a consumer and provider app.go implementation. diff --git a/tests/feemarket/go.mod b/tests/feemarket/go.mod index 9de8d6631..813997bf7 100644 --- a/tests/feemarket/go.mod +++ b/tests/feemarket/go.mod @@ -1,4 +1,4 @@ -module github.com/neutron-org/neutron/v4/tests/feemarket +module github.com/neutron-org/neutron/v5/tests/feemarket go 1.22.6 diff --git a/tests/ibc/ibc_setup_test.go b/tests/ibc/ibc_setup_test.go index 51477e833..98017cb12 100644 --- a/tests/ibc/ibc_setup_test.go +++ b/tests/ibc/ibc_setup_test.go @@ -17,8 +17,8 @@ import ( ccv "github.com/cosmos/interchain-security/v5/x/ccv/types" "github.com/stretchr/testify/suite" - appparams "github.com/neutron-org/neutron/v4/app/params" - "github.com/neutron-org/neutron/v4/testutil" + appparams "github.com/neutron-org/neutron/v5/app/params" + "github.com/neutron-org/neutron/v5/testutil" ) var ( diff --git a/testutil/apptesting/test_suite.go b/testutil/apptesting/test_suite.go index c2078edb9..ba9b4e3b3 100644 --- a/testutil/apptesting/test_suite.go +++ b/testutil/apptesting/test_suite.go @@ -17,9 +17,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/suite" - "github.com/neutron-org/neutron/v4/app" - "github.com/neutron-org/neutron/v4/testutil" - dexmoduletypes "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/app" + "github.com/neutron-org/neutron/v5/testutil" + dexmoduletypes "github.com/neutron-org/neutron/v5/x/dex/types" ) type KeeperTestHelper struct { diff --git a/testutil/consumer/test_helpers.go b/testutil/consumer/test_helpers.go index 0a1db0406..712e2f5c0 100644 --- a/testutil/consumer/test_helpers.go +++ b/testutil/consumer/test_helpers.go @@ -20,7 +20,7 @@ import ( "github.com/cosmos/cosmos-sdk/testutil/network" - "github.com/neutron-org/neutron/v4/app" + "github.com/neutron-org/neutron/v5/app" ) // This function creates consumer module genesis state that is used as starting point for modifications diff --git a/testutil/contractmanager/keeper/contractmanager.go b/testutil/contractmanager/keeper/contractmanager.go index 5b537ea2c..dc5a3f54a 100644 --- a/testutil/contractmanager/keeper/contractmanager.go +++ b/testutil/contractmanager/keeper/contractmanager.go @@ -17,8 +17,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) func ContractManagerKeeper(t testing.TB, wasmKeeper types.WasmKeeper) (*keeper.Keeper, sdk.Context) { diff --git a/testutil/contractmanager/network/network.go b/testutil/contractmanager/network/network.go index 914c654ce..878045594 100644 --- a/testutil/contractmanager/network/network.go +++ b/testutil/contractmanager/network/network.go @@ -23,10 +23,10 @@ import ( "github.com/cosmos/cosmos-sdk/x/staking" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/neutron-org/neutron/v4/app/params" + "github.com/neutron-org/neutron/v5/app/params" - "github.com/neutron-org/neutron/v4/app" - "github.com/neutron-org/neutron/v4/testutil/consumer" + "github.com/neutron-org/neutron/v5/app" + "github.com/neutron-org/neutron/v5/testutil/consumer" ) type ( diff --git a/testutil/cron/keeper/cron.go b/testutil/cron/keeper/cron.go index fd9e321b5..0eb83d432 100644 --- a/testutil/cron/keeper/cron.go +++ b/testutil/cron/keeper/cron.go @@ -17,8 +17,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/cron/keeper" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/x/cron/keeper" + "github.com/neutron-org/neutron/v5/x/cron/types" ) func CronKeeper(t testing.TB, wasmMsgServer types.WasmMsgServer, accountKeeper types.AccountKeeper) (*keeper.Keeper, sdk.Context) { diff --git a/testutil/cron/network/network.go b/testutil/cron/network/network.go index 7a419741e..525370faf 100644 --- a/testutil/cron/network/network.go +++ b/testutil/cron/network/network.go @@ -5,7 +5,7 @@ import ( "testing" "time" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" pruningtypes "cosmossdk.io/store/pruning/types" db "github.com/cosmos/cosmos-db" @@ -16,11 +16,11 @@ import ( "github.com/cosmos/cosmos-sdk/x/staking" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/neutron-org/neutron/v4/testutil/consumer" + "github.com/neutron-org/neutron/v5/testutil/consumer" - "github.com/neutron-org/neutron/v4/app/params" + "github.com/neutron-org/neutron/v5/app/params" - "github.com/neutron-org/neutron/v4/app" + "github.com/neutron-org/neutron/v5/app" tmrand "github.com/cometbft/cometbft/libs/rand" "github.com/cosmos/cosmos-sdk/baseapp" diff --git a/testutil/dex/keeper/dex.go b/testutil/dex/keeper/dex.go index 7c4ae1c81..6be5802a3 100644 --- a/testutil/dex/keeper/dex.go +++ b/testutil/dex/keeper/dex.go @@ -16,8 +16,8 @@ import ( authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func DexKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) { diff --git a/testutil/dynamicfees/keeper/keeper.go b/testutil/dynamicfees/keeper/keeper.go index 692fb2192..d14dec8d0 100644 --- a/testutil/dynamicfees/keeper/keeper.go +++ b/testutil/dynamicfees/keeper/keeper.go @@ -17,8 +17,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/dynamicfees/keeper" - "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + "github.com/neutron-org/neutron/v5/x/dynamicfees/keeper" + "github.com/neutron-org/neutron/v5/x/dynamicfees/types" ) func DynamicFeesKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) { diff --git a/testutil/feeburner/keeper/feeburner.go b/testutil/feeburner/keeper/feeburner.go index 205e1a95c..41c186be8 100644 --- a/testutil/feeburner/keeper/feeburner.go +++ b/testutil/feeburner/keeper/feeburner.go @@ -17,8 +17,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/feeburner/keeper" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + "github.com/neutron-org/neutron/v5/x/feeburner/keeper" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) func FeeburnerKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) { diff --git a/testutil/feerefunder/keeper/fee.go b/testutil/feerefunder/keeper/fee.go index c10a94367..b4ebfb1bc 100644 --- a/testutil/feerefunder/keeper/fee.go +++ b/testutil/feerefunder/keeper/fee.go @@ -16,8 +16,8 @@ import ( authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/feerefunder/keeper" - "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/feerefunder/keeper" + "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) func FeeKeeper(t testing.TB, channelKeeper types.ChannelKeeper, bankKeeper types.BankKeeper) (*keeper.Keeper, sdk.Context) { diff --git a/testutil/globalfee/keeper/globalfee.go b/testutil/globalfee/keeper/globalfee.go index 584b7e548..27b8379c6 100644 --- a/testutil/globalfee/keeper/globalfee.go +++ b/testutil/globalfee/keeper/globalfee.go @@ -17,8 +17,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/globalfee/keeper" - "github.com/neutron-org/neutron/v4/x/globalfee/types" + "github.com/neutron-org/neutron/v5/x/globalfee/keeper" + "github.com/neutron-org/neutron/v5/x/globalfee/types" ) func GlobalFeeKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) { diff --git a/testutil/integration_test_setup.go b/testutil/integration_test_setup.go index b79b2f5a9..dfdfc5806 100644 --- a/testutil/integration_test_setup.go +++ b/testutil/integration_test_setup.go @@ -23,7 +23,7 @@ import ( ibctesting "github.com/cosmos/ibc-go/v8/testing" consumertypes "github.com/cosmos/interchain-security/v5/x/ccv/consumer/types" - "github.com/neutron-org/neutron/v4/testutil/consumer" + "github.com/neutron-org/neutron/v5/testutil/consumer" "github.com/stretchr/testify/require" ) diff --git a/testutil/interchainqueries/keeper/interchainqueries.go b/testutil/interchainqueries/keeper/interchainqueries.go index 587f7f0c7..0c3ded326 100644 --- a/testutil/interchainqueries/keeper/interchainqueries.go +++ b/testutil/interchainqueries/keeper/interchainqueries.go @@ -19,8 +19,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/interchainqueries/keeper" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/x/interchainqueries/keeper" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) func InterchainQueriesKeeper( diff --git a/testutil/interchainqueries/network/network.go b/testutil/interchainqueries/network/network.go index de29f6782..ac9846444 100644 --- a/testutil/interchainqueries/network/network.go +++ b/testutil/interchainqueries/network/network.go @@ -23,10 +23,10 @@ import ( "github.com/cosmos/cosmos-sdk/x/staking" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/neutron-org/neutron/v4/app/params" + "github.com/neutron-org/neutron/v5/app/params" - "github.com/neutron-org/neutron/v4/app" - "github.com/neutron-org/neutron/v4/testutil/consumer" + "github.com/neutron-org/neutron/v5/app" + "github.com/neutron-org/neutron/v5/testutil/consumer" ) type ( diff --git a/testutil/interchaintxs/keeper/interchaintxs.go b/testutil/interchaintxs/keeper/interchaintxs.go index 87e6f3685..30a2c7497 100644 --- a/testutil/interchaintxs/keeper/interchaintxs.go +++ b/testutil/interchaintxs/keeper/interchaintxs.go @@ -17,8 +17,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/interchaintxs/keeper" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/keeper" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) func InterchainTxsKeeper( diff --git a/testutil/interchaintxs/keeper/sudo_middleware.go b/testutil/interchaintxs/keeper/sudo_middleware.go index c0cc4f5fc..2f06c3c61 100644 --- a/testutil/interchaintxs/keeper/sudo_middleware.go +++ b/testutil/interchaintxs/keeper/sudo_middleware.go @@ -12,8 +12,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/contractmanager" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/x/contractmanager" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) func NewSudoLimitWrapper(t testing.TB, cmKeeper types.ContractManagerKeeper, wasmKeeper types.WasmKeeper) (types.WasmKeeper, sdk.Context, *storetypes.KVStoreKey) { diff --git a/testutil/interchaintxs/network/network.go b/testutil/interchaintxs/network/network.go index f8fe9393d..a09fda763 100644 --- a/testutil/interchaintxs/network/network.go +++ b/testutil/interchaintxs/network/network.go @@ -23,11 +23,11 @@ import ( "github.com/cosmos/cosmos-sdk/x/staking" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/neutron-org/neutron/v4/app/params" + "github.com/neutron-org/neutron/v5/app/params" - "github.com/neutron-org/neutron/v4/testutil/consumer" + "github.com/neutron-org/neutron/v5/testutil/consumer" - "github.com/neutron-org/neutron/v4/app" + "github.com/neutron-org/neutron/v5/app" ) type ( diff --git a/testutil/mocks/contractmanager/types/expected_keepers.go b/testutil/mocks/contractmanager/types/expected_keepers.go index 92519c096..5d2ef0a4f 100644 --- a/testutil/mocks/contractmanager/types/expected_keepers.go +++ b/testutil/mocks/contractmanager/types/expected_keepers.go @@ -12,7 +12,7 @@ import ( types0 "github.com/cosmos/cosmos-sdk/types" gomock "github.com/golang/mock/gomock" - types1 "github.com/neutron-org/neutron/v4/x/contractmanager/types" + types1 "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) // MockWasmKeeper is a mock of WasmKeeper interface. diff --git a/testutil/mocks/interchainqueries/keeper/verify.go b/testutil/mocks/interchainqueries/keeper/verify.go index e5f90ace2..02f03e7d9 100644 --- a/testutil/mocks/interchainqueries/keeper/verify.go +++ b/testutil/mocks/interchainqueries/keeper/verify.go @@ -14,7 +14,7 @@ import ( tendermint "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" gomock "github.com/golang/mock/gomock" - types1 "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + types1 "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) // MockHeaderVerifier is a mock of HeaderVerifier interface. diff --git a/testutil/mocks/interchainqueries/types/verify.go b/testutil/mocks/interchainqueries/types/verify.go index 7289f3c02..591728e1f 100644 --- a/testutil/mocks/interchainqueries/types/verify.go +++ b/testutil/mocks/interchainqueries/types/verify.go @@ -14,7 +14,7 @@ import ( types1 "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" gomock "github.com/golang/mock/gomock" - types2 "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + types2 "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) // MockHeaderVerifier is a mock of HeaderVerifier interface. diff --git a/testutil/mocks/interchaintxs/types/expected_keepers.go b/testutil/mocks/interchaintxs/types/expected_keepers.go index 68866d0b4..0c1d7c3b1 100644 --- a/testutil/mocks/interchaintxs/types/expected_keepers.go +++ b/testutil/mocks/interchaintxs/types/expected_keepers.go @@ -15,7 +15,7 @@ import ( exported "github.com/cosmos/ibc-go/v8/modules/core/exported" gomock "github.com/golang/mock/gomock" - types3 "github.com/neutron-org/neutron/v4/x/feerefunder/types" + types3 "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) // MockAccountKeeper is a mock of AccountKeeper interface. diff --git a/testutil/mocks/transfer/types/expected_keepers.go b/testutil/mocks/transfer/types/expected_keepers.go index b1cc375eb..9e952f77b 100644 --- a/testutil/mocks/transfer/types/expected_keepers.go +++ b/testutil/mocks/transfer/types/expected_keepers.go @@ -12,7 +12,7 @@ import ( types0 "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" gomock "github.com/golang/mock/gomock" - types1 "github.com/neutron-org/neutron/v4/x/feerefunder/types" + types1 "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) // MockWasmKeeper is a mock of WasmKeeper interface. diff --git a/testutil/test_helpers.go b/testutil/test_helpers.go index 87757dbef..051e87e95 100644 --- a/testutil/test_helpers.go +++ b/testutil/test_helpers.go @@ -13,9 +13,9 @@ import ( icacontrollerkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/keeper" icacontrollertypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types" - "github.com/neutron-org/neutron/v4/utils" + "github.com/neutron-org/neutron/v5/utils" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" "cosmossdk.io/log" cometbfttypes "github.com/cometbft/cometbft/abci/types" @@ -34,15 +34,15 @@ import ( icssimapp "github.com/cosmos/interchain-security/v5/testutil/ibc_testing" "github.com/stretchr/testify/suite" - appparams "github.com/neutron-org/neutron/v4/app/params" - tokenfactorytypes "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + appparams "github.com/neutron-org/neutron/v5/app/params" + tokenfactorytypes "github.com/neutron-org/neutron/v5/x/tokenfactory/types" clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck appProvider "github.com/cosmos/interchain-security/v5/app/provider" e2e "github.com/cosmos/interchain-security/v5/testutil/integration" - "github.com/neutron-org/neutron/v4/app" - ictxstypes "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/app" + ictxstypes "github.com/neutron-org/neutron/v5/x/interchaintxs/types" providertypes "github.com/cosmos/interchain-security/v5/x/ccv/provider/types" ccv "github.com/cosmos/interchain-security/v5/x/ccv/types" diff --git a/testutil/tokenfactory/keeper/tokenfactory.go b/testutil/tokenfactory/keeper/tokenfactory.go index d122324c1..f65b1ab31 100644 --- a/testutil/tokenfactory/keeper/tokenfactory.go +++ b/testutil/tokenfactory/keeper/tokenfactory.go @@ -14,9 +14,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil" - "github.com/neutron-org/neutron/v4/x/tokenfactory/keeper" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/testutil" + "github.com/neutron-org/neutron/v5/x/tokenfactory/keeper" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) func TokenFactoryKeeper( diff --git a/testutil/transfer/keeper/keeper.go b/testutil/transfer/keeper/keeper.go index 1c241a0c3..327316343 100644 --- a/testutil/transfer/keeper/keeper.go +++ b/testutil/transfer/keeper/keeper.go @@ -19,8 +19,8 @@ import ( transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" - keeper "github.com/neutron-org/neutron/v4/x/transfer/keeper" - "github.com/neutron-org/neutron/v4/x/transfer/types" + keeper "github.com/neutron-org/neutron/v5/x/transfer/keeper" + "github.com/neutron-org/neutron/v5/x/transfer/types" ) func TransferKeeper( diff --git a/utils/bank.go b/utils/bank.go index 69dd997bf..5fa307fcb 100644 --- a/utils/bank.go +++ b/utils/bank.go @@ -6,7 +6,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" "github.com/cosmos/cosmos-sdk/types/query" ) diff --git a/utils/dcli/parsers.go b/utils/dcli/parsers.go index 7505304d1..6334dc70a 100644 --- a/utils/dcli/parsers.go +++ b/utils/dcli/parsers.go @@ -13,7 +13,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/spf13/pflag" - "github.com/neutron-org/neutron/v4/utils" + "github.com/neutron-org/neutron/v5/utils" ) // Parses arguments 1-1 from args diff --git a/utils/dcli/parsers_test.go b/utils/dcli/parsers_test.go index 3cdd7df25..79451f8f5 100644 --- a/utils/dcli/parsers_test.go +++ b/utils/dcli/parsers_test.go @@ -9,7 +9,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/utils/dcli" + "github.com/neutron-org/neutron/v5/utils/dcli" ) type testingStruct struct { diff --git a/wasmbinding/bindings/msg.go b/wasmbinding/bindings/msg.go index 8c57b202a..03d1626d4 100644 --- a/wasmbinding/bindings/msg.go +++ b/wasmbinding/bindings/msg.go @@ -7,10 +7,10 @@ import ( banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" paramChange "github.com/cosmos/cosmos-sdk/x/params/types/proposal" - dextypes "github.com/neutron-org/neutron/v4/x/dex/types" - feetypes "github.com/neutron-org/neutron/v4/x/feerefunder/types" - icqtypes "github.com/neutron-org/neutron/v4/x/interchainqueries/types" - transferwrappertypes "github.com/neutron-org/neutron/v4/x/transfer/types" + dextypes "github.com/neutron-org/neutron/v5/x/dex/types" + feetypes "github.com/neutron-org/neutron/v5/x/feerefunder/types" + icqtypes "github.com/neutron-org/neutron/v5/x/interchainqueries/types" + transferwrappertypes "github.com/neutron-org/neutron/v5/x/transfer/types" ) // ProtobufAny is a hack-struct to serialize protobuf Any message into JSON object diff --git a/wasmbinding/bindings/query.go b/wasmbinding/bindings/query.go index 88615da60..9b60fe070 100644 --- a/wasmbinding/bindings/query.go +++ b/wasmbinding/bindings/query.go @@ -6,10 +6,10 @@ import ( "cosmossdk.io/math" marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types" - contractmanagertypes "github.com/neutron-org/neutron/v4/x/contractmanager/types" - dextypes "github.com/neutron-org/neutron/v4/x/dex/types" + contractmanagertypes "github.com/neutron-org/neutron/v5/x/contractmanager/types" + dextypes "github.com/neutron-org/neutron/v5/x/dex/types" - feerefundertypes "github.com/neutron-org/neutron/v4/x/feerefunder/types" + feerefundertypes "github.com/neutron-org/neutron/v5/x/feerefunder/types" sdktypes "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" @@ -18,7 +18,7 @@ import ( oracletypes "github.com/skip-mev/slinky/x/oracle/types" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) // NeutronQuery contains neutron custom queries. diff --git a/wasmbinding/custom_querier.go b/wasmbinding/custom_querier.go index 4b37e2157..456918324 100644 --- a/wasmbinding/custom_querier.go +++ b/wasmbinding/custom_querier.go @@ -8,7 +8,7 @@ import ( wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/wasmbinding/bindings" + "github.com/neutron-org/neutron/v5/wasmbinding/bindings" ) // CustomQuerier returns a function that is an implementation of custom querier mechanism for specific messages diff --git a/wasmbinding/message_plugin.go b/wasmbinding/message_plugin.go index 8e00248d9..0eddd7d76 100644 --- a/wasmbinding/message_plugin.go +++ b/wasmbinding/message_plugin.go @@ -13,18 +13,18 @@ import ( "golang.org/x/exp/maps" - dexkeeper "github.com/neutron-org/neutron/v4/x/dex/keeper" - dextypes "github.com/neutron-org/neutron/v4/x/dex/types" - dexutils "github.com/neutron-org/neutron/v4/x/dex/utils" + dexkeeper "github.com/neutron-org/neutron/v5/x/dex/keeper" + dextypes "github.com/neutron-org/neutron/v5/x/dex/types" + dexutils "github.com/neutron-org/neutron/v5/x/dex/utils" - contractmanagerkeeper "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" + contractmanagerkeeper "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" "cosmossdk.io/errors" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - crontypes "github.com/neutron-org/neutron/v4/x/cron/types" + crontypes "github.com/neutron-org/neutron/v5/x/cron/types" - cronkeeper "github.com/neutron-org/neutron/v4/x/cron/keeper" + cronkeeper "github.com/neutron-org/neutron/v5/x/cron/keeper" paramChange "github.com/cosmos/cosmos-sdk/x/params/types/proposal" @@ -40,16 +40,16 @@ import ( bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" //nolint:staticcheck - "github.com/neutron-org/neutron/v4/wasmbinding/bindings" - icqkeeper "github.com/neutron-org/neutron/v4/x/interchainqueries/keeper" - icqtypes "github.com/neutron-org/neutron/v4/x/interchainqueries/types" - ictxkeeper "github.com/neutron-org/neutron/v4/x/interchaintxs/keeper" - ictxtypes "github.com/neutron-org/neutron/v4/x/interchaintxs/types" - transferwrapperkeeper "github.com/neutron-org/neutron/v4/x/transfer/keeper" - transferwrappertypes "github.com/neutron-org/neutron/v4/x/transfer/types" + "github.com/neutron-org/neutron/v5/wasmbinding/bindings" + icqkeeper "github.com/neutron-org/neutron/v5/x/interchainqueries/keeper" + icqtypes "github.com/neutron-org/neutron/v5/x/interchainqueries/types" + ictxkeeper "github.com/neutron-org/neutron/v5/x/interchaintxs/keeper" + ictxtypes "github.com/neutron-org/neutron/v5/x/interchaintxs/types" + transferwrapperkeeper "github.com/neutron-org/neutron/v5/x/transfer/keeper" + transferwrappertypes "github.com/neutron-org/neutron/v5/x/transfer/types" - tokenfactorykeeper "github.com/neutron-org/neutron/v4/x/tokenfactory/keeper" - tokenfactorytypes "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + tokenfactorykeeper "github.com/neutron-org/neutron/v5/x/tokenfactory/keeper" + tokenfactorytypes "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) func CustomMessageDecorator( diff --git a/wasmbinding/queries.go b/wasmbinding/queries.go index 39b602658..ddc6b6adb 100644 --- a/wasmbinding/queries.go +++ b/wasmbinding/queries.go @@ -15,16 +15,16 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkquery "github.com/cosmos/cosmos-sdk/types/query" - dextypes "github.com/neutron-org/neutron/v4/x/dex/types" + dextypes "github.com/neutron-org/neutron/v5/x/dex/types" - contractmanagertypes "github.com/neutron-org/neutron/v4/x/contractmanager/types" + contractmanagertypes "github.com/neutron-org/neutron/v5/x/contractmanager/types" marketmapkeeper "github.com/skip-mev/slinky/x/marketmap/keeper" oraclekeeper "github.com/skip-mev/slinky/x/oracle/keeper" - "github.com/neutron-org/neutron/v4/wasmbinding/bindings" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" - icatypes "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/wasmbinding/bindings" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" + icatypes "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) func (qp *QueryPlugin) GetInterchainQueryResult(ctx sdk.Context, queryID uint64) (*bindings.QueryRegisteredQueryResultResponse, error) { diff --git a/wasmbinding/query_plugin.go b/wasmbinding/query_plugin.go index d4735a36c..b079e7a3c 100644 --- a/wasmbinding/query_plugin.go +++ b/wasmbinding/query_plugin.go @@ -1,14 +1,14 @@ package wasmbinding import ( - contractmanagerkeeper "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" - dexkeeper "github.com/neutron-org/neutron/v4/x/dex/keeper" - feeburnerkeeper "github.com/neutron-org/neutron/v4/x/feeburner/keeper" - feerefunderkeeper "github.com/neutron-org/neutron/v4/x/feerefunder/keeper" - icqkeeper "github.com/neutron-org/neutron/v4/x/interchainqueries/keeper" - icacontrollerkeeper "github.com/neutron-org/neutron/v4/x/interchaintxs/keeper" + contractmanagerkeeper "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" + dexkeeper "github.com/neutron-org/neutron/v5/x/dex/keeper" + feeburnerkeeper "github.com/neutron-org/neutron/v5/x/feeburner/keeper" + feerefunderkeeper "github.com/neutron-org/neutron/v5/x/feerefunder/keeper" + icqkeeper "github.com/neutron-org/neutron/v5/x/interchainqueries/keeper" + icacontrollerkeeper "github.com/neutron-org/neutron/v5/x/interchaintxs/keeper" - tokenfactorykeeper "github.com/neutron-org/neutron/v4/x/tokenfactory/keeper" + tokenfactorykeeper "github.com/neutron-org/neutron/v5/x/tokenfactory/keeper" marketmapkeeper "github.com/skip-mev/slinky/x/marketmap/keeper" oraclekeeper "github.com/skip-mev/slinky/x/oracle/keeper" diff --git a/wasmbinding/stargate_allowlist.go b/wasmbinding/stargate_allowlist.go index 1e591374a..c0a143745 100644 --- a/wasmbinding/stargate_allowlist.go +++ b/wasmbinding/stargate_allowlist.go @@ -13,14 +13,14 @@ import ( marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types" oracletypes "github.com/skip-mev/slinky/x/oracle/types" - dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types" - - crontypes "github.com/neutron-org/neutron/v4/x/cron/types" - dextypes "github.com/neutron-org/neutron/v4/x/dex/types" - feeburnertypes "github.com/neutron-org/neutron/v4/x/feeburner/types" - interchainqueriestypes "github.com/neutron-org/neutron/v4/x/interchainqueries/types" - interchaintxstypes "github.com/neutron-org/neutron/v4/x/interchaintxs/types" - tokenfactorytypes "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + dynamicfeestypes "github.com/neutron-org/neutron/v5/x/dynamicfees/types" + + crontypes "github.com/neutron-org/neutron/v5/x/cron/types" + dextypes "github.com/neutron-org/neutron/v5/x/dex/types" + feeburnertypes "github.com/neutron-org/neutron/v5/x/feeburner/types" + interchainqueriestypes "github.com/neutron-org/neutron/v5/x/interchainqueries/types" + interchaintxstypes "github.com/neutron-org/neutron/v5/x/interchaintxs/types" + tokenfactorytypes "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) func AcceptedStargateQueries() wasmkeeper.AcceptedQueries { diff --git a/wasmbinding/test/custom_message_test.go b/wasmbinding/test/custom_message_test.go index 7ed2fc34a..709730997 100644 --- a/wasmbinding/test/custom_message_test.go +++ b/wasmbinding/test/custom_message_test.go @@ -10,28 +10,28 @@ import ( clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" ibctesting "github.com/cosmos/ibc-go/v8/testing" - contractmanagertypes "github.com/neutron-org/neutron/v4/x/contractmanager/types" - types2 "github.com/neutron-org/neutron/v4/x/cron/types" + contractmanagertypes "github.com/neutron-org/neutron/v5/x/contractmanager/types" + types2 "github.com/neutron-org/neutron/v5/x/cron/types" "cosmossdk.io/math" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" admintypes "github.com/cosmos/admin-module/v2/x/adminmodule/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - keeper2 "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" - feeburnertypes "github.com/neutron-org/neutron/v4/x/feeburner/types" + keeper2 "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" + feeburnertypes "github.com/neutron-org/neutron/v5/x/feeburner/types" ibcchanneltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" "github.com/stretchr/testify/suite" - ictxtypes "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + ictxtypes "github.com/neutron-org/neutron/v5/x/interchaintxs/types" adminkeeper "github.com/cosmos/admin-module/v2/x/adminmodule/keeper" - cronkeeper "github.com/neutron-org/neutron/v4/x/cron/keeper" + cronkeeper "github.com/neutron-org/neutron/v5/x/cron/keeper" - "github.com/neutron-org/neutron/v4/app/params" + "github.com/neutron-org/neutron/v5/app/params" "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/CosmWasm/wasmvm/v2/types" @@ -40,16 +40,16 @@ import ( ibchost "github.com/cosmos/ibc-go/v8/modules/core/exported" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/app" - "github.com/neutron-org/neutron/v4/testutil" - "github.com/neutron-org/neutron/v4/wasmbinding" - "github.com/neutron-org/neutron/v4/wasmbinding/bindings" - feetypes "github.com/neutron-org/neutron/v4/x/feerefunder/types" - icqkeeper "github.com/neutron-org/neutron/v4/x/interchainqueries/keeper" - icqtypes "github.com/neutron-org/neutron/v4/x/interchainqueries/types" - ictxkeeper "github.com/neutron-org/neutron/v4/x/interchaintxs/keeper" + "github.com/neutron-org/neutron/v5/app" + "github.com/neutron-org/neutron/v5/testutil" + "github.com/neutron-org/neutron/v5/wasmbinding" + "github.com/neutron-org/neutron/v5/wasmbinding/bindings" + feetypes "github.com/neutron-org/neutron/v5/x/feerefunder/types" + icqkeeper "github.com/neutron-org/neutron/v5/x/interchainqueries/keeper" + icqtypes "github.com/neutron-org/neutron/v5/x/interchainqueries/types" + ictxkeeper "github.com/neutron-org/neutron/v5/x/interchaintxs/keeper" - tokenfactorytypes "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + tokenfactorytypes "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) const FeeCollectorAddress = "neutron1vguuxez2h5ekltfj9gjd62fs5k4rl2zy5hfrncasykzw08rezpfsd2rhm7" diff --git a/wasmbinding/test/custom_query_test.go b/wasmbinding/test/custom_query_test.go index 781151936..d3fecbcf5 100644 --- a/wasmbinding/test/custom_query_test.go +++ b/wasmbinding/test/custom_query_test.go @@ -8,9 +8,9 @@ import ( "cosmossdk.io/math" "github.com/stretchr/testify/suite" - "github.com/neutron-org/neutron/v4/app/params" - feerefundertypes "github.com/neutron-org/neutron/v4/x/feerefunder/types" - tokenfactorytypes "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/app/params" + feerefundertypes "github.com/neutron-org/neutron/v5/x/feerefunder/types" + tokenfactorytypes "github.com/neutron-org/neutron/v5/x/tokenfactory/types" "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types" @@ -19,11 +19,11 @@ import ( host "github.com/cosmos/ibc-go/v8/modules/core/24-host" ibchost "github.com/cosmos/ibc-go/v8/modules/core/exported" - "github.com/neutron-org/neutron/v4/app" - "github.com/neutron-org/neutron/v4/testutil" - "github.com/neutron-org/neutron/v4/wasmbinding/bindings" - icqtypes "github.com/neutron-org/neutron/v4/x/interchainqueries/types" - ictxtypes "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/app" + "github.com/neutron-org/neutron/v5/testutil" + "github.com/neutron-org/neutron/v5/wasmbinding/bindings" + icqtypes "github.com/neutron-org/neutron/v5/x/interchainqueries/types" + ictxtypes "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) type CustomQuerierTestSuite struct { diff --git a/wasmbinding/wasm.go b/wasmbinding/wasm.go index 63559cfa1..2752118e4 100644 --- a/wasmbinding/wasm.go +++ b/wasmbinding/wasm.go @@ -4,21 +4,21 @@ import ( wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - contractmanagerkeeper "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" - cronkeeper "github.com/neutron-org/neutron/v4/x/cron/keeper" - dexkeeper "github.com/neutron-org/neutron/v4/x/dex/keeper" - feeburnerkeeper "github.com/neutron-org/neutron/v4/x/feeburner/keeper" - feerefunderkeeper "github.com/neutron-org/neutron/v4/x/feerefunder/keeper" + contractmanagerkeeper "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" + cronkeeper "github.com/neutron-org/neutron/v5/x/cron/keeper" + dexkeeper "github.com/neutron-org/neutron/v5/x/dex/keeper" + feeburnerkeeper "github.com/neutron-org/neutron/v5/x/feeburner/keeper" + feerefunderkeeper "github.com/neutron-org/neutron/v5/x/feerefunder/keeper" adminmodulekeeper "github.com/cosmos/admin-module/v2/x/adminmodule/keeper" marketmapkeeper "github.com/skip-mev/slinky/x/marketmap/keeper" oraclekeeper "github.com/skip-mev/slinky/x/oracle/keeper" - interchainqueriesmodulekeeper "github.com/neutron-org/neutron/v4/x/interchainqueries/keeper" - interchaintransactionsmodulekeeper "github.com/neutron-org/neutron/v4/x/interchaintxs/keeper" - tokenfactorykeeper "github.com/neutron-org/neutron/v4/x/tokenfactory/keeper" - transfer "github.com/neutron-org/neutron/v4/x/transfer/keeper" + interchainqueriesmodulekeeper "github.com/neutron-org/neutron/v5/x/interchainqueries/keeper" + interchaintransactionsmodulekeeper "github.com/neutron-org/neutron/v5/x/interchaintxs/keeper" + tokenfactorykeeper "github.com/neutron-org/neutron/v5/x/tokenfactory/keeper" + transfer "github.com/neutron-org/neutron/v5/x/transfer/keeper" ) // RegisterCustomPlugins returns wasmkeeper.Option that we can use to connect handlers for implemented custom queries and messages to the App diff --git a/x/contractmanager/client/cli/query.go b/x/contractmanager/client/cli/query.go index 7771015c6..7d9187cea 100644 --- a/x/contractmanager/client/cli/query.go +++ b/x/contractmanager/client/cli/query.go @@ -8,7 +8,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) // GetQueryCmd returns the cli query commands for this module diff --git a/x/contractmanager/client/cli/query_failure.go b/x/contractmanager/client/cli/query_failure.go index 6898b88f9..d990b4290 100644 --- a/x/contractmanager/client/cli/query_failure.go +++ b/x/contractmanager/client/cli/query_failure.go @@ -12,7 +12,7 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth/tx" "github.com/spf13/cobra" - contractmanagertypes "github.com/neutron-org/neutron/v4/x/contractmanager/types" + contractmanagertypes "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) func CmdFailures() *cobra.Command { diff --git a/x/contractmanager/client/cli/query_failure_test.go b/x/contractmanager/client/cli/query_failure_test.go index 7d1b94b74..b95e87ff6 100644 --- a/x/contractmanager/client/cli/query_failure_test.go +++ b/x/contractmanager/client/cli/query_failure_test.go @@ -6,9 +6,9 @@ import ( "strconv" "testing" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" tmcli "github.com/cometbft/cometbft/libs/cli" "github.com/cosmos/cosmos-sdk/client/flags" @@ -20,9 +20,9 @@ import ( sdktypes "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/testutil/contractmanager/network" - "github.com/neutron-org/neutron/v4/x/contractmanager/client/cli" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/testutil/contractmanager/network" + "github.com/neutron-org/neutron/v5/x/contractmanager/client/cli" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) func networkWithFailureObjects(t *testing.T, n int) (*network.Network, []types.Failure) { diff --git a/x/contractmanager/client/cli/query_params.go b/x/contractmanager/client/cli/query_params.go index 04d930c1e..75b4bac5c 100644 --- a/x/contractmanager/client/cli/query_params.go +++ b/x/contractmanager/client/cli/query_params.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) func CmdQueryParams() *cobra.Command { diff --git a/x/contractmanager/genesis.go b/x/contractmanager/genesis.go index 14b43d835..73122a8ba 100644 --- a/x/contractmanager/genesis.go +++ b/x/contractmanager/genesis.go @@ -3,8 +3,8 @@ package contractmanager import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) // InitGenesis initializes the module's state from a provided genesis state. diff --git a/x/contractmanager/genesis_test.go b/x/contractmanager/genesis_test.go index 449f43d9b..f383b7ae0 100644 --- a/x/contractmanager/genesis_test.go +++ b/x/contractmanager/genesis_test.go @@ -3,17 +3,17 @@ package contractmanager_test import ( "testing" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" - "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" + "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" "github.com/stretchr/testify/require" - keepertest "github.com/neutron-org/neutron/v4/testutil/contractmanager/keeper" - "github.com/neutron-org/neutron/v4/x/contractmanager" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + keepertest "github.com/neutron-org/neutron/v5/testutil/contractmanager/keeper" + "github.com/neutron-org/neutron/v5/x/contractmanager" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) func TestGenesis(t *testing.T) { diff --git a/x/contractmanager/ibc_middleware.go b/x/contractmanager/ibc_middleware.go index 70e51466d..53f9b7bf7 100644 --- a/x/contractmanager/ibc_middleware.go +++ b/x/contractmanager/ibc_middleware.go @@ -9,8 +9,8 @@ import ( wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" - contractmanagerkeeper "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" - contractmanagertypes "github.com/neutron-org/neutron/v4/x/contractmanager/types" + contractmanagerkeeper "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" + contractmanagertypes "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) type SudoLimitWrapper struct { diff --git a/x/contractmanager/ibc_middleware_test.go b/x/contractmanager/ibc_middleware_test.go index ea95a8b46..2cf1ad8b1 100644 --- a/x/contractmanager/ibc_middleware_test.go +++ b/x/contractmanager/ibc_middleware_test.go @@ -9,10 +9,10 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" - test_keeper "github.com/neutron-org/neutron/v4/testutil/interchaintxs/keeper" - mock_types "github.com/neutron-org/neutron/v4/testutil/mocks/contractmanager/types" - contractmanagerkeeper "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + test_keeper "github.com/neutron-org/neutron/v5/testutil/interchaintxs/keeper" + mock_types "github.com/neutron-org/neutron/v5/testutil/mocks/contractmanager/types" + contractmanagerkeeper "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) var ( diff --git a/x/contractmanager/keeper/failure.go b/x/contractmanager/keeper/failure.go index 5ffe886b1..4774ee978 100644 --- a/x/contractmanager/keeper/failure.go +++ b/x/contractmanager/keeper/failure.go @@ -11,7 +11,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) // AddContractFailure adds a specific failure to the store. The provided address is used to determine diff --git a/x/contractmanager/keeper/failure_test.go b/x/contractmanager/keeper/failure_test.go index 8e3a62ff8..d3e026faa 100644 --- a/x/contractmanager/keeper/failure_test.go +++ b/x/contractmanager/keeper/failure_test.go @@ -7,12 +7,12 @@ import ( "strconv" "testing" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" "github.com/golang/mock/gomock" - "github.com/neutron-org/neutron/v4/testutil" - mock_types "github.com/neutron-org/neutron/v4/testutil/mocks/contractmanager/types" + "github.com/neutron-org/neutron/v5/testutil" + mock_types "github.com/neutron-org/neutron/v5/testutil/mocks/contractmanager/types" channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" @@ -20,9 +20,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - keepertest "github.com/neutron-org/neutron/v4/testutil/contractmanager/keeper" - "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + keepertest "github.com/neutron-org/neutron/v5/testutil/contractmanager/keeper" + "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) // Prevent strconv unused error diff --git a/x/contractmanager/keeper/grpc_query.go b/x/contractmanager/keeper/grpc_query.go index 332b980be..c8c613f21 100644 --- a/x/contractmanager/keeper/grpc_query.go +++ b/x/contractmanager/keeper/grpc_query.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) var _ types.QueryServer = Keeper{} diff --git a/x/contractmanager/keeper/grpc_query_failure.go b/x/contractmanager/keeper/grpc_query_failure.go index 27b547acf..dfb82f13c 100644 --- a/x/contractmanager/keeper/grpc_query_failure.go +++ b/x/contractmanager/keeper/grpc_query_failure.go @@ -9,7 +9,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) const FailuresQueryMaxLimit uint64 = query.DefaultLimit diff --git a/x/contractmanager/keeper/grpc_query_failure_test.go b/x/contractmanager/keeper/grpc_query_failure_test.go index 88fee35b1..89d26889f 100644 --- a/x/contractmanager/keeper/grpc_query_failure_test.go +++ b/x/contractmanager/keeper/grpc_query_failure_test.go @@ -4,16 +4,16 @@ import ( "strconv" "testing" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" "github.com/cosmos/cosmos-sdk/types/query" "github.com/stretchr/testify/require" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - keepertest "github.com/neutron-org/neutron/v4/testutil/contractmanager/keeper" - "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + keepertest "github.com/neutron-org/neutron/v5/testutil/contractmanager/keeper" + "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) // Prevent strconv unused error diff --git a/x/contractmanager/keeper/grpc_query_params.go b/x/contractmanager/keeper/grpc_query_params.go index d87dd6700..d7eae160a 100644 --- a/x/contractmanager/keeper/grpc_query_params.go +++ b/x/contractmanager/keeper/grpc_query_params.go @@ -7,7 +7,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { diff --git a/x/contractmanager/keeper/grpc_query_params_test.go b/x/contractmanager/keeper/grpc_query_params_test.go index 10cdb3027..7d7e01292 100644 --- a/x/contractmanager/keeper/grpc_query_params_test.go +++ b/x/contractmanager/keeper/grpc_query_params_test.go @@ -5,8 +5,8 @@ import ( "github.com/stretchr/testify/require" - testkeeper "github.com/neutron-org/neutron/v4/testutil/contractmanager/keeper" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + testkeeper "github.com/neutron-org/neutron/v5/testutil/contractmanager/keeper" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) func TestParamsQuery(t *testing.T) { diff --git a/x/contractmanager/keeper/keeper.go b/x/contractmanager/keeper/keeper.go index 6d46ffe1f..02e92a200 100644 --- a/x/contractmanager/keeper/keeper.go +++ b/x/contractmanager/keeper/keeper.go @@ -8,7 +8,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) type ( diff --git a/x/contractmanager/keeper/migrations.go b/x/contractmanager/keeper/migrations.go index f9a2d6fb2..225414080 100644 --- a/x/contractmanager/keeper/migrations.go +++ b/x/contractmanager/keeper/migrations.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - v2 "github.com/neutron-org/neutron/v4/x/contractmanager/migrations/v2" + v2 "github.com/neutron-org/neutron/v5/x/contractmanager/migrations/v2" ) // Migrator is a struct for handling in-place store migrations. diff --git a/x/contractmanager/keeper/msg_server.go b/x/contractmanager/keeper/msg_server.go index 25ae24790..5e204b6fb 100644 --- a/x/contractmanager/keeper/msg_server.go +++ b/x/contractmanager/keeper/msg_server.go @@ -7,7 +7,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) type msgServer struct { diff --git a/x/contractmanager/keeper/msg_server_test.go b/x/contractmanager/keeper/msg_server_test.go index f15ffb263..cf92345f5 100644 --- a/x/contractmanager/keeper/msg_server_test.go +++ b/x/contractmanager/keeper/msg_server_test.go @@ -5,8 +5,8 @@ import ( "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil/contractmanager/keeper" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/testutil/contractmanager/keeper" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) func TestMsgUpdateParamsValidate(t *testing.T) { diff --git a/x/contractmanager/keeper/params.go b/x/contractmanager/keeper/params.go index 6ae050c69..f7bd489cf 100644 --- a/x/contractmanager/keeper/params.go +++ b/x/contractmanager/keeper/params.go @@ -5,7 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) // GetParams get all parameters as types.Params diff --git a/x/contractmanager/keeper/params_test.go b/x/contractmanager/keeper/params_test.go index 2a11eb22d..9fe57549e 100644 --- a/x/contractmanager/keeper/params_test.go +++ b/x/contractmanager/keeper/params_test.go @@ -5,8 +5,8 @@ import ( "github.com/stretchr/testify/require" - testkeeper "github.com/neutron-org/neutron/v4/testutil/contractmanager/keeper" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + testkeeper "github.com/neutron-org/neutron/v5/testutil/contractmanager/keeper" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) func TestGetParams(t *testing.T) { diff --git a/x/contractmanager/keeper/sudo.go b/x/contractmanager/keeper/sudo.go index 93d8642ce..d813f5567 100644 --- a/x/contractmanager/keeper/sudo.go +++ b/x/contractmanager/keeper/sudo.go @@ -14,7 +14,7 @@ import ( ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) func (k Keeper) HasContractInfo(ctx context.Context, contractAddress sdk.AccAddress) bool { diff --git a/x/contractmanager/keeper/sudo_test.go b/x/contractmanager/keeper/sudo_test.go index 4de22fa97..5995a5293 100644 --- a/x/contractmanager/keeper/sudo_test.go +++ b/x/contractmanager/keeper/sudo_test.go @@ -5,16 +5,16 @@ import ( "fmt" "testing" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil" - keepertest "github.com/neutron-org/neutron/v4/testutil/contractmanager/keeper" - mock_types "github.com/neutron-org/neutron/v4/testutil/mocks/contractmanager/types" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/testutil" + keepertest "github.com/neutron-org/neutron/v5/testutil/contractmanager/keeper" + mock_types "github.com/neutron-org/neutron/v5/testutil/mocks/contractmanager/types" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) func init() { diff --git a/x/contractmanager/migrations/v2/store.go b/x/contractmanager/migrations/v2/store.go index d64c4f18e..a179a4d0e 100644 --- a/x/contractmanager/migrations/v2/store.go +++ b/x/contractmanager/migrations/v2/store.go @@ -5,7 +5,7 @@ import ( storetypes "cosmossdk.io/store/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) // MigrateStore performs in-place store migrations. diff --git a/x/contractmanager/migrations/v2/store_test.go b/x/contractmanager/migrations/v2/store_test.go index 90f905e52..5206582ef 100644 --- a/x/contractmanager/migrations/v2/store_test.go +++ b/x/contractmanager/migrations/v2/store_test.go @@ -6,10 +6,10 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/suite" - "github.com/neutron-org/neutron/v4/testutil" - v2 "github.com/neutron-org/neutron/v4/x/contractmanager/migrations/v2" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" - typesv1 "github.com/neutron-org/neutron/v4/x/contractmanager/types/v1" + "github.com/neutron-org/neutron/v5/testutil" + v2 "github.com/neutron-org/neutron/v5/x/contractmanager/migrations/v2" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" + typesv1 "github.com/neutron-org/neutron/v5/x/contractmanager/types/v1" ) type V2ContractManagerMigrationTestSuite struct { diff --git a/x/contractmanager/module.go b/x/contractmanager/module.go index 7941d6f85..96ae997cd 100644 --- a/x/contractmanager/module.go +++ b/x/contractmanager/module.go @@ -21,9 +21,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - "github.com/neutron-org/neutron/v4/x/contractmanager/client/cli" - "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/x/contractmanager/client/cli" + "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) var ( diff --git a/x/contractmanager/types/failure.pb.go b/x/contractmanager/types/failure.pb.go index 635899d81..50379216e 100644 --- a/x/contractmanager/types/failure.pb.go +++ b/x/contractmanager/types/failure.pb.go @@ -122,9 +122,9 @@ var fileDescriptor_fba0c26e85dad46e = []byte{ 0xfc, 0x22, 0x09, 0x16, 0xb0, 0x51, 0x10, 0x8e, 0x53, 0xf0, 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x38, 0xe1, 0xb1, 0x1c, 0xc3, 0x85, 0xc7, 0x72, 0x0c, 0x37, 0x1e, 0xcb, 0x31, 0x44, 0x59, 0xa6, 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea, - 0x43, 0xbd, 0xa3, 0x9b, 0x5f, 0x94, 0x0e, 0x63, 0xeb, 0x97, 0x99, 0xe8, 0x57, 0x60, 0x04, 0x43, + 0x43, 0xbd, 0xa3, 0x9b, 0x5f, 0x94, 0x0e, 0x63, 0xeb, 0x97, 0x99, 0xea, 0x57, 0x60, 0x04, 0x43, 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, 0xd8, 0x27, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x5c, 0xc6, 0x5f, 0x6f, 0x2e, 0x01, 0x00, 0x00, + 0xaf, 0x56, 0xad, 0x59, 0x2e, 0x01, 0x00, 0x00, } func (m *Failure) Marshal() (dAtA []byte, err error) { diff --git a/x/contractmanager/types/genesis.pb.go b/x/contractmanager/types/genesis.pb.go index fbf415eda..89a99d0a0 100644 --- a/x/contractmanager/types/genesis.pb.go +++ b/x/contractmanager/types/genesis.pb.go @@ -100,9 +100,9 @@ var fileDescriptor_cf4a1534315a7490 = []byte{ 0x44, 0x35, 0xd4, 0x18, 0x1e, 0x98, 0x66, 0x9f, 0xcc, 0xe2, 0x12, 0xa7, 0xe0, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0xb2, 0x4c, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, - 0xce, 0xcf, 0xd5, 0x87, 0x9a, 0xac, 0x9b, 0x5f, 0x94, 0x0e, 0x63, 0xeb, 0x97, 0x99, 0xe8, 0x57, + 0xce, 0xcf, 0xd5, 0x87, 0x9a, 0xac, 0x9b, 0x5f, 0x94, 0x0e, 0x63, 0xeb, 0x97, 0x99, 0xea, 0x57, 0x60, 0x78, 0xbc, 0xa4, 0xb2, 0x20, 0xb5, 0x38, 0x89, 0x0d, 0xec, 0x71, 0x63, 0x40, 0x00, 0x00, - 0x00, 0xff, 0xff, 0x2d, 0x60, 0xd9, 0xc7, 0x9d, 0x01, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xde, 0xf0, 0x2b, 0xf1, 0x9d, 0x01, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/contractmanager/types/genesis_test.go b/x/contractmanager/types/genesis_test.go index 4ecf069c8..ae4c201a0 100644 --- a/x/contractmanager/types/genesis_test.go +++ b/x/contractmanager/types/genesis_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" ) func TestGenesisState_Validate(t *testing.T) { diff --git a/x/contractmanager/types/params.pb.go b/x/contractmanager/types/params.pb.go index a3294bbd0..dc4c2cef7 100644 --- a/x/contractmanager/types/params.pb.go +++ b/x/contractmanager/types/params.pb.go @@ -87,9 +87,9 @@ var fileDescriptor_121b05e48c7a8737 = []byte{ 0xdc, 0x13, 0x8b, 0x7d, 0x40, 0xe2, 0x56, 0x2c, 0x33, 0x16, 0xc8, 0x33, 0x38, 0x05, 0x9f, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x65, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, - 0x5e, 0x72, 0x7e, 0xae, 0x3e, 0xd4, 0x49, 0xba, 0xf9, 0x45, 0xe9, 0x30, 0xb6, 0x7e, 0x99, 0x89, + 0x5e, 0x72, 0x7e, 0xae, 0x3e, 0xd4, 0x49, 0xba, 0xf9, 0x45, 0xe9, 0x30, 0xb6, 0x7e, 0x99, 0xa9, 0x7e, 0x05, 0x86, 0x4f, 0x4a, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x4e, 0x33, 0x06, 0x04, - 0x00, 0x00, 0xff, 0xff, 0xa9, 0x1e, 0x26, 0x1c, 0xf1, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x5a, 0x8e, 0xd4, 0x2a, 0xf1, 0x00, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/contractmanager/types/query.pb.go b/x/contractmanager/types/query.pb.go index 031468e29..b18090f3f 100644 --- a/x/contractmanager/types/query.pb.go +++ b/x/contractmanager/types/query.pb.go @@ -335,12 +335,12 @@ func init() { var fileDescriptor_f9524a427f219917 = []byte{ // 557 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0x41, 0x4f, 0x13, 0x41, - 0x1c, 0xc5, 0x3b, 0x05, 0x0a, 0x8c, 0x89, 0x26, 0x63, 0x8d, 0x4d, 0xa3, 0xdb, 0xb2, 0xa8, 0xa0, - 0xd8, 0x99, 0x00, 0x1e, 0xd4, 0xc4, 0x04, 0x7b, 0xc0, 0x78, 0x31, 0xb8, 0x7a, 0x30, 0x5e, 0xcc, - 0xb4, 0x1d, 0xd7, 0x4d, 0xe8, 0xce, 0xb2, 0x33, 0x4b, 0x20, 0x84, 0x8b, 0x17, 0x2f, 0x1e, 0x4c, - 0xf4, 0x23, 0xe8, 0xd9, 0xaf, 0xc1, 0x91, 0xc4, 0x8b, 0x27, 0x63, 0x5a, 0x3f, 0x88, 0xe9, 0xcc, - 0xbf, 0x85, 0x85, 0xac, 0xdb, 0x5e, 0xbc, 0x6d, 0xa7, 0xef, 0xbd, 0xff, 0x6f, 0xdf, 0xfc, 0x5b, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0x41, 0x6b, 0x13, 0x41, + 0x1c, 0xc5, 0x33, 0x69, 0x9b, 0xb6, 0x23, 0x28, 0x8c, 0x11, 0x43, 0xd0, 0x4d, 0xba, 0x55, 0x5b, + 0xad, 0x99, 0xa1, 0x2d, 0x82, 0x0a, 0x42, 0xcd, 0xa1, 0xe2, 0x45, 0xea, 0xea, 0x41, 0xbc, 0xc8, + 0x24, 0x19, 0xd7, 0x85, 0x66, 0x67, 0xbb, 0x33, 0x5b, 0x5a, 0x4a, 0x2f, 0x5e, 0xbc, 0x78, 0x10, + 0xf4, 0x23, 0xe8, 0xd9, 0xaf, 0xd1, 0x63, 0xc1, 0x8b, 0x27, 0x91, 0xc4, 0x0f, 0x22, 0x99, 0xf9, + 0x27, 0xed, 0xb6, 0xac, 0x9b, 0x5c, 0xbc, 0x6d, 0x26, 0xef, 0xbd, 0xff, 0x6f, 0xdf, 0xfc, 0x13, 0xbc, 0x18, 0x8a, 0x44, 0xc7, 0x32, 0x64, 0x6d, 0x19, 0xea, 0x98, 0xb7, 0x75, 0x97, 0x87, 0xdc, 0x17, 0x31, 0xdb, 0x49, 0x44, 0xbc, 0x4f, 0xa3, 0x58, 0x6a, 0x49, 0xae, 0x82, 0x88, 0x9e, 0x11, 0x55, 0xef, 0xb4, 0xa5, 0xea, 0x4a, 0xc5, 0x5a, 0x5c, 0x09, 0xeb, 0x60, 0xbb, 0xab, 0x2d, 0xa1, @@ -369,7 +369,7 @@ var fileDescriptor_f9524a427f219917 = []byte{ 0x41, 0xbf, 0x7b, 0x0e, 0xfa, 0xd4, 0x77, 0x0a, 0xc7, 0x7d, 0xa7, 0xf0, 0xb3, 0xef, 0x14, 0x5e, 0x3f, 0xf0, 0x03, 0xfd, 0x2e, 0x69, 0xd1, 0xb6, 0xec, 0x0e, 0x63, 0x1a, 0x32, 0xf6, 0x47, 0x91, 0xbb, 0xf7, 0xd8, 0xde, 0xb9, 0x5c, 0xbd, 0x1f, 0x09, 0xd5, 0x2a, 0x99, 0x3f, 0xc7, 0xf5, 0xbf, - 0x01, 0x00, 0x00, 0xff, 0xff, 0x22, 0xf1, 0x02, 0x83, 0x09, 0x06, 0x00, 0x00, + 0x01, 0x00, 0x00, 0xff, 0xff, 0xd1, 0x61, 0xf0, 0xb5, 0x09, 0x06, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/contractmanager/types/tx.pb.go b/x/contractmanager/types/tx.pb.go index 3a69490ae..2e1a57005 100644 --- a/x/contractmanager/types/tx.pb.go +++ b/x/contractmanager/types/tx.pb.go @@ -159,8 +159,8 @@ var fileDescriptor_4dc444ed708d435f = []byte{ 0xa7, 0xe0, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0xb2, 0x4c, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x87, 0x1a, 0xae, 0x9b, 0x5f, 0x94, 0x0e, 0x63, - 0xeb, 0x97, 0x99, 0xe8, 0x57, 0x60, 0x26, 0xa6, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0x70, 0xa4, - 0x19, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xb0, 0xe1, 0xbf, 0xee, 0x74, 0x02, 0x00, 0x00, + 0xeb, 0x97, 0x99, 0xea, 0x57, 0x60, 0x26, 0xa6, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0x70, 0xa4, + 0x19, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x43, 0x71, 0x4d, 0xd8, 0x74, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/contractmanager/types/v1/failure.pb.go b/x/contractmanager/types/v1/failure.pb.go index 597eb369b..4eadc5395 100644 --- a/x/contractmanager/types/v1/failure.pb.go +++ b/x/contractmanager/types/v1/failure.pb.go @@ -127,9 +127,9 @@ var fileDescriptor_c0f2c436fd0f28b7 = []byte{ 0x09, 0xc9, 0xd9, 0x21, 0x95, 0x05, 0xa9, 0x4e, 0x61, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, 0x10, 0x65, 0x93, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x0f, - 0xf5, 0x87, 0x6e, 0x7e, 0x51, 0x3a, 0x8c, 0xad, 0x5f, 0x66, 0xa2, 0x5f, 0x81, 0x11, 0x04, 0x20, + 0xf5, 0x87, 0x6e, 0x7e, 0x51, 0x3a, 0x8c, 0xad, 0x5f, 0x66, 0xaa, 0x5f, 0x81, 0x11, 0x04, 0x20, 0x2b, 0x8a, 0xf5, 0xcb, 0x0c, 0x93, 0xd8, 0xc0, 0x21, 0x60, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, - 0xd7, 0xff, 0xd9, 0x5a, 0x2d, 0x01, 0x00, 0x00, + 0x42, 0x2b, 0xa9, 0xcf, 0x2d, 0x01, 0x00, 0x00, } func (m *Failure) Marshal() (dAtA []byte, err error) { diff --git a/x/cron/client/cli/query.go b/x/cron/client/cli/query.go index 8dc195133..0b8d433e1 100644 --- a/x/cron/client/cli/query.go +++ b/x/cron/client/cli/query.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/x/cron/types" ) // GetQueryCmd returns the cli query commands for this module diff --git a/x/cron/client/cli/query_params.go b/x/cron/client/cli/query_params.go index 3a8de94e3..0500a73ce 100644 --- a/x/cron/client/cli/query_params.go +++ b/x/cron/client/cli/query_params.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/x/cron/types" ) func CmdQueryParams() *cobra.Command { diff --git a/x/cron/client/cli/query_schedule.go b/x/cron/client/cli/query_schedule.go index 4b11241c3..08142d832 100644 --- a/x/cron/client/cli/query_schedule.go +++ b/x/cron/client/cli/query_schedule.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/x/cron/types" ) func CmdListSchedule() *cobra.Command { diff --git a/x/cron/client/cli/query_schedule_test.go b/x/cron/client/cli/query_schedule_test.go index 7cec8578f..399ed6abe 100644 --- a/x/cron/client/cli/query_schedule_test.go +++ b/x/cron/client/cli/query_schedule_test.go @@ -12,10 +12,10 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - "github.com/neutron-org/neutron/v4/testutil/cron/network" - "github.com/neutron-org/neutron/v4/x/cron/client/cli" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + "github.com/neutron-org/neutron/v5/testutil/cron/network" + "github.com/neutron-org/neutron/v5/x/cron/client/cli" + "github.com/neutron-org/neutron/v5/x/cron/types" ) func networkWithScheduleObjects(t *testing.T, n int) (*network.Network, []types.Schedule) { diff --git a/x/cron/client/cli/tx.go b/x/cron/client/cli/tx.go index 7e7182ef5..565daeb0d 100644 --- a/x/cron/client/cli/tx.go +++ b/x/cron/client/cli/tx.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/x/cron/types" ) // GetTxCmd returns the transaction commands for this module diff --git a/x/cron/genesis.go b/x/cron/genesis.go index 525840e26..78b82c5ae 100644 --- a/x/cron/genesis.go +++ b/x/cron/genesis.go @@ -3,8 +3,8 @@ package cron import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/cron/keeper" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/x/cron/keeper" + "github.com/neutron-org/neutron/v5/x/cron/types" ) // InitGenesis initializes the module's state from a provided genesis state. diff --git a/x/cron/genesis_test.go b/x/cron/genesis_test.go index 4b9f2e474..c9efb9e10 100644 --- a/x/cron/genesis_test.go +++ b/x/cron/genesis_test.go @@ -5,10 +5,10 @@ import ( "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - "github.com/neutron-org/neutron/v4/testutil/cron/keeper" - "github.com/neutron-org/neutron/v4/x/cron" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + "github.com/neutron-org/neutron/v5/testutil/cron/keeper" + "github.com/neutron-org/neutron/v5/x/cron" + "github.com/neutron-org/neutron/v5/x/cron/types" ) func TestGenesis(t *testing.T) { diff --git a/x/cron/keeper/grpc_query.go b/x/cron/keeper/grpc_query.go index 865fab29f..50017a573 100644 --- a/x/cron/keeper/grpc_query.go +++ b/x/cron/keeper/grpc_query.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/x/cron/types" ) var _ types.QueryServer = Keeper{} diff --git a/x/cron/keeper/grpc_query_params.go b/x/cron/keeper/grpc_query_params.go index d2bad8b5d..a646a7abb 100644 --- a/x/cron/keeper/grpc_query_params.go +++ b/x/cron/keeper/grpc_query_params.go @@ -7,7 +7,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/x/cron/types" ) func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { diff --git a/x/cron/keeper/grpc_query_params_test.go b/x/cron/keeper/grpc_query_params_test.go index c84ef335c..64d1d4a13 100644 --- a/x/cron/keeper/grpc_query_params_test.go +++ b/x/cron/keeper/grpc_query_params_test.go @@ -3,11 +3,11 @@ package keeper_test import ( "testing" - testkeeper "github.com/neutron-org/neutron/v4/testutil/cron/keeper" + testkeeper "github.com/neutron-org/neutron/v5/testutil/cron/keeper" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/x/cron/types" ) func TestParamsQuery(t *testing.T) { diff --git a/x/cron/keeper/grpc_query_schedule.go b/x/cron/keeper/grpc_query_schedule.go index 0e060c016..4b4d1d5ee 100644 --- a/x/cron/keeper/grpc_query_schedule.go +++ b/x/cron/keeper/grpc_query_schedule.go @@ -9,7 +9,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/x/cron/types" ) func (k Keeper) Schedules(c context.Context, req *types.QuerySchedulesRequest) (*types.QuerySchedulesResponse, error) { diff --git a/x/cron/keeper/grpc_query_schedule_test.go b/x/cron/keeper/grpc_query_schedule_test.go index a132fc8d4..12bb5c1f3 100644 --- a/x/cron/keeper/grpc_query_schedule_test.go +++ b/x/cron/keeper/grpc_query_schedule_test.go @@ -10,10 +10,10 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - testutil_keeper "github.com/neutron-org/neutron/v4/testutil/cron/keeper" - cronkeeper "github.com/neutron-org/neutron/v4/x/cron/keeper" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + testutil_keeper "github.com/neutron-org/neutron/v5/testutil/cron/keeper" + cronkeeper "github.com/neutron-org/neutron/v5/x/cron/keeper" + "github.com/neutron-org/neutron/v5/x/cron/types" ) // Prevent strconv unused error diff --git a/x/cron/keeper/keeper.go b/x/cron/keeper/keeper.go index 070f18b2d..18d45263d 100644 --- a/x/cron/keeper/keeper.go +++ b/x/cron/keeper/keeper.go @@ -17,7 +17,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/x/cron/types" ) var ( diff --git a/x/cron/keeper/keeper_test.go b/x/cron/keeper/keeper_test.go index d58553c56..790068b94 100644 --- a/x/cron/keeper/keeper_test.go +++ b/x/cron/keeper/keeper_test.go @@ -12,10 +12,10 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil" - testutil_keeper "github.com/neutron-org/neutron/v4/testutil/cron/keeper" - mock_types "github.com/neutron-org/neutron/v4/testutil/mocks/cron/types" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/testutil" + testutil_keeper "github.com/neutron-org/neutron/v5/testutil/cron/keeper" + mock_types "github.com/neutron-org/neutron/v5/testutil/mocks/cron/types" + "github.com/neutron-org/neutron/v5/x/cron/types" ) // ExecuteReadySchedules: diff --git a/x/cron/keeper/migrations.go b/x/cron/keeper/migrations.go index 0166a8da9..b4c394bb1 100644 --- a/x/cron/keeper/migrations.go +++ b/x/cron/keeper/migrations.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - v2 "github.com/neutron-org/neutron/v4/x/cron/migrations/v2" + v2 "github.com/neutron-org/neutron/v5/x/cron/migrations/v2" ) // Migrator is a struct for handling in-place store migrations. diff --git a/x/cron/keeper/msg_server.go b/x/cron/keeper/msg_server.go index c42a0d1c4..ccb0bcbc4 100644 --- a/x/cron/keeper/msg_server.go +++ b/x/cron/keeper/msg_server.go @@ -7,7 +7,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/x/cron/types" ) type msgServer struct { diff --git a/x/cron/keeper/msg_server_test.go b/x/cron/keeper/msg_server_test.go index ef10b1ffc..b8f318515 100644 --- a/x/cron/keeper/msg_server_test.go +++ b/x/cron/keeper/msg_server_test.go @@ -5,10 +5,10 @@ import ( "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil" - testkeeper "github.com/neutron-org/neutron/v4/testutil/cron/keeper" - cronkeeper "github.com/neutron-org/neutron/v4/x/cron/keeper" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/testutil" + testkeeper "github.com/neutron-org/neutron/v5/testutil/cron/keeper" + cronkeeper "github.com/neutron-org/neutron/v5/x/cron/keeper" + "github.com/neutron-org/neutron/v5/x/cron/types" ) func TestMsgAddScheduleValidate(t *testing.T) { diff --git a/x/cron/keeper/params.go b/x/cron/keeper/params.go index 5d0b64820..81b7321e4 100644 --- a/x/cron/keeper/params.go +++ b/x/cron/keeper/params.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/x/cron/types" ) // GetParams get all parameters as types.Params diff --git a/x/cron/keeper/params_test.go b/x/cron/keeper/params_test.go index c31624ca9..be0630f66 100644 --- a/x/cron/keeper/params_test.go +++ b/x/cron/keeper/params_test.go @@ -3,15 +3,15 @@ package keeper_test import ( "testing" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" - "github.com/neutron-org/neutron/v4/testutil" + "github.com/neutron-org/neutron/v5/testutil" - testkeeper "github.com/neutron-org/neutron/v4/testutil/cron/keeper" + testkeeper "github.com/neutron-org/neutron/v5/testutil/cron/keeper" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/x/cron/types" ) func TestGetParams(t *testing.T) { diff --git a/x/cron/migrations/v2/store.go b/x/cron/migrations/v2/store.go index f3311aba0..dae71e591 100644 --- a/x/cron/migrations/v2/store.go +++ b/x/cron/migrations/v2/store.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/x/cron/types" ) // MigrateStore performs in-place store migrations. diff --git a/x/cron/migrations/v2/store_test.go b/x/cron/migrations/v2/store_test.go index 6b6f46355..a1a3c4fef 100644 --- a/x/cron/migrations/v2/store_test.go +++ b/x/cron/migrations/v2/store_test.go @@ -6,10 +6,10 @@ import ( "cosmossdk.io/store/prefix" "github.com/stretchr/testify/suite" - "github.com/neutron-org/neutron/v4/testutil" - v2 "github.com/neutron-org/neutron/v4/x/cron/migrations/v2" - "github.com/neutron-org/neutron/v4/x/cron/types" - v1types "github.com/neutron-org/neutron/v4/x/cron/types/v1" + "github.com/neutron-org/neutron/v5/testutil" + v2 "github.com/neutron-org/neutron/v5/x/cron/migrations/v2" + "github.com/neutron-org/neutron/v5/x/cron/types" + v1types "github.com/neutron-org/neutron/v5/x/cron/types/v1" ) type V2CronMigrationTestSuite struct { diff --git a/x/cron/module.go b/x/cron/module.go index f9957651e..e86ee8745 100644 --- a/x/cron/module.go +++ b/x/cron/module.go @@ -20,9 +20,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - "github.com/neutron-org/neutron/v4/x/cron/client/cli" - "github.com/neutron-org/neutron/v4/x/cron/keeper" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/x/cron/client/cli" + "github.com/neutron-org/neutron/v5/x/cron/keeper" + "github.com/neutron-org/neutron/v5/x/cron/types" ) var ( diff --git a/x/cron/module_simulation.go b/x/cron/module_simulation.go index 63c9dd7ae..0ada92486 100644 --- a/x/cron/module_simulation.go +++ b/x/cron/module_simulation.go @@ -7,8 +7,8 @@ import ( simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" - cronsimulation "github.com/neutron-org/neutron/v4/x/cron/simulation" - "github.com/neutron-org/neutron/v4/x/cron/types" + cronsimulation "github.com/neutron-org/neutron/v5/x/cron/simulation" + "github.com/neutron-org/neutron/v5/x/cron/types" ) // avoid unused import issue diff --git a/x/cron/types/genesis.pb.go b/x/cron/types/genesis.pb.go index 274598ad7..b3678689b 100644 --- a/x/cron/types/genesis.pb.go +++ b/x/cron/types/genesis.pb.go @@ -96,9 +96,9 @@ var fileDescriptor_7c41f2dea8ad83c2 = []byte{ 0x1b, 0x00, 0x96, 0x83, 0xea, 0x84, 0xaa, 0x74, 0xf2, 0x38, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xbd, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, - 0xa8, 0x39, 0xba, 0xf9, 0x45, 0xe9, 0x30, 0xb6, 0x7e, 0x99, 0x89, 0x7e, 0x05, 0xc4, 0x67, 0x25, - 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0x60, 0x7f, 0x19, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x9b, - 0x07, 0x7e, 0x51, 0x51, 0x01, 0x00, 0x00, + 0xa8, 0x39, 0xba, 0xf9, 0x45, 0xe9, 0x30, 0xb6, 0x7e, 0x99, 0xa9, 0x7e, 0x05, 0xc4, 0x67, 0x25, + 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0x60, 0x7f, 0x19, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x5b, + 0x63, 0x56, 0x46, 0x51, 0x01, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/cron/types/genesis_test.go b/x/cron/types/genesis_test.go index ac1e2c69c..04d14471f 100644 --- a/x/cron/types/genesis_test.go +++ b/x/cron/types/genesis_test.go @@ -3,11 +3,11 @@ package types_test import ( "testing" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/cron/types" + "github.com/neutron-org/neutron/v5/x/cron/types" ) func TestGenesisState_Validate(t *testing.T) { diff --git a/x/cron/types/params.pb.go b/x/cron/types/params.pb.go index e927ec42a..6f0715acb 100644 --- a/x/cron/types/params.pb.go +++ b/x/cron/types/params.pb.go @@ -95,9 +95,9 @@ var fileDescriptor_efa4f5c14a68f6e5 = []byte{ 0x2b, 0x96, 0x19, 0x0b, 0xe4, 0x19, 0x9c, 0x3c, 0x4e, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0x4a, 0x2f, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x1f, 0xea, - 0x32, 0xdd, 0xfc, 0xa2, 0x74, 0x18, 0x5b, 0xbf, 0xcc, 0x44, 0xbf, 0x02, 0xe2, 0x8b, 0x92, 0xca, - 0x82, 0xd4, 0xe2, 0x24, 0x36, 0xb0, 0x0b, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x83, 0x18, - 0x33, 0xb9, 0xe2, 0x00, 0x00, 0x00, + 0x32, 0xdd, 0xfc, 0xa2, 0x74, 0x18, 0x5b, 0xbf, 0xcc, 0x54, 0xbf, 0x02, 0xe2, 0x8b, 0x92, 0xca, + 0x82, 0xd4, 0xe2, 0x24, 0x36, 0xb0, 0x0b, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x43, 0x7c, + 0x1b, 0xae, 0xe2, 0x00, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/cron/types/query.pb.go b/x/cron/types/query.pb.go index 912a44eaa..4d8b3eedb 100644 --- a/x/cron/types/query.pb.go +++ b/x/cron/types/query.pb.go @@ -313,38 +313,38 @@ func init() { func init() { proto.RegisterFile("neutron/cron/query.proto", fileDescriptor_e02f33367c9498fe) } var fileDescriptor_e02f33367c9498fe = []byte{ - // 495 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x93, 0xbf, 0x6e, 0x13, 0x41, - 0x10, 0xc6, 0x7d, 0x26, 0x58, 0xf1, 0x40, 0x35, 0x18, 0x63, 0x8e, 0x70, 0x09, 0x07, 0x09, 0x08, - 0x29, 0xbb, 0x8a, 0xa1, 0x40, 0x94, 0x29, 0x08, 0x74, 0xc1, 0x50, 0xd1, 0xa0, 0xb5, 0x59, 0x5d, - 0x2c, 0xe2, 0xdd, 0xcb, 0xed, 0x9e, 0x45, 0x84, 0x90, 0x10, 0x4f, 0x80, 0x44, 0xcd, 0xfb, 0xa4, - 0x8c, 0x44, 0x43, 0x85, 0x90, 0x4d, 0xcf, 0x2b, 0x44, 0xb7, 0x7f, 0x1c, 0x5f, 0x7c, 0x8a, 0x1b, - 0x6b, 0x75, 0xf3, 0xcd, 0xf7, 0xfd, 0x76, 0x67, 0x0c, 0x1d, 0xc1, 0x73, 0x9d, 0x49, 0x41, 0x07, - 0xc5, 0xcf, 0x51, 0xce, 0xb3, 0x63, 0x92, 0x66, 0x52, 0x4b, 0xbc, 0xee, 0x2a, 0xa4, 0xa8, 0x84, - 0x8f, 0x07, 0x52, 0x8d, 0xa4, 0xa2, 0x7d, 0xa6, 0xb8, 0x95, 0xd1, 0xf1, 0x4e, 0x9f, 0x6b, 0xb6, - 0x43, 0x53, 0x96, 0x0c, 0x05, 0xd3, 0x43, 0x29, 0x6c, 0x67, 0xd8, 0x4a, 0x64, 0x22, 0xcd, 0x91, - 0x16, 0x27, 0xf7, 0x75, 0x2d, 0x91, 0x32, 0x39, 0xe4, 0x94, 0xa5, 0x43, 0xca, 0x84, 0x90, 0xda, - 0xb4, 0x28, 0x57, 0xbd, 0x5d, 0xe2, 0x48, 0x59, 0xc6, 0x46, 0xbe, 0x74, 0xa7, 0x54, 0x52, 0x83, - 0x03, 0xfe, 0x21, 0x3f, 0xe4, 0xb6, 0x18, 0xb7, 0x00, 0x5f, 0x17, 0x34, 0xfb, 0xa6, 0xa3, 0xc7, - 0x8f, 0x72, 0xae, 0x74, 0xfc, 0x0a, 0x6e, 0x94, 0xbe, 0xaa, 0x54, 0x0a, 0xc5, 0xb1, 0x0b, 0x0d, - 0xeb, 0xdc, 0x09, 0x36, 0x82, 0x47, 0xd7, 0xba, 0x2d, 0x32, 0x7f, 0x47, 0x62, 0xd5, 0xbb, 0x2b, - 0x27, 0x7f, 0xd6, 0x6b, 0x3d, 0xa7, 0x8c, 0xb7, 0xe1, 0x96, 0xb1, 0xda, 0xe3, 0xfa, 0x8d, 0x8b, - 0x76, 0x29, 0x88, 0xb0, 0x22, 0xd8, 0x88, 0x1b, 0xb3, 0x66, 0xcf, 0x9c, 0xe3, 0xb7, 0xd0, 0x59, - 0x94, 0xbb, 0xf8, 0x67, 0xb0, 0xea, 0xe9, 0x1d, 0x40, 0xbb, 0x0c, 0xe0, 0x3b, 0x1c, 0xc2, 0x4c, - 0x1d, 0xbf, 0x87, 0x9b, 0xc6, 0xd5, 0x0b, 0xfc, 0x45, 0xf1, 0x05, 0xc0, 0xf9, 0xf3, 0x3b, 0xd3, - 0x2d, 0x62, 0x67, 0x45, 0x8a, 0x59, 0x11, 0x3b, 0x52, 0x37, 0x2b, 0xb2, 0xcf, 0x12, 0x8f, 0xdf, - 0x9b, 0xeb, 0x8c, 0x7f, 0x06, 0xd0, 0xbe, 0x98, 0xe0, 0xa8, 0x9f, 0x43, 0xd3, 0x73, 0x14, 0xef, - 0x76, 0x65, 0x29, 0xf6, 0xb9, 0x1c, 0xf7, 0x4a, 0x78, 0x75, 0x83, 0xf7, 0x70, 0x29, 0x9e, 0x0d, - 0x9e, 0xe7, 0xeb, 0xfe, 0xaf, 0xc3, 0x55, 0xc3, 0x87, 0x1f, 0xa1, 0x61, 0xe7, 0x84, 0x1b, 0x65, - 0x8a, 0xc5, 0x35, 0x08, 0xef, 0x5d, 0xa2, 0xb0, 0x21, 0xf1, 0xda, 0xb7, 0x5f, 0xff, 0x7e, 0xd4, - 0xdb, 0xd8, 0xa2, 0x15, 0x0b, 0x88, 0x5f, 0x03, 0x58, 0xf5, 0xb7, 0xc3, 0xcd, 0x0a, 0xb7, 0xc5, - 0xad, 0x08, 0xb7, 0x96, 0xc9, 0x5c, 0xf2, 0xa6, 0x49, 0x5e, 0xc7, 0xbb, 0xb4, 0x72, 0xbf, 0xe9, - 0xe7, 0x62, 0x9f, 0xbe, 0xe0, 0x18, 0x9a, 0xb3, 0x99, 0xe0, 0xfd, 0x0a, 0xef, 0x8b, 0x3b, 0x11, - 0x3e, 0xb8, 0x5c, 0xe4, 0xe2, 0x23, 0x13, 0xdf, 0xc1, 0x76, 0x75, 0xfc, 0xee, 0xcb, 0x93, 0x49, - 0x14, 0x9c, 0x4e, 0xa2, 0xe0, 0xef, 0x24, 0x0a, 0xbe, 0x4f, 0xa3, 0xda, 0xe9, 0x34, 0xaa, 0xfd, - 0x9e, 0x46, 0xb5, 0x77, 0x24, 0x19, 0xea, 0x83, 0xbc, 0x4f, 0x06, 0x72, 0xe4, 0x7b, 0xb7, 0x65, - 0x96, 0xcc, 0x7c, 0xc6, 0x4f, 0xe9, 0x27, 0x6b, 0xa6, 0x8f, 0x53, 0xae, 0xfa, 0x0d, 0xf3, 0x4f, - 0x7d, 0x72, 0x16, 0x00, 0x00, 0xff, 0xff, 0x89, 0x23, 0xc7, 0x75, 0x6b, 0x04, 0x00, 0x00, + // 496 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x93, 0xcf, 0x6b, 0x13, 0x41, + 0x14, 0xc7, 0xb3, 0xb1, 0x86, 0xe6, 0xe9, 0xe9, 0x19, 0x63, 0x5c, 0xeb, 0xb6, 0xae, 0xb6, 0x8a, + 0xd0, 0x19, 0x1a, 0x11, 0xc4, 0x63, 0x0f, 0x56, 0x6f, 0x35, 0x7a, 0xf2, 0x22, 0x93, 0x38, 0x6c, + 0x83, 0xcd, 0xcc, 0x76, 0x67, 0x36, 0x58, 0x44, 0x10, 0xff, 0x02, 0xc1, 0xb3, 0xff, 0x4f, 0x8f, + 0x05, 0x2f, 0x9e, 0x44, 0x12, 0xef, 0xfe, 0x0b, 0x65, 0xe7, 0x47, 0x9a, 0x6d, 0x96, 0xe6, 0x12, + 0x86, 0x7d, 0xdf, 0xf7, 0xfd, 0x7e, 0x66, 0xde, 0x0b, 0x74, 0x04, 0xcf, 0x75, 0x26, 0x05, 0x1d, + 0x14, 0x3f, 0x47, 0x39, 0xcf, 0x8e, 0x49, 0x9a, 0x49, 0x2d, 0xf1, 0xba, 0xab, 0x90, 0xa2, 0x12, + 0x3e, 0x1e, 0x48, 0x35, 0x92, 0x8a, 0xf6, 0x99, 0xe2, 0x56, 0x46, 0xc7, 0x3b, 0x7d, 0xae, 0xd9, + 0x0e, 0x4d, 0x59, 0x32, 0x14, 0x4c, 0x0f, 0xa5, 0xb0, 0x9d, 0x61, 0x2b, 0x91, 0x89, 0x34, 0x47, + 0x5a, 0x9c, 0xdc, 0xd7, 0xb5, 0x44, 0xca, 0xe4, 0x90, 0x53, 0x96, 0x0e, 0x29, 0x13, 0x42, 0x6a, + 0xd3, 0xa2, 0x5c, 0xf5, 0x76, 0x89, 0x23, 0x65, 0x19, 0x1b, 0xf9, 0xd2, 0x9d, 0x52, 0x49, 0x0d, + 0x0e, 0xf8, 0x87, 0xfc, 0x90, 0xdb, 0x62, 0xdc, 0x02, 0x7c, 0x5d, 0xd0, 0xec, 0x9b, 0x8e, 0x1e, + 0x3f, 0xca, 0xb9, 0xd2, 0xf1, 0x2b, 0xb8, 0x51, 0xfa, 0xaa, 0x52, 0x29, 0x14, 0xc7, 0x2e, 0x34, + 0xac, 0x73, 0x27, 0xd8, 0x08, 0x1e, 0x5d, 0xeb, 0xb6, 0xc8, 0xfc, 0x1d, 0x89, 0x55, 0xef, 0xae, + 0x9c, 0xfc, 0x59, 0xaf, 0xf5, 0x9c, 0x32, 0xde, 0x86, 0x5b, 0xc6, 0x6a, 0x8f, 0xeb, 0x37, 0x2e, + 0xda, 0xa5, 0x20, 0xc2, 0x8a, 0x60, 0x23, 0x6e, 0xcc, 0x9a, 0x3d, 0x73, 0x8e, 0xdf, 0x42, 0x67, + 0x51, 0xee, 0xe2, 0x9f, 0xc1, 0xaa, 0xa7, 0x77, 0x00, 0xed, 0x32, 0x80, 0xef, 0x70, 0x08, 0x33, + 0x75, 0xfc, 0x1e, 0x6e, 0x1a, 0x57, 0x2f, 0xf0, 0x17, 0xc5, 0x17, 0x00, 0xe7, 0xcf, 0xef, 0x4c, + 0xb7, 0x88, 0x9d, 0x15, 0x29, 0x66, 0x45, 0xec, 0x48, 0xdd, 0xac, 0xc8, 0x3e, 0x4b, 0x3c, 0x7e, + 0x6f, 0xae, 0x33, 0xfe, 0x19, 0x40, 0xfb, 0x62, 0x82, 0xa3, 0x7e, 0x0e, 0x4d, 0xcf, 0x51, 0xbc, + 0xdb, 0x95, 0xa5, 0xd8, 0xe7, 0x72, 0xdc, 0x2b, 0xe1, 0xd5, 0x0d, 0xde, 0xc3, 0xa5, 0x78, 0x36, + 0x78, 0x9e, 0xaf, 0xfb, 0xbf, 0x0e, 0x57, 0x0d, 0x1f, 0x7e, 0x84, 0x86, 0x9d, 0x13, 0x6e, 0x94, + 0x29, 0x16, 0xd7, 0x20, 0xbc, 0x77, 0x89, 0xc2, 0x86, 0xc4, 0x6b, 0xdf, 0x7e, 0xfd, 0xfb, 0x51, + 0x6f, 0x63, 0x8b, 0x56, 0x2c, 0x20, 0x7e, 0x0d, 0x60, 0xd5, 0xdf, 0x0e, 0x37, 0x2b, 0xdc, 0x16, + 0xb7, 0x22, 0xdc, 0x5a, 0x26, 0x73, 0xc9, 0x9b, 0x26, 0x79, 0x1d, 0xef, 0xd2, 0xca, 0xfd, 0xa6, + 0x9f, 0x8b, 0x7d, 0xfa, 0x82, 0x63, 0x68, 0xce, 0x66, 0x82, 0xf7, 0x2b, 0xbc, 0x2f, 0xee, 0x44, + 0xf8, 0xe0, 0x72, 0x91, 0x8b, 0x8f, 0x4c, 0x7c, 0x07, 0xdb, 0xd5, 0xf1, 0xbb, 0x2f, 0x4f, 0x26, + 0x51, 0x70, 0x3a, 0x89, 0x82, 0xbf, 0x93, 0x28, 0xf8, 0x3e, 0x8d, 0x6a, 0xa7, 0xd3, 0xa8, 0xf6, + 0x7b, 0x1a, 0xd5, 0xde, 0x91, 0x64, 0xa8, 0x0f, 0xf2, 0x3e, 0x19, 0xc8, 0x91, 0xef, 0xdd, 0x96, + 0x59, 0x32, 0xf3, 0x19, 0x3f, 0xa5, 0x9f, 0xac, 0x99, 0x3e, 0x4e, 0xb9, 0xea, 0x37, 0xcc, 0x3f, + 0xf5, 0xc9, 0x59, 0x00, 0x00, 0x00, 0xff, 0xff, 0x49, 0x47, 0xef, 0x62, 0x6b, 0x04, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/cron/types/schedule.pb.go b/x/cron/types/schedule.pb.go index 845a1059a..42fb227f7 100644 --- a/x/cron/types/schedule.pb.go +++ b/x/cron/types/schedule.pb.go @@ -247,29 +247,29 @@ var fileDescriptor_49ace1b59de613ef = []byte{ // 393 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x92, 0xc1, 0xaa, 0xd3, 0x40, 0x18, 0x85, 0x33, 0x36, 0x2d, 0xed, 0xa8, 0xb5, 0x8e, 0x45, 0x42, 0xab, 0x69, 0x2c, 0x08, 0x41, - 0x30, 0x81, 0xea, 0xca, 0x9d, 0x89, 0x43, 0x5b, 0xd4, 0x16, 0xd2, 0x0a, 0xe2, 0x26, 0xa4, 0xe9, - 0x30, 0x09, 0x34, 0x99, 0x92, 0x99, 0x48, 0x7d, 0x0b, 0x1f, 0xab, 0xcb, 0x2e, 0x5d, 0x89, 0xb4, - 0x2b, 0xdf, 0xe2, 0x92, 0x49, 0x5a, 0x6e, 0xef, 0xdd, 0x84, 0x73, 0x38, 0xdf, 0xe1, 0x9f, 0xf9, - 0x33, 0xb0, 0x9f, 0x92, 0x5c, 0x64, 0x2c, 0xb5, 0xc3, 0xe2, 0xc3, 0xc3, 0x88, 0xac, 0xf3, 0x0d, - 0xb1, 0xb6, 0x19, 0x13, 0x0c, 0x3d, 0xaa, 0x42, 0xab, 0x08, 0x7b, 0x5d, 0xca, 0x28, 0x93, 0x81, - 0x5d, 0xa8, 0x92, 0x19, 0xfe, 0x07, 0xb0, 0xb9, 0xa8, 0x6a, 0x08, 0x41, 0x35, 0x0d, 0x12, 0xa2, - 0x01, 0x03, 0x98, 0x2d, 0x4f, 0x6a, 0xf4, 0x1c, 0x36, 0xb6, 0x24, 0x8b, 0xd9, 0x5a, 0x7b, 0x60, - 0x00, 0x53, 0xf5, 0x2a, 0x87, 0x3e, 0x40, 0x35, 0xe1, 0x94, 0x6b, 0x35, 0xa3, 0x66, 0x3e, 0x1c, - 0x19, 0xd6, 0xed, 0x59, 0xd6, 0x57, 0x4e, 0xf1, 0x8e, 0x84, 0xb9, 0x20, 0x2e, 0x4b, 0x45, 0x16, - 0x84, 0xc2, 0x51, 0xf7, 0x7f, 0x07, 0x8a, 0x27, 0x3b, 0xc8, 0x82, 0xcf, 0x36, 0x01, 0x17, 0x3e, - 0x29, 0x19, 0x3f, 0x22, 0x31, 0x8d, 0x84, 0xa6, 0xca, 0x01, 0x4f, 0x8b, 0xa8, 0x6a, 0x4f, 0x64, - 0x80, 0x30, 0x7c, 0x52, 0xa2, 0x31, 0x4b, 0x7d, 0x2e, 0x02, 0x4a, 0xb4, 0xba, 0x01, 0xcc, 0xf6, - 0xe8, 0xc5, 0xf5, 0x58, 0x7c, 0x86, 0x16, 0x05, 0xe3, 0xb5, 0xc9, 0x95, 0x1f, 0x3a, 0x10, 0xdd, - 0x3f, 0x18, 0xea, 0xc1, 0x66, 0x58, 0xe9, 0xea, 0xe2, 0x17, 0x8f, 0x3a, 0xb0, 0x96, 0x70, 0x2a, - 0x6f, 0xde, 0xf2, 0x0a, 0x39, 0x7c, 0x0d, 0x1f, 0x9f, 0xd7, 0xe5, 0xb2, 0x3c, 0x15, 0xa8, 0x0b, - 0xeb, 0x61, 0x21, 0x64, 0xb7, 0xee, 0x95, 0xe6, 0xcd, 0x12, 0xb6, 0xaf, 0x0f, 0x83, 0x06, 0xb0, - 0x8f, 0xbf, 0x63, 0xf7, 0xdb, 0x72, 0x3a, 0x9f, 0xf9, 0x8b, 0xe5, 0xc7, 0x31, 0xf6, 0xf1, 0xec, - 0x93, 0xef, 0x7c, 0x99, 0xbb, 0x9f, 0xb1, 0xd7, 0x51, 0xd0, 0x2b, 0xf8, 0xf2, 0x2e, 0xe0, 0xe0, - 0xf1, 0x74, 0x76, 0x41, 0x80, 0x33, 0xd9, 0x1f, 0x75, 0x70, 0x38, 0xea, 0xe0, 0xdf, 0x51, 0x07, - 0xbf, 0x4f, 0xba, 0x72, 0x38, 0xe9, 0xca, 0x9f, 0x93, 0xae, 0xfc, 0xb0, 0x68, 0x2c, 0xa2, 0x7c, - 0x65, 0x85, 0x2c, 0xb1, 0xab, 0x95, 0xbc, 0x65, 0x19, 0x3d, 0x6b, 0xfb, 0xe7, 0x7b, 0x7b, 0x57, - 0xbe, 0x11, 0xf1, 0x6b, 0x4b, 0xf8, 0xaa, 0x21, 0xff, 0xfe, 0xbb, 0x9b, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x2e, 0xa9, 0x20, 0xa0, 0x40, 0x02, 0x00, 0x00, + 0x30, 0x81, 0x8a, 0x1b, 0x77, 0x26, 0x0e, 0x6d, 0x51, 0x5b, 0x48, 0x2b, 0x88, 0x9b, 0x90, 0xa6, + 0xc3, 0x24, 0xd0, 0x64, 0x4a, 0x66, 0x22, 0xf5, 0x2d, 0x7c, 0xac, 0x2e, 0xbb, 0x74, 0x25, 0xd2, + 0xae, 0x7c, 0x8b, 0x4b, 0x26, 0x69, 0xb9, 0xbd, 0x77, 0x13, 0xce, 0xe1, 0x7c, 0x87, 0x7f, 0xe6, + 0xcf, 0xc0, 0x7e, 0x4a, 0x72, 0x91, 0xb1, 0xd4, 0x0e, 0x8b, 0x0f, 0x0f, 0x23, 0xb2, 0xce, 0x37, + 0xc4, 0xda, 0x66, 0x4c, 0x30, 0xf4, 0xa8, 0x0a, 0xad, 0x22, 0xec, 0x75, 0x29, 0xa3, 0x4c, 0x06, + 0x76, 0xa1, 0x4a, 0x66, 0xf8, 0x1f, 0xc0, 0xe6, 0xa2, 0xaa, 0x21, 0x04, 0xd5, 0x34, 0x48, 0x88, + 0x06, 0x0c, 0x60, 0xb6, 0x3c, 0xa9, 0xd1, 0x73, 0xd8, 0xd8, 0x92, 0x2c, 0x66, 0x6b, 0xed, 0x81, + 0x01, 0x4c, 0xd5, 0xab, 0x1c, 0xfa, 0x00, 0xd5, 0x84, 0x53, 0xae, 0xd5, 0x8c, 0x9a, 0xf9, 0x70, + 0x64, 0x58, 0xb7, 0x67, 0x59, 0x5f, 0x39, 0xc5, 0x3b, 0x12, 0xe6, 0x82, 0xb8, 0x2c, 0x15, 0x59, + 0x10, 0x0a, 0x47, 0xdd, 0xff, 0x1d, 0x28, 0x9e, 0xec, 0x20, 0x0b, 0x3e, 0xdb, 0x04, 0x5c, 0xf8, + 0xa4, 0x64, 0xfc, 0x88, 0xc4, 0x34, 0x12, 0x9a, 0x2a, 0x07, 0x3c, 0x2d, 0xa2, 0xaa, 0x3d, 0x91, + 0x01, 0xc2, 0xf0, 0x49, 0x89, 0xc6, 0x2c, 0xf5, 0xb9, 0x08, 0x28, 0xd1, 0xea, 0x06, 0x30, 0xdb, + 0xa3, 0x17, 0xd7, 0x63, 0xf1, 0x19, 0x5a, 0x14, 0x8c, 0xd7, 0x26, 0x57, 0x7e, 0xe8, 0x40, 0x74, + 0xff, 0x60, 0xa8, 0x07, 0x9b, 0x61, 0xa5, 0xab, 0x8b, 0x5f, 0x3c, 0xea, 0xc0, 0x5a, 0xc2, 0xa9, + 0xbc, 0x79, 0xcb, 0x2b, 0xe4, 0xf0, 0x35, 0x7c, 0x7c, 0x5e, 0x97, 0xcb, 0xf2, 0x54, 0xa0, 0x2e, + 0xac, 0x87, 0x85, 0x90, 0xdd, 0xba, 0x57, 0x9a, 0x37, 0x4b, 0xd8, 0xbe, 0x3e, 0x0c, 0x1a, 0xc0, + 0x3e, 0xfe, 0x8e, 0xdd, 0x6f, 0xcb, 0xe9, 0x7c, 0xe6, 0x2f, 0x96, 0x1f, 0xc7, 0xd8, 0xc7, 0xb3, + 0x4f, 0xbe, 0xf3, 0x65, 0xee, 0x7e, 0xc6, 0x5e, 0x47, 0x41, 0xaf, 0xe0, 0xcb, 0xbb, 0x80, 0x83, + 0xc7, 0xd3, 0xd9, 0x05, 0x01, 0xce, 0x64, 0x7f, 0xd4, 0xc1, 0xe1, 0xa8, 0x83, 0x7f, 0x47, 0x1d, + 0xfc, 0x3e, 0xe9, 0xca, 0xe1, 0xa4, 0x2b, 0x7f, 0x4e, 0xba, 0xf2, 0xc3, 0xa2, 0xb1, 0x88, 0xf2, + 0x95, 0x15, 0xb2, 0xc4, 0xae, 0x56, 0xf2, 0x96, 0x65, 0xf4, 0xac, 0xed, 0x9f, 0xef, 0xed, 0x5d, + 0xf9, 0x46, 0xc4, 0xaf, 0x2d, 0xe1, 0xab, 0x86, 0xfc, 0xfb, 0xef, 0x6e, 0x02, 0x00, 0x00, 0xff, + 0xff, 0xee, 0xcd, 0x08, 0xb7, 0x40, 0x02, 0x00, 0x00, } func (m *Schedule) Marshal() (dAtA []byte, err error) { diff --git a/x/cron/types/tx.pb.go b/x/cron/types/tx.pb.go index 141735a4e..c5ffb7299 100644 --- a/x/cron/types/tx.pb.go +++ b/x/cron/types/tx.pb.go @@ -355,7 +355,7 @@ var fileDescriptor_c9e0a673aba8d6fd = []byte{ // 554 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x54, 0xbf, 0x6b, 0xdb, 0x40, 0x14, 0xf6, 0xd9, 0x8e, 0xc1, 0xe7, 0xe0, 0x10, 0xd5, 0x75, 0x64, 0x25, 0x55, 0x8c, 0x68, 0x1b, - 0xd7, 0x10, 0x89, 0xba, 0xa5, 0x05, 0x6f, 0x71, 0x31, 0x74, 0x11, 0xb4, 0x72, 0xbb, 0x64, 0x09, + 0xd7, 0x10, 0x89, 0xba, 0xb4, 0x05, 0x6f, 0x71, 0x31, 0x74, 0x11, 0xb4, 0x72, 0xbb, 0x64, 0x09, 0x8a, 0x74, 0x9c, 0x05, 0x95, 0x4e, 0xe8, 0x4e, 0xc6, 0xd9, 0x4a, 0xc7, 0x4c, 0xed, 0x5f, 0xd0, 0xb5, 0xd0, 0xc5, 0x43, 0xff, 0x88, 0x8c, 0xa1, 0x53, 0xa7, 0x52, 0xec, 0xc1, 0xff, 0x46, 0xd1, 0xaf, 0x44, 0x17, 0x41, 0x0a, 0x85, 0x2c, 0xa7, 0x7b, 0xef, 0xfb, 0xde, 0xd3, 0x77, 0xdf, 0x3d, @@ -387,7 +387,7 @@ var fileDescriptor_c9e0a673aba8d6fd = []byte{ 0x94, 0xc1, 0xe7, 0x95, 0x5c, 0xba, 0x5c, 0xc9, 0xa5, 0x5f, 0x2b, 0xb9, 0x74, 0xac, 0x62, 0x87, 0x4d, 0xc3, 0x53, 0xd5, 0x22, 0xae, 0x96, 0x76, 0x3c, 0x24, 0x01, 0xce, 0xf6, 0xda, 0xec, 0xb9, 0x36, 0x4f, 0x9f, 0xac, 0x33, 0x1f, 0xd1, 0xd3, 0x5a, 0xfc, 0x26, 0x3c, 0xfb, 0x1b, 0x00, 0x00, - 0xff, 0xff, 0xf7, 0xca, 0x79, 0x29, 0xcf, 0x04, 0x00, 0x00, + 0xff, 0xff, 0x37, 0xae, 0x51, 0x3e, 0xcf, 0x04, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/cron/types/v1/schedule.pb.go b/x/cron/types/v1/schedule.pb.go index 3a35f34e6..a37932a39 100644 --- a/x/cron/types/v1/schedule.pb.go +++ b/x/cron/types/v1/schedule.pb.go @@ -209,24 +209,24 @@ var fileDescriptor_cd4938034d592826 = []byte{ // 316 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x91, 0xc1, 0x4a, 0xc3, 0x30, 0x18, 0xc7, 0x1b, 0xd7, 0x8d, 0x2d, 0x22, 0x6a, 0x1c, 0x52, 0x76, 0x88, 0x63, 0x22, 0xec, 0x62, - 0x42, 0xd5, 0xab, 0x97, 0x0d, 0x41, 0x10, 0x2f, 0xf5, 0xe6, 0x65, 0x6c, 0x59, 0x48, 0x07, 0x6b, - 0x53, 0x9a, 0xb4, 0xcc, 0xb7, 0xf0, 0x25, 0x7c, 0x97, 0x1d, 0x77, 0xf4, 0x24, 0xd2, 0xbe, 0x88, - 0x24, 0xcd, 0x3c, 0xe8, 0x25, 0xfc, 0xfe, 0xfc, 0xbf, 0x7f, 0xbe, 0xef, 0x4b, 0x20, 0x4e, 0x79, - 0xa1, 0x73, 0x99, 0x52, 0x66, 0x8e, 0x32, 0xa4, 0x8a, 0xc5, 0x7c, 0x59, 0xac, 0x39, 0xc9, 0x72, - 0xa9, 0x25, 0x3a, 0x76, 0x3e, 0x31, 0x3e, 0x29, 0xc3, 0x41, 0x5f, 0x48, 0x21, 0xad, 0x47, 0x0d, - 0x35, 0x65, 0xa3, 0x0f, 0x00, 0xbb, 0x2f, 0x2e, 0x89, 0x10, 0xf4, 0xd3, 0x79, 0xc2, 0x03, 0x30, - 0x04, 0xe3, 0x5e, 0x64, 0x19, 0x9d, 0xc3, 0x4e, 0xc6, 0xf3, 0x95, 0x5c, 0x06, 0x07, 0x43, 0x30, - 0xf6, 0x23, 0xa7, 0xd0, 0x3d, 0xf4, 0x13, 0x25, 0x54, 0xd0, 0x1a, 0xb6, 0xc6, 0x87, 0x37, 0x97, - 0xe4, 0x4f, 0x3b, 0xf2, 0xac, 0xc4, 0xc3, 0x86, 0xb3, 0x42, 0xf3, 0xa9, 0x4c, 0x75, 0x3e, 0x67, - 0x7a, 0xe2, 0x6f, 0xbf, 0x2e, 0xbc, 0xc8, 0xc6, 0x10, 0x81, 0x67, 0xeb, 0xb9, 0xd2, 0x33, 0xde, - 0xd4, 0xcc, 0x62, 0xbe, 0x12, 0xb1, 0x0e, 0x7c, 0xdb, 0xe3, 0xd4, 0x58, 0x2e, 0xfd, 0x68, 0x8d, - 0xd1, 0x04, 0xa2, 0xff, 0x37, 0xa2, 0x01, 0xec, 0x32, 0xc7, 0x6e, 0xe8, 0x5f, 0x8d, 0x4e, 0x60, - 0x2b, 0x51, 0xc2, 0x4e, 0xdd, 0x8b, 0x0c, 0x8e, 0xae, 0xe0, 0xd1, 0x7e, 0xd5, 0xa9, 0x2c, 0x52, - 0x8d, 0xfa, 0xb0, 0xcd, 0x0c, 0xd8, 0x6c, 0x3b, 0x6a, 0xc4, 0xe4, 0x69, 0x5b, 0x61, 0xb0, 0xab, - 0x30, 0xf8, 0xae, 0x30, 0x78, 0xaf, 0xb1, 0xb7, 0xab, 0xb1, 0xf7, 0x59, 0x63, 0xef, 0x35, 0x14, - 0x2b, 0x1d, 0x17, 0x0b, 0xc2, 0x64, 0x42, 0xdd, 0xbe, 0xd7, 0x32, 0x17, 0x7b, 0xa6, 0xe5, 0x1d, - 0xdd, 0x34, 0xff, 0xa1, 0xdf, 0x32, 0xae, 0x68, 0x19, 0x2e, 0x3a, 0xf6, 0x99, 0x6f, 0x7f, 0x02, - 0x00, 0x00, 0xff, 0xff, 0x4d, 0x2d, 0x47, 0x23, 0xaf, 0x01, 0x00, 0x00, + 0x42, 0x15, 0x8f, 0x5e, 0x36, 0x04, 0x41, 0xbc, 0xd4, 0x9b, 0x97, 0xb1, 0x65, 0x21, 0x1d, 0xac, + 0x4d, 0x69, 0xd2, 0x32, 0xdf, 0xc2, 0x97, 0xf0, 0x5d, 0x76, 0xdc, 0xd1, 0x93, 0x48, 0xfb, 0x22, + 0x92, 0x34, 0xf3, 0xa0, 0x97, 0xf0, 0xfb, 0xf3, 0xff, 0xfe, 0xf9, 0xbe, 0x2f, 0x81, 0x38, 0xe5, + 0x85, 0xce, 0x65, 0x4a, 0x99, 0x39, 0xca, 0x90, 0x2a, 0x16, 0xf3, 0x65, 0xb1, 0xe6, 0x24, 0xcb, + 0xa5, 0x96, 0xe8, 0xd8, 0xf9, 0xc4, 0xf8, 0xa4, 0x0c, 0x07, 0x7d, 0x21, 0x85, 0xb4, 0x1e, 0x35, + 0xd4, 0x94, 0x8d, 0x3e, 0x00, 0xec, 0xbe, 0xb8, 0x24, 0x42, 0xd0, 0x4f, 0xe7, 0x09, 0x0f, 0xc0, + 0x10, 0x8c, 0x7b, 0x91, 0x65, 0x74, 0x0e, 0x3b, 0x19, 0xcf, 0x57, 0x72, 0x19, 0x1c, 0x0c, 0xc1, + 0xd8, 0x8f, 0x9c, 0x42, 0xf7, 0xd0, 0x4f, 0x94, 0x50, 0x41, 0x6b, 0xd8, 0x1a, 0x1f, 0xde, 0x5c, + 0x92, 0x3f, 0xed, 0xc8, 0xb3, 0x12, 0x0f, 0x1b, 0xce, 0x0a, 0xcd, 0xa7, 0x32, 0xd5, 0xf9, 0x9c, + 0xe9, 0x89, 0xbf, 0xfd, 0xba, 0xf0, 0x22, 0x1b, 0x43, 0x04, 0x9e, 0xad, 0xe7, 0x4a, 0xcf, 0x78, + 0x53, 0x33, 0x8b, 0xf9, 0x4a, 0xc4, 0x3a, 0xf0, 0x6d, 0x8f, 0x53, 0x63, 0xb9, 0xf4, 0xa3, 0x35, + 0x46, 0x13, 0x88, 0xfe, 0xdf, 0x88, 0x06, 0xb0, 0xcb, 0x1c, 0xbb, 0xa1, 0x7f, 0x35, 0x3a, 0x81, + 0xad, 0x44, 0x09, 0x3b, 0x75, 0x2f, 0x32, 0x38, 0xba, 0x82, 0x47, 0xfb, 0x55, 0xa7, 0xb2, 0x48, + 0x35, 0xea, 0xc3, 0x36, 0x33, 0x60, 0xb3, 0xed, 0xa8, 0x11, 0x93, 0xa7, 0x6d, 0x85, 0xc1, 0xae, + 0xc2, 0xe0, 0xbb, 0xc2, 0xe0, 0xbd, 0xc6, 0xde, 0xae, 0xc6, 0xde, 0x67, 0x8d, 0xbd, 0xd7, 0x50, + 0xac, 0x74, 0x5c, 0x2c, 0x08, 0x93, 0x09, 0x75, 0xfb, 0x5e, 0xcb, 0x5c, 0xec, 0x99, 0x96, 0x77, + 0x74, 0xd3, 0xfc, 0x87, 0x7e, 0xcb, 0xb8, 0xa2, 0x65, 0xb8, 0xe8, 0xd8, 0x67, 0xbe, 0xfd, 0x09, + 0x00, 0x00, 0xff, 0xff, 0x43, 0xbd, 0xcc, 0x86, 0xaf, 0x01, 0x00, 0x00, } func (m *Schedule) Marshal() (dAtA []byte, err error) { diff --git a/x/dex/client/cli/query.go b/x/dex/client/cli/query.go index b71cad5e4..aadd90629 100644 --- a/x/dex/client/cli/query.go +++ b/x/dex/client/cli/query.go @@ -6,7 +6,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // GetQueryCmd returns the cli query commands for this module diff --git a/x/dex/client/cli/query_inactive_limit_order_tranche.go b/x/dex/client/cli/query_inactive_limit_order_tranche.go index ccfc3fa70..a408fb76c 100644 --- a/x/dex/client/cli/query_inactive_limit_order_tranche.go +++ b/x/dex/client/cli/query_inactive_limit_order_tranche.go @@ -9,7 +9,7 @@ import ( "github.com/spf13/cast" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func CmdListInactiveLimitOrderTranche() *cobra.Command { diff --git a/x/dex/client/cli/query_limit_order_tranche.go b/x/dex/client/cli/query_limit_order_tranche.go index 79b6998ea..d297e6a9e 100644 --- a/x/dex/client/cli/query_limit_order_tranche.go +++ b/x/dex/client/cli/query_limit_order_tranche.go @@ -9,7 +9,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func CmdListLimitOrderTranche() *cobra.Command { diff --git a/x/dex/client/cli/query_limit_order_tranche_user.go b/x/dex/client/cli/query_limit_order_tranche_user.go index 14dec5263..baac20134 100644 --- a/x/dex/client/cli/query_limit_order_tranche_user.go +++ b/x/dex/client/cli/query_limit_order_tranche_user.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func CmdListLimitOrderTrancheUser() *cobra.Command { diff --git a/x/dex/client/cli/query_params.go b/x/dex/client/cli/query_params.go index 13397f53c..dd9911b4c 100644 --- a/x/dex/client/cli/query_params.go +++ b/x/dex/client/cli/query_params.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func CmdQueryParams() *cobra.Command { diff --git a/x/dex/client/cli/query_pool.go b/x/dex/client/cli/query_pool.go index 5d09944ce..1e5f0b035 100644 --- a/x/dex/client/cli/query_pool.go +++ b/x/dex/client/cli/query_pool.go @@ -9,7 +9,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func CmdShowPool() *cobra.Command { diff --git a/x/dex/client/cli/query_pool_metadata.go b/x/dex/client/cli/query_pool_metadata.go index f7a79027d..dc7cceb2f 100644 --- a/x/dex/client/cli/query_pool_metadata.go +++ b/x/dex/client/cli/query_pool_metadata.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func CmdListPoolMetadata() *cobra.Command { diff --git a/x/dex/client/cli/query_pool_reserves.go b/x/dex/client/cli/query_pool_reserves.go index 608fd7985..c11e5dc2b 100644 --- a/x/dex/client/cli/query_pool_reserves.go +++ b/x/dex/client/cli/query_pool_reserves.go @@ -9,7 +9,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func CmdListPoolReserves() *cobra.Command { diff --git a/x/dex/client/cli/query_tick_liquidity.go b/x/dex/client/cli/query_tick_liquidity.go index 4b61177e8..2a1527fcc 100644 --- a/x/dex/client/cli/query_tick_liquidity.go +++ b/x/dex/client/cli/query_tick_liquidity.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func CmdListTickLiquidity() *cobra.Command { diff --git a/x/dex/client/cli/query_user_deposits.go b/x/dex/client/cli/query_user_deposits.go index 66fbf0ee5..3b7108e99 100644 --- a/x/dex/client/cli/query_user_deposits.go +++ b/x/dex/client/cli/query_user_deposits.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func CmdListUserDeposits() *cobra.Command { diff --git a/x/dex/client/cli/query_user_limit_orders.go b/x/dex/client/cli/query_user_limit_orders.go index 2026e743c..f5baac22f 100644 --- a/x/dex/client/cli/query_user_limit_orders.go +++ b/x/dex/client/cli/query_user_limit_orders.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func CmdListUserLimitOrders() *cobra.Command { diff --git a/x/dex/client/cli/tx.go b/x/dex/client/cli/tx.go index 374c6b102..c9445af21 100644 --- a/x/dex/client/cli/tx.go +++ b/x/dex/client/cli/tx.go @@ -8,7 +8,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) var DefaultRelativePacketTimeoutTimestamp = uint64((time.Duration(10) * time.Minute).Nanoseconds()) diff --git a/x/dex/client/cli/tx_cancel_limit_order.go b/x/dex/client/cli/tx_cancel_limit_order.go index 8d73a5111..5bdb9ee91 100644 --- a/x/dex/client/cli/tx_cancel_limit_order.go +++ b/x/dex/client/cli/tx_cancel_limit_order.go @@ -6,7 +6,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/tx" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func CmdCancelLimitOrder() *cobra.Command { diff --git a/x/dex/client/cli/tx_deposit.go b/x/dex/client/cli/tx_deposit.go index 29ad39c36..dc0f3aeae 100644 --- a/x/dex/client/cli/tx_deposit.go +++ b/x/dex/client/cli/tx_deposit.go @@ -12,7 +12,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/tx" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func CmdDeposit() *cobra.Command { diff --git a/x/dex/client/cli/tx_multi_hop_swap.go b/x/dex/client/cli/tx_multi_hop_swap.go index a6d61c037..bc5b5ca70 100644 --- a/x/dex/client/cli/tx_multi_hop_swap.go +++ b/x/dex/client/cli/tx_multi_hop_swap.go @@ -11,8 +11,8 @@ import ( "github.com/cosmos/cosmos-sdk/client/tx" "github.com/spf13/cobra" - math_utils "github.com/neutron-org/neutron/v4/utils/math" - "github.com/neutron-org/neutron/v4/x/dex/types" + math_utils "github.com/neutron-org/neutron/v5/utils/math" + "github.com/neutron-org/neutron/v5/x/dex/types" ) var _ = strconv.Itoa(0) diff --git a/x/dex/client/cli/tx_place_limit_order.go b/x/dex/client/cli/tx_place_limit_order.go index 8c4419dbd..2b59e8c76 100644 --- a/x/dex/client/cli/tx_place_limit_order.go +++ b/x/dex/client/cli/tx_place_limit_order.go @@ -12,8 +12,8 @@ import ( "github.com/cosmos/cosmos-sdk/client/tx" "github.com/spf13/cobra" - math_utils "github.com/neutron-org/neutron/v4/utils/math" - "github.com/neutron-org/neutron/v4/x/dex/types" + math_utils "github.com/neutron-org/neutron/v5/utils/math" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func CmdPlaceLimitOrder() *cobra.Command { diff --git a/x/dex/client/cli/tx_withdrawl.go b/x/dex/client/cli/tx_withdrawl.go index fd4247265..2be86cac3 100644 --- a/x/dex/client/cli/tx_withdrawl.go +++ b/x/dex/client/cli/tx_withdrawl.go @@ -11,7 +11,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/tx" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func CmdWithdrawal() *cobra.Command { diff --git a/x/dex/client/cli/tx_withdrawl_filled_limit_order.go b/x/dex/client/cli/tx_withdrawl_filled_limit_order.go index 0e947779a..80a6a7438 100644 --- a/x/dex/client/cli/tx_withdrawl_filled_limit_order.go +++ b/x/dex/client/cli/tx_withdrawl_filled_limit_order.go @@ -6,7 +6,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/tx" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func CmdWithdrawFilledLimitOrder() *cobra.Command { diff --git a/x/dex/genesis.go b/x/dex/genesis.go index 5e838a40a..06f984946 100644 --- a/x/dex/genesis.go +++ b/x/dex/genesis.go @@ -3,9 +3,9 @@ package dex import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // InitGenesis initializes the capability module's state from a provided genesis diff --git a/x/dex/genesis_test.go b/x/dex/genesis_test.go index ac944c274..ec0f48331 100644 --- a/x/dex/genesis_test.go +++ b/x/dex/genesis_test.go @@ -7,10 +7,10 @@ import ( "cosmossdk.io/math" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - keepertest "github.com/neutron-org/neutron/v4/testutil/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + keepertest "github.com/neutron-org/neutron/v5/testutil/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func TestGenesis(t *testing.T) { diff --git a/x/dex/keeper/cancel_limit_order.go b/x/dex/keeper/cancel_limit_order.go index 5680c0699..cc1b5b923 100644 --- a/x/dex/keeper/cancel_limit_order.go +++ b/x/dex/keeper/cancel_limit_order.go @@ -6,8 +6,8 @@ import ( sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" - math_utils "github.com/neutron-org/neutron/v4/utils/math" - "github.com/neutron-org/neutron/v4/x/dex/types" + math_utils "github.com/neutron-org/neutron/v5/utils/math" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // CancelLimitOrderCore handles the logic for MsgCancelLimitOrder including bank operations and event emissions. diff --git a/x/dex/keeper/core_helper.go b/x/dex/keeper/core_helper.go index e608f3c25..bcf72159e 100644 --- a/x/dex/keeper/core_helper.go +++ b/x/dex/keeper/core_helper.go @@ -6,9 +6,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "golang.org/x/exp/slices" - math_utils "github.com/neutron-org/neutron/v4/utils/math" - "github.com/neutron-org/neutron/v4/x/dex/types" - "github.com/neutron-org/neutron/v4/x/dex/utils" + math_utils "github.com/neutron-org/neutron/v5/utils/math" + "github.com/neutron-org/neutron/v5/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/utils" ) /////////////////////////////////////////////////////////////////////////////// diff --git a/x/dex/keeper/core_helper_test.go b/x/dex/keeper/core_helper_test.go index c09d45d99..d4c176d62 100644 --- a/x/dex/keeper/core_helper_test.go +++ b/x/dex/keeper/core_helper_test.go @@ -8,9 +8,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/suite" - neutronapp "github.com/neutron-org/neutron/v4/app" - "github.com/neutron-org/neutron/v4/testutil" - "github.com/neutron-org/neutron/v4/x/dex/types" + neutronapp "github.com/neutron-org/neutron/v5/app" + "github.com/neutron-org/neutron/v5/testutil" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // Test Suite /////////////////////////////////////////////////////////////// diff --git a/x/dex/keeper/deposit.go b/x/dex/keeper/deposit.go index b2ef716e8..e765e22f5 100644 --- a/x/dex/keeper/deposit.go +++ b/x/dex/keeper/deposit.go @@ -7,8 +7,8 @@ import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/utils" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/utils" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // DepositCore handles core logic for MsgDeposit including bank operations and event emissions diff --git a/x/dex/keeper/deposit_record.go b/x/dex/keeper/deposit_record.go index 24796fadd..9a0eee1a4 100644 --- a/x/dex/keeper/deposit_record.go +++ b/x/dex/keeper/deposit_record.go @@ -3,8 +3,8 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" - "github.com/neutron-org/neutron/v4/x/dex/utils" + "github.com/neutron-org/neutron/v5/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/utils" ) func (k Keeper) GetAllDepositsForAddress(ctx sdk.Context, addr sdk.AccAddress) []*types.DepositRecord { diff --git a/x/dex/keeper/deposit_record_test.go b/x/dex/keeper/deposit_record_test.go index fe268244a..733b7659c 100644 --- a/x/dex/keeper/deposit_record_test.go +++ b/x/dex/keeper/deposit_record_test.go @@ -3,7 +3,7 @@ package keeper_test import ( "cosmossdk.io/math" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func (s *DexTestSuite) TestGetAllDeposits() { diff --git a/x/dex/keeper/grpc_query.go b/x/dex/keeper/grpc_query.go index e0b9f7713..f7f73e428 100644 --- a/x/dex/keeper/grpc_query.go +++ b/x/dex/keeper/grpc_query.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) var _ types.QueryServer = Keeper{} diff --git a/x/dex/keeper/grpc_query_estimate_multi_hop_swap.go b/x/dex/keeper/grpc_query_estimate_multi_hop_swap.go index eb133dce9..9a7de11fb 100644 --- a/x/dex/keeper/grpc_query_estimate_multi_hop_swap.go +++ b/x/dex/keeper/grpc_query_estimate_multi_hop_swap.go @@ -5,7 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // TODO: This doesn't run ValidateBasic() checks. diff --git a/x/dex/keeper/grpc_query_estimate_multi_hop_swap_test.go b/x/dex/keeper/grpc_query_estimate_multi_hop_swap_test.go index 88312e2ef..32338de0b 100644 --- a/x/dex/keeper/grpc_query_estimate_multi_hop_swap_test.go +++ b/x/dex/keeper/grpc_query_estimate_multi_hop_swap_test.go @@ -4,8 +4,8 @@ import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - math_utils "github.com/neutron-org/neutron/v4/utils/math" - "github.com/neutron-org/neutron/v4/x/dex/types" + math_utils "github.com/neutron-org/neutron/v5/utils/math" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func (s *DexTestSuite) TestEstimateMultiHopSwapSingleRoute() { diff --git a/x/dex/keeper/grpc_query_estimate_place_limit_order.go b/x/dex/keeper/grpc_query_estimate_place_limit_order.go index 6a4447d0f..72927a477 100644 --- a/x/dex/keeper/grpc_query_estimate_place_limit_order.go +++ b/x/dex/keeper/grpc_query_estimate_place_limit_order.go @@ -6,7 +6,7 @@ import ( sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // TODO: This doesn't run ValidateBasic() checks. diff --git a/x/dex/keeper/grpc_query_inactive_limit_order_tranche.go b/x/dex/keeper/grpc_query_inactive_limit_order_tranche.go index 4dcf03c91..88f408abe 100644 --- a/x/dex/keeper/grpc_query_inactive_limit_order_tranche.go +++ b/x/dex/keeper/grpc_query_inactive_limit_order_tranche.go @@ -9,7 +9,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func (k Keeper) InactiveLimitOrderTrancheAll( diff --git a/x/dex/keeper/grpc_query_inactive_limit_order_tranche_test.go b/x/dex/keeper/grpc_query_inactive_limit_order_tranche_test.go index 51055eb65..d60d71d61 100644 --- a/x/dex/keeper/grpc_query_inactive_limit_order_tranche_test.go +++ b/x/dex/keeper/grpc_query_inactive_limit_order_tranche_test.go @@ -9,9 +9,9 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - keepertest "github.com/neutron-org/neutron/v4/testutil/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + keepertest "github.com/neutron-org/neutron/v5/testutil/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // Prevent strconv unused error diff --git a/x/dex/keeper/grpc_query_limit_order_tranche.go b/x/dex/keeper/grpc_query_limit_order_tranche.go index c97dab766..f6dff5f3d 100644 --- a/x/dex/keeper/grpc_query_limit_order_tranche.go +++ b/x/dex/keeper/grpc_query_limit_order_tranche.go @@ -9,7 +9,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // Returns all ACTIVE limit order tranches for a given pairID/tokenIn combination diff --git a/x/dex/keeper/grpc_query_limit_order_tranche_test.go b/x/dex/keeper/grpc_query_limit_order_tranche_test.go index 02ea87ec1..3ac15f4e2 100644 --- a/x/dex/keeper/grpc_query_limit_order_tranche_test.go +++ b/x/dex/keeper/grpc_query_limit_order_tranche_test.go @@ -8,9 +8,9 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - keepertest "github.com/neutron-org/neutron/v4/testutil/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + keepertest "github.com/neutron-org/neutron/v5/testutil/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func TestLimitOrderTrancheQuerySingle(t *testing.T) { diff --git a/x/dex/keeper/grpc_query_limit_order_tranche_user.go b/x/dex/keeper/grpc_query_limit_order_tranche_user.go index beb75ad48..d378a8fab 100644 --- a/x/dex/keeper/grpc_query_limit_order_tranche_user.go +++ b/x/dex/keeper/grpc_query_limit_order_tranche_user.go @@ -10,7 +10,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func (k Keeper) LimitOrderTrancheUserAll( diff --git a/x/dex/keeper/grpc_query_limit_order_tranche_user_test.go b/x/dex/keeper/grpc_query_limit_order_tranche_user_test.go index 975052598..ed964cd7d 100644 --- a/x/dex/keeper/grpc_query_limit_order_tranche_user_test.go +++ b/x/dex/keeper/grpc_query_limit_order_tranche_user_test.go @@ -10,10 +10,10 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - "github.com/neutron-org/neutron/v4/testutil/common/sample" - keepertest "github.com/neutron-org/neutron/v4/testutil/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + "github.com/neutron-org/neutron/v5/testutil/common/sample" + keepertest "github.com/neutron-org/neutron/v5/testutil/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func TestLimitOrderTrancheUserQuerySingle(t *testing.T) { diff --git a/x/dex/keeper/grpc_query_params.go b/x/dex/keeper/grpc_query_params.go index 46adad5b8..81267f35c 100644 --- a/x/dex/keeper/grpc_query_params.go +++ b/x/dex/keeper/grpc_query_params.go @@ -7,7 +7,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // Returns dex params to the caller diff --git a/x/dex/keeper/grpc_query_params_test.go b/x/dex/keeper/grpc_query_params_test.go index 85caea3bd..d08543191 100644 --- a/x/dex/keeper/grpc_query_params_test.go +++ b/x/dex/keeper/grpc_query_params_test.go @@ -5,8 +5,8 @@ import ( "github.com/stretchr/testify/require" - testkeeper "github.com/neutron-org/neutron/v4/testutil/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + testkeeper "github.com/neutron-org/neutron/v5/testutil/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func TestParamsQuery(t *testing.T) { diff --git a/x/dex/keeper/grpc_query_pool.go b/x/dex/keeper/grpc_query_pool.go index 2c4cff921..dffd10df2 100644 --- a/x/dex/keeper/grpc_query_pool.go +++ b/x/dex/keeper/grpc_query_pool.go @@ -7,7 +7,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // Returns the pool that was requested by PairId, TickIndex and Fee (or errors) diff --git a/x/dex/keeper/grpc_query_pool_metadata.go b/x/dex/keeper/grpc_query_pool_metadata.go index b2bc94ab4..11546486d 100644 --- a/x/dex/keeper/grpc_query_pool_metadata.go +++ b/x/dex/keeper/grpc_query_pool_metadata.go @@ -9,7 +9,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func (k Keeper) PoolMetadataAll(goCtx context.Context, req *types.QueryAllPoolMetadataRequest) (*types.QueryAllPoolMetadataResponse, error) { diff --git a/x/dex/keeper/grpc_query_pool_metadata_test.go b/x/dex/keeper/grpc_query_pool_metadata_test.go index d5b2d855d..56768b9cf 100644 --- a/x/dex/keeper/grpc_query_pool_metadata_test.go +++ b/x/dex/keeper/grpc_query_pool_metadata_test.go @@ -8,9 +8,9 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - keepertest "github.com/neutron-org/neutron/v4/testutil/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + keepertest "github.com/neutron-org/neutron/v5/testutil/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func TestPoolMetadataQuerySingle(t *testing.T) { diff --git a/x/dex/keeper/grpc_query_pool_reserves.go b/x/dex/keeper/grpc_query_pool_reserves.go index c9c14d55e..e8b843417 100644 --- a/x/dex/keeper/grpc_query_pool_reserves.go +++ b/x/dex/keeper/grpc_query_pool_reserves.go @@ -9,7 +9,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func (k Keeper) PoolReservesAll( diff --git a/x/dex/keeper/grpc_query_pool_reserves_test.go b/x/dex/keeper/grpc_query_pool_reserves_test.go index 9cf21356f..cf1350082 100644 --- a/x/dex/keeper/grpc_query_pool_reserves_test.go +++ b/x/dex/keeper/grpc_query_pool_reserves_test.go @@ -8,9 +8,9 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - keepertest "github.com/neutron-org/neutron/v4/testutil/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + keepertest "github.com/neutron-org/neutron/v5/testutil/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func TestPoolReservesQuerySingle(t *testing.T) { diff --git a/x/dex/keeper/grpc_query_pool_test.go b/x/dex/keeper/grpc_query_pool_test.go index f154837aa..f32dc6e98 100644 --- a/x/dex/keeper/grpc_query_pool_test.go +++ b/x/dex/keeper/grpc_query_pool_test.go @@ -7,9 +7,9 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - keepertest "github.com/neutron-org/neutron/v4/testutil/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + keepertest "github.com/neutron-org/neutron/v5/testutil/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func TestPoolQuerySingle(t *testing.T) { diff --git a/x/dex/keeper/grpc_query_tick_liquidity.go b/x/dex/keeper/grpc_query_tick_liquidity.go index 37622ccdf..bec800114 100644 --- a/x/dex/keeper/grpc_query_tick_liquidity.go +++ b/x/dex/keeper/grpc_query_tick_liquidity.go @@ -9,7 +9,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // NOTE: For single queries of tick liquidity use explicty typed queries diff --git a/x/dex/keeper/grpc_query_tick_liquidity_test.go b/x/dex/keeper/grpc_query_tick_liquidity_test.go index 42bb71eb1..8e8982dc9 100644 --- a/x/dex/keeper/grpc_query_tick_liquidity_test.go +++ b/x/dex/keeper/grpc_query_tick_liquidity_test.go @@ -8,8 +8,8 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - keepertest "github.com/neutron-org/neutron/v4/testutil/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + keepertest "github.com/neutron-org/neutron/v5/testutil/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func TestTickLiquidityQueryPaginated(t *testing.T) { diff --git a/x/dex/keeper/grpc_query_user_deposits.go b/x/dex/keeper/grpc_query_user_deposits.go index f941278e3..6dcb83b8b 100644 --- a/x/dex/keeper/grpc_query_user_deposits.go +++ b/x/dex/keeper/grpc_query_user_deposits.go @@ -7,9 +7,9 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/utils" - "github.com/neutron-org/neutron/v4/x/dex/types" - dexutils "github.com/neutron-org/neutron/v4/x/dex/utils" + "github.com/neutron-org/neutron/v5/utils" + "github.com/neutron-org/neutron/v5/x/dex/types" + dexutils "github.com/neutron-org/neutron/v5/x/dex/utils" ) func (k Keeper) UserDepositsAll( diff --git a/x/dex/keeper/grpc_query_user_deposits_test.go b/x/dex/keeper/grpc_query_user_deposits_test.go index f29bb3c62..e9c6a8f73 100644 --- a/x/dex/keeper/grpc_query_user_deposits_test.go +++ b/x/dex/keeper/grpc_query_user_deposits_test.go @@ -12,10 +12,10 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - neutronapp "github.com/neutron-org/neutron/v4/app" - "github.com/neutron-org/neutron/v4/testutil" - keepertest "github.com/neutron-org/neutron/v4/x/dex/keeper/internal/testutils" - "github.com/neutron-org/neutron/v4/x/dex/types" + neutronapp "github.com/neutron-org/neutron/v5/app" + "github.com/neutron-org/neutron/v5/testutil" + keepertest "github.com/neutron-org/neutron/v5/x/dex/keeper/internal/testutils" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func simulateDeposit(ctx sdk.Context, app *neutronapp.App, addr sdk.AccAddress, deposit *types.DepositRecord) *types.Pool { diff --git a/x/dex/keeper/inactive_limit_order_tranche.go b/x/dex/keeper/inactive_limit_order_tranche.go index d29aba18e..df21b945b 100644 --- a/x/dex/keeper/inactive_limit_order_tranche.go +++ b/x/dex/keeper/inactive_limit_order_tranche.go @@ -5,7 +5,7 @@ import ( storetypes "cosmossdk.io/store/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // SetInactiveLimitOrderTranche set a specific inactiveLimitOrderTranche in the store from its index diff --git a/x/dex/keeper/inactive_limit_order_tranche_test.go b/x/dex/keeper/inactive_limit_order_tranche_test.go index fbba221f1..2c86871a3 100644 --- a/x/dex/keeper/inactive_limit_order_tranche_test.go +++ b/x/dex/keeper/inactive_limit_order_tranche_test.go @@ -8,10 +8,10 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - keepertest "github.com/neutron-org/neutron/v4/testutil/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + keepertest "github.com/neutron-org/neutron/v5/testutil/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func createNInactiveLimitOrderTranche( diff --git a/x/dex/keeper/integration_cancellimitorder_test.go b/x/dex/keeper/integration_cancellimitorder_test.go index f72a444d6..716832687 100644 --- a/x/dex/keeper/integration_cancellimitorder_test.go +++ b/x/dex/keeper/integration_cancellimitorder_test.go @@ -6,7 +6,7 @@ import ( sdkmath "cosmossdk.io/math" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func (s *DexTestSuite) TestCancelEntireLimitOrderAOneExists() { diff --git a/x/dex/keeper/integration_deposit_autoswap_unit_test.go b/x/dex/keeper/integration_deposit_autoswap_unit_test.go index 5e0b68773..1e6dc438f 100644 --- a/x/dex/keeper/integration_deposit_autoswap_unit_test.go +++ b/x/dex/keeper/integration_deposit_autoswap_unit_test.go @@ -1,6 +1,6 @@ package keeper_test -import "github.com/neutron-org/neutron/v4/x/dex/types" +import "github.com/neutron-org/neutron/v5/x/dex/types" func (s *DexTestSuite) TestAutoswapperWithdraws() { s.fundAliceBalances(50, 50) diff --git a/x/dex/keeper/integration_deposit_doublesided_test.go b/x/dex/keeper/integration_deposit_doublesided_test.go index 3f54f9c16..57f9a2e0c 100644 --- a/x/dex/keeper/integration_deposit_doublesided_test.go +++ b/x/dex/keeper/integration_deposit_doublesided_test.go @@ -3,7 +3,7 @@ package keeper_test import ( "cosmossdk.io/math" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func (s *DexTestSuite) TestDepositDoubleSidedInSpreadCurrTickAdjusted() { diff --git a/x/dex/keeper/integration_deposit_multi_test.go b/x/dex/keeper/integration_deposit_multi_test.go index a9a72c906..a33a6064d 100644 --- a/x/dex/keeper/integration_deposit_multi_test.go +++ b/x/dex/keeper/integration_deposit_multi_test.go @@ -1,7 +1,7 @@ package keeper_test import ( - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func (s *DexTestSuite) TestDepositMultiCompleteFailure() { diff --git a/x/dex/keeper/integration_deposit_singlesided_test.go b/x/dex/keeper/integration_deposit_singlesided_test.go index 5edcbf01a..71e3847c8 100644 --- a/x/dex/keeper/integration_deposit_singlesided_test.go +++ b/x/dex/keeper/integration_deposit_singlesided_test.go @@ -5,7 +5,7 @@ import ( sdkmath "cosmossdk.io/math" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func (s *DexTestSuite) TestDepositSingleSidedInSpread1To0() { diff --git a/x/dex/keeper/integration_multihopswap_test.go b/x/dex/keeper/integration_multihopswap_test.go index 29ffdc6f0..bb16f2dca 100644 --- a/x/dex/keeper/integration_multihopswap_test.go +++ b/x/dex/keeper/integration_multihopswap_test.go @@ -4,8 +4,8 @@ import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - math_utils "github.com/neutron-org/neutron/v4/utils/math" - "github.com/neutron-org/neutron/v4/x/dex/types" + math_utils "github.com/neutron-org/neutron/v5/utils/math" + "github.com/neutron-org/neutron/v5/x/dex/types" ) type PoolSetup struct { diff --git a/x/dex/keeper/integration_placelimitorder_test.go b/x/dex/keeper/integration_placelimitorder_test.go index 37c822973..18f659287 100644 --- a/x/dex/keeper/integration_placelimitorder_test.go +++ b/x/dex/keeper/integration_placelimitorder_test.go @@ -7,8 +7,8 @@ import ( sdkmath "cosmossdk.io/math" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - math_utils "github.com/neutron-org/neutron/v4/utils/math" - "github.com/neutron-org/neutron/v4/x/dex/types" + math_utils "github.com/neutron-org/neutron/v5/utils/math" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // Core tests w/ GTC limitOrders ////////////////////////////////////////////// diff --git a/x/dex/keeper/integration_withdraw_multi_test.go b/x/dex/keeper/integration_withdraw_multi_test.go index 8dca0ba28..8857fa366 100644 --- a/x/dex/keeper/integration_withdraw_multi_test.go +++ b/x/dex/keeper/integration_withdraw_multi_test.go @@ -1,7 +1,7 @@ package keeper_test import ( - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func (s *DexTestSuite) TestWithdrawMultiFailure() { diff --git a/x/dex/keeper/integration_withdraw_test.go b/x/dex/keeper/integration_withdraw_test.go index fa146e61a..d9e5292c2 100644 --- a/x/dex/keeper/integration_withdraw_test.go +++ b/x/dex/keeper/integration_withdraw_test.go @@ -5,7 +5,7 @@ import ( sdkmath "cosmossdk.io/math" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func (s *DexTestSuite) TestPartialWithdrawOnlyA() { diff --git a/x/dex/keeper/integration_withdrawfilled_test.go b/x/dex/keeper/integration_withdrawfilled_test.go index 97df676c0..26e111875 100644 --- a/x/dex/keeper/integration_withdrawfilled_test.go +++ b/x/dex/keeper/integration_withdrawfilled_test.go @@ -6,7 +6,7 @@ import ( sdkmath "cosmossdk.io/math" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func (s *DexTestSuite) TestWithdrawFilledSimpleFull() { diff --git a/x/dex/keeper/internal/testutils/test_helpers.go b/x/dex/keeper/internal/testutils/test_helpers.go index 4af8ec773..e1ea65424 100644 --- a/x/dex/keeper/internal/testutils/test_helpers.go +++ b/x/dex/keeper/internal/testutils/test_helpers.go @@ -5,7 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - dexmoduletypes "github.com/neutron-org/neutron/v4/x/dex/types" + dexmoduletypes "github.com/neutron-org/neutron/v5/x/dex/types" ) func NewACoin(amt math.Int) sdk.Coin { diff --git a/x/dex/keeper/keeper.go b/x/dex/keeper/keeper.go index 797b74d48..e2c5b7f98 100644 --- a/x/dex/keeper/keeper.go +++ b/x/dex/keeper/keeper.go @@ -8,7 +8,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) type ( diff --git a/x/dex/keeper/limit_order_expiration.go b/x/dex/keeper/limit_order_expiration.go index f9127a38f..58b6584c8 100644 --- a/x/dex/keeper/limit_order_expiration.go +++ b/x/dex/keeper/limit_order_expiration.go @@ -7,7 +7,7 @@ import ( storetypes "cosmossdk.io/store/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // Creates a new LimitOrderExpiration struct based on a LimitOrderTranche diff --git a/x/dex/keeper/limit_order_expiration_test.go b/x/dex/keeper/limit_order_expiration_test.go index acfb468ad..8dadf9ee9 100644 --- a/x/dex/keeper/limit_order_expiration_test.go +++ b/x/dex/keeper/limit_order_expiration_test.go @@ -9,8 +9,8 @@ import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) const gasRequiredToPurgeOneLO uint64 = 9_000 diff --git a/x/dex/keeper/limit_order_tranche.go b/x/dex/keeper/limit_order_tranche.go index 5ffaee303..034220302 100644 --- a/x/dex/keeper/limit_order_tranche.go +++ b/x/dex/keeper/limit_order_tranche.go @@ -10,8 +10,8 @@ import ( storetypes "cosmossdk.io/store/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" - "github.com/neutron-org/neutron/v4/x/dex/utils" + "github.com/neutron-org/neutron/v5/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/utils" ) func NewLimitOrderTranche( diff --git a/x/dex/keeper/limit_order_tranche_test.go b/x/dex/keeper/limit_order_tranche_test.go index 3c44f3822..35d69d394 100644 --- a/x/dex/keeper/limit_order_tranche_test.go +++ b/x/dex/keeper/limit_order_tranche_test.go @@ -8,10 +8,10 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - keepertest "github.com/neutron-org/neutron/v4/testutil/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + keepertest "github.com/neutron-org/neutron/v5/testutil/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func createNLimitOrderTranches( diff --git a/x/dex/keeper/limit_order_tranche_user.go b/x/dex/keeper/limit_order_tranche_user.go index 9df5c072e..74fdcc2da 100644 --- a/x/dex/keeper/limit_order_tranche_user.go +++ b/x/dex/keeper/limit_order_tranche_user.go @@ -6,7 +6,7 @@ import ( storetypes "cosmossdk.io/store/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func (k Keeper) GetOrInitLimitOrderTrancheUser( diff --git a/x/dex/keeper/limit_order_tranche_user_test.go b/x/dex/keeper/limit_order_tranche_user_test.go index a5578ee43..cfde55729 100644 --- a/x/dex/keeper/limit_order_tranche_user_test.go +++ b/x/dex/keeper/limit_order_tranche_user_test.go @@ -8,10 +8,10 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - keepertest "github.com/neutron-org/neutron/v4/testutil/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + keepertest "github.com/neutron-org/neutron/v5/testutil/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func createNLimitOrderTrancheUser(keeper *keeper.Keeper, ctx sdk.Context, n int) []*types.LimitOrderTrancheUser { diff --git a/x/dex/keeper/liquidity.go b/x/dex/keeper/liquidity.go index 145657505..c3f8f61eb 100644 --- a/x/dex/keeper/liquidity.go +++ b/x/dex/keeper/liquidity.go @@ -4,8 +4,8 @@ import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - math_utils "github.com/neutron-org/neutron/v4/utils/math" - "github.com/neutron-org/neutron/v4/x/dex/types" + math_utils "github.com/neutron-org/neutron/v5/utils/math" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func (k Keeper) Swap( diff --git a/x/dex/keeper/liquidity_iterator.go b/x/dex/keeper/liquidity_iterator.go index 107216641..b85b5aeb5 100644 --- a/x/dex/keeper/liquidity_iterator.go +++ b/x/dex/keeper/liquidity_iterator.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) type LiquidityIterator struct { diff --git a/x/dex/keeper/liquidity_test.go b/x/dex/keeper/liquidity_test.go index df4fda66a..6bae1f0ea 100644 --- a/x/dex/keeper/liquidity_test.go +++ b/x/dex/keeper/liquidity_test.go @@ -6,7 +6,7 @@ import ( sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // TODO: In an ideal world, there should be enough lower level testing that the swap tests diff --git a/x/dex/keeper/migrations.go b/x/dex/keeper/migrations.go index 40ae77bf4..ff154a91a 100644 --- a/x/dex/keeper/migrations.go +++ b/x/dex/keeper/migrations.go @@ -3,8 +3,8 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - v3 "github.com/neutron-org/neutron/v4/x/dex/migrations/v3" - v4 "github.com/neutron-org/neutron/v4/x/dex/migrations/v4" + v3 "github.com/neutron-org/neutron/v5/x/dex/migrations/v3" + v4 "github.com/neutron-org/neutron/v5/x/dex/migrations/v4" ) // Migrator is a struct for handling in-place store migrations. diff --git a/x/dex/keeper/msg_server.go b/x/dex/keeper/msg_server.go index 2b3bca666..f83600480 100644 --- a/x/dex/keeper/msg_server.go +++ b/x/dex/keeper/msg_server.go @@ -8,7 +8,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) type MsgServer struct { diff --git a/x/dex/keeper/msg_server_test.go b/x/dex/keeper/msg_server_test.go index 905d129aa..c790a17e0 100644 --- a/x/dex/keeper/msg_server_test.go +++ b/x/dex/keeper/msg_server_test.go @@ -13,13 +13,13 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/suite" - "github.com/neutron-org/neutron/v4/testutil/apptesting" - "github.com/neutron-org/neutron/v4/testutil/common/sample" - testkeeper "github.com/neutron-org/neutron/v4/testutil/dex/keeper" - math_utils "github.com/neutron-org/neutron/v4/utils/math" - dexkeeper "github.com/neutron-org/neutron/v4/x/dex/keeper" - testutils "github.com/neutron-org/neutron/v4/x/dex/keeper/internal/testutils" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/testutil/apptesting" + "github.com/neutron-org/neutron/v5/testutil/common/sample" + testkeeper "github.com/neutron-org/neutron/v5/testutil/dex/keeper" + math_utils "github.com/neutron-org/neutron/v5/utils/math" + dexkeeper "github.com/neutron-org/neutron/v5/x/dex/keeper" + testutils "github.com/neutron-org/neutron/v5/x/dex/keeper/internal/testutils" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // Test suite diff --git a/x/dex/keeper/multihop_swap.go b/x/dex/keeper/multihop_swap.go index ab1ad4798..df27dc81a 100644 --- a/x/dex/keeper/multihop_swap.go +++ b/x/dex/keeper/multihop_swap.go @@ -10,8 +10,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - math_utils "github.com/neutron-org/neutron/v4/utils/math" - "github.com/neutron-org/neutron/v4/x/dex/types" + math_utils "github.com/neutron-org/neutron/v5/utils/math" + "github.com/neutron-org/neutron/v5/x/dex/types" ) type MultihopStep struct { diff --git a/x/dex/keeper/params.go b/x/dex/keeper/params.go index 6cd94982f..efa743898 100644 --- a/x/dex/keeper/params.go +++ b/x/dex/keeper/params.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // GetParams get all parameters as types.Params diff --git a/x/dex/keeper/params_test.go b/x/dex/keeper/params_test.go index 1e4b112f3..c84ae9294 100644 --- a/x/dex/keeper/params_test.go +++ b/x/dex/keeper/params_test.go @@ -5,9 +5,9 @@ import ( "github.com/stretchr/testify/require" - testkeeper "github.com/neutron-org/neutron/v4/testutil/dex/keeper" - math_utils "github.com/neutron-org/neutron/v4/utils/math" - "github.com/neutron-org/neutron/v4/x/dex/types" + testkeeper "github.com/neutron-org/neutron/v5/testutil/dex/keeper" + math_utils "github.com/neutron-org/neutron/v5/utils/math" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func TestGetParams(t *testing.T) { diff --git a/x/dex/keeper/place_limit_order.go b/x/dex/keeper/place_limit_order.go index 161707765..e6a027a5a 100644 --- a/x/dex/keeper/place_limit_order.go +++ b/x/dex/keeper/place_limit_order.go @@ -7,8 +7,8 @@ import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - math_utils "github.com/neutron-org/neutron/v4/utils/math" - "github.com/neutron-org/neutron/v4/x/dex/types" + math_utils "github.com/neutron-org/neutron/v5/utils/math" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // PlaceLimitOrderCore handles the logic for MsgPlaceLimitOrder including bank operations and event emissions. diff --git a/x/dex/keeper/pool.go b/x/dex/keeper/pool.go index 611dbee68..3faf36ab1 100644 --- a/x/dex/keeper/pool.go +++ b/x/dex/keeper/pool.go @@ -6,8 +6,8 @@ import ( "cosmossdk.io/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" - "github.com/neutron-org/neutron/v4/x/dex/utils" + "github.com/neutron-org/neutron/v5/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/utils" ) func (k Keeper) GetOrInitPool( diff --git a/x/dex/keeper/pool_metadata.go b/x/dex/keeper/pool_metadata.go index 43dbc8f06..ed9a9f497 100644 --- a/x/dex/keeper/pool_metadata.go +++ b/x/dex/keeper/pool_metadata.go @@ -7,7 +7,7 @@ import ( storetypes "cosmossdk.io/store/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // SetPoolMetadata set a specific poolMetadata in the store diff --git a/x/dex/keeper/pool_metadata_test.go b/x/dex/keeper/pool_metadata_test.go index 7b0c52931..1e9081ee8 100644 --- a/x/dex/keeper/pool_metadata_test.go +++ b/x/dex/keeper/pool_metadata_test.go @@ -6,10 +6,10 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - keepertest "github.com/neutron-org/neutron/v4/testutil/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + keepertest "github.com/neutron-org/neutron/v5/testutil/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func createNPoolMetadata(keeper *keeper.Keeper, ctx sdk.Context, n int) []types.PoolMetadata { diff --git a/x/dex/keeper/pool_reserves.go b/x/dex/keeper/pool_reserves.go index 5f0262449..4d853ac3b 100644 --- a/x/dex/keeper/pool_reserves.go +++ b/x/dex/keeper/pool_reserves.go @@ -4,7 +4,7 @@ import ( "cosmossdk.io/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func (k Keeper) SetPoolReserves(ctx sdk.Context, poolReserves *types.PoolReserves) { diff --git a/x/dex/keeper/pool_reserves_test.go b/x/dex/keeper/pool_reserves_test.go index 6ddb2cac8..0e0d4f18e 100644 --- a/x/dex/keeper/pool_reserves_test.go +++ b/x/dex/keeper/pool_reserves_test.go @@ -6,10 +6,10 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - keepertest "github.com/neutron-org/neutron/v4/testutil/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + keepertest "github.com/neutron-org/neutron/v5/testutil/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func createNPoolReserves(k *keeper.Keeper, ctx sdk.Context, n int) []*types.PoolReserves { diff --git a/x/dex/keeper/pool_test.go b/x/dex/keeper/pool_test.go index f2b2d55ea..da11d949e 100644 --- a/x/dex/keeper/pool_test.go +++ b/x/dex/keeper/pool_test.go @@ -7,9 +7,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - keepertest "github.com/neutron-org/neutron/v4/testutil/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + keepertest "github.com/neutron-org/neutron/v5/testutil/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func createNPools(k *keeper.Keeper, ctx sdk.Context, n int) []*types.Pool { diff --git a/x/dex/keeper/tick_iterator.go b/x/dex/keeper/tick_iterator.go index 583f77a79..f5933a70d 100644 --- a/x/dex/keeper/tick_iterator.go +++ b/x/dex/keeper/tick_iterator.go @@ -6,7 +6,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) type TickIterator struct { diff --git a/x/dex/keeper/tick_liquidity.go b/x/dex/keeper/tick_liquidity.go index 9c0989702..94030ac6f 100644 --- a/x/dex/keeper/tick_liquidity.go +++ b/x/dex/keeper/tick_liquidity.go @@ -5,7 +5,7 @@ import ( storetypes "cosmossdk.io/store/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // GetAllTickLiquidity returns all tickLiquidity diff --git a/x/dex/keeper/tick_liquidity_test.go b/x/dex/keeper/tick_liquidity_test.go index 34e89f800..5472246df 100644 --- a/x/dex/keeper/tick_liquidity_test.go +++ b/x/dex/keeper/tick_liquidity_test.go @@ -8,9 +8,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - keepertest "github.com/neutron-org/neutron/v4/testutil/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + keepertest "github.com/neutron-org/neutron/v5/testutil/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func CreateNTickLiquidity(keeper *keeper.Keeper, ctx sdk.Context, n int) []*types.TickLiquidity { diff --git a/x/dex/keeper/withdraw.go b/x/dex/keeper/withdraw.go index ff81dd3f1..1810b6d0f 100644 --- a/x/dex/keeper/withdraw.go +++ b/x/dex/keeper/withdraw.go @@ -7,7 +7,7 @@ import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // WithdrawCore handles logic for MsgWithdrawal including bank operations and event emissions. diff --git a/x/dex/keeper/withdraw_filled_limit_order.go b/x/dex/keeper/withdraw_filled_limit_order.go index b6d25c460..265723727 100644 --- a/x/dex/keeper/withdraw_filled_limit_order.go +++ b/x/dex/keeper/withdraw_filled_limit_order.go @@ -7,7 +7,7 @@ import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // WithdrawFilledLimitOrderCore handles MsgWithdrawFilledLimitOrder including bank operations and event emissions. diff --git a/x/dex/migrations/v3/store.go b/x/dex/migrations/v3/store.go index bb26392f1..786c89753 100644 --- a/x/dex/migrations/v3/store.go +++ b/x/dex/migrations/v3/store.go @@ -9,8 +9,8 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" - v2types "github.com/neutron-org/neutron/v4/x/dex/types/v2" + "github.com/neutron-org/neutron/v5/x/dex/types" + v2types "github.com/neutron-org/neutron/v5/x/dex/types/v2" ) // MigrateStore performs in-place store migrations. diff --git a/x/dex/migrations/v3/store_test.go b/x/dex/migrations/v3/store_test.go index 7dc44dc37..f884a6b54 100644 --- a/x/dex/migrations/v3/store_test.go +++ b/x/dex/migrations/v3/store_test.go @@ -8,12 +8,12 @@ import ( "cosmossdk.io/store/prefix" "github.com/stretchr/testify/suite" - "github.com/neutron-org/neutron/v4/testutil" - "github.com/neutron-org/neutron/v4/utils/math" - v3 "github.com/neutron-org/neutron/v4/x/dex/migrations/v3" - "github.com/neutron-org/neutron/v4/x/dex/types" - v2types "github.com/neutron-org/neutron/v4/x/dex/types/v2" - "github.com/neutron-org/neutron/v4/x/dex/utils" + "github.com/neutron-org/neutron/v5/testutil" + "github.com/neutron-org/neutron/v5/utils/math" + v3 "github.com/neutron-org/neutron/v5/x/dex/migrations/v3" + "github.com/neutron-org/neutron/v5/x/dex/types" + v2types "github.com/neutron-org/neutron/v5/x/dex/types/v2" + "github.com/neutron-org/neutron/v5/x/dex/utils" ) type V3DexMigrationTestSuite struct { diff --git a/x/dex/migrations/v4/store.go b/x/dex/migrations/v4/store.go index 61dd9a922..b9546a179 100644 --- a/x/dex/migrations/v4/store.go +++ b/x/dex/migrations/v4/store.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // MigrateStore performs in-place store migrations. diff --git a/x/dex/migrations/v4/store_test.go b/x/dex/migrations/v4/store_test.go index 10aa1bded..9957b90f9 100644 --- a/x/dex/migrations/v4/store_test.go +++ b/x/dex/migrations/v4/store_test.go @@ -5,10 +5,10 @@ import ( "github.com/stretchr/testify/suite" - "github.com/neutron-org/neutron/v4/testutil" - "github.com/neutron-org/neutron/v4/utils/math" - v4 "github.com/neutron-org/neutron/v4/x/dex/migrations/v4" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/testutil" + "github.com/neutron-org/neutron/v5/utils/math" + v4 "github.com/neutron-org/neutron/v5/x/dex/migrations/v4" + "github.com/neutron-org/neutron/v5/x/dex/types" ) type V4DexMigrationTestSuite struct { diff --git a/x/dex/module.go b/x/dex/module.go index f2fa6cb52..5e986448c 100644 --- a/x/dex/module.go +++ b/x/dex/module.go @@ -19,9 +19,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - "github.com/neutron-org/neutron/v4/x/dex/client/cli" - "github.com/neutron-org/neutron/v4/x/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/client/cli" + "github.com/neutron-org/neutron/v5/x/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) var ( diff --git a/x/dex/module_simulation.go b/x/dex/module_simulation.go index b6fc4c12f..f62d9a19b 100644 --- a/x/dex/module_simulation.go +++ b/x/dex/module_simulation.go @@ -8,9 +8,9 @@ import ( simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" - "github.com/neutron-org/neutron/v4/testutil/common/sample" - dexsimulation "github.com/neutron-org/neutron/v4/x/dex/simulation" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/testutil/common/sample" + dexsimulation "github.com/neutron-org/neutron/v5/x/dex/simulation" + "github.com/neutron-org/neutron/v5/x/dex/types" ) // avoid unused import issue diff --git a/x/dex/simulation/cancel_limit_order.go b/x/dex/simulation/cancel_limit_order.go index 1326ddca8..b7c2422c1 100644 --- a/x/dex/simulation/cancel_limit_order.go +++ b/x/dex/simulation/cancel_limit_order.go @@ -7,8 +7,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/neutron-org/neutron/v4/x/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func SimulateMsgCancelLimitOrder( diff --git a/x/dex/simulation/deposit.go b/x/dex/simulation/deposit.go index e122cb262..ffc55b9b7 100644 --- a/x/dex/simulation/deposit.go +++ b/x/dex/simulation/deposit.go @@ -7,8 +7,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/neutron-org/neutron/v4/x/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func SimulateMsgDeposit( diff --git a/x/dex/simulation/multi_hop_swap.go b/x/dex/simulation/multi_hop_swap.go index eec7070cb..55cb251d0 100644 --- a/x/dex/simulation/multi_hop_swap.go +++ b/x/dex/simulation/multi_hop_swap.go @@ -7,8 +7,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/neutron-org/neutron/v4/x/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func SimulateMsgMultiHopSwap( diff --git a/x/dex/simulation/place_limit_order.go b/x/dex/simulation/place_limit_order.go index 1b1c15ee3..de5b3cbf8 100644 --- a/x/dex/simulation/place_limit_order.go +++ b/x/dex/simulation/place_limit_order.go @@ -7,8 +7,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/neutron-org/neutron/v4/x/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func SimulateMsgPlaceLimitOrder( diff --git a/x/dex/simulation/withdrawl.go b/x/dex/simulation/withdrawl.go index ba5cce907..f45ea2986 100644 --- a/x/dex/simulation/withdrawl.go +++ b/x/dex/simulation/withdrawl.go @@ -7,8 +7,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/neutron-org/neutron/v4/x/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func SimulateMsgWithdrawal( diff --git a/x/dex/simulation/withdrawl_filled_limit_order.go b/x/dex/simulation/withdrawl_filled_limit_order.go index ede547d4e..72c6f6b58 100644 --- a/x/dex/simulation/withdrawl_filled_limit_order.go +++ b/x/dex/simulation/withdrawl_filled_limit_order.go @@ -7,8 +7,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/neutron-org/neutron/v4/x/dex/keeper" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/keeper" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func SimulateMsgWithdrawFilledLimitOrder( diff --git a/x/dex/types/deposit_record.pb.go b/x/dex/types/deposit_record.pb.go index 8d3ca7286..03345af53 100644 --- a/x/dex/types/deposit_record.pb.go +++ b/x/dex/types/deposit_record.pb.go @@ -120,30 +120,30 @@ var fileDescriptor_250413eadaebbf28 = []byte{ // 410 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x3f, 0x8f, 0x94, 0x40, 0x18, 0xc6, 0x19, 0xc1, 0x3d, 0x1d, 0xfc, 0x73, 0xc7, 0xa9, 0xc1, 0x2d, 0x80, 0x50, 0x11, 0xf5, - 0x20, 0x51, 0x2b, 0xcb, 0xcd, 0x26, 0x86, 0x4a, 0x83, 0x56, 0x36, 0x84, 0x63, 0x46, 0x76, 0xb2, - 0xc0, 0x4b, 0x86, 0x59, 0x8f, 0xfb, 0x16, 0x7e, 0xac, 0xab, 0xcc, 0x95, 0xc6, 0x82, 0x98, 0xdd, - 0xce, 0xd2, 0x4f, 0x60, 0x66, 0x40, 0x0f, 0x1a, 0xbb, 0xf7, 0x7d, 0xe6, 0xf7, 0xce, 0x33, 0x4f, - 0xde, 0xc1, 0x5e, 0x4d, 0x77, 0x82, 0x43, 0x1d, 0x11, 0xda, 0x45, 0x84, 0x36, 0xd0, 0x32, 0x91, - 0x72, 0x9a, 0x03, 0x27, 0x61, 0xc3, 0x41, 0x80, 0x65, 0x8e, 0x44, 0x48, 0x68, 0xb7, 0x7c, 0x54, - 0x40, 0x01, 0x4a, 0x8f, 0x64, 0x35, 0x20, 0xcb, 0xa7, 0xd3, 0x4b, 0x9a, 0x8c, 0xf1, 0x94, 0x8d, - 0xd3, 0xcb, 0x27, 0xb3, 0x23, 0x80, 0x72, 0xd0, 0xfd, 0x6f, 0x3a, 0xbe, 0xbf, 0x1e, 0xec, 0x12, - 0xe5, 0x66, 0xbd, 0xc0, 0x47, 0xe3, 0xa8, 0x8d, 0x3c, 0x14, 0x98, 0x2f, 0x4f, 0xc3, 0x89, 0x73, - 0xf8, 0x3e, 0x63, 0x3c, 0x5e, 0x27, 0x0b, 0xc9, 0xc4, 0xc4, 0x2a, 0xf0, 0xbd, 0x76, 0x93, 0x71, - 0xda, 0xa6, 0x70, 0x51, 0x53, 0x62, 0xdf, 0xf2, 0x50, 0x70, 0x77, 0xb5, 0xbe, 0xea, 0x5d, 0xed, - 0x47, 0xef, 0x3e, 0xce, 0xa1, 0xad, 0xa0, 0x6d, 0xc9, 0x36, 0x64, 0x10, 0x55, 0x99, 0xd8, 0x84, - 0x71, 0x2d, 0x7e, 0xf5, 0xee, 0x6c, 0xe8, 0x77, 0xef, 0x9e, 0x5e, 0x66, 0x55, 0xf9, 0xc6, 0x9f, - 0xaa, 0x7e, 0x62, 0x0e, 0xed, 0x3b, 0xd9, 0x59, 0xcf, 0xf0, 0x49, 0x4e, 0x6b, 0x41, 0x79, 0x2a, - 0x58, 0xbe, 0x4d, 0x59, 0x4d, 0x68, 0x67, 0xeb, 0x1e, 0x0a, 0xf4, 0xe4, 0xe1, 0x70, 0xf0, 0x91, - 0xe5, 0xdb, 0x58, 0xca, 0x56, 0x80, 0x8f, 0x4b, 0xb8, 0x98, 0xa3, 0x86, 0x42, 0x1f, 0x28, 0x7d, - 0x46, 0xee, 0x9a, 0x66, 0x4e, 0xde, 0x1e, 0x48, 0xa5, 0xdf, 0x90, 0xc7, 0x58, 0xff, 0x4c, 0xa9, - 0xbd, 0xf0, 0x50, 0x60, 0x24, 0xb2, 0x94, 0xd1, 0x05, 0x88, 0xac, 0x4c, 0x87, 0x67, 0xda, 0x47, - 0xff, 0xa2, 0xa3, 0xff, 0x46, 0x9f, 0x0e, 0xdd, 0x44, 0x9f, 0xaa, 0x7e, 0x62, 0xaa, 0xf6, 0x83, - 0xea, 0xac, 0xe7, 0xd8, 0x90, 0x1b, 0xb3, 0xef, 0xa8, 0x75, 0x9c, 0xcc, 0xd7, 0x01, 0x50, 0xae, - 0x0c, 0xe9, 0x99, 0x28, 0x68, 0xf5, 0xf6, 0x6a, 0xef, 0xa0, 0xeb, 0xbd, 0x83, 0x7e, 0xee, 0x1d, - 0xf4, 0xf5, 0xe0, 0x68, 0xd7, 0x07, 0x47, 0xfb, 0x7e, 0x70, 0xb4, 0x4f, 0x67, 0x05, 0x13, 0x9b, - 0xdd, 0x79, 0x98, 0x43, 0x15, 0x8d, 0x57, 0x9c, 0x01, 0x2f, 0xfe, 0xd6, 0xd1, 0x97, 0xd7, 0x51, - 0xa7, 0xbe, 0x87, 0xb8, 0x6c, 0x68, 0x7b, 0xbe, 0x50, 0x1f, 0xe4, 0xd5, 0x9f, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x53, 0xa8, 0xdc, 0x43, 0x9a, 0x02, 0x00, 0x00, + 0x20, 0xd1, 0xd8, 0x58, 0x6e, 0x36, 0x31, 0x54, 0x1a, 0xb4, 0xb2, 0x21, 0x1c, 0x33, 0xb2, 0x93, + 0x05, 0x5e, 0x32, 0xcc, 0x7a, 0xdc, 0xb7, 0xf0, 0x63, 0x5d, 0x65, 0xae, 0x34, 0x16, 0xc4, 0xec, + 0x76, 0x96, 0x7e, 0x02, 0x33, 0x03, 0x7a, 0xd0, 0xd8, 0xbd, 0xef, 0x33, 0xbf, 0x77, 0x9e, 0x79, + 0xf2, 0x0e, 0xf6, 0x6a, 0xba, 0x13, 0x1c, 0xea, 0x88, 0xd0, 0x2e, 0x22, 0xb4, 0x81, 0x96, 0x89, + 0x94, 0xd3, 0x1c, 0x38, 0x09, 0x1b, 0x0e, 0x02, 0x2c, 0x73, 0x24, 0x42, 0x42, 0xbb, 0xe5, 0xa3, + 0x02, 0x0a, 0x50, 0x7a, 0x24, 0xab, 0x01, 0x59, 0x3e, 0x9d, 0x5e, 0xd2, 0x64, 0x8c, 0xa7, 0x6c, + 0x9c, 0x5e, 0x3e, 0x99, 0x1d, 0x01, 0x94, 0x83, 0xee, 0x7f, 0xd3, 0xf1, 0xfd, 0xf5, 0x60, 0x97, + 0x28, 0x37, 0xeb, 0x05, 0x3e, 0x1a, 0x47, 0x6d, 0xe4, 0xa1, 0xc0, 0x7c, 0x79, 0x1a, 0x4e, 0x9c, + 0xc3, 0xf7, 0x19, 0xe3, 0xf1, 0x3a, 0x59, 0x48, 0x26, 0x26, 0x56, 0x81, 0xef, 0xb5, 0x9b, 0x8c, + 0xd3, 0x36, 0x85, 0x8b, 0x9a, 0x12, 0xfb, 0x96, 0x87, 0x82, 0xbb, 0xab, 0xf5, 0x55, 0xef, 0x6a, + 0x3f, 0x7a, 0xf7, 0x71, 0x0e, 0x6d, 0x05, 0x6d, 0x4b, 0xb6, 0x21, 0x83, 0xa8, 0xca, 0xc4, 0x26, + 0x8c, 0x6b, 0xf1, 0xab, 0x77, 0x67, 0x43, 0xbf, 0x7b, 0xf7, 0xf4, 0x32, 0xab, 0xca, 0x37, 0xfe, + 0x54, 0xf5, 0x13, 0x73, 0x68, 0xdf, 0xc9, 0xce, 0x7a, 0x86, 0x4f, 0x72, 0x5a, 0x0b, 0xca, 0x53, + 0xc1, 0xf2, 0x6d, 0xca, 0x6a, 0x42, 0x3b, 0x5b, 0xf7, 0x50, 0xa0, 0x27, 0x0f, 0x87, 0x83, 0x8f, + 0x2c, 0xdf, 0xc6, 0x52, 0xb6, 0x02, 0x7c, 0x5c, 0xc2, 0xc5, 0x1c, 0x35, 0x14, 0xfa, 0x40, 0xe9, + 0x33, 0x72, 0xd7, 0x34, 0x73, 0xf2, 0xf6, 0x40, 0x2a, 0xfd, 0x86, 0x3c, 0xc6, 0xfa, 0x67, 0x4a, + 0xed, 0x85, 0x87, 0x02, 0x23, 0x91, 0xa5, 0x8c, 0x2e, 0x40, 0x64, 0x65, 0x3a, 0x3c, 0xd3, 0x3e, + 0xfa, 0x17, 0x1d, 0xfd, 0x37, 0xfa, 0x74, 0xe8, 0x26, 0xfa, 0x54, 0xf5, 0x13, 0x53, 0xb5, 0x1f, + 0x54, 0x67, 0x3d, 0xc7, 0x86, 0xdc, 0x98, 0x7d, 0x47, 0xad, 0xe3, 0x64, 0xbe, 0x0e, 0x80, 0x72, + 0x65, 0x48, 0xcf, 0x44, 0x41, 0xab, 0xb7, 0x57, 0x7b, 0x07, 0x5d, 0xef, 0x1d, 0xf4, 0x73, 0xef, + 0xa0, 0xaf, 0x07, 0x47, 0xbb, 0x3e, 0x38, 0xda, 0xf7, 0x83, 0xa3, 0x7d, 0x3a, 0x2b, 0x98, 0xd8, + 0xec, 0xce, 0xc3, 0x1c, 0xaa, 0x68, 0xbc, 0xe2, 0x0c, 0x78, 0xf1, 0xb7, 0x8e, 0xbe, 0xbc, 0x8e, + 0x3a, 0xf5, 0x3d, 0xc4, 0x65, 0x43, 0xdb, 0xf3, 0x85, 0xfa, 0x20, 0xaf, 0xfe, 0x04, 0x00, 0x00, + 0xff, 0xff, 0xcd, 0x2b, 0x06, 0xdc, 0x9a, 0x02, 0x00, 0x00, } func (m *DepositRecord) Marshal() (dAtA []byte, err error) { diff --git a/x/dex/types/genesis.pb.go b/x/dex/types/genesis.pb.go index 167877ac6..50a5e0b85 100644 --- a/x/dex/types/genesis.pb.go +++ b/x/dex/types/genesis.pb.go @@ -116,32 +116,32 @@ func init() { proto.RegisterFile("neutron/dex/genesis.proto", fileDescriptor_0c0 var fileDescriptor_0c051a8a0d58cd8b = []byte{ // 407 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xb1, 0xae, 0xda, 0x30, - 0x14, 0x86, 0x93, 0x42, 0x91, 0x6a, 0x3a, 0xb4, 0xa1, 0x43, 0x88, 0x44, 0x48, 0x91, 0x2a, 0xa1, - 0x4a, 0x24, 0x2a, 0xed, 0x13, 0xd0, 0x81, 0x05, 0x54, 0x44, 0xe9, 0xd2, 0x25, 0x32, 0x89, 0x15, - 0x5c, 0x92, 0x38, 0x75, 0x4e, 0x10, 0xbc, 0x45, 0x1f, 0x8b, 0x91, 0xb1, 0x4b, 0xab, 0x2b, 0x78, - 0x91, 0xab, 0xd8, 0x46, 0x4a, 0x74, 0xb9, 0xf7, 0x6e, 0xd6, 0x39, 0x9f, 0xff, 0xcf, 0x3e, 0x36, - 0xea, 0xa6, 0xa4, 0x00, 0xce, 0x52, 0x2f, 0x24, 0x7b, 0x2f, 0x22, 0x29, 0xc9, 0x69, 0xee, 0x66, - 0x9c, 0x01, 0x33, 0xda, 0xaa, 0xe5, 0x86, 0x64, 0x6f, 0xbd, 0x8b, 0x58, 0xc4, 0x44, 0xdd, 0x2b, - 0x57, 0x12, 0xb1, 0x3e, 0x54, 0x77, 0xc7, 0x34, 0xa1, 0xe0, 0x33, 0x1e, 0x12, 0xee, 0x03, 0xc7, - 0x69, 0xb0, 0x21, 0x0a, 0xfb, 0xf8, 0x0c, 0xe6, 0x17, 0x39, 0xe1, 0x8a, 0x35, 0xab, 0x6c, 0x86, - 0x39, 0x4e, 0xd4, 0x79, 0xac, 0x7e, 0xad, 0xc3, 0x58, 0xec, 0x27, 0x04, 0x70, 0x88, 0x01, 0x2b, - 0xc0, 0xa9, 0x02, 0x40, 0x83, 0xad, 0x1f, 0xd3, 0xdf, 0x05, 0x0d, 0x29, 0x1c, 0x24, 0x31, 0xf8, - 0xd7, 0x40, 0xaf, 0xa7, 0xf2, 0x92, 0xdf, 0x01, 0x03, 0x31, 0x3e, 0xa1, 0x96, 0x74, 0x98, 0xba, - 0xa3, 0x0f, 0xdb, 0xe3, 0x8e, 0x5b, 0xb9, 0xb4, 0xbb, 0x10, 0xad, 0x49, 0xf3, 0xf8, 0xbf, 0xaf, - 0x2d, 0x15, 0x68, 0x2c, 0x50, 0xa7, 0x9e, 0xed, 0xc7, 0x34, 0x07, 0xf3, 0x85, 0xd3, 0x18, 0xb6, - 0xc7, 0x56, 0x6d, 0xff, 0x8a, 0x06, 0xdb, 0xd9, 0x15, 0x13, 0x31, 0xfa, 0xf2, 0x2d, 0x54, 0x8b, - 0x33, 0x9a, 0x83, 0x91, 0xa2, 0xf7, 0x34, 0xc5, 0x01, 0xd0, 0x1d, 0xf1, 0x6f, 0x4d, 0x47, 0xe4, - 0x37, 0x44, 0xbe, 0x5d, 0xcb, 0x9f, 0x95, 0xf0, 0xb7, 0x92, 0x5d, 0x49, 0x54, 0x39, 0x7a, 0xd7, - 0xb8, 0x07, 0x80, 0xf0, 0xfd, 0x42, 0xbd, 0xc7, 0x1e, 0x41, 0xba, 0x9a, 0xc2, 0x35, 0x78, 0xda, - 0xf5, 0x23, 0x27, 0x5c, 0xf9, 0xba, 0xf1, 0xad, 0xa6, 0x70, 0xcd, 0x91, 0x51, 0x7b, 0x2a, 0x29, - 0x78, 0x29, 0x04, 0xdd, 0xfa, 0xb0, 0x19, 0x8b, 0xe7, 0x8a, 0x52, 0x23, 0x7f, 0x93, 0x55, 0x6a, - 0x22, 0xae, 0x87, 0x90, 0x88, 0x0b, 0x58, 0x91, 0x82, 0xd9, 0x72, 0xf4, 0x61, 0x73, 0xf9, 0xaa, - 0xac, 0x7c, 0x2d, 0x0b, 0x93, 0xe9, 0xf1, 0x6c, 0xeb, 0xa7, 0xb3, 0xad, 0xdf, 0x9d, 0x6d, 0xfd, - 0xcf, 0xc5, 0xd6, 0x4e, 0x17, 0x5b, 0xfb, 0x7b, 0xb1, 0xb5, 0x9f, 0xa3, 0x88, 0xc2, 0xa6, 0x58, - 0xbb, 0x01, 0x4b, 0x3c, 0x65, 0x1d, 0x31, 0x1e, 0x5d, 0xd7, 0xde, 0xee, 0x8b, 0xb7, 0x97, 0xff, - 0xe6, 0x90, 0x91, 0x7c, 0xdd, 0x12, 0xff, 0xe5, 0xf3, 0x7d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf2, - 0x99, 0xcb, 0x87, 0x1f, 0x03, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xc1, 0xaa, 0xda, 0x40, + 0x14, 0x86, 0x93, 0x6a, 0x85, 0x8e, 0x5d, 0xb4, 0xb1, 0x8b, 0x18, 0x30, 0xa6, 0x42, 0x41, 0x0a, + 0x26, 0xd4, 0xd2, 0x17, 0xb0, 0x0b, 0x37, 0x4a, 0xc5, 0xda, 0x4d, 0x37, 0x61, 0x4c, 0x86, 0x38, + 0x35, 0xc9, 0xa4, 0x93, 0x13, 0xd1, 0xb7, 0xe8, 0x63, 0xb9, 0x74, 0xd9, 0x4d, 0xcb, 0x45, 0x5f, + 0xe4, 0x92, 0x99, 0x11, 0x12, 0xae, 0xf7, 0xde, 0xdd, 0x70, 0xce, 0x37, 0xff, 0x37, 0x73, 0x66, + 0x50, 0x37, 0x25, 0x05, 0x70, 0x96, 0x7a, 0x21, 0xd9, 0x7b, 0x11, 0x49, 0x49, 0x4e, 0x73, 0x37, + 0xe3, 0x0c, 0x98, 0xd1, 0x56, 0x2d, 0x37, 0x24, 0x7b, 0xeb, 0x5d, 0xc4, 0x22, 0x26, 0xea, 0x5e, + 0xb9, 0x92, 0x88, 0xf5, 0xa1, 0xba, 0x3b, 0xa6, 0x09, 0x05, 0x9f, 0xf1, 0x90, 0x70, 0x1f, 0x38, + 0x4e, 0x83, 0x0d, 0x51, 0xd8, 0xc7, 0x67, 0x30, 0xbf, 0xc8, 0x09, 0x57, 0xac, 0x59, 0x65, 0x33, + 0xcc, 0x71, 0xa2, 0xce, 0x63, 0xf5, 0x6b, 0x1d, 0xc6, 0x62, 0x3f, 0x21, 0x80, 0x43, 0x0c, 0x58, + 0x01, 0x4e, 0x15, 0x00, 0x1a, 0x6c, 0xfd, 0x98, 0xfe, 0x2e, 0x68, 0x48, 0xe1, 0x20, 0x89, 0xc1, + 0xbf, 0x06, 0x7a, 0x3d, 0x95, 0x97, 0xfc, 0x0e, 0x18, 0x88, 0xf1, 0x09, 0xb5, 0xa4, 0xc3, 0xd4, + 0x1d, 0x7d, 0xd8, 0x1e, 0x77, 0xdc, 0xca, 0xa5, 0xdd, 0x85, 0x68, 0x4d, 0x9a, 0xc7, 0xff, 0x7d, + 0x6d, 0xa9, 0x40, 0x63, 0x81, 0x3a, 0xf5, 0x6c, 0x3f, 0xa6, 0x39, 0x98, 0x2f, 0x9c, 0xc6, 0xb0, + 0x3d, 0xb6, 0x6a, 0xfb, 0x57, 0x34, 0xd8, 0xce, 0xae, 0x98, 0x88, 0xd1, 0x97, 0x6f, 0xa1, 0x5a, + 0x9c, 0xd1, 0x1c, 0x8c, 0x14, 0xbd, 0xa7, 0x29, 0x0e, 0x80, 0xee, 0x88, 0x7f, 0x6b, 0x3a, 0x22, + 0xbf, 0x21, 0xf2, 0xed, 0x5a, 0xfe, 0xac, 0x84, 0xbf, 0x95, 0xec, 0x4a, 0xa2, 0xca, 0xd1, 0xbb, + 0xc6, 0x3d, 0x00, 0x84, 0xef, 0x17, 0xea, 0x3d, 0xf6, 0x08, 0xd2, 0xd5, 0x14, 0xae, 0xc1, 0xd3, + 0xae, 0x1f, 0x39, 0xe1, 0xca, 0xd7, 0x8d, 0x6f, 0x35, 0x85, 0x6b, 0x8e, 0x8c, 0xda, 0x53, 0x49, + 0xc1, 0x4b, 0x21, 0xe8, 0xd6, 0x87, 0xcd, 0x58, 0x3c, 0x57, 0x94, 0x1a, 0xf9, 0x9b, 0xac, 0x52, + 0x13, 0x71, 0x3d, 0x84, 0x44, 0x5c, 0xc0, 0x8a, 0x14, 0xcc, 0x96, 0xa3, 0x0f, 0x9b, 0xcb, 0x57, + 0x65, 0xe5, 0x6b, 0x59, 0x98, 0x4c, 0x8f, 0x67, 0x5b, 0x3f, 0x9d, 0x6d, 0xfd, 0xee, 0x6c, 0xeb, + 0x7f, 0x2e, 0xb6, 0x76, 0xba, 0xd8, 0xda, 0xdf, 0x8b, 0xad, 0xfd, 0x1c, 0x45, 0x14, 0x36, 0xc5, + 0xda, 0x0d, 0x58, 0xe2, 0x29, 0xeb, 0x88, 0xf1, 0xe8, 0xba, 0xf6, 0x76, 0x5f, 0xbc, 0xbd, 0xfc, + 0x37, 0x87, 0x8c, 0xe4, 0xeb, 0x96, 0xf8, 0x2f, 0x9f, 0xef, 0x03, 0x00, 0x00, 0xff, 0xff, 0x6c, + 0x1a, 0x11, 0x18, 0x1f, 0x03, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/dex/types/genesis_test.go b/x/dex/types/genesis_test.go index 200ced0db..dcded4b7b 100644 --- a/x/dex/types/genesis_test.go +++ b/x/dex/types/genesis_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func TestGenesisState_Validate(t *testing.T) { diff --git a/x/dex/types/keys.go b/x/dex/types/keys.go index 8ac1cbb76..9762f2b0c 100644 --- a/x/dex/types/keys.go +++ b/x/dex/types/keys.go @@ -6,7 +6,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dex/utils" + "github.com/neutron-org/neutron/v5/x/dex/utils" ) const ( diff --git a/x/dex/types/limit_order_expiration.pb.go b/x/dex/types/limit_order_expiration.pb.go index c983de898..1a53614ac 100644 --- a/x/dex/types/limit_order_expiration.pb.go +++ b/x/dex/types/limit_order_expiration.pb.go @@ -104,9 +104,9 @@ var fileDescriptor_61264397cad6ae82 = []byte{ 0x1a, 0x3c, 0x41, 0x5c, 0x50, 0xa1, 0xa0, 0xd4, 0x34, 0x27, 0xf7, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0xd2, 0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, - 0xd5, 0x87, 0xfa, 0x58, 0x37, 0xbf, 0x28, 0x1d, 0xc6, 0xd6, 0x2f, 0x33, 0xd1, 0xaf, 0x00, 0x07, + 0xd5, 0x87, 0xfa, 0x58, 0x37, 0xbf, 0x28, 0x1d, 0xc6, 0xd6, 0x2f, 0x33, 0xd5, 0xaf, 0x00, 0x07, 0x56, 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, 0xd8, 0x5d, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x2e, 0x39, 0x12, 0x8d, 0x48, 0x01, 0x00, 0x00, + 0xff, 0xb0, 0xba, 0xc8, 0x12, 0x48, 0x01, 0x00, 0x00, } func (m *LimitOrderExpiration) Marshal() (dAtA []byte, err error) { diff --git a/x/dex/types/limit_order_tranche.go b/x/dex/types/limit_order_tranche.go index faea72e3d..1ce14f7c8 100644 --- a/x/dex/types/limit_order_tranche.go +++ b/x/dex/types/limit_order_tranche.go @@ -6,8 +6,8 @@ import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - math_utils "github.com/neutron-org/neutron/v4/utils/math" - "github.com/neutron-org/neutron/v4/x/dex/utils" + math_utils "github.com/neutron-org/neutron/v5/utils/math" + "github.com/neutron-org/neutron/v5/x/dex/utils" ) func NewLimitOrderTranche( diff --git a/x/dex/types/limit_order_tranche.pb.go b/x/dex/types/limit_order_tranche.pb.go index e35ecd9cc..e8a8104b1 100644 --- a/x/dex/types/limit_order_tranche.pb.go +++ b/x/dex/types/limit_order_tranche.pb.go @@ -9,7 +9,7 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - github_com_neutron_org_neutron_v4_utils_math "github.com/neutron-org/neutron/v4/utils/math" + github_com_neutron_org_neutron_v5_utils_math "github.com/neutron-org/neutron/v5/utils/math" _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" @@ -99,7 +99,7 @@ type LimitOrderTranche struct { // All JIT orders have a expiration_time of 0 and an exception is made to still treat these orders as live // Order deletion still functions the same and the orders will be deleted at the end of the block ExpirationTime *time.Time `protobuf:"bytes,6,opt,name=expiration_time,json=expirationTime,proto3,stdtime" json:"expiration_time,omitempty"` - PriceTakerToMaker github_com_neutron_org_neutron_v4_utils_math.PrecDec `protobuf:"bytes,7,opt,name=price_taker_to_maker,json=priceTakerToMaker,proto3,customtype=github.com/neutron-org/neutron/v4/utils/math.PrecDec" json:"price_taker_to_maker" yaml:"price_taker_to_maker"` + PriceTakerToMaker github_com_neutron_org_neutron_v5_utils_math.PrecDec `protobuf:"bytes,7,opt,name=price_taker_to_maker,json=priceTakerToMaker,proto3,customtype=github.com/neutron-org/neutron/v5/utils/math.PrecDec" json:"price_taker_to_maker" yaml:"price_taker_to_maker"` } func (m *LimitOrderTranche) Reset() { *m = LimitOrderTranche{} } @@ -160,42 +160,42 @@ func init() { var fileDescriptor_8c2ded67c80756d1 = []byte{ // 566 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0x41, 0x8f, 0xd2, 0x40, - 0x14, 0xc7, 0x19, 0x51, 0x74, 0x87, 0xe8, 0x86, 0x86, 0x4d, 0xba, 0x98, 0xb4, 0xd8, 0xc4, 0x84, - 0xcb, 0xb6, 0x89, 0xbb, 0x07, 0x63, 0x3c, 0x11, 0x12, 0x43, 0x14, 0xdd, 0x34, 0x3d, 0x79, 0x69, - 0x4a, 0x3b, 0x96, 0x09, 0xb4, 0xd3, 0x4c, 0x1f, 0x1b, 0xf0, 0x03, 0x78, 0xde, 0x0f, 0xe1, 0xdd, - 0xaf, 0xc1, 0x71, 0x8f, 0xc6, 0x43, 0x35, 0x70, 0xf3, 0xb8, 0x9f, 0xc0, 0xcc, 0x14, 0x96, 0x22, - 0xd5, 0xcd, 0x9e, 0x98, 0xbe, 0xf7, 0x7f, 0xbc, 0xdf, 0xff, 0x75, 0x5e, 0xf1, 0xf3, 0x98, 0x4c, - 0x81, 0xb3, 0xd8, 0x0a, 0xc8, 0xcc, 0x9a, 0xd0, 0x88, 0x82, 0xcb, 0x78, 0x40, 0xb8, 0x0b, 0xdc, - 0x8b, 0xfd, 0x11, 0x31, 0x13, 0xce, 0x80, 0x29, 0xf5, 0xb5, 0xcc, 0x0c, 0xc8, 0xac, 0xd5, 0x0c, - 0x59, 0xc8, 0x64, 0xdc, 0x12, 0xa7, 0x5c, 0xd2, 0xd2, 0x43, 0xc6, 0xc2, 0x09, 0xb1, 0xe4, 0xd3, - 0x70, 0xfa, 0xc9, 0x02, 0x1a, 0x91, 0x14, 0xbc, 0x28, 0x59, 0x0b, 0x8e, 0x8b, 0xad, 0x12, 0x8f, - 0x72, 0x97, 0x06, 0x9b, 0xda, 0x62, 0x0a, 0xb8, 0x17, 0x10, 0x77, 0x47, 0x60, 0x7c, 0x43, 0xb8, - 0xf9, 0x4e, 0xd0, 0x7d, 0x10, 0x70, 0x4e, 0xce, 0xf6, 0x96, 0xcc, 0x95, 0xd7, 0xf8, 0xf1, 0x8e, - 0x5e, 0x45, 0x6d, 0xd4, 0xa9, 0xbf, 0x50, 0xcd, 0x02, 0xb0, 0xe9, 0x08, 0xc5, 0xb9, 0x47, 0x79, - 0xbf, 0x67, 0xd7, 0xe1, 0xe6, 0x21, 0x50, 0x5e, 0xe2, 0x63, 0xa0, 0xfe, 0xd8, 0xa5, 0x71, 0x40, - 0x66, 0x2e, 0x78, 0x63, 0x61, 0x9c, 0xb9, 0x91, 0x38, 0xa8, 0xf7, 0xda, 0xa8, 0x53, 0xb5, 0x8f, - 0x84, 0xa0, 0x2f, 0xf2, 0x8e, 0x88, 0x3a, 0x6c, 0x20, 0x7e, 0x14, 0x1d, 0xd7, 0xd7, 0x13, 0x72, - 0xc7, 0x64, 0xae, 0x56, 0xdb, 0xa8, 0x73, 0x60, 0x63, 0xb8, 0x01, 0x33, 0x16, 0x35, 0xdc, 0xd8, - 0x23, 0x56, 0x4e, 0x71, 0x55, 0xc8, 0x73, 0xc8, 0x67, 0x3b, 0x90, 0x65, 0xf6, 0x6c, 0xa1, 0x56, - 0xbe, 0x20, 0xdc, 0xe4, 0x24, 0x25, 0xfc, 0x82, 0xa4, 0x39, 0x9b, 0x1b, 0x90, 0x98, 0x45, 0x92, - 0xf0, 0xa0, 0xeb, 0x2c, 0x32, 0xbd, 0xf2, 0x23, 0xd3, 0x8f, 0x7c, 0x96, 0x46, 0x2c, 0x4d, 0x83, - 0xb1, 0x49, 0x99, 0x15, 0x79, 0x30, 0x32, 0xfb, 0x31, 0xfc, 0xce, 0xf4, 0xd2, 0xe2, 0xeb, 0x4c, - 0x7f, 0x3a, 0xf7, 0xa2, 0xc9, 0x2b, 0xa3, 0x2c, 0x6b, 0xd8, 0xca, 0x26, 0x2c, 0xfd, 0xf6, 0x44, - 0x70, 0x17, 0x04, 0x0a, 0x20, 0xd5, 0xbb, 0x82, 0xc0, 0x7f, 0x41, 0xa0, 0x14, 0xc4, 0xd9, 0x82, - 0x7c, 0xc6, 0x0d, 0x60, 0xe0, 0x4d, 0x76, 0xa6, 0x71, 0x5f, 0x42, 0xbc, 0xbf, 0x0d, 0x62, 0xbf, - 0xf2, 0x3a, 0xd3, 0xd5, 0x9c, 0x60, 0x2f, 0x65, 0xd8, 0x87, 0x32, 0x36, 0x28, 0xe9, 0x5d, 0x1c, - 0xc0, 0x83, 0x3b, 0xf5, 0x86, 0x7f, 0xf7, 0x86, 0xfd, 0xde, 0x05, 0xdf, 0x03, 0x7c, 0x48, 0x66, - 0x09, 0xe5, 0x1e, 0x50, 0x16, 0xbb, 0x62, 0xc1, 0xd4, 0x9a, 0xbc, 0x4a, 0x2d, 0x33, 0xdf, 0x3e, - 0x73, 0xb3, 0x7d, 0xa6, 0xb3, 0xd9, 0xbe, 0xee, 0xa3, 0x45, 0xa6, 0xa3, 0xcb, 0x9f, 0x3a, 0xb2, - 0x9f, 0x6c, 0x8b, 0x45, 0x5a, 0xf9, 0x8a, 0x70, 0x33, 0xe1, 0xd4, 0x27, 0x7f, 0x5f, 0xfd, 0x87, - 0xd2, 0x4e, 0xba, 0xb6, 0x73, 0x16, 0x52, 0x18, 0x4d, 0x87, 0xa6, 0xcf, 0x22, 0x6b, 0x7d, 0x63, - 0x4f, 0x18, 0x0f, 0x37, 0x67, 0xeb, 0xe2, 0xcc, 0x9a, 0x02, 0x9d, 0xa4, 0xb9, 0xd3, 0x73, 0x4e, - 0xfc, 0x1e, 0xf1, 0xc5, 0xeb, 0x2e, 0xfb, 0xef, 0xed, 0xeb, 0x2e, 0xcb, 0x1a, 0x76, 0x43, 0x86, - 0x8b, 0xbb, 0xd6, 0x7d, 0xb3, 0x58, 0x6a, 0xe8, 0x6a, 0xa9, 0xa1, 0x5f, 0x4b, 0x0d, 0x5d, 0xae, - 0xb4, 0xca, 0xd5, 0x4a, 0xab, 0x7c, 0x5f, 0x69, 0x95, 0x8f, 0x27, 0xb7, 0x93, 0xcd, 0xf2, 0x6f, - 0xca, 0x3c, 0x21, 0xe9, 0xb0, 0x26, 0xa7, 0x73, 0xfa, 0x27, 0x00, 0x00, 0xff, 0xff, 0x75, 0x97, - 0x0b, 0x47, 0xf5, 0x04, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0x41, 0x8b, 0xd3, 0x40, + 0x14, 0xc7, 0x3b, 0x56, 0xab, 0x3b, 0x45, 0x97, 0x86, 0x2e, 0x64, 0x2b, 0x24, 0x35, 0x20, 0xf4, + 0xb2, 0x09, 0xb8, 0x0a, 0x22, 0x9e, 0x4a, 0x41, 0x8a, 0x56, 0x97, 0x90, 0x93, 0x97, 0x90, 0x26, + 0x63, 0x3a, 0xb4, 0xc9, 0x84, 0xc9, 0xeb, 0xd2, 0xfa, 0x01, 0x3c, 0xef, 0x87, 0xf0, 0xee, 0xd7, + 0xe8, 0x71, 0x8f, 0xe2, 0x21, 0x4a, 0x7b, 0xf3, 0xb8, 0x9f, 0x40, 0x66, 0xd2, 0x6e, 0x53, 0x1b, + 0x5d, 0xf6, 0xd4, 0xc9, 0x7b, 0xff, 0xd7, 0xf7, 0xfb, 0xbf, 0xcc, 0x0b, 0x7e, 0x1a, 0x93, 0x29, + 0x70, 0x16, 0x5b, 0x01, 0x99, 0x59, 0x13, 0x1a, 0x51, 0x70, 0x19, 0x0f, 0x08, 0x77, 0x81, 0x7b, + 0xb1, 0x3f, 0x22, 0x66, 0xc2, 0x19, 0x30, 0xa5, 0xbe, 0x96, 0x99, 0x01, 0x99, 0xb5, 0x9a, 0x21, + 0x0b, 0x99, 0x8c, 0x5b, 0xe2, 0x94, 0x4b, 0x5a, 0x7a, 0xc8, 0x58, 0x38, 0x21, 0x96, 0x7c, 0x1a, + 0x4e, 0x3f, 0x59, 0x40, 0x23, 0x92, 0x82, 0x17, 0x25, 0x6b, 0xc1, 0x71, 0xb1, 0x55, 0xe2, 0x51, + 0xee, 0xd2, 0x60, 0x53, 0x5b, 0x4c, 0x01, 0xf7, 0x02, 0xe2, 0xee, 0x08, 0x8c, 0x6f, 0x08, 0x37, + 0xdf, 0x09, 0xba, 0x0f, 0x02, 0xce, 0xc9, 0xd9, 0xde, 0x92, 0xb9, 0xf2, 0x1a, 0x3f, 0xdc, 0xd1, + 0xab, 0xa8, 0x8d, 0x3a, 0xf5, 0x67, 0xaa, 0x59, 0x00, 0x36, 0x1d, 0xa1, 0x38, 0xf3, 0x28, 0xef, + 0xf7, 0xec, 0x3a, 0x5c, 0x3f, 0x04, 0xca, 0x4b, 0x7c, 0x0c, 0xd4, 0x1f, 0xbb, 0x34, 0x0e, 0xc8, + 0xcc, 0x05, 0x6f, 0x2c, 0x8c, 0x33, 0x37, 0x12, 0x07, 0xf5, 0x4e, 0x1b, 0x75, 0xaa, 0xf6, 0x91, + 0x10, 0xf4, 0x45, 0xde, 0x11, 0x51, 0x87, 0x0d, 0xc4, 0x8f, 0xa2, 0xe3, 0xfa, 0x7a, 0x42, 0xee, + 0x98, 0xcc, 0xd5, 0x6a, 0x1b, 0x75, 0x0e, 0x6c, 0x0c, 0xd7, 0x60, 0xc6, 0xa2, 0x86, 0x1b, 0x7b, + 0xc4, 0xca, 0x29, 0xae, 0x0a, 0x79, 0x0e, 0xf9, 0x64, 0x07, 0xb2, 0xcc, 0x9e, 0x2d, 0xd4, 0xca, + 0x17, 0x84, 0x9b, 0x9c, 0xa4, 0x84, 0x9f, 0x93, 0x34, 0x67, 0x73, 0x03, 0x12, 0xb3, 0x48, 0x12, + 0x1e, 0x74, 0x9d, 0x45, 0xa6, 0x57, 0x7e, 0x64, 0xfa, 0x91, 0xcf, 0xd2, 0x88, 0xa5, 0x69, 0x30, + 0x36, 0x29, 0xb3, 0x22, 0x0f, 0x46, 0x66, 0x3f, 0x86, 0xdf, 0x99, 0x5e, 0x5a, 0x7c, 0x95, 0xe9, + 0x8f, 0xe7, 0x5e, 0x34, 0x79, 0x65, 0x94, 0x65, 0x0d, 0x5b, 0xd9, 0x84, 0xa5, 0xdf, 0x9e, 0x08, + 0xee, 0x82, 0x40, 0x01, 0xa4, 0x7a, 0x5b, 0x10, 0xf8, 0x2f, 0x08, 0x94, 0x82, 0x38, 0x5b, 0x90, + 0xcf, 0xb8, 0x01, 0x0c, 0xbc, 0xc9, 0xce, 0x34, 0xee, 0x4a, 0x88, 0xf7, 0x37, 0x41, 0xec, 0x57, + 0x5e, 0x65, 0xba, 0x9a, 0x13, 0xec, 0xa5, 0x0c, 0xfb, 0x50, 0xc6, 0x06, 0x25, 0xbd, 0x8b, 0x03, + 0xb8, 0x77, 0xab, 0xde, 0xf0, 0xef, 0xde, 0xb0, 0xdf, 0xbb, 0xe0, 0x7b, 0x80, 0x0f, 0xc9, 0x2c, + 0xa1, 0xdc, 0x03, 0xca, 0x62, 0x57, 0x2c, 0x98, 0x5a, 0x93, 0x57, 0xa9, 0x65, 0xe6, 0xdb, 0x67, + 0x6e, 0xb6, 0xcf, 0x74, 0x36, 0xdb, 0xd7, 0x7d, 0xb0, 0xc8, 0x74, 0x74, 0xf1, 0x53, 0x47, 0xf6, + 0xa3, 0x6d, 0xb1, 0x48, 0x2b, 0x5f, 0x11, 0x6e, 0x26, 0x9c, 0xfa, 0xe4, 0xef, 0xab, 0x7f, 0x5f, + 0xda, 0x49, 0xd7, 0x76, 0x9e, 0x87, 0x14, 0x46, 0xd3, 0xa1, 0xe9, 0xb3, 0xc8, 0x5a, 0xdf, 0xd8, + 0x13, 0xc6, 0xc3, 0xcd, 0xd9, 0x3a, 0x7f, 0x61, 0x4d, 0x81, 0x4e, 0xd2, 0xdc, 0xe9, 0x19, 0x27, + 0x7e, 0x8f, 0xf8, 0xe2, 0x75, 0x97, 0xfd, 0xf7, 0xf6, 0x75, 0x97, 0x65, 0x0d, 0xbb, 0x21, 0xc3, + 0xc5, 0x5d, 0xeb, 0xbe, 0x59, 0x2c, 0x35, 0x74, 0xb9, 0xd4, 0xd0, 0xaf, 0xa5, 0x86, 0x2e, 0x56, + 0x5a, 0xe5, 0x72, 0xa5, 0x55, 0xbe, 0xaf, 0xb4, 0xca, 0xc7, 0x93, 0x9b, 0xc9, 0x66, 0xf9, 0x37, + 0x65, 0x9e, 0x90, 0x74, 0x58, 0x93, 0xd3, 0x39, 0xfd, 0x13, 0x00, 0x00, 0xff, 0xff, 0x15, 0x52, + 0xbe, 0xc6, 0xf5, 0x04, 0x00, 0x00, } func (m *LimitOrderTrancheKey) Marshal() (dAtA []byte, err error) { diff --git a/x/dex/types/limit_order_tranche_key.go b/x/dex/types/limit_order_tranche_key.go index a42e9af16..cb19c1650 100644 --- a/x/dex/types/limit_order_tranche_key.go +++ b/x/dex/types/limit_order_tranche_key.go @@ -1,7 +1,7 @@ package types import ( - math_utils "github.com/neutron-org/neutron/v4/utils/math" + math_utils "github.com/neutron-org/neutron/v5/utils/math" ) var _ TickLiquidityKey = (*LimitOrderTrancheKey)(nil) diff --git a/x/dex/types/limit_order_tranche_user.pb.go b/x/dex/types/limit_order_tranche_user.pb.go index 6e52c57d5..d83021acf 100644 --- a/x/dex/types/limit_order_tranche_user.pb.go +++ b/x/dex/types/limit_order_tranche_user.pb.go @@ -116,34 +116,34 @@ var fileDescriptor_67e5ffbd487ea05f = []byte{ // 469 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0x4d, 0x6b, 0xdb, 0x4e, 0x10, 0xc6, 0xad, 0x7f, 0xf2, 0x4f, 0x9a, 0x55, 0xdf, 0x50, 0x63, 0xba, 0x4d, 0x41, 0x32, 0x3e, - 0x99, 0x42, 0x24, 0x48, 0x7b, 0x28, 0xa1, 0xa7, 0x34, 0x50, 0x4c, 0x53, 0x52, 0x84, 0x4b, 0xa1, - 0x17, 0xb1, 0xd1, 0x0e, 0xd2, 0x62, 0x4b, 0x2b, 0x76, 0xd7, 0xb5, 0xf4, 0x2d, 0xfa, 0xb1, 0x72, - 0xcc, 0xb1, 0xf4, 0x20, 0x5a, 0xfb, 0xd6, 0x63, 0x3e, 0x41, 0x59, 0xeb, 0x05, 0x89, 0x1c, 0x4a, - 0x4f, 0x9a, 0x79, 0x9e, 0x67, 0xe6, 0x27, 0x89, 0x41, 0x2f, 0x52, 0x58, 0x2a, 0xc1, 0x53, 0x8f, - 0x42, 0xee, 0x2d, 0x58, 0xc2, 0x54, 0xc0, 0x05, 0x05, 0x11, 0x28, 0x41, 0xd2, 0x30, 0x86, 0x60, - 0x29, 0x41, 0xb8, 0x99, 0xe0, 0x8a, 0x5b, 0x66, 0x9d, 0x75, 0x29, 0xe4, 0x47, 0x87, 0x11, 0x8f, - 0xf8, 0x56, 0xf7, 0x74, 0x55, 0x45, 0x8e, 0x9c, 0xee, 0x3a, 0x25, 0x08, 0x85, 0x20, 0x23, 0x4c, - 0x04, 0x8c, 0xd6, 0x81, 0xc3, 0x5e, 0x20, 0xaf, 0xd4, 0xf1, 0xaf, 0x5d, 0x34, 0xbc, 0xd0, 0xf0, - 0x4b, 0xcd, 0x9e, 0x55, 0xe8, 0x4f, 0x12, 0x84, 0xf5, 0x06, 0x3d, 0xe8, 0xad, 0xc1, 0xc6, 0xc8, - 0x98, 0x98, 0x27, 0xd8, 0xed, 0xbc, 0x8b, 0x3b, 0xd3, 0x89, 0x8f, 0x84, 0x89, 0xe9, 0xb9, 0x6f, - 0xaa, 0xb6, 0xa1, 0xd6, 0x6b, 0xf4, 0x4c, 0xb1, 0x70, 0x1e, 0xb0, 0x94, 0x42, 0x1e, 0x28, 0x32, - 0xd7, 0x1f, 0xc6, 0x83, 0x44, 0x17, 0xf8, 0xbf, 0x91, 0x31, 0xd9, 0xf1, 0x87, 0x3a, 0x30, 0xd5, - 0xfe, 0x4c, 0xab, 0x33, 0xfe, 0x41, 0x3f, 0x2c, 0x07, 0x99, 0xcd, 0x1f, 0x98, 0x43, 0x81, 0x77, - 0x46, 0xc6, 0xe4, 0xc0, 0x47, 0xb5, 0xf4, 0x1e, 0x0a, 0x0b, 0xa3, 0x7d, 0x42, 0xa9, 0x00, 0x29, - 0xf1, 0xee, 0xd6, 0x6c, 0x5a, 0x2b, 0x42, 0xf7, 0x65, 0x4c, 0x04, 0xc8, 0x80, 0xaf, 0x52, 0xa0, - 0xf8, 0x7f, 0x6d, 0x9f, 0x9d, 0x5f, 0x97, 0xce, 0xe0, 0x47, 0xe9, 0x0c, 0x43, 0x2e, 0x13, 0x2e, - 0x25, 0x9d, 0xbb, 0x8c, 0x7b, 0x09, 0x51, 0xb1, 0x3b, 0x4d, 0xd5, 0xef, 0xd2, 0xe9, 0x0d, 0xdd, - 0x96, 0xce, 0x93, 0x82, 0x24, 0x8b, 0xd3, 0x71, 0x57, 0x1d, 0xfb, 0x66, 0xd5, 0x5e, 0xea, 0xce, - 0x5a, 0xa1, 0xc7, 0xb5, 0xbb, 0x62, 0x2a, 0xa6, 0x82, 0xac, 0x52, 0xbc, 0xb7, 0x85, 0x5d, 0xfc, - 0x0d, 0x76, 0x67, 0xf0, 0xb6, 0x74, 0x9e, 0xf6, 0x80, 0xad, 0x33, 0xf6, 0x1f, 0x55, 0xd2, 0xe7, - 0x46, 0xe9, 0x80, 0x43, 0x92, 0x86, 0xb0, 0x58, 0x00, 0xc5, 0xfb, 0xff, 0x06, 0x6e, 0x07, 0xef, - 0x80, 0x5b, 0xa7, 0x05, 0xbf, 0x6d, 0x14, 0xeb, 0x14, 0xa1, 0xfa, 0x3a, 0x8b, 0x0c, 0xf0, 0xbd, - 0x91, 0x31, 0x79, 0x78, 0xf2, 0xbc, 0x77, 0x0a, 0x9d, 0x2b, 0x2a, 0x32, 0xf0, 0x0f, 0x78, 0x53, - 0x9e, 0xbd, 0xbb, 0x5e, 0xdb, 0xc6, 0xcd, 0xda, 0x36, 0x7e, 0xae, 0x6d, 0xe3, 0xdb, 0xc6, 0x1e, - 0xdc, 0x6c, 0xec, 0xc1, 0xf7, 0x8d, 0x3d, 0xf8, 0x72, 0x1c, 0x31, 0x15, 0x2f, 0xaf, 0xdc, 0x90, - 0x27, 0x5e, 0xbd, 0xeb, 0x98, 0x8b, 0xa8, 0xa9, 0xbd, 0xaf, 0xaf, 0xbc, 0xbc, 0xba, 0xd7, 0x22, - 0x03, 0x79, 0xb5, 0xb7, 0xbd, 0xd9, 0x97, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xb3, 0x41, 0xf7, - 0x93, 0x3b, 0x03, 0x00, 0x00, + 0x99, 0x42, 0x24, 0x48, 0x29, 0x94, 0xd0, 0x53, 0x1a, 0x28, 0xa6, 0x29, 0x29, 0xc2, 0xa5, 0xd0, + 0x8b, 0xd8, 0x68, 0x07, 0x69, 0xb1, 0xa5, 0x15, 0xbb, 0xeb, 0x5a, 0xfa, 0x16, 0xfd, 0x58, 0x39, + 0xe6, 0x58, 0x7a, 0x10, 0xad, 0x7d, 0xeb, 0x31, 0x9f, 0xa0, 0xac, 0xf5, 0x82, 0x44, 0x0e, 0xa5, + 0x27, 0xcd, 0x3c, 0xcf, 0x33, 0xf3, 0x93, 0xc4, 0xa0, 0x17, 0x29, 0x2c, 0x95, 0xe0, 0xa9, 0x47, + 0x21, 0xf7, 0x16, 0x2c, 0x61, 0x2a, 0xe0, 0x82, 0x82, 0x08, 0x94, 0x20, 0x69, 0x18, 0x43, 0xb0, + 0x94, 0x20, 0xdc, 0x4c, 0x70, 0xc5, 0x2d, 0xb3, 0xce, 0xba, 0x14, 0xf2, 0xa3, 0xc3, 0x88, 0x47, + 0x7c, 0xab, 0x7b, 0xba, 0xaa, 0x22, 0x47, 0x4e, 0x77, 0x9d, 0x12, 0x84, 0x42, 0x90, 0x11, 0x26, + 0x02, 0x46, 0xeb, 0xc0, 0x61, 0x2f, 0x90, 0x57, 0xea, 0xf8, 0xd7, 0x2e, 0x1a, 0x5e, 0x68, 0xf8, + 0xa5, 0x66, 0xcf, 0x2a, 0xf4, 0x27, 0x09, 0xc2, 0x7a, 0x83, 0x1e, 0xf4, 0xd6, 0x60, 0x63, 0x64, + 0x4c, 0xcc, 0x13, 0xec, 0x76, 0xde, 0xc5, 0x9d, 0xe9, 0xc4, 0x47, 0xc2, 0xc4, 0xf4, 0xdc, 0x37, + 0x55, 0xdb, 0x50, 0xeb, 0x35, 0x7a, 0xa6, 0x58, 0x38, 0x0f, 0x58, 0x4a, 0x21, 0x0f, 0x14, 0x99, + 0xeb, 0x0f, 0xe3, 0x41, 0xa2, 0x0b, 0xfc, 0xdf, 0xc8, 0x98, 0xec, 0xf8, 0x43, 0x1d, 0x98, 0x6a, + 0x7f, 0xa6, 0xd5, 0x19, 0xff, 0xa0, 0x1f, 0x96, 0x83, 0xcc, 0xe6, 0x0f, 0xcc, 0xa1, 0xc0, 0x3b, + 0x23, 0x63, 0x72, 0xe0, 0xa3, 0x5a, 0x7a, 0x0f, 0x85, 0x85, 0xd1, 0x3e, 0xa1, 0x54, 0x80, 0x94, + 0x78, 0x77, 0x6b, 0x36, 0xad, 0x15, 0xa1, 0xfb, 0x32, 0x26, 0x02, 0x64, 0xc0, 0x57, 0x29, 0x50, + 0xfc, 0xbf, 0xb6, 0xcf, 0xce, 0xaf, 0x4b, 0x67, 0xf0, 0xa3, 0x74, 0x86, 0x21, 0x97, 0x09, 0x97, + 0x92, 0xce, 0x5d, 0xc6, 0xbd, 0x84, 0xa8, 0xd8, 0x9d, 0xa6, 0xea, 0x77, 0xe9, 0xf4, 0x86, 0x6e, + 0x4b, 0xe7, 0x49, 0x41, 0x92, 0xc5, 0xe9, 0xb8, 0xab, 0x8e, 0x7d, 0xb3, 0x6a, 0x2f, 0x75, 0x67, + 0xad, 0xd0, 0xe3, 0xda, 0x5d, 0x31, 0x15, 0x53, 0x41, 0x56, 0x29, 0xde, 0xdb, 0xc2, 0x2e, 0xfe, + 0x06, 0xbb, 0x33, 0x78, 0x5b, 0x3a, 0x4f, 0x7b, 0xc0, 0xd6, 0x19, 0xfb, 0x8f, 0x2a, 0xe9, 0x73, + 0xa3, 0x74, 0xc0, 0x21, 0x49, 0x43, 0x58, 0x2c, 0x80, 0xe2, 0xfd, 0x7f, 0x03, 0xb7, 0x83, 0x77, + 0xc0, 0xad, 0xd3, 0x82, 0xdf, 0x36, 0x8a, 0x75, 0x8a, 0x50, 0x7d, 0x9d, 0x45, 0x06, 0xf8, 0xde, + 0xc8, 0x98, 0x3c, 0x3c, 0x79, 0xde, 0x3b, 0x85, 0xce, 0x15, 0x15, 0x19, 0xf8, 0x07, 0xbc, 0x29, + 0xcf, 0xde, 0x5d, 0xaf, 0x6d, 0xe3, 0x66, 0x6d, 0x1b, 0x3f, 0xd7, 0xb6, 0xf1, 0x6d, 0x63, 0x0f, + 0x6e, 0x36, 0xf6, 0xe0, 0xfb, 0xc6, 0x1e, 0x7c, 0x39, 0x8e, 0x98, 0x8a, 0x97, 0x57, 0x6e, 0xc8, + 0x13, 0xaf, 0xde, 0x75, 0xcc, 0x45, 0xd4, 0xd4, 0xde, 0xd7, 0x57, 0x5e, 0x5e, 0xdd, 0x6b, 0x91, + 0x81, 0xbc, 0xda, 0xdb, 0xde, 0xec, 0xcb, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x2d, 0xc2, 0x2d, + 0x0c, 0x3b, 0x03, 0x00, 0x00, } func (m *LimitOrderTrancheUser) Marshal() (dAtA []byte, err error) { diff --git a/x/dex/types/liquidity.go b/x/dex/types/liquidity.go index aced7919c..97f6f9bd1 100644 --- a/x/dex/types/liquidity.go +++ b/x/dex/types/liquidity.go @@ -3,7 +3,7 @@ package types import ( "cosmossdk.io/math" - math_utils "github.com/neutron-org/neutron/v4/utils/math" + math_utils "github.com/neutron-org/neutron/v5/utils/math" ) type Liquidity interface { diff --git a/x/dex/types/message_multi_hop_swap.go b/x/dex/types/message_multi_hop_swap.go index 416260d5c..57ffb4f65 100644 --- a/x/dex/types/message_multi_hop_swap.go +++ b/x/dex/types/message_multi_hop_swap.go @@ -5,7 +5,7 @@ import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - math_utils "github.com/neutron-org/neutron/v4/utils/math" + math_utils "github.com/neutron-org/neutron/v5/utils/math" ) const TypeMsgMultiHopSwap = "multi_hop_swap" diff --git a/x/dex/types/message_place_limit_order.go b/x/dex/types/message_place_limit_order.go index 47206d49c..2ada309d7 100644 --- a/x/dex/types/message_place_limit_order.go +++ b/x/dex/types/message_place_limit_order.go @@ -7,7 +7,7 @@ import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - math_utils "github.com/neutron-org/neutron/v4/utils/math" + math_utils "github.com/neutron-org/neutron/v5/utils/math" ) const TypeMsgPlaceLimitOrder = "place_limit_order" diff --git a/x/dex/types/pair_id.pb.go b/x/dex/types/pair_id.pb.go index 1b97bd856..d42c49e72 100644 --- a/x/dex/types/pair_id.pb.go +++ b/x/dex/types/pair_id.pb.go @@ -90,8 +90,8 @@ var fileDescriptor_7bd5bf8f218c5bfa = []byte{ 0x71, 0x43, 0x27, 0xf7, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0xd2, 0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x87, 0xda, 0xa5, 0x9b, 0x5f, 0x94, - 0x0e, 0x63, 0xeb, 0x97, 0x99, 0xe8, 0x57, 0x80, 0xdd, 0x55, 0x52, 0x59, 0x90, 0x5a, 0x9c, 0xc4, - 0x06, 0x76, 0x96, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x9c, 0xb4, 0x18, 0xd2, 0xb3, 0x00, 0x00, + 0x0e, 0x63, 0xeb, 0x97, 0x99, 0xea, 0x57, 0x80, 0xdd, 0x55, 0x52, 0x59, 0x90, 0x5a, 0x9c, 0xc4, + 0x06, 0x76, 0x96, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x02, 0x37, 0xc2, 0x4d, 0xb3, 0x00, 0x00, 0x00, } diff --git a/x/dex/types/params.pb.go b/x/dex/types/params.pb.go index ca28efd3e..8821ec7dd 100644 --- a/x/dex/types/params.pb.go +++ b/x/dex/types/params.pb.go @@ -101,7 +101,7 @@ var fileDescriptor_84a6bffcfc21009c = []byte{ // 290 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x34, 0x90, 0x31, 0x4b, 0x03, 0x31, 0x14, 0xc7, 0x2f, 0xf4, 0x2c, 0x35, 0x0e, 0x42, 0x50, 0x08, 0x0a, 0x69, 0xe9, 0x54, 0x90, 0x36, - 0x83, 0x82, 0xe0, 0x66, 0x17, 0xc1, 0xa9, 0x94, 0x4e, 0x2e, 0x21, 0xed, 0xbd, 0xc6, 0xe8, 0x5d, + 0x83, 0x88, 0xe0, 0x66, 0x17, 0xc1, 0xa9, 0x94, 0x4e, 0x2e, 0x21, 0xed, 0xbd, 0xc6, 0xe8, 0x5d, 0x13, 0x92, 0x9c, 0x9e, 0xdf, 0xc2, 0xd1, 0xd1, 0x2f, 0xe1, 0x77, 0x70, 0xec, 0xe8, 0x24, 0x72, 0xb7, 0xf9, 0x29, 0xe4, 0xce, 0xeb, 0xf4, 0xfe, 0xef, 0xff, 0x7b, 0xff, 0xe1, 0xfd, 0x31, 0xdd, 0x40, 0x1e, 0x9c, 0xd9, 0xf0, 0x04, 0x0a, 0x6e, 0xa5, 0x93, 0x99, 0x9f, 0x58, 0x67, 0x82, 0x21, @@ -116,7 +116,7 @@ var fileDescriptor_84a6bffcfc21009c = []byte{ 0x3f, 0x9a, 0xde, 0x7c, 0x96, 0x0c, 0x6d, 0x4b, 0x86, 0x7e, 0x4a, 0x86, 0x5e, 0x2b, 0x16, 0x6d, 0x2b, 0x16, 0x7d, 0x55, 0x2c, 0xba, 0x1b, 0x2b, 0x1d, 0xee, 0xf3, 0xe5, 0x64, 0x65, 0x32, 0xde, 0xfe, 0x3f, 0x36, 0x4e, 0xed, 0x34, 0x7f, 0xba, 0xe0, 0x45, 0x53, 0x55, 0x78, 0xb1, 0xe0, 0x97, - 0xdd, 0xa6, 0x87, 0xf3, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x58, 0x59, 0xc8, 0x6a, 0x46, 0x01, + 0xdd, 0xa6, 0x87, 0xf3, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc6, 0xda, 0x12, 0xf5, 0x46, 0x01, 0x00, 0x00, } diff --git a/x/dex/types/pool.go b/x/dex/types/pool.go index 3a167f5b4..96a717eac 100644 --- a/x/dex/types/pool.go +++ b/x/dex/types/pool.go @@ -4,8 +4,8 @@ import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - math_utils "github.com/neutron-org/neutron/v4/utils/math" - "github.com/neutron-org/neutron/v4/x/dex/utils" + math_utils "github.com/neutron-org/neutron/v5/utils/math" + "github.com/neutron-org/neutron/v5/x/dex/utils" ) func NewPool( diff --git a/x/dex/types/pool.pb.go b/x/dex/types/pool.pb.go index 7468d843b..b80290012 100644 --- a/x/dex/types/pool.pb.go +++ b/x/dex/types/pool.pb.go @@ -103,9 +103,9 @@ var fileDescriptor_6ad7a9165eac1fde = []byte{ 0x26, 0xa8, 0x17, 0xac, 0x1a, 0xa4, 0xd7, 0xd0, 0xc9, 0xfd, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, 0xa2, 0x74, 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, - 0xa1, 0x46, 0xe9, 0xe6, 0x17, 0xa5, 0xc3, 0xd8, 0xfa, 0x65, 0x26, 0xfa, 0x15, 0x60, 0x7f, 0x96, - 0x54, 0x16, 0xa4, 0x16, 0x27, 0xb1, 0x81, 0x3d, 0x68, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xa3, - 0xc3, 0x63, 0x5c, 0x3e, 0x01, 0x00, 0x00, + 0xa1, 0x46, 0xe9, 0xe6, 0x17, 0xa5, 0xc3, 0xd8, 0xfa, 0x65, 0xa6, 0xfa, 0x15, 0x60, 0x7f, 0x96, + 0x54, 0x16, 0xa4, 0x16, 0x27, 0xb1, 0x81, 0x3d, 0x68, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x3d, + 0x40, 0xb9, 0xc3, 0x3e, 0x01, 0x00, 0x00, } func (m *Pool) Marshal() (dAtA []byte, err error) { diff --git a/x/dex/types/pool_denom_test.go b/x/dex/types/pool_denom_test.go index 713e5f42e..fc511a8b8 100644 --- a/x/dex/types/pool_denom_test.go +++ b/x/dex/types/pool_denom_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/require" - dextypes "github.com/neutron-org/neutron/v4/x/dex/types" + dextypes "github.com/neutron-org/neutron/v5/x/dex/types" ) func TestValidatePoolDenom(t *testing.T) { diff --git a/x/dex/types/pool_liquidity.go b/x/dex/types/pool_liquidity.go index 9310826f3..1e3ddc253 100644 --- a/x/dex/types/pool_liquidity.go +++ b/x/dex/types/pool_liquidity.go @@ -3,7 +3,7 @@ package types import ( "cosmossdk.io/math" - math_utils "github.com/neutron-org/neutron/v4/utils/math" + math_utils "github.com/neutron-org/neutron/v5/utils/math" ) type PoolLiquidity struct { diff --git a/x/dex/types/pool_metadata.pb.go b/x/dex/types/pool_metadata.pb.go index 47c15c2ae..cc8b75705 100644 --- a/x/dex/types/pool_metadata.pb.go +++ b/x/dex/types/pool_metadata.pb.go @@ -110,9 +110,9 @@ var fileDescriptor_c2ee8eaeac9c06d8 = []byte{ 0x09, 0x62, 0x03, 0xa9, 0xf1, 0x4c, 0x71, 0x72, 0x3f, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xdd, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, 0xa8, - 0x01, 0xba, 0xf9, 0x45, 0xe9, 0x30, 0xb6, 0x7e, 0x99, 0x89, 0x7e, 0x05, 0xd8, 0x13, 0x25, 0x95, - 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0x60, 0x3f, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xd0, 0x55, - 0x5b, 0x6e, 0x0e, 0x01, 0x00, 0x00, + 0x01, 0xba, 0xf9, 0x45, 0xe9, 0x30, 0xb6, 0x7e, 0x99, 0xa9, 0x7e, 0x05, 0xd8, 0x13, 0x25, 0x95, + 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0x60, 0x3f, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x4e, 0xd6, + 0x81, 0xf1, 0x0e, 0x01, 0x00, 0x00, } func (m *PoolMetadata) Marshal() (dAtA []byte, err error) { diff --git a/x/dex/types/pool_reserves.pb.go b/x/dex/types/pool_reserves.pb.go index 10e0f6d50..2cafc125e 100644 --- a/x/dex/types/pool_reserves.pb.go +++ b/x/dex/types/pool_reserves.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_neutron_org_neutron_v4_utils_math "github.com/neutron-org/neutron/v4/utils/math" + github_com_neutron_org_neutron_v5_utils_math "github.com/neutron-org/neutron/v5/utils/math" io "io" math "math" math_bits "math/bits" @@ -88,8 +88,8 @@ func (m *PoolReservesKey) GetFee() uint64 { type PoolReserves struct { Key *PoolReservesKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` ReservesMakerDenom cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=reserves_maker_denom,json=reservesMakerDenom,proto3,customtype=cosmossdk.io/math.Int" json:"reserves_maker_denom" yaml:"reserves_maker_denom"` - PriceTakerToMaker github_com_neutron_org_neutron_v4_utils_math.PrecDec `protobuf:"bytes,3,opt,name=price_taker_to_maker,json=priceTakerToMaker,proto3,customtype=github.com/neutron-org/neutron/v4/utils/math.PrecDec" json:"price_taker_to_maker" yaml:"price_taker_to_maker"` - PriceOppositeTakerToMaker github_com_neutron_org_neutron_v4_utils_math.PrecDec `protobuf:"bytes,4,opt,name=price_opposite_taker_to_maker,json=priceOppositeTakerToMaker,proto3,customtype=github.com/neutron-org/neutron/v4/utils/math.PrecDec" json:"price_opposite_taker_to_maker" yaml:"price_opposite_taker_to_maker"` + PriceTakerToMaker github_com_neutron_org_neutron_v5_utils_math.PrecDec `protobuf:"bytes,3,opt,name=price_taker_to_maker,json=priceTakerToMaker,proto3,customtype=github.com/neutron-org/neutron/v5/utils/math.PrecDec" json:"price_taker_to_maker" yaml:"price_taker_to_maker"` + PriceOppositeTakerToMaker github_com_neutron_org_neutron_v5_utils_math.PrecDec `protobuf:"bytes,4,opt,name=price_opposite_taker_to_maker,json=priceOppositeTakerToMaker,proto3,customtype=github.com/neutron-org/neutron/v5/utils/math.PrecDec" json:"price_opposite_taker_to_maker" yaml:"price_opposite_taker_to_maker"` } func (m *PoolReserves) Reset() { *m = PoolReserves{} } @@ -141,35 +141,35 @@ func init() { proto.RegisterFile("neutron/dex/pool_reserves.proto", fileDescript var fileDescriptor_f0fe9f734c7ad538 = []byte{ // 463 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x93, 0x41, 0x8b, 0xd3, 0x40, - 0x14, 0xc7, 0x3b, 0xa6, 0x08, 0x4e, 0x15, 0x35, 0x74, 0xa1, 0xbb, 0x6a, 0x52, 0x82, 0x87, 0x5e, - 0x36, 0x01, 0xdd, 0x83, 0x88, 0xa7, 0xa5, 0x20, 0x45, 0xc4, 0x12, 0x7a, 0xf2, 0x12, 0xb2, 0x99, - 0x67, 0x77, 0x68, 0x93, 0x17, 0x66, 0xa6, 0x4b, 0xfb, 0x01, 0xf4, 0xec, 0xdd, 0xab, 0x5f, 0xc2, - 0x6f, 0xd0, 0xe3, 0x1e, 0xc5, 0x43, 0x90, 0xf6, 0xe6, 0x71, 0x3f, 0x81, 0xcc, 0x24, 0xd5, 0xb6, - 0x46, 0x3d, 0xec, 0x29, 0x2f, 0xff, 0xff, 0x3f, 0x6f, 0x7e, 0x6f, 0xc2, 0xa3, 0x6e, 0x06, 0x33, - 0x25, 0x30, 0x0b, 0x18, 0xcc, 0x83, 0x1c, 0x71, 0x1a, 0x09, 0x90, 0x20, 0x2e, 0x40, 0xfa, 0xb9, - 0x40, 0x85, 0x76, 0xab, 0x0a, 0xf8, 0x0c, 0xe6, 0x47, 0xed, 0x31, 0x8e, 0xd1, 0xe8, 0x81, 0xae, - 0xca, 0xc8, 0xd1, 0x4e, 0x0f, 0x25, 0x62, 0x06, 0x51, 0x1e, 0x73, 0x11, 0x71, 0x56, 0x06, 0xbc, - 0x4f, 0x84, 0xde, 0x1d, 0x22, 0x4e, 0xc3, 0xaa, 0xf5, 0x2b, 0x58, 0xd8, 0x2f, 0xe8, 0x9d, 0x9d, - 0x68, 0x87, 0x74, 0x49, 0xaf, 0xf5, 0xa4, 0xe3, 0x6f, 0x9d, 0xe7, 0x8f, 0x74, 0x62, 0x18, 0x73, - 0x31, 0xe8, 0x87, 0x2d, 0xf5, 0xeb, 0x85, 0xd9, 0xcf, 0xe8, 0xa1, 0xe2, 0xc9, 0x24, 0xe2, 0x19, - 0x83, 0x79, 0xa4, 0xe2, 0x09, 0x88, 0x48, 0x61, 0x94, 0xea, 0xa2, 0x73, 0xa3, 0x4b, 0x7a, 0x56, - 0x78, 0xa0, 0x03, 0x03, 0xed, 0x8f, 0xb4, 0x3a, 0xc2, 0xd7, 0xfa, 0x61, 0xdf, 0xa3, 0xd6, 0x3b, - 0x80, 0x8e, 0xd5, 0x25, 0xbd, 0x66, 0xa8, 0x4b, 0xef, 0x4b, 0x93, 0xde, 0xde, 0xa6, 0xb3, 0x7d, - 0x6a, 0x4d, 0x60, 0x51, 0x01, 0x3d, 0xdc, 0x01, 0xda, 0x9b, 0x22, 0xd4, 0x41, 0xfb, 0x03, 0xa1, - 0xed, 0xcd, 0xad, 0x95, 0x08, 0x11, 0x83, 0x0c, 0x53, 0x03, 0x72, 0xeb, 0x74, 0xb4, 0x2c, 0xdc, - 0xc6, 0xb7, 0xc2, 0x3d, 0x48, 0x50, 0xa6, 0x28, 0x25, 0x9b, 0xf8, 0x1c, 0x83, 0x34, 0x56, 0xe7, - 0xfe, 0x20, 0x53, 0x3f, 0x0a, 0xb7, 0xf6, 0xe3, 0xab, 0xc2, 0x7d, 0xb0, 0x88, 0xd3, 0xe9, 0x73, - 0xaf, 0xce, 0xf5, 0x42, 0x7b, 0x23, 0x9b, 0xb1, 0xfa, 0x5a, 0xb4, 0x3f, 0x13, 0xda, 0xce, 0x05, - 0x4f, 0x60, 0xff, 0x46, 0x2c, 0x03, 0x22, 0x2b, 0x90, 0x93, 0x31, 0x57, 0xe7, 0xb3, 0x33, 0x3f, - 0xc1, 0x34, 0xa8, 0x86, 0x3b, 0x46, 0x31, 0xde, 0xd4, 0xc1, 0xc5, 0x49, 0x30, 0x53, 0x7c, 0x2a, - 0x4b, 0xc6, 0xa1, 0x80, 0xa4, 0x0f, 0x89, 0xe6, 0xac, 0xeb, 0xfd, 0x9b, 0xb3, 0xce, 0xf5, 0xc2, - 0xfb, 0x46, 0xde, 0xf9, 0x05, 0x4b, 0x42, 0x1f, 0x95, 0x61, 0xcc, 0x73, 0x94, 0x5c, 0xfd, 0xc1, - 0xdb, 0x34, 0xbc, 0xef, 0xc9, 0x35, 0x81, 0xff, 0x7d, 0xca, 0x55, 0xe1, 0x3e, 0xde, 0x26, 0xff, - 0x4b, 0xcc, 0x0b, 0x0f, 0x8d, 0xff, 0xa6, 0xb2, 0xb7, 0x47, 0x39, 0x7d, 0xb9, 0x5c, 0x39, 0xe4, - 0x72, 0xe5, 0x90, 0xef, 0x2b, 0x87, 0x7c, 0x5c, 0x3b, 0x8d, 0xcb, 0xb5, 0xd3, 0xf8, 0xba, 0x76, - 0x1a, 0x6f, 0x8f, 0xff, 0xcf, 0x3c, 0x2f, 0x17, 0x66, 0x91, 0x83, 0x3c, 0xbb, 0x69, 0x36, 0xe5, - 0xe9, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd6, 0x64, 0x59, 0x2e, 0x90, 0x03, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x93, 0x4f, 0x8b, 0xd3, 0x40, + 0x18, 0xc6, 0x3b, 0xa6, 0x08, 0x4e, 0x15, 0x35, 0x74, 0xa1, 0xbb, 0x6a, 0x52, 0x82, 0x87, 0x5e, + 0x36, 0x01, 0xff, 0x80, 0x88, 0xa7, 0xa5, 0x20, 0x45, 0xc4, 0x12, 0x7a, 0xf2, 0x12, 0xb2, 0x99, + 0xd7, 0xee, 0xd0, 0x26, 0x6f, 0x98, 0x99, 0x2e, 0xed, 0x07, 0xd0, 0xb3, 0x77, 0xaf, 0x7e, 0x09, + 0xbf, 0x41, 0x8f, 0x7b, 0x14, 0x0f, 0x41, 0xda, 0x9b, 0xc7, 0xfd, 0x04, 0x32, 0x93, 0x54, 0xdb, + 0x1a, 0xf5, 0xb0, 0xa7, 0xbc, 0x79, 0x9e, 0x27, 0xef, 0xfc, 0xde, 0x09, 0x2f, 0x75, 0x33, 0x98, + 0x29, 0x81, 0x59, 0xc0, 0x60, 0x1e, 0xe4, 0x88, 0xd3, 0x48, 0x80, 0x04, 0x71, 0x0e, 0xd2, 0xcf, + 0x05, 0x2a, 0xb4, 0x5b, 0x55, 0xc0, 0x67, 0x30, 0x3f, 0x6a, 0x8f, 0x71, 0x8c, 0x46, 0x0f, 0x74, + 0x55, 0x46, 0x8e, 0x76, 0x7a, 0x28, 0x11, 0x33, 0x88, 0xf2, 0x98, 0x8b, 0x88, 0xb3, 0x32, 0xe0, + 0x7d, 0x22, 0xf4, 0xf6, 0x10, 0x71, 0x1a, 0x56, 0xad, 0x5f, 0xc1, 0xc2, 0x7e, 0x41, 0x6f, 0xed, + 0x44, 0x3b, 0xa4, 0x4b, 0x7a, 0xad, 0x47, 0x1d, 0x7f, 0xeb, 0x3c, 0x7f, 0xa4, 0x13, 0xc3, 0x98, + 0x8b, 0x41, 0x3f, 0x6c, 0xa9, 0x5f, 0x2f, 0xcc, 0x7e, 0x46, 0x0f, 0x15, 0x4f, 0x26, 0x11, 0xcf, + 0x18, 0xcc, 0x23, 0x15, 0x4f, 0x40, 0x44, 0x0a, 0xa3, 0x54, 0x17, 0x9d, 0x6b, 0x5d, 0xd2, 0xb3, + 0xc2, 0x03, 0x1d, 0x18, 0x68, 0x7f, 0xa4, 0xd5, 0x11, 0xbe, 0xd6, 0x0f, 0xfb, 0x0e, 0xb5, 0xde, + 0x01, 0x74, 0xac, 0x2e, 0xe9, 0x35, 0x43, 0x5d, 0x7a, 0x5f, 0x9a, 0xf4, 0xe6, 0x36, 0x9d, 0xed, + 0x53, 0x6b, 0x02, 0x8b, 0x0a, 0xe8, 0xfe, 0x0e, 0xd0, 0xde, 0x14, 0xa1, 0x0e, 0xda, 0x1f, 0x08, + 0x6d, 0x6f, 0x6e, 0xad, 0x44, 0x88, 0x18, 0x64, 0x98, 0x1a, 0x90, 0x1b, 0x27, 0xa3, 0x65, 0xe1, + 0x36, 0xbe, 0x15, 0xee, 0x41, 0x82, 0x32, 0x45, 0x29, 0xd9, 0xc4, 0xe7, 0x18, 0xa4, 0xb1, 0x3a, + 0xf3, 0x07, 0x99, 0xfa, 0x51, 0xb8, 0xb5, 0x1f, 0x5f, 0x16, 0xee, 0xbd, 0x45, 0x9c, 0x4e, 0x9f, + 0x7b, 0x75, 0xae, 0x17, 0xda, 0x1b, 0xd9, 0x8c, 0xd5, 0xd7, 0xa2, 0xfd, 0x99, 0xd0, 0x76, 0x2e, + 0x78, 0x02, 0xfb, 0x37, 0x62, 0x19, 0x10, 0x59, 0x81, 0x3c, 0x19, 0x73, 0x75, 0x36, 0x3b, 0xf5, + 0x13, 0x4c, 0x83, 0x6a, 0xb8, 0x63, 0x14, 0xe3, 0x4d, 0x1d, 0x9c, 0x3f, 0x0d, 0x66, 0x8a, 0x4f, + 0x65, 0xc9, 0x38, 0x14, 0x90, 0xf4, 0x21, 0xd1, 0x9c, 0x75, 0xbd, 0x7f, 0x73, 0xd6, 0xb9, 0x5e, + 0x78, 0xd7, 0xc8, 0x3b, 0xbf, 0x60, 0x49, 0xe8, 0x83, 0x32, 0x8c, 0x79, 0x8e, 0x92, 0xab, 0x3f, + 0x78, 0x9b, 0x86, 0xf7, 0x3d, 0xb9, 0x22, 0xf0, 0xbf, 0x4f, 0xb9, 0x2c, 0xdc, 0x87, 0xdb, 0xe4, + 0x7f, 0x89, 0x79, 0xe1, 0xa1, 0xf1, 0xdf, 0x54, 0xf6, 0xf6, 0x28, 0x27, 0x2f, 0x97, 0x2b, 0x87, + 0x5c, 0xac, 0x1c, 0xf2, 0x7d, 0xe5, 0x90, 0x8f, 0x6b, 0xa7, 0x71, 0xb1, 0x76, 0x1a, 0x5f, 0xd7, + 0x4e, 0xe3, 0xed, 0xf1, 0xff, 0x99, 0xe7, 0xe5, 0xc2, 0x2c, 0x72, 0x90, 0xa7, 0xd7, 0xcd, 0xa6, + 0x3c, 0xfe, 0x19, 0x00, 0x00, 0xff, 0xff, 0xbe, 0xc4, 0x40, 0x24, 0x90, 0x03, 0x00, 0x00, } func (m *PoolReservesKey) Marshal() (dAtA []byte, err error) { diff --git a/x/dex/types/pool_reserves_key.go b/x/dex/types/pool_reserves_key.go index b331b6dd4..bb1f7a9c9 100644 --- a/x/dex/types/pool_reserves_key.go +++ b/x/dex/types/pool_reserves_key.go @@ -3,8 +3,8 @@ package types import ( sdk "github.com/cosmos/cosmos-sdk/types" - math_utils "github.com/neutron-org/neutron/v4/utils/math" - "github.com/neutron-org/neutron/v4/x/dex/utils" + math_utils "github.com/neutron-org/neutron/v5/utils/math" + "github.com/neutron-org/neutron/v5/x/dex/utils" ) var _ TickLiquidityKey = (*PoolReservesKey)(nil) diff --git a/x/dex/types/pool_test.go b/x/dex/types/pool_test.go index 6e339d212..77ed9e083 100644 --- a/x/dex/types/pool_test.go +++ b/x/dex/types/pool_test.go @@ -6,7 +6,7 @@ import ( "cosmossdk.io/math" "github.com/stretchr/testify/assert" - dextypes "github.com/neutron-org/neutron/v4/x/dex/types" + dextypes "github.com/neutron-org/neutron/v5/x/dex/types" ) func TestCalcGreatestMatchingRatioBothReservesNonZero(t *testing.T) { diff --git a/x/dex/types/price.go b/x/dex/types/price.go index 72686a6a1..2feafece6 100644 --- a/x/dex/types/price.go +++ b/x/dex/types/price.go @@ -9,8 +9,8 @@ import ( "cosmossdk.io/errors" "cosmossdk.io/math" - math_utils "github.com/neutron-org/neutron/v4/utils/math" - "github.com/neutron-org/neutron/v4/x/dex/utils" + math_utils "github.com/neutron-org/neutron/v5/utils/math" + "github.com/neutron-org/neutron/v5/x/dex/utils" ) const ( diff --git a/x/dex/types/price_test.go b/x/dex/types/price_test.go index 63145bf72..86b1c9c32 100644 --- a/x/dex/types/price_test.go +++ b/x/dex/types/price_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func TestCalcTickIndexFromPrice(t *testing.T) { diff --git a/x/dex/types/query.pb.go b/x/dex/types/query.pb.go index 9450a4a07..cc5631386 100644 --- a/x/dex/types/query.pb.go +++ b/x/dex/types/query.pb.go @@ -14,7 +14,7 @@ import ( grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - github_com_neutron_org_neutron_v4_utils_math "github.com/neutron-org/neutron/v4/utils/math" + github_com_neutron_org_neutron_v5_utils_math "github.com/neutron-org/neutron/v5/utils/math" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" @@ -1331,7 +1331,7 @@ type QueryEstimateMultiHopSwapRequest struct { Receiver string `protobuf:"bytes,2,opt,name=receiver,proto3" json:"receiver,omitempty"` Routes []*MultiHopRoute `protobuf:"bytes,3,rep,name=routes,proto3" json:"routes,omitempty"` AmountIn cosmossdk_io_math.Int `protobuf:"bytes,4,opt,name=amount_in,json=amountIn,proto3,customtype=cosmossdk.io/math.Int" json:"amount_in" yaml:"amount_in"` - ExitLimitPrice github_com_neutron_org_neutron_v4_utils_math.PrecDec `protobuf:"bytes,5,opt,name=exit_limit_price,json=exitLimitPrice,proto3,customtype=github.com/neutron-org/neutron/v4/utils/math.PrecDec" json:"exit_limit_price" yaml:"exit_limit_price"` + ExitLimitPrice github_com_neutron_org_neutron_v5_utils_math.PrecDec `protobuf:"bytes,5,opt,name=exit_limit_price,json=exitLimitPrice,proto3,customtype=github.com/neutron-org/neutron/v5/utils/math.PrecDec" json:"exit_limit_price" yaml:"exit_limit_price"` // If pickBestRoute == true then all routes are run and the route with the // best price is chosen otherwise, the first succesful route is used. PickBestRoute bool `protobuf:"varint,6,opt,name=pick_best_route,json=pickBestRoute,proto3" json:"pick_best_route,omitempty"` @@ -1950,153 +1950,153 @@ func init() { func init() { proto.RegisterFile("neutron/dex/query.proto", fileDescriptor_b6613ea5fce61e9c) } var fileDescriptor_b6613ea5fce61e9c = []byte{ - // 2332 bytes of a gzipped FileDescriptorProto + // 2331 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0x4d, 0x6c, 0x1c, 0x49, - 0x15, 0x4e, 0x7b, 0x1c, 0xc7, 0x2e, 0x3b, 0xb1, 0x5d, 0xb6, 0x37, 0x93, 0xb1, 0xe3, 0xb1, 0x7b, - 0x37, 0xb1, 0x63, 0xf0, 0x74, 0x6c, 0x36, 0xbb, 0xab, 0x2c, 0x0b, 0x78, 0xf0, 0xae, 0x33, 0xec, - 0x46, 0x31, 0xbd, 0x66, 0x7f, 0xc2, 0x4a, 0xad, 0xf6, 0x74, 0xc5, 0x6e, 0xb9, 0xa7, 0xbb, 0xd3, - 0x5d, 0x63, 0x7b, 0x14, 0xe5, 0xb2, 0xdc, 0x10, 0x87, 0xc0, 0xf2, 0x23, 0x16, 0x69, 0x39, 0x20, - 0x0e, 0x08, 0x21, 0x40, 0x42, 0xdc, 0xb8, 0x20, 0x81, 0x56, 0x08, 0xa1, 0x95, 0xf6, 0x82, 0x40, - 0x1a, 0x50, 0xc2, 0x29, 0x5c, 0x90, 0x0f, 0x9c, 0x51, 0x55, 0xbf, 0x9e, 0xe9, 0x9e, 0xa9, 0x9e, - 0x1e, 0x3b, 0xc3, 0x6a, 0x4f, 0xee, 0xae, 0x7a, 0xaf, 0xdf, 0xf7, 0xbe, 0x7a, 0xf5, 0x5e, 0xd5, - 0x1b, 0xa3, 0xf3, 0x36, 0xa9, 0x52, 0xcf, 0xb1, 0x15, 0x83, 0x1c, 0x2a, 0x77, 0xab, 0xc4, 0xab, - 0x15, 0x5c, 0xcf, 0xa1, 0x0e, 0x1e, 0x86, 0x89, 0x82, 0x41, 0x0e, 0x73, 0x4b, 0x65, 0xc7, 0xaf, - 0x38, 0xbe, 0xb2, 0xad, 0xfb, 0x24, 0x90, 0x52, 0xf6, 0x57, 0xb6, 0x09, 0xd5, 0x57, 0x14, 0x57, - 0xdf, 0x31, 0x6d, 0x9d, 0x9a, 0x8e, 0x1d, 0x28, 0xe6, 0x66, 0xa3, 0xb2, 0xa1, 0x54, 0xd9, 0x31, - 0xc3, 0xf9, 0xc9, 0x1d, 0x67, 0xc7, 0xe1, 0x8f, 0x0a, 0x7b, 0x82, 0xd1, 0x99, 0x1d, 0xc7, 0xd9, - 0xb1, 0x88, 0xa2, 0xbb, 0xa6, 0xa2, 0xdb, 0xb6, 0x43, 0xf9, 0x27, 0x7d, 0x98, 0xcd, 0xc3, 0x2c, - 0x7f, 0xdb, 0xae, 0xde, 0x51, 0xa8, 0x59, 0x21, 0x3e, 0xd5, 0x2b, 0x2e, 0x08, 0xcc, 0x45, 0xdd, - 0x30, 0x88, 0xeb, 0xf8, 0x26, 0xd5, 0x3c, 0x52, 0x76, 0x3c, 0x03, 0x24, 0x2e, 0x45, 0x25, 0x2c, - 0xb3, 0x62, 0x52, 0xcd, 0xf1, 0x0c, 0xe2, 0x69, 0xd4, 0xd3, 0xed, 0xf2, 0x2e, 0x01, 0xb1, 0xa5, - 0x14, 0x31, 0xad, 0xea, 0x13, 0x0f, 0x64, 0xb3, 0x51, 0x59, 0x57, 0xf7, 0xf4, 0x4a, 0x88, 0xf7, - 0xa9, 0xd8, 0x8c, 0xe3, 0x58, 0xa1, 0x1f, 0xad, 0xe3, 0x5a, 0x85, 0x50, 0xdd, 0xd0, 0xa9, 0x9e, - 0x28, 0xe0, 0x11, 0x9f, 0x78, 0xfb, 0xc4, 0x17, 0x39, 0x4a, 0xcd, 0xf2, 0x9e, 0x66, 0x99, 0x77, - 0xab, 0xa6, 0x61, 0xd2, 0x5a, 0xc8, 0x6f, 0x4c, 0xe2, 0x30, 0x18, 0x95, 0x27, 0x11, 0xfe, 0x2a, - 0x5b, 0xb7, 0x4d, 0x0e, 0x53, 0x25, 0x77, 0xab, 0xc4, 0xa7, 0xf2, 0x0d, 0x34, 0x11, 0x1b, 0xf5, - 0x5d, 0xc7, 0xf6, 0x09, 0x5e, 0x41, 0x03, 0x81, 0x3b, 0x59, 0x69, 0x4e, 0x5a, 0x1c, 0x5e, 0x9d, - 0x28, 0x44, 0x82, 0xa1, 0x10, 0x08, 0x17, 0xfb, 0x3f, 0xac, 0xe7, 0x4f, 0xa9, 0x20, 0x28, 0xff, - 0x48, 0x42, 0xcf, 0xf0, 0x4f, 0x6d, 0x10, 0xfa, 0x1a, 0xa3, 0xed, 0x16, 0x63, 0x6d, 0x2b, 0x20, - 0xed, 0x6b, 0x3e, 0xf1, 0xc0, 0x24, 0xce, 0xa2, 0x33, 0xba, 0x61, 0x78, 0xc4, 0x0f, 0x3e, 0x3e, - 0xa4, 0x86, 0xaf, 0x38, 0x8f, 0x86, 0x43, 0x92, 0xf7, 0x48, 0x2d, 0xdb, 0xc7, 0x67, 0x11, 0x0c, - 0xbd, 0x4a, 0x6a, 0xf8, 0x05, 0x94, 0x2d, 0xeb, 0x56, 0x59, 0x3b, 0x30, 0xe9, 0xae, 0xe1, 0xe9, - 0x07, 0xfa, 0xb6, 0x45, 0x34, 0x7f, 0x57, 0xf7, 0x88, 0x9f, 0xcd, 0xcc, 0x49, 0x8b, 0x83, 0xea, - 0x53, 0x6c, 0xfe, 0xcd, 0xc8, 0xf4, 0xeb, 0x7c, 0x56, 0x7e, 0xd0, 0x87, 0x2e, 0xa5, 0xa0, 0x03, - 0xd7, 0x75, 0x94, 0x4d, 0x5a, 0x75, 0x20, 0x43, 0x8e, 0x91, 0x21, 0xfc, 0x1a, 0xe7, 0x46, 0x52, - 0xa7, 0x2c, 0xd1, 0x24, 0xfe, 0x86, 0x84, 0x26, 0x44, 0x2e, 0x70, 0x87, 0x8b, 0x2a, 0x53, 0xfd, - 0x5b, 0x3d, 0x3f, 0x15, 0x6c, 0x23, 0xdf, 0xd8, 0x2b, 0x98, 0x8e, 0x52, 0xd1, 0xe9, 0x6e, 0xa1, - 0x64, 0xd3, 0xc7, 0xf5, 0xbc, 0x48, 0xf7, 0xa8, 0x9e, 0xcf, 0xd5, 0xf4, 0x8a, 0x75, 0x5d, 0x16, - 0x4c, 0xca, 0x2a, 0x3e, 0x68, 0xa7, 0xc4, 0x86, 0xf5, 0x5a, 0xb3, 0xac, 0x8e, 0xeb, 0xf5, 0x0a, - 0x42, 0xcd, 0x2d, 0x0e, 0x14, 0x5c, 0x2e, 0x04, 0xe0, 0x0a, 0x6c, 0x8f, 0x17, 0x82, 0xac, 0x01, - 0x3b, 0xbd, 0xb0, 0xa9, 0xef, 0x10, 0xd0, 0x55, 0x23, 0x9a, 0xf2, 0xc7, 0x12, 0x2c, 0x41, 0xb2, - 0xc1, 0xae, 0x96, 0x20, 0xd3, 0x8b, 0x25, 0xd8, 0x88, 0x39, 0xd5, 0xc7, 0x9d, 0x5a, 0x48, 0x75, - 0x2a, 0xc0, 0x17, 0xf3, 0xea, 0xfb, 0x12, 0x9a, 0x4b, 0x0c, 0xac, 0x90, 0xc2, 0xf3, 0xe8, 0x8c, - 0xab, 0x9b, 0x9e, 0x66, 0x1a, 0x10, 0xf2, 0x03, 0xec, 0xb5, 0x64, 0xe0, 0x8b, 0x08, 0xf1, 0x2d, - 0x6c, 0xda, 0x06, 0x39, 0xe4, 0x30, 0x32, 0xea, 0x10, 0x1b, 0x29, 0xb1, 0x01, 0x7c, 0x01, 0x0d, - 0x52, 0x67, 0x8f, 0xd8, 0x9a, 0x69, 0xf3, 0xf8, 0x1e, 0x52, 0xcf, 0xf0, 0xf7, 0x92, 0xdd, 0xba, - 0x57, 0xfa, 0x5b, 0xf7, 0x8a, 0x5c, 0x43, 0xf3, 0x1d, 0x70, 0x01, 0xd3, 0x5b, 0x68, 0x42, 0xc0, - 0x34, 0x2c, 0xf2, 0x6c, 0x67, 0x92, 0x81, 0xe0, 0xf1, 0x36, 0x82, 0xe5, 0x0f, 0x42, 0x4e, 0x44, - 0x2b, 0x9d, 0xca, 0x49, 0xd4, 0xe9, 0xbe, 0xb8, 0xd3, 0xf1, 0x50, 0xcc, 0x9c, 0x38, 0x14, 0x7f, - 0x2f, 0x01, 0x39, 0x62, 0x80, 0x69, 0xe4, 0x64, 0x9e, 0x80, 0x9c, 0xde, 0x45, 0xde, 0xcf, 0x25, - 0x34, 0x1d, 0x3a, 0xc1, 0x62, 0x7a, 0x3d, 0x28, 0x7a, 0x7e, 0x7a, 0x9e, 0x7d, 0x45, 0x00, 0xe1, - 0x04, 0x34, 0xe2, 0x25, 0x34, 0x6e, 0xda, 0x65, 0xab, 0x6a, 0x10, 0x8d, 0x57, 0x2a, 0x56, 0xc6, - 0x20, 0x0f, 0x8f, 0xc2, 0xc4, 0xa6, 0xe3, 0x58, 0xeb, 0x3a, 0xd5, 0xe5, 0x9f, 0x4a, 0x68, 0x46, - 0x8c, 0x16, 0xd8, 0xfe, 0x3c, 0x1a, 0x84, 0xb2, 0xed, 0x03, 0xc5, 0xb9, 0x18, 0xc5, 0xa0, 0xa0, - 0xf2, 0x92, 0x0e, 0xf4, 0x36, 0x34, 0x7a, 0xc7, 0xea, 0xb7, 0x25, 0xb4, 0xdc, 0x31, 0x4b, 0x15, - 0x6b, 0x6b, 0x01, 0x8d, 0x9f, 0x18, 0xcf, 0xf2, 0x1f, 0x25, 0x54, 0xe8, 0x16, 0x13, 0xb0, 0xf9, - 0x2a, 0x1a, 0x89, 0xc4, 0xae, 0x7f, 0xec, 0xb4, 0x39, 0xdc, 0x0c, 0xdc, 0x1e, 0x92, 0xfb, 0x7e, - 0x24, 0x08, 0xb6, 0xcc, 0xf2, 0xde, 0x6b, 0xe1, 0xc9, 0xe5, 0xd3, 0x90, 0x14, 0x7e, 0x2d, 0xa1, - 0x8b, 0x09, 0xe0, 0x80, 0xd4, 0x0d, 0x74, 0x2e, 0x7e, 0xe0, 0x12, 0x06, 0x6a, 0x4c, 0x17, 0xe8, - 0x3c, 0x4b, 0xa3, 0x83, 0xbd, 0x23, 0xf4, 0x03, 0x09, 0x2d, 0x86, 0x59, 0xbe, 0x64, 0xeb, 0x65, - 0x6a, 0xee, 0x93, 0x9e, 0x66, 0xdc, 0x78, 0x81, 0xca, 0xb4, 0x16, 0xa8, 0xd4, 0x2a, 0xf4, 0x1d, - 0x09, 0x5d, 0xe9, 0x02, 0x20, 0x10, 0x4c, 0xd0, 0x8c, 0x09, 0x42, 0xda, 0x93, 0xd6, 0xa5, 0x0b, - 0x66, 0x92, 0x39, 0xd9, 0x03, 0xd2, 0xd6, 0x2c, 0x2b, 0x95, 0xb4, 0x5e, 0x9d, 0x7e, 0xfe, 0x1e, - 0x12, 0xd1, 0xd9, 0x68, 0xd7, 0x44, 0x64, 0x7a, 0x40, 0x44, 0xef, 0xe2, 0xf0, 0x87, 0x91, 0x5a, - 0xc4, 0x52, 0xbe, 0x0a, 0x77, 0x96, 0x4f, 0xc3, 0xbe, 0xfe, 0x45, 0x24, 0xe9, 0xc4, 0xb1, 0x01, - 0xd9, 0xeb, 0xe8, 0x6c, 0xec, 0xa2, 0x05, 0xec, 0x5e, 0x88, 0xdf, 0x79, 0x22, 0x9a, 0x40, 0xec, - 0x88, 0x1b, 0x19, 0xeb, 0x1d, 0x97, 0xef, 0x86, 0x5c, 0x6e, 0x10, 0xda, 0x2b, 0x2e, 0x53, 0xb6, - 0xf1, 0x18, 0xca, 0xdc, 0x21, 0x84, 0x6f, 0xdf, 0x7e, 0x95, 0x3d, 0xca, 0x06, 0x70, 0xd6, 0x86, - 0x21, 0x99, 0x33, 0xe9, 0xd8, 0x9c, 0xc9, 0x3f, 0xcb, 0xc0, 0x41, 0xf1, 0x65, 0x9f, 0x9a, 0x15, - 0x9d, 0x92, 0x9b, 0x55, 0x8b, 0x9a, 0x37, 0x1c, 0xf7, 0xf5, 0x03, 0xdd, 0x8d, 0xd4, 0xd7, 0xb2, - 0x47, 0x74, 0xea, 0x78, 0x61, 0x7d, 0x85, 0x57, 0x9c, 0x43, 0x83, 0x1e, 0x29, 0x13, 0x73, 0x9f, - 0x78, 0xe0, 0x70, 0xe3, 0x1d, 0xaf, 0xa2, 0x01, 0xcf, 0xa9, 0x52, 0x7e, 0x31, 0x6c, 0xcf, 0xd1, - 0xa1, 0x1d, 0x95, 0x89, 0xa8, 0x20, 0x89, 0xbf, 0x8e, 0x86, 0xf4, 0x8a, 0x53, 0xb5, 0x29, 0x63, - 0x90, 0xe7, 0xb2, 0xe2, 0x17, 0xd8, 0x1d, 0xb7, 0xd3, 0x65, 0xac, 0xa9, 0x71, 0x54, 0xcf, 0x8f, - 0x05, 0x57, 0xb0, 0xc6, 0x90, 0xac, 0x0e, 0x06, 0xcf, 0x25, 0x1b, 0x7f, 0x4f, 0x42, 0x63, 0xe4, - 0xd0, 0xa4, 0xb0, 0x9f, 0x5d, 0xcf, 0x2c, 0x93, 0xec, 0x69, 0x6e, 0x64, 0x0f, 0x8c, 0x3c, 0xbb, - 0x63, 0xd2, 0xdd, 0xea, 0x76, 0xa1, 0xec, 0x54, 0x14, 0x40, 0xbb, 0xec, 0x78, 0x3b, 0xe1, 0xb3, - 0xb2, 0xff, 0xac, 0x52, 0xa5, 0xa6, 0xe5, 0x07, 0xf6, 0x37, 0x3d, 0x52, 0x5e, 0x27, 0xe5, 0xc7, - 0xf5, 0x7c, 0xdb, 0x77, 0x8f, 0xea, 0xf9, 0xf3, 0x01, 0x94, 0xd6, 0x19, 0x59, 0x3d, 0xc7, 0x86, - 0x78, 0x2a, 0xd8, 0x64, 0x03, 0xf8, 0x32, 0x1a, 0x75, 0x59, 0x68, 0x6c, 0x13, 0x9f, 0x6a, 0x9c, - 0x88, 0xec, 0x00, 0x3f, 0xc2, 0x9d, 0x65, 0xc3, 0x45, 0xb6, 0x9b, 0xd8, 0x20, 0xbb, 0xe8, 0xcc, - 0x77, 0x58, 0x2b, 0x88, 0x8b, 0xbb, 0x68, 0xb0, 0xec, 0x98, 0xb6, 0xe6, 0x54, 0x69, 0x23, 0x24, - 0xa2, 0x7b, 0x20, 0x8c, 0xfe, 0x2f, 0x3b, 0xa6, 0x5d, 0x7c, 0x11, 0xfc, 0x5e, 0x88, 0xf8, 0x0d, - 0xbd, 0xa3, 0xe0, 0xcf, 0xb2, 0x6f, 0xec, 0x29, 0xb4, 0xe6, 0x12, 0x9f, 0x2b, 0x3c, 0xae, 0xe7, - 0x1b, 0x5f, 0x57, 0xcf, 0xb0, 0xa7, 0x5b, 0x55, 0x2a, 0xbf, 0xdf, 0x8f, 0x9e, 0x8e, 0x01, 0xdb, - 0xb4, 0xf4, 0x72, 0x24, 0xd9, 0x3d, 0x59, 0x1c, 0x75, 0xb8, 0x82, 0x4d, 0xa3, 0xa1, 0x60, 0x8a, - 0x39, 0x1b, 0x94, 0xbe, 0x40, 0xf6, 0x56, 0x95, 0xe2, 0x02, 0x9a, 0x6c, 0xee, 0x38, 0xcd, 0xb4, - 0x35, 0xea, 0x70, 0xb9, 0xd3, 0x7c, 0xef, 0x8d, 0x35, 0xf6, 0x5e, 0xc9, 0xde, 0x72, 0x98, 0x7c, - 0x2c, 0xf6, 0x06, 0x7a, 0x1c, 0x7b, 0xd7, 0x11, 0x82, 0xfa, 0x51, 0x73, 0x49, 0xf6, 0xcc, 0x9c, - 0xb4, 0x78, 0x6e, 0x75, 0x3a, 0xa9, 0x78, 0xd4, 0x5c, 0xa2, 0x0e, 0x39, 0xe1, 0x23, 0xbe, 0x89, - 0x46, 0xc9, 0xa1, 0x6b, 0x7a, 0x3c, 0x39, 0x69, 0xd4, 0xac, 0x90, 0xec, 0x20, 0x5f, 0xd8, 0x5c, - 0x21, 0xe8, 0xc9, 0x15, 0xc2, 0x9e, 0x5c, 0x61, 0x2b, 0xec, 0xc9, 0x15, 0x07, 0xd9, 0x66, 0x7f, - 0xf0, 0x8f, 0xbc, 0xc4, 0xc2, 0x2d, 0x54, 0x66, 0xd3, 0xb8, 0x82, 0xce, 0x56, 0xf4, 0xc3, 0xb5, - 0x00, 0x25, 0x23, 0x64, 0x88, 0xfb, 0x7a, 0x23, 0xad, 0xe9, 0x71, 0xae, 0xa2, 0x1f, 0x6a, 0x7a, - 0x43, 0xed, 0xa8, 0x9e, 0x9f, 0x0a, 0x1c, 0x8e, 0x8f, 0xcb, 0xea, 0x48, 0xe3, 0xf3, 0x2c, 0x38, - 0xfe, 0x93, 0x81, 0x2e, 0x47, 0x62, 0x70, 0x40, 0xe0, 0xfe, 0x40, 0x42, 0x67, 0xa9, 0x43, 0x75, - 0x8b, 0xad, 0x15, 0x0b, 0xad, 0xf4, 0xf0, 0x7d, 0xeb, 0xf8, 0xe1, 0x1b, 0x37, 0x71, 0x54, 0xcf, - 0x4f, 0x06, 0x4e, 0xc4, 0x86, 0x65, 0x75, 0x98, 0xbf, 0x97, 0x6c, 0xa6, 0x85, 0xdf, 0x93, 0xd0, - 0x88, 0x7f, 0xa0, 0xbb, 0x0d, 0x60, 0x7d, 0x69, 0xc0, 0xde, 0x38, 0x3e, 0xb0, 0x98, 0x85, 0xa3, - 0x7a, 0x7e, 0x22, 0xc0, 0x15, 0x1d, 0x95, 0x55, 0xc4, 0x5e, 0x01, 0x15, 0xe3, 0x8b, 0xcf, 0x3a, - 0x55, 0x1a, 0xc0, 0xca, 0xfc, 0x3f, 0xf8, 0x8a, 0x99, 0x68, 0xf2, 0x15, 0x1b, 0x96, 0xd5, 0x61, - 0xf6, 0x7e, 0xab, 0x4a, 0x99, 0x96, 0xfc, 0x0e, 0x1a, 0x0b, 0x5a, 0x9a, 0xbc, 0xd2, 0x3c, 0x59, - 0x03, 0x06, 0x0a, 0x63, 0xa6, 0x59, 0x18, 0x15, 0x34, 0xd9, 0xf8, 0x7a, 0xb1, 0x56, 0x5a, 0x8f, - 0x5a, 0x60, 0x05, 0x11, 0x2c, 0xf4, 0xab, 0x03, 0xec, 0xb5, 0x64, 0xc8, 0x5f, 0x42, 0xe3, 0x11, - 0x38, 0x10, 0x6d, 0x9f, 0x41, 0xfd, 0x6c, 0x1a, 0x62, 0x6c, 0xbc, 0xad, 0x6a, 0x42, 0xb5, 0xe4, - 0x42, 0xf2, 0x72, 0xfc, 0x3c, 0x70, 0x13, 0x1a, 0xc6, 0xa1, 0xe5, 0x73, 0xa8, 0xaf, 0x61, 0xb4, - 0xcf, 0x34, 0x5a, 0x4b, 0x77, 0x53, 0xbc, 0x59, 0xba, 0x37, 0xa3, 0x8d, 0xe7, 0xc4, 0xd2, 0x1d, - 0x6a, 0x42, 0xa3, 0x77, 0x24, 0x3a, 0x26, 0x93, 0xf8, 0x81, 0xaf, 0x15, 0x54, 0xaf, 0x8e, 0xcd, - 0xad, 0x87, 0x37, 0x91, 0x37, 0x6e, 0x8b, 0x37, 0x99, 0xae, 0xbc, 0x71, 0x23, 0x63, 0x3d, 0x3b, - 0xbc, 0xad, 0xfe, 0x37, 0x8b, 0x4e, 0x73, 0xbc, 0x78, 0x17, 0x0d, 0x04, 0x7d, 0x72, 0x9c, 0x8f, - 0x61, 0x69, 0x6f, 0xc2, 0xe7, 0xe6, 0x92, 0x05, 0x02, 0x13, 0xf2, 0xf4, 0xbb, 0x1f, 0xff, 0xeb, - 0xbd, 0xbe, 0x29, 0x3c, 0xa1, 0xb4, 0xff, 0xe2, 0x80, 0xff, 0x20, 0xa1, 0x29, 0xe1, 0x5d, 0x1e, - 0xaf, 0xb4, 0x7f, 0x38, 0xa5, 0x3b, 0x9f, 0x5b, 0x3d, 0x8e, 0x0a, 0xa0, 0x7b, 0x99, 0xa3, 0xfb, - 0x22, 0x7e, 0x49, 0xe9, 0xe6, 0xb7, 0x13, 0xe5, 0x1e, 0xf4, 0x47, 0xee, 0x2b, 0xf7, 0x22, 0x97, - 0xc7, 0xfb, 0xf8, 0x57, 0x12, 0xca, 0x0a, 0x0d, 0xad, 0x59, 0x96, 0xc8, 0x95, 0x94, 0xc6, 0xb5, - 0xc8, 0x95, 0xb4, 0xd6, 0xb3, 0xbc, 0xcc, 0x5d, 0x59, 0xc0, 0x97, 0xba, 0x72, 0x05, 0xff, 0x45, - 0x42, 0xf3, 0x49, 0x90, 0x1b, 0x4d, 0x19, 0x7c, 0xbd, 0x7b, 0x20, 0xad, 0xdd, 0xa5, 0xdc, 0x8b, - 0x27, 0xd2, 0x05, 0x6f, 0xae, 0x72, 0x6f, 0x96, 0xf0, 0x62, 0xcc, 0x1b, 0xbe, 0x08, 0xd1, 0xee, - 0x50, 0x73, 0x45, 0xf0, 0x9f, 0x25, 0x34, 0xde, 0x7e, 0x4f, 0x5c, 0xee, 0x2e, 0x28, 0x42, 0xcc, - 0x85, 0x6e, 0xc5, 0x01, 0xe6, 0x5b, 0x1c, 0xa6, 0x8a, 0x37, 0xd3, 0x48, 0x57, 0xee, 0x41, 0x16, - 0x67, 0xa1, 0x03, 0xa7, 0x32, 0xf6, 0xd8, 0xc8, 0xe0, 0xad, 0x21, 0xf5, 0x1b, 0x09, 0x4d, 0xb6, - 0xd9, 0x65, 0xe1, 0xb4, 0xdc, 0x1d, 0xad, 0x1d, 0x3c, 0xea, 0xd4, 0x3a, 0x96, 0x5f, 0xe2, 0x1e, - 0x3d, 0x8f, 0xaf, 0x9d, 0xc8, 0x23, 0xfc, 0x5d, 0x09, 0x8d, 0x46, 0x9b, 0xa4, 0x0c, 0xf1, 0xa2, - 0x10, 0x82, 0xa0, 0xf1, 0x9b, 0xbb, 0xd2, 0x85, 0x24, 0xe0, 0xfc, 0x2c, 0xc7, 0x79, 0x19, 0x3f, - 0xd3, 0x1e, 0x20, 0x61, 0x6b, 0x35, 0x12, 0x1c, 0x3f, 0x91, 0xd0, 0x58, 0xac, 0xbb, 0xc5, 0x70, - 0x89, 0xad, 0x89, 0xba, 0x7b, 0xb9, 0xa5, 0x6e, 0x44, 0x01, 0xd9, 0x0b, 0x1c, 0xd9, 0x2a, 0xbe, - 0xaa, 0x24, 0xff, 0xde, 0x29, 0x26, 0xef, 0x4f, 0x7d, 0xe8, 0x42, 0x62, 0x87, 0x05, 0x5f, 0x13, - 0xc6, 0x66, 0x5a, 0x1b, 0x28, 0xf7, 0xdc, 0x71, 0xd5, 0xc0, 0x8d, 0xdf, 0x49, 0xdc, 0x8f, 0xdf, - 0x4a, 0xb7, 0xdf, 0xc6, 0x6f, 0xc6, 0x5c, 0xb9, 0x63, 0x5a, 0x16, 0x31, 0xb4, 0x5e, 0x44, 0xf9, - 0xdb, 0xb1, 0x0f, 0x77, 0x6a, 0x1c, 0x1d, 0xfb, 0xd3, 0xff, 0x96, 0xd0, 0x4c, 0xa2, 0x97, 0x6c, - 0xf9, 0xaf, 0x09, 0xd7, 0xf4, 0x24, 0x7c, 0x76, 0xd3, 0x18, 0x93, 0xdf, 0xe1, 0x74, 0xbe, 0x71, - 0xfb, 0x0a, 0x5e, 0xe8, 0x92, 0x4d, 0x7c, 0xa5, 0x6b, 0x76, 0xf0, 0x8f, 0x25, 0x34, 0x1a, 0x6d, - 0x5a, 0x24, 0xef, 0x3b, 0x41, 0x63, 0x26, 0x61, 0xdf, 0x89, 0xda, 0x27, 0xf2, 0xf3, 0xdc, 0x8d, - 0x15, 0xac, 0x28, 0x89, 0x3f, 0xf7, 0x8b, 0x83, 0xfb, 0x97, 0x12, 0x1a, 0x89, 0x7e, 0x51, 0x04, - 0x4f, 0xdc, 0x37, 0x12, 0xc1, 0x4b, 0xe8, 0xee, 0xc8, 0x5f, 0xe1, 0xf0, 0xd6, 0x71, 0xf1, 0x98, - 0xf0, 0x5a, 0x22, 0xe9, 0x0e, 0x21, 0x3c, 0x69, 0x4c, 0x8a, 0x5a, 0x06, 0xa2, 0x14, 0xdc, 0xa1, - 0x0d, 0x24, 0x4a, 0xc1, 0x9d, 0x3a, 0x11, 0x09, 0xa9, 0x8d, 0x80, 0x8a, 0x56, 0x61, 0x3a, 0xda, - 0xae, 0xe3, 0x6a, 0xec, 0xee, 0xc0, 0x78, 0x3d, 0x9f, 0x70, 0x45, 0xc4, 0x57, 0x93, 0x2d, 0x8b, - 0x5b, 0x0d, 0xb9, 0x95, 0x63, 0x68, 0x00, 0x5c, 0x85, 0xc3, 0x6d, 0x0d, 0xeb, 0x06, 0x5c, 0x97, - 0xa9, 0x45, 0x63, 0x16, 0xdf, 0x47, 0xfd, 0x6c, 0xed, 0xf0, 0x45, 0xc1, 0xe1, 0xb1, 0x79, 0xf3, - 0xc9, 0xcd, 0x26, 0x4d, 0x83, 0xdd, 0xe7, 0xb8, 0xdd, 0xab, 0xb8, 0xd0, 0xb6, 0xd4, 0xb1, 0x15, - 0x6e, 0x5b, 0x56, 0x0f, 0x0d, 0x86, 0x57, 0x20, 0x3c, 0x2f, 0xb6, 0x11, 0xb9, 0x1e, 0xa5, 0xc2, - 0x78, 0x9a, 0xc3, 0xb8, 0x88, 0xa7, 0x45, 0x30, 0x82, 0x7b, 0xd5, 0x7d, 0xfc, 0x2d, 0x08, 0xfe, - 0xc6, 0xb1, 0x3d, 0x39, 0xf8, 0x5b, 0xee, 0x23, 0x1d, 0x82, 0xbf, 0xf5, 0x46, 0x21, 0x2f, 0x70, - 0x28, 0xf3, 0x38, 0xaf, 0x24, 0xfe, 0xaf, 0x8e, 0x72, 0x8f, 0xc1, 0xf9, 0x26, 0x64, 0x8b, 0xf0, - 0x0b, 0x9d, 0xb3, 0x45, 0x17, 0x88, 0x12, 0xee, 0x38, 0xb2, 0xcc, 0x11, 0xcd, 0xe0, 0x5c, 0x32, - 0xa2, 0xe2, 0xc6, 0x87, 0x0f, 0x67, 0xa5, 0x8f, 0x1e, 0xce, 0x4a, 0xff, 0x7c, 0x38, 0x2b, 0x3d, - 0x78, 0x34, 0x7b, 0xea, 0xa3, 0x47, 0xb3, 0xa7, 0xfe, 0xfa, 0x68, 0xf6, 0xd4, 0xed, 0xe5, 0xf4, - 0xae, 0xe2, 0x61, 0x50, 0x5c, 0xd9, 0xcd, 0x7b, 0x7b, 0x80, 0xb7, 0x73, 0x3e, 0xf7, 0xbf, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x80, 0xda, 0x02, 0xc7, 0x18, 0x26, 0x00, 0x00, + 0x15, 0x4e, 0x7b, 0xbc, 0x8e, 0x5d, 0x76, 0xfc, 0x53, 0xb6, 0x37, 0x93, 0xb1, 0xe3, 0xb1, 0x7b, + 0x37, 0xb1, 0x63, 0xf0, 0x74, 0x6c, 0xc8, 0xee, 0x2a, 0xcb, 0x02, 0x1e, 0xbc, 0xeb, 0x0c, 0xbb, + 0x51, 0x4c, 0xaf, 0xd9, 0x9f, 0xb0, 0x52, 0xab, 0x3d, 0x5d, 0xb1, 0x5b, 0xee, 0xe9, 0xee, 0x74, + 0xd7, 0xd8, 0x1e, 0x45, 0xb9, 0x2c, 0x37, 0xc4, 0x21, 0xb0, 0xfc, 0x88, 0x45, 0x5a, 0x0e, 0x88, + 0x03, 0x42, 0x08, 0x90, 0x10, 0x37, 0x2e, 0x48, 0xa0, 0x15, 0x42, 0x68, 0xa5, 0xbd, 0x20, 0x90, + 0x06, 0x94, 0x70, 0x0a, 0x17, 0xe4, 0x03, 0x67, 0x54, 0xd5, 0xaf, 0x67, 0xba, 0x67, 0xaa, 0xa7, + 0xc7, 0xce, 0x80, 0xf6, 0xe4, 0xee, 0xaa, 0xf7, 0xfa, 0x7d, 0xef, 0xab, 0x57, 0xef, 0x55, 0xbd, + 0x31, 0x3a, 0x6f, 0x93, 0x2a, 0xf5, 0x1c, 0x5b, 0x31, 0xc8, 0x91, 0x72, 0xb7, 0x4a, 0xbc, 0x5a, + 0xc1, 0xf5, 0x1c, 0xea, 0xe0, 0x61, 0x98, 0x28, 0x18, 0xe4, 0x28, 0xb7, 0x5c, 0x76, 0xfc, 0x8a, + 0xe3, 0x2b, 0x3b, 0xba, 0x4f, 0x02, 0x29, 0xe5, 0x60, 0x75, 0x87, 0x50, 0x7d, 0x55, 0x71, 0xf5, + 0x5d, 0xd3, 0xd6, 0xa9, 0xe9, 0xd8, 0x81, 0x62, 0x6e, 0x2e, 0x2a, 0x1b, 0x4a, 0x95, 0x1d, 0x33, + 0x9c, 0x9f, 0xda, 0x75, 0x76, 0x1d, 0xfe, 0xa8, 0xb0, 0x27, 0x18, 0x9d, 0xdd, 0x75, 0x9c, 0x5d, + 0x8b, 0x28, 0xba, 0x6b, 0x2a, 0xba, 0x6d, 0x3b, 0x94, 0x7f, 0xd2, 0x87, 0xd9, 0x3c, 0xcc, 0xf2, + 0xb7, 0x9d, 0xea, 0x1d, 0x85, 0x9a, 0x15, 0xe2, 0x53, 0xbd, 0xe2, 0x82, 0xc0, 0x7c, 0xd4, 0x0d, + 0x83, 0xb8, 0x8e, 0x6f, 0x52, 0xcd, 0x23, 0x65, 0xc7, 0x33, 0x40, 0xe2, 0x52, 0x54, 0xc2, 0x32, + 0x2b, 0x26, 0xd5, 0x1c, 0xcf, 0x20, 0x9e, 0x46, 0x3d, 0xdd, 0x2e, 0xef, 0x11, 0x10, 0x5b, 0x4e, + 0x11, 0xd3, 0xaa, 0x3e, 0xf1, 0x40, 0x36, 0x1b, 0x95, 0x75, 0x75, 0x4f, 0xaf, 0x84, 0x78, 0x9f, + 0x8e, 0xcd, 0x38, 0x8e, 0x15, 0xfa, 0xd1, 0x3a, 0xae, 0x55, 0x08, 0xd5, 0x0d, 0x9d, 0xea, 0x89, + 0x02, 0x1e, 0xf1, 0x89, 0x77, 0x40, 0x7c, 0x91, 0xa3, 0xd4, 0x2c, 0xef, 0x6b, 0x96, 0x79, 0xb7, + 0x6a, 0x1a, 0x26, 0xad, 0x85, 0xfc, 0xc6, 0x24, 0x8e, 0x82, 0x51, 0x79, 0x0a, 0xe1, 0xaf, 0xb0, + 0x75, 0xdb, 0xe2, 0x30, 0x55, 0x72, 0xb7, 0x4a, 0x7c, 0x2a, 0xdf, 0x40, 0x93, 0xb1, 0x51, 0xdf, + 0x75, 0x6c, 0x9f, 0xe0, 0x55, 0x34, 0x10, 0xb8, 0x93, 0x95, 0xe6, 0xa5, 0xa5, 0xe1, 0xb5, 0xc9, + 0x42, 0x24, 0x18, 0x0a, 0x81, 0x70, 0xb1, 0xff, 0xc3, 0x7a, 0xfe, 0x8c, 0x0a, 0x82, 0xf2, 0x0f, + 0x25, 0xf4, 0x2c, 0xff, 0xd4, 0x26, 0xa1, 0xaf, 0x31, 0xda, 0x6e, 0x31, 0xd6, 0xb6, 0x03, 0xd2, + 0xbe, 0xea, 0x13, 0x0f, 0x4c, 0xe2, 0x2c, 0x3a, 0xab, 0x1b, 0x86, 0x47, 0xfc, 0xe0, 0xe3, 0x43, + 0x6a, 0xf8, 0x8a, 0xf3, 0x68, 0x38, 0x24, 0x79, 0x9f, 0xd4, 0xb2, 0x7d, 0x7c, 0x16, 0xc1, 0xd0, + 0xab, 0xa4, 0x86, 0x5f, 0x40, 0xd9, 0xb2, 0x6e, 0x95, 0xb5, 0x43, 0x93, 0xee, 0x19, 0x9e, 0x7e, + 0xa8, 0xef, 0x58, 0x44, 0xf3, 0xf7, 0x74, 0x8f, 0xf8, 0xd9, 0xcc, 0xbc, 0xb4, 0x34, 0xa8, 0x3e, + 0xcd, 0xe6, 0xdf, 0x8c, 0x4c, 0xbf, 0xce, 0x67, 0xe5, 0x07, 0x7d, 0xe8, 0x52, 0x0a, 0x3a, 0x70, + 0x5d, 0x47, 0xd9, 0xa4, 0x55, 0x07, 0x32, 0xe4, 0x18, 0x19, 0xc2, 0xaf, 0x71, 0x6e, 0x24, 0x75, + 0xda, 0x12, 0x4d, 0xe2, 0xaf, 0x4b, 0x68, 0x52, 0xe4, 0x02, 0x77, 0xb8, 0xa8, 0x32, 0xd5, 0xbf, + 0xd6, 0xf3, 0xd3, 0xc1, 0x36, 0xf2, 0x8d, 0xfd, 0x82, 0xe9, 0x28, 0x15, 0x9d, 0xee, 0x15, 0x4a, + 0x36, 0x7d, 0x5c, 0xcf, 0x8b, 0x74, 0x8f, 0xeb, 0xf9, 0x5c, 0x4d, 0xaf, 0x58, 0xd7, 0x65, 0xc1, + 0xa4, 0xac, 0xe2, 0xc3, 0x76, 0x4a, 0x6c, 0x58, 0xaf, 0x75, 0xcb, 0xea, 0xb8, 0x5e, 0xaf, 0x20, + 0xd4, 0xdc, 0xe2, 0x40, 0xc1, 0xe5, 0x42, 0x00, 0xae, 0xc0, 0xf6, 0x78, 0x21, 0xc8, 0x1a, 0xb0, + 0xd3, 0x0b, 0x5b, 0xfa, 0x2e, 0x01, 0x5d, 0x35, 0xa2, 0x29, 0x7f, 0x2c, 0xc1, 0x12, 0x24, 0x1b, + 0xec, 0x6a, 0x09, 0x32, 0xbd, 0x58, 0x82, 0xcd, 0x98, 0x53, 0x7d, 0xdc, 0xa9, 0xc5, 0x54, 0xa7, + 0x02, 0x7c, 0x31, 0xaf, 0xbe, 0x27, 0xa1, 0xf9, 0xc4, 0xc0, 0x0a, 0x29, 0x3c, 0x8f, 0xce, 0xba, + 0xba, 0xe9, 0x69, 0xa6, 0x01, 0x21, 0x3f, 0xc0, 0x5e, 0x4b, 0x06, 0xbe, 0x88, 0x10, 0xdf, 0xc2, + 0xa6, 0x6d, 0x90, 0x23, 0x0e, 0x23, 0xa3, 0x0e, 0xb1, 0x91, 0x12, 0x1b, 0xc0, 0x17, 0xd0, 0x20, + 0x75, 0xf6, 0x89, 0xad, 0x99, 0x36, 0x8f, 0xef, 0x21, 0xf5, 0x2c, 0x7f, 0x2f, 0xd9, 0xad, 0x7b, + 0xa5, 0xbf, 0x75, 0xaf, 0xc8, 0x35, 0xb4, 0xd0, 0x01, 0x17, 0x30, 0xbd, 0x8d, 0x26, 0x05, 0x4c, + 0xc3, 0x22, 0xcf, 0x75, 0x26, 0x19, 0x08, 0x9e, 0x68, 0x23, 0x58, 0xfe, 0x20, 0xe4, 0x44, 0xb4, + 0xd2, 0xa9, 0x9c, 0x44, 0x9d, 0xee, 0x8b, 0x3b, 0x1d, 0x0f, 0xc5, 0xcc, 0xa9, 0x43, 0xf1, 0x77, + 0x12, 0x90, 0x23, 0x06, 0x98, 0x46, 0x4e, 0xe6, 0x09, 0xc8, 0xe9, 0x5d, 0xe4, 0xfd, 0x4c, 0x42, + 0x33, 0xa1, 0x13, 0x2c, 0xa6, 0x37, 0x82, 0xa2, 0xe7, 0xa7, 0xe7, 0xd9, 0x57, 0x04, 0x10, 0x4e, + 0x41, 0x23, 0x5e, 0x46, 0x13, 0xa6, 0x5d, 0xb6, 0xaa, 0x06, 0xd1, 0x78, 0xa5, 0x62, 0x65, 0x0c, + 0xf2, 0xf0, 0x18, 0x4c, 0x6c, 0x39, 0x8e, 0xb5, 0xa1, 0x53, 0x5d, 0xfe, 0x89, 0x84, 0x66, 0xc5, + 0x68, 0x81, 0xed, 0xcf, 0xa1, 0x41, 0x28, 0xdb, 0x3e, 0x50, 0x9c, 0x8b, 0x51, 0x0c, 0x0a, 0x2a, + 0x2f, 0xe9, 0x40, 0x6f, 0x43, 0xa3, 0x77, 0xac, 0x7e, 0x4b, 0x42, 0x2b, 0x1d, 0xb3, 0x54, 0xb1, + 0xb6, 0x1e, 0xd0, 0xf8, 0x7f, 0xe3, 0x59, 0xfe, 0x83, 0x84, 0x0a, 0xdd, 0x62, 0x02, 0x36, 0x5f, + 0x45, 0x23, 0x91, 0xd8, 0xf5, 0x4f, 0x9c, 0x36, 0x87, 0x9b, 0x81, 0xdb, 0x43, 0x72, 0xdf, 0x8f, + 0x04, 0xc1, 0xb6, 0x59, 0xde, 0x7f, 0x2d, 0x3c, 0xb9, 0x7c, 0x12, 0x92, 0xc2, 0xaf, 0x24, 0x74, + 0x31, 0x01, 0x1c, 0x90, 0xba, 0x89, 0x46, 0xe3, 0x07, 0x2e, 0x61, 0xa0, 0xc6, 0x74, 0x81, 0xce, + 0x73, 0x34, 0x3a, 0xd8, 0x3b, 0x42, 0x3f, 0x90, 0xd0, 0x52, 0x98, 0xe5, 0x4b, 0xb6, 0x5e, 0xa6, + 0xe6, 0x01, 0xe9, 0x69, 0xc6, 0x8d, 0x17, 0xa8, 0x4c, 0x6b, 0x81, 0x4a, 0xad, 0x42, 0xdf, 0x96, + 0xd0, 0x95, 0x2e, 0x00, 0x02, 0xc1, 0x04, 0xcd, 0x9a, 0x20, 0xa4, 0x3d, 0x69, 0x5d, 0xba, 0x60, + 0x26, 0x99, 0x93, 0x3d, 0x20, 0x6d, 0xdd, 0xb2, 0x52, 0x49, 0xeb, 0xd5, 0xe9, 0xe7, 0x6f, 0x21, + 0x11, 0x9d, 0x8d, 0x76, 0x4d, 0x44, 0xa6, 0x07, 0x44, 0xf4, 0x2e, 0x0e, 0x7f, 0x10, 0xa9, 0x45, + 0x2c, 0xe5, 0xab, 0x70, 0x67, 0xf9, 0x24, 0xec, 0xeb, 0x9f, 0x47, 0x92, 0x4e, 0x1c, 0x1b, 0x90, + 0xbd, 0x81, 0xce, 0xc5, 0x2e, 0x5a, 0xc0, 0xee, 0x85, 0xf8, 0x9d, 0x27, 0xa2, 0x09, 0xc4, 0x8e, + 0xb8, 0x91, 0xb1, 0xde, 0x71, 0xf9, 0x6e, 0xc8, 0xe5, 0x26, 0xa1, 0xbd, 0xe2, 0x32, 0x65, 0x1b, + 0x8f, 0xa3, 0xcc, 0x1d, 0x42, 0xf8, 0xf6, 0xed, 0x57, 0xd9, 0xa3, 0x6c, 0x00, 0x67, 0x6d, 0x18, + 0x92, 0x39, 0x93, 0x4e, 0xcc, 0x99, 0xfc, 0xd3, 0x0c, 0x1c, 0x14, 0x5f, 0xf6, 0xa9, 0x59, 0xd1, + 0x29, 0xb9, 0x59, 0xb5, 0xa8, 0x79, 0xc3, 0x71, 0x5f, 0x3f, 0xd4, 0xdd, 0x48, 0x7d, 0x2d, 0x7b, + 0x44, 0xa7, 0x8e, 0x17, 0xd6, 0x57, 0x78, 0xc5, 0x39, 0x34, 0xe8, 0x91, 0x32, 0x31, 0x0f, 0x88, + 0x07, 0x0e, 0x37, 0xde, 0xf1, 0x1a, 0x1a, 0xf0, 0x9c, 0x2a, 0xe5, 0x17, 0xc3, 0xf6, 0x1c, 0x1d, + 0xda, 0x51, 0x99, 0x88, 0x0a, 0x92, 0xf8, 0x6b, 0x68, 0x48, 0xaf, 0x38, 0x55, 0x9b, 0x32, 0x06, + 0x79, 0x2e, 0x2b, 0x7e, 0x9e, 0xdd, 0x71, 0x3b, 0x5d, 0xc6, 0x9a, 0x1a, 0xc7, 0xf5, 0xfc, 0x78, + 0x70, 0x05, 0x6b, 0x0c, 0xc9, 0xea, 0x60, 0xf0, 0x5c, 0xb2, 0xf1, 0x77, 0x25, 0x34, 0x4e, 0x8e, + 0x4c, 0x0a, 0xfb, 0xd9, 0xf5, 0xcc, 0x32, 0xc9, 0x3e, 0xc5, 0x8d, 0xec, 0x83, 0x91, 0xcf, 0xee, + 0x9a, 0x74, 0xaf, 0xba, 0x53, 0x28, 0x3b, 0x15, 0x05, 0xd0, 0xae, 0x38, 0xde, 0x6e, 0xf8, 0xac, + 0x1c, 0x5c, 0x53, 0xaa, 0xd4, 0xb4, 0xfc, 0xc0, 0xfe, 0x96, 0x47, 0xca, 0x1b, 0xa4, 0xfc, 0xb8, + 0x9e, 0x6f, 0xfb, 0xee, 0x71, 0x3d, 0x7f, 0x3e, 0x80, 0xd2, 0x3a, 0x23, 0xab, 0xa3, 0x6c, 0x88, + 0xa7, 0x82, 0x2d, 0x36, 0x80, 0x2f, 0xa3, 0x31, 0x97, 0x85, 0xc6, 0x0e, 0xf1, 0xa9, 0xc6, 0x89, + 0xc8, 0x0e, 0xf0, 0x23, 0xdc, 0x39, 0x36, 0x5c, 0x64, 0xbb, 0x89, 0x0d, 0xb2, 0x8b, 0xce, 0x42, + 0x87, 0xb5, 0x82, 0xb8, 0xb8, 0x8b, 0x06, 0xcb, 0x8e, 0x69, 0x6b, 0x4e, 0x95, 0x36, 0x42, 0x22, + 0xba, 0x07, 0xc2, 0xe8, 0xff, 0x92, 0x63, 0xda, 0xc5, 0x17, 0xc1, 0xef, 0xc5, 0x88, 0xdf, 0xd0, + 0x3b, 0x0a, 0xfe, 0xac, 0xf8, 0xc6, 0xbe, 0x42, 0x6b, 0x2e, 0xf1, 0xb9, 0xc2, 0xe3, 0x7a, 0xbe, + 0xf1, 0x75, 0xf5, 0x2c, 0x7b, 0xba, 0x55, 0xa5, 0xf2, 0xfb, 0xfd, 0xe8, 0x99, 0x18, 0xb0, 0x2d, + 0x4b, 0x2f, 0x47, 0x92, 0xdd, 0x93, 0xc5, 0x51, 0x87, 0x2b, 0xd8, 0x0c, 0x1a, 0x0a, 0xa6, 0x98, + 0xb3, 0x41, 0xe9, 0x0b, 0x64, 0x6f, 0x55, 0x29, 0x2e, 0xa0, 0xa9, 0xe6, 0x8e, 0xd3, 0x4c, 0x5b, + 0xa3, 0x0e, 0x97, 0x7b, 0x8a, 0xef, 0xbd, 0xf1, 0xc6, 0xde, 0x2b, 0xd9, 0xdb, 0x0e, 0x93, 0x8f, + 0xc5, 0xde, 0x40, 0x8f, 0x63, 0xef, 0x3a, 0x42, 0x50, 0x3f, 0x6a, 0x2e, 0xc9, 0x9e, 0x9d, 0x97, + 0x96, 0x46, 0xd7, 0x66, 0x92, 0x8a, 0x47, 0xcd, 0x25, 0xea, 0x90, 0x13, 0x3e, 0xe2, 0x9b, 0x68, + 0x8c, 0x1c, 0xb9, 0xa6, 0xc7, 0x93, 0x93, 0x46, 0xcd, 0x0a, 0xc9, 0x0e, 0xf2, 0x85, 0xcd, 0x15, + 0x82, 0x9e, 0x5c, 0x21, 0xec, 0xc9, 0x15, 0xb6, 0xc3, 0x9e, 0x5c, 0x71, 0x90, 0x6d, 0xf6, 0x07, + 0x7f, 0xcf, 0x4b, 0x2c, 0xdc, 0x42, 0x65, 0x36, 0x8d, 0x2b, 0xe8, 0x5c, 0x45, 0x3f, 0x5a, 0x0f, + 0x50, 0x32, 0x42, 0x86, 0xb8, 0xaf, 0x37, 0xd2, 0x9a, 0x1e, 0xa3, 0x15, 0xfd, 0x48, 0xd3, 0x1b, + 0x6a, 0xc7, 0xf5, 0xfc, 0x74, 0xe0, 0x70, 0x7c, 0x5c, 0x56, 0x47, 0x1a, 0x9f, 0x67, 0xc1, 0xf1, + 0xef, 0x0c, 0x74, 0x39, 0x12, 0x83, 0x03, 0x02, 0xf7, 0xfb, 0x12, 0x3a, 0x47, 0x1d, 0xaa, 0x5b, + 0x6c, 0xad, 0x58, 0x68, 0xa5, 0x87, 0xef, 0x5b, 0x27, 0x0f, 0xdf, 0xb8, 0x89, 0xe3, 0x7a, 0x7e, + 0x2a, 0x70, 0x22, 0x36, 0x2c, 0xab, 0xc3, 0xfc, 0xbd, 0x64, 0x33, 0x2d, 0xfc, 0x9e, 0x84, 0x46, + 0xfc, 0x43, 0xdd, 0x6d, 0x00, 0xeb, 0x4b, 0x03, 0xf6, 0xc6, 0xc9, 0x81, 0xc5, 0x2c, 0x1c, 0xd7, + 0xf3, 0x93, 0x01, 0xae, 0xe8, 0xa8, 0xac, 0x22, 0xf6, 0x0a, 0xa8, 0x18, 0x5f, 0x7c, 0xd6, 0xa9, + 0xd2, 0x00, 0x56, 0xe6, 0x7f, 0xc1, 0x57, 0xcc, 0x44, 0x93, 0xaf, 0xd8, 0xb0, 0xac, 0x0e, 0xb3, + 0xf7, 0x5b, 0x55, 0xca, 0xb4, 0xe4, 0x77, 0xd0, 0x78, 0xd0, 0xd2, 0xe4, 0x95, 0xe6, 0xc9, 0x1a, + 0x30, 0x50, 0x18, 0x33, 0xcd, 0xc2, 0xa8, 0xa0, 0xa9, 0xc6, 0xd7, 0x8b, 0xb5, 0xd2, 0x46, 0xd4, + 0x02, 0x2b, 0x88, 0x60, 0xa1, 0x5f, 0x1d, 0x60, 0xaf, 0x25, 0x43, 0xfe, 0x22, 0x9a, 0x88, 0xc0, + 0x81, 0x68, 0xfb, 0x14, 0xea, 0x67, 0xd3, 0x10, 0x63, 0x13, 0x6d, 0x55, 0x13, 0xaa, 0x25, 0x17, + 0x92, 0x57, 0xe2, 0xe7, 0x81, 0x9b, 0xd0, 0x30, 0x0e, 0x2d, 0x8f, 0xa2, 0xbe, 0x86, 0xd1, 0x3e, + 0xd3, 0x68, 0x2d, 0xdd, 0x4d, 0xf1, 0x66, 0xe9, 0xde, 0x8a, 0x36, 0x9e, 0x13, 0x4b, 0x77, 0xa8, + 0x09, 0x8d, 0xde, 0x91, 0xe8, 0x98, 0x4c, 0xe2, 0x07, 0xbe, 0x56, 0x50, 0xbd, 0x3a, 0x36, 0xb7, + 0x1e, 0xde, 0x44, 0xde, 0xb8, 0x2d, 0xde, 0x64, 0xba, 0xf2, 0xc6, 0x8d, 0x8c, 0xf5, 0xec, 0xf0, + 0xb6, 0xf6, 0x9f, 0x2c, 0x7a, 0x8a, 0xe3, 0xc5, 0x7b, 0x68, 0x20, 0xe8, 0x93, 0xe3, 0x7c, 0x0c, + 0x4b, 0x7b, 0x13, 0x3e, 0x37, 0x9f, 0x2c, 0x10, 0x98, 0x90, 0x67, 0xde, 0xfd, 0xf8, 0x9f, 0xef, + 0xf5, 0x4d, 0xe3, 0x49, 0xa5, 0xfd, 0x17, 0x07, 0xfc, 0x7b, 0x09, 0x4d, 0x0b, 0xef, 0xf2, 0x78, + 0xb5, 0xfd, 0xc3, 0x29, 0xdd, 0xf9, 0xdc, 0xda, 0x49, 0x54, 0x00, 0xdd, 0xcb, 0x1c, 0xdd, 0x17, + 0xf0, 0x4b, 0x4a, 0x37, 0xbf, 0x9d, 0x28, 0xf7, 0xa0, 0x3f, 0x72, 0x5f, 0xb9, 0x17, 0xb9, 0x3c, + 0xde, 0xc7, 0xbf, 0x94, 0x50, 0x56, 0x68, 0x68, 0xdd, 0xb2, 0x44, 0xae, 0xa4, 0x34, 0xae, 0x45, + 0xae, 0xa4, 0xb5, 0x9e, 0xe5, 0x15, 0xee, 0xca, 0x22, 0xbe, 0xd4, 0x95, 0x2b, 0xf8, 0xcf, 0x12, + 0x5a, 0x48, 0x82, 0xdc, 0x68, 0xca, 0xe0, 0xeb, 0xdd, 0x03, 0x69, 0xed, 0x2e, 0xe5, 0x5e, 0x3c, + 0x95, 0x2e, 0x78, 0x73, 0x95, 0x7b, 0xb3, 0x8c, 0x97, 0x62, 0xde, 0xf0, 0x45, 0x88, 0x76, 0x87, + 0x9a, 0x2b, 0x82, 0xff, 0x24, 0xa1, 0x89, 0xf6, 0x7b, 0xe2, 0x4a, 0x77, 0x41, 0x11, 0x62, 0x2e, + 0x74, 0x2b, 0x0e, 0x30, 0xdf, 0xe2, 0x30, 0x55, 0xbc, 0x95, 0x46, 0xba, 0x72, 0x0f, 0xb2, 0x38, + 0x0b, 0x1d, 0x38, 0x95, 0xb1, 0xc7, 0x46, 0x06, 0x6f, 0x0d, 0xa9, 0x5f, 0x4b, 0x68, 0xaa, 0xcd, + 0x2e, 0x0b, 0xa7, 0x95, 0xee, 0x68, 0xed, 0xe0, 0x51, 0xa7, 0xd6, 0xb1, 0xfc, 0x12, 0xf7, 0xe8, + 0x79, 0x7c, 0xed, 0x54, 0x1e, 0xe1, 0xef, 0x48, 0x68, 0x2c, 0xda, 0x24, 0x65, 0x88, 0x97, 0x84, + 0x10, 0x04, 0x8d, 0xdf, 0xdc, 0x95, 0x2e, 0x24, 0x01, 0xe7, 0xa7, 0x39, 0xce, 0xcb, 0xf8, 0xd9, + 0xf6, 0x00, 0x09, 0x5b, 0xab, 0x91, 0xe0, 0xf8, 0xb1, 0x84, 0xc6, 0x63, 0xdd, 0x2d, 0x86, 0x4b, + 0x6c, 0x4d, 0xd4, 0xdd, 0xcb, 0x2d, 0x77, 0x23, 0x0a, 0xc8, 0x5e, 0xe0, 0xc8, 0xd6, 0xf0, 0x55, + 0x25, 0xf9, 0xf7, 0x4e, 0x31, 0x79, 0x7f, 0xec, 0x43, 0x17, 0x12, 0x3b, 0x2c, 0xf8, 0x9a, 0x30, + 0x36, 0xd3, 0xda, 0x40, 0xb9, 0xe7, 0x4e, 0xaa, 0x06, 0x6e, 0xfc, 0x56, 0xe2, 0x7e, 0xfc, 0x46, + 0xba, 0xfd, 0x36, 0x7e, 0x33, 0xe6, 0xca, 0x1d, 0xd3, 0xb2, 0x88, 0xa1, 0xf5, 0x22, 0xca, 0xdf, + 0x8e, 0x7d, 0xb8, 0x53, 0xe3, 0xe8, 0xc4, 0x9f, 0xfe, 0x97, 0x84, 0x66, 0x13, 0xbd, 0x64, 0xcb, + 0x7f, 0x4d, 0xb8, 0xa6, 0xa7, 0xe1, 0xb3, 0x9b, 0xc6, 0x98, 0xfc, 0x0e, 0xa7, 0xf3, 0x8d, 0xdb, + 0x57, 0xf0, 0x62, 0x97, 0x6c, 0xe2, 0x2b, 0x5d, 0xb3, 0x83, 0x7f, 0x24, 0xa1, 0xb1, 0x68, 0xd3, + 0x22, 0x79, 0xdf, 0x09, 0x1a, 0x33, 0x09, 0xfb, 0x4e, 0xd4, 0x3e, 0x91, 0x9f, 0xe7, 0x6e, 0xac, + 0x62, 0x45, 0x49, 0xfc, 0xb9, 0x5f, 0x1c, 0xdc, 0xbf, 0x90, 0xd0, 0x48, 0xf4, 0x8b, 0x22, 0x78, + 0xe2, 0xbe, 0x91, 0x08, 0x5e, 0x42, 0x77, 0x47, 0xfe, 0x32, 0x87, 0xb7, 0x81, 0x8b, 0x27, 0x84, + 0xd7, 0x12, 0x49, 0x77, 0x08, 0xe1, 0x49, 0x63, 0x4a, 0xd4, 0x32, 0x10, 0xa5, 0xe0, 0x0e, 0x6d, + 0x20, 0x51, 0x0a, 0xee, 0xd4, 0x89, 0x48, 0x48, 0x6d, 0x04, 0x54, 0xb4, 0x0a, 0xd3, 0xd1, 0xf6, + 0x1c, 0x57, 0x63, 0x77, 0x07, 0xc6, 0xeb, 0xf9, 0x84, 0x2b, 0x22, 0xbe, 0x9a, 0x6c, 0x59, 0xdc, + 0x6a, 0xc8, 0xad, 0x9e, 0x40, 0x03, 0xe0, 0x2a, 0x1c, 0x6e, 0x6b, 0x58, 0x37, 0xe0, 0xba, 0x4c, + 0x2d, 0x1a, 0xb3, 0xf8, 0x3e, 0xea, 0x67, 0x6b, 0x87, 0x2f, 0x0a, 0x0e, 0x8f, 0xcd, 0x9b, 0x4f, + 0x6e, 0x2e, 0x69, 0x1a, 0xec, 0x3e, 0xc7, 0xed, 0x5e, 0xc5, 0x85, 0xb6, 0xa5, 0x8e, 0xad, 0x70, + 0xdb, 0xb2, 0x7a, 0x68, 0x30, 0xbc, 0x02, 0xe1, 0x05, 0xb1, 0x8d, 0xc8, 0xf5, 0x28, 0x15, 0xc6, + 0x33, 0x1c, 0xc6, 0x45, 0x3c, 0x23, 0x82, 0x11, 0xdc, 0xab, 0xee, 0xe3, 0x6f, 0x42, 0xf0, 0x37, + 0x8e, 0xed, 0xc9, 0xc1, 0xdf, 0x72, 0x1f, 0xe9, 0x10, 0xfc, 0xad, 0x37, 0x0a, 0x79, 0x91, 0x43, + 0x59, 0xc0, 0x79, 0x25, 0xf1, 0x7f, 0x75, 0x94, 0x7b, 0x0c, 0xce, 0x37, 0x20, 0x5b, 0x84, 0x5f, + 0xe8, 0x9c, 0x2d, 0xba, 0x40, 0x94, 0x70, 0xc7, 0x91, 0x65, 0x8e, 0x68, 0x16, 0xe7, 0x92, 0x11, + 0x15, 0x37, 0x3f, 0x7c, 0x38, 0x27, 0x7d, 0xf4, 0x70, 0x4e, 0xfa, 0xc7, 0xc3, 0x39, 0xe9, 0xc1, + 0xa3, 0xb9, 0x33, 0x1f, 0x3d, 0x9a, 0x3b, 0xf3, 0x97, 0x47, 0x73, 0x67, 0x6e, 0xaf, 0xa4, 0x77, + 0x15, 0x8f, 0x82, 0xe2, 0xca, 0x6e, 0xde, 0x3b, 0x03, 0xbc, 0x9d, 0xf3, 0x99, 0xff, 0x06, 0x00, + 0x00, 0xff, 0xff, 0xb9, 0xd3, 0xc3, 0x62, 0x18, 0x26, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/dex/types/tick_liquidity.go b/x/dex/types/tick_liquidity.go index dcc1b5419..26ca3ab96 100644 --- a/x/dex/types/tick_liquidity.go +++ b/x/dex/types/tick_liquidity.go @@ -1,7 +1,7 @@ package types import ( - math_utils "github.com/neutron-org/neutron/v4/utils/math" + math_utils "github.com/neutron-org/neutron/v5/utils/math" ) // NOTE: These methods should be avoided if possible. diff --git a/x/dex/types/tick_liquidity.pb.go b/x/dex/types/tick_liquidity.pb.go index c35f64b63..4459f7771 100644 --- a/x/dex/types/tick_liquidity.pb.go +++ b/x/dex/types/tick_liquidity.pb.go @@ -131,8 +131,8 @@ var fileDescriptor_fda22cbad7301397 = []byte{ 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xdd, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, 0xa8, 0x2d, 0xba, 0xf9, 0x45, 0xe9, 0x30, 0xb6, 0x7e, 0x99, - 0x89, 0x7e, 0x05, 0x24, 0xd4, 0x2b, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x41, 0x60, 0x0c, 0x08, - 0x00, 0x00, 0xff, 0xff, 0x09, 0x66, 0xc9, 0x03, 0x91, 0x01, 0x00, 0x00, + 0xa9, 0x7e, 0x05, 0x24, 0xd4, 0x2b, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x41, 0x60, 0x0c, 0x08, + 0x00, 0x00, 0xff, 0xff, 0x97, 0xe5, 0x13, 0x9c, 0x91, 0x01, 0x00, 0x00, } func (m *TickLiquidity) Marshal() (dAtA []byte, err error) { diff --git a/x/dex/types/tick_liquidity_key.go b/x/dex/types/tick_liquidity_key.go index 9ea116cfe..fe33d7899 100644 --- a/x/dex/types/tick_liquidity_key.go +++ b/x/dex/types/tick_liquidity_key.go @@ -1,6 +1,6 @@ package types -import math_utils "github.com/neutron-org/neutron/v4/utils/math" +import math_utils "github.com/neutron-org/neutron/v5/utils/math" type TickLiquidityKey interface { KeyMarshal() []byte diff --git a/x/dex/types/tick_liquidity_test.go b/x/dex/types/tick_liquidity_test.go index 000251832..6591eea61 100644 --- a/x/dex/types/tick_liquidity_test.go +++ b/x/dex/types/tick_liquidity_test.go @@ -6,7 +6,7 @@ import ( "cosmossdk.io/math" "github.com/stretchr/testify/assert" - "github.com/neutron-org/neutron/v4/x/dex/types" + "github.com/neutron-org/neutron/v5/x/dex/types" ) func TestHasTokenEmptyReserves(t *testing.T) { diff --git a/x/dex/types/trade_pair_id.go b/x/dex/types/trade_pair_id.go index 54b8469b6..7262b9568 100644 --- a/x/dex/types/trade_pair_id.go +++ b/x/dex/types/trade_pair_id.go @@ -3,7 +3,7 @@ package types import ( sdkerrors "cosmossdk.io/errors" - math_utils "github.com/neutron-org/neutron/v4/utils/math" + math_utils "github.com/neutron-org/neutron/v5/utils/math" ) func NewTradePairID(takerDenom, makerDenom string) (*TradePairID, error) { diff --git a/x/dex/types/trade_pair_id.pb.go b/x/dex/types/trade_pair_id.pb.go index d2d64ef4e..e881507f6 100644 --- a/x/dex/types/trade_pair_id.pb.go +++ b/x/dex/types/trade_pair_id.pb.go @@ -91,9 +91,9 @@ var fileDescriptor_e0082302b8bd9607 = []byte{ 0x14, 0x30, 0x43, 0x14, 0x94, 0xc0, 0x15, 0x38, 0xb9, 0x9f, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x6e, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x3e, - 0xd4, 0x09, 0xba, 0xf9, 0x45, 0xe9, 0x30, 0xb6, 0x7e, 0x99, 0x89, 0x7e, 0x05, 0xc4, 0xd1, 0x95, - 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0x60, 0xd7, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x31, 0x99, - 0x56, 0x83, 0xd0, 0x00, 0x00, 0x00, + 0xd4, 0x09, 0xba, 0xf9, 0x45, 0xe9, 0x30, 0xb6, 0x7e, 0x99, 0xa9, 0x7e, 0x05, 0xc4, 0xd1, 0x95, + 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0x60, 0xd7, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xaf, 0x1a, + 0x8c, 0x1c, 0xd0, 0x00, 0x00, 0x00, } func (m *TradePairID) Marshal() (dAtA []byte, err error) { diff --git a/x/dex/types/tx.pb.go b/x/dex/types/tx.pb.go index 433e795c2..75e167ffc 100644 --- a/x/dex/types/tx.pb.go +++ b/x/dex/types/tx.pb.go @@ -16,7 +16,7 @@ import ( grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - github_com_neutron_org_neutron_v4_utils_math "github.com/neutron-org/neutron/v4/utils/math" + github_com_neutron_org_neutron_v5_utils_math "github.com/neutron-org/neutron/v5/utils/math" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" @@ -450,7 +450,7 @@ type MsgPlaceLimitOrder struct { // expirationTime is only valid iff orderType == GOOD_TIL_TIME. ExpirationTime *time.Time `protobuf:"bytes,9,opt,name=expiration_time,json=expirationTime,proto3,stdtime" json:"expiration_time,omitempty"` MaxAmountOut *cosmossdk_io_math.Int `protobuf:"bytes,10,opt,name=max_amount_out,json=maxAmountOut,proto3,customtype=cosmossdk.io/math.Int" json:"max_amount_out" yaml:"max_amount_out"` - LimitSellPrice *github_com_neutron_org_neutron_v4_utils_math.PrecDec `protobuf:"bytes,11,opt,name=limit_sell_price,json=limitSellPrice,proto3,customtype=github.com/neutron-org/neutron/v4/utils/math.PrecDec" json:"limit_sell_price" yaml:"limit_sell_price"` + LimitSellPrice *github_com_neutron_org_neutron_v5_utils_math.PrecDec `protobuf:"bytes,11,opt,name=limit_sell_price,json=limitSellPrice,proto3,customtype=github.com/neutron-org/neutron/v5/utils/math.PrecDec" json:"limit_sell_price" yaml:"limit_sell_price"` } func (m *MsgPlaceLimitOrder) Reset() { *m = MsgPlaceLimitOrder{} } @@ -812,7 +812,7 @@ type MsgMultiHopSwap struct { Receiver string `protobuf:"bytes,2,opt,name=receiver,proto3" json:"receiver,omitempty"` Routes []*MultiHopRoute `protobuf:"bytes,3,rep,name=routes,proto3" json:"routes,omitempty"` AmountIn cosmossdk_io_math.Int `protobuf:"bytes,4,opt,name=amount_in,json=amountIn,proto3,customtype=cosmossdk.io/math.Int" json:"amount_in" yaml:"amount_in"` - ExitLimitPrice github_com_neutron_org_neutron_v4_utils_math.PrecDec `protobuf:"bytes,5,opt,name=exit_limit_price,json=exitLimitPrice,proto3,customtype=github.com/neutron-org/neutron/v4/utils/math.PrecDec" json:"exit_limit_price" yaml:"exit_limit_price"` + ExitLimitPrice github_com_neutron_org_neutron_v5_utils_math.PrecDec `protobuf:"bytes,5,opt,name=exit_limit_price,json=exitLimitPrice,proto3,customtype=github.com/neutron-org/neutron/v5/utils/math.PrecDec" json:"exit_limit_price" yaml:"exit_limit_price"` // If pickBestRoute == true then all routes are run and the route with the // best price is chosen otherwise, the first succesful route is used. PickBestRoute bool `protobuf:"varint,6,opt,name=pick_best_route,json=pickBestRoute,proto3" json:"pick_best_route,omitempty"` @@ -1037,7 +1037,7 @@ var fileDescriptor_a489f6e187d5e074 = []byte{ // 1687 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x6f, 0x23, 0x49, 0x15, 0x4f, 0xdb, 0x89, 0x3f, 0x2a, 0x89, 0xe3, 0x74, 0x32, 0xeb, 0x8e, 0x07, 0xdc, 0x56, 0xcf, - 0xb2, 0x63, 0x22, 0x62, 0x4f, 0xc2, 0xb2, 0x07, 0x23, 0x21, 0xd9, 0xf9, 0xd8, 0x35, 0x6b, 0xaf, + 0xb2, 0x63, 0x22, 0x62, 0x4f, 0x02, 0xbb, 0x07, 0x23, 0x21, 0xd9, 0xf9, 0xd8, 0x35, 0x6b, 0xaf, 0xa3, 0x8e, 0x57, 0x48, 0xbb, 0x12, 0x4d, 0xdb, 0x5d, 0x71, 0x5a, 0x69, 0x77, 0x99, 0xae, 0xb2, 0xd7, 0xe1, 0xc2, 0x8a, 0xe3, 0x8a, 0xc3, 0x5c, 0x38, 0xf1, 0x0f, 0xc0, 0x6d, 0x0e, 0x9c, 0x39, 0xe7, 0xc6, 0x08, 0x09, 0x09, 0x81, 0x30, 0x68, 0xe6, 0x30, 0xd2, 0x1c, 0x73, 0xe6, 0x80, 0xaa, @@ -1064,36 +1064,36 @@ var fileDescriptor_a489f6e187d5e074 = []byte{ 0x77, 0xde, 0x79, 0x37, 0x70, 0x5e, 0x17, 0x7f, 0x00, 0x36, 0x88, 0xd9, 0x3b, 0xd7, 0x4c, 0xdb, 0x80, 0x13, 0x88, 0x35, 0x5d, 0x23, 0x48, 0xeb, 0x4a, 0xc9, 0x62, 0xbc, 0x14, 0x57, 0xd7, 0xa8, 0xaa, 0xe1, 0x6a, 0x6a, 0x1d, 0x54, 0x17, 0x45, 0xb0, 0x78, 0x0a, 0x21, 0x96, 0x52, 0xc5, 0x78, - 0x69, 0x51, 0x65, 0x63, 0xf1, 0x47, 0x20, 0x89, 0xdc, 0x6c, 0x4a, 0xe9, 0x62, 0xbc, 0xb4, 0xbc, - 0xf7, 0xb0, 0x1c, 0xaa, 0xd5, 0xf2, 0x6c, 0xc2, 0x55, 0xcf, 0xb6, 0x2a, 0xff, 0xe6, 0xd5, 0xb3, - 0x6d, 0x2f, 0x1d, 0xdf, 0xbc, 0x7a, 0xb6, 0x9d, 0xa1, 0xe5, 0x12, 0xe4, 0x4e, 0x39, 0x02, 0xab, - 0x47, 0xba, 0x69, 0x41, 0xc3, 0x4b, 0xa6, 0x0c, 0x96, 0x0d, 0x77, 0xa8, 0x99, 0xc6, 0x84, 0x25, - 0x74, 0x51, 0x05, 0x5c, 0xd4, 0x30, 0x26, 0xe2, 0x26, 0x58, 0x82, 0x8e, 0x83, 0xbc, 0x84, 0xba, - 0x13, 0xe5, 0x9f, 0x31, 0x20, 0x06, 0x6e, 0x55, 0x88, 0x87, 0xc8, 0xc6, 0x50, 0xfc, 0x35, 0x10, - 0x1d, 0x88, 0xa1, 0x33, 0x86, 0x4f, 0x34, 0xee, 0x03, 0x1a, 0x92, 0xc0, 0xe0, 0x3d, 0xbe, 0x0b, - 0xde, 0x6b, 0x96, 0x5e, 0x4d, 0xe5, 0x2d, 0x17, 0xe7, 0x79, 0x9d, 0xa2, 0xae, 0x7b, 0xc2, 0x03, - 0x4f, 0x16, 0x0a, 0x60, 0x37, 0x14, 0x40, 0xec, 0x7e, 0x01, 0xec, 0xde, 0x12, 0xc0, 0xee, 0x75, - 0x01, 0xec, 0x06, 0x01, 0xec, 0x83, 0xb5, 0x53, 0x06, 0xb0, 0x67, 0x87, 0xa5, 0x38, 0x4b, 0x60, - 0x7e, 0x26, 0x81, 0x33, 0x49, 0x50, 0x33, 0xa7, 0xe1, 0x29, 0x56, 0xfe, 0x16, 0x03, 0xab, 0x2d, - 0xdc, 0xff, 0x99, 0x49, 0xce, 0x0c, 0x47, 0xff, 0x4a, 0xb7, 0xbe, 0xb5, 0x9e, 0x1b, 0x83, 0x2c, - 0x3e, 0xd3, 0x1d, 0x88, 0x69, 0xc5, 0x3a, 0x70, 0x80, 0xc6, 0x90, 0xb7, 0x5e, 0xf3, 0x2e, 0xf4, - 0xe6, 0x16, 0x5e, 0x4d, 0xe5, 0x9c, 0x8b, 0x5d, 0x54, 0xa3, 0xa8, 0x19, 0x57, 0xd4, 0x41, 0x2a, - 0x13, 0xdc, 0xd4, 0x31, 0x89, 0xdb, 0x3b, 0x26, 0x19, 0x74, 0x4c, 0x55, 0x89, 0x96, 0xfe, 0x3a, - 0x2f, 0xfd, 0x00, 0x45, 0x25, 0x07, 0x1e, 0xcc, 0x08, 0xbc, 0xba, 0x55, 0xfe, 0xb2, 0xc4, 0xca, - 0xf9, 0xd8, 0xd2, 0x7b, 0xb0, 0x69, 0x0e, 0x4c, 0xd2, 0x76, 0x0c, 0xe8, 0xbc, 0x25, 0xea, 0x5b, - 0x20, 0xe5, 0x82, 0x6b, 0xda, 0x1c, 0x76, 0x17, 0xec, 0x86, 0x2d, 0x3e, 0x04, 0x69, 0x57, 0x85, - 0x46, 0x84, 0x23, 0xef, 0xda, 0xb6, 0x47, 0x44, 0xdc, 0x03, 0x9b, 0x01, 0x06, 0x9a, 0x69, 0x53, - 0x08, 0xa8, 0xdd, 0x52, 0x51, 0x28, 0xc5, 0xeb, 0x31, 0x49, 0x50, 0xb3, 0x3e, 0x10, 0x0d, 0xbb, - 0x83, 0xe8, 0x1a, 0x9f, 0xc6, 0xe8, 0x66, 0x49, 0xea, 0xf0, 0x8d, 0x69, 0x4c, 0x33, 0xed, 0x28, - 0x8d, 0x69, 0xa6, 0xed, 0xd3, 0x58, 0xc3, 0x16, 0xab, 0x00, 0x20, 0x8a, 0x83, 0x46, 0x2e, 0x86, - 0x50, 0x4a, 0x15, 0x85, 0x52, 0x26, 0xc2, 0x43, 0x01, 0x56, 0x9d, 0x8b, 0x21, 0x54, 0xd3, 0xc8, - 0x1b, 0x8a, 0x2d, 0xb0, 0x06, 0x27, 0x43, 0xd3, 0xd1, 0x29, 0x31, 0x69, 0xf4, 0x36, 0x93, 0xd2, - 0x45, 0x81, 0xf5, 0x81, 0x7b, 0xd5, 0x95, 0xbd, 0xab, 0xae, 0xdc, 0xf1, 0xae, 0xba, 0x7a, 0xea, - 0x72, 0x2a, 0x0b, 0x4f, 0xff, 0x2d, 0x0b, 0x6a, 0x26, 0x58, 0x4c, 0xd5, 0xa2, 0x0d, 0x32, 0x03, - 0x7d, 0xa2, 0xf1, 0x30, 0x29, 0x2a, 0x80, 0x1d, 0xf6, 0x13, 0xba, 0xe2, 0xb6, 0xc3, 0x46, 0x96, - 0x5d, 0x4d, 0xe5, 0x07, 0xee, 0x89, 0x67, 0xe5, 0x8a, 0xba, 0x32, 0xd0, 0x27, 0x35, 0x36, 0xa7, - 0xb8, 0xfe, 0x4e, 0x00, 0x59, 0x8b, 0x1e, 0x4e, 0xc3, 0xd0, 0xb2, 0xb4, 0xa1, 0x63, 0xf6, 0xa0, - 0xb4, 0xcc, 0xb6, 0x3c, 0xe7, 0x5b, 0x7e, 0xd8, 0x37, 0xc9, 0xd9, 0xa8, 0x5b, 0xee, 0xa1, 0x41, + 0x69, 0x51, 0x65, 0x63, 0xf1, 0x43, 0x90, 0x44, 0x6e, 0x36, 0xa5, 0x74, 0x31, 0x5e, 0x5a, 0xde, + 0x7b, 0x58, 0x0e, 0xd5, 0x6a, 0x79, 0x36, 0xe1, 0xaa, 0x67, 0x5b, 0x95, 0x7f, 0xf3, 0xea, 0xd9, + 0xb6, 0x97, 0x8e, 0x6f, 0x5e, 0x3d, 0xdb, 0xce, 0xd0, 0x72, 0x09, 0x72, 0xa7, 0x1c, 0x81, 0xd5, + 0x23, 0xdd, 0xb4, 0xa0, 0xe1, 0x25, 0x53, 0x06, 0xcb, 0x86, 0x3b, 0xd4, 0x4c, 0x63, 0xc2, 0x12, + 0xba, 0xa8, 0x02, 0x2e, 0x6a, 0x18, 0x13, 0x71, 0x13, 0x2c, 0x41, 0xc7, 0x41, 0x5e, 0x42, 0xdd, + 0x89, 0xf2, 0xcf, 0x18, 0x10, 0x03, 0xb7, 0x2a, 0xc4, 0x43, 0x64, 0x63, 0x28, 0xfe, 0x1a, 0x88, + 0x0e, 0xc4, 0xd0, 0x19, 0xc3, 0x27, 0x1a, 0xf7, 0x01, 0x0d, 0x49, 0x60, 0xf0, 0x1e, 0xdf, 0x05, + 0xef, 0x35, 0x4b, 0xaf, 0xa6, 0xf2, 0x96, 0x8b, 0xf3, 0xbc, 0x4e, 0x51, 0xd7, 0x3d, 0xe1, 0x81, + 0x27, 0x0b, 0x05, 0xb0, 0x1b, 0x0a, 0x20, 0x76, 0xbf, 0x00, 0x76, 0x6f, 0x09, 0x60, 0xf7, 0xba, + 0x00, 0x76, 0x83, 0x00, 0xf6, 0xc1, 0xda, 0x29, 0x03, 0xd8, 0xb3, 0xc3, 0x52, 0x9c, 0x25, 0x30, + 0x3f, 0x93, 0xc0, 0x99, 0x24, 0xa8, 0x99, 0xd3, 0xf0, 0x14, 0x2b, 0x7f, 0x8b, 0x81, 0xd5, 0x16, + 0xee, 0xff, 0xcc, 0x24, 0x67, 0x86, 0xa3, 0x7f, 0xa5, 0x5b, 0xdf, 0x5a, 0xcf, 0x8d, 0x41, 0x16, + 0x9f, 0xe9, 0x0e, 0xc4, 0xb4, 0x62, 0x1d, 0x38, 0x40, 0x63, 0xc8, 0x5b, 0xaf, 0x79, 0x17, 0x7a, + 0x73, 0x0b, 0xaf, 0xa6, 0x72, 0xce, 0xc5, 0x2e, 0xaa, 0x51, 0xd4, 0x8c, 0x2b, 0xea, 0x20, 0x95, + 0x09, 0x6e, 0xea, 0x98, 0xc4, 0xed, 0x1d, 0x93, 0x0c, 0x3a, 0xa6, 0xaa, 0x44, 0x4b, 0x7f, 0x9d, + 0x97, 0x7e, 0x80, 0xa2, 0x92, 0x03, 0x0f, 0x66, 0x04, 0x5e, 0xdd, 0x2a, 0x7f, 0x59, 0x62, 0xe5, + 0x7c, 0x6c, 0xe9, 0x3d, 0xd8, 0x34, 0x07, 0x26, 0x69, 0x3b, 0x06, 0x74, 0xde, 0x12, 0xf5, 0x2d, + 0x90, 0x72, 0xc1, 0x35, 0x6d, 0x0e, 0xbb, 0x0b, 0x76, 0xc3, 0x16, 0x1f, 0x82, 0xb4, 0xab, 0x42, + 0x23, 0xc2, 0x91, 0x77, 0x6d, 0xdb, 0x23, 0x22, 0xee, 0x81, 0xcd, 0x00, 0x03, 0xcd, 0xb4, 0x29, + 0x04, 0xd4, 0x6e, 0xa9, 0x28, 0x94, 0xe2, 0xf5, 0x98, 0x24, 0xa8, 0x59, 0x1f, 0x88, 0x86, 0xdd, + 0x41, 0x74, 0x8d, 0x4f, 0x63, 0x74, 0xb3, 0x24, 0x75, 0xf8, 0xc6, 0x34, 0xa6, 0x99, 0x76, 0x94, + 0xc6, 0x34, 0xd3, 0xf6, 0x69, 0xac, 0x61, 0x8b, 0x55, 0x00, 0x10, 0xc5, 0x41, 0x23, 0x17, 0x43, + 0x28, 0xa5, 0x8a, 0x42, 0x29, 0x13, 0xe1, 0xa1, 0x00, 0xab, 0xce, 0xc5, 0x10, 0xaa, 0x69, 0xe4, + 0x0d, 0xc5, 0x16, 0x58, 0x83, 0x93, 0xa1, 0xe9, 0xe8, 0x94, 0x98, 0x34, 0x7a, 0x9b, 0x49, 0xe9, + 0xa2, 0xc0, 0xfa, 0xc0, 0xbd, 0xea, 0xca, 0xde, 0x55, 0x57, 0xee, 0x78, 0x57, 0x5d, 0x3d, 0x75, + 0x39, 0x95, 0x85, 0xa7, 0xff, 0x96, 0x05, 0x35, 0x13, 0x2c, 0xa6, 0x6a, 0xd1, 0x06, 0x99, 0x81, + 0x3e, 0xd1, 0x78, 0x98, 0x14, 0x15, 0xc0, 0x0e, 0xfb, 0x09, 0x5d, 0x71, 0xdb, 0x61, 0x23, 0xcb, + 0xae, 0xa6, 0xf2, 0x03, 0xf7, 0xc4, 0xb3, 0x72, 0x45, 0x5d, 0x19, 0xe8, 0x93, 0x1a, 0x9b, 0x53, + 0x5c, 0x7f, 0x27, 0x80, 0xac, 0x45, 0x0f, 0xa7, 0x61, 0x68, 0x59, 0xda, 0xd0, 0x31, 0x7b, 0x50, + 0x5a, 0x66, 0x5b, 0x9e, 0xf3, 0x2d, 0x7f, 0xd4, 0x37, 0xc9, 0xd9, 0xa8, 0x5b, 0xee, 0xa1, 0x41, 0x85, 0x63, 0xb2, 0x83, 0x9c, 0xbe, 0x37, 0xae, 0x8c, 0x3f, 0xac, 0x8c, 0x88, 0x69, 0x61, 0x37, 0x9a, 0x63, 0x07, 0xf6, 0x0e, 0x60, 0x8f, 0xf6, 0x49, 0xd4, 0x6f, 0xd0, 0x27, 0x51, 0x8d, 0xa2, 0x66, 0x98, 0xe8, 0x04, 0x5a, 0xd6, 0x31, 0x15, 0x54, 0x1f, 0x47, 0xab, 0xfc, 0x3d, 0x5e, 0xe5, @@ -1139,8 +1139,8 @@ var fileDescriptor_a489f6e187d5e074 = []byte{ 0xe7, 0x33, 0xac, 0x9d, 0xf7, 0x79, 0x5d, 0xc5, 0xe7, 0x97, 0xbe, 0xa6, 0x3d, 0x54, 0xff, 0xf8, 0xf2, 0x45, 0x41, 0x78, 0xfe, 0xa2, 0x20, 0xfc, 0xe7, 0x45, 0x41, 0x78, 0xfa, 0xb2, 0xb0, 0xf0, 0xfc, 0x65, 0x61, 0xe1, 0xef, 0x2f, 0x0b, 0x0b, 0x5f, 0xec, 0xdc, 0xcd, 0x95, 0x13, 0xf7, 0x5f, - 0x41, 0x94, 0x22, 0xba, 0x09, 0xf6, 0x16, 0xfd, 0xe1, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x2a, - 0x07, 0x8e, 0x98, 0x26, 0x12, 0x00, 0x00, + 0x41, 0x94, 0x22, 0xba, 0x09, 0xf6, 0x16, 0xfd, 0xe1, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x62, + 0x68, 0x35, 0xb5, 0x26, 0x12, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -4231,7 +4231,7 @@ func (m *MsgPlaceLimitOrder) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var v github_com_neutron_org_neutron_v4_utils_math.PrecDec + var v github_com_neutron_org_neutron_v5_utils_math.PrecDec m.LimitSellPrice = &v if err := m.LimitSellPrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err diff --git a/x/dex/types/v2/params.pb.go b/x/dex/types/v2/params.pb.go index b6e4ad499..c40889fe5 100644 --- a/x/dex/types/v2/params.pb.go +++ b/x/dex/types/v2/params.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_neutron_org_neutron_v4_utils_math "github.com/neutron-org/neutron/v4/utils/math" + github_com_neutron_org_neutron_v5_utils_math "github.com/neutron-org/neutron/v5/utils/math" io "io" math "math" math_bits "math/bits" @@ -27,7 +27,7 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // Params defines the parameters for the module. type Params struct { FeeTiers []uint64 `protobuf:"varint,1,rep,packed,name=fee_tiers,json=feeTiers,proto3" json:"fee_tiers,omitempty"` - MaxTrueTakerSpread github_com_neutron_org_neutron_v4_utils_math.PrecDec `protobuf:"bytes,2,opt,name=max_true_taker_spread,json=maxTrueTakerSpread,proto3,customtype=github.com/neutron-org/neutron/v4/utils/math.PrecDec" json:"max_true_taker_spread" yaml:"max_true_taker_spread"` + MaxTrueTakerSpread github_com_neutron_org_neutron_v5_utils_math.PrecDec `protobuf:"bytes,2,opt,name=max_true_taker_spread,json=maxTrueTakerSpread,proto3,customtype=github.com/neutron-org/neutron/v5/utils/math.PrecDec" json:"max_true_taker_spread" yaml:"max_true_taker_spread"` } func (m *Params) Reset() { *m = Params{} } @@ -87,14 +87,14 @@ var fileDescriptor_d05490f4c0ad856f = []byte{ 0x92, 0xc4, 0xec, 0xd4, 0xa2, 0xf8, 0xe2, 0x82, 0xa2, 0xd4, 0xc4, 0x14, 0x09, 0x26, 0x05, 0x46, 0x0d, 0x4e, 0xa7, 0xd2, 0x13, 0xf7, 0xe4, 0x19, 0x6e, 0xdd, 0x93, 0x37, 0x49, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x87, 0x3a, 0x40, 0x37, 0xbf, 0x28, 0x1d, 0xc6, 0xd6, - 0x2f, 0x33, 0xd1, 0x2f, 0x2d, 0xc9, 0xcc, 0x29, 0xd6, 0xcf, 0x4d, 0x2c, 0xc9, 0xd0, 0x0b, 0x28, + 0x2f, 0x33, 0xd5, 0x2f, 0x2d, 0xc9, 0xcc, 0x29, 0xd6, 0xcf, 0x4d, 0x2c, 0xc9, 0xd0, 0x0b, 0x28, 0x4a, 0x4d, 0x76, 0x49, 0x4d, 0x7e, 0x75, 0x4f, 0x1e, 0xbb, 0xe1, 0x9f, 0xee, 0xc9, 0xcb, 0x54, 0x26, 0xe6, 0xe6, 0x58, 0x29, 0x61, 0x95, 0x56, 0x0a, 0x12, 0xca, 0x4d, 0xac, 0x08, 0x29, 0x2a, 0x4d, 0x0d, 0x01, 0x89, 0x06, 0x83, 0x05, 0xad, 0x58, 0x66, 0x2c, 0x90, 0x67, 0x70, 0xf2, 0x3a, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0x03, 0xc2, 0x4e, 0xac, 0x00, 0x87, 0x68, 0x49, 0x65, 0x41, 0x6a, 0xb1, 0x7e, 0x99, 0x51, 0x12, 0x1b, 0x38, 0xac, 0x8c, 0x01, 0x01, - 0x00, 0x00, 0xff, 0xff, 0x45, 0xe3, 0x59, 0xc8, 0x70, 0x01, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xda, 0xae, 0xd3, 0x9e, 0x70, 0x01, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/dex/utils/math.go b/x/dex/utils/math.go index 1a369aab3..e87314e26 100644 --- a/x/dex/utils/math.go +++ b/x/dex/utils/math.go @@ -8,7 +8,7 @@ import ( sdkmath "cosmossdk.io/math" - math_utils "github.com/neutron-org/neutron/v4/utils/math" + math_utils "github.com/neutron-org/neutron/v5/utils/math" ) // Return the base value for price, 1.0001 diff --git a/x/dex/utils/math_test.go b/x/dex/utils/math_test.go index fa52da35c..1459c0a92 100644 --- a/x/dex/utils/math_test.go +++ b/x/dex/utils/math_test.go @@ -5,8 +5,8 @@ import ( "github.com/stretchr/testify/require" - math_utils "github.com/neutron-org/neutron/v4/utils/math" - "github.com/neutron-org/neutron/v4/x/dex/utils" + math_utils "github.com/neutron-org/neutron/v5/utils/math" + "github.com/neutron-org/neutron/v5/x/dex/utils" ) func TestParsePrecDecScientificNotation(t *testing.T) { diff --git a/x/dynamicfees/client/cli/query.go b/x/dynamicfees/client/cli/query.go index 26b8d120f..704b239a7 100644 --- a/x/dynamicfees/client/cli/query.go +++ b/x/dynamicfees/client/cli/query.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" - "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + "github.com/neutron-org/neutron/v5/x/dynamicfees/types" ) // GetQueryCmd returns the cli query commands for this module diff --git a/x/dynamicfees/client/cli/query_params.go b/x/dynamicfees/client/cli/query_params.go index 486ad500e..6b62cd713 100644 --- a/x/dynamicfees/client/cli/query_params.go +++ b/x/dynamicfees/client/cli/query_params.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + "github.com/neutron-org/neutron/v5/x/dynamicfees/types" ) func CmdQueryParams() *cobra.Command { diff --git a/x/dynamicfees/genesis.go b/x/dynamicfees/genesis.go index 12b1842b3..3fb802d35 100644 --- a/x/dynamicfees/genesis.go +++ b/x/dynamicfees/genesis.go @@ -3,8 +3,8 @@ package dynamicfees import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dynamicfees/keeper" - "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + "github.com/neutron-org/neutron/v5/x/dynamicfees/keeper" + "github.com/neutron-org/neutron/v5/x/dynamicfees/types" ) // InitGenesis initializes the module's state from a provided genesis state. diff --git a/x/dynamicfees/genesis_test.go b/x/dynamicfees/genesis_test.go index ae96b291e..f9098d3bc 100644 --- a/x/dynamicfees/genesis_test.go +++ b/x/dynamicfees/genesis_test.go @@ -6,15 +6,15 @@ import ( "cosmossdk.io/math" cosmostypes "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dynamicfees" + "github.com/neutron-org/neutron/v5/x/dynamicfees" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - "github.com/neutron-org/neutron/v4/testutil/dynamicfees/keeper" - "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + "github.com/neutron-org/neutron/v5/testutil/dynamicfees/keeper" + "github.com/neutron-org/neutron/v5/x/dynamicfees/types" ) func TestGenesis(t *testing.T) { diff --git a/x/dynamicfees/keeper/grpc_query.go b/x/dynamicfees/keeper/grpc_query.go index bad090d22..d077d01a6 100644 --- a/x/dynamicfees/keeper/grpc_query.go +++ b/x/dynamicfees/keeper/grpc_query.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + "github.com/neutron-org/neutron/v5/x/dynamicfees/types" ) var _ types.QueryServer = Keeper{} diff --git a/x/dynamicfees/keeper/grpc_query_params.go b/x/dynamicfees/keeper/grpc_query_params.go index af83c649c..a7f7e3336 100644 --- a/x/dynamicfees/keeper/grpc_query_params.go +++ b/x/dynamicfees/keeper/grpc_query_params.go @@ -7,7 +7,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + "github.com/neutron-org/neutron/v5/x/dynamicfees/types" ) func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { diff --git a/x/dynamicfees/keeper/grpc_query_params_test.go b/x/dynamicfees/keeper/grpc_query_params_test.go index eea6385d6..a8b119f1c 100644 --- a/x/dynamicfees/keeper/grpc_query_params_test.go +++ b/x/dynamicfees/keeper/grpc_query_params_test.go @@ -7,8 +7,8 @@ import ( cosmostypes "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - testkeeper "github.com/neutron-org/neutron/v4/testutil/dynamicfees/keeper" - "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + testkeeper "github.com/neutron-org/neutron/v5/testutil/dynamicfees/keeper" + "github.com/neutron-org/neutron/v5/x/dynamicfees/types" ) func TestParamsQuery(t *testing.T) { diff --git a/x/dynamicfees/keeper/keeper.go b/x/dynamicfees/keeper/keeper.go index 2488e1bd3..d46efba6f 100644 --- a/x/dynamicfees/keeper/keeper.go +++ b/x/dynamicfees/keeper/keeper.go @@ -9,7 +9,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + "github.com/neutron-org/neutron/v5/x/dynamicfees/types" ) type ( diff --git a/x/dynamicfees/keeper/msg_server.go b/x/dynamicfees/keeper/msg_server.go index c126c1e3b..111c9500c 100644 --- a/x/dynamicfees/keeper/msg_server.go +++ b/x/dynamicfees/keeper/msg_server.go @@ -7,7 +7,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + "github.com/neutron-org/neutron/v5/x/dynamicfees/types" ) type msgServer struct { diff --git a/x/dynamicfees/keeper/msg_server_test.go b/x/dynamicfees/keeper/msg_server_test.go index b0cfa06da..303a149c9 100644 --- a/x/dynamicfees/keeper/msg_server_test.go +++ b/x/dynamicfees/keeper/msg_server_test.go @@ -9,8 +9,8 @@ import ( authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/stretchr/testify/suite" - "github.com/neutron-org/neutron/v4/testutil" - "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + "github.com/neutron-org/neutron/v5/testutil" + "github.com/neutron-org/neutron/v5/x/dynamicfees/types" ) type KeeperTestSuite struct { diff --git a/x/dynamicfees/keeper/params.go b/x/dynamicfees/keeper/params.go index 0125c3d1a..c55d8bfad 100644 --- a/x/dynamicfees/keeper/params.go +++ b/x/dynamicfees/keeper/params.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + "github.com/neutron-org/neutron/v5/x/dynamicfees/types" ) // GetParams get all parameters as types.Params diff --git a/x/dynamicfees/keeper/resolver.go b/x/dynamicfees/keeper/resolver.go index 44ecb326a..c4749c4df 100644 --- a/x/dynamicfees/keeper/resolver.go +++ b/x/dynamicfees/keeper/resolver.go @@ -4,9 +4,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" - appparams "github.com/neutron-org/neutron/v4/app/params" + appparams "github.com/neutron-org/neutron/v5/app/params" - "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + "github.com/neutron-org/neutron/v5/x/dynamicfees/types" ) var _ feemarkettypes.DenomResolver = Keeper{} diff --git a/x/dynamicfees/keeper/resolver_test.go b/x/dynamicfees/keeper/resolver_test.go index 274186dc2..305cfc6c4 100644 --- a/x/dynamicfees/keeper/resolver_test.go +++ b/x/dynamicfees/keeper/resolver_test.go @@ -7,10 +7,10 @@ import ( cosmostypes "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - appparams "github.com/neutron-org/neutron/v4/app/params" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - testkeeper "github.com/neutron-org/neutron/v4/testutil/dynamicfees/keeper" - "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + appparams "github.com/neutron-org/neutron/v5/app/params" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + testkeeper "github.com/neutron-org/neutron/v5/testutil/dynamicfees/keeper" + "github.com/neutron-org/neutron/v5/x/dynamicfees/types" ) func TestConvertToDenom(t *testing.T) { diff --git a/x/dynamicfees/module.go b/x/dynamicfees/module.go index 3af50b80e..c45eaf262 100644 --- a/x/dynamicfees/module.go +++ b/x/dynamicfees/module.go @@ -20,9 +20,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - "github.com/neutron-org/neutron/v4/x/dynamicfees/client/cli" - "github.com/neutron-org/neutron/v4/x/dynamicfees/keeper" - "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + "github.com/neutron-org/neutron/v5/x/dynamicfees/client/cli" + "github.com/neutron-org/neutron/v5/x/dynamicfees/keeper" + "github.com/neutron-org/neutron/v5/x/dynamicfees/types" ) var ( diff --git a/x/dynamicfees/module_simulation.go b/x/dynamicfees/module_simulation.go index 46f121bca..9cf98aa1e 100644 --- a/x/dynamicfees/module_simulation.go +++ b/x/dynamicfees/module_simulation.go @@ -7,9 +7,9 @@ import ( simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" - "github.com/neutron-org/neutron/v4/testutil/common/sample" - feeburnersimulation "github.com/neutron-org/neutron/v4/x/feeburner/simulation" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + "github.com/neutron-org/neutron/v5/testutil/common/sample" + feeburnersimulation "github.com/neutron-org/neutron/v5/x/feeburner/simulation" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) // avoid unused import issue diff --git a/x/dynamicfees/types/genesis.pb.go b/x/dynamicfees/types/genesis.pb.go index ff1c4b185..e1aec7191 100644 --- a/x/dynamicfees/types/genesis.pb.go +++ b/x/dynamicfees/types/genesis.pb.go @@ -89,8 +89,8 @@ var fileDescriptor_311447c521bf6ae9 = []byte{ 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xd3, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, 0xa8, 0x89, 0xba, 0xf9, 0x45, 0xe9, 0x30, 0xb6, 0x7e, 0x99, - 0x89, 0x7e, 0x05, 0x8a, 0x43, 0x4b, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0xae, 0x34, 0x06, - 0x04, 0x00, 0x00, 0xff, 0xff, 0x44, 0xe2, 0x53, 0x49, 0x20, 0x01, 0x00, 0x00, + 0xa9, 0x7e, 0x05, 0x8a, 0x43, 0x4b, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0xae, 0x34, 0x06, + 0x04, 0x00, 0x00, 0xff, 0xff, 0x60, 0x3b, 0x54, 0x2a, 0x20, 0x01, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/dynamicfees/types/params.pb.go b/x/dynamicfees/types/params.pb.go index cd6c8940e..dab94c323 100644 --- a/x/dynamicfees/types/params.pb.go +++ b/x/dynamicfees/types/params.pb.go @@ -98,8 +98,8 @@ var fileDescriptor_f4ff446f82722ba2 = []byte{ 0x56, 0x2c, 0x33, 0x16, 0xc8, 0x33, 0x38, 0xf9, 0x9f, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x29, 0x92, 0xc1, 0x50, 0x7f, 0xeb, 0xe6, 0x17, 0xa5, 0xc3, 0xd8, 0xfa, 0x65, - 0x26, 0xfa, 0x15, 0x28, 0xa1, 0x05, 0xb6, 0x2b, 0x89, 0x0d, 0xec, 0x39, 0x63, 0x40, 0x00, 0x00, - 0x00, 0xff, 0xff, 0x5d, 0x49, 0x6f, 0xb5, 0x51, 0x01, 0x00, 0x00, + 0xa6, 0xfa, 0x15, 0x28, 0xa1, 0x05, 0xb6, 0x2b, 0x89, 0x0d, 0xec, 0x39, 0x63, 0x40, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x79, 0x90, 0x68, 0xd6, 0x51, 0x01, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/dynamicfees/types/query.pb.go b/x/dynamicfees/types/query.pb.go index 51fb31b92..d0de7e7a9 100644 --- a/x/dynamicfees/types/query.pb.go +++ b/x/dynamicfees/types/query.pb.go @@ -138,9 +138,9 @@ var fileDescriptor_372e8efc521c6d67 = []byte{ 0x25, 0xb5, 0xa6, 0xcb, 0x4f, 0x26, 0x33, 0x29, 0x08, 0xc9, 0xe9, 0xe3, 0x0d, 0x06, 0x27, 0xff, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0x32, 0x4d, 0xcf, 0x2c, 0xc9, 0x28, - 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0x85, 0x99, 0xa1, 0x9b, 0x5f, 0x94, 0x0e, 0x37, 0xaf, 0xcc, 0x44, + 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0x85, 0x99, 0xa1, 0x9b, 0x5f, 0x94, 0x0e, 0x37, 0xaf, 0xcc, 0x54, 0xbf, 0x02, 0xc5, 0xd0, 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0x70, 0xc0, 0x1a, 0x03, 0x02, - 0x00, 0x00, 0xff, 0xff, 0xec, 0xfe, 0xa2, 0xfa, 0xef, 0x01, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xc8, 0x27, 0xa5, 0x99, 0xef, 0x01, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/dynamicfees/types/tx.pb.go b/x/dynamicfees/types/tx.pb.go index a2dc42872..8639598bd 100644 --- a/x/dynamicfees/types/tx.pb.go +++ b/x/dynamicfees/types/tx.pb.go @@ -155,8 +155,8 @@ var fileDescriptor_a6a5f55503750f7f = []byte{ 0x40, 0x5e, 0x71, 0xf2, 0x3f, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xd3, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, 0xa8, 0xd9, 0xba, 0xf9, 0x45, - 0xe9, 0x30, 0xb6, 0x7e, 0x99, 0x89, 0x7e, 0x05, 0x4a, 0x64, 0x95, 0x54, 0x16, 0xa4, 0x16, 0x27, - 0xb1, 0x81, 0x63, 0xca, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x32, 0x9c, 0x49, 0x80, 0x66, 0x02, + 0xe9, 0x30, 0xb6, 0x7e, 0x99, 0xa9, 0x7e, 0x05, 0x4a, 0x64, 0x95, 0x54, 0x16, 0xa4, 0x16, 0x27, + 0xb1, 0x81, 0x63, 0xca, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x16, 0x45, 0x4e, 0xe3, 0x66, 0x02, 0x00, 0x00, } diff --git a/x/feeburner/client/cli/query.go b/x/feeburner/client/cli/query.go index 9978f4e4c..6c5116049 100644 --- a/x/feeburner/client/cli/query.go +++ b/x/feeburner/client/cli/query.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) // GetQueryCmd returns the cli query commands for this module diff --git a/x/feeburner/client/cli/query_params.go b/x/feeburner/client/cli/query_params.go index c906483fc..90238e64e 100644 --- a/x/feeburner/client/cli/query_params.go +++ b/x/feeburner/client/cli/query_params.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) func CmdQueryParams() *cobra.Command { diff --git a/x/feeburner/client/cli/query_total_burned_neutrons_amount.go b/x/feeburner/client/cli/query_total_burned_neutrons_amount.go index 5529f38d3..3de28acf0 100644 --- a/x/feeburner/client/cli/query_total_burned_neutrons_amount.go +++ b/x/feeburner/client/cli/query_total_burned_neutrons_amount.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) func CmdQueryTotalBurnedNeutronsAmount() *cobra.Command { diff --git a/x/feeburner/genesis.go b/x/feeburner/genesis.go index 2e698cf9d..50d184b77 100644 --- a/x/feeburner/genesis.go +++ b/x/feeburner/genesis.go @@ -3,8 +3,8 @@ package feeburner import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/feeburner/keeper" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + "github.com/neutron-org/neutron/v5/x/feeburner/keeper" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) // InitGenesis initializes the module's state from a provided genesis state. diff --git a/x/feeburner/genesis_test.go b/x/feeburner/genesis_test.go index 4287929a5..78535b32a 100644 --- a/x/feeburner/genesis_test.go +++ b/x/feeburner/genesis_test.go @@ -5,15 +5,15 @@ import ( "cosmossdk.io/math" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - "github.com/neutron-org/neutron/v4/testutil/feeburner/keeper" - "github.com/neutron-org/neutron/v4/x/feeburner" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + "github.com/neutron-org/neutron/v5/testutil/feeburner/keeper" + "github.com/neutron-org/neutron/v5/x/feeburner" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) func TestGenesis(t *testing.T) { diff --git a/x/feeburner/keeper/grpc_query.go b/x/feeburner/keeper/grpc_query.go index a2d53508e..7158d411c 100644 --- a/x/feeburner/keeper/grpc_query.go +++ b/x/feeburner/keeper/grpc_query.go @@ -5,7 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) var _ types.QueryServer = Keeper{} diff --git a/x/feeburner/keeper/grpc_query_params.go b/x/feeburner/keeper/grpc_query_params.go index 7455573b3..955c9f2be 100644 --- a/x/feeburner/keeper/grpc_query_params.go +++ b/x/feeburner/keeper/grpc_query_params.go @@ -7,7 +7,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { diff --git a/x/feeburner/keeper/grpc_query_params_test.go b/x/feeburner/keeper/grpc_query_params_test.go index 030a8f022..135091f53 100644 --- a/x/feeburner/keeper/grpc_query_params_test.go +++ b/x/feeburner/keeper/grpc_query_params_test.go @@ -3,12 +3,12 @@ package keeper_test import ( "testing" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" "github.com/stretchr/testify/require" - testkeeper "github.com/neutron-org/neutron/v4/testutil/feeburner/keeper" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + testkeeper "github.com/neutron-org/neutron/v5/testutil/feeburner/keeper" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) func TestParamsQuery(t *testing.T) { diff --git a/x/feeburner/keeper/grpc_query_test.go b/x/feeburner/keeper/grpc_query_test.go index 32a1dc814..fa58019f5 100644 --- a/x/feeburner/keeper/grpc_query_test.go +++ b/x/feeburner/keeper/grpc_query_test.go @@ -7,8 +7,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - feekeeperutil "github.com/neutron-org/neutron/v4/testutil/feeburner/keeper" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + feekeeperutil "github.com/neutron-org/neutron/v5/testutil/feeburner/keeper" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) func TestGrpcQuery_TotalBurnedNeutronsAmount(t *testing.T) { diff --git a/x/feeburner/keeper/keeper.go b/x/feeburner/keeper/keeper.go index 0eb798ce8..f2ff162b6 100644 --- a/x/feeburner/keeper/keeper.go +++ b/x/feeburner/keeper/keeper.go @@ -15,7 +15,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" consumertypes "github.com/cosmos/interchain-security/v5/x/ccv/consumer/types" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) type ( diff --git a/x/feeburner/keeper/keeper_test.go b/x/feeburner/keeper/keeper_test.go index 7898a8c5f..1a2422a49 100644 --- a/x/feeburner/keeper/keeper_test.go +++ b/x/feeburner/keeper/keeper_test.go @@ -12,11 +12,11 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" - mock_types "github.com/neutron-org/neutron/v4/testutil/mocks/feeburner/types" - "github.com/neutron-org/neutron/v4/x/feeburner/keeper" + mock_types "github.com/neutron-org/neutron/v5/testutil/mocks/feeburner/types" + "github.com/neutron-org/neutron/v5/x/feeburner/keeper" - feekeeperutil "github.com/neutron-org/neutron/v4/testutil/feeburner/keeper" - feetypes "github.com/neutron-org/neutron/v4/x/feeburner/types" + feekeeperutil "github.com/neutron-org/neutron/v5/testutil/feeburner/keeper" + feetypes "github.com/neutron-org/neutron/v5/x/feeburner/types" ) func TestKeeper_RecordBurnedFees(t *testing.T) { diff --git a/x/feeburner/keeper/msg_server.go b/x/feeburner/keeper/msg_server.go index ff783fb6c..c6aa92197 100644 --- a/x/feeburner/keeper/msg_server.go +++ b/x/feeburner/keeper/msg_server.go @@ -7,7 +7,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) type msgServer struct { diff --git a/x/feeburner/keeper/msg_server_test.go b/x/feeburner/keeper/msg_server_test.go index bdb41fbf0..cff502714 100644 --- a/x/feeburner/keeper/msg_server_test.go +++ b/x/feeburner/keeper/msg_server_test.go @@ -5,9 +5,9 @@ import ( "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil" - "github.com/neutron-org/neutron/v4/testutil/feeburner/keeper" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + "github.com/neutron-org/neutron/v5/testutil" + "github.com/neutron-org/neutron/v5/testutil/feeburner/keeper" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) func TestMsgUpdateParamsValidate(t *testing.T) { diff --git a/x/feeburner/keeper/params.go b/x/feeburner/keeper/params.go index 966afdf21..9229eb2ca 100644 --- a/x/feeburner/keeper/params.go +++ b/x/feeburner/keeper/params.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) // GetParams get all parameters as types.Params diff --git a/x/feeburner/keeper/params_test.go b/x/feeburner/keeper/params_test.go index 19326fca6..8c360512b 100644 --- a/x/feeburner/keeper/params_test.go +++ b/x/feeburner/keeper/params_test.go @@ -3,12 +3,12 @@ package keeper_test import ( "testing" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" "github.com/stretchr/testify/require" - testkeeper "github.com/neutron-org/neutron/v4/testutil/feeburner/keeper" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + testkeeper "github.com/neutron-org/neutron/v5/testutil/feeburner/keeper" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) func TestGetParams(t *testing.T) { diff --git a/x/feeburner/module.go b/x/feeburner/module.go index 212da36ab..d2381047c 100644 --- a/x/feeburner/module.go +++ b/x/feeburner/module.go @@ -20,9 +20,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - "github.com/neutron-org/neutron/v4/x/feeburner/client/cli" - "github.com/neutron-org/neutron/v4/x/feeburner/keeper" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + "github.com/neutron-org/neutron/v5/x/feeburner/client/cli" + "github.com/neutron-org/neutron/v5/x/feeburner/keeper" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) var ( diff --git a/x/feeburner/module_simulation.go b/x/feeburner/module_simulation.go index 73879f633..85d33e561 100644 --- a/x/feeburner/module_simulation.go +++ b/x/feeburner/module_simulation.go @@ -7,9 +7,9 @@ import ( simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" - "github.com/neutron-org/neutron/v4/testutil/common/sample" - feeburnersimulation "github.com/neutron-org/neutron/v4/x/feeburner/simulation" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + "github.com/neutron-org/neutron/v5/testutil/common/sample" + feeburnersimulation "github.com/neutron-org/neutron/v5/x/feeburner/simulation" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) // avoid unused import issue diff --git a/x/feeburner/types/genesis.pb.go b/x/feeburner/types/genesis.pb.go index 817cad2ff..f9004204d 100644 --- a/x/feeburner/types/genesis.pb.go +++ b/x/feeburner/types/genesis.pb.go @@ -98,8 +98,8 @@ var fileDescriptor_bdeb93808577407e = []byte{ 0xf0, 0x3d, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xe3, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, 0xa8, 0x95, 0xba, 0xf9, 0x45, 0xe9, 0x30, 0xb6, - 0x7e, 0x99, 0x89, 0x7e, 0x05, 0x72, 0x50, 0x55, 0x16, 0xa4, 0x16, 0x27, 0xb1, 0x81, 0x03, 0xc5, - 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x52, 0xf6, 0xa7, 0x83, 0xb6, 0x01, 0x00, 0x00, + 0x7e, 0x99, 0xa9, 0x7e, 0x05, 0x72, 0x50, 0x55, 0x16, 0xa4, 0x16, 0x27, 0xb1, 0x81, 0x03, 0xc5, + 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x13, 0xed, 0x2b, 0xed, 0xb6, 0x01, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/feeburner/types/genesis_test.go b/x/feeburner/types/genesis_test.go index 08bf48f70..e94b328ae 100644 --- a/x/feeburner/types/genesis_test.go +++ b/x/feeburner/types/genesis_test.go @@ -3,14 +3,14 @@ package types_test import ( "testing" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - keepertest "github.com/neutron-org/neutron/v4/testutil/feeburner/keeper" - "github.com/neutron-org/neutron/v4/x/feeburner" - "github.com/neutron-org/neutron/v4/x/feeburner/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + keepertest "github.com/neutron-org/neutron/v5/testutil/feeburner/keeper" + "github.com/neutron-org/neutron/v5/x/feeburner" + "github.com/neutron-org/neutron/v5/x/feeburner/types" ) func TestGenesis(t *testing.T) { diff --git a/x/feeburner/types/params.go b/x/feeburner/types/params.go index de99e75d2..42e43fd92 100644 --- a/x/feeburner/types/params.go +++ b/x/feeburner/types/params.go @@ -7,7 +7,7 @@ import ( paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" "gopkg.in/yaml.v2" - "github.com/neutron-org/neutron/v4/app/params" + "github.com/neutron-org/neutron/v5/app/params" ) var _ paramtypes.ParamSet = (*Params)(nil) diff --git a/x/feeburner/types/params.pb.go b/x/feeburner/types/params.pb.go index 2f539541e..941f74a91 100644 --- a/x/feeburner/types/params.pb.go +++ b/x/feeburner/types/params.pb.go @@ -107,9 +107,9 @@ var fileDescriptor_be38a6978544057e = []byte{ 0x4a, 0xad, 0x58, 0x66, 0x2c, 0x90, 0x67, 0x70, 0xf2, 0x3d, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xe3, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, - 0xa8, 0x63, 0x74, 0xf3, 0x8b, 0xd2, 0x61, 0x6c, 0xfd, 0x32, 0x13, 0xfd, 0x0a, 0xa4, 0x80, 0x28, - 0xa9, 0x2c, 0x48, 0x2d, 0x4e, 0x62, 0x03, 0xfb, 0xcf, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x07, - 0x94, 0x37, 0x42, 0x2a, 0x01, 0x00, 0x00, + 0xa8, 0x63, 0x74, 0xf3, 0x8b, 0xd2, 0x61, 0x6c, 0xfd, 0x32, 0x53, 0xfd, 0x0a, 0xa4, 0x80, 0x28, + 0xa9, 0x2c, 0x48, 0x2d, 0x4e, 0x62, 0x03, 0xfb, 0xcf, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x46, + 0x8f, 0xbb, 0x2c, 0x2a, 0x01, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/feeburner/types/query.pb.go b/x/feeburner/types/query.pb.go index ea85ae590..102eac6a0 100644 --- a/x/feeburner/types/query.pb.go +++ b/x/feeburner/types/query.pb.go @@ -210,32 +210,32 @@ func init() { proto.RegisterFile("neutron/feeburner/query.proto", fileDescriptor var fileDescriptor_f540485c4b79b2ac = []byte{ // 408 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0x3f, 0x6f, 0xda, 0x40, - 0x18, 0xc6, 0x6d, 0xd4, 0x32, 0x5c, 0xa7, 0x5e, 0x19, 0x6a, 0x97, 0xba, 0xad, 0x25, 0x68, 0x55, - 0xb5, 0x3e, 0xf1, 0x47, 0xa2, 0x1d, 0xcb, 0x5e, 0xd4, 0xa2, 0x4e, 0x5d, 0xd0, 0x99, 0x5c, 0x1c, - 0x4b, 0xf8, 0x5e, 0xe3, 0x3b, 0xa3, 0x90, 0x31, 0x9f, 0x20, 0x52, 0xe6, 0x7c, 0x1f, 0x32, 0x05, - 0x29, 0x4b, 0xa6, 0x28, 0x82, 0x7c, 0x90, 0x88, 0xf3, 0x81, 0x12, 0x19, 0x07, 0x25, 0xdb, 0xf9, - 0x9e, 0xf7, 0x79, 0x9f, 0xdf, 0xfb, 0xfa, 0xd0, 0x7b, 0xce, 0x52, 0x99, 0x00, 0x27, 0xfb, 0x8c, - 0xf9, 0x69, 0xc2, 0x59, 0x42, 0xc6, 0x29, 0x4b, 0xa6, 0x5e, 0x9c, 0x80, 0x04, 0xfc, 0x5a, 0xcb, - 0xde, 0x46, 0xb6, 0xbf, 0x0e, 0x41, 0x44, 0x20, 0x88, 0x4f, 0x05, 0xcb, 0x6a, 0xc9, 0xa4, 0xe1, - 0x33, 0x49, 0x1b, 0x24, 0xa6, 0x41, 0xc8, 0xa9, 0x0c, 0x81, 0x67, 0x76, 0xbb, 0x12, 0x40, 0x00, - 0xea, 0x48, 0x56, 0x27, 0x7d, 0x5b, 0x0d, 0x00, 0x82, 0x11, 0x23, 0x34, 0x0e, 0x09, 0xe5, 0x1c, - 0xa4, 0xb2, 0x08, 0xad, 0x3a, 0x79, 0xa2, 0x98, 0x26, 0x34, 0x5a, 0xeb, 0xed, 0xbc, 0x2e, 0x41, - 0xd2, 0xd1, 0x40, 0x7d, 0xec, 0x0d, 0xb4, 0x2c, 0x06, 0x34, 0x82, 0x94, 0xcb, 0xcc, 0xe5, 0x56, - 0x10, 0xfe, 0xbb, 0x62, 0xfd, 0xa3, 0x5a, 0xf5, 0xd9, 0x38, 0x65, 0x42, 0xba, 0x3d, 0xf4, 0xe6, - 0xc1, 0xad, 0x88, 0x81, 0x0b, 0x86, 0x3b, 0xa8, 0x9c, 0x45, 0xbe, 0x35, 0x3f, 0x9a, 0x5f, 0x5e, - 0x35, 0x2d, 0x2f, 0xb7, 0x06, 0x2f, 0xb3, 0x74, 0x5f, 0xcc, 0xae, 0x3f, 0x18, 0x7d, 0x5d, 0xee, - 0x7e, 0x46, 0x35, 0xd5, 0xef, 0xdf, 0x0a, 0xa8, 0xab, 0x78, 0x7a, 0x1a, 0xe7, 0x97, 0xa2, 0x59, - 0x07, 0x9f, 0x99, 0xa8, 0xbe, 0xab, 0x52, 0xc3, 0x08, 0x54, 0x7d, 0x6c, 0x3e, 0x8d, 0xf8, 0x6d, - 0x0b, 0x62, 0x61, 0x6f, 0x4d, 0x6d, 0xc9, 0xa2, 0x82, 0xe6, 0x45, 0x09, 0xbd, 0x54, 0x7c, 0xf8, - 0x08, 0x95, 0xb3, 0x51, 0x71, 0x6d, 0x4b, 0x44, 0x7e, 0xa7, 0x76, 0x7d, 0x57, 0x59, 0x36, 0x97, - 0xfb, 0xe9, 0xf8, 0xf2, 0xf6, 0xb4, 0xf4, 0x0e, 0x5b, 0xa4, 0xe8, 0x87, 0xe3, 0x73, 0x13, 0x59, - 0x85, 0x43, 0xe0, 0x1f, 0x45, 0x41, 0xbb, 0xb6, 0x6f, 0xff, 0x7c, 0x86, 0x53, 0x53, 0x77, 0x14, - 0x75, 0x03, 0x13, 0xf2, 0xb4, 0x67, 0xd8, 0xfd, 0x3d, 0x5b, 0x38, 0xe6, 0x7c, 0xe1, 0x98, 0x37, - 0x0b, 0xc7, 0x3c, 0x59, 0x3a, 0xc6, 0x7c, 0xe9, 0x18, 0x57, 0x4b, 0xc7, 0xf8, 0xdf, 0x0a, 0x42, - 0x79, 0x90, 0xfa, 0xde, 0x10, 0xa2, 0x75, 0xd3, 0xef, 0x90, 0x04, 0x9b, 0x80, 0x49, 0x9b, 0x1c, - 0xde, 0x4f, 0x99, 0xc6, 0x4c, 0xf8, 0x65, 0xf5, 0xac, 0x5b, 0x77, 0x01, 0x00, 0x00, 0xff, 0xff, - 0x2b, 0x5b, 0x8a, 0x3a, 0xc0, 0x03, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0x31, 0x6f, 0xda, 0x40, + 0x14, 0xc7, 0x6d, 0xd4, 0x32, 0x5c, 0xa7, 0x5e, 0x19, 0x6a, 0x97, 0xba, 0xad, 0x25, 0x68, 0x55, + 0xb5, 0x3e, 0x01, 0xad, 0x68, 0xc7, 0xb2, 0x17, 0xb5, 0x28, 0x53, 0x16, 0x74, 0x26, 0x17, 0xc7, + 0x12, 0xbe, 0x67, 0x7c, 0x67, 0x14, 0x32, 0xe6, 0x13, 0x44, 0xca, 0x9c, 0xef, 0x43, 0xa6, 0x20, + 0x65, 0xc9, 0x14, 0x45, 0x90, 0x0f, 0x12, 0x71, 0x3e, 0x50, 0x22, 0xe3, 0xa0, 0x64, 0x3b, 0xdf, + 0xff, 0xfd, 0xdf, 0xff, 0xf7, 0x9e, 0x0f, 0xbd, 0xe7, 0x2c, 0x95, 0x09, 0x70, 0xb2, 0xcf, 0x98, + 0x9f, 0x26, 0x9c, 0x25, 0x64, 0x94, 0xb2, 0x64, 0xe2, 0xc5, 0x09, 0x48, 0xc0, 0xaf, 0xb5, 0xec, + 0xad, 0x65, 0xfb, 0xeb, 0x00, 0x44, 0x04, 0x82, 0xf8, 0x54, 0xb0, 0xac, 0x96, 0x8c, 0x1b, 0x3e, + 0x93, 0xb4, 0x41, 0x62, 0x1a, 0x84, 0x9c, 0xca, 0x10, 0x78, 0x66, 0xb7, 0x2b, 0x01, 0x04, 0xa0, + 0x8e, 0x64, 0x79, 0xd2, 0xb7, 0xd5, 0x00, 0x20, 0x18, 0x32, 0x42, 0xe3, 0x90, 0x50, 0xce, 0x41, + 0x2a, 0x8b, 0xd0, 0xaa, 0x93, 0x27, 0x8a, 0x69, 0x42, 0xa3, 0x95, 0xfe, 0x23, 0xaf, 0x4b, 0x90, + 0x74, 0xd8, 0x57, 0x1f, 0x7b, 0x7d, 0x2d, 0x8b, 0x3e, 0x8d, 0x20, 0xe5, 0x32, 0x73, 0xb9, 0x15, + 0x84, 0xff, 0x2f, 0x59, 0xff, 0xa9, 0x56, 0x3d, 0x36, 0x4a, 0x99, 0x90, 0x6e, 0x17, 0xbd, 0x79, + 0x70, 0x2b, 0x62, 0xe0, 0x82, 0xe1, 0x36, 0x2a, 0x67, 0x91, 0x6f, 0xcd, 0x8f, 0xe6, 0x97, 0x57, + 0x4d, 0xcb, 0xcb, 0xad, 0xc1, 0xcb, 0x2c, 0x9d, 0x17, 0xd3, 0xeb, 0x0f, 0x46, 0x4f, 0x97, 0xbb, + 0x9f, 0x51, 0x4d, 0xf5, 0xdb, 0x59, 0x02, 0x75, 0x14, 0x4f, 0x57, 0xe3, 0xfc, 0x51, 0x34, 0xab, + 0xe0, 0x33, 0x13, 0xd5, 0xb7, 0x55, 0x6a, 0x18, 0x81, 0xaa, 0x8f, 0xcd, 0xa7, 0x11, 0xbf, 0x6d, + 0x40, 0x2c, 0xec, 0xad, 0xa9, 0x2d, 0x59, 0x54, 0xd0, 0xbc, 0x28, 0xa1, 0x97, 0x8a, 0x0f, 0x1f, + 0xa1, 0x72, 0x36, 0x2a, 0xae, 0x6d, 0x88, 0xc8, 0xef, 0xd4, 0xae, 0x6f, 0x2b, 0xcb, 0xe6, 0x72, + 0x3f, 0x1d, 0x5f, 0xde, 0x9e, 0x96, 0xde, 0x61, 0x8b, 0x14, 0xfd, 0x70, 0x7c, 0x6e, 0x22, 0xab, + 0x70, 0x08, 0xfc, 0xab, 0x28, 0x68, 0xdb, 0xf6, 0xed, 0xdf, 0xcf, 0x70, 0x6a, 0xea, 0xb6, 0xa2, + 0x6e, 0x60, 0x42, 0x9e, 0xf6, 0x0c, 0x3b, 0x7f, 0xa7, 0x73, 0xc7, 0x9c, 0xcd, 0x1d, 0xf3, 0x66, + 0xee, 0x98, 0x27, 0x0b, 0xc7, 0x98, 0x2d, 0x1c, 0xe3, 0x6a, 0xe1, 0x18, 0xbb, 0xad, 0x20, 0x94, + 0x07, 0xa9, 0xef, 0x0d, 0x20, 0x5a, 0x35, 0xfd, 0x0e, 0x49, 0xb0, 0x0e, 0x18, 0xff, 0x24, 0x87, + 0xf7, 0x53, 0x26, 0x31, 0x13, 0x7e, 0x59, 0x3d, 0xeb, 0xd6, 0x5d, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x6a, 0x40, 0x06, 0x54, 0xc0, 0x03, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/feeburner/types/total_burned_neutrons_amount.pb.go b/x/feeburner/types/total_burned_neutrons_amount.pb.go index 8e9acf9f1..c9edd009f 100644 --- a/x/feeburner/types/total_burned_neutrons_amount.pb.go +++ b/x/feeburner/types/total_burned_neutrons_amount.pb.go @@ -92,9 +92,9 @@ var fileDescriptor_dfe0eb8ae8e764c8 = []byte{ 0x62, 0x6e, 0x8e, 0x95, 0x12, 0x48, 0x93, 0x52, 0x10, 0x58, 0xaf, 0x93, 0xef, 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x38, 0xe1, 0xb1, 0x1c, 0xc3, 0x85, 0xc7, 0x72, 0x0c, 0x37, 0x1e, 0xcb, 0x31, 0x44, 0x19, 0xa7, 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, - 0xe7, 0xe7, 0xea, 0x43, 0xbd, 0xa3, 0x9b, 0x5f, 0x94, 0x0e, 0x63, 0xeb, 0x97, 0x99, 0xe8, 0x57, + 0xe7, 0xe7, 0xea, 0x43, 0xbd, 0xa3, 0x9b, 0x5f, 0x94, 0x0e, 0x63, 0xeb, 0x97, 0x99, 0xea, 0x57, 0x20, 0x87, 0x4a, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, 0xd8, 0xd9, 0xc6, 0x80, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x86, 0x30, 0x87, 0x0c, 0x37, 0x01, 0x00, 0x00, + 0xff, 0xff, 0xc7, 0x2b, 0x0b, 0x62, 0x37, 0x01, 0x00, 0x00, } func (m *TotalBurnedNeutronsAmount) Marshal() (dAtA []byte, err error) { diff --git a/x/feeburner/types/tx.pb.go b/x/feeburner/types/tx.pb.go index d25168e3c..4fa73aa2f 100644 --- a/x/feeburner/types/tx.pb.go +++ b/x/feeburner/types/tx.pb.go @@ -158,9 +158,9 @@ var fileDescriptor_49e6591b4db80f7f = []byte{ 0xac, 0x06, 0x66, 0x8d, 0x14, 0x6b, 0x03, 0xc8, 0xf9, 0x4e, 0xbe, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, 0x10, 0x65, 0x9c, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, - 0xab, 0x0f, 0x35, 0x56, 0x37, 0xbf, 0x28, 0x1d, 0xc6, 0xd6, 0x2f, 0x33, 0xd1, 0xaf, 0x40, 0x4e, + 0xab, 0x0f, 0x35, 0x56, 0x37, 0xbf, 0x28, 0x1d, 0xc6, 0xd6, 0x2f, 0x33, 0xd5, 0xaf, 0x40, 0x4e, 0x22, 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0xe0, 0x68, 0x31, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, - 0x04, 0x06, 0x52, 0xb9, 0x44, 0x02, 0x00, 0x00, + 0x45, 0x1d, 0xde, 0xd7, 0x44, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/feerefunder/client/cli/query.go b/x/feerefunder/client/cli/query.go index 1d25877a5..bd31d52b3 100644 --- a/x/feerefunder/client/cli/query.go +++ b/x/feerefunder/client/cli/query.go @@ -10,7 +10,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" - "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) // GetQueryCmd returns the cli query commands for this module diff --git a/x/feerefunder/client/cli/query_params.go b/x/feerefunder/client/cli/query_params.go index 49e5a9155..42d0eb378 100644 --- a/x/feerefunder/client/cli/query_params.go +++ b/x/feerefunder/client/cli/query_params.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) func CmdQueryParams() *cobra.Command { diff --git a/x/feerefunder/client/cli/query_test.go b/x/feerefunder/client/cli/query_test.go index 84d3bbca2..7afdeb82c 100644 --- a/x/feerefunder/client/cli/query_test.go +++ b/x/feerefunder/client/cli/query_test.go @@ -3,7 +3,7 @@ package cli_test import ( "testing" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" "cosmossdk.io/math" @@ -11,9 +11,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil/contractmanager/network" - "github.com/neutron-org/neutron/v4/x/feerefunder/client/cli" - "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/testutil/contractmanager/network" + "github.com/neutron-org/neutron/v5/x/feerefunder/client/cli" + "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) func feeRefunderNetwork(t *testing.T, feeInfo types.Fee) *network.Network { diff --git a/x/feerefunder/genesis.go b/x/feerefunder/genesis.go index 9c0f44c82..e2a85989e 100644 --- a/x/feerefunder/genesis.go +++ b/x/feerefunder/genesis.go @@ -3,8 +3,8 @@ package feerefunder import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/feerefunder/keeper" - "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/feerefunder/keeper" + "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) // InitGenesis initializes the module's state from a provided genesis state. diff --git a/x/feerefunder/genesis_test.go b/x/feerefunder/genesis_test.go index 6f914e278..d38f6f9fa 100644 --- a/x/feerefunder/genesis_test.go +++ b/x/feerefunder/genesis_test.go @@ -5,15 +5,15 @@ import ( "cosmossdk.io/math" - "github.com/neutron-org/neutron/v4/app/params" - "github.com/neutron-org/neutron/v4/testutil/feerefunder/keeper" + "github.com/neutron-org/neutron/v5/app/params" + "github.com/neutron-org/neutron/v5/testutil/feerefunder/keeper" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - "github.com/neutron-org/neutron/v4/x/feerefunder" - "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + "github.com/neutron-org/neutron/v5/x/feerefunder" + "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) const TestContractAddressNeutron = "neutron14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s5c2epq" diff --git a/x/feerefunder/keeper/export_test.go b/x/feerefunder/keeper/export_test.go index b29fbc31a..e3cedffe6 100644 --- a/x/feerefunder/keeper/export_test.go +++ b/x/feerefunder/keeper/export_test.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) func (k Keeper) CheckFees(ctx sdk.Context, fees types.Fee) error { diff --git a/x/feerefunder/keeper/grpc_query.go b/x/feerefunder/keeper/grpc_query.go index 064a346ac..7ee4524f9 100644 --- a/x/feerefunder/keeper/grpc_query.go +++ b/x/feerefunder/keeper/grpc_query.go @@ -8,7 +8,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) var _ types.QueryServer = Keeper{} diff --git a/x/feerefunder/keeper/grpc_query_params.go b/x/feerefunder/keeper/grpc_query_params.go index e22502beb..99cce3091 100644 --- a/x/feerefunder/keeper/grpc_query_params.go +++ b/x/feerefunder/keeper/grpc_query_params.go @@ -7,7 +7,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { diff --git a/x/feerefunder/keeper/grpc_query_params_test.go b/x/feerefunder/keeper/grpc_query_params_test.go index 70d1dc0cb..1076057c8 100644 --- a/x/feerefunder/keeper/grpc_query_params_test.go +++ b/x/feerefunder/keeper/grpc_query_params_test.go @@ -3,11 +3,11 @@ package keeper_test import ( "testing" - testkeeper "github.com/neutron-org/neutron/v4/testutil/feerefunder/keeper" + testkeeper "github.com/neutron-org/neutron/v5/testutil/feerefunder/keeper" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) func TestParamsQuery(t *testing.T) { diff --git a/x/feerefunder/keeper/keeper.go b/x/feerefunder/keeper/keeper.go index fecaf59b4..a38ce85e6 100644 --- a/x/feerefunder/keeper/keeper.go +++ b/x/feerefunder/keeper/keeper.go @@ -15,7 +15,7 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" - "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) type ( diff --git a/x/feerefunder/keeper/keeper_test.go b/x/feerefunder/keeper/keeper_test.go index 0182998ca..1524726d6 100644 --- a/x/feerefunder/keeper/keeper_test.go +++ b/x/feerefunder/keeper/keeper_test.go @@ -9,9 +9,9 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" - "github.com/neutron-org/neutron/v4/testutil" - testutil_keeper "github.com/neutron-org/neutron/v4/testutil/feerefunder/keeper" - mock_types "github.com/neutron-org/neutron/v4/testutil/mocks/feerefunder/types" + "github.com/neutron-org/neutron/v5/testutil" + testutil_keeper "github.com/neutron-org/neutron/v5/testutil/feerefunder/keeper" + mock_types "github.com/neutron-org/neutron/v5/testutil/mocks/feerefunder/types" cosmoserrors "cosmossdk.io/errors" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -20,7 +20,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/feerefunder/types" channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" ) diff --git a/x/feerefunder/keeper/msg_server.go b/x/feerefunder/keeper/msg_server.go index 891d1ecfc..85961c38d 100644 --- a/x/feerefunder/keeper/msg_server.go +++ b/x/feerefunder/keeper/msg_server.go @@ -7,7 +7,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) type msgServer struct { diff --git a/x/feerefunder/keeper/msg_server_test.go b/x/feerefunder/keeper/msg_server_test.go index 158ced45e..deb29b9df 100644 --- a/x/feerefunder/keeper/msg_server_test.go +++ b/x/feerefunder/keeper/msg_server_test.go @@ -8,10 +8,10 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/app/params" - "github.com/neutron-org/neutron/v4/testutil" - "github.com/neutron-org/neutron/v4/testutil/feerefunder/keeper" - "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/app/params" + "github.com/neutron-org/neutron/v5/testutil" + "github.com/neutron-org/neutron/v5/testutil/feerefunder/keeper" + "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) func TestMsgUpdateParamsValidate(t *testing.T) { diff --git a/x/feerefunder/keeper/params.go b/x/feerefunder/keeper/params.go index 3dda4b096..a765d54b4 100644 --- a/x/feerefunder/keeper/params.go +++ b/x/feerefunder/keeper/params.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) // GetParams get all parameters as types.Params diff --git a/x/feerefunder/keeper/params_test.go b/x/feerefunder/keeper/params_test.go index e904004a9..3d163d4fb 100644 --- a/x/feerefunder/keeper/params_test.go +++ b/x/feerefunder/keeper/params_test.go @@ -3,11 +3,11 @@ package keeper_test import ( "testing" - testkeeper "github.com/neutron-org/neutron/v4/testutil/feerefunder/keeper" + testkeeper "github.com/neutron-org/neutron/v5/testutil/feerefunder/keeper" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) func TestGetParams(t *testing.T) { diff --git a/x/feerefunder/module.go b/x/feerefunder/module.go index 74efab243..a019a5104 100644 --- a/x/feerefunder/module.go +++ b/x/feerefunder/module.go @@ -21,9 +21,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - "github.com/neutron-org/neutron/v4/x/feerefunder/client/cli" - "github.com/neutron-org/neutron/v4/x/feerefunder/keeper" - "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/feerefunder/client/cli" + "github.com/neutron-org/neutron/v5/x/feerefunder/keeper" + "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) var ( diff --git a/x/feerefunder/types/fee.pb.go b/x/feerefunder/types/fee.pb.go index 540bc0581..65562320c 100644 --- a/x/feerefunder/types/fee.pb.go +++ b/x/feerefunder/types/fee.pb.go @@ -158,30 +158,30 @@ func init() { proto.RegisterFile("neutron/feerefunder/fee.proto", fileDescriptor var fileDescriptor_08c389f5f82f1076 = []byte{ // 384 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xbd, 0x6e, 0xe2, 0x40, - 0x14, 0x85, 0x3d, 0xb0, 0xe2, 0x67, 0x90, 0x76, 0x25, 0xef, 0x4a, 0xcb, 0x22, 0x61, 0x90, 0x2b, - 0x37, 0x78, 0xc4, 0xfe, 0x34, 0x5b, 0x42, 0x84, 0x44, 0x95, 0x88, 0x32, 0x45, 0x90, 0x3d, 0xbe, - 0x18, 0xcb, 0x78, 0x86, 0xd8, 0x63, 0x2b, 0xb4, 0x79, 0x82, 0x3c, 0x47, 0x9e, 0x84, 0x92, 0x32, - 0x15, 0x89, 0xe0, 0x0d, 0xd2, 0x47, 0x8a, 0xc6, 0x1e, 0x22, 0x52, 0x21, 0xaa, 0x39, 0x33, 0x47, - 0xe7, 0x7c, 0x77, 0xa4, 0x8b, 0xdb, 0x0c, 0x52, 0x11, 0x73, 0x46, 0x66, 0x00, 0x31, 0xcc, 0x52, - 0xe6, 0x41, 0x2c, 0xb5, 0xbd, 0x8c, 0xb9, 0xe0, 0xfa, 0x77, 0x65, 0xdb, 0x47, 0x76, 0xcb, 0xa0, - 0x3c, 0x89, 0x78, 0x42, 0x5c, 0x27, 0x01, 0x92, 0xf5, 0x5d, 0x10, 0x4e, 0x9f, 0x50, 0x1e, 0xb0, - 0x22, 0xd4, 0xfa, 0xe1, 0x73, 0x9f, 0xe7, 0x92, 0x48, 0x55, 0xbc, 0x9a, 0x6f, 0x25, 0x5c, 0x1e, - 0x01, 0xe8, 0x2b, 0x5c, 0x8b, 0x81, 0x66, 0xd3, 0x19, 0x40, 0x13, 0x75, 0xcb, 0x56, 0xe3, 0xf7, - 0x2f, 0xbb, 0x28, 0xb4, 0x65, 0xa1, 0xad, 0x0a, 0xed, 0x21, 0x0f, 0xd8, 0x60, 0xb8, 0xde, 0x76, - 0xb4, 0xd7, 0x6d, 0xe7, 0xdb, 0xca, 0x89, 0x16, 0xff, 0xcd, 0x43, 0xd0, 0x7c, 0x7c, 0xee, 0x58, - 0x7e, 0x20, 0xe6, 0xa9, 0x6b, 0x53, 0x1e, 0x11, 0x35, 0x50, 0x71, 0xf4, 0x12, 0x2f, 0x24, 0x62, - 0xb5, 0x84, 0x24, 0xef, 0x48, 0x26, 0x55, 0x19, 0x93, 0xe8, 0x0c, 0x57, 0x1d, 0x1a, 0xe6, 0xe4, - 0xd2, 0x29, 0xf2, 0x40, 0x91, 0xbf, 0x16, 0x64, 0x95, 0x3b, 0x0f, 0x5c, 0x71, 0x68, 0x28, 0xb9, - 0xf7, 0x08, 0x37, 0x44, 0x10, 0x01, 0x4f, 0x45, 0x0e, 0x2f, 0x9f, 0x82, 0x8f, 0x14, 0x5c, 0x2f, - 0xe0, 0x47, 0xd9, 0xf3, 0x06, 0xc0, 0x2a, 0x39, 0x02, 0x30, 0x6f, 0x70, 0xed, 0xca, 0xa1, 0x21, - 0x88, 0xf1, 0x85, 0xde, 0xc6, 0x98, 0xce, 0x1d, 0xc6, 0x60, 0x31, 0x0d, 0xbc, 0x26, 0xea, 0x22, - 0xab, 0x3e, 0xa9, 0xab, 0x97, 0xb1, 0xa7, 0xff, 0xc4, 0xd5, 0x25, 0x8f, 0x85, 0xf4, 0x4a, 0xb9, - 0x57, 0x91, 0xd7, 0xb1, 0xa7, 0xb7, 0x70, 0x2d, 0x81, 0xdb, 0x14, 0x18, 0x95, 0x9f, 0x40, 0xd6, - 0x97, 0xc9, 0xc7, 0x7d, 0x70, 0xb9, 0xde, 0x19, 0x68, 0xb3, 0x33, 0xd0, 0xcb, 0xce, 0x40, 0x0f, - 0x7b, 0x43, 0xdb, 0xec, 0x0d, 0xed, 0x69, 0x6f, 0x68, 0xd7, 0xff, 0x8e, 0xe6, 0x55, 0xfb, 0xd4, - 0xe3, 0xb1, 0x7f, 0xd0, 0x24, 0xfb, 0x4b, 0xee, 0x3e, 0xed, 0x5f, 0xfe, 0x05, 0xb7, 0x92, 0xef, - 0xcd, 0x9f, 0xf7, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfd, 0x9c, 0xd3, 0x7d, 0xa3, 0x02, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0x4f, 0x6b, 0xe2, 0x40, + 0x18, 0xc6, 0x33, 0xba, 0xf8, 0x67, 0x84, 0x5d, 0xc8, 0x2e, 0xac, 0x2b, 0x18, 0x25, 0xa7, 0x5c, + 0xcc, 0xe0, 0x2e, 0x5e, 0xf6, 0xa8, 0x8b, 0xe0, 0x69, 0x8b, 0xc7, 0x1e, 0x2a, 0xc9, 0xe4, 0x35, + 0x86, 0x98, 0x19, 0x9b, 0x4c, 0x42, 0xbd, 0xf6, 0x13, 0xf4, 0x73, 0xf4, 0x93, 0x78, 0xf4, 0xd8, + 0x93, 0x2d, 0xfa, 0x0d, 0x7a, 0x2f, 0x94, 0x49, 0xc6, 0x62, 0x4f, 0xe2, 0x69, 0x9e, 0x99, 0x87, + 0xe7, 0xf9, 0xbd, 0x03, 0x2f, 0x6e, 0x33, 0x48, 0x45, 0xcc, 0x19, 0x99, 0x03, 0xc4, 0x30, 0x4f, + 0x99, 0x07, 0xb1, 0xd4, 0xf6, 0x2a, 0xe6, 0x82, 0xeb, 0xdf, 0x95, 0x6d, 0x9f, 0xd8, 0x2d, 0x83, + 0xf2, 0x24, 0xe2, 0x09, 0x71, 0x9d, 0x04, 0x48, 0xd6, 0x77, 0x41, 0x38, 0x7d, 0x42, 0x79, 0xc0, + 0x8a, 0x50, 0xeb, 0x87, 0xcf, 0x7d, 0x9e, 0x4b, 0x22, 0x55, 0xf1, 0x6a, 0xbe, 0x95, 0x70, 0x79, + 0x0c, 0xa0, 0xaf, 0x71, 0x2d, 0x06, 0x9a, 0xcd, 0xe6, 0x00, 0x4d, 0xd4, 0x2d, 0x5b, 0x8d, 0xdf, + 0xbf, 0xec, 0xa2, 0xd0, 0x96, 0x85, 0xb6, 0x2a, 0xb4, 0x47, 0x3c, 0x60, 0xc3, 0xd1, 0x66, 0xd7, + 0xd1, 0x5e, 0x77, 0x9d, 0x6f, 0x6b, 0x27, 0x5a, 0xfe, 0x35, 0x8f, 0x41, 0xf3, 0xf1, 0xb9, 0x63, + 0xf9, 0x81, 0x58, 0xa4, 0xae, 0x4d, 0x79, 0x44, 0xd4, 0x40, 0xc5, 0xd1, 0x4b, 0xbc, 0x90, 0x88, + 0xf5, 0x0a, 0x92, 0xbc, 0x23, 0x99, 0x56, 0x65, 0x4c, 0xa2, 0x33, 0x5c, 0x75, 0x68, 0x98, 0x93, + 0x4b, 0xe7, 0xc8, 0x43, 0x45, 0xfe, 0x5a, 0x90, 0x55, 0xee, 0x32, 0x70, 0xc5, 0xa1, 0xa1, 0xe4, + 0xde, 0x23, 0xdc, 0x10, 0x41, 0x04, 0x3c, 0x15, 0x39, 0xbc, 0x7c, 0x0e, 0x3e, 0x56, 0x70, 0xbd, + 0x80, 0x9f, 0x64, 0x2f, 0x1b, 0x00, 0xab, 0xe4, 0x18, 0xc0, 0xbc, 0xc1, 0xb5, 0x2b, 0x87, 0x86, + 0x20, 0x26, 0xff, 0xf4, 0x36, 0xc6, 0x74, 0xe1, 0x30, 0x06, 0xcb, 0x59, 0xe0, 0x35, 0x51, 0x17, + 0x59, 0xf5, 0x69, 0x5d, 0xbd, 0x4c, 0x3c, 0xfd, 0x27, 0xae, 0xae, 0x78, 0x2c, 0xa4, 0x57, 0xca, + 0xbd, 0x8a, 0xbc, 0x4e, 0x3c, 0xbd, 0x85, 0x6b, 0x09, 0xdc, 0xa6, 0xc0, 0xa8, 0xfc, 0x04, 0xb2, + 0xbe, 0x4c, 0x3f, 0xee, 0xc3, 0xff, 0x9b, 0xbd, 0x81, 0xb6, 0x7b, 0x03, 0xbd, 0xec, 0x0d, 0xf4, + 0x70, 0x30, 0xb4, 0xed, 0xc1, 0xd0, 0x9e, 0x0e, 0x86, 0x76, 0x3d, 0x38, 0x99, 0x57, 0xed, 0x53, + 0x8f, 0xc7, 0xfe, 0x51, 0x93, 0x6c, 0x40, 0xee, 0x3e, 0xed, 0x5f, 0xfe, 0x05, 0xb7, 0x92, 0xef, + 0xcd, 0x9f, 0xf7, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd9, 0x45, 0xd4, 0x1e, 0xa3, 0x02, 0x00, 0x00, } func (m *Fee) Marshal() (dAtA []byte, err error) { diff --git a/x/feerefunder/types/genesis.pb.go b/x/feerefunder/types/genesis.pb.go index 682002bcf..e4660599d 100644 --- a/x/feerefunder/types/genesis.pb.go +++ b/x/feerefunder/types/genesis.pb.go @@ -146,25 +146,25 @@ func init() { proto.RegisterFile("neutron/feerefunder/genesis.proto", fileDescri var fileDescriptor_43aedfe31f06653d = []byte{ // 314 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x90, 0xb1, 0x4f, 0x02, 0x31, - 0x14, 0xc6, 0xaf, 0xa0, 0x28, 0xc5, 0xa9, 0x32, 0x5c, 0x50, 0x2a, 0x32, 0xb1, 0x78, 0x35, 0xa8, - 0x83, 0x93, 0x86, 0x18, 0x0d, 0x93, 0x06, 0x37, 0x17, 0x72, 0xc0, 0xeb, 0x79, 0x31, 0xb4, 0x97, - 0x5e, 0x31, 0xf2, 0x2f, 0x38, 0x99, 0xf8, 0x4f, 0x31, 0x32, 0x3a, 0x19, 0xc3, 0xfd, 0x23, 0xe6, - 0xda, 0x92, 0x68, 0x72, 0x6c, 0xef, 0xe5, 0xfb, 0x7d, 0xef, 0xfb, 0xf2, 0xf0, 0xb1, 0x80, 0x99, - 0x56, 0x52, 0x30, 0x0e, 0xa0, 0x80, 0xcf, 0xc4, 0x04, 0x14, 0x8b, 0x40, 0x40, 0x1a, 0xa7, 0x41, - 0xa2, 0xa4, 0x96, 0x64, 0xdf, 0x21, 0xc1, 0x1f, 0xa4, 0x51, 0x8f, 0x64, 0x24, 0x8d, 0xce, 0xf2, - 0xc9, 0xa2, 0x8d, 0x66, 0xd1, 0x35, 0x0e, 0xe0, 0xe4, 0x56, 0x91, 0x9c, 0x84, 0x2a, 0x9c, 0xba, - 0xac, 0xf6, 0x3b, 0xc2, 0x7b, 0x77, 0x36, 0xfd, 0x51, 0x87, 0x1a, 0xc8, 0x25, 0xae, 0x58, 0xc0, - 0x47, 0x2d, 0xd4, 0xa9, 0x75, 0x0f, 0x82, 0x82, 0x36, 0xc1, 0x83, 0x41, 0x7a, 0x5b, 0x8b, 0xef, - 0x23, 0x6f, 0xe0, 0x0c, 0xe4, 0x0a, 0x57, 0x39, 0xc0, 0x30, 0x16, 0x5c, 0xa6, 0x7e, 0xa9, 0x55, - 0xee, 0xd4, 0xba, 0x87, 0x85, 0xee, 0x5b, 0x80, 0xbe, 0xe0, 0xd2, 0xd9, 0x77, 0xb9, 0x5d, 0xd3, - 0xf6, 0x27, 0xc2, 0x3b, 0x4e, 0x23, 0x75, 0xbc, 0x9d, 0x84, 0x73, 0x50, 0xa6, 0x46, 0x75, 0x60, - 0x17, 0x72, 0x8d, 0xab, 0x49, 0x38, 0x7e, 0x01, 0x3d, 0x8c, 0x27, 0x7e, 0xc9, 0x14, 0x6c, 0x6e, - 0x28, 0x98, 0x53, 0xfd, 0x9b, 0x75, 0x86, 0x75, 0xf5, 0x27, 0xe4, 0x14, 0x97, 0x39, 0x80, 0x5f, - 0x36, 0x5e, 0x7f, 0x53, 0x3d, 0x67, 0xcb, 0xd1, 0xde, 0xfd, 0x62, 0x45, 0xd1, 0x72, 0x45, 0xd1, - 0xcf, 0x8a, 0xa2, 0x8f, 0x8c, 0x7a, 0xcb, 0x8c, 0x7a, 0x5f, 0x19, 0xf5, 0x9e, 0x2e, 0xa2, 0x58, - 0x3f, 0xcf, 0x46, 0xc1, 0x58, 0x4e, 0x99, 0x3b, 0x74, 0x22, 0x55, 0xb4, 0x9e, 0xd9, 0xeb, 0x39, - 0x7b, 0xfb, 0xf7, 0x7a, 0x3d, 0x4f, 0x20, 0x1d, 0x55, 0xcc, 0xeb, 0xcf, 0x7e, 0x03, 0x00, 0x00, - 0xff, 0xff, 0xeb, 0xe0, 0x85, 0x41, 0x0b, 0x02, 0x00, 0x00, + 0x14, 0xc6, 0xaf, 0xa0, 0x28, 0xc5, 0xa9, 0x32, 0x5c, 0x50, 0x2a, 0x32, 0xb1, 0x78, 0x35, 0x18, + 0x06, 0x27, 0x0d, 0x31, 0x1a, 0x26, 0x0d, 0x6e, 0x2e, 0xe4, 0x80, 0xd7, 0xf3, 0x62, 0x68, 0x2f, + 0xbd, 0x62, 0xe4, 0x5f, 0x70, 0x32, 0xf1, 0x9f, 0x62, 0x64, 0x74, 0x32, 0x86, 0xfb, 0x47, 0xcc, + 0xb5, 0x25, 0xd1, 0xe4, 0xd8, 0xde, 0xcb, 0xf7, 0xfb, 0xde, 0xf7, 0xe5, 0xe1, 0x53, 0x01, 0x73, + 0xad, 0xa4, 0x60, 0x1c, 0x40, 0x01, 0x9f, 0x8b, 0x29, 0x28, 0x16, 0x81, 0x80, 0x34, 0x4e, 0x83, + 0x44, 0x49, 0x2d, 0xc9, 0xa1, 0x43, 0x82, 0x3f, 0x48, 0xa3, 0x1e, 0xc9, 0x48, 0x1a, 0x9d, 0xe5, + 0x93, 0x45, 0x1b, 0xcd, 0xa2, 0x6b, 0x1c, 0xc0, 0xc9, 0xad, 0x22, 0x39, 0x09, 0x55, 0x38, 0x73, + 0x59, 0xed, 0x77, 0x84, 0x0f, 0xee, 0x6c, 0xfa, 0xa3, 0x0e, 0x35, 0x90, 0x4b, 0x5c, 0xb1, 0x80, + 0x8f, 0x5a, 0xa8, 0x53, 0xeb, 0x1e, 0x05, 0x05, 0x6d, 0x82, 0x07, 0x83, 0xf4, 0x77, 0x96, 0xdf, + 0x27, 0xde, 0xd0, 0x19, 0xc8, 0x15, 0xae, 0x72, 0x80, 0x51, 0x2c, 0xb8, 0x4c, 0xfd, 0x52, 0xab, + 0xdc, 0xa9, 0x75, 0x8f, 0x0b, 0xdd, 0xb7, 0x00, 0x03, 0xc1, 0xa5, 0xb3, 0xef, 0x73, 0xbb, 0xa6, + 0xed, 0x4f, 0x84, 0xf7, 0x9c, 0x46, 0xea, 0x78, 0x37, 0x09, 0x17, 0xa0, 0x4c, 0x8d, 0xea, 0xd0, + 0x2e, 0xe4, 0x1a, 0x57, 0x93, 0x70, 0xf2, 0x02, 0x7a, 0x14, 0x4f, 0xfd, 0x92, 0x29, 0xd8, 0xdc, + 0x52, 0x30, 0xa7, 0x06, 0x37, 0x9b, 0x0c, 0xeb, 0x1a, 0x4c, 0xc9, 0x39, 0x2e, 0x73, 0x00, 0xbf, + 0x6c, 0xbc, 0xfe, 0xb6, 0x7a, 0xce, 0x96, 0xa3, 0xfd, 0xfb, 0xe5, 0x9a, 0xa2, 0xd5, 0x9a, 0xa2, + 0x9f, 0x35, 0x45, 0x1f, 0x19, 0xf5, 0x56, 0x19, 0xf5, 0xbe, 0x32, 0xea, 0x3d, 0xf5, 0xa2, 0x58, + 0x3f, 0xcf, 0xc7, 0xc1, 0x44, 0xce, 0x98, 0x3b, 0x74, 0x26, 0x55, 0xb4, 0x99, 0xd9, 0x6b, 0x8f, + 0xbd, 0xfd, 0x7b, 0xbd, 0x5e, 0x24, 0x90, 0x8e, 0x2b, 0xe6, 0xf5, 0x17, 0xbf, 0x01, 0x00, 0x00, + 0xff, 0xff, 0xcf, 0x39, 0x82, 0x22, 0x0b, 0x02, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/feerefunder/types/genesis_test.go b/x/feerefunder/types/genesis_test.go index 58cbc4591..69da3884c 100644 --- a/x/feerefunder/types/genesis_test.go +++ b/x/feerefunder/types/genesis_test.go @@ -3,16 +3,16 @@ package types_test import ( "testing" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/app/params" + "github.com/neutron-org/neutron/v5/app/params" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) const ( diff --git a/x/feerefunder/types/params.go b/x/feerefunder/types/params.go index d9d149bb7..4598ebe99 100644 --- a/x/feerefunder/types/params.go +++ b/x/feerefunder/types/params.go @@ -8,7 +8,7 @@ import ( paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" "gopkg.in/yaml.v2" - "github.com/neutron-org/neutron/v4/app/params" + "github.com/neutron-org/neutron/v5/app/params" ) var _ paramtypes.ParamSet = (*Params)(nil) diff --git a/x/feerefunder/types/params.pb.go b/x/feerefunder/types/params.pb.go index 1bdb0da76..cfff95815 100644 --- a/x/feerefunder/types/params.pb.go +++ b/x/feerefunder/types/params.pb.go @@ -86,8 +86,8 @@ var fileDescriptor_2dae67276ca81c89 = []byte{ 0xf2, 0x3f, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xd3, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, 0xa8, 0x89, 0xba, 0xf9, 0x45, 0xe9, 0x30, 0xb6, - 0x7e, 0x99, 0x89, 0x7e, 0x05, 0x8a, 0xeb, 0x4a, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x0e, - 0x34, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x22, 0x03, 0x03, 0x97, 0x0e, 0x01, 0x00, 0x00, + 0x7e, 0x99, 0xa9, 0x7e, 0x05, 0x8a, 0xeb, 0x4a, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x0e, + 0x34, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x06, 0xda, 0x04, 0xf4, 0x0e, 0x01, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/feerefunder/types/query.pb.go b/x/feerefunder/types/query.pb.go index 7bd8573fa..a0824ef5c 100644 --- a/x/feerefunder/types/query.pb.go +++ b/x/feerefunder/types/query.pb.go @@ -230,32 +230,32 @@ var fileDescriptor_c20b5686ec46d4e6 = []byte{ // 441 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xc1, 0x6b, 0xd4, 0x40, 0x14, 0xc6, 0x77, 0xd6, 0xba, 0xdb, 0x8e, 0xa0, 0x30, 0x2d, 0x58, 0x62, 0x4d, 0xd7, 0xa8, 0xec, - 0x2a, 0x34, 0x43, 0xab, 0x22, 0x5e, 0x7b, 0x10, 0xd6, 0x8b, 0x35, 0x47, 0x2f, 0x65, 0x92, 0xbc, - 0x4c, 0x03, 0xdd, 0x79, 0xe9, 0xcc, 0xa4, 0xd8, 0xab, 0x5e, 0x3d, 0x08, 0x5e, 0xfd, 0x83, 0x7a, - 0x2c, 0x78, 0xf1, 0x24, 0xb2, 0xeb, 0x1f, 0x22, 0x99, 0x4c, 0x8b, 0xc5, 0xd8, 0xde, 0x66, 0xde, - 0xfb, 0xbe, 0x6f, 0x7e, 0xef, 0x25, 0x74, 0x53, 0x41, 0x6d, 0x35, 0x2a, 0x5e, 0x00, 0x68, 0x28, - 0x6a, 0x95, 0x83, 0xe6, 0x47, 0x35, 0xe8, 0x93, 0xb8, 0xd2, 0x68, 0x91, 0xad, 0x7a, 0x41, 0xfc, - 0x97, 0x20, 0x78, 0x9a, 0xa1, 0x99, 0xa1, 0xe1, 0xa9, 0x30, 0xd0, 0xaa, 0xf9, 0xf1, 0x76, 0x0a, - 0x56, 0x6c, 0xf3, 0x4a, 0xc8, 0x52, 0x09, 0x5b, 0xa2, 0x6a, 0x03, 0x82, 0x35, 0x89, 0x12, 0xdd, - 0x91, 0x37, 0x27, 0x5f, 0xdd, 0x90, 0x88, 0xf2, 0x10, 0xb8, 0xa8, 0x4a, 0x2e, 0x94, 0x42, 0xeb, - 0x2c, 0xc6, 0x77, 0x1f, 0x74, 0x51, 0x49, 0x50, 0x60, 0xca, 0x73, 0xc9, 0xa8, 0x4b, 0x52, 0x09, - 0x2d, 0x66, 0x5e, 0x11, 0xad, 0x51, 0xf6, 0xae, 0x41, 0xdb, 0x73, 0xc5, 0x04, 0x8e, 0x6a, 0x30, - 0x36, 0xda, 0xa3, 0xab, 0x97, 0xaa, 0xa6, 0x42, 0x65, 0x80, 0xbd, 0xa2, 0x83, 0xd6, 0xbc, 0x4e, - 0x46, 0x64, 0x72, 0x6b, 0xe7, 0x5e, 0xdc, 0x31, 0x77, 0xdc, 0x9a, 0x76, 0x97, 0x4e, 0x7f, 0x6e, - 0xf6, 0x12, 0x6f, 0x88, 0x72, 0x7a, 0xfb, 0x35, 0xc0, 0x54, 0x15, 0xe8, 0xdf, 0x60, 0xf7, 0x29, - 0xcd, 0x0e, 0x84, 0x52, 0x70, 0xb8, 0x5f, 0xe6, 0x2e, 0x70, 0x25, 0x59, 0xf1, 0x95, 0x69, 0xce, - 0xee, 0xd2, 0x61, 0x85, 0xda, 0x36, 0xbd, 0xbe, 0xeb, 0x0d, 0x9a, 0xeb, 0x34, 0x67, 0x01, 0x5d, - 0x36, 0x4d, 0x84, 0xca, 0x60, 0xfd, 0xc6, 0x88, 0x4c, 0x96, 0x92, 0x8b, 0x7b, 0xf4, 0x86, 0xde, - 0xb9, 0x78, 0xc5, 0x33, 0xbf, 0xa4, 0xcb, 0x05, 0xc0, 0x7e, 0xa9, 0x0a, 0xf4, 0xd4, 0x1b, 0x9d, - 0xd4, 0xe7, 0xbe, 0x61, 0xd1, 0x1e, 0x76, 0xbe, 0xf5, 0xe9, 0x4d, 0xb7, 0x04, 0xf6, 0x99, 0xd0, - 0x41, 0x3b, 0x14, 0x1b, 0x77, 0x7a, 0xff, 0xdd, 0x60, 0x30, 0xb9, 0x5e, 0xd8, 0x02, 0x46, 0xfc, - 0xe3, 0xf7, 0xdf, 0x5f, 0xfb, 0x4f, 0xd8, 0x98, 0x7b, 0xc7, 0x16, 0x6a, 0xc9, 0xff, 0xff, 0xe1, - 0xd8, 0x27, 0x42, 0x87, 0x9e, 0x96, 0x3d, 0xbc, 0x72, 0x16, 0xcf, 0xf2, 0xe8, 0x6a, 0x91, 0xe7, - 0xd8, 0x72, 0x1c, 0x63, 0xf6, 0xf8, 0x5a, 0x8e, 0x66, 0x97, 0xbb, 0x6f, 0x4f, 0xe7, 0x21, 0x39, - 0x9b, 0x87, 0xe4, 0xd7, 0x3c, 0x24, 0x5f, 0x16, 0x61, 0xef, 0x6c, 0x11, 0xf6, 0x7e, 0x2c, 0xc2, - 0xde, 0xfb, 0x17, 0xb2, 0xb4, 0x07, 0x75, 0x1a, 0x67, 0x38, 0xeb, 0x8c, 0x3a, 0x7e, 0xce, 0x3f, - 0x5c, 0xca, 0xb3, 0x27, 0x15, 0x98, 0x74, 0xe0, 0x7e, 0xc8, 0x67, 0x7f, 0x02, 0x00, 0x00, 0xff, - 0xff, 0xa5, 0xf2, 0x80, 0x6c, 0x6d, 0x03, 0x00, 0x00, + 0x2a, 0x34, 0x43, 0x2b, 0x45, 0xbc, 0xf6, 0x20, 0xac, 0x17, 0x6b, 0x8e, 0x5e, 0xca, 0x24, 0x79, + 0x99, 0x06, 0xba, 0xf3, 0xd2, 0x99, 0x49, 0xb1, 0x57, 0xbd, 0x7a, 0x10, 0xbc, 0xfa, 0x07, 0xf5, + 0x58, 0xf0, 0xe2, 0x49, 0x64, 0xd7, 0x3f, 0x44, 0x32, 0x99, 0x16, 0x8b, 0xb1, 0xbd, 0xcd, 0xbc, + 0xf7, 0x7d, 0xdf, 0xfc, 0xde, 0x4b, 0xe8, 0xa6, 0x82, 0xda, 0x6a, 0x54, 0xbc, 0x00, 0xd0, 0x50, + 0xd4, 0x2a, 0x07, 0xcd, 0x8f, 0x6b, 0xd0, 0xa7, 0x71, 0xa5, 0xd1, 0x22, 0x5b, 0xf5, 0x82, 0xf8, + 0x2f, 0x41, 0xf0, 0x3c, 0x43, 0x33, 0x43, 0xc3, 0x53, 0x61, 0xa0, 0x55, 0xf3, 0x93, 0xed, 0x14, + 0xac, 0xd8, 0xe6, 0x95, 0x90, 0xa5, 0x12, 0xb6, 0x44, 0xd5, 0x06, 0x04, 0x6b, 0x12, 0x25, 0xba, + 0x23, 0x6f, 0x4e, 0xbe, 0xba, 0x21, 0x11, 0xe5, 0x11, 0x70, 0x51, 0x95, 0x5c, 0x28, 0x85, 0xd6, + 0x59, 0x8c, 0xef, 0x3e, 0xea, 0xa2, 0x92, 0xa0, 0xc0, 0x94, 0x17, 0x92, 0x51, 0x97, 0xa4, 0x12, + 0x5a, 0xcc, 0xbc, 0x22, 0x5a, 0xa3, 0xec, 0x5d, 0x83, 0xb6, 0xef, 0x8a, 0x09, 0x1c, 0xd7, 0x60, + 0x6c, 0xb4, 0x4f, 0x57, 0xaf, 0x54, 0x4d, 0x85, 0xca, 0x00, 0x7b, 0x45, 0x07, 0xad, 0x79, 0x9d, + 0x8c, 0xc8, 0xe4, 0xce, 0xce, 0x83, 0xb8, 0x63, 0xee, 0xb8, 0x35, 0xed, 0x2d, 0x9d, 0xfd, 0xdc, + 0xec, 0x25, 0xde, 0x10, 0xe5, 0xf4, 0xee, 0x6b, 0x80, 0xa9, 0x2a, 0xd0, 0xbf, 0xc1, 0x1e, 0x52, + 0x9a, 0x1d, 0x0a, 0xa5, 0xe0, 0xe8, 0xa0, 0xcc, 0x5d, 0xe0, 0x4a, 0xb2, 0xe2, 0x2b, 0xd3, 0x9c, + 0xdd, 0xa7, 0xc3, 0x0a, 0xb5, 0x6d, 0x7a, 0x7d, 0xd7, 0x1b, 0x34, 0xd7, 0x69, 0xce, 0x02, 0xba, + 0x6c, 0x9a, 0x08, 0x95, 0xc1, 0xfa, 0xad, 0x11, 0x99, 0x2c, 0x25, 0x97, 0xf7, 0xe8, 0x0d, 0xbd, + 0x77, 0xf9, 0x8a, 0x67, 0x7e, 0x49, 0x97, 0x0b, 0x80, 0x83, 0x52, 0x15, 0xe8, 0xa9, 0x37, 0x3a, + 0xa9, 0x2f, 0x7c, 0xc3, 0xa2, 0x3d, 0xec, 0x7c, 0xeb, 0xd3, 0xdb, 0x6e, 0x09, 0xec, 0x33, 0xa1, + 0x83, 0x76, 0x28, 0x36, 0xee, 0xf4, 0xfe, 0xbb, 0xc1, 0x60, 0x72, 0xb3, 0xb0, 0x05, 0x8c, 0xf8, + 0xc7, 0xef, 0xbf, 0xbf, 0xf6, 0x9f, 0xb1, 0x31, 0xf7, 0x8e, 0x2d, 0xd4, 0x92, 0xff, 0xff, 0xc3, + 0xb1, 0x4f, 0x84, 0x0e, 0x3d, 0x2d, 0x7b, 0x7c, 0xed, 0x2c, 0x9e, 0xe5, 0xc9, 0xf5, 0x22, 0xcf, + 0xb1, 0xe5, 0x38, 0xc6, 0xec, 0xe9, 0x8d, 0x1c, 0xcd, 0x2e, 0xf7, 0xde, 0x9e, 0xcd, 0x43, 0x72, + 0x3e, 0x0f, 0xc9, 0xaf, 0x79, 0x48, 0xbe, 0x2c, 0xc2, 0xde, 0xf9, 0x22, 0xec, 0xfd, 0x58, 0x84, + 0xbd, 0xf7, 0xbb, 0xb2, 0xb4, 0x87, 0x75, 0x1a, 0x67, 0x38, 0xeb, 0x8c, 0x3a, 0xd9, 0xe5, 0x1f, + 0xae, 0xe4, 0xd9, 0xd3, 0x0a, 0x4c, 0x3a, 0x70, 0x3f, 0xe4, 0x8b, 0x3f, 0x01, 0x00, 0x00, 0xff, + 0xff, 0x81, 0x2b, 0x87, 0x0f, 0x6d, 0x03, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/feerefunder/types/tx.pb.go b/x/feerefunder/types/tx.pb.go index 3688fce95..4ed9d628a 100644 --- a/x/feerefunder/types/tx.pb.go +++ b/x/feerefunder/types/tx.pb.go @@ -158,9 +158,9 @@ var fileDescriptor_2e613aff856d34ed = []byte{ 0x29, 0x1d, 0x62, 0x54, 0xc1, 0xac, 0x92, 0x62, 0x6d, 0x00, 0x79, 0xc2, 0xc9, 0xff, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, 0xa2, 0x4c, 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, - 0x92, 0xf3, 0x73, 0xf5, 0xa1, 0x06, 0xeb, 0xe6, 0x17, 0xa5, 0xc3, 0xd8, 0xfa, 0x65, 0x26, 0xfa, + 0x92, 0xf3, 0x73, 0xf5, 0xa1, 0x06, 0xeb, 0xe6, 0x17, 0xa5, 0xc3, 0xd8, 0xfa, 0x65, 0xa6, 0xfa, 0x15, 0xa8, 0x09, 0xa6, 0xb2, 0x20, 0xb5, 0x38, 0x89, 0x0d, 0x1c, 0x41, 0xc6, 0x80, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xb2, 0x97, 0x0b, 0xe2, 0x54, 0x02, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x96, 0x4e, 0x0c, 0x81, 0x54, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/globalfee/alias.go b/x/globalfee/alias.go index 656eb013a..e2c9c07c8 100644 --- a/x/globalfee/alias.go +++ b/x/globalfee/alias.go @@ -1,7 +1,7 @@ package globalfee import ( - "github.com/neutron-org/neutron/v4/x/globalfee/types" + "github.com/neutron-org/neutron/v5/x/globalfee/types" ) const ( diff --git a/x/globalfee/ante/antetest/fee_test.go b/x/globalfee/ante/antetest/fee_test.go index de325da9b..8dac71795 100644 --- a/x/globalfee/ante/antetest/fee_test.go +++ b/x/globalfee/ante/antetest/fee_test.go @@ -16,8 +16,8 @@ import ( "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" - gaiafeeante "github.com/neutron-org/neutron/v4/x/globalfee/ante" - globfeetypes "github.com/neutron-org/neutron/v4/x/globalfee/types" + gaiafeeante "github.com/neutron-org/neutron/v5/x/globalfee/ante" + globfeetypes "github.com/neutron-org/neutron/v5/x/globalfee/types" ) var testGasLimit uint64 = 200_000 diff --git a/x/globalfee/ante/antetest/fee_test_setup.go b/x/globalfee/ante/antetest/fee_test_setup.go index 45a49afdb..2adfa3256 100644 --- a/x/globalfee/ante/antetest/fee_test_setup.go +++ b/x/globalfee/ante/antetest/fee_test_setup.go @@ -3,9 +3,9 @@ package antetest import ( "github.com/cometbft/cometbft/proto/tendermint/types" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" - "github.com/neutron-org/neutron/v4/testutil" + "github.com/neutron-org/neutron/v5/testutil" "github.com/stretchr/testify/suite" @@ -17,10 +17,10 @@ import ( "github.com/cosmos/cosmos-sdk/types/tx/signing" xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" - neutronapp "github.com/neutron-org/neutron/v4/app" - gaiaparams "github.com/neutron-org/neutron/v4/app/params" - gaiafeeante "github.com/neutron-org/neutron/v4/x/globalfee/ante" - globfeetypes "github.com/neutron-org/neutron/v4/x/globalfee/types" + neutronapp "github.com/neutron-org/neutron/v5/app" + gaiaparams "github.com/neutron-org/neutron/v5/app/params" + gaiafeeante "github.com/neutron-org/neutron/v5/x/globalfee/ante" + globfeetypes "github.com/neutron-org/neutron/v5/x/globalfee/types" ) type IntegrationTestSuite struct { diff --git a/x/globalfee/ante/fee.go b/x/globalfee/ante/fee.go index b80483e7e..01300368d 100644 --- a/x/globalfee/ante/fee.go +++ b/x/globalfee/ante/fee.go @@ -3,14 +3,14 @@ package ante import ( "fmt" - gaiaerrors "github.com/neutron-org/neutron/v4/x/globalfee/types" + gaiaerrors "github.com/neutron-org/neutron/v5/x/globalfee/types" "cosmossdk.io/math" tmstrings "github.com/cometbft/cometbft/libs/strings" - "github.com/neutron-org/neutron/v4/app/params" - globalfeekeeper "github.com/neutron-org/neutron/v4/x/globalfee/keeper" + "github.com/neutron-org/neutron/v5/app/params" + globalfeekeeper "github.com/neutron-org/neutron/v5/x/globalfee/keeper" errorsmod "cosmossdk.io/errors" diff --git a/x/globalfee/ante/fee_utils.go b/x/globalfee/ante/fee_utils.go index 1eeb11f49..2917d6d41 100644 --- a/x/globalfee/ante/fee_utils.go +++ b/x/globalfee/ante/fee_utils.go @@ -3,7 +3,7 @@ package ante import ( errorsmod "cosmossdk.io/errors" - gaiaerrors "github.com/neutron-org/neutron/v4/x/globalfee/types" + gaiaerrors "github.com/neutron-org/neutron/v5/x/globalfee/types" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/globalfee/client/cli/query.go b/x/globalfee/client/cli/query.go index be422f555..7ac7f7d3f 100644 --- a/x/globalfee/client/cli/query.go +++ b/x/globalfee/client/cli/query.go @@ -6,7 +6,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/neutron-org/neutron/v4/x/globalfee/types" + "github.com/neutron-org/neutron/v5/x/globalfee/types" ) func GetQueryCmd() *cobra.Command { diff --git a/x/globalfee/genesis_test.go b/x/globalfee/genesis_test.go index 6fb447d03..6d5a644d1 100644 --- a/x/globalfee/genesis_test.go +++ b/x/globalfee/genesis_test.go @@ -7,7 +7,7 @@ import ( "cosmossdk.io/math" metrics2 "cosmossdk.io/store/metrics" - globalfeekeeper "github.com/neutron-org/neutron/v4/x/globalfee/keeper" + globalfeekeeper "github.com/neutron-org/neutron/v5/x/globalfee/keeper" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -21,8 +21,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" - gaiaparams "github.com/neutron-org/neutron/v4/app/params" - "github.com/neutron-org/neutron/v4/x/globalfee/types" + gaiaparams "github.com/neutron-org/neutron/v5/app/params" + "github.com/neutron-org/neutron/v5/x/globalfee/types" ) func TestDefaultGenesis(t *testing.T) { diff --git a/x/globalfee/keeper/grpc_query.go b/x/globalfee/keeper/grpc_query.go index 957eb8a9c..9f8b06c16 100644 --- a/x/globalfee/keeper/grpc_query.go +++ b/x/globalfee/keeper/grpc_query.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/neutron-org/neutron/v4/x/globalfee/types" + "github.com/neutron-org/neutron/v5/x/globalfee/types" ) var _ types.QueryServer = Keeper{} diff --git a/x/globalfee/keeper/grpc_query_params.go b/x/globalfee/keeper/grpc_query_params.go index 563b38b3d..bcaac8e2f 100644 --- a/x/globalfee/keeper/grpc_query_params.go +++ b/x/globalfee/keeper/grpc_query_params.go @@ -7,7 +7,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/globalfee/types" + "github.com/neutron-org/neutron/v5/x/globalfee/types" ) func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { diff --git a/x/globalfee/keeper/grpc_query_params_test.go b/x/globalfee/keeper/grpc_query_params_test.go index 3bd18c387..2b80d1e00 100644 --- a/x/globalfee/keeper/grpc_query_params_test.go +++ b/x/globalfee/keeper/grpc_query_params_test.go @@ -6,11 +6,11 @@ import ( "cosmossdk.io/math" sdktypes "github.com/cosmos/cosmos-sdk/types" - testkeeper "github.com/neutron-org/neutron/v4/testutil/globalfee/keeper" + testkeeper "github.com/neutron-org/neutron/v5/testutil/globalfee/keeper" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/globalfee/types" + "github.com/neutron-org/neutron/v5/x/globalfee/types" ) func TestParamsQuery(t *testing.T) { diff --git a/x/globalfee/keeper/keeper.go b/x/globalfee/keeper/keeper.go index 9e5baca35..eda7a3843 100644 --- a/x/globalfee/keeper/keeper.go +++ b/x/globalfee/keeper/keeper.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/globalfee/types" + "github.com/neutron-org/neutron/v5/x/globalfee/types" ) // Keeper of the globalfee store diff --git a/x/globalfee/keeper/migrations.go b/x/globalfee/keeper/migrations.go index ac0f41750..7090b13b2 100644 --- a/x/globalfee/keeper/migrations.go +++ b/x/globalfee/keeper/migrations.go @@ -6,9 +6,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - v3 "github.com/neutron-org/neutron/v4/x/globalfee/migrations/v3" + v3 "github.com/neutron-org/neutron/v5/x/globalfee/migrations/v3" - v2 "github.com/neutron-org/neutron/v4/x/globalfee/migrations/v2" + v2 "github.com/neutron-org/neutron/v5/x/globalfee/migrations/v2" ) // Migrator is a struct for handling in-place store migrations. diff --git a/x/globalfee/keeper/msg_server.go b/x/globalfee/keeper/msg_server.go index caea17934..662745004 100644 --- a/x/globalfee/keeper/msg_server.go +++ b/x/globalfee/keeper/msg_server.go @@ -8,7 +8,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - "github.com/neutron-org/neutron/v4/x/globalfee/types" + "github.com/neutron-org/neutron/v5/x/globalfee/types" ) var _ types.MsgServer = msgServer{} diff --git a/x/globalfee/migrations/v2/migration.go b/x/globalfee/migrations/v2/migration.go index 070161b01..ac5160eec 100644 --- a/x/globalfee/migrations/v2/migration.go +++ b/x/globalfee/migrations/v2/migration.go @@ -4,7 +4,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - "github.com/neutron-org/neutron/v4/x/globalfee/types" + "github.com/neutron-org/neutron/v5/x/globalfee/types" ) // MigrateStore performs in-place params migrations of diff --git a/x/globalfee/migrations/v2/v2_test/migration_test.go b/x/globalfee/migrations/v2/v2_test/migration_test.go index f9ecb4dec..46b01d5f1 100644 --- a/x/globalfee/migrations/v2/v2_test/migration_test.go +++ b/x/globalfee/migrations/v2/v2_test/migration_test.go @@ -19,8 +19,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - v2 "github.com/neutron-org/neutron/v4/x/globalfee/migrations/v2" - globalfeetypes "github.com/neutron-org/neutron/v4/x/globalfee/types" + v2 "github.com/neutron-org/neutron/v5/x/globalfee/migrations/v2" + globalfeetypes "github.com/neutron-org/neutron/v5/x/globalfee/types" ) func TestMigrateStore(t *testing.T) { diff --git a/x/globalfee/migrations/v3/migration.go b/x/globalfee/migrations/v3/migration.go index 4855c9497..8cf308bf7 100644 --- a/x/globalfee/migrations/v3/migration.go +++ b/x/globalfee/migrations/v3/migration.go @@ -6,7 +6,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - "github.com/neutron-org/neutron/v4/x/globalfee/types" + "github.com/neutron-org/neutron/v5/x/globalfee/types" ) // MigrateStore performs in-place params migrations diff --git a/x/globalfee/migrations/v3/v3_test/migration_test.go b/x/globalfee/migrations/v3/v3_test/migration_test.go index 3733258bc..40b7350ff 100644 --- a/x/globalfee/migrations/v3/v3_test/migration_test.go +++ b/x/globalfee/migrations/v3/v3_test/migration_test.go @@ -6,7 +6,7 @@ import ( "cosmossdk.io/math" metrics2 "cosmossdk.io/store/metrics" - v3 "github.com/neutron-org/neutron/v4/x/globalfee/migrations/v3" + v3 "github.com/neutron-org/neutron/v5/x/globalfee/migrations/v3" "github.com/stretchr/testify/require" @@ -21,7 +21,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - globalfeetypes "github.com/neutron-org/neutron/v4/x/globalfee/types" + globalfeetypes "github.com/neutron-org/neutron/v5/x/globalfee/types" ) func TestMigrateStore(t *testing.T) { diff --git a/x/globalfee/module.go b/x/globalfee/module.go index 2b85ce35f..5a5743b33 100644 --- a/x/globalfee/module.go +++ b/x/globalfee/module.go @@ -22,9 +22,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - "github.com/neutron-org/neutron/v4/x/globalfee/client/cli" - "github.com/neutron-org/neutron/v4/x/globalfee/keeper" - "github.com/neutron-org/neutron/v4/x/globalfee/types" + "github.com/neutron-org/neutron/v5/x/globalfee/client/cli" + "github.com/neutron-org/neutron/v5/x/globalfee/keeper" + "github.com/neutron-org/neutron/v5/x/globalfee/types" ) var ( diff --git a/x/globalfee/types/genesis.pb.go b/x/globalfee/types/genesis.pb.go index 349c454df..092d8780b 100644 --- a/x/globalfee/types/genesis.pb.go +++ b/x/globalfee/types/genesis.pb.go @@ -91,8 +91,8 @@ var fileDescriptor_015b3e8b7a7c65c5 = []byte{ 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0xca, 0x38, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x3f, 0x2f, 0xb5, 0xb4, 0xa4, 0x28, 0x3f, 0x4f, 0x37, 0xbf, 0x28, - 0x1d, 0xc6, 0xd6, 0x2f, 0x33, 0xd1, 0xaf, 0x40, 0xf2, 0x55, 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, - 0x1b, 0xd8, 0xdd, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2c, 0xf5, 0x57, 0x87, 0x32, 0x01, + 0x1d, 0xc6, 0xd6, 0x2f, 0x33, 0xd5, 0xaf, 0x40, 0xf2, 0x55, 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, + 0x1b, 0xd8, 0xdd, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6d, 0xee, 0xdb, 0xe9, 0x32, 0x01, 0x00, 0x00, } diff --git a/x/globalfee/types/params.pb.go b/x/globalfee/types/params.pb.go index f6bc1a627..fe726838f 100644 --- a/x/globalfee/types/params.pb.go +++ b/x/globalfee/types/params.pb.go @@ -108,29 +108,29 @@ var fileDescriptor_f135cd41f9af437e = []byte{ // 402 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xc1, 0xaa, 0xd3, 0x40, 0x14, 0x86, 0x13, 0x23, 0x17, 0x8c, 0x1b, 0x09, 0x17, 0x89, 0x97, 0x4b, 0x52, 0x22, 0x48, 0x41, - 0x6f, 0x86, 0xeb, 0x75, 0xe5, 0x32, 0x8a, 0xc5, 0x45, 0xb1, 0x94, 0xba, 0x71, 0x33, 0x9c, 0xc4, - 0xe9, 0x38, 0x98, 0xc9, 0x84, 0x9c, 0x49, 0x69, 0x96, 0xbe, 0x81, 0x0f, 0xe0, 0x13, 0xf8, 0x0c, - 0x3e, 0x40, 0x97, 0x5d, 0xba, 0x8a, 0xd2, 0xee, 0xba, 0xf4, 0x09, 0x24, 0x49, 0xab, 0x2d, 0xbd, - 0x5d, 0xe5, 0x70, 0xf2, 0xfd, 0xff, 0xf9, 0xcf, 0xcc, 0xd8, 0x8f, 0x39, 0x08, 0x20, 0x3c, 0x55, - 0x31, 0xa4, 0x53, 0xc6, 0xc8, 0xec, 0x3a, 0x66, 0x1a, 0xae, 0x49, 0x0e, 0x05, 0x48, 0x0c, 0xf3, - 0x42, 0x69, 0xe5, 0x3c, 0x6c, 0xa0, 0xf0, 0x1f, 0x14, 0x6e, 0xa1, 0x0b, 0x2f, 0x51, 0x28, 0x15, - 0x92, 0x18, 0xf0, 0xbf, 0x32, 0x51, 0x22, 0xeb, 0x74, 0x17, 0xe7, 0x5c, 0x71, 0xd5, 0x96, 0xa4, - 0xa9, 0xba, 0x6e, 0xf0, 0xcd, 0xb2, 0xcf, 0x46, 0xad, 0xbd, 0xf3, 0xc3, 0xb4, 0x1d, 0x29, 0x32, - 0x21, 0x4b, 0x49, 0x39, 0x20, 0xcd, 0x0b, 0x91, 0x30, 0x74, 0xcd, 0x9e, 0xd5, 0xbf, 0xff, 0xfc, - 0x32, 0xec, 0xec, 0xc3, 0xc6, 0x7e, 0x37, 0x33, 0x7c, 0xcd, 0x92, 0x57, 0x4a, 0x64, 0x51, 0xbe, - 0xa8, 0x7d, 0x63, 0x53, 0xfb, 0x97, 0xc7, 0xfa, 0x67, 0x4a, 0x0a, 0xcd, 0x64, 0xae, 0xab, 0x3f, - 0xb5, 0xff, 0xa8, 0x02, 0x99, 0xbe, 0x0c, 0x8e, 0xa9, 0xe0, 0xfb, 0x2f, 0xff, 0x29, 0x17, 0xfa, - 0x53, 0x19, 0x87, 0x89, 0x92, 0x64, 0xbb, 0x4b, 0xf7, 0xb9, 0xc2, 0x8f, 0x9f, 0x89, 0xae, 0x72, - 0x86, 0xbb, 0x81, 0x38, 0x7e, 0xb0, 0xf5, 0x18, 0x00, 0x8e, 0x5a, 0x07, 0xe7, 0x8b, 0x69, 0xbb, - 0x71, 0x95, 0x03, 0x22, 0x95, 0x22, 0xa3, 0x53, 0xc6, 0xa8, 0x44, 0x4e, 0x5b, 0x9d, 0x7b, 0xa7, - 0x67, 0xf5, 0xef, 0x45, 0x6f, 0x37, 0xb5, 0x1f, 0x9c, 0x62, 0x0e, 0x82, 0xfa, 0x5d, 0xd0, 0x53, - 0x6c, 0x30, 0x3e, 0xef, 0x7e, 0x0d, 0x45, 0xf6, 0x86, 0xb1, 0x21, 0xf2, 0x49, 0xd3, 0x76, 0xde, - 0xd9, 0x4f, 0x24, 0xcc, 0xa9, 0x56, 0x1a, 0x52, 0x7a, 0x8b, 0xb8, 0x59, 0xb8, 0x44, 0xe0, 0xcc, - 0xb5, 0x7a, 0x66, 0xff, 0xee, 0xd8, 0x97, 0x30, 0x9f, 0x34, 0x70, 0x74, 0xe8, 0x36, 0x00, 0x7c, - 0xdf, 0x60, 0xd1, 0x70, 0xb1, 0xf2, 0xcc, 0xe5, 0xca, 0x33, 0x7f, 0xaf, 0x3c, 0xf3, 0xeb, 0xda, - 0x33, 0x96, 0x6b, 0xcf, 0xf8, 0xb9, 0xf6, 0x8c, 0x0f, 0x37, 0x7b, 0xa7, 0x95, 0xb1, 0x52, 0x17, - 0x2a, 0xbb, 0x52, 0x05, 0xdf, 0xd5, 0x64, 0xf6, 0x82, 0xcc, 0xf7, 0x9e, 0x52, 0x1b, 0x3b, 0x3e, - 0x6b, 0x2f, 0xfd, 0xe6, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4c, 0x73, 0xc7, 0xec, 0x69, 0x02, + 0x6f, 0x86, 0xeb, 0xc5, 0x8d, 0xcb, 0x28, 0x16, 0x17, 0xc5, 0x52, 0xea, 0xc6, 0xcd, 0x70, 0x12, + 0xa7, 0xe3, 0x60, 0x26, 0x13, 0x72, 0x26, 0xa5, 0x59, 0xfa, 0x06, 0x3e, 0x80, 0x4f, 0xe0, 0x33, + 0xf8, 0x00, 0x5d, 0x76, 0xe9, 0x2a, 0x4a, 0xbb, 0xeb, 0xd2, 0x27, 0x90, 0x24, 0xad, 0xb6, 0xf4, + 0x76, 0x95, 0xc3, 0xc9, 0xf7, 0xff, 0xe7, 0x3f, 0x33, 0x63, 0x3f, 0xe6, 0x20, 0x80, 0xf0, 0x54, + 0xc5, 0x90, 0x4e, 0x19, 0x23, 0xb3, 0xeb, 0x98, 0x69, 0xb8, 0x26, 0x39, 0x14, 0x20, 0x31, 0xcc, + 0x0b, 0xa5, 0x95, 0xf3, 0xb0, 0x81, 0xc2, 0x7f, 0x50, 0xb8, 0x85, 0x2e, 0xbc, 0x44, 0xa1, 0x54, + 0x48, 0x62, 0xc0, 0xff, 0xca, 0x44, 0x89, 0xac, 0xd3, 0x5d, 0x9c, 0x73, 0xc5, 0x55, 0x5b, 0x92, + 0xa6, 0xea, 0xba, 0xc1, 0x37, 0xcb, 0x3e, 0x1b, 0xb5, 0xf6, 0xce, 0x0f, 0xd3, 0x76, 0xa4, 0xc8, + 0x84, 0x2c, 0x25, 0xe5, 0x80, 0x34, 0x2f, 0x44, 0xc2, 0xd0, 0x35, 0x7b, 0x56, 0xff, 0xfe, 0xf3, + 0xcb, 0xb0, 0xb3, 0x0f, 0x1b, 0xfb, 0xdd, 0xcc, 0xf0, 0x35, 0x4b, 0x5e, 0x29, 0x91, 0x45, 0xf9, + 0xa2, 0xf6, 0x8d, 0x4d, 0xed, 0x5f, 0x1e, 0xeb, 0x9f, 0x29, 0x29, 0x34, 0x93, 0xb9, 0xae, 0xfe, + 0xd4, 0xfe, 0xa3, 0x0a, 0x64, 0xfa, 0x32, 0x38, 0xa6, 0x82, 0xef, 0xbf, 0xfc, 0xa7, 0x5c, 0xe8, + 0x4f, 0x65, 0x1c, 0x26, 0x4a, 0x92, 0xed, 0x2e, 0xdd, 0xe7, 0x0a, 0x3f, 0x7e, 0x26, 0xba, 0xca, + 0x19, 0xee, 0x06, 0xe2, 0xf8, 0xc1, 0xd6, 0x63, 0x00, 0x38, 0x6a, 0x1d, 0x9c, 0x2f, 0xa6, 0xed, + 0xc6, 0x55, 0x0e, 0x88, 0x54, 0x8a, 0x8c, 0x4e, 0x19, 0xa3, 0x12, 0x39, 0x6d, 0x75, 0xee, 0x9d, + 0x9e, 0xd5, 0xbf, 0x17, 0xbd, 0xdd, 0xd4, 0x7e, 0x70, 0x8a, 0x39, 0x08, 0xea, 0x77, 0x41, 0x4f, + 0xb1, 0xc1, 0xf8, 0xbc, 0xfb, 0x35, 0x14, 0xd9, 0x1b, 0xc6, 0x86, 0xc8, 0x27, 0x4d, 0xdb, 0x79, + 0x67, 0x3f, 0x91, 0x30, 0xa7, 0x5a, 0x69, 0x48, 0xe9, 0x2d, 0xe2, 0x66, 0xe1, 0x12, 0x81, 0x33, + 0xd7, 0xea, 0x99, 0xfd, 0xbb, 0x63, 0x5f, 0xc2, 0x7c, 0xd2, 0xc0, 0xd1, 0xa1, 0xdb, 0x00, 0xf0, + 0x7d, 0x83, 0x45, 0xc3, 0xc5, 0xca, 0x33, 0x97, 0x2b, 0xcf, 0xfc, 0xbd, 0xf2, 0xcc, 0xaf, 0x6b, + 0xcf, 0x58, 0xae, 0x3d, 0xe3, 0xe7, 0xda, 0x33, 0x3e, 0xdc, 0xec, 0x9d, 0x56, 0xc6, 0x4a, 0x5d, + 0xa8, 0xec, 0x4a, 0x15, 0x7c, 0x57, 0x93, 0xd9, 0x0b, 0x32, 0xdf, 0x7b, 0x4a, 0x6d, 0xec, 0xf8, + 0xac, 0xbd, 0xf4, 0x9b, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x0d, 0x68, 0x4b, 0x82, 0x69, 0x02, 0x00, 0x00, } diff --git a/x/globalfee/types/query.pb.go b/x/globalfee/types/query.pb.go index 1f802433c..b3c41c2c8 100644 --- a/x/globalfee/types/query.pb.go +++ b/x/globalfee/types/query.pb.go @@ -140,8 +140,8 @@ var fileDescriptor_12a736cede25d10a = []byte{ 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x38, 0xe1, 0xb1, 0x1c, 0xc3, 0x85, 0xc7, 0x72, 0x0c, 0x37, 0x1e, 0xcb, 0x31, 0x44, 0x19, 0xa7, 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea, 0xe7, 0xa5, 0x96, 0x96, 0x14, 0xe5, 0xe7, 0xe9, 0xe6, 0x17, - 0xa5, 0xc3, 0xd8, 0xfa, 0x65, 0x26, 0xfa, 0x15, 0x48, 0xe6, 0x96, 0x54, 0x16, 0xa4, 0x16, 0x27, - 0xb1, 0x81, 0x83, 0xd5, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x30, 0xe5, 0x3b, 0xc3, 0xed, 0x01, + 0xa5, 0xc3, 0xd8, 0xfa, 0x65, 0xa6, 0xfa, 0x15, 0x48, 0xe6, 0x96, 0x54, 0x16, 0xa4, 0x16, 0x27, + 0xb1, 0x81, 0x83, 0xd5, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x71, 0xfe, 0xb7, 0xad, 0xed, 0x01, 0x00, 0x00, } diff --git a/x/globalfee/types/tx.pb.go b/x/globalfee/types/tx.pb.go index 31da98227..961f4d490 100644 --- a/x/globalfee/types/tx.pb.go +++ b/x/globalfee/types/tx.pb.go @@ -159,9 +159,9 @@ var fileDescriptor_1b7ff262ac5784d9 = []byte{ 0xf2, 0x88, 0x93, 0xef, 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x38, 0xe1, 0xb1, 0x1c, 0xc3, 0x85, 0xc7, 0x72, 0x0c, 0x37, 0x1e, 0xcb, 0x31, 0x44, 0x19, 0xa7, 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea, 0xe7, 0xa5, 0x96, 0x96, 0x14, 0xe5, - 0xe7, 0xe9, 0xe6, 0x17, 0xa5, 0xc3, 0xd8, 0xfa, 0x65, 0x26, 0xfa, 0x15, 0x48, 0x71, 0x58, 0x52, - 0x59, 0x90, 0x5a, 0x9c, 0xc4, 0x06, 0x8e, 0x25, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x88, - 0xc9, 0x07, 0xad, 0x62, 0x02, 0x00, 0x00, + 0xe7, 0xe9, 0xe6, 0x17, 0xa5, 0xc3, 0xd8, 0xfa, 0x65, 0xa6, 0xfa, 0x15, 0x48, 0x71, 0x58, 0x52, + 0x59, 0x90, 0x5a, 0x9c, 0xc4, 0x06, 0x8e, 0x25, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc9, + 0xd2, 0x8b, 0xc3, 0x62, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/ibc-hooks/client/cli/query.go b/x/ibc-hooks/client/cli/query.go index 90da41aa0..8fb1c718d 100644 --- a/x/ibc-hooks/client/cli/query.go +++ b/x/ibc-hooks/client/cli/query.go @@ -4,11 +4,11 @@ import ( "fmt" "strings" - "github.com/neutron-org/neutron/v4/x/ibc-hooks/utils" + "github.com/neutron-org/neutron/v5/x/ibc-hooks/utils" "github.com/cosmos/cosmos-sdk/client" - "github.com/neutron-org/neutron/v4/x/ibc-hooks/types" + "github.com/neutron-org/neutron/v5/x/ibc-hooks/types" "github.com/cosmos/cosmos-sdk/client/flags" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/ibc-hooks/ibc_middleware_test.go b/x/ibc-hooks/ibc_middleware_test.go index 0291417f9..ea7b4a25b 100644 --- a/x/ibc-hooks/ibc_middleware_test.go +++ b/x/ibc-hooks/ibc_middleware_test.go @@ -15,10 +15,10 @@ import ( ibctesting "github.com/cosmos/ibc-go/v8/testing" "github.com/stretchr/testify/suite" - "github.com/neutron-org/neutron/v4/app/params" - "github.com/neutron-org/neutron/v4/testutil" - "github.com/neutron-org/neutron/v4/x/ibc-hooks/testutils" - "github.com/neutron-org/neutron/v4/x/ibc-hooks/utils" + "github.com/neutron-org/neutron/v5/app/params" + "github.com/neutron-org/neutron/v5/testutil" + "github.com/neutron-org/neutron/v5/x/ibc-hooks/testutils" + "github.com/neutron-org/neutron/v5/x/ibc-hooks/utils" transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck diff --git a/x/ibc-hooks/ics4_middleware.go b/x/ibc-hooks/ics4_middleware.go index 29f8dd4c4..6e5d72d0b 100644 --- a/x/ibc-hooks/ics4_middleware.go +++ b/x/ibc-hooks/ics4_middleware.go @@ -7,7 +7,7 @@ import ( capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck - "github.com/neutron-org/neutron/v4/x/ibc-hooks/types" + "github.com/neutron-org/neutron/v5/x/ibc-hooks/types" // ibc-go channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" diff --git a/x/ibc-hooks/sdkmodule.go b/x/ibc-hooks/sdkmodule.go index ee71c4c73..248b61057 100644 --- a/x/ibc-hooks/sdkmodule.go +++ b/x/ibc-hooks/sdkmodule.go @@ -12,8 +12,8 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/ibc-hooks/client/cli" - "github.com/neutron-org/neutron/v4/x/ibc-hooks/types" + "github.com/neutron-org/neutron/v5/x/ibc-hooks/client/cli" + "github.com/neutron-org/neutron/v5/x/ibc-hooks/types" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" diff --git a/x/ibc-hooks/testutils/testing_hooks.go b/x/ibc-hooks/testutils/testing_hooks.go index ccfdd6bd5..3d7f29dd7 100644 --- a/x/ibc-hooks/testutils/testing_hooks.go +++ b/x/ibc-hooks/testutils/testing_hooks.go @@ -8,7 +8,7 @@ import ( channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" - ibchooks "github.com/neutron-org/neutron/v4/x/ibc-hooks" + ibchooks "github.com/neutron-org/neutron/v5/x/ibc-hooks" ) var ( diff --git a/x/ibc-hooks/utils/utils.go b/x/ibc-hooks/utils/utils.go index 11e307889..4e0619da8 100644 --- a/x/ibc-hooks/utils/utils.go +++ b/x/ibc-hooks/utils/utils.go @@ -6,7 +6,7 @@ import ( "github.com/cosmos/cosmos-sdk/types/address" - "github.com/neutron-org/neutron/v4/x/ibc-hooks/types" + "github.com/neutron-org/neutron/v5/x/ibc-hooks/types" sdk "github.com/cosmos/cosmos-sdk/types" transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" diff --git a/x/ibc-hooks/wasm_hook.go b/x/ibc-hooks/wasm_hook.go index c87d03faa..cbbd55054 100644 --- a/x/ibc-hooks/wasm_hook.go +++ b/x/ibc-hooks/wasm_hook.go @@ -6,7 +6,7 @@ import ( "cosmossdk.io/math" - "github.com/neutron-org/neutron/v4/x/ibc-hooks/utils" + "github.com/neutron-org/neutron/v5/x/ibc-hooks/utils" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" @@ -16,7 +16,7 @@ import ( channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" - "github.com/neutron-org/neutron/v4/x/ibc-hooks/types" + "github.com/neutron-org/neutron/v5/x/ibc-hooks/types" ) type ContractAck struct { diff --git a/x/ibc-rate-limit/target/.rustc_info.json b/x/ibc-rate-limit/target/.rustc_info.json new file mode 100644 index 000000000..2fbd7f6db --- /dev/null +++ b/x/ibc-rate-limit/target/.rustc_info.json @@ -0,0 +1 @@ +{"rustc_fingerprint":11425837224790591013,"outputs":{"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.81.0 (eeb90cda1 2024-09-04) (Homebrew)\nbinary: rustc\ncommit-hash: eeb90cda1969383f56a2637cbd3037bdf598841c\ncommit-date: 2024-09-04\nhost: x86_64-apple-darwin\nrelease: 1.81.0\nLLVM version: 18.1.8\n","stderr":""},"15729799797837862367":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n/usr/local/Cellar/rust/1.81.0\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_feature=\"cmpxchg16b\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_feature=\"sse3\"\ntarget_feature=\"sse4.1\"\ntarget_feature=\"ssse3\"\ntarget_has_atomic=\"128\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"macos\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"apple\"\nunix\n","stderr":""},"16495917692426387086":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n","stderr":""}},"successes":{}} \ No newline at end of file diff --git a/x/interchainqueries/client/cli/query.go b/x/interchainqueries/client/cli/query.go index 9ceee5da5..90f6fea84 100644 --- a/x/interchainqueries/client/cli/query.go +++ b/x/interchainqueries/client/cli/query.go @@ -9,7 +9,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) const ( diff --git a/x/interchainqueries/client/cli/query_params.go b/x/interchainqueries/client/cli/query_params.go index b7c679073..4fb95a5d9 100644 --- a/x/interchainqueries/client/cli/query_params.go +++ b/x/interchainqueries/client/cli/query_params.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) func CmdQueryParams() *cobra.Command { diff --git a/x/interchainqueries/client/cli/tx.go b/x/interchainqueries/client/cli/tx.go index e70f5477d..4e30ec8a7 100644 --- a/x/interchainqueries/client/cli/tx.go +++ b/x/interchainqueries/client/cli/tx.go @@ -11,7 +11,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/tx" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) // GetTxCmd returns the transaction commands for this module diff --git a/x/interchainqueries/genesis.go b/x/interchainqueries/genesis.go index 4f7d837ba..5cdad98c1 100644 --- a/x/interchainqueries/genesis.go +++ b/x/interchainqueries/genesis.go @@ -5,8 +5,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/interchainqueries/keeper" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/x/interchainqueries/keeper" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) // InitGenesis initializes the capability module's state from a provided genesis diff --git a/x/interchainqueries/genesis_test.go b/x/interchainqueries/genesis_test.go index 2313d60e4..e93f123ca 100644 --- a/x/interchainqueries/genesis_test.go +++ b/x/interchainqueries/genesis_test.go @@ -5,10 +5,10 @@ import ( "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - keepertest "github.com/neutron-org/neutron/v4/testutil/interchainqueries/keeper" - "github.com/neutron-org/neutron/v4/x/interchainqueries" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + keepertest "github.com/neutron-org/neutron/v5/testutil/interchainqueries/keeper" + "github.com/neutron-org/neutron/v5/x/interchainqueries" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) func TestGenesis(t *testing.T) { diff --git a/x/interchainqueries/keeper/grpc_query.go b/x/interchainqueries/keeper/grpc_query.go index eef0fb642..767109134 100644 --- a/x/interchainqueries/keeper/grpc_query.go +++ b/x/interchainqueries/keeper/grpc_query.go @@ -14,7 +14,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) var _ types.QueryServer = Keeper{} diff --git a/x/interchainqueries/keeper/grpc_query_params.go b/x/interchainqueries/keeper/grpc_query_params.go index d0316c257..3c3cc971c 100644 --- a/x/interchainqueries/keeper/grpc_query_params.go +++ b/x/interchainqueries/keeper/grpc_query_params.go @@ -7,7 +7,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { diff --git a/x/interchainqueries/keeper/grpc_query_params_test.go b/x/interchainqueries/keeper/grpc_query_params_test.go index f1de7e024..015d701fe 100644 --- a/x/interchainqueries/keeper/grpc_query_params_test.go +++ b/x/interchainqueries/keeper/grpc_query_params_test.go @@ -5,8 +5,8 @@ import ( "github.com/stretchr/testify/require" - testkeeper "github.com/neutron-org/neutron/v4/testutil/interchainqueries/keeper" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + testkeeper "github.com/neutron-org/neutron/v5/testutil/interchainqueries/keeper" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) func TestParamsQuery(t *testing.T) { diff --git a/x/interchainqueries/keeper/grpc_query_test.go b/x/interchainqueries/keeper/grpc_query_test.go index bf3849e87..0f9908fd3 100644 --- a/x/interchainqueries/keeper/grpc_query_test.go +++ b/x/interchainqueries/keeper/grpc_query_test.go @@ -12,8 +12,8 @@ import ( ibchost "github.com/cosmos/ibc-go/v8/modules/core/exported" - "github.com/neutron-org/neutron/v4/x/interchainqueries/keeper" - iqtypes "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/x/interchainqueries/keeper" + iqtypes "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) func (suite *KeeperTestSuite) TestRemoteLastHeight() { diff --git a/x/interchainqueries/keeper/keeper.go b/x/interchainqueries/keeper/keeper.go index e22fd27e1..4a39fbadb 100644 --- a/x/interchainqueries/keeper/keeper.go +++ b/x/interchainqueries/keeper/keeper.go @@ -15,7 +15,7 @@ import ( ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" tendermintLightClientTypes "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) const ( diff --git a/x/interchainqueries/keeper/keeper_test.go b/x/interchainqueries/keeper/keeper_test.go index 6a7a61a2f..9ac2b5228 100644 --- a/x/interchainqueries/keeper/keeper_test.go +++ b/x/interchainqueries/keeper/keeper_test.go @@ -12,7 +12,7 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/stretchr/testify/suite" - "github.com/neutron-org/neutron/v4/app/params" + "github.com/neutron-org/neutron/v5/app/params" wasmKeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" abci "github.com/cometbft/cometbft/abci/types" @@ -21,9 +21,9 @@ import ( banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/neutron-org/neutron/v4/testutil" - "github.com/neutron-org/neutron/v4/x/interchainqueries/keeper" - iqtypes "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/testutil" + "github.com/neutron-org/neutron/v5/x/interchainqueries/keeper" + iqtypes "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) var reflectContractPath = "../../../wasmbinding/testdata/reflect.wasm" diff --git a/x/interchainqueries/keeper/migrations.go b/x/interchainqueries/keeper/migrations.go index a036ea33e..01beba7f0 100644 --- a/x/interchainqueries/keeper/migrations.go +++ b/x/interchainqueries/keeper/migrations.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - v3 "github.com/neutron-org/neutron/v4/x/interchainqueries/migrations/v3" + v3 "github.com/neutron-org/neutron/v5/x/interchainqueries/migrations/v3" ) // Migrator is a struct for handling in-place store migrations. diff --git a/x/interchainqueries/keeper/msg_server.go b/x/interchainqueries/keeper/msg_server.go index 5b3cc345a..50f30fa97 100644 --- a/x/interchainqueries/keeper/msg_server.go +++ b/x/interchainqueries/keeper/msg_server.go @@ -18,7 +18,7 @@ import ( ibccommitmenttypes "github.com/cosmos/ibc-go/v8/modules/core/23-commitment/types" ics23 "github.com/cosmos/ics23/go" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) var _ types.MsgServer = msgServer{} diff --git a/x/interchainqueries/keeper/msg_server_test.go b/x/interchainqueries/keeper/msg_server_test.go index ce8f9fe60..26b30bc94 100644 --- a/x/interchainqueries/keeper/msg_server_test.go +++ b/x/interchainqueries/keeper/msg_server_test.go @@ -8,10 +8,10 @@ import ( ibchost "github.com/cosmos/ibc-go/v8/modules/core/exported" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil" - testkeeper "github.com/neutron-org/neutron/v4/testutil/interchainqueries/keeper" - "github.com/neutron-org/neutron/v4/x/interchainqueries/keeper" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/testutil" + testkeeper "github.com/neutron-org/neutron/v5/testutil/interchainqueries/keeper" + "github.com/neutron-org/neutron/v5/x/interchainqueries/keeper" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) func TestMsgRegisterInterchainQueryValidate(t *testing.T) { diff --git a/x/interchainqueries/keeper/params.go b/x/interchainqueries/keeper/params.go index a9622d2ad..c955a9f4c 100644 --- a/x/interchainqueries/keeper/params.go +++ b/x/interchainqueries/keeper/params.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) // GetParams get all parameters as types.Params diff --git a/x/interchainqueries/keeper/params_test.go b/x/interchainqueries/keeper/params_test.go index 37320eed8..e99112909 100644 --- a/x/interchainqueries/keeper/params_test.go +++ b/x/interchainqueries/keeper/params_test.go @@ -5,8 +5,8 @@ import ( "github.com/stretchr/testify/require" - testkeeper "github.com/neutron-org/neutron/v4/testutil/interchainqueries/keeper" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + testkeeper "github.com/neutron-org/neutron/v5/testutil/interchainqueries/keeper" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) func TestGetParams(t *testing.T) { diff --git a/x/interchainqueries/keeper/process_block_results.go b/x/interchainqueries/keeper/process_block_results.go index 566bf48df..a45bf6d7e 100644 --- a/x/interchainqueries/keeper/process_block_results.go +++ b/x/interchainqueries/keeper/process_block_results.go @@ -17,7 +17,7 @@ import ( "github.com/cosmos/ibc-go/v8/modules/core/exported" tendermintLightClientTypes "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) // deterministicExecTxResult strips non-deterministic fields from diff --git a/x/interchainqueries/keeper/process_block_results_test.go b/x/interchainqueries/keeper/process_block_results_test.go index 1c218675f..fd9205b8a 100644 --- a/x/interchainqueries/keeper/process_block_results_test.go +++ b/x/interchainqueries/keeper/process_block_results_test.go @@ -10,8 +10,8 @@ import ( ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" "github.com/golang/mock/gomock" - icqtestkeeper "github.com/neutron-org/neutron/v4/testutil/interchainqueries/keeper" - mock_types "github.com/neutron-org/neutron/v4/testutil/mocks/interchainqueries/types" + icqtestkeeper "github.com/neutron-org/neutron/v5/testutil/interchainqueries/keeper" + mock_types "github.com/neutron-org/neutron/v5/testutil/mocks/interchainqueries/types" "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/cometbft/cometbft/crypto/tmhash" @@ -29,9 +29,9 @@ import ( codectypes "github.com/cosmos/cosmos-sdk/codec/types" clientkeeper "github.com/cosmos/ibc-go/v8/modules/core/02-client/keeper" - "github.com/neutron-org/neutron/v4/testutil" - iqkeeper "github.com/neutron-org/neutron/v4/x/interchainqueries/keeper" - iqtypes "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/testutil" + iqkeeper "github.com/neutron-org/neutron/v5/x/interchainqueries/keeper" + iqtypes "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) // CreateTMClientHeader creates a TM header to update the TM client. Args are passed in to allow diff --git a/x/interchainqueries/migrations/v3/migration.go b/x/interchainqueries/migrations/v3/migration.go index a77e4bed8..4f04d83f9 100644 --- a/x/interchainqueries/migrations/v3/migration.go +++ b/x/interchainqueries/migrations/v3/migration.go @@ -8,7 +8,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) func MigrateParams(ctx sdk.Context, cdc codec.BinaryCodec, storeKey store.StoreKey) error { diff --git a/x/interchainqueries/migrations/v3/migration_test.go b/x/interchainqueries/migrations/v3/migration_test.go index c36014df8..48dbd558a 100644 --- a/x/interchainqueries/migrations/v3/migration_test.go +++ b/x/interchainqueries/migrations/v3/migration_test.go @@ -7,9 +7,9 @@ import ( "github.com/stretchr/testify/suite" "gopkg.in/yaml.v2" - "github.com/neutron-org/neutron/v4/testutil" - v3 "github.com/neutron-org/neutron/v4/x/interchainqueries/migrations/v3" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/testutil" + v3 "github.com/neutron-org/neutron/v5/x/interchainqueries/migrations/v3" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) type V3ICQMigrationTestSuite struct { diff --git a/x/interchainqueries/module.go b/x/interchainqueries/module.go index cf1572bd7..b97573a14 100644 --- a/x/interchainqueries/module.go +++ b/x/interchainqueries/module.go @@ -19,9 +19,9 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/interchainqueries/client/cli" - "github.com/neutron-org/neutron/v4/x/interchainqueries/keeper" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/x/interchainqueries/client/cli" + "github.com/neutron-org/neutron/v5/x/interchainqueries/keeper" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) var ( diff --git a/x/interchainqueries/module_simulation.go b/x/interchainqueries/module_simulation.go index 64d6877f6..a077a9073 100644 --- a/x/interchainqueries/module_simulation.go +++ b/x/interchainqueries/module_simulation.go @@ -7,9 +7,9 @@ import ( simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" - "github.com/neutron-org/neutron/v4/testutil/common/sample" - interchainqueriessimulation "github.com/neutron-org/neutron/v4/x/interchainqueries/simulation" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/testutil/common/sample" + interchainqueriessimulation "github.com/neutron-org/neutron/v5/x/interchainqueries/simulation" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) // avoid unused import issue diff --git a/x/interchainqueries/types/genesis.pb.go b/x/interchainqueries/types/genesis.pb.go index 1af0782c0..94451d85e 100644 --- a/x/interchainqueries/types/genesis.pb.go +++ b/x/interchainqueries/types/genesis.pb.go @@ -292,44 +292,44 @@ var fileDescriptor_ed312d37df0260a6 = []byte{ // 638 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x53, 0xcd, 0x6e, 0xd3, 0x40, 0x10, 0x8e, 0xd3, 0xb4, 0x25, 0x9b, 0xb4, 0xc0, 0xd2, 0x83, 0x5b, 0x09, 0x27, 0xa4, 0x02, 0x22, - 0xa4, 0x7a, 0x9b, 0xd2, 0x1b, 0x07, 0x44, 0x91, 0xf8, 0x2b, 0x87, 0xe2, 0x16, 0x24, 0xb8, 0x58, - 0xfe, 0x19, 0x9c, 0x55, 0x93, 0x5d, 0xb3, 0xbb, 0x0e, 0xf8, 0x2d, 0x78, 0x8e, 0x3e, 0x49, 0x8f, - 0x3d, 0x72, 0x02, 0xd4, 0x3e, 0x07, 0x12, 0xf2, 0xd8, 0xa1, 0x05, 0xd2, 0x9e, 0x3c, 0xfe, 0xf6, - 0x9b, 0x6f, 0x67, 0x67, 0xbe, 0x21, 0xf7, 0x05, 0x64, 0x46, 0x49, 0xc1, 0xb8, 0x30, 0xa0, 0xa2, - 0x61, 0xc0, 0xc5, 0xa7, 0x0c, 0x14, 0x07, 0xcd, 0x12, 0x10, 0xa0, 0xb9, 0x76, 0x53, 0x25, 0x8d, - 0xa4, 0xab, 0x15, 0xd1, 0xfd, 0x8f, 0xb8, 0xe6, 0x44, 0x52, 0x8f, 0xa5, 0x66, 0x61, 0xa0, 0x81, - 0x4d, 0x06, 0x21, 0x98, 0x60, 0xc0, 0x22, 0xc9, 0x45, 0x99, 0xba, 0xb6, 0x92, 0xc8, 0x44, 0x62, - 0xc8, 0x8a, 0xa8, 0x42, 0x3b, 0x3c, 0x8c, 0x58, 0x24, 0x15, 0xb0, 0x68, 0xc4, 0x41, 0x18, 0x36, - 0x19, 0x54, 0x51, 0x45, 0xb8, 0x77, 0x79, 0x69, 0x69, 0xa0, 0x82, 0x71, 0x55, 0x59, 0xef, 0x57, - 0x83, 0x5c, 0xf7, 0x20, 0xe1, 0xda, 0x80, 0x82, 0xf8, 0x4d, 0x06, 0x2a, 0xa7, 0xcb, 0xa4, 0xce, - 0x63, 0xdb, 0xea, 0x5a, 0xfd, 0x86, 0x57, 0xe7, 0x31, 0x5d, 0x21, 0xf3, 0xf2, 0xb3, 0x00, 0x65, - 0xd7, 0xbb, 0x56, 0xbf, 0xe9, 0x95, 0x3f, 0xf4, 0x36, 0x21, 0x85, 0x62, 0xee, 0x9b, 0x3c, 0x05, - 0x7b, 0x0e, 0x8f, 0x9a, 0x88, 0x1c, 0xe4, 0x29, 0xd0, 0x6d, 0xd2, 0x38, 0x84, 0x5c, 0xdb, 0x8d, - 0xee, 0x5c, 0xbf, 0xb5, 0xd5, 0x75, 0x2f, 0xed, 0x80, 0xbb, 0xfb, 0x6e, 0x17, 0x72, 0x0f, 0xd9, - 0x94, 0x91, 0x5b, 0x46, 0x05, 0x42, 0x07, 0x91, 0xe1, 0x52, 0x68, 0xff, 0x23, 0x1f, 0x19, 0x50, - 0xf6, 0x3c, 0xaa, 0xd3, 0x8b, 0x47, 0xcf, 0xf0, 0x84, 0xae, 0x93, 0xa5, 0x48, 0x0a, 0x01, 0x08, - 0xfa, 0x3c, 0xb6, 0x17, 0x90, 0xda, 0x3e, 0x07, 0x5f, 0xc6, 0x05, 0x29, 0x4b, 0xe3, 0xc0, 0x80, - 0x9f, 0x82, 0xe2, 0x32, 0xb6, 0x17, 0xf1, 0x6d, 0xed, 0x12, 0xdc, 0x43, 0x8c, 0xbe, 0x22, 0xbd, - 0x51, 0xa0, 0x8d, 0xaf, 0xb3, 0x70, 0xcc, 0x8d, 0x81, 0xd8, 0x57, 0xa0, 0xb3, 0x91, 0xf1, 0x47, - 0x32, 0x0a, 0x46, 0xfe, 0x10, 0x78, 0x32, 0x34, 0xf6, 0x35, 0xcc, 0x74, 0x0a, 0xe6, 0xfe, 0x94, - 0xe8, 0x21, 0xef, 0x75, 0x41, 0x7b, 0x81, 0x2c, 0x3a, 0x24, 0xeb, 0xb3, 0xb5, 0x14, 0x8c, 0xa5, - 0x81, 0xa9, 0x58, 0xb3, 0x6b, 0xf5, 0x5b, 0x5b, 0x6b, 0x2e, 0x0f, 0x23, 0xb7, 0x18, 0xa6, 0x5b, - 0x8d, 0x70, 0x32, 0x70, 0x4b, 0x21, 0xaf, 0x33, 0xe3, 0x22, 0x0f, 0x35, 0xaa, 0x9b, 0x80, 0x2c, - 0xc6, 0x90, 0x4a, 0xcd, 0x8d, 0x4d, 0xb0, 0xd3, 0xab, 0x6e, 0x69, 0x28, 0xb7, 0x30, 0x94, 0x5b, - 0x19, 0xca, 0x7d, 0x2a, 0xb9, 0xd8, 0xd9, 0x3c, 0xfe, 0xde, 0xa9, 0x1d, 0xfd, 0xe8, 0xf4, 0x13, - 0x6e, 0x86, 0x59, 0xe8, 0x46, 0x72, 0xcc, 0x2a, 0xf7, 0x95, 0x9f, 0x0d, 0x1d, 0x1f, 0xb2, 0x62, - 0x9c, 0x1a, 0x13, 0xb4, 0x37, 0xd5, 0xa6, 0x77, 0xc9, 0x72, 0xf9, 0x16, 0xdf, 0xf0, 0x31, 0xc8, - 0xcc, 0xd8, 0x2d, 0x6c, 0xc4, 0x52, 0x89, 0x1e, 0x94, 0x20, 0xdd, 0x24, 0x2b, 0xea, 0x8f, 0x99, - 0xfc, 0xc0, 0x4c, 0x1f, 0xda, 0x46, 0x32, 0x3d, 0x3f, 0x7b, 0x62, 0xca, 0xfa, 0x7b, 0x1b, 0x64, - 0x1e, 0xe7, 0x4f, 0x29, 0x69, 0xa4, 0x81, 0x19, 0xa2, 0xed, 0x9a, 0x1e, 0xc6, 0xf4, 0x06, 0x99, - 0x3b, 0x84, 0x1c, 0x6d, 0xd7, 0xf6, 0x8a, 0xb0, 0x77, 0x64, 0x91, 0xf6, 0xf3, 0x72, 0xb5, 0xf6, - 0x4d, 0x60, 0x80, 0x3e, 0x26, 0x0b, 0xa5, 0x9f, 0x31, 0xb1, 0xb5, 0x75, 0xe7, 0x0a, 0xa3, 0xed, - 0x21, 0x71, 0xa7, 0x51, 0xb4, 0xc1, 0xab, 0xd2, 0xe8, 0x7b, 0x72, 0xa1, 0x2c, 0xbf, 0xa2, 0xda, - 0x75, 0xec, 0xe5, 0x83, 0x2b, 0xc4, 0xfe, 0x59, 0x1a, 0xef, 0xa6, 0xfa, 0x0b, 0xe0, 0xa0, 0x77, - 0xde, 0x1e, 0x9f, 0x3a, 0xd6, 0xc9, 0xa9, 0x63, 0xfd, 0x3c, 0x75, 0xac, 0xaf, 0x67, 0x4e, 0xed, - 0xe4, 0xcc, 0xa9, 0x7d, 0x3b, 0x73, 0x6a, 0x1f, 0x1e, 0x5d, 0x98, 0x40, 0x75, 0xc5, 0x86, 0x54, - 0xc9, 0x34, 0x66, 0x93, 0x6d, 0xf6, 0x65, 0xc6, 0xe6, 0xe2, 0x68, 0xc2, 0x05, 0xdc, 0xdc, 0x87, - 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x7b, 0x34, 0x51, 0x13, 0x7e, 0x04, 0x00, 0x00, + 0xa4, 0x7a, 0x9b, 0x02, 0x27, 0x0e, 0x88, 0x22, 0xf1, 0x57, 0x0e, 0xc5, 0x2d, 0x48, 0x70, 0xb1, + 0xfc, 0x33, 0x38, 0xab, 0x26, 0xbb, 0x66, 0x77, 0x1d, 0xf0, 0x5b, 0xf0, 0x1c, 0x7d, 0x92, 0x1e, + 0x7b, 0xe4, 0x04, 0xa8, 0x7d, 0x0e, 0x24, 0xe4, 0xb1, 0x43, 0x0b, 0xa4, 0x3d, 0x79, 0xfc, 0xed, + 0x37, 0xdf, 0xce, 0xce, 0x7c, 0x43, 0xee, 0x0a, 0xc8, 0x8c, 0x92, 0x82, 0x71, 0x61, 0x40, 0x45, + 0xc3, 0x80, 0x8b, 0x4f, 0x19, 0x28, 0x0e, 0x9a, 0x25, 0x20, 0x40, 0x73, 0xed, 0xa6, 0x4a, 0x1a, + 0x49, 0x57, 0x2b, 0xa2, 0xfb, 0x1f, 0x71, 0xcd, 0x89, 0xa4, 0x1e, 0x4b, 0xcd, 0xc2, 0x40, 0x03, + 0x9b, 0x0c, 0x42, 0x30, 0xc1, 0x80, 0x45, 0x92, 0x8b, 0x32, 0x75, 0x6d, 0x25, 0x91, 0x89, 0xc4, + 0x90, 0x15, 0x51, 0x85, 0x76, 0x78, 0x18, 0xb1, 0x48, 0x2a, 0x60, 0xd1, 0x88, 0x83, 0x30, 0x6c, + 0x32, 0xa8, 0xa2, 0x8a, 0x70, 0xe7, 0xe2, 0xd2, 0xd2, 0x40, 0x05, 0xe3, 0xaa, 0xb2, 0xde, 0xaf, + 0x06, 0xb9, 0xea, 0x41, 0xc2, 0xb5, 0x01, 0x05, 0xf1, 0x9b, 0x0c, 0x54, 0x4e, 0x97, 0x49, 0x9d, + 0xc7, 0xb6, 0xd5, 0xb5, 0xfa, 0x0d, 0xaf, 0xce, 0x63, 0xba, 0x42, 0xe6, 0xe5, 0x67, 0x01, 0xca, + 0xae, 0x77, 0xad, 0x7e, 0xd3, 0x2b, 0x7f, 0xe8, 0x4d, 0x42, 0x0a, 0xc5, 0xdc, 0x37, 0x79, 0x0a, + 0xf6, 0x1c, 0x1e, 0x35, 0x11, 0xd9, 0xcf, 0x53, 0xa0, 0x0f, 0x48, 0xe3, 0x00, 0x72, 0x6d, 0x37, + 0xba, 0x73, 0xfd, 0xd6, 0x56, 0xd7, 0xbd, 0xb0, 0x03, 0xee, 0xce, 0xbb, 0x1d, 0xc8, 0x3d, 0x64, + 0x53, 0x46, 0x6e, 0x18, 0x15, 0x08, 0x1d, 0x44, 0x86, 0x4b, 0xa1, 0xfd, 0x8f, 0x7c, 0x64, 0x40, + 0xd9, 0xf3, 0xa8, 0x4e, 0xcf, 0x1f, 0x3d, 0xc3, 0x13, 0xba, 0x4e, 0x96, 0x22, 0x29, 0x04, 0x20, + 0xe8, 0xf3, 0xd8, 0x5e, 0x40, 0x6a, 0xfb, 0x0c, 0x7c, 0x19, 0x17, 0xa4, 0x2c, 0x8d, 0x03, 0x03, + 0x7e, 0x0a, 0x8a, 0xcb, 0xd8, 0x5e, 0xc4, 0xb7, 0xb5, 0x4b, 0x70, 0x17, 0x31, 0xfa, 0x8a, 0xf4, + 0x46, 0x81, 0x36, 0xbe, 0xce, 0xc2, 0x31, 0x37, 0x06, 0x62, 0x5f, 0x81, 0xce, 0x46, 0xc6, 0x1f, + 0xc9, 0x28, 0x18, 0xf9, 0x43, 0xe0, 0xc9, 0xd0, 0xd8, 0x57, 0x30, 0xd3, 0x29, 0x98, 0x7b, 0x53, + 0xa2, 0x87, 0xbc, 0xd7, 0x05, 0xed, 0x05, 0xb2, 0xe8, 0x90, 0xac, 0xcf, 0xd6, 0x52, 0x30, 0x96, + 0x06, 0xa6, 0x62, 0xcd, 0xae, 0xd5, 0x6f, 0x6d, 0xad, 0xb9, 0x3c, 0x8c, 0xdc, 0x62, 0x98, 0x6e, + 0x35, 0xc2, 0xc9, 0xc0, 0x2d, 0x85, 0xbc, 0xce, 0x8c, 0x8b, 0x3c, 0xd4, 0xa8, 0x6e, 0x02, 0xb2, + 0x18, 0x43, 0x2a, 0x35, 0x37, 0x36, 0xc1, 0x4e, 0xaf, 0xba, 0xa5, 0xa1, 0xdc, 0xc2, 0x50, 0x6e, + 0x65, 0x28, 0xf7, 0xa9, 0xe4, 0x62, 0x7b, 0xf3, 0xe8, 0x7b, 0xa7, 0x76, 0xf8, 0xa3, 0xd3, 0x4f, + 0xb8, 0x19, 0x66, 0xa1, 0x1b, 0xc9, 0x31, 0xab, 0xdc, 0x57, 0x7e, 0x36, 0x74, 0x7c, 0xc0, 0x8a, + 0x71, 0x6a, 0x4c, 0xd0, 0xde, 0x54, 0x9b, 0xde, 0x26, 0xcb, 0xe5, 0x5b, 0x7c, 0xc3, 0xc7, 0x20, + 0x33, 0x63, 0xb7, 0xb0, 0x11, 0x4b, 0x25, 0xba, 0x5f, 0x82, 0x74, 0x93, 0xac, 0xa8, 0x3f, 0x66, + 0xf2, 0x03, 0x33, 0x7d, 0x68, 0x1b, 0xc9, 0xf4, 0xec, 0xec, 0x89, 0x29, 0xeb, 0xef, 0x6d, 0x90, + 0x79, 0x9c, 0x3f, 0xa5, 0xa4, 0x91, 0x06, 0x66, 0x88, 0xb6, 0x6b, 0x7a, 0x18, 0xd3, 0x6b, 0x64, + 0xee, 0x00, 0x72, 0xb4, 0x5d, 0xdb, 0x2b, 0xc2, 0xde, 0xa1, 0x45, 0xda, 0xcf, 0xcb, 0xd5, 0xda, + 0x33, 0x81, 0x01, 0xfa, 0x98, 0x2c, 0x94, 0x7e, 0xc6, 0xc4, 0xd6, 0xd6, 0xad, 0x4b, 0x8c, 0xb6, + 0x8b, 0xc4, 0xed, 0x46, 0xd1, 0x06, 0xaf, 0x4a, 0xa3, 0xef, 0xc9, 0xb9, 0xb2, 0xfc, 0x8a, 0x6a, + 0xd7, 0xb1, 0x97, 0xf7, 0x2e, 0x11, 0xfb, 0x67, 0x69, 0xbc, 0xeb, 0xea, 0x2f, 0x80, 0x83, 0xde, + 0x7e, 0x7b, 0x74, 0xe2, 0x58, 0xc7, 0x27, 0x8e, 0xf5, 0xf3, 0xc4, 0xb1, 0xbe, 0x9e, 0x3a, 0xb5, + 0xe3, 0x53, 0xa7, 0xf6, 0xed, 0xd4, 0xa9, 0x7d, 0x78, 0x74, 0x6e, 0x02, 0xd5, 0x15, 0x1b, 0x52, + 0x25, 0xd3, 0x98, 0x4d, 0x1e, 0xb2, 0x2f, 0x33, 0x36, 0x17, 0x47, 0x13, 0x2e, 0xe0, 0xe6, 0xde, + 0xff, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xb3, 0x23, 0xcf, 0xdc, 0x7e, 0x04, 0x00, 0x00, } func (m *RegisteredQuery) Marshal() (dAtA []byte, err error) { diff --git a/x/interchainqueries/types/genesis_test.go b/x/interchainqueries/types/genesis_test.go index a4e0956a4..0fdb5b122 100644 --- a/x/interchainqueries/types/genesis_test.go +++ b/x/interchainqueries/types/genesis_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) func TestGenesisState_Validate(t *testing.T) { diff --git a/x/interchainqueries/types/params.go b/x/interchainqueries/types/params.go index 063cefc28..fa598c216 100644 --- a/x/interchainqueries/types/params.go +++ b/x/interchainqueries/types/params.go @@ -8,7 +8,7 @@ import ( paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" "gopkg.in/yaml.v2" - "github.com/neutron-org/neutron/v4/app/params" + "github.com/neutron-org/neutron/v5/app/params" ) var _ paramtypes.ParamSet = (*Params)(nil) diff --git a/x/interchainqueries/types/params.pb.go b/x/interchainqueries/types/params.pb.go index 18d044b6f..ef23f50c8 100644 --- a/x/interchainqueries/types/params.pb.go +++ b/x/interchainqueries/types/params.pb.go @@ -119,31 +119,31 @@ func init() { var fileDescriptor_752a5f3346da64b1 = []byte{ // 397 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0x31, 0x8f, 0xd3, 0x30, - 0x14, 0xc7, 0x93, 0xbb, 0x72, 0x43, 0x80, 0x25, 0x9c, 0x8e, 0x5c, 0x87, 0xb4, 0x62, 0x40, 0x5d, - 0x1a, 0xb7, 0xb4, 0x03, 0x82, 0xad, 0x45, 0x2c, 0x65, 0x80, 0x52, 0x16, 0x96, 0xc8, 0x49, 0x4d, - 0x6a, 0xb5, 0xf6, 0x0b, 0xf6, 0x4b, 0x94, 0x7c, 0x0b, 0x46, 0x46, 0x66, 0x3e, 0x49, 0xc7, 0x6e, - 0x30, 0x01, 0x6a, 0xbf, 0x08, 0x8a, 0x1d, 0xa4, 0x4a, 0xdc, 0x94, 0xa7, 0xfc, 0xfc, 0xcb, 0xff, - 0x9f, 0xbc, 0x78, 0x4f, 0x25, 0x2b, 0x50, 0x81, 0x24, 0x5c, 0x22, 0x53, 0xe9, 0x86, 0x72, 0xf9, - 0xb9, 0x60, 0x8a, 0x33, 0x4d, 0x72, 0xaa, 0xa8, 0xd0, 0x51, 0xae, 0x00, 0xc1, 0xbf, 0x6d, 0xcf, - 0x45, 0xff, 0x9d, 0xeb, 0x86, 0x29, 0x68, 0x01, 0x9a, 0x24, 0x54, 0x33, 0x52, 0x8e, 0x13, 0x86, - 0x74, 0x4c, 0x52, 0xe0, 0xd2, 0xaa, 0xdd, 0xeb, 0x0c, 0x32, 0x30, 0x23, 0x69, 0x26, 0x7b, 0xf7, - 0xc9, 0x8f, 0x0b, 0xef, 0xea, 0xad, 0x49, 0xf0, 0x47, 0xde, 0x75, 0xf3, 0xac, 0x3a, 0xd6, 0x45, - 0x22, 0x38, 0xc6, 0xc8, 0x05, 0x83, 0x02, 0x03, 0xb7, 0xef, 0x0e, 0x3a, 0x4b, 0xdf, 0xb0, 0xf7, - 0x06, 0xad, 0x2c, 0xf1, 0x73, 0xef, 0xa1, 0x35, 0xd6, 0x2c, 0x07, 0xcd, 0x31, 0xb8, 0xe8, 0x5f, - 0x0e, 0xee, 0x3f, 0xbb, 0x8d, 0x6c, 0x95, 0xa8, 0xa9, 0x12, 0xb5, 0x55, 0xa2, 0x39, 0x70, 0x39, - 0x1b, 0xed, 0x7f, 0xf5, 0x9c, 0xef, 0xbf, 0x7b, 0x83, 0x8c, 0xe3, 0xa6, 0x48, 0xa2, 0x14, 0x04, - 0x69, 0x7b, 0xdb, 0xcb, 0x50, 0xaf, 0xb7, 0x04, 0xeb, 0x9c, 0x69, 0x23, 0xe8, 0xe5, 0x03, 0x93, - 0xf0, 0xca, 0x06, 0xf8, 0x13, 0xef, 0x06, 0xab, 0xd8, 0x86, 0x2a, 0x26, 0xa0, 0xa4, 0xbb, 0x78, - 0xc7, 0x05, 0xc7, 0xe0, 0xd2, 0xb4, 0x7c, 0x84, 0xd5, 0xbb, 0x06, 0x2e, 0x2d, 0x7b, 0xd3, 0x20, - 0x7f, 0xea, 0x3d, 0x16, 0xb4, 0x8a, 0xb7, 0x65, 0x2b, 0x6e, 0x59, 0xad, 0xe3, 0x14, 0x0a, 0x89, - 0x41, 0xc7, 0x5a, 0x82, 0x56, 0x8b, 0xd2, 0x88, 0x0b, 0x56, 0xeb, 0x79, 0x83, 0xfc, 0xe7, 0x5e, - 0xd0, 0x58, 0xa8, 0xa8, 0xd4, 0x34, 0x45, 0x0e, 0x52, 0xc7, 0x9f, 0xf8, 0x0e, 0x99, 0xd2, 0xc1, - 0x3d, 0xa3, 0xdd, 0x08, 0x5a, 0xad, 0xce, 0xf0, 0x6b, 0x4b, 0x5f, 0x74, 0xbe, 0x7e, 0xeb, 0x39, - 0xb3, 0x0f, 0xfb, 0x63, 0xe8, 0x1e, 0x8e, 0xa1, 0xfb, 0xe7, 0x18, 0xba, 0x5f, 0x4e, 0xa1, 0x73, - 0x38, 0x85, 0xce, 0xcf, 0x53, 0xe8, 0x7c, 0x7c, 0x79, 0xf6, 0xf2, 0xed, 0x3e, 0x87, 0xa0, 0xb2, - 0x7f, 0x33, 0x29, 0xa7, 0xa4, 0xba, 0xe3, 0x47, 0x30, 0x5f, 0x25, 0xb9, 0x32, 0x7b, 0x9b, 0xfc, - 0x0d, 0x00, 0x00, 0xff, 0xff, 0x8f, 0x38, 0x73, 0xdc, 0x32, 0x02, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0xb1, 0xae, 0xd3, 0x30, + 0x14, 0x86, 0x93, 0x7b, 0xcb, 0x1d, 0x02, 0x2c, 0xe1, 0xea, 0x92, 0x76, 0x48, 0x2b, 0x06, 0xd4, + 0xa5, 0x71, 0x4b, 0x41, 0x42, 0xb0, 0xb5, 0x88, 0xa5, 0x0c, 0x50, 0xca, 0xc2, 0x12, 0x39, 0xa9, + 0x49, 0xad, 0xd6, 0x3e, 0xc1, 0x3e, 0x89, 0x92, 0xb7, 0x60, 0x64, 0x64, 0xe6, 0x49, 0x3a, 0x76, + 0x83, 0x09, 0x50, 0xfb, 0x22, 0x28, 0x76, 0x90, 0x2a, 0x71, 0xa7, 0x1c, 0xe5, 0xf3, 0x97, 0xff, + 0x4f, 0x4e, 0xbc, 0xc7, 0x92, 0x15, 0xa8, 0x40, 0x12, 0x2e, 0x91, 0xa9, 0x74, 0x43, 0xb9, 0xfc, + 0x5c, 0x30, 0xc5, 0x99, 0x26, 0x39, 0x55, 0x54, 0xe8, 0x28, 0x57, 0x80, 0xe0, 0x77, 0xdb, 0x73, + 0xd1, 0x7f, 0xe7, 0x7a, 0x61, 0x0a, 0x5a, 0x80, 0x26, 0x09, 0xd5, 0x8c, 0x94, 0x93, 0x84, 0x21, + 0x9d, 0x90, 0x14, 0xb8, 0xb4, 0x6a, 0xef, 0x3a, 0x83, 0x0c, 0xcc, 0x48, 0x9a, 0xc9, 0xde, 0x7d, + 0xf4, 0xe3, 0xc2, 0xbb, 0x7a, 0x6b, 0x12, 0xfc, 0xb1, 0x77, 0xdd, 0x3c, 0xab, 0x8e, 0x75, 0x91, + 0x08, 0x8e, 0x31, 0x72, 0xc1, 0xa0, 0xc0, 0xc0, 0x1d, 0xb8, 0xc3, 0xce, 0xd2, 0x37, 0xec, 0xbd, + 0x41, 0x2b, 0x4b, 0xfc, 0xdc, 0xbb, 0x6f, 0x8d, 0x35, 0xcb, 0x41, 0x73, 0x0c, 0x2e, 0x06, 0x97, + 0xc3, 0xbb, 0x4f, 0xba, 0x91, 0xad, 0x12, 0x35, 0x55, 0xa2, 0xb6, 0x4a, 0x34, 0x07, 0x2e, 0x67, + 0xe3, 0xfd, 0xaf, 0xbe, 0xf3, 0xfd, 0x77, 0x7f, 0x98, 0x71, 0xdc, 0x14, 0x49, 0x94, 0x82, 0x20, + 0x6d, 0x6f, 0x7b, 0x19, 0xe9, 0xf5, 0x96, 0x60, 0x9d, 0x33, 0x6d, 0x04, 0xbd, 0xbc, 0x67, 0x12, + 0x5e, 0xd9, 0x00, 0x7f, 0xea, 0xdd, 0x60, 0x15, 0xdb, 0x50, 0xc5, 0x04, 0x94, 0x74, 0x17, 0xef, + 0xb8, 0xe0, 0x18, 0x5c, 0x9a, 0x96, 0x0f, 0xb0, 0x7a, 0xd7, 0xc0, 0xa5, 0x65, 0x6f, 0x1a, 0xe4, + 0x3f, 0xf5, 0x1e, 0x0a, 0x5a, 0xc5, 0xdb, 0xb2, 0x15, 0xb7, 0xac, 0xd6, 0x71, 0x0a, 0x85, 0xc4, + 0xa0, 0x63, 0x2d, 0x41, 0xab, 0x45, 0x69, 0xc4, 0x05, 0xab, 0xf5, 0xbc, 0x41, 0xfe, 0x73, 0x2f, + 0x68, 0x2c, 0x54, 0x54, 0x6a, 0x9a, 0x22, 0x07, 0xa9, 0xe3, 0x4f, 0x7c, 0x87, 0x4c, 0xe9, 0xe0, + 0x8e, 0xd1, 0x6e, 0x04, 0xad, 0x56, 0x67, 0xf8, 0xb5, 0xa5, 0x2f, 0x3a, 0x5f, 0xbf, 0xf5, 0x9d, + 0xd9, 0x87, 0xfd, 0x31, 0x74, 0x0f, 0xc7, 0xd0, 0xfd, 0x73, 0x0c, 0xdd, 0x2f, 0xa7, 0xd0, 0x39, + 0x9c, 0x42, 0xe7, 0xe7, 0x29, 0x74, 0x3e, 0xbe, 0x3c, 0x7b, 0xf9, 0x76, 0x9f, 0x23, 0x50, 0xd9, + 0xbf, 0x99, 0x94, 0xcf, 0x48, 0x75, 0xcb, 0x8f, 0x60, 0xbe, 0x4a, 0x72, 0x65, 0xf6, 0x36, 0xfd, + 0x1b, 0x00, 0x00, 0xff, 0xff, 0x47, 0x2f, 0xed, 0x13, 0x32, 0x02, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/interchainqueries/types/query.pb.go b/x/interchainqueries/types/query.pb.go index 03dd0fb7a..10f7d517d 100644 --- a/x/interchainqueries/types/query.pb.go +++ b/x/interchainqueries/types/query.pb.go @@ -572,52 +572,52 @@ var fileDescriptor_2254be23ba3ff3b4 = []byte{ // 758 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4d, 0x4f, 0x14, 0x4d, 0x10, 0xde, 0x5e, 0xf6, 0x5d, 0x5e, 0x6a, 0x79, 0x5f, 0xa0, 0x45, 0x03, 0x2b, 0xae, 0x30, 0x44, - 0x58, 0x30, 0x3b, 0xc3, 0x87, 0x0a, 0x46, 0xc4, 0x84, 0x83, 0x4a, 0xe2, 0x01, 0x26, 0xe2, 0xc1, - 0xcb, 0xa6, 0x77, 0xb7, 0x33, 0x3b, 0x09, 0xdb, 0xbd, 0xcc, 0xf4, 0x22, 0x73, 0xf5, 0xe6, 0xcd, - 0xe8, 0x5f, 0xf0, 0x07, 0x78, 0xf3, 0xe0, 0xc1, 0x2b, 0xf1, 0x44, 0xe2, 0xc5, 0x93, 0x31, 0xe0, - 0x0f, 0x31, 0xd3, 0xdd, 0xfb, 0xfd, 0xc5, 0x72, 0x9a, 0xee, 0x9e, 0x7a, 0xaa, 0x9e, 0x7a, 0xaa, - 0xaa, 0x1b, 0xee, 0x30, 0x5a, 0x11, 0x1e, 0x67, 0x96, 0xcb, 0x04, 0xf5, 0xf2, 0x45, 0xe2, 0xb2, - 0xa3, 0x0a, 0xf5, 0x5c, 0xea, 0x5b, 0xe1, 0x37, 0x30, 0xcb, 0x1e, 0x17, 0x1c, 0x4f, 0x6b, 0x33, - 0xb3, 0xcd, 0x2c, 0xb9, 0x9c, 0xe7, 0x7e, 0x89, 0xfb, 0x56, 0x8e, 0xf8, 0x54, 0x61, 0xac, 0xe3, - 0xd5, 0x1c, 0x15, 0x64, 0xd5, 0x2a, 0x13, 0xc7, 0x65, 0x44, 0xb8, 0x9c, 0x29, 0x37, 0xc9, 0x49, - 0x87, 0x3b, 0x5c, 0x2e, 0xad, 0x70, 0xa5, 0x4f, 0x67, 0x1c, 0xce, 0x9d, 0x43, 0x6a, 0x91, 0xb2, - 0x6b, 0x11, 0xc6, 0xb8, 0x90, 0x10, 0x5f, 0xff, 0x5d, 0xec, 0xce, 0xd0, 0xa1, 0x8c, 0xfa, 0x6e, - 0xd5, 0x70, 0xa1, 0xbb, 0x61, 0x99, 0x78, 0xa4, 0x54, 0xb5, 0x33, 0xba, 0xdb, 0x89, 0x13, 0x65, - 0x63, 0x4c, 0x02, 0xde, 0x0f, 0x53, 0xd9, 0x93, 0x40, 0x9b, 0x1e, 0x55, 0xa8, 0x2f, 0x8c, 0x57, - 0x70, 0xad, 0xe9, 0xd4, 0x2f, 0x73, 0xe6, 0x53, 0xfc, 0x04, 0xe2, 0x2a, 0xc0, 0x14, 0x9a, 0x45, - 0xe9, 0xc4, 0xda, 0x9c, 0xd9, 0x55, 0x2d, 0x53, 0x41, 0x77, 0x62, 0xa7, 0xbf, 0x6e, 0x47, 0x6c, - 0x0d, 0x33, 0x3e, 0x21, 0xb8, 0x25, 0x1d, 0xdb, 0xd4, 0x71, 0x7d, 0x41, 0x3d, 0x5a, 0xd8, 0x57, - 0xf6, 0x3a, 0x32, 0xbe, 0x01, 0x71, 0xfe, 0x86, 0x51, 0x2f, 0x0c, 0x31, 0x94, 0x1e, 0xb1, 0xf5, - 0x0e, 0xcf, 0xc3, 0x7f, 0x79, 0xce, 0x18, 0xcd, 0x87, 0x8a, 0x65, 0xdd, 0xc2, 0x54, 0x74, 0x16, - 0xa5, 0x47, 0xec, 0xd1, 0xfa, 0xe1, 0x6e, 0x01, 0x3f, 0x05, 0xa8, 0x57, 0x62, 0x6a, 0x48, 0x72, - 0x5c, 0x30, 0x55, 0xd9, 0xcc, 0xb0, 0x6c, 0xa6, 0x2a, 0xb5, 0x2e, 0x9b, 0xb9, 0x47, 0x1c, 0xaa, - 0x03, 0xdb, 0x0d, 0x48, 0xe3, 0x3b, 0x82, 0x54, 0x37, 0x9a, 0x5a, 0x8a, 0x2c, 0x60, 0xaf, 0xf6, - 0x33, 0xab, 0x93, 0x96, 0x9c, 0x13, 0x6b, 0xcb, 0x3d, 0x64, 0x69, 0xf6, 0x18, 0x68, 0x7d, 0x26, - 0xbc, 0xd6, 0x40, 0xf8, 0x59, 0x53, 0x2e, 0x51, 0x99, 0xcb, 0x62, 0xdf, 0x5c, 0x14, 0xbb, 0xa6, - 0x64, 0x36, 0xe1, 0x66, 0x87, 0x5c, 0x82, 0xaa, 0xe0, 0xd3, 0xf0, 0xaf, 0x74, 0x14, 0x6a, 0x1a, - 0x56, 0x35, 0x66, 0x0f, 0xcb, 0xfd, 0x6e, 0xc1, 0xa8, 0xc0, 0x4c, 0x67, 0xa4, 0xd6, 0xe0, 0x00, - 0xc6, 0x5b, 0x34, 0x08, 0x74, 0x63, 0x0c, 0xa0, 0x80, 0x3d, 0xd6, 0x9c, 0x7b, 0x60, 0x6c, 0xc3, - 0x5c, 0x97, 0xb0, 0x95, 0x43, 0x71, 0x09, 0xda, 0x05, 0x30, 0x7a, 0xe1, 0x35, 0xf9, 0x6d, 0x88, - 0x7b, 0xf2, 0x44, 0x53, 0x5e, 0xe8, 0x41, 0xb9, 0x11, 0xaf, 0x51, 0xc6, 0x2e, 0x24, 0x5e, 0x7a, - 0x84, 0xf9, 0x44, 0x36, 0x1f, 0xfe, 0x1f, 0xa2, 0x35, 0x26, 0x51, 0xb7, 0x10, 0xf6, 0x71, 0x91, - 0xba, 0x4e, 0x51, 0xc8, 0xd2, 0xc5, 0x6c, 0xbd, 0xc3, 0x18, 0x62, 0x05, 0x22, 0x88, 0x6c, 0xce, - 0x51, 0x5b, 0xae, 0x8d, 0x2d, 0xb8, 0x2e, 0x23, 0xbc, 0x20, 0xbe, 0xb0, 0x69, 0x89, 0x0b, 0xfa, - 0x5c, 0x19, 0xb7, 0x35, 0x3d, 0x6a, 0x6f, 0x7a, 0x63, 0x43, 0x8f, 0x54, 0x2b, 0xba, 0x96, 0x69, - 0x9d, 0x0a, 0x6a, 0xa4, 0xb2, 0xf6, 0x6e, 0x18, 0xfe, 0x91, 0x48, 0xfc, 0x01, 0x41, 0x5c, 0xcd, - 0x2b, 0xce, 0xf4, 0x93, 0xa1, 0xe9, 0xa2, 0x48, 0x9a, 0x97, 0x35, 0x57, 0x5c, 0x8c, 0xa5, 0xb7, - 0x3f, 0xfe, 0x7c, 0x8c, 0xce, 0xe3, 0x39, 0xab, 0xdf, 0x1d, 0x86, 0xbf, 0x21, 0x98, 0x68, 0x9b, - 0x3f, 0xbc, 0xd9, 0xbf, 0x4c, 0x9d, 0x6f, 0x96, 0xe4, 0xc3, 0x2b, 0x20, 0x35, 0xeb, 0xfb, 0x92, + 0x58, 0x30, 0x3b, 0xc3, 0x47, 0x10, 0x8c, 0x88, 0x09, 0x07, 0x95, 0xc4, 0x03, 0x4c, 0xc4, 0x83, + 0x97, 0x4d, 0xef, 0x6e, 0x67, 0x76, 0x12, 0xb6, 0x7b, 0x99, 0xe9, 0x45, 0xe6, 0xea, 0xcd, 0x9b, + 0xd1, 0xbf, 0xe0, 0x0f, 0xf0, 0xe6, 0xc1, 0x83, 0x57, 0xe2, 0x89, 0xc4, 0x8b, 0x27, 0x63, 0xc0, + 0x1f, 0x62, 0xa6, 0xbb, 0xf7, 0xfb, 0x8b, 0xe5, 0x34, 0xdd, 0x3d, 0xf5, 0x54, 0x3d, 0xf5, 0x54, + 0x55, 0x37, 0xdc, 0x63, 0xb4, 0x22, 0x3c, 0xce, 0x2c, 0x97, 0x09, 0xea, 0xe5, 0x8b, 0xc4, 0x65, + 0xc7, 0x15, 0xea, 0xb9, 0xd4, 0xb7, 0xc2, 0x6f, 0x60, 0x96, 0x3d, 0x2e, 0x38, 0x9e, 0xd6, 0x66, + 0x66, 0x9b, 0x59, 0x72, 0x39, 0xcf, 0xfd, 0x12, 0xf7, 0xad, 0x1c, 0xf1, 0xa9, 0xc2, 0x58, 0x27, + 0xab, 0x39, 0x2a, 0xc8, 0xaa, 0x55, 0x26, 0x8e, 0xcb, 0x88, 0x70, 0x39, 0x53, 0x6e, 0x92, 0x93, + 0x0e, 0x77, 0xb8, 0x5c, 0x5a, 0xe1, 0x4a, 0x9f, 0xce, 0x38, 0x9c, 0x3b, 0x47, 0xd4, 0x22, 0x65, + 0xd7, 0x22, 0x8c, 0x71, 0x21, 0x21, 0xbe, 0xfe, 0xbb, 0xd8, 0x9d, 0xa1, 0x43, 0x19, 0xf5, 0xdd, + 0xaa, 0xe1, 0x42, 0x77, 0xc3, 0x32, 0xf1, 0x48, 0xa9, 0x6a, 0x67, 0x74, 0xb7, 0x13, 0xa7, 0xca, + 0xc6, 0x98, 0x04, 0x7c, 0x10, 0xa6, 0xb2, 0x2f, 0x81, 0x36, 0x3d, 0xae, 0x50, 0x5f, 0x18, 0xaf, + 0xe0, 0x46, 0xd3, 0xa9, 0x5f, 0xe6, 0xcc, 0xa7, 0xf8, 0x09, 0xc4, 0x55, 0x80, 0x29, 0x34, 0x8b, + 0xd2, 0x89, 0xb5, 0x39, 0xb3, 0xab, 0x5a, 0xa6, 0x82, 0xee, 0xc6, 0xce, 0x7e, 0xdd, 0x8d, 0xd8, + 0x1a, 0x66, 0x7c, 0x42, 0x70, 0x47, 0x3a, 0xb6, 0xa9, 0xe3, 0xfa, 0x82, 0x7a, 0xb4, 0x70, 0xa0, + 0xec, 0x75, 0x64, 0x7c, 0x0b, 0xe2, 0xfc, 0x0d, 0xa3, 0x5e, 0x18, 0x62, 0x28, 0x3d, 0x62, 0xeb, + 0x1d, 0x9e, 0x87, 0xff, 0xf2, 0x9c, 0x31, 0x9a, 0x0f, 0x15, 0xcb, 0xba, 0x85, 0xa9, 0xe8, 0x2c, + 0x4a, 0x8f, 0xd8, 0xa3, 0xf5, 0xc3, 0xbd, 0x02, 0x7e, 0x0a, 0x50, 0xaf, 0xc4, 0xd4, 0x90, 0xe4, + 0xb8, 0x60, 0xaa, 0xb2, 0x99, 0x61, 0xd9, 0x4c, 0x55, 0x6a, 0x5d, 0x36, 0x73, 0x9f, 0x38, 0x54, + 0x07, 0xb6, 0x1b, 0x90, 0xc6, 0x77, 0x04, 0xa9, 0x6e, 0x34, 0xb5, 0x14, 0x59, 0xc0, 0x5e, 0xed, + 0x67, 0x56, 0x27, 0x2d, 0x39, 0x27, 0xd6, 0x96, 0x7b, 0xc8, 0xd2, 0xec, 0x31, 0xd0, 0xfa, 0x4c, + 0x78, 0xad, 0x81, 0xf0, 0xb3, 0xa6, 0x5c, 0xa2, 0x32, 0x97, 0xc5, 0xbe, 0xb9, 0x28, 0x76, 0x4d, + 0xc9, 0x6c, 0xc1, 0xed, 0x0e, 0xb9, 0x04, 0x55, 0xc1, 0xa7, 0xe1, 0x5f, 0xe9, 0x28, 0xd4, 0x34, + 0xac, 0x6a, 0xcc, 0x1e, 0x96, 0xfb, 0xbd, 0x82, 0x51, 0x81, 0x99, 0xce, 0x48, 0xad, 0xc1, 0x21, + 0x8c, 0xb7, 0x68, 0x10, 0xe8, 0xc6, 0x18, 0x40, 0x01, 0x7b, 0xac, 0x39, 0xf7, 0xc0, 0xd8, 0x81, + 0xb9, 0x2e, 0x61, 0x2b, 0x47, 0xe2, 0x0a, 0xb4, 0x0b, 0x60, 0xf4, 0xc2, 0x6b, 0xf2, 0x3b, 0x10, + 0xf7, 0xe4, 0x89, 0xa6, 0xbc, 0xd0, 0x83, 0x72, 0x23, 0x5e, 0xa3, 0x8c, 0x3d, 0x48, 0xbc, 0xf4, + 0x08, 0xf3, 0x89, 0x6c, 0x3e, 0xfc, 0x3f, 0x44, 0x6b, 0x4c, 0xa2, 0x6e, 0x21, 0xec, 0xe3, 0x22, + 0x75, 0x9d, 0xa2, 0x90, 0xa5, 0x8b, 0xd9, 0x7a, 0x87, 0x31, 0xc4, 0x0a, 0x44, 0x10, 0xd9, 0x9c, + 0xa3, 0xb6, 0x5c, 0x1b, 0xdb, 0x70, 0x53, 0x46, 0x78, 0x41, 0x7c, 0x61, 0xd3, 0x12, 0x17, 0xf4, + 0xb9, 0x32, 0x6e, 0x6b, 0x7a, 0xd4, 0xde, 0xf4, 0xc6, 0xa6, 0x1e, 0xa9, 0x56, 0x74, 0x2d, 0xd3, + 0x3a, 0x15, 0xd4, 0x48, 0x65, 0xed, 0xdd, 0x30, 0xfc, 0x23, 0x91, 0xf8, 0x03, 0x82, 0xb8, 0x9a, + 0x57, 0x9c, 0xe9, 0x27, 0x43, 0xd3, 0x45, 0x91, 0x34, 0xaf, 0x6a, 0xae, 0xb8, 0x18, 0x4b, 0x6f, + 0x7f, 0xfc, 0xf9, 0x18, 0x9d, 0xc7, 0x73, 0x56, 0xbf, 0x3b, 0x0c, 0x7f, 0x43, 0x30, 0xd1, 0x36, + 0x7f, 0x78, 0xab, 0x7f, 0x99, 0x3a, 0xdf, 0x2c, 0xc9, 0x87, 0xd7, 0x40, 0x6a, 0xd6, 0x1b, 0x92, 0xb5, 0x85, 0x33, 0x3d, 0x58, 0xb7, 0xdf, 0x06, 0xf8, 0x0b, 0x82, 0xb1, 0x96, 0x26, 0xc4, 0x0f, - 0x06, 0x63, 0x51, 0x1d, 0xd3, 0xe4, 0xc6, 0xc0, 0x38, 0xcd, 0x7d, 0x5d, 0x72, 0xcf, 0xe0, 0xbb, - 0x97, 0xe7, 0x1e, 0xe0, 0xaf, 0x08, 0x12, 0x0d, 0x4d, 0x8f, 0xb7, 0x06, 0x8f, 0x5e, 0x9f, 0xd5, - 0xe4, 0xe3, 0x2b, 0xa2, 0x75, 0x06, 0x96, 0xcc, 0x60, 0x09, 0x2f, 0x5a, 0x7d, 0x9e, 0xf0, 0xac, - 0x1a, 0x4d, 0xfc, 0x19, 0xc1, 0x78, 0xdb, 0x2c, 0xad, 0xf4, 0x23, 0xd1, 0x8a, 0x48, 0x6e, 0x0e, + 0x06, 0x63, 0x51, 0x1d, 0xd3, 0xe4, 0xe6, 0xc0, 0x38, 0xcd, 0x7d, 0x5d, 0x72, 0xcf, 0xe0, 0xfb, + 0x57, 0xe7, 0x1e, 0xe0, 0xaf, 0x08, 0x12, 0x0d, 0x4d, 0x8f, 0xb7, 0x07, 0x8f, 0x5e, 0x9f, 0xd5, + 0xe4, 0xe3, 0x6b, 0xa2, 0x75, 0x06, 0x96, 0xcc, 0x60, 0x09, 0x2f, 0x5a, 0x7d, 0x9e, 0xf0, 0xac, + 0x1a, 0x4d, 0xfc, 0x19, 0xc1, 0x78, 0xdb, 0x2c, 0xad, 0xf4, 0x23, 0xd1, 0x8a, 0x48, 0x6e, 0x0d, 0x8a, 0xa8, 0x31, 0x5e, 0x91, 0x8c, 0x97, 0x71, 0xba, 0xa7, 0xe6, 0x21, 0x30, 0xab, 0x66, 0x71, - 0xe7, 0xe0, 0xf4, 0x3c, 0x85, 0xce, 0xce, 0x53, 0xe8, 0xf7, 0x79, 0x0a, 0xbd, 0xbf, 0x48, 0x45, - 0xce, 0x2e, 0x52, 0x91, 0x9f, 0x17, 0xa9, 0xc8, 0xeb, 0x47, 0x8e, 0x2b, 0x8a, 0x95, 0x9c, 0x99, - 0xe7, 0xa5, 0xaa, 0xb7, 0x0c, 0xf7, 0x9c, 0x9a, 0xe7, 0xe3, 0x7b, 0xd6, 0x49, 0xa7, 0x07, 0x3e, - 0x28, 0x53, 0x3f, 0x17, 0x97, 0x8f, 0xfc, 0xfa, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x60, 0x57, - 0x58, 0xcf, 0xfd, 0x08, 0x00, 0x00, + 0xf7, 0xf0, 0xec, 0x22, 0x85, 0xce, 0x2f, 0x52, 0xe8, 0xf7, 0x45, 0x0a, 0xbd, 0xbf, 0x4c, 0x45, + 0xce, 0x2f, 0x53, 0x91, 0x9f, 0x97, 0xa9, 0xc8, 0xeb, 0x47, 0x8e, 0x2b, 0x8a, 0x95, 0x9c, 0x99, + 0xe7, 0xa5, 0xaa, 0xb7, 0x0c, 0xf7, 0x9c, 0x9a, 0xe7, 0x93, 0x0d, 0xeb, 0xb4, 0xd3, 0x03, 0x1f, + 0x94, 0xa9, 0x9f, 0x8b, 0xcb, 0x47, 0x7e, 0xfd, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa8, 0x40, + 0xc6, 0x00, 0xfd, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/interchainqueries/types/tx.pb.go b/x/interchainqueries/types/tx.pb.go index 265b691c7..5a7f0ca2f 100644 --- a/x/interchainqueries/types/tx.pb.go +++ b/x/interchainqueries/types/tx.pb.go @@ -884,80 +884,81 @@ func init() { } var fileDescriptor_d4793837a316491e = []byte{ - // 1168 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xcd, 0x4f, 0x1b, 0x47, - 0x14, 0x67, 0x8d, 0x4d, 0xf0, 0xe0, 0x40, 0x32, 0x25, 0xc5, 0x38, 0x8d, 0x43, 0xb6, 0x6a, 0x12, - 0xa1, 0x64, 0x57, 0x71, 0x29, 0x55, 0x41, 0xfd, 0x80, 0xb6, 0x51, 0x11, 0x42, 0xa5, 0x0b, 0xe4, - 0xd0, 0xcb, 0x6a, 0xbd, 0x3b, 0xac, 0x47, 0x5e, 0xcf, 0x38, 0x3b, 0xb3, 0xfe, 0x38, 0x54, 0xaa, - 0x72, 0xec, 0xa5, 0xf4, 0xbf, 0xa8, 0xd4, 0x0b, 0x52, 0x2b, 0xf5, 0x2f, 0xa8, 0x94, 0x63, 0xd4, - 0x53, 0x0f, 0x55, 0x55, 0xc1, 0x81, 0x63, 0xff, 0x85, 0x6a, 0x3e, 0xd6, 0x98, 0x18, 0x9b, 0xc0, - 0x05, 0xf6, 0xbd, 0xf7, 0x7b, 0x6f, 0x7e, 0xf3, 0xe6, 0x7d, 0x18, 0x98, 0x04, 0x25, 0x3c, 0xa6, - 0xc4, 0xc6, 0x84, 0xa3, 0xd8, 0xaf, 0x79, 0x98, 0x3c, 0x4f, 0x50, 0x8c, 0x11, 0xb3, 0x79, 0xc7, - 0x6a, 0xc6, 0x94, 0x53, 0x38, 0xaf, 0x31, 0xd6, 0x00, 0xa6, 0x74, 0xd3, 0x6b, 0x60, 0x42, 0x6d, - 0xf9, 0x57, 0xa1, 0x4b, 0x73, 0x3e, 0x65, 0x0d, 0xca, 0xec, 0x06, 0x0b, 0xed, 0xd6, 0x13, 0xf1, - 0x4f, 0x1b, 0xe6, 0x95, 0xc1, 0x95, 0x92, 0xad, 0x04, 0x6d, 0x9a, 0x0d, 0x69, 0x48, 0x95, 0x5e, - 0x7c, 0xa5, 0x0e, 0x21, 0xa5, 0x61, 0x84, 0x6c, 0x29, 0x55, 0x93, 0x7d, 0xdb, 0x23, 0x5d, 0x6d, - 0x7a, 0x30, 0x9c, 0x76, 0x88, 0x08, 0x62, 0x38, 0x8d, 0x7c, 0x7f, 0x38, 0xb0, 0xe9, 0xc5, 0x5e, - 0x23, 0xc5, 0xdd, 0xe6, 0x88, 0x04, 0x28, 0x6e, 0x60, 0xc2, 0x6d, 0xaf, 0xea, 0x63, 0x9b, 0x77, - 0x9b, 0x28, 0x35, 0xde, 0xe9, 0x33, 0xfa, 0x71, 0xb7, 0xc9, 0xa9, 0xe0, 0x44, 0xf7, 0x95, 0xd9, - 0xfc, 0x29, 0x03, 0x4a, 0x5b, 0x2c, 0x74, 0x50, 0x88, 0x19, 0x47, 0xf1, 0x46, 0xef, 0xa4, 0x6f, - 0x12, 0x14, 0x77, 0xe1, 0x1d, 0x00, 0xc4, 0x91, 0x5d, 0x57, 0x84, 0x2c, 0x1a, 0x0b, 0xc6, 0xc3, - 0xbc, 0x93, 0x97, 0x9a, 0xdd, 0x6e, 0x13, 0xc1, 0x25, 0x90, 0xad, 0xa3, 0x2e, 0x2b, 0x66, 0x16, - 0xc6, 0x1f, 0x4e, 0x55, 0x16, 0xac, 0xa1, 0xc9, 0xb6, 0x36, 0x9f, 0x6d, 0xa2, 0xae, 0x23, 0xd1, - 0xd0, 0x06, 0x6f, 0xf1, 0xd8, 0x23, 0xcc, 0xf3, 0x39, 0xa6, 0x84, 0xb9, 0xfb, 0x38, 0xe2, 0x28, - 0x2e, 0x8e, 0xcb, 0xe8, 0xb0, 0xdf, 0xf4, 0x54, 0x5a, 0xe0, 0xbb, 0xe0, 0xba, 0x4f, 0x09, 0x41, - 0x52, 0xe9, 0xe2, 0xa0, 0x98, 0x95, 0xd0, 0xc2, 0xa9, 0x72, 0x23, 0x10, 0xa0, 0xa4, 0x19, 0x78, - 0x1c, 0xb9, 0x4d, 0x14, 0x63, 0x1a, 0x14, 0x73, 0x0b, 0xc6, 0xc3, 0xac, 0x53, 0x50, 0xca, 0x6d, - 0xa9, 0x83, 0x6f, 0x83, 0x09, 0x26, 0xf3, 0x51, 0x9c, 0x90, 0x21, 0xb4, 0xb4, 0x32, 0xf5, 0xe2, - 0xe4, 0x70, 0x51, 0x0b, 0xe6, 0x12, 0x30, 0x87, 0xa7, 0xc4, 0x41, 0xac, 0x49, 0x09, 0x43, 0x70, - 0x1a, 0x64, 0x70, 0x20, 0x53, 0x92, 0x75, 0x32, 0x38, 0x30, 0x7f, 0x37, 0xc0, 0xec, 0x16, 0x0b, - 0x77, 0x92, 0x6a, 0x03, 0xf3, 0x14, 0x9a, 0x44, 0x1c, 0xce, 0x83, 0x49, 0x95, 0xc3, 0x1e, 0xfc, - 0x9a, 0x94, 0x37, 0xfa, 0xe9, 0x64, 0xfa, 0xe9, 0xc0, 0xbb, 0x20, 0xef, 0x47, 0x18, 0x11, 0x2e, - 0x7c, 0x64, 0x5e, 0xd6, 0x33, 0x45, 0xc3, 0x99, 0x54, 0xca, 0x8d, 0x00, 0x7e, 0x02, 0x26, 0x62, - 0x19, 0x5d, 0xa6, 0x62, 0xaa, 0x72, 0x7f, 0x44, 0xea, 0xfb, 0xb8, 0x38, 0xda, 0xeb, 0xec, 0x7d, - 0xff, 0x33, 0xc0, 0x54, 0x3f, 0xe1, 0xa7, 0x00, 0xd4, 0x5b, 0xae, 0x42, 0xb2, 0xa2, 0x21, 0xdf, - 0xf6, 0xc1, 0x88, 0x03, 0x76, 0x38, 0x8d, 0xbd, 0x10, 0x3d, 0xf3, 0xa2, 0x04, 0x39, 0xf9, 0x7a, - 0x4b, 0x85, 0x61, 0x70, 0x19, 0xe4, 0xaa, 0x11, 0xf5, 0xeb, 0xf2, 0x72, 0xa3, 0xcb, 0x63, 0x5d, - 0xe0, 0x1c, 0x05, 0x17, 0x59, 0xa9, 0x21, 0x1c, 0xd6, 0xb8, 0xbc, 0x7a, 0xd6, 0xd1, 0x12, 0x2c, - 0x81, 0xc9, 0x18, 0xb5, 0x30, 0xc3, 0x94, 0xc8, 0x6b, 0x67, 0x9d, 0x9e, 0x0c, 0x1f, 0x01, 0xe8, - 0x45, 0x11, 0x6d, 0xbb, 0xf5, 0x96, 0xeb, 0x7b, 0x51, 0x54, 0xf5, 0xfc, 0x3a, 0x93, 0x25, 0x30, - 0xe9, 0xdc, 0x90, 0x96, 0xcd, 0xd6, 0xe7, 0xa9, 0xde, 0x3c, 0x30, 0x40, 0xa1, 0x9f, 0x35, 0x7c, - 0x0f, 0x4c, 0x33, 0x25, 0xbb, 0xcd, 0x18, 0xed, 0xe3, 0x8e, 0xae, 0xf5, 0xeb, 0x5a, 0xbb, 0x2d, - 0x95, 0xf0, 0x06, 0x18, 0xaf, 0xa3, 0xae, 0xbc, 0x4f, 0xc1, 0x11, 0x9f, 0x70, 0x16, 0xe4, 0x5a, - 0x22, 0x82, 0xa4, 0x5a, 0x70, 0x94, 0x00, 0x9f, 0x80, 0xdc, 0xb6, 0x68, 0x32, 0xfd, 0x3a, 0xb7, - 0xad, 0xd3, 0x26, 0xb4, 0x54, 0x13, 0x5a, 0xd2, 0xfe, 0x75, 0x93, 0x39, 0x0a, 0x69, 0xfe, 0x62, - 0x80, 0x9c, 0xcc, 0x02, 0xfc, 0x0c, 0xdc, 0x24, 0xa8, 0xc3, 0x5d, 0x99, 0x0c, 0xb7, 0x86, 0x3c, - 0x51, 0x1f, 0x86, 0x0c, 0x34, 0x6b, 0xa9, 0xb1, 0x62, 0xa5, 0x63, 0xc5, 0x5a, 0x23, 0x5d, 0x67, - 0x46, 0xc0, 0xa5, 0xef, 0x57, 0x12, 0x0c, 0x1f, 0x89, 0x04, 0x7a, 0x69, 0x59, 0x0d, 0x73, 0xd3, - 0x18, 0x58, 0x01, 0x19, 0xde, 0x91, 0xfc, 0xa7, 0x2a, 0xe6, 0x88, 0x37, 0xda, 0xed, 0xa8, 0x17, - 0xce, 0xf0, 0x8e, 0xf9, 0xb7, 0x01, 0xae, 0x69, 0x19, 0x7e, 0x24, 0x9e, 0x45, 0x35, 0x85, 0xa6, - 0x79, 0xa7, 0xff, 0xbe, 0x62, 0x22, 0x59, 0x5f, 0x76, 0x90, 0xbf, 0xdb, 0xd1, 0x45, 0xd8, 0x83, - 0xc3, 0x4f, 0xc1, 0x74, 0x80, 0x22, 0xdc, 0x12, 0xdd, 0x21, 0xa7, 0x92, 0x26, 0x5c, 0x1c, 0x96, - 0x30, 0xe7, 0x7a, 0x8a, 0x97, 0x22, 0x5c, 0x03, 0x33, 0x98, 0xf8, 0x51, 0x22, 0x6a, 0x40, 0x47, - 0x18, 0xbf, 0x20, 0xc2, 0x74, 0xcf, 0x41, 0x85, 0x80, 0x20, 0x1b, 0x78, 0xdc, 0x93, 0x4f, 0x55, - 0x70, 0xe4, 0xb7, 0x59, 0x06, 0xef, 0x9c, 0xd7, 0xca, 0x69, 0xef, 0x9b, 0x1e, 0xb8, 0x2b, 0x27, - 0x44, 0x83, 0xb6, 0xd0, 0xc0, 0x7c, 0x78, 0x9e, 0x20, 0x76, 0x95, 0xae, 0x3f, 0xdb, 0x94, 0x26, - 0x58, 0x18, 0x7e, 0x84, 0xa6, 0xf1, 0x22, 0x23, 0x79, 0xec, 0xc9, 0x09, 0x77, 0x79, 0x1e, 0xab, - 0x60, 0x92, 0xa0, 0xb6, 0x7b, 0xa9, 0x09, 0x7e, 0x8d, 0xa0, 0xf6, 0xa6, 0x18, 0xe2, 0x8b, 0xa2, - 0x4a, 0xdb, 0xee, 0xd9, 0x91, 0xab, 0xfa, 0x75, 0x86, 0xa0, 0xf6, 0x5e, 0xff, 0xd4, 0x5d, 0x06, - 0x73, 0x02, 0x7b, 0xde, 0xd0, 0x57, 0x93, 0xfc, 0x16, 0x41, 0xed, 0xdd, 0xc1, 0xb9, 0x7f, 0x9a, - 0xa8, 0xdc, 0x45, 0x89, 0x1a, 0x92, 0x03, 0x9d, 0xa8, 0x3f, 0x0c, 0x30, 0xd3, 0x03, 0x6d, 0xcb, - 0xdd, 0x09, 0x97, 0x41, 0xde, 0x4b, 0x78, 0x8d, 0xc6, 0x98, 0x77, 0x55, 0xb7, 0xaf, 0x17, 0xff, - 0xfc, 0xed, 0xf1, 0xac, 0x5e, 0xee, 0x6b, 0x41, 0x10, 0x23, 0xc6, 0x76, 0x78, 0x8c, 0x49, 0xe8, - 0x9c, 0x42, 0xe1, 0x17, 0x60, 0x42, 0x6d, 0x5f, 0x5d, 0xab, 0xf7, 0x46, 0xe4, 0x4c, 0x1d, 0xb5, - 0x9e, 0x7f, 0xf9, 0xcf, 0xdd, 0xb1, 0x9f, 0x4f, 0x0e, 0x17, 0x0d, 0x47, 0xfb, 0xae, 0x2c, 0x89, - 0x2b, 0x9c, 0x46, 0xfd, 0xe1, 0xe4, 0x70, 0xf1, 0xde, 0xe0, 0x9a, 0x7f, 0x8d, 0xb3, 0x39, 0x0f, - 0xe6, 0x5e, 0x53, 0xa5, 0x57, 0xac, 0xfc, 0x9a, 0x03, 0xe3, 0x5b, 0x2c, 0x84, 0x3f, 0x1a, 0x60, - 0x6e, 0xd8, 0x36, 0xff, 0x60, 0x04, 0xd5, 0xe1, 0x1b, 0xaf, 0xf4, 0xf1, 0x95, 0xdc, 0x7a, 0x8b, - 0xf2, 0x3b, 0x70, 0x73, 0x70, 0x29, 0xda, 0xa3, 0x63, 0x0e, 0x38, 0x94, 0x3e, 0xbc, 0xa4, 0x43, - 0xef, 0xf8, 0x03, 0x03, 0xdc, 0x3a, 0xb7, 0x8d, 0xe0, 0xca, 0x45, 0xf7, 0x1a, 0xde, 0xde, 0xa5, - 0xd5, 0x2b, 0xf9, 0xf6, 0x51, 0x3a, 0xb7, 0x60, 0x2f, 0xa2, 0x34, 0xaa, 0xd3, 0x2f, 0xa2, 0x34, - 0xb2, 0x43, 0x20, 0x01, 0x85, 0x33, 0xdd, 0xb1, 0xf8, 0x26, 0xc1, 0x14, 0xb6, 0x54, 0x79, 0x73, - 0x6c, 0x7a, 0x5e, 0x29, 0xf7, 0xbd, 0x68, 0x87, 0xf5, 0xbd, 0x97, 0x47, 0x65, 0xe3, 0xd5, 0x51, - 0xd9, 0xf8, 0xf7, 0xa8, 0x6c, 0x1c, 0x1c, 0x97, 0xc7, 0x5e, 0x1d, 0x97, 0xc7, 0xfe, 0x3a, 0x2e, - 0x8f, 0x7d, 0xbb, 0x1a, 0x62, 0x5e, 0x4b, 0xaa, 0x96, 0x4f, 0x1b, 0xb6, 0x0e, 0xff, 0x98, 0xc6, - 0x61, 0xfa, 0x6d, 0xb7, 0x96, 0xec, 0xce, 0x79, 0x3f, 0xfc, 0xc5, 0x4f, 0xdf, 0xea, 0x84, 0x5c, - 0x74, 0xef, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x67, 0xb8, 0x7c, 0xb1, 0x22, 0x0c, 0x00, 0x00, + // 1170 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xcf, 0x4f, 0x1b, 0xc7, + 0x17, 0x67, 0x8d, 0x4d, 0xf0, 0xe0, 0x40, 0x32, 0x5f, 0xf2, 0xc5, 0x38, 0x8d, 0x43, 0xb6, 0x6a, + 0x12, 0xa1, 0x64, 0x57, 0x71, 0x09, 0x55, 0x41, 0xfd, 0x01, 0x6d, 0xa3, 0x22, 0x84, 0x4a, 0x17, + 0xc8, 0xa1, 0x97, 0xd5, 0x7a, 0x77, 0x58, 0x8f, 0xbc, 0x9e, 0x71, 0x76, 0x66, 0xfd, 0xe3, 0x50, + 0xa9, 0xca, 0xb1, 0x97, 0xd2, 0xff, 0xa2, 0x52, 0x2f, 0x48, 0xad, 0xd4, 0xbf, 0xa0, 0x52, 0x8e, + 0x51, 0x4f, 0x3d, 0x54, 0x55, 0x05, 0x07, 0x8e, 0xfd, 0x17, 0xaa, 0xf9, 0xb1, 0xc6, 0xc4, 0xd8, + 0x04, 0x2e, 0xb0, 0xef, 0xbd, 0xcf, 0x7b, 0xf3, 0x99, 0x37, 0xef, 0x87, 0x81, 0x49, 0x50, 0xc2, + 0x63, 0x4a, 0x6c, 0x4c, 0x38, 0x8a, 0xfd, 0x9a, 0x87, 0xc9, 0x8b, 0x04, 0xc5, 0x18, 0x31, 0x9b, + 0x77, 0xac, 0x66, 0x4c, 0x39, 0x85, 0xf3, 0x1a, 0x63, 0x0d, 0x60, 0x4a, 0x37, 0xbd, 0x06, 0x26, + 0xd4, 0x96, 0x7f, 0x15, 0xba, 0x34, 0xe7, 0x53, 0xd6, 0xa0, 0xcc, 0x6e, 0xb0, 0xd0, 0x6e, 0x3d, + 0x11, 0xff, 0xb4, 0x61, 0x5e, 0x19, 0x5c, 0x29, 0xd9, 0x4a, 0xd0, 0xa6, 0xd9, 0x90, 0x86, 0x54, + 0xe9, 0xc5, 0x57, 0xea, 0x10, 0x52, 0x1a, 0x46, 0xc8, 0x96, 0x52, 0x35, 0xd9, 0xb7, 0x3d, 0xd2, + 0xd5, 0xa6, 0x07, 0xc3, 0x69, 0x87, 0x88, 0x20, 0x86, 0xd3, 0xc8, 0xf7, 0x87, 0x03, 0x9b, 0x5e, + 0xec, 0x35, 0x52, 0xdc, 0x6d, 0x8e, 0x48, 0x80, 0xe2, 0x06, 0x26, 0xdc, 0xf6, 0xaa, 0x3e, 0xb6, + 0x79, 0xb7, 0x89, 0x52, 0xe3, 0x9d, 0x3e, 0xa3, 0x1f, 0x77, 0x9b, 0x9c, 0x0a, 0x4e, 0x74, 0x5f, + 0x99, 0xcd, 0x1f, 0x33, 0xa0, 0xb4, 0xc5, 0x42, 0x07, 0x85, 0x98, 0x71, 0x14, 0x6f, 0xf4, 0x4e, + 0xfa, 0x3a, 0x41, 0x71, 0x17, 0xde, 0x01, 0x40, 0x1c, 0xd9, 0x75, 0x45, 0xc8, 0xa2, 0xb1, 0x60, + 0x3c, 0xcc, 0x3b, 0x79, 0xa9, 0xd9, 0xed, 0x36, 0x11, 0x5c, 0x02, 0xd9, 0x3a, 0xea, 0xb2, 0x62, + 0x66, 0x61, 0xfc, 0xe1, 0x54, 0x65, 0xc1, 0x1a, 0x9a, 0x6c, 0x6b, 0xf3, 0xf9, 0x26, 0xea, 0x3a, + 0x12, 0x0d, 0x6d, 0xf0, 0x3f, 0x1e, 0x7b, 0x84, 0x79, 0x3e, 0xc7, 0x94, 0x30, 0x77, 0x1f, 0x47, + 0x1c, 0xc5, 0xc5, 0x71, 0x19, 0x1d, 0xf6, 0x9b, 0x9e, 0x49, 0x0b, 0x7c, 0x17, 0x5c, 0xf7, 0x29, + 0x21, 0x48, 0x2a, 0x5d, 0x1c, 0x14, 0xb3, 0x12, 0x5a, 0x38, 0x55, 0x6e, 0x04, 0x02, 0x94, 0x34, + 0x03, 0x8f, 0x23, 0xb7, 0x89, 0x62, 0x4c, 0x83, 0x62, 0x6e, 0xc1, 0x78, 0x98, 0x75, 0x0a, 0x4a, + 0xb9, 0x2d, 0x75, 0xf0, 0xff, 0x60, 0x82, 0xc9, 0x7c, 0x14, 0x27, 0x64, 0x08, 0x2d, 0xad, 0x4c, + 0xbd, 0x3c, 0x39, 0x5c, 0xd4, 0x82, 0xb9, 0x04, 0xcc, 0xe1, 0x29, 0x71, 0x10, 0x6b, 0x52, 0xc2, + 0x10, 0x9c, 0x06, 0x19, 0x1c, 0xc8, 0x94, 0x64, 0x9d, 0x0c, 0x0e, 0xcc, 0xdf, 0x0c, 0x30, 0xbb, + 0xc5, 0xc2, 0x9d, 0xa4, 0xda, 0xc0, 0x3c, 0x85, 0x26, 0x11, 0x87, 0xf3, 0x60, 0x52, 0xe5, 0xb0, + 0x07, 0xbf, 0x26, 0xe5, 0x8d, 0x7e, 0x3a, 0x99, 0x7e, 0x3a, 0xf0, 0x2e, 0xc8, 0xfb, 0x11, 0x46, + 0x84, 0x0b, 0x1f, 0x99, 0x97, 0xf5, 0x4c, 0xd1, 0x70, 0x26, 0x95, 0x72, 0x23, 0x80, 0x1f, 0x83, + 0x89, 0x58, 0x46, 0x97, 0xa9, 0x98, 0xaa, 0xdc, 0x1f, 0x91, 0xfa, 0x3e, 0x2e, 0x8e, 0xf6, 0x3a, + 0x7b, 0xdf, 0x7f, 0x0d, 0x30, 0xd5, 0x4f, 0xf8, 0x19, 0x00, 0xf5, 0x96, 0xab, 0x90, 0xac, 0x68, + 0xc8, 0xb7, 0x7d, 0x30, 0xe2, 0x80, 0x1d, 0x4e, 0x63, 0x2f, 0x44, 0xcf, 0xbd, 0x28, 0x41, 0x4e, + 0xbe, 0xde, 0x52, 0x61, 0x18, 0x5c, 0x06, 0xb9, 0x6a, 0x44, 0xfd, 0xba, 0xbc, 0xdc, 0xe8, 0xf2, + 0x58, 0x17, 0x38, 0x47, 0xc1, 0x45, 0x56, 0x6a, 0x08, 0x87, 0x35, 0x2e, 0xaf, 0x9e, 0x75, 0xb4, + 0x04, 0x4b, 0x60, 0x32, 0x46, 0x2d, 0xcc, 0x30, 0x25, 0xf2, 0xda, 0x59, 0xa7, 0x27, 0xc3, 0x47, + 0x00, 0x7a, 0x51, 0x44, 0xdb, 0x6e, 0xbd, 0xe5, 0xfa, 0x5e, 0x14, 0x55, 0x3d, 0xbf, 0xce, 0x64, + 0x09, 0x4c, 0x3a, 0x37, 0xa4, 0x65, 0xb3, 0xf5, 0x59, 0xaa, 0x37, 0x0f, 0x0c, 0x50, 0xe8, 0x67, + 0x0d, 0xdf, 0x03, 0xd3, 0x4c, 0xc9, 0x6e, 0x33, 0x46, 0xfb, 0xb8, 0xa3, 0x6b, 0xfd, 0xba, 0xd6, + 0x6e, 0x4b, 0x25, 0xbc, 0x01, 0xc6, 0xeb, 0xa8, 0x2b, 0xef, 0x53, 0x70, 0xc4, 0x27, 0x9c, 0x05, + 0xb9, 0x96, 0x88, 0x20, 0xa9, 0x16, 0x1c, 0x25, 0xc0, 0x27, 0x20, 0xb7, 0x2d, 0x9a, 0x4c, 0xbf, + 0xce, 0x6d, 0xeb, 0xb4, 0x09, 0x2d, 0xd5, 0x84, 0x96, 0xb4, 0x7f, 0xd5, 0x64, 0x8e, 0x42, 0x9a, + 0x3f, 0x1b, 0x20, 0x27, 0xb3, 0x00, 0x3f, 0x05, 0x37, 0x09, 0xea, 0x70, 0x57, 0x26, 0xc3, 0xad, + 0x21, 0x4f, 0xd4, 0x87, 0x21, 0x03, 0xcd, 0x5a, 0x6a, 0xac, 0x58, 0xe9, 0x58, 0xb1, 0xd6, 0x48, + 0xd7, 0x99, 0x11, 0x70, 0xe9, 0xfb, 0xa5, 0x04, 0xc3, 0x47, 0x22, 0x81, 0x5e, 0x5a, 0x56, 0xc3, + 0xdc, 0x34, 0x06, 0x56, 0x40, 0x86, 0x77, 0x24, 0xff, 0xa9, 0x8a, 0x39, 0xe2, 0x8d, 0x76, 0x3b, + 0xea, 0x85, 0x33, 0xbc, 0x63, 0xfe, 0x65, 0x80, 0x6b, 0x5a, 0x86, 0x1f, 0x8a, 0x67, 0x51, 0x4d, + 0xa1, 0x69, 0xde, 0xe9, 0xbf, 0xaf, 0x98, 0x48, 0xd6, 0x17, 0x1d, 0xe4, 0xef, 0x76, 0x74, 0x11, + 0xf6, 0xe0, 0xf0, 0x13, 0x30, 0x1d, 0xa0, 0x08, 0xb7, 0x44, 0x77, 0xc8, 0xa9, 0xa4, 0x09, 0x17, + 0x87, 0x25, 0xcc, 0xb9, 0x9e, 0xe2, 0xa5, 0x08, 0xd7, 0xc0, 0x0c, 0x26, 0x7e, 0x94, 0x88, 0x1a, + 0xd0, 0x11, 0xc6, 0x2f, 0x88, 0x30, 0xdd, 0x73, 0x50, 0x21, 0x20, 0xc8, 0x06, 0x1e, 0xf7, 0xe4, + 0x53, 0x15, 0x1c, 0xf9, 0x6d, 0x96, 0xc1, 0x3b, 0xe7, 0xb5, 0x72, 0xda, 0xfb, 0xa6, 0x07, 0xee, + 0xca, 0x09, 0xd1, 0xa0, 0x2d, 0x34, 0x30, 0x1f, 0x5e, 0x24, 0x88, 0x5d, 0xa5, 0xeb, 0xcf, 0x36, + 0xa5, 0x09, 0x16, 0x86, 0x1f, 0xa1, 0x69, 0xbc, 0xcc, 0x48, 0x1e, 0x7b, 0x72, 0xc2, 0x5d, 0x9e, + 0xc7, 0x2a, 0x98, 0x24, 0xa8, 0xed, 0x5e, 0x6a, 0x82, 0x5f, 0x23, 0xa8, 0xbd, 0x29, 0x86, 0xf8, + 0xa2, 0xa8, 0xd2, 0xb6, 0x7b, 0x76, 0xe4, 0xaa, 0x7e, 0x9d, 0x21, 0xa8, 0xbd, 0xd7, 0x3f, 0x75, + 0x97, 0xc1, 0x9c, 0xc0, 0x9e, 0x37, 0xf4, 0xd5, 0x24, 0xbf, 0x45, 0x50, 0x7b, 0x77, 0x70, 0xee, + 0x9f, 0x26, 0x2a, 0x77, 0x51, 0xa2, 0x86, 0xe4, 0x40, 0x27, 0xea, 0x77, 0x03, 0xcc, 0xf4, 0x40, + 0xdb, 0x72, 0x77, 0xc2, 0x65, 0x90, 0xf7, 0x12, 0x5e, 0xa3, 0x31, 0xe6, 0x5d, 0xd5, 0xed, 0xeb, + 0xc5, 0x3f, 0x7e, 0x7d, 0x3c, 0xab, 0x97, 0xfb, 0x5a, 0x10, 0xc4, 0x88, 0xb1, 0x1d, 0x1e, 0x63, + 0x12, 0x3a, 0xa7, 0x50, 0xf8, 0x39, 0x98, 0x50, 0xdb, 0x57, 0xd7, 0xea, 0xbd, 0x11, 0x39, 0x53, + 0x47, 0xad, 0xe7, 0x5f, 0xfd, 0x7d, 0x77, 0xec, 0xa7, 0x93, 0xc3, 0x45, 0xc3, 0xd1, 0xbe, 0x2b, + 0x4b, 0xe2, 0x0a, 0xa7, 0x51, 0xbf, 0x3f, 0x39, 0x5c, 0xbc, 0x37, 0xb8, 0xe6, 0xdf, 0xe0, 0x6c, + 0xce, 0x83, 0xb9, 0x37, 0x54, 0xe9, 0x15, 0x2b, 0xbf, 0xe4, 0xc0, 0xf8, 0x16, 0x0b, 0xe1, 0x0f, + 0x06, 0x98, 0x1b, 0xb6, 0xcd, 0x9f, 0x8e, 0xa0, 0x3a, 0x7c, 0xe3, 0x95, 0x3e, 0xba, 0x92, 0x5b, + 0x6f, 0x51, 0x7e, 0x0b, 0x6e, 0x0e, 0x2e, 0x45, 0x7b, 0x74, 0xcc, 0x01, 0x87, 0xd2, 0x07, 0x97, + 0x74, 0xe8, 0x1d, 0x7f, 0x60, 0x80, 0x5b, 0xe7, 0xb6, 0x11, 0x5c, 0xb9, 0xe8, 0x5e, 0xc3, 0xdb, + 0xbb, 0xb4, 0x7a, 0x25, 0xdf, 0x3e, 0x4a, 0xe7, 0x16, 0xec, 0x45, 0x94, 0x46, 0x75, 0xfa, 0x45, + 0x94, 0x46, 0x76, 0x08, 0x24, 0xa0, 0x70, 0xa6, 0x3b, 0x16, 0xdf, 0x26, 0x98, 0xc2, 0x96, 0x2a, + 0x6f, 0x8f, 0x4d, 0xcf, 0x2b, 0xe5, 0xbe, 0x13, 0xed, 0xb0, 0xbe, 0xf7, 0xea, 0xa8, 0x6c, 0xbc, + 0x3e, 0x2a, 0x1b, 0xff, 0x1c, 0x95, 0x8d, 0x83, 0xe3, 0xf2, 0xd8, 0xeb, 0xe3, 0xf2, 0xd8, 0x9f, + 0xc7, 0xe5, 0xb1, 0x6f, 0x56, 0x43, 0xcc, 0x6b, 0x49, 0xd5, 0xf2, 0x69, 0xc3, 0xd6, 0xe1, 0x1f, + 0xd3, 0x38, 0x4c, 0xbf, 0xed, 0xd6, 0x53, 0xbb, 0x73, 0xde, 0x0f, 0x7f, 0xf1, 0xd3, 0xb7, 0x3a, + 0x21, 0x17, 0xdd, 0xfb, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xaf, 0xaf, 0xe2, 0x7e, 0x22, 0x0c, + 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/interchainqueries/types/tx_test.go b/x/interchainqueries/types/tx_test.go index 835abf9ce..0addf3d3b 100644 --- a/x/interchainqueries/types/tx_test.go +++ b/x/interchainqueries/types/tx_test.go @@ -8,7 +8,7 @@ import ( ibchost "github.com/cosmos/ibc-go/v8/modules/core/exported" "github.com/stretchr/testify/require" - iqtypes "github.com/neutron-org/neutron/v4/x/interchainqueries/types" + iqtypes "github.com/neutron-org/neutron/v5/x/interchainqueries/types" ) const TestAddress = "cosmos10h9stc5v6ntgeygf5xf945njqq5h32r53uquvw" diff --git a/x/interchaintxs/client/cli/query.go b/x/interchaintxs/client/cli/query.go index 7ebb89948..7cd1100d4 100644 --- a/x/interchaintxs/client/cli/query.go +++ b/x/interchaintxs/client/cli/query.go @@ -6,7 +6,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) // GetQueryCmd returns the cli query commands for this module diff --git a/x/interchaintxs/client/cli/query_interchainaccounts.go b/x/interchaintxs/client/cli/query_interchainaccounts.go index 784a4ada2..a32a7d445 100644 --- a/x/interchaintxs/client/cli/query_interchainaccounts.go +++ b/x/interchaintxs/client/cli/query_interchainaccounts.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) func CmdInterchainAccountCmd() *cobra.Command { diff --git a/x/interchaintxs/client/cli/query_params.go b/x/interchaintxs/client/cli/query_params.go index 206605fca..c6123d9aa 100644 --- a/x/interchaintxs/client/cli/query_params.go +++ b/x/interchaintxs/client/cli/query_params.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) func CmdQueryParams() *cobra.Command { diff --git a/x/interchaintxs/client/cli/tx.go b/x/interchaintxs/client/cli/tx.go index 26a914656..512f9d617 100644 --- a/x/interchaintxs/client/cli/tx.go +++ b/x/interchaintxs/client/cli/tx.go @@ -6,7 +6,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) // GetTxCmd returns the transaction commands for this module diff --git a/x/interchaintxs/genesis.go b/x/interchaintxs/genesis.go index 63cf86198..33483f6c9 100644 --- a/x/interchaintxs/genesis.go +++ b/x/interchaintxs/genesis.go @@ -3,8 +3,8 @@ package interchaintxs import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/interchaintxs/keeper" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/keeper" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) // InitGenesis initializes the capability module's state from a provided genesis diff --git a/x/interchaintxs/genesis_test.go b/x/interchaintxs/genesis_test.go index d50e01491..6759b0931 100644 --- a/x/interchaintxs/genesis_test.go +++ b/x/interchaintxs/genesis_test.go @@ -5,10 +5,10 @@ import ( "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil/common/nullify" - keepertest "github.com/neutron-org/neutron/v4/testutil/interchaintxs/keeper" - "github.com/neutron-org/neutron/v4/x/interchaintxs" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/testutil/common/nullify" + keepertest "github.com/neutron-org/neutron/v5/testutil/interchaintxs/keeper" + "github.com/neutron-org/neutron/v5/x/interchaintxs" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) func TestGenesis(t *testing.T) { diff --git a/x/interchaintxs/ibc_module.go b/x/interchaintxs/ibc_module.go index 85183f032..77043a795 100644 --- a/x/interchaintxs/ibc_module.go +++ b/x/interchaintxs/ibc_module.go @@ -9,7 +9,7 @@ import ( porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" - "github.com/neutron-org/neutron/v4/x/interchaintxs/keeper" + "github.com/neutron-org/neutron/v5/x/interchaintxs/keeper" ) var _ porttypes.IBCModule = IBCModule{} diff --git a/x/interchaintxs/keeper/grpc_query.go b/x/interchaintxs/keeper/grpc_query.go index 1e0373538..925847d29 100644 --- a/x/interchaintxs/keeper/grpc_query.go +++ b/x/interchaintxs/keeper/grpc_query.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) var _ types.QueryServer = Keeper{} diff --git a/x/interchaintxs/keeper/grpc_query_interchainaccount.go b/x/interchaintxs/keeper/grpc_query_interchainaccount.go index d564636cc..94489e7c7 100644 --- a/x/interchaintxs/keeper/grpc_query_interchainaccount.go +++ b/x/interchaintxs/keeper/grpc_query_interchainaccount.go @@ -9,7 +9,7 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) func (k Keeper) InterchainAccountAddress(c context.Context, req *types.QueryInterchainAccountAddressRequest) (*types.QueryInterchainAccountAddressResponse, error) { diff --git a/x/interchaintxs/keeper/grpc_query_interchainaccount_test.go b/x/interchaintxs/keeper/grpc_query_interchainaccount_test.go index 327e20573..4550a9afc 100644 --- a/x/interchaintxs/keeper/grpc_query_interchainaccount_test.go +++ b/x/interchaintxs/keeper/grpc_query_interchainaccount_test.go @@ -9,10 +9,10 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil" - testkeeper "github.com/neutron-org/neutron/v4/testutil/interchaintxs/keeper" - mock_types "github.com/neutron-org/neutron/v4/testutil/mocks/interchaintxs/types" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/testutil" + testkeeper "github.com/neutron-org/neutron/v5/testutil/interchaintxs/keeper" + mock_types "github.com/neutron-org/neutron/v5/testutil/mocks/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) func TestKeeper_InterchainAccountAddress(t *testing.T) { diff --git a/x/interchaintxs/keeper/grpc_query_params.go b/x/interchaintxs/keeper/grpc_query_params.go index fb917e8f9..4119d0b92 100644 --- a/x/interchaintxs/keeper/grpc_query_params.go +++ b/x/interchaintxs/keeper/grpc_query_params.go @@ -7,7 +7,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { diff --git a/x/interchaintxs/keeper/grpc_query_params_test.go b/x/interchaintxs/keeper/grpc_query_params_test.go index 89770d771..0d75ff1db 100644 --- a/x/interchaintxs/keeper/grpc_query_params_test.go +++ b/x/interchaintxs/keeper/grpc_query_params_test.go @@ -5,8 +5,8 @@ import ( "github.com/stretchr/testify/require" - testkeeper "github.com/neutron-org/neutron/v4/testutil/interchaintxs/keeper" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + testkeeper "github.com/neutron-org/neutron/v5/testutil/interchaintxs/keeper" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) func TestParamsQuery(t *testing.T) { diff --git a/x/interchaintxs/keeper/ibc_handlers.go b/x/interchaintxs/keeper/ibc_handlers.go index 93097350c..bdceebf64 100644 --- a/x/interchaintxs/keeper/ibc_handlers.go +++ b/x/interchaintxs/keeper/ibc_handlers.go @@ -3,7 +3,7 @@ package keeper import ( "time" - "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" + "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" "cosmossdk.io/errors" @@ -12,9 +12,9 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" - contractmanagertypes "github.com/neutron-org/neutron/v4/x/contractmanager/types" - feetypes "github.com/neutron-org/neutron/v4/x/feerefunder/types" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + contractmanagertypes "github.com/neutron-org/neutron/v5/x/contractmanager/types" + feetypes "github.com/neutron-org/neutron/v5/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) // HandleAcknowledgement passes the acknowledgement data to the appropriate contract via a sudo call. diff --git a/x/interchaintxs/keeper/ibc_handlers_test.go b/x/interchaintxs/keeper/ibc_handlers_test.go index 313e25391..df8faca3d 100644 --- a/x/interchaintxs/keeper/ibc_handlers_test.go +++ b/x/interchaintxs/keeper/ibc_handlers_test.go @@ -6,7 +6,7 @@ import ( types2 "cosmossdk.io/store/types" - "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" + "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" sdk "github.com/cosmos/cosmos-sdk/types" icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" @@ -14,11 +14,11 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil" - testkeeper "github.com/neutron-org/neutron/v4/testutil/interchaintxs/keeper" - mock_types "github.com/neutron-org/neutron/v4/testutil/mocks/interchaintxs/types" - "github.com/neutron-org/neutron/v4/x/contractmanager/types" - feetypes "github.com/neutron-org/neutron/v4/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/testutil" + testkeeper "github.com/neutron-org/neutron/v5/testutil/interchaintxs/keeper" + mock_types "github.com/neutron-org/neutron/v5/testutil/mocks/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/contractmanager/types" + feetypes "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) const ICAId = ".ica0" diff --git a/x/interchaintxs/keeper/keeper.go b/x/interchaintxs/keeper/keeper.go index 4f609c96a..5a29a82b1 100644 --- a/x/interchaintxs/keeper/keeper.go +++ b/x/interchaintxs/keeper/keeper.go @@ -12,7 +12,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) const ( diff --git a/x/interchaintxs/keeper/msg_server.go b/x/interchaintxs/keeper/msg_server.go index 53f47483d..9cf0af3f3 100644 --- a/x/interchaintxs/keeper/msg_server.go +++ b/x/interchaintxs/keeper/msg_server.go @@ -16,8 +16,8 @@ import ( icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" - feetypes "github.com/neutron-org/neutron/v4/x/feerefunder/types" - ictxtypes "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + feetypes "github.com/neutron-org/neutron/v5/x/feerefunder/types" + ictxtypes "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) type msgServer struct { diff --git a/x/interchaintxs/keeper/msg_server_test.go b/x/interchaintxs/keeper/msg_server_test.go index a04afe5bb..61feca1a0 100644 --- a/x/interchaintxs/keeper/msg_server_test.go +++ b/x/interchaintxs/keeper/msg_server_test.go @@ -9,14 +9,14 @@ import ( "cosmossdk.io/math" - "github.com/neutron-org/neutron/v4/app/params" + "github.com/neutron-org/neutron/v5/app/params" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" icacontrollertypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types" icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" - feerefundertypes "github.com/neutron-org/neutron/v4/x/feerefunder/types" - "github.com/neutron-org/neutron/v4/x/interchaintxs/keeper" + feerefundertypes "github.com/neutron-org/neutron/v5/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/keeper" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -25,10 +25,10 @@ import ( codectypes "github.com/cosmos/cosmos-sdk/codec/types" - "github.com/neutron-org/neutron/v4/testutil" - testkeeper "github.com/neutron-org/neutron/v4/testutil/interchaintxs/keeper" - mock_types "github.com/neutron-org/neutron/v4/testutil/mocks/interchaintxs/types" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/testutil" + testkeeper "github.com/neutron-org/neutron/v5/testutil/interchaintxs/keeper" + mock_types "github.com/neutron-org/neutron/v5/testutil/mocks/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) const TestFeeCollectorAddr = "neutron1dua3d89szsmd3vwg0y5a2689ah0g4x68ps8vew" diff --git a/x/interchaintxs/keeper/params.go b/x/interchaintxs/keeper/params.go index dbbb8f6d6..abef57d10 100644 --- a/x/interchaintxs/keeper/params.go +++ b/x/interchaintxs/keeper/params.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) // GetParams get all parameters as types.Params diff --git a/x/interchaintxs/keeper/params_test.go b/x/interchaintxs/keeper/params_test.go index 06ac97d6c..7ddf78c0d 100644 --- a/x/interchaintxs/keeper/params_test.go +++ b/x/interchaintxs/keeper/params_test.go @@ -5,8 +5,8 @@ import ( "github.com/stretchr/testify/require" - testkeeper "github.com/neutron-org/neutron/v4/testutil/interchaintxs/keeper" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + testkeeper "github.com/neutron-org/neutron/v5/testutil/interchaintxs/keeper" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) func TestGetParams(t *testing.T) { diff --git a/x/interchaintxs/module.go b/x/interchaintxs/module.go index 847b16cf1..07529147c 100644 --- a/x/interchaintxs/module.go +++ b/x/interchaintxs/module.go @@ -17,9 +17,9 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - "github.com/neutron-org/neutron/v4/x/interchaintxs/client/cli" - "github.com/neutron-org/neutron/v4/x/interchaintxs/keeper" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/client/cli" + "github.com/neutron-org/neutron/v5/x/interchaintxs/keeper" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) var ( diff --git a/x/interchaintxs/module_simulation.go b/x/interchaintxs/module_simulation.go index 945b32c88..92cc103c8 100644 --- a/x/interchaintxs/module_simulation.go +++ b/x/interchaintxs/module_simulation.go @@ -7,8 +7,8 @@ import ( simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" - interchaintxssimulation "github.com/neutron-org/neutron/v4/x/interchaintxs/simulation" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + interchaintxssimulation "github.com/neutron-org/neutron/v5/x/interchaintxs/simulation" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) // avoid unused import issue diff --git a/x/interchaintxs/types/expected_keepers.go b/x/interchaintxs/types/expected_keepers.go index 6df8596aa..718b5c992 100644 --- a/x/interchaintxs/types/expected_keepers.go +++ b/x/interchaintxs/types/expected_keepers.go @@ -9,7 +9,7 @@ import ( channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" - feerefundertypes "github.com/neutron-org/neutron/v4/x/feerefunder/types" + feerefundertypes "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) // AccountKeeper defines the expected account keeper used for simulations (noalias) diff --git a/x/interchaintxs/types/genesis.pb.go b/x/interchaintxs/types/genesis.pb.go index 25770ae3c..56141516e 100644 --- a/x/interchaintxs/types/genesis.pb.go +++ b/x/interchaintxs/types/genesis.pb.go @@ -89,8 +89,8 @@ var fileDescriptor_d16558b72a810826 = []byte{ 0x0a, 0x3c, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xf3, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, 0xa8, 0x99, 0xba, 0xf9, 0x45, 0xe9, 0x30, 0xb6, - 0x7e, 0x99, 0x89, 0x7e, 0x05, 0x9a, 0x63, 0x4b, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x2e, - 0x35, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x02, 0x5d, 0x4b, 0x80, 0x2a, 0x01, 0x00, 0x00, + 0x7e, 0x99, 0xa9, 0x7e, 0x05, 0x9a, 0x63, 0x4b, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x2e, + 0x35, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xd3, 0xb5, 0xac, 0x8e, 0x2a, 0x01, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/interchaintxs/types/genesis_test.go b/x/interchaintxs/types/genesis_test.go index 7bab45336..ae0e0bd7b 100644 --- a/x/interchaintxs/types/genesis_test.go +++ b/x/interchaintxs/types/genesis_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) func TestGenesisState_Validate(t *testing.T) { diff --git a/x/interchaintxs/types/params.go b/x/interchaintxs/types/params.go index 35fea139d..445a0b0d0 100644 --- a/x/interchaintxs/types/params.go +++ b/x/interchaintxs/types/params.go @@ -7,7 +7,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - "github.com/neutron-org/neutron/v4/app/params" + "github.com/neutron-org/neutron/v5/app/params" "gopkg.in/yaml.v2" ) diff --git a/x/interchaintxs/types/params.pb.go b/x/interchaintxs/types/params.pb.go index e2f86cfc9..e3d2cd984 100644 --- a/x/interchaintxs/types/params.pb.go +++ b/x/interchaintxs/types/params.pb.go @@ -90,7 +90,7 @@ var fileDescriptor_52b0ced89d3fa9c6 = []byte{ // 291 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x90, 0x31, 0x4b, 0x03, 0x41, 0x10, 0x85, 0x6f, 0x35, 0xa4, 0xb8, 0x58, 0x05, 0x91, 0x98, 0x62, 0x13, 0x04, 0x21, 0x8d, 0xbb, - 0x9c, 0x0a, 0x42, 0xca, 0x08, 0x76, 0x01, 0x8d, 0x56, 0x36, 0xc7, 0xde, 0x31, 0x6e, 0xb6, 0xd8, + 0x9c, 0x22, 0x42, 0xca, 0x08, 0x76, 0x01, 0x8d, 0x56, 0x36, 0xc7, 0xde, 0x31, 0x6e, 0xb6, 0xd8, 0xdd, 0xb0, 0xb3, 0x39, 0xd6, 0x3f, 0x21, 0x96, 0x96, 0xfe, 0x9c, 0x94, 0x29, 0xad, 0x44, 0xee, 0xfe, 0x88, 0xe4, 0xee, 0x52, 0x68, 0xf7, 0x98, 0x79, 0x8f, 0xf9, 0xe6, 0xc5, 0xe7, 0x06, 0xd6, 0xde, 0x59, 0xc3, 0x95, 0xf1, 0xe0, 0xf2, 0xa5, 0x50, 0xc6, 0x07, 0xe4, 0x45, 0xc2, 0x57, 0xc2, @@ -105,7 +105,7 @@ var fileDescriptor_52b0ced89d3fa9c6 = []byte{ 0xe3, 0x73, 0x14, 0xcd, 0x1e, 0x36, 0x25, 0x25, 0xdb, 0x92, 0x92, 0x9f, 0x92, 0x92, 0xf7, 0x8a, 0x46, 0xdb, 0x8a, 0x46, 0x5f, 0x15, 0x8d, 0x9e, 0x6f, 0xa4, 0xf2, 0xcb, 0x75, 0xc6, 0x72, 0xab, 0x79, 0xdb, 0xc2, 0x85, 0x75, 0x72, 0xaf, 0x79, 0x71, 0xcd, 0xc3, 0xbf, 0xf6, 0xfc, 0xeb, 0x0a, - 0x30, 0xeb, 0xd6, 0xaf, 0x5e, 0xfd, 0x06, 0x00, 0x00, 0xff, 0xff, 0x40, 0x55, 0x79, 0xd9, 0x63, + 0x30, 0xeb, 0xd6, 0xaf, 0x5e, 0xfd, 0x06, 0x00, 0x00, 0xff, 0xff, 0x91, 0xbd, 0x9e, 0xd7, 0x63, 0x01, 0x00, 0x00, } diff --git a/x/interchaintxs/types/query.pb.go b/x/interchaintxs/types/query.pb.go index 5f71e842b..5e35adaa5 100644 --- a/x/interchaintxs/types/query.pb.go +++ b/x/interchaintxs/types/query.pb.go @@ -219,7 +219,7 @@ var fileDescriptor_6130c5f6c54e2428 = []byte{ // 483 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0xcf, 0x6a, 0x13, 0x41, 0x18, 0xdf, 0x4d, 0x35, 0xe8, 0xa8, 0x97, 0x69, 0x85, 0x65, 0xd1, 0x4d, 0x59, 0x1b, 0x10, 0xb1, - 0x3b, 0x24, 0x0a, 0x82, 0x48, 0xa5, 0xbd, 0xe5, 0x66, 0x03, 0x5e, 0xbc, 0x84, 0xc9, 0xee, 0xb0, + 0x3b, 0x24, 0x22, 0x82, 0x48, 0xa5, 0xbd, 0xe5, 0x66, 0x03, 0x5e, 0xbc, 0x84, 0xc9, 0xee, 0xb0, 0x1d, 0x34, 0xf3, 0x6d, 0x76, 0x66, 0x63, 0x4b, 0xc8, 0xc5, 0x93, 0x07, 0x11, 0xc1, 0x17, 0xe8, 0xcd, 0x9b, 0xcf, 0xd1, 0x63, 0xc1, 0x8b, 0x27, 0x91, 0xc4, 0x83, 0x8f, 0x21, 0x3b, 0x33, 0x6d, 0xd9, 0x9a, 0x25, 0xe2, 0x6d, 0xf8, 0xf6, 0xf7, 0xef, 0xfb, 0xb3, 0x68, 0x4b, 0xb0, 0x42, 0xe5, @@ -246,7 +246,7 @@ var fileDescriptor_6130c5f6c54e2428 = []byte{ 0x9f, 0xcc, 0x03, 0xf7, 0x74, 0x1e, 0xb8, 0x3f, 0xe7, 0x81, 0xfb, 0x69, 0x11, 0x38, 0xa7, 0x8b, 0xc0, 0xf9, 0xbe, 0x08, 0x9c, 0x57, 0x4f, 0x52, 0xae, 0x0e, 0x8a, 0x61, 0x14, 0xc3, 0xe8, 0x2c, 0xce, 0x36, 0xe4, 0xe9, 0x79, 0xb4, 0xc9, 0x63, 0x72, 0x78, 0x29, 0x9f, 0x3a, 0xca, 0x98, 0x1c, - 0x36, 0xf5, 0x8f, 0xf8, 0xe8, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x40, 0xec, 0x47, 0x51, + 0x36, 0xf5, 0x8f, 0xf8, 0xe8, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc7, 0xa8, 0x0b, 0x49, 0x51, 0x04, 0x00, 0x00, } diff --git a/x/interchaintxs/types/tx.pb.go b/x/interchaintxs/types/tx.pb.go index 8db65cb59..65c1ee010 100644 --- a/x/interchaintxs/types/tx.pb.go +++ b/x/interchaintxs/types/tx.pb.go @@ -16,7 +16,7 @@ import ( grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" types1 "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" - types3 "github.com/neutron-org/neutron/v4/x/feerefunder/types" + types3 "github.com/neutron-org/neutron/v5/x/feerefunder/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" @@ -337,7 +337,7 @@ var fileDescriptor_50f087790e59c806 = []byte{ // 891 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x31, 0x6f, 0x23, 0x45, 0x14, 0xf6, 0xc6, 0xbe, 0xe4, 0x3c, 0x0e, 0x20, 0xf6, 0x72, 0xca, 0xda, 0x4a, 0x6c, 0x67, 0xe1, - 0x24, 0x13, 0x29, 0xb3, 0xb1, 0x41, 0x41, 0x8a, 0x04, 0x52, 0x7c, 0xd2, 0x49, 0x2e, 0x22, 0x8e, + 0x24, 0x13, 0x29, 0xb3, 0xb1, 0x11, 0x41, 0x8a, 0x04, 0x52, 0x7c, 0xd2, 0x49, 0x2e, 0x22, 0x8e, 0xbd, 0xa3, 0xa1, 0xb1, 0x66, 0x77, 0xc7, 0xeb, 0x11, 0xd9, 0x19, 0x33, 0x33, 0x6b, 0xc5, 0x1d, 0xa2, 0x42, 0x54, 0x34, 0x14, 0x74, 0x57, 0x22, 0x0a, 0x94, 0x82, 0x1f, 0x40, 0x79, 0xe5, 0x89, 0x8a, 0x2a, 0xa0, 0xa4, 0x08, 0xf5, 0x15, 0xd4, 0x68, 0x76, 0x67, 0x1c, 0xdb, 0x3a, 0x5b, 0x11, @@ -390,7 +390,7 @@ var fileDescriptor_50f087790e59c806 = []byte{ 0xaa, 0x6e, 0xfd, 0x7d, 0x55, 0xb7, 0x7e, 0xb8, 0xae, 0x17, 0x5e, 0x5d, 0xd7, 0x0b, 0x7f, 0x5e, 0xd7, 0x0b, 0x5f, 0x7e, 0x3c, 0xb3, 0xe3, 0xb4, 0xf7, 0x03, 0xc6, 0x63, 0x73, 0xf6, 0xc6, 0x1f, 0x79, 0xe7, 0x0b, 0x1f, 0x8e, 0x6c, 0xf1, 0x05, 0xeb, 0xd9, 0x28, 0x7e, 0xf8, 0x5f, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xda, 0x2c, 0x63, 0xb9, 0xaa, 0x07, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x0b, 0xc4, 0x84, 0xb7, 0xaa, 0x07, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/interchaintxs/types/tx_test.go b/x/interchaintxs/types/tx_test.go index 79bbc2905..f0fe46dd0 100644 --- a/x/interchaintxs/types/tx_test.go +++ b/x/interchaintxs/types/tx_test.go @@ -7,7 +7,7 @@ import ( sdktypes "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) const TestAddress = "neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2" diff --git a/x/interchaintxs/types/types_test.go b/x/interchaintxs/types/types_test.go index db7876c3b..d49fb1f5f 100644 --- a/x/interchaintxs/types/types_test.go +++ b/x/interchaintxs/types/types_test.go @@ -3,11 +3,11 @@ package types_test import ( "testing" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) const ( diff --git a/x/tokenfactory/client/cli/query.go b/x/tokenfactory/client/cli/query.go index 5b62e060a..d423ba3ea 100644 --- a/x/tokenfactory/client/cli/query.go +++ b/x/tokenfactory/client/cli/query.go @@ -9,7 +9,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) // GetQueryCmd returns the cli query commands for this module diff --git a/x/tokenfactory/client/cli/tx.go b/x/tokenfactory/client/cli/tx.go index 90117ccc5..96a3c2747 100644 --- a/x/tokenfactory/client/cli/tx.go +++ b/x/tokenfactory/client/cli/tx.go @@ -14,7 +14,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" // "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) // GetTxCmd returns the transaction commands for this module diff --git a/x/tokenfactory/keeper/admins.go b/x/tokenfactory/keeper/admins.go index b57cc3b6d..237c5032a 100644 --- a/x/tokenfactory/keeper/admins.go +++ b/x/tokenfactory/keeper/admins.go @@ -4,7 +4,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/gogo/protobuf/proto" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) // GetAuthorityMetadata returns the authority metadata for a specific denom diff --git a/x/tokenfactory/keeper/admins_test.go b/x/tokenfactory/keeper/admins_test.go index a44606575..708ec1156 100644 --- a/x/tokenfactory/keeper/admins_test.go +++ b/x/tokenfactory/keeper/admins_test.go @@ -6,8 +6,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/app/params" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/app/params" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) func (suite *KeeperTestSuite) TestAdminMsgs() { diff --git a/x/tokenfactory/keeper/bankactions.go b/x/tokenfactory/keeper/bankactions.go index 5e7b650f9..ed2f7d565 100644 --- a/x/tokenfactory/keeper/bankactions.go +++ b/x/tokenfactory/keeper/bankactions.go @@ -5,7 +5,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) func (k Keeper) mintTo(ctx sdk.Context, amount sdk.Coin, mintTo string) error { diff --git a/x/tokenfactory/keeper/before_send.go b/x/tokenfactory/keeper/before_send.go index 40e81ba8b..ff8c5b41e 100644 --- a/x/tokenfactory/keeper/before_send.go +++ b/x/tokenfactory/keeper/before_send.go @@ -7,7 +7,7 @@ import ( types2 "cosmossdk.io/store/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" errorsmod "cosmossdk.io/errors" wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types" diff --git a/x/tokenfactory/keeper/before_send_test.go b/x/tokenfactory/keeper/before_send_test.go index cd1def71d..3ffd7a0f4 100644 --- a/x/tokenfactory/keeper/before_send_test.go +++ b/x/tokenfactory/keeper/before_send_test.go @@ -8,7 +8,7 @@ import ( wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) func (suite *KeeperTestSuite) initBalanceTrackContract(denom string) (sdk.AccAddress, uint64, string) { diff --git a/x/tokenfactory/keeper/createdenom.go b/x/tokenfactory/keeper/createdenom.go index 35979f9f4..18bb3c617 100644 --- a/x/tokenfactory/keeper/createdenom.go +++ b/x/tokenfactory/keeper/createdenom.go @@ -8,7 +8,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) // ConvertToBaseToken converts a fee amount in a whitelisted fee token to the base fee token amount diff --git a/x/tokenfactory/keeper/createdenom_test.go b/x/tokenfactory/keeper/createdenom_test.go index 38fcd1360..91e786bb9 100644 --- a/x/tokenfactory/keeper/createdenom_test.go +++ b/x/tokenfactory/keeper/createdenom_test.go @@ -7,7 +7,7 @@ import ( "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) func (suite *KeeperTestSuite) TestMsgCreateDenom() { diff --git a/x/tokenfactory/keeper/genesis.go b/x/tokenfactory/keeper/genesis.go index f013f6ac0..e203f9c5f 100644 --- a/x/tokenfactory/keeper/genesis.go +++ b/x/tokenfactory/keeper/genesis.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) // InitGenesis initializes the tokenfactory module's state from a provided genesis diff --git a/x/tokenfactory/keeper/genesis_test.go b/x/tokenfactory/keeper/genesis_test.go index e059b848f..d96e70b09 100644 --- a/x/tokenfactory/keeper/genesis_test.go +++ b/x/tokenfactory/keeper/genesis_test.go @@ -3,7 +3,7 @@ package keeper_test import ( banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) func (suite *KeeperTestSuite) TestGenesis() { diff --git a/x/tokenfactory/keeper/grpc_query.go b/x/tokenfactory/keeper/grpc_query.go index b3999f363..dbba4a595 100644 --- a/x/tokenfactory/keeper/grpc_query.go +++ b/x/tokenfactory/keeper/grpc_query.go @@ -6,7 +6,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) var _ types.QueryServer = Keeper{} diff --git a/x/tokenfactory/keeper/keeper.go b/x/tokenfactory/keeper/keeper.go index 593e977a7..241183ca1 100644 --- a/x/tokenfactory/keeper/keeper.go +++ b/x/tokenfactory/keeper/keeper.go @@ -11,7 +11,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) type ( diff --git a/x/tokenfactory/keeper/keeper_test.go b/x/tokenfactory/keeper/keeper_test.go index ac371decf..bbf4b0488 100644 --- a/x/tokenfactory/keeper/keeper_test.go +++ b/x/tokenfactory/keeper/keeper_test.go @@ -12,10 +12,10 @@ import ( sdktypes "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/app/params" - "github.com/neutron-org/neutron/v4/testutil" - "github.com/neutron-org/neutron/v4/x/tokenfactory/keeper" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/app/params" + "github.com/neutron-org/neutron/v5/testutil" + "github.com/neutron-org/neutron/v5/x/tokenfactory/keeper" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) const ( diff --git a/x/tokenfactory/keeper/migrations.go b/x/tokenfactory/keeper/migrations.go index fa10d45ae..40a46cece 100644 --- a/x/tokenfactory/keeper/migrations.go +++ b/x/tokenfactory/keeper/migrations.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - v2 "github.com/neutron-org/neutron/v4/x/tokenfactory/migrations/v2" + v2 "github.com/neutron-org/neutron/v5/x/tokenfactory/migrations/v2" ) // Migrator is a struct for handling in-place store migrations. diff --git a/x/tokenfactory/keeper/msg_server.go b/x/tokenfactory/keeper/msg_server.go index d708a8488..b7ea7c436 100644 --- a/x/tokenfactory/keeper/msg_server.go +++ b/x/tokenfactory/keeper/msg_server.go @@ -7,7 +7,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) type msgServer struct { diff --git a/x/tokenfactory/keeper/msg_server_test.go b/x/tokenfactory/keeper/msg_server_test.go index 30edda04c..70bd4158d 100644 --- a/x/tokenfactory/keeper/msg_server_test.go +++ b/x/tokenfactory/keeper/msg_server_test.go @@ -10,11 +10,11 @@ import ( banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/app/params" - "github.com/neutron-org/neutron/v4/testutil" - testkeeper "github.com/neutron-org/neutron/v4/testutil/tokenfactory/keeper" - "github.com/neutron-org/neutron/v4/x/tokenfactory/keeper" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/app/params" + "github.com/neutron-org/neutron/v5/testutil" + testkeeper "github.com/neutron-org/neutron/v5/testutil/tokenfactory/keeper" + "github.com/neutron-org/neutron/v5/x/tokenfactory/keeper" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) const ( diff --git a/x/tokenfactory/keeper/params.go b/x/tokenfactory/keeper/params.go index 4faa1764d..3e033cf48 100644 --- a/x/tokenfactory/keeper/params.go +++ b/x/tokenfactory/keeper/params.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/tokenfactory/migrations/v2/store.go b/x/tokenfactory/migrations/v2/store.go index e36561925..5f7d2fc82 100644 --- a/x/tokenfactory/migrations/v2/store.go +++ b/x/tokenfactory/migrations/v2/store.go @@ -12,8 +12,8 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" - v1beta1types "github.com/neutron-org/neutron/v4/x/tokenfactory/types/v1beta1" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" + v1beta1types "github.com/neutron-org/neutron/v5/x/tokenfactory/types/v1beta1" ) type TokenFactoryKeeper interface { diff --git a/x/tokenfactory/migrations/v2/store_test.go b/x/tokenfactory/migrations/v2/store_test.go index b65b99cba..9fc3c2ae4 100644 --- a/x/tokenfactory/migrations/v2/store_test.go +++ b/x/tokenfactory/migrations/v2/store_test.go @@ -10,10 +10,10 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/suite" - "github.com/neutron-org/neutron/v4/testutil" - v2 "github.com/neutron-org/neutron/v4/x/tokenfactory/migrations/v2" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types/v1beta1" + "github.com/neutron-org/neutron/v5/testutil" + v2 "github.com/neutron-org/neutron/v5/x/tokenfactory/migrations/v2" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types/v1beta1" ) type V3DexMigrationTestSuite struct { diff --git a/x/tokenfactory/module.go b/x/tokenfactory/module.go index c0a2322a3..ca560c18f 100644 --- a/x/tokenfactory/module.go +++ b/x/tokenfactory/module.go @@ -19,9 +19,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - "github.com/neutron-org/neutron/v4/x/tokenfactory/client/cli" - "github.com/neutron-org/neutron/v4/x/tokenfactory/keeper" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory/client/cli" + "github.com/neutron-org/neutron/v5/x/tokenfactory/keeper" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) var ( diff --git a/x/tokenfactory/types/authorityMetadata.pb.go b/x/tokenfactory/types/authorityMetadata.pb.go index ad2ace108..bdc322d35 100644 --- a/x/tokenfactory/types/authorityMetadata.pb.go +++ b/x/tokenfactory/types/authorityMetadata.pb.go @@ -95,8 +95,8 @@ var fileDescriptor_99435de88ae175f7 = []byte{ 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xb3, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0xbc, 0xd4, 0xd2, 0x92, 0xa2, 0xfc, 0x3c, 0xdd, 0xfc, 0xa2, - 0x74, 0x18, 0x5b, 0xbf, 0xcc, 0x44, 0xbf, 0x02, 0x35, 0x1c, 0x4a, 0x2a, 0x0b, 0x52, 0x8b, 0x93, - 0xd8, 0xc0, 0x0e, 0x34, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xab, 0xda, 0x91, 0xd6, 0x2c, 0x01, + 0x74, 0x18, 0x5b, 0xbf, 0xcc, 0x54, 0xbf, 0x02, 0x35, 0x1c, 0x4a, 0x2a, 0x0b, 0x52, 0x8b, 0x93, + 0xd8, 0xc0, 0x0e, 0x34, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xa3, 0x39, 0xf1, 0xea, 0x2c, 0x01, 0x00, 0x00, } diff --git a/x/tokenfactory/types/denoms_test.go b/x/tokenfactory/types/denoms_test.go index 14c54eb55..102b751f4 100644 --- a/x/tokenfactory/types/denoms_test.go +++ b/x/tokenfactory/types/denoms_test.go @@ -3,11 +3,11 @@ package types_test import ( "testing" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) func TestDecomposeDenoms(t *testing.T) { diff --git a/x/tokenfactory/types/genesis.pb.go b/x/tokenfactory/types/genesis.pb.go index 3415f1e6c..dd6d89194 100644 --- a/x/tokenfactory/types/genesis.pb.go +++ b/x/tokenfactory/types/genesis.pb.go @@ -153,30 +153,30 @@ var fileDescriptor_5749c3f71850298b = []byte{ // 411 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xcf, 0xae, 0xd2, 0x40, 0x14, 0xc6, 0x3b, 0xf7, 0x5e, 0x6f, 0x62, 0x2f, 0x1a, 0xad, 0x92, 0x54, 0x82, 0x2d, 0x74, 0x61, - 0x08, 0x89, 0x6d, 0x40, 0x62, 0x0c, 0x3b, 0x2a, 0x89, 0x2b, 0x13, 0x52, 0x77, 0x6e, 0x9a, 0xa1, - 0x1d, 0x4b, 0x83, 0xed, 0x69, 0x66, 0x06, 0x62, 0x5f, 0xc0, 0xb5, 0x8f, 0xe0, 0x83, 0xf8, 0x00, - 0x2c, 0x59, 0xba, 0x22, 0x06, 0x36, 0xae, 0x79, 0x01, 0x4d, 0x67, 0xc6, 0x3f, 0x5c, 0x08, 0xbb, - 0xe9, 0x99, 0xdf, 0xf9, 0xce, 0x77, 0xbe, 0x8e, 0xde, 0x05, 0x96, 0x01, 0x4b, 0x99, 0xc7, 0x61, - 0x4e, 0xf2, 0x0f, 0x38, 0xe2, 0x40, 0x4b, 0x6f, 0xd9, 0x9b, 0x12, 0x8e, 0x7b, 0x5e, 0x42, 0x72, - 0xc2, 0x52, 0xe6, 0x16, 0x14, 0x38, 0x18, 0x4d, 0xc5, 0xba, 0xff, 0xb3, 0xae, 0x62, 0x1b, 0x8f, - 0x13, 0x48, 0x40, 0x80, 0x5e, 0x75, 0x92, 0x3d, 0x8d, 0xf6, 0x49, 0xfd, 0x02, 0x53, 0x9c, 0x29, - 0xd9, 0xc6, 0xe0, 0xac, 0x05, 0xbc, 0xe0, 0x33, 0xa0, 0x29, 0x2f, 0xdf, 0x12, 0x8e, 0x63, 0xcc, - 0xb1, 0xec, 0x72, 0xbe, 0x21, 0xbd, 0xf6, 0x46, 0xda, 0x7b, 0xc7, 0x31, 0x27, 0xc6, 0x50, 0xbf, - 0x96, 0xb2, 0x26, 0x6a, 0xa1, 0xce, 0x4d, 0xbf, 0xe9, 0x9e, 0xb4, 0x3b, 0x11, 0x8c, 0x7f, 0xb5, - 0xda, 0xd8, 0x5a, 0xa0, 0x3a, 0x8c, 0x42, 0xbf, 0xaf, 0xee, 0xc3, 0x98, 0xe4, 0x90, 0x31, 0xf3, - 0xa2, 0x75, 0xd9, 0xb9, 0xe9, 0x77, 0xdd, 0x73, 0x2b, 0xbb, 0x6a, 0xfe, 0xb8, 0x6a, 0xf1, 0x9f, - 0x56, 0x8a, 0xfb, 0x8d, 0x5d, 0x2f, 0x71, 0xf6, 0x71, 0xe8, 0x1c, 0xea, 0x39, 0xc1, 0x3d, 0x55, - 0x18, 0xcb, 0xef, 0x5f, 0xff, 0xec, 0x8b, 0x8a, 0xf1, 0x4c, 0xbf, 0x23, 0x50, 0xe1, 0xfe, 0xae, - 0xff, 0x60, 0xbf, 0xb1, 0x6b, 0x52, 0x49, 0x94, 0x9d, 0x40, 0x5e, 0x1b, 0x9f, 0x91, 0x6e, 0xfc, - 0xcd, 0x24, 0xcc, 0x54, 0x28, 0xe6, 0x85, 0xd8, 0x79, 0x70, 0xde, 0xaf, 0x98, 0x34, 0xba, 0x1d, - 0xa8, 0xdf, 0x56, 0xce, 0x9f, 0xc8, 0x79, 0xc7, 0xea, 0x4e, 0xf0, 0xf0, 0xe8, 0x37, 0x18, 0xaf, - 0xf4, 0xfa, 0x0c, 0x60, 0x1e, 0x46, 0x90, 0x73, 0x8a, 0x23, 0x1e, 0xe2, 0x38, 0xa6, 0x84, 0x31, - 0xf3, 0x52, 0x2c, 0x50, 0x05, 0x8c, 0x82, 0x47, 0x15, 0xf2, 0x5a, 0x11, 0x23, 0x09, 0x0c, 0xaf, - 0x7e, 0x7e, 0xb5, 0x91, 0x3f, 0x59, 0x6d, 0x2d, 0xb4, 0xde, 0x5a, 0xe8, 0xc7, 0xd6, 0x42, 0x5f, - 0x76, 0x96, 0xb6, 0xde, 0x59, 0xda, 0xf7, 0x9d, 0xa5, 0xbd, 0x7f, 0x99, 0xa4, 0x7c, 0xb6, 0x98, - 0xba, 0x11, 0x64, 0x5e, 0x4e, 0x16, 0x9c, 0x42, 0xfe, 0x1c, 0x68, 0xf2, 0xe7, 0xec, 0x2d, 0x07, - 0xde, 0xa7, 0xc3, 0xc7, 0xc2, 0xcb, 0x82, 0xb0, 0xe9, 0xb5, 0x78, 0x19, 0x2f, 0x7e, 0x07, 0x00, - 0x00, 0xff, 0xff, 0xee, 0xef, 0xf1, 0x3e, 0xd4, 0x02, 0x00, 0x00, + 0x08, 0x89, 0x6d, 0x40, 0x34, 0x86, 0x1d, 0x95, 0xc4, 0x95, 0x09, 0xa9, 0x3b, 0x37, 0xcd, 0xd0, + 0x8e, 0xa5, 0xc1, 0xf6, 0x34, 0x33, 0x03, 0xb1, 0x2f, 0xe0, 0xda, 0x47, 0xf0, 0x41, 0x7c, 0x00, + 0x96, 0x2c, 0x5d, 0x11, 0x03, 0x1b, 0xd7, 0xbc, 0x80, 0xa6, 0x33, 0xe3, 0x1f, 0x84, 0xb0, 0x9b, + 0x9e, 0xf9, 0x9d, 0xef, 0x7c, 0xe7, 0xeb, 0xe8, 0x5d, 0x60, 0x19, 0xb0, 0x94, 0x79, 0x1c, 0xe6, + 0x24, 0x7f, 0x8f, 0x23, 0x0e, 0xb4, 0xf4, 0x96, 0xbd, 0x29, 0xe1, 0xb8, 0xe7, 0x25, 0x24, 0x27, + 0x2c, 0x65, 0x6e, 0x41, 0x81, 0x83, 0xd1, 0x54, 0xac, 0xfb, 0x2f, 0xeb, 0x2a, 0xb6, 0xf1, 0x30, + 0x81, 0x04, 0x04, 0xe8, 0x55, 0x27, 0xd9, 0xd3, 0x68, 0x9f, 0xd4, 0x2f, 0x30, 0xc5, 0x99, 0x92, + 0x6d, 0x0c, 0xce, 0x5a, 0xc0, 0x0b, 0x3e, 0x03, 0x9a, 0xf2, 0xf2, 0x0d, 0xe1, 0x38, 0xc6, 0x1c, + 0xcb, 0x2e, 0xe7, 0x2b, 0xd2, 0x6b, 0xaf, 0xa5, 0xbd, 0xb7, 0x1c, 0x73, 0x62, 0x0c, 0xf5, 0x6b, + 0x29, 0x6b, 0xa2, 0x16, 0xea, 0xdc, 0xf4, 0x9b, 0xee, 0x49, 0xbb, 0x13, 0xc1, 0xf8, 0x57, 0xab, + 0x8d, 0xad, 0x05, 0xaa, 0xc3, 0x28, 0xf4, 0xbb, 0xea, 0x3e, 0x8c, 0x49, 0x0e, 0x19, 0x33, 0x2f, + 0x5a, 0x97, 0x9d, 0x9b, 0x7e, 0xd7, 0x3d, 0xb7, 0xb2, 0xab, 0xe6, 0x8f, 0xab, 0x16, 0xff, 0x71, + 0xa5, 0xb8, 0xdf, 0xd8, 0xf5, 0x12, 0x67, 0x1f, 0x86, 0xce, 0xa1, 0x9e, 0x13, 0xdc, 0x51, 0x85, + 0xb1, 0xfc, 0xfe, 0xf9, 0xd7, 0xbe, 0xa8, 0x18, 0x4f, 0xf4, 0x5b, 0x02, 0x15, 0xee, 0x6f, 0xfb, + 0xf7, 0xf6, 0x1b, 0xbb, 0x26, 0x95, 0x44, 0xd9, 0x09, 0xe4, 0xb5, 0xf1, 0x09, 0xe9, 0xc6, 0x9f, + 0x4c, 0xc2, 0x4c, 0x85, 0x62, 0x5e, 0x88, 0x9d, 0x07, 0xe7, 0xfd, 0x8a, 0x49, 0xa3, 0xff, 0x03, + 0xf5, 0xdb, 0xca, 0xf9, 0x23, 0x39, 0xef, 0x58, 0xdd, 0x09, 0xee, 0x1f, 0xfd, 0x06, 0xe3, 0xa5, + 0x5e, 0x9f, 0x01, 0xcc, 0xc3, 0x08, 0x72, 0x4e, 0x71, 0xc4, 0x43, 0x1c, 0xc7, 0x94, 0x30, 0x66, + 0x5e, 0x8a, 0x05, 0xaa, 0x80, 0x51, 0xf0, 0xa0, 0x42, 0x5e, 0x29, 0x62, 0x24, 0x81, 0xe1, 0xd5, + 0x8f, 0x2f, 0x36, 0xf2, 0x27, 0xab, 0xad, 0x85, 0xd6, 0x5b, 0x0b, 0x7d, 0xdf, 0x5a, 0xe8, 0xf3, + 0xce, 0xd2, 0xd6, 0x3b, 0x4b, 0xfb, 0xb6, 0xb3, 0xb4, 0x77, 0x2f, 0x92, 0x94, 0xcf, 0x16, 0x53, + 0x37, 0x82, 0xcc, 0xcb, 0xc9, 0x82, 0x53, 0xc8, 0x9f, 0x02, 0x4d, 0x7e, 0x9f, 0xbd, 0xe5, 0x73, + 0xef, 0xe3, 0xe1, 0x63, 0xe1, 0x65, 0x41, 0xd8, 0xf4, 0x5a, 0xbc, 0x8c, 0x67, 0xbf, 0x02, 0x00, + 0x00, 0xff, 0xff, 0xe6, 0x0c, 0x91, 0x02, 0xd4, 0x02, 0x00, 0x00, } func (this *GenesisDenom) Equal(that interface{}) bool { diff --git a/x/tokenfactory/types/genesis_test.go b/x/tokenfactory/types/genesis_test.go index e3039050b..80836d095 100644 --- a/x/tokenfactory/types/genesis_test.go +++ b/x/tokenfactory/types/genesis_test.go @@ -3,11 +3,11 @@ package types_test import ( "testing" - "github.com/neutron-org/neutron/v4/app/config" + "github.com/neutron-org/neutron/v5/app/config" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v5/x/tokenfactory/types" ) func TestGenesisState_Validate(t *testing.T) { diff --git a/x/tokenfactory/types/params.pb.go b/x/tokenfactory/types/params.pb.go index a5b112b5a..bc357640f 100644 --- a/x/tokenfactory/types/params.pb.go +++ b/x/tokenfactory/types/params.pb.go @@ -171,7 +171,7 @@ var fileDescriptor_09c297db7c49d1cf = []byte{ // 457 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x52, 0xc1, 0x6e, 0xd3, 0x40, 0x10, 0x8d, 0x49, 0x14, 0xc4, 0x02, 0xa2, 0x98, 0x22, 0x9c, 0x1c, 0xec, 0xd4, 0x15, 0x52, 0x38, - 0xd4, 0xab, 0x16, 0xc4, 0x81, 0x1b, 0x31, 0x02, 0x7a, 0x40, 0xaa, 0x7c, 0x41, 0x82, 0x83, 0xb5, + 0xd4, 0xab, 0x16, 0xc1, 0x81, 0x1b, 0x31, 0x02, 0x7a, 0x40, 0xaa, 0x7c, 0x41, 0x82, 0x83, 0xb5, 0xf1, 0x8e, 0x9d, 0x55, 0xe2, 0x9d, 0xc8, 0xbb, 0x69, 0xc9, 0x5f, 0xc0, 0x85, 0x8f, 0xe0, 0x4b, 0x72, 0xec, 0x91, 0x93, 0x41, 0xc9, 0x1f, 0xf4, 0x0b, 0x50, 0xd6, 0xae, 0x9a, 0x94, 0x9c, 0xbc, 0xf3, 0xde, 0xcc, 0x78, 0xde, 0x9b, 0x21, 0x07, 0xa8, 0x72, 0x54, 0x42, 0x51, 0x8d, 0x63, 0x90, @@ -197,7 +197,7 @@ var fileDescriptor_09c297db7c49d1cf = []byte{ 0xb5, 0xfe, 0x2e, 0x5d, 0xeb, 0xfb, 0xca, 0x6d, 0x5c, 0xae, 0xdc, 0xc6, 0xef, 0x95, 0xdb, 0xf8, 0xf2, 0x7a, 0xc3, 0x45, 0x09, 0x33, 0x5d, 0xa0, 0x3c, 0xc2, 0x22, 0xbb, 0x7e, 0xd3, 0xf3, 0x57, 0xf4, 0xdb, 0xf6, 0xc1, 0x1a, 0x67, 0x87, 0x6d, 0x73, 0x49, 0x2f, 0xff, 0x05, 0x00, 0x00, 0xff, - 0xff, 0x0e, 0x4e, 0x8c, 0xba, 0xd5, 0x02, 0x00, 0x00, + 0xff, 0x06, 0xad, 0xec, 0x86, 0xd5, 0x02, 0x00, 0x00, } func (m *WhitelistedHook) Marshal() (dAtA []byte, err error) { diff --git a/x/tokenfactory/types/query.pb.go b/x/tokenfactory/types/query.pb.go index 5e6fb2b06..ebde7e9b6 100644 --- a/x/tokenfactory/types/query.pb.go +++ b/x/tokenfactory/types/query.pb.go @@ -418,50 +418,50 @@ func init() { } var fileDescriptor_6f22013ad0f72e3f = []byte{ - // 677 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0x4f, 0x4f, 0x13, 0x4f, - 0x18, 0xee, 0xf2, 0xfb, 0x59, 0x65, 0x14, 0x0d, 0x03, 0x1a, 0x6c, 0x70, 0x2b, 0xa3, 0x31, 0x98, - 0xe0, 0x8e, 0x20, 0xf1, 0x00, 0x12, 0xa1, 0x18, 0x63, 0x62, 0x48, 0x60, 0x25, 0x1e, 0x88, 0x49, - 0x33, 0xed, 0x0e, 0xa5, 0x81, 0xdd, 0xb7, 0xcc, 0x4c, 0x89, 0x0d, 0xe1, 0x82, 0x89, 0x67, 0x13, - 0x8f, 0x7e, 0x07, 0x3f, 0x07, 0x47, 0x12, 0x2e, 0x9e, 0x1a, 0x03, 0x7e, 0x82, 0x1e, 0xbc, 0x78, - 0x31, 0x9d, 0x99, 0xe5, 0x8f, 0x2d, 0x9b, 0x5a, 0x12, 0x6f, 0xdb, 0x79, 0x9f, 0xf7, 0x79, 0x9f, - 0xe7, 0xfd, 0x93, 0xa2, 0x51, 0x90, 0x21, 0xc8, 0xb2, 0xa4, 0x0a, 0xd6, 0x79, 0xb4, 0xca, 0x8a, - 0x0a, 0x44, 0x8d, 0x6e, 0x8d, 0x17, 0xb8, 0x62, 0xe3, 0x74, 0xb3, 0xca, 0x45, 0xcd, 0xab, 0x08, - 0x50, 0x80, 0x87, 0x2d, 0xd2, 0x3b, 0x8d, 0xf4, 0x2c, 0x32, 0x33, 0x58, 0x82, 0x12, 0x68, 0x20, - 0x6d, 0x7e, 0x99, 0x9c, 0xcc, 0x70, 0x09, 0xa0, 0xb4, 0xc1, 0x29, 0xab, 0x94, 0x29, 0x8b, 0x22, - 0x50, 0x4c, 0x95, 0x21, 0x92, 0x36, 0x3a, 0xd2, 0xb6, 0x76, 0x85, 0x09, 0x16, 0xc6, 0x90, 0xc9, - 0x44, 0x79, 0xac, 0xaa, 0xd6, 0x40, 0x94, 0x55, 0x6d, 0x81, 0x2b, 0x16, 0x30, 0xc5, 0x4c, 0x16, - 0x19, 0x44, 0x78, 0xa9, 0xa9, 0x7c, 0x51, 0x53, 0xf9, 0x7c, 0xb3, 0xca, 0xa5, 0x22, 0x4b, 0x68, - 0xe0, 0xcc, 0xab, 0xac, 0x40, 0x24, 0x39, 0x9e, 0x42, 0x69, 0x53, 0x72, 0xc8, 0xb9, 0xeb, 0x8c, - 0x5e, 0x9d, 0x18, 0xf6, 0xda, 0x1a, 0x35, 0x59, 0xb9, 0xff, 0xf7, 0xea, 0xd9, 0x94, 0x6f, 0x33, - 0xc8, 0x07, 0x07, 0x11, 0xcd, 0xf9, 0x82, 0x47, 0x10, 0xce, 0xfd, 0x29, 0xc7, 0x56, 0xc6, 0x63, - 0xe8, 0x72, 0x51, 0x70, 0xa6, 0x40, 0xe8, 0x1a, 0xbd, 0x39, 0xdc, 0xa8, 0x67, 0xaf, 0xd7, 0x58, - 0xb8, 0x31, 0x45, 0x6c, 0x80, 0xf8, 0x31, 0x04, 0x53, 0x74, 0x45, 0x56, 0x0b, 0x41, 0x93, 0x71, - 0xa8, 0x47, 0xc3, 0x07, 0x1a, 0xf5, 0xec, 0x0d, 0x03, 0x8f, 0x23, 0xc4, 0x3f, 0x06, 0x91, 0xaf, - 0x0e, 0xba, 0x97, 0xa8, 0xc2, 0x3a, 0xfd, 0xe8, 0x20, 0x7c, 0xdc, 0xb2, 0x7c, 0x68, 0xc3, 0xd6, - 0xf6, 0xa4, 0x97, 0x34, 0x5f, 0xaf, 0x3d, 0x75, 0x6e, 0xa4, 0xd9, 0x8e, 0x46, 0x3d, 0x7b, 0xdb, - 0xa8, 0x6b, 0x65, 0x27, 0x7e, 0x7f, 0xcb, 0x94, 0xc8, 0x02, 0xba, 0x73, 0xa2, 0x57, 0xbe, 0x14, - 0x10, 0xce, 0x1b, 0xef, 0x5d, 0x35, 0x8c, 0xbc, 0x46, 0xee, 0x79, 0x74, 0xd6, 0xf9, 0x43, 0x94, - 0xd6, 0xad, 0x6a, 0xce, 0xf8, 0xbf, 0xd1, 0xde, 0x5c, 0x7f, 0xa3, 0x9e, 0xed, 0x33, 0x74, 0xe6, - 0x9d, 0xf8, 0x16, 0x40, 0x76, 0x1d, 0x34, 0xa2, 0xd9, 0x72, 0x7c, 0x15, 0x04, 0x7f, 0xc3, 0xa3, - 0xe0, 0x15, 0xc0, 0xfa, 0x5c, 0x10, 0x08, 0x2e, 0xe5, 0x3f, 0x9a, 0x68, 0xd1, 0xae, 0xd5, 0x39, - 0x1a, 0xac, 0xab, 0x19, 0xd4, 0x57, 0x84, 0x48, 0x09, 0x56, 0x54, 0x79, 0x16, 0x04, 0xb1, 0x94, - 0xa1, 0x46, 0x3d, 0x3b, 0x68, 0xa5, 0x9c, 0x0e, 0x13, 0xff, 0x5a, 0xfc, 0xbb, 0xc9, 0x34, 0xd1, - 0x48, 0xa3, 0x4b, 0xba, 0x0a, 0xfe, 0xe2, 0xa0, 0xb4, 0xd9, 0x6f, 0xfc, 0x38, 0x79, 0x0d, 0x5a, - 0xcf, 0x2a, 0x33, 0xfe, 0x17, 0x19, 0x46, 0x38, 0x19, 0xdb, 0x3d, 0xf8, 0xf1, 0xb9, 0xe7, 0x01, - 0xbe, 0x4f, 0x13, 0xcf, 0xdb, 0x1c, 0x19, 0xfe, 0xe5, 0xa0, 0x5b, 0xed, 0xd7, 0x0f, 0xcf, 0x76, - 0x50, 0x3b, 0xf1, 0x34, 0x33, 0x73, 0x17, 0x60, 0xb0, 0x6e, 0xde, 0x69, 0x37, 0x6f, 0xf1, 0x72, - 0xb2, 0x1b, 0xb3, 0x5f, 0x34, 0x7e, 0xde, 0xb6, 0xcb, 0xb1, 0x43, 0xb7, 0xe3, 0xb1, 0xef, 0xd0, - 0xd6, 0xfb, 0xc1, 0x07, 0x0e, 0xea, 0x6f, 0x59, 0x6c, 0x3c, 0xdd, 0xa9, 0xec, 0x36, 0xd7, 0x95, - 0x79, 0xd6, 0x5d, 0xb2, 0xb5, 0x3b, 0xaf, 0xed, 0xce, 0xe0, 0xe9, 0x4e, 0xec, 0xe6, 0x57, 0x05, - 0x84, 0x79, 0x6b, 0xf5, 0xc4, 0x33, 0xfe, 0xe9, 0xa0, 0x9b, 0x6d, 0x97, 0x1b, 0x3f, 0xef, 0x40, - 0x5c, 0xd2, 0x69, 0x66, 0x66, 0xbb, 0x27, 0xb0, 0x0e, 0x57, 0xb4, 0xc3, 0x65, 0xec, 0x5f, 0x7c, - 0xa0, 0x05, 0x5d, 0x28, 0x2f, 0x79, 0x14, 0xe4, 0xd7, 0x00, 0xd6, 0x73, 0x8b, 0x7b, 0x87, 0xae, - 0xb3, 0x7f, 0xe8, 0x3a, 0xdf, 0x0f, 0x5d, 0xe7, 0xd3, 0x91, 0x9b, 0xda, 0x3f, 0x72, 0x53, 0xdf, - 0x8e, 0xdc, 0xd4, 0xca, 0xd3, 0x52, 0x59, 0xad, 0x55, 0x0b, 0x5e, 0x11, 0x42, 0x1a, 0xf1, 0xaa, - 0x12, 0x10, 0x3d, 0x02, 0x51, 0x8a, 0xbf, 0xe9, 0xd6, 0x24, 0x7d, 0x7f, 0x56, 0x88, 0xaa, 0x55, - 0xb8, 0x2c, 0xa4, 0xf5, 0x7f, 0xde, 0x93, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7f, 0xf0, 0xc4, - 0xcf, 0xca, 0x07, 0x00, 0x00, + // 675 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xcf, 0x4f, 0x13, 0x41, + 0x14, 0xee, 0xa2, 0x56, 0x19, 0x45, 0xc3, 0x80, 0x06, 0x1b, 0xdc, 0xca, 0x68, 0x0c, 0x26, 0xb8, + 0x23, 0x88, 0x1e, 0x40, 0x22, 0x14, 0x63, 0x4c, 0x0c, 0x09, 0xac, 0xc4, 0x03, 0x31, 0x69, 0xa6, + 0xdd, 0xa1, 0x34, 0xb0, 0xfb, 0xca, 0xcc, 0x94, 0xd8, 0x10, 0x2e, 0x98, 0x78, 0x36, 0xf1, 0xe8, + 0xff, 0xe0, 0xdf, 0xc1, 0x91, 0x84, 0x8b, 0xa7, 0xc6, 0x80, 0x7f, 0x41, 0x0f, 0x5e, 0xbc, 0x98, + 0xce, 0xcc, 0xf2, 0xc3, 0x96, 0x4d, 0x85, 0xc4, 0xdb, 0x76, 0xde, 0xf7, 0xbe, 0xf7, 0x7d, 0xef, + 0x47, 0x8a, 0x86, 0x41, 0x86, 0x20, 0xcb, 0x92, 0x2a, 0x58, 0xe5, 0xd1, 0x32, 0x2b, 0x2a, 0x10, + 0x35, 0xba, 0x31, 0x5a, 0xe0, 0x8a, 0x8d, 0xd2, 0xf5, 0x2a, 0x17, 0x35, 0xaf, 0x22, 0x40, 0x01, + 0x1e, 0xb4, 0x48, 0xef, 0x38, 0xd2, 0xb3, 0xc8, 0x4c, 0x7f, 0x09, 0x4a, 0xa0, 0x81, 0xb4, 0xf9, + 0x65, 0x72, 0x32, 0x83, 0x25, 0x80, 0xd2, 0x1a, 0xa7, 0xac, 0x52, 0xa6, 0x2c, 0x8a, 0x40, 0x31, + 0x55, 0x86, 0x48, 0xda, 0xe8, 0x50, 0xdb, 0xda, 0x15, 0x26, 0x58, 0x18, 0x43, 0xc6, 0x13, 0xe5, + 0xb1, 0xaa, 0x5a, 0x01, 0x51, 0x56, 0xb5, 0x39, 0xae, 0x58, 0xc0, 0x14, 0x33, 0x59, 0xa4, 0x1f, + 0xe1, 0x85, 0xa6, 0xf2, 0x79, 0x4d, 0xe5, 0xf3, 0xf5, 0x2a, 0x97, 0x8a, 0x2c, 0xa0, 0xbe, 0x13, + 0xaf, 0xb2, 0x02, 0x91, 0xe4, 0x78, 0x02, 0xa5, 0x4d, 0xc9, 0x01, 0xe7, 0xae, 0x33, 0x7c, 0x75, + 0x6c, 0xd0, 0x6b, 0x6b, 0xd4, 0x64, 0xe5, 0x2e, 0xee, 0xd4, 0xb3, 0x29, 0xdf, 0x66, 0x90, 0x8f, + 0x0e, 0x22, 0x9a, 0xf3, 0x25, 0x8f, 0x20, 0x9c, 0xf9, 0x5b, 0x8e, 0xad, 0x8c, 0x47, 0xd0, 0xe5, + 0xa2, 0xe0, 0x4c, 0x81, 0xd0, 0x35, 0xba, 0x73, 0xb8, 0x51, 0xcf, 0x5e, 0xaf, 0xb1, 0x70, 0x6d, + 0x82, 0xd8, 0x00, 0xf1, 0x63, 0x08, 0xa6, 0xe8, 0x8a, 0xac, 0x16, 0x82, 0x26, 0xe3, 0x40, 0x97, + 0x86, 0xf7, 0x35, 0xea, 0xd9, 0x1b, 0x06, 0x1e, 0x47, 0x88, 0x7f, 0x08, 0x22, 0xdf, 0x1c, 0x74, + 0x2f, 0x51, 0x85, 0x75, 0xfa, 0xc9, 0x41, 0xf8, 0xb0, 0x65, 0xf9, 0xd0, 0x86, 0xad, 0xed, 0x71, + 0x2f, 0x69, 0xbe, 0x5e, 0x7b, 0xea, 0xdc, 0x50, 0xb3, 0x1d, 0x8d, 0x7a, 0xf6, 0xb6, 0x51, 0xd7, + 0xca, 0x4e, 0xfc, 0xde, 0x96, 0x29, 0x91, 0x39, 0x74, 0xe7, 0x48, 0xaf, 0x7c, 0x25, 0x20, 0x9c, + 0x35, 0xde, 0xcf, 0xd4, 0x30, 0xf2, 0x06, 0xb9, 0xa7, 0xd1, 0x59, 0xe7, 0x0f, 0x51, 0x5a, 0xb7, + 0xaa, 0x39, 0xe3, 0x0b, 0xc3, 0xdd, 0xb9, 0xde, 0x46, 0x3d, 0xdb, 0x63, 0xe8, 0xcc, 0x3b, 0xf1, + 0x2d, 0x80, 0x6c, 0x3b, 0x68, 0x48, 0xb3, 0xe5, 0xf8, 0x32, 0x08, 0xfe, 0x96, 0x47, 0xc1, 0x6b, + 0x80, 0xd5, 0x99, 0x20, 0x10, 0x5c, 0xca, 0xff, 0x34, 0xd1, 0xa2, 0x5d, 0xab, 0x53, 0x34, 0x58, + 0x57, 0x53, 0xa8, 0xa7, 0x08, 0x91, 0x12, 0xac, 0xa8, 0xf2, 0x2c, 0x08, 0x62, 0x29, 0x03, 0x8d, + 0x7a, 0xb6, 0xdf, 0x4a, 0x39, 0x1e, 0x26, 0xfe, 0xb5, 0xf8, 0x77, 0x93, 0x69, 0xac, 0x91, 0x46, + 0x97, 0x74, 0x15, 0xfc, 0xd5, 0x41, 0x69, 0xb3, 0xdf, 0xf8, 0x71, 0xf2, 0x1a, 0xb4, 0x9e, 0x55, + 0x66, 0xf4, 0x1f, 0x32, 0x8c, 0x70, 0x32, 0xb2, 0xbd, 0xf7, 0xf3, 0x4b, 0xd7, 0x03, 0x7c, 0x9f, + 0x26, 0x9e, 0xb7, 0x39, 0x32, 0xfc, 0xdb, 0x41, 0xb7, 0xda, 0xaf, 0x1f, 0x9e, 0xee, 0xa0, 0x76, + 0xe2, 0x69, 0x66, 0x66, 0xce, 0xc1, 0x60, 0xdd, 0xbc, 0xd7, 0x6e, 0xde, 0xe1, 0xc5, 0x64, 0x37, + 0x66, 0xbf, 0x68, 0xfc, 0xbc, 0x69, 0x97, 0x63, 0x8b, 0x6e, 0xc6, 0x63, 0xdf, 0xa2, 0xad, 0xf7, + 0x83, 0xf7, 0x1c, 0xd4, 0xdb, 0xb2, 0xd8, 0x78, 0xb2, 0x53, 0xd9, 0x6d, 0xae, 0x2b, 0xf3, 0xfc, + 0x6c, 0xc9, 0xd6, 0xee, 0xac, 0xb6, 0x3b, 0x85, 0x27, 0x3b, 0xb1, 0x9b, 0x5f, 0x16, 0x10, 0xe6, + 0xad, 0xd5, 0x23, 0xcf, 0xf8, 0x97, 0x83, 0x6e, 0xb6, 0x5d, 0x6e, 0xfc, 0xa2, 0x03, 0x71, 0x49, + 0xa7, 0x99, 0x99, 0x3e, 0x3b, 0x81, 0x75, 0xb8, 0xa4, 0x1d, 0x2e, 0x62, 0xff, 0xfc, 0x03, 0x2d, + 0xe8, 0x42, 0x79, 0xc9, 0xa3, 0x20, 0xbf, 0x02, 0xb0, 0x9a, 0x9b, 0xdf, 0xd9, 0x77, 0x9d, 0xdd, + 0x7d, 0xd7, 0xf9, 0xb1, 0xef, 0x3a, 0x9f, 0x0f, 0xdc, 0xd4, 0xee, 0x81, 0x9b, 0xfa, 0x7e, 0xe0, + 0xa6, 0x96, 0x9e, 0x95, 0xca, 0x6a, 0xa5, 0x5a, 0xf0, 0x8a, 0x10, 0xd2, 0x88, 0x57, 0x95, 0x80, + 0xe8, 0x11, 0x88, 0x52, 0xfc, 0x4d, 0x37, 0x9e, 0xd2, 0x0f, 0x27, 0x85, 0xa8, 0x5a, 0x85, 0xcb, + 0x42, 0x5a, 0xff, 0xe7, 0x3d, 0xf9, 0x13, 0x00, 0x00, 0xff, 0xff, 0x77, 0x13, 0xa4, 0xf3, 0xca, + 0x07, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/tokenfactory/types/tx.pb.go b/x/tokenfactory/types/tx.pb.go index e20ba1f2c..8611c6a88 100644 --- a/x/tokenfactory/types/tx.pb.go +++ b/x/tokenfactory/types/tx.pb.go @@ -858,72 +858,72 @@ func init() { var fileDescriptor_283b6c9a90a846b4 = []byte{ // 1064 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0xcf, 0x6f, 0x1b, 0x45, - 0x14, 0xce, 0xf6, 0x47, 0x9a, 0x4c, 0x12, 0x92, 0x6c, 0x42, 0xe3, 0x2c, 0xa9, 0xb7, 0x2c, 0x2a, - 0x6a, 0x23, 0xbc, 0x2b, 0xa7, 0x21, 0x02, 0x4b, 0x08, 0xea, 0xa2, 0xa8, 0x07, 0x2c, 0x55, 0x9b, - 0x70, 0x41, 0x95, 0xac, 0xb1, 0x3d, 0xd9, 0xac, 0xcc, 0xce, 0xb8, 0x33, 0xe3, 0xa4, 0xb9, 0x55, - 0x70, 0xe3, 0xc4, 0x7f, 0x80, 0xb8, 0x20, 0x8e, 0x39, 0xf0, 0x07, 0x70, 0x2c, 0xb7, 0x8a, 0x13, - 0xa7, 0x15, 0x4a, 0x0e, 0x39, 0x70, 0xc2, 0x7f, 0x01, 0x9a, 0x1f, 0xbb, 0xf6, 0xae, 0x2d, 0x6c, - 0x1f, 0xaa, 0x5e, 0x5a, 0xef, 0xbc, 0xef, 0x7b, 0xfb, 0xbe, 0x6f, 0xde, 0xbc, 0xd9, 0x80, 0x7b, - 0x84, 0x45, 0x84, 0x85, 0xcc, 0xe3, 0xa4, 0x8d, 0xf0, 0x11, 0x6c, 0x72, 0x42, 0xcf, 0xbc, 0x93, - 0x72, 0x03, 0x71, 0x58, 0xf6, 0xf8, 0x0b, 0xb7, 0x43, 0x09, 0x27, 0xe6, 0x96, 0x86, 0xb9, 0x83, - 0x30, 0x57, 0xc3, 0xac, 0x55, 0x18, 0x85, 0x98, 0x78, 0xf2, 0x5f, 0x45, 0xb0, 0x8a, 0x4d, 0xc9, - 0xf0, 0x1a, 0x10, 0xb7, 0xd3, 0x74, 0xe2, 0x61, 0x28, 0xce, 0x50, 0x1a, 0x6f, 0x92, 0x10, 0xeb, - 0xf8, 0x86, 0x8e, 0x47, 0x2c, 0xf0, 0x4e, 0xca, 0xe2, 0x3f, 0x1d, 0xd8, 0x54, 0x81, 0xba, 0x7c, - 0xf2, 0xd4, 0x83, 0x0e, 0xad, 0x07, 0x24, 0x20, 0x6a, 0x5d, 0xfc, 0xd2, 0xab, 0xef, 0x8f, 0x54, - 0xd8, 0x81, 0x14, 0x46, 0x9a, 0xe8, 0xfc, 0x64, 0x80, 0x77, 0x6a, 0x2c, 0x78, 0x4c, 0x11, 0xe4, - 0xe8, 0x4b, 0x84, 0x49, 0x64, 0x3e, 0x00, 0xb3, 0x0c, 0xe1, 0x16, 0xa2, 0x05, 0xe3, 0xae, 0x71, - 0x7f, 0xbe, 0xba, 0xda, 0x8b, 0xed, 0xa5, 0x33, 0x18, 0x7d, 0x5b, 0x71, 0xd4, 0xba, 0xe3, 0x6b, - 0x80, 0xe9, 0x81, 0x39, 0xd6, 0x6d, 0xb4, 0x04, 0xad, 0x70, 0x4d, 0x82, 0xd7, 0x7a, 0xb1, 0xbd, - 0xac, 0xc1, 0x3a, 0xe2, 0xf8, 0x29, 0xa8, 0x52, 0xfe, 0xee, 0xea, 0x7c, 0x5b, 0xb3, 0x7f, 0xb8, - 0x3a, 0xdf, 0x1e, 0x5d, 0x61, 0x53, 0x56, 0x53, 0x52, 0xec, 0x67, 0xe0, 0x76, 0xb6, 0x40, 0x1f, - 0xb1, 0x0e, 0xc1, 0x0c, 0x99, 0x55, 0xb0, 0x8c, 0xd1, 0x69, 0x5d, 0x52, 0xeb, 0xaa, 0x08, 0x55, - 0xb1, 0xd5, 0x8b, 0xed, 0xdb, 0xaa, 0x88, 0x1c, 0xc0, 0xf1, 0x97, 0x30, 0x3a, 0x3d, 0x14, 0x0b, - 0x32, 0x97, 0xf3, 0x8f, 0x01, 0x6e, 0xd5, 0x58, 0x50, 0x0b, 0x31, 0x9f, 0x46, 0xf8, 0x13, 0x30, - 0x0b, 0x23, 0xd2, 0xc5, 0x5c, 0xca, 0x5e, 0xd8, 0xd9, 0x74, 0xf5, 0x76, 0x88, 0x4d, 0x4d, 0x9a, - 0xc3, 0x7d, 0x4c, 0x42, 0x5c, 0x7d, 0xf7, 0x55, 0x6c, 0xcf, 0xf4, 0x33, 0x29, 0x9a, 0xe3, 0x6b, - 0xbe, 0xf9, 0x05, 0x58, 0x8a, 0x42, 0xcc, 0x0f, 0xc9, 0xa3, 0x56, 0x8b, 0x22, 0xc6, 0x0a, 0xd7, - 0xf3, 0x12, 0x44, 0xb8, 0xce, 0x49, 0x1d, 0x2a, 0x80, 0xe3, 0x67, 0x09, 0x95, 0x07, 0x39, 0x4f, - 0x37, 0x47, 0x7a, 0x2a, 0x38, 0xce, 0x2a, 0x58, 0xd6, 0x62, 0x13, 0x13, 0x9d, 0x7f, 0x95, 0x01, - 0xd5, 0x2e, 0xc5, 0x6f, 0xc7, 0x80, 0x7d, 0xb0, 0xdc, 0xe8, 0x52, 0xbc, 0x4f, 0x49, 0x94, 0xb5, - 0x60, 0xab, 0x17, 0xdb, 0x05, 0xc5, 0x11, 0x80, 0xfa, 0x11, 0x25, 0x51, 0xdf, 0x84, 0x3c, 0x69, - 0x42, 0x1b, 0x04, 0x4b, 0xdb, 0x20, 0x24, 0xa7, 0x36, 0xfc, 0xa1, 0xcf, 0xc1, 0x31, 0xc4, 0x01, - 0x7a, 0xd4, 0x8a, 0xc2, 0xa9, 0xdc, 0xf8, 0x10, 0xdc, 0x1c, 0x3c, 0x04, 0x2b, 0xbd, 0xd8, 0x5e, - 0x54, 0x48, 0xdd, 0x75, 0x2a, 0x6c, 0x96, 0xc1, 0xbc, 0x68, 0x48, 0x28, 0xf2, 0x6b, 0x95, 0xeb, - 0xbd, 0xd8, 0x5e, 0xe9, 0xf7, 0xaa, 0x0c, 0x39, 0xfe, 0x1c, 0x46, 0xa7, 0xb2, 0x8a, 0x49, 0x4f, - 0x8c, 0xac, 0xbb, 0xa4, 0xd8, 0x05, 0x75, 0x62, 0xfa, 0x52, 0x52, 0x95, 0x17, 0x06, 0x58, 0xaf, - 0xb1, 0xe0, 0x00, 0xf1, 0x2a, 0x3a, 0x22, 0x14, 0x1d, 0x20, 0xdc, 0x7a, 0x42, 0x48, 0xfb, 0x4d, - 0x68, 0xfd, 0x0c, 0x2c, 0x35, 0x09, 0xe6, 0x14, 0x36, 0xb9, 0xdc, 0x35, 0xad, 0xb7, 0xd0, 0x8b, - 0xed, 0x75, 0x85, 0xcf, 0x84, 0x1d, 0x7f, 0x31, 0x79, 0x16, 0x3b, 0x5a, 0xf9, 0x24, 0xa7, 0xfb, - 0xfe, 0x48, 0xdd, 0x0c, 0xf1, 0x52, 0x43, 0x4a, 0x11, 0xc8, 0xd2, 0x31, 0x21, 0x6d, 0xa7, 0x08, - 0xb6, 0x46, 0x69, 0x4c, 0x4d, 0xf8, 0xd9, 0x00, 0x6b, 0x0a, 0x20, 0x47, 0x40, 0x0d, 0x71, 0xd8, - 0x82, 0x1c, 0x4e, 0xe3, 0x81, 0x0f, 0xe6, 0x22, 0x4d, 0xd3, 0xfd, 0x7f, 0xa7, 0xdf, 0xff, 0xb8, - 0x9d, 0xf6, 0x7f, 0x92, 0xbb, 0xba, 0xa1, 0xcf, 0x80, 0x1e, 0x8d, 0x09, 0xd9, 0xf1, 0xd3, 0x3c, - 0x95, 0x85, 0x01, 0xc1, 0xce, 0x1d, 0xf0, 0xde, 0x88, 0x12, 0x53, 0x09, 0xf1, 0x35, 0xb0, 0x52, - 0x63, 0xc1, 0x3e, 0xa1, 0x4d, 0x74, 0x48, 0x21, 0x66, 0x47, 0x88, 0xbe, 0x9d, 0xd3, 0xeb, 0x83, - 0x35, 0xae, 0x0b, 0x18, 0x3e, 0xc1, 0x77, 0x7b, 0xb1, 0xbd, 0xa5, 0x78, 0x09, 0x28, 0x77, 0x8a, - 0x47, 0x91, 0xcd, 0xaf, 0xc0, 0x6a, 0xb2, 0xdc, 0x1f, 0x8b, 0x37, 0x64, 0xc6, 0x62, 0x2f, 0xb6, - 0xad, 0x5c, 0xc6, 0xc1, 0xd1, 0x38, 0x4c, 0xac, 0x3c, 0xcc, 0x35, 0xd2, 0x07, 0x23, 0x1b, 0xe9, - 0x48, 0x58, 0x59, 0x4a, 0xd8, 0x8e, 0x05, 0x0a, 0x79, 0x7f, 0x53, 0xf3, 0x7f, 0x37, 0xe4, 0xf8, - 0xf8, 0xba, 0xd3, 0x82, 0x1c, 0x3d, 0x95, 0x97, 0xa9, 0xb9, 0x07, 0xe6, 0x61, 0x97, 0x1f, 0x13, - 0x1a, 0xf2, 0x33, 0x6d, 0x7f, 0xe1, 0xcf, 0xdf, 0x4a, 0xeb, 0xda, 0x56, 0x5d, 0xcb, 0x01, 0xa7, - 0x21, 0x0e, 0xfc, 0x3e, 0xd4, 0xfc, 0x1c, 0xcc, 0xaa, 0xeb, 0x58, 0x6f, 0xc4, 0x96, 0x3b, 0xf2, - 0x6b, 0x43, 0xbd, 0xa5, 0x3a, 0x2f, 0xf6, 0xe2, 0xd7, 0xab, 0xf3, 0x6d, 0xc3, 0xd7, 0xb4, 0xca, - 0xae, 0x50, 0xd7, 0x4f, 0x28, 0x27, 0x44, 0x88, 0x39, 0xa2, 0xcd, 0x63, 0x18, 0xe2, 0xe7, 0x5d, - 0x44, 0x43, 0xc4, 0xbc, 0x5c, 0xb9, 0xce, 0x26, 0xd8, 0xc8, 0x2d, 0x25, 0xea, 0x76, 0x7e, 0xb9, - 0x05, 0xae, 0xd7, 0x58, 0x60, 0x3e, 0x07, 0x0b, 0x83, 0x1f, 0x05, 0x1f, 0xb9, 0xff, 0xf7, 0x19, - 0xe4, 0x66, 0x6f, 0x68, 0x6b, 0x77, 0x1a, 0x74, 0x7a, 0x9f, 0x3f, 0x03, 0x37, 0xe4, 0x3d, 0x7c, - 0x6f, 0x2c, 0x5b, 0xc0, 0xac, 0xd2, 0x44, 0xb0, 0xc1, 0xec, 0xf2, 0x92, 0x1b, 0x9f, 0x5d, 0xc0, - 0x26, 0xc8, 0x3e, 0x78, 0x7f, 0x48, 0xbb, 0x06, 0xee, 0x8e, 0x09, 0xec, 0xea, 0xa3, 0x27, 0xb1, - 0x6b, 0x78, 0x98, 0x9b, 0x2f, 0x0d, 0xb0, 0x32, 0x34, 0xc4, 0xca, 0x63, 0x53, 0xe5, 0x29, 0xd6, - 0xa7, 0x53, 0x53, 0xd2, 0x12, 0xbe, 0x37, 0xc0, 0xea, 0xf0, 0x65, 0xb2, 0x33, 0x49, 0xc2, 0x2c, - 0xc7, 0xaa, 0x4c, 0xcf, 0x49, 0xab, 0x38, 0x05, 0x4b, 0xd9, 0x49, 0xe8, 0x8e, 0x4d, 0x96, 0xc1, - 0x5b, 0x7b, 0xd3, 0xe1, 0xd3, 0x17, 0x73, 0xb0, 0x98, 0x99, 0x02, 0xe3, 0x7b, 0x66, 0x10, 0x6e, - 0x7d, 0x3c, 0x15, 0x3c, 0x79, 0xab, 0x75, 0xf3, 0xa5, 0x98, 0x00, 0xd5, 0xa7, 0xaf, 0x2e, 0x8a, - 0xc6, 0xeb, 0x8b, 0xa2, 0xf1, 0xf7, 0x45, 0xd1, 0xf8, 0xf1, 0xb2, 0x38, 0xf3, 0xfa, 0xb2, 0x38, - 0xf3, 0xd7, 0x65, 0x71, 0xe6, 0x9b, 0xbd, 0x20, 0xe4, 0xc7, 0xdd, 0x86, 0xdb, 0x24, 0x91, 0x87, - 0x51, 0x97, 0x53, 0x82, 0x4b, 0x84, 0x06, 0xc9, 0x6f, 0xef, 0x64, 0xd7, 0x7b, 0x91, 0x9d, 0x7e, - 0xfc, 0xac, 0x83, 0x58, 0x63, 0x56, 0xfe, 0x49, 0xf0, 0xf0, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xab, 0x2e, 0xa9, 0x6f, 0x19, 0x0d, 0x00, 0x00, + 0x14, 0xce, 0xf6, 0x47, 0xda, 0x4c, 0x12, 0x92, 0x6c, 0x42, 0xe3, 0x2c, 0xa9, 0xb7, 0x2c, 0x2a, + 0x6a, 0x23, 0xbc, 0x2b, 0xa7, 0x6d, 0x04, 0x96, 0x10, 0xd4, 0x45, 0x51, 0x0f, 0x58, 0xaa, 0x36, + 0xe1, 0x82, 0x2a, 0x59, 0x63, 0x7b, 0xb2, 0x5e, 0x99, 0x9d, 0x71, 0x67, 0xc6, 0x49, 0x73, 0xab, + 0xe0, 0xc6, 0x89, 0xff, 0x00, 0x71, 0x41, 0x1c, 0x73, 0xe0, 0x0f, 0xe0, 0x58, 0x6e, 0x15, 0x27, + 0x4e, 0x2b, 0x94, 0x1c, 0x72, 0xe0, 0x84, 0xff, 0x02, 0x34, 0x3f, 0x76, 0xed, 0x5d, 0x5b, 0xd8, + 0x3e, 0xa0, 0x5e, 0x5a, 0xef, 0xbc, 0xef, 0x7b, 0xfb, 0xbe, 0x6f, 0xde, 0xbc, 0xd9, 0x80, 0xbb, + 0x84, 0x45, 0x84, 0x85, 0xcc, 0xe3, 0xa4, 0x83, 0xf0, 0x11, 0x6c, 0x72, 0x42, 0x4f, 0xbd, 0xe3, + 0x72, 0x03, 0x71, 0x58, 0xf6, 0xf8, 0x4b, 0xb7, 0x4b, 0x09, 0x27, 0xe6, 0xb6, 0x86, 0xb9, 0xc3, + 0x30, 0x57, 0xc3, 0xac, 0x35, 0x18, 0x85, 0x98, 0x78, 0xf2, 0x5f, 0x45, 0xb0, 0x8a, 0x4d, 0xc9, + 0xf0, 0x1a, 0x10, 0x77, 0xd2, 0x74, 0xe2, 0x61, 0x24, 0xce, 0x50, 0x1a, 0x6f, 0x92, 0x10, 0xeb, + 0xf8, 0xa6, 0x8e, 0x47, 0x2c, 0xf0, 0x8e, 0xcb, 0xe2, 0x3f, 0x1d, 0xd8, 0x52, 0x81, 0xba, 0x7c, + 0xf2, 0xd4, 0x83, 0x0e, 0x6d, 0x04, 0x24, 0x20, 0x6a, 0x5d, 0xfc, 0xd2, 0xab, 0xef, 0x8f, 0x55, + 0xd8, 0x85, 0x14, 0x46, 0x9a, 0xe8, 0xfc, 0x68, 0x80, 0x77, 0x6a, 0x2c, 0x78, 0x42, 0x11, 0xe4, + 0xe8, 0x0b, 0x84, 0x49, 0x64, 0xde, 0x07, 0xf3, 0x0c, 0xe1, 0x16, 0xa2, 0x05, 0xe3, 0x8e, 0x71, + 0x6f, 0xa1, 0xba, 0xd6, 0x8f, 0xed, 0xe5, 0x53, 0x18, 0x7d, 0x53, 0x71, 0xd4, 0xba, 0xe3, 0x6b, + 0x80, 0xe9, 0x81, 0x9b, 0xac, 0xd7, 0x68, 0x09, 0x5a, 0xe1, 0x8a, 0x04, 0xaf, 0xf7, 0x63, 0x7b, + 0x45, 0x83, 0x75, 0xc4, 0xf1, 0x53, 0x50, 0xa5, 0xfc, 0xed, 0xe5, 0xd9, 0x8e, 0x66, 0x7f, 0x7f, + 0x79, 0xb6, 0x33, 0xbe, 0xc2, 0xa6, 0xac, 0xa6, 0xa4, 0xd8, 0xcf, 0xc1, 0xad, 0x6c, 0x81, 0x3e, + 0x62, 0x5d, 0x82, 0x19, 0x32, 0xab, 0x60, 0x05, 0xa3, 0x93, 0xba, 0xa4, 0xd6, 0x55, 0x11, 0xaa, + 0x62, 0xab, 0x1f, 0xdb, 0xb7, 0x54, 0x11, 0x39, 0x80, 0xe3, 0x2f, 0x63, 0x74, 0x72, 0x28, 0x16, + 0x64, 0x2e, 0xe7, 0x6f, 0x03, 0xdc, 0xa8, 0xb1, 0xa0, 0x16, 0x62, 0x3e, 0x8b, 0xf0, 0xa7, 0x60, + 0x1e, 0x46, 0xa4, 0x87, 0xb9, 0x94, 0xbd, 0xb8, 0xbb, 0xe5, 0xea, 0xed, 0x10, 0x9b, 0x9a, 0x34, + 0x87, 0xfb, 0x84, 0x84, 0xb8, 0xfa, 0xee, 0xeb, 0xd8, 0x9e, 0x1b, 0x64, 0x52, 0x34, 0xc7, 0xd7, + 0x7c, 0xf3, 0x73, 0xb0, 0x1c, 0x85, 0x98, 0x1f, 0x92, 0xc7, 0xad, 0x16, 0x45, 0x8c, 0x15, 0xae, + 0xe6, 0x25, 0x88, 0x70, 0x9d, 0x93, 0x3a, 0x54, 0x00, 0xc7, 0xcf, 0x12, 0x2a, 0xf7, 0x73, 0x9e, + 0x6e, 0x8d, 0xf5, 0x54, 0x70, 0x9c, 0x35, 0xb0, 0xa2, 0xc5, 0x26, 0x26, 0x3a, 0xff, 0x28, 0x03, + 0xaa, 0x3d, 0x8a, 0xdf, 0x8e, 0x01, 0xfb, 0x60, 0xa5, 0xd1, 0xa3, 0x78, 0x9f, 0x92, 0x28, 0x6b, + 0xc1, 0x76, 0x3f, 0xb6, 0x0b, 0x8a, 0x23, 0x00, 0xf5, 0x23, 0x4a, 0xa2, 0x81, 0x09, 0x79, 0xd2, + 0x94, 0x36, 0x08, 0x96, 0xb6, 0x41, 0x48, 0x4e, 0x6d, 0xf8, 0x5d, 0x9f, 0x83, 0x36, 0xc4, 0x01, + 0x7a, 0xdc, 0x8a, 0xc2, 0x99, 0xdc, 0xf8, 0x10, 0x5c, 0x1f, 0x3e, 0x04, 0xab, 0xfd, 0xd8, 0x5e, + 0x52, 0x48, 0xdd, 0x75, 0x2a, 0x6c, 0x96, 0xc1, 0x82, 0x68, 0x48, 0x28, 0xf2, 0x6b, 0x95, 0x1b, + 0xfd, 0xd8, 0x5e, 0x1d, 0xf4, 0xaa, 0x0c, 0x39, 0xfe, 0x4d, 0x8c, 0x4e, 0x64, 0x15, 0xd3, 0x9e, + 0x18, 0x59, 0x77, 0x49, 0xb1, 0x0b, 0xea, 0xc4, 0x0c, 0xa4, 0xa4, 0x2a, 0xcf, 0x0d, 0xb0, 0x51, + 0x63, 0xc1, 0x01, 0xe2, 0x55, 0x74, 0x44, 0x28, 0x3a, 0x40, 0xb8, 0xf5, 0x94, 0x90, 0xce, 0xff, + 0xa1, 0xf5, 0x53, 0xb0, 0xdc, 0x24, 0x98, 0x53, 0xd8, 0xe4, 0x72, 0xd7, 0xb4, 0xde, 0x42, 0x3f, + 0xb6, 0x37, 0x14, 0x3e, 0x13, 0x76, 0xfc, 0xa5, 0xe4, 0x59, 0xec, 0x68, 0xe5, 0xe3, 0x9c, 0xee, + 0x7b, 0x63, 0x75, 0x33, 0xc4, 0x4b, 0x0d, 0x29, 0x45, 0x20, 0x4b, 0x6d, 0x42, 0x3a, 0x4e, 0x11, + 0x6c, 0x8f, 0xd3, 0x98, 0x9a, 0xf0, 0x93, 0x01, 0xd6, 0x15, 0x40, 0x8e, 0x80, 0x1a, 0xe2, 0xb0, + 0x05, 0x39, 0x9c, 0xc5, 0x03, 0x1f, 0xdc, 0x8c, 0x34, 0x4d, 0xf7, 0xff, 0xed, 0x41, 0xff, 0xe3, + 0x4e, 0xda, 0xff, 0x49, 0xee, 0xea, 0xa6, 0x3e, 0x03, 0x7a, 0x34, 0x26, 0x64, 0xc7, 0x4f, 0xf3, + 0x54, 0x16, 0x87, 0x04, 0x3b, 0xb7, 0xc1, 0x7b, 0x63, 0x4a, 0x4c, 0x25, 0xc4, 0x57, 0xc0, 0x6a, + 0x8d, 0x05, 0xfb, 0x84, 0x36, 0xd1, 0x21, 0x85, 0x98, 0x1d, 0x21, 0xfa, 0x76, 0x4e, 0xaf, 0x0f, + 0xd6, 0xb9, 0x2e, 0x60, 0xf4, 0x04, 0xdf, 0xe9, 0xc7, 0xf6, 0xb6, 0xe2, 0x25, 0xa0, 0xdc, 0x29, + 0x1e, 0x47, 0x36, 0xbf, 0x04, 0x6b, 0xc9, 0xf2, 0x60, 0x2c, 0x5e, 0x93, 0x19, 0x8b, 0xfd, 0xd8, + 0xb6, 0x72, 0x19, 0x87, 0x47, 0xe3, 0x28, 0xb1, 0xf2, 0x20, 0xd7, 0x48, 0x1f, 0x8c, 0x6d, 0xa4, + 0x23, 0x61, 0x65, 0x29, 0x61, 0x3b, 0x16, 0x28, 0xe4, 0xfd, 0x4d, 0xcd, 0xff, 0xcd, 0x90, 0xe3, + 0xe3, 0xab, 0x6e, 0x0b, 0x72, 0xf4, 0x4c, 0x5e, 0xa6, 0xe6, 0x1e, 0x58, 0x80, 0x3d, 0xde, 0x26, + 0x34, 0xe4, 0xa7, 0xda, 0xfe, 0xc2, 0x1f, 0xbf, 0x96, 0x36, 0xb4, 0xad, 0xba, 0x96, 0x03, 0x4e, + 0x43, 0x1c, 0xf8, 0x03, 0xa8, 0xf9, 0x19, 0x98, 0x57, 0xd7, 0xb1, 0xde, 0x88, 0x6d, 0x77, 0xec, + 0xd7, 0x86, 0x7a, 0x4b, 0x75, 0x41, 0xec, 0xc5, 0x2f, 0x97, 0x67, 0x3b, 0x86, 0xaf, 0x69, 0x95, + 0x87, 0x42, 0xdd, 0x20, 0xa1, 0x9c, 0x10, 0x21, 0xe6, 0x88, 0x36, 0xdb, 0x30, 0xc4, 0x2f, 0x7a, + 0x88, 0x86, 0x88, 0x79, 0xb9, 0x72, 0x9d, 0x2d, 0xb0, 0x99, 0x5b, 0x4a, 0xd4, 0xed, 0xfe, 0x7c, + 0x03, 0x5c, 0xad, 0xb1, 0xc0, 0x7c, 0x01, 0x16, 0x87, 0x3f, 0x0a, 0x3e, 0x72, 0xff, 0xeb, 0x33, + 0xc8, 0xcd, 0xde, 0xd0, 0xd6, 0xc3, 0x59, 0xd0, 0xe9, 0x7d, 0xfe, 0x1c, 0x5c, 0x93, 0xf7, 0xf0, + 0xdd, 0x89, 0x6c, 0x01, 0xb3, 0x4a, 0x53, 0xc1, 0x86, 0xb3, 0xcb, 0x4b, 0x6e, 0x72, 0x76, 0x01, + 0x9b, 0x22, 0xfb, 0xf0, 0xfd, 0x21, 0xed, 0x1a, 0xba, 0x3b, 0xa6, 0xb0, 0x6b, 0x80, 0x9e, 0xc6, + 0xae, 0xd1, 0x61, 0x6e, 0xbe, 0x32, 0xc0, 0xea, 0xc8, 0x10, 0x2b, 0x4f, 0x4c, 0x95, 0xa7, 0x58, + 0x9f, 0xcc, 0x4c, 0x49, 0x4b, 0xf8, 0xce, 0x00, 0x6b, 0xa3, 0x97, 0xc9, 0xee, 0x34, 0x09, 0xb3, + 0x1c, 0xab, 0x32, 0x3b, 0x27, 0xad, 0xe2, 0x04, 0x2c, 0x67, 0x27, 0xa1, 0x3b, 0x31, 0x59, 0x06, + 0x6f, 0xed, 0xcd, 0x86, 0x4f, 0x5f, 0xcc, 0xc1, 0x52, 0x66, 0x0a, 0x4c, 0xee, 0x99, 0x61, 0xb8, + 0xf5, 0x68, 0x26, 0x78, 0xf2, 0x56, 0xeb, 0xfa, 0x2b, 0x31, 0x01, 0xaa, 0xcf, 0x5e, 0x9f, 0x17, + 0x8d, 0x37, 0xe7, 0x45, 0xe3, 0xaf, 0xf3, 0xa2, 0xf1, 0xc3, 0x45, 0x71, 0xee, 0xcd, 0x45, 0x71, + 0xee, 0xcf, 0x8b, 0xe2, 0xdc, 0xd7, 0x7b, 0x41, 0xc8, 0xdb, 0xbd, 0x86, 0xdb, 0x24, 0x91, 0x87, + 0x51, 0x8f, 0x53, 0x82, 0x4b, 0x84, 0x06, 0xc9, 0x6f, 0xef, 0xf8, 0x91, 0xf7, 0x32, 0x3b, 0xfd, + 0xf8, 0x69, 0x17, 0xb1, 0xc6, 0xbc, 0xfc, 0x93, 0xe0, 0xc1, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, + 0xa3, 0xcd, 0xc9, 0x53, 0x19, 0x0d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/tokenfactory/types/v1beta1/params.pb.go b/x/tokenfactory/types/v1beta1/params.pb.go index cf863a97c..7219dbd6d 100644 --- a/x/tokenfactory/types/v1beta1/params.pb.go +++ b/x/tokenfactory/types/v1beta1/params.pb.go @@ -105,31 +105,31 @@ func init() { } var fileDescriptor_cc8299d306f3ff47 = []byte{ - // 376 bytes of a gzipped FileDescriptorProto + // 377 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x52, 0xbd, 0x6e, 0xe2, 0x40, 0x10, 0xf6, 0xc2, 0x09, 0xe9, 0x7c, 0xcd, 0xc9, 0x77, 0xa7, 0x03, 0x74, 0xb2, 0x39, 0x57, 0xa6, - 0xc0, 0x2b, 0x48, 0xaa, 0x14, 0x91, 0x82, 0xa5, 0xa4, 0x8a, 0x14, 0x51, 0x45, 0x69, 0xac, 0xb5, - 0x3d, 0x76, 0x2c, 0xf0, 0x0e, 0xf2, 0x2e, 0x28, 0xbc, 0x45, 0xaa, 0x3c, 0x44, 0xde, 0x21, 0x3d, - 0x25, 0x65, 0x2a, 0x27, 0x82, 0x37, 0xe0, 0x09, 0x22, 0xfc, 0x13, 0x41, 0x92, 0xca, 0x33, 0xf3, - 0x7d, 0xf3, 0xcd, 0xe7, 0x99, 0x55, 0xbb, 0x28, 0x12, 0x14, 0xb1, 0xa0, 0x12, 0xc7, 0xc0, 0x43, - 0xe6, 0x4b, 0x4c, 0x17, 0x74, 0xde, 0xf7, 0x40, 0xb2, 0x3e, 0x9d, 0xb2, 0x94, 0x25, 0xc2, 0x9e, - 0xa6, 0x28, 0x51, 0xfb, 0x57, 0x52, 0xed, 0x7d, 0xaa, 0x5d, 0x52, 0xdb, 0xba, 0x9f, 0xc3, 0xd4, - 0x63, 0x02, 0xde, 0xfb, 0x7d, 0x8c, 0x79, 0xd1, 0xdd, 0x6e, 0x15, 0xb8, 0x9b, 0x67, 0xb4, 0x48, - 0x4a, 0xe8, 0x77, 0x84, 0x11, 0x16, 0xf5, 0x5d, 0x54, 0x54, 0xcd, 0xa7, 0x9a, 0xda, 0xb8, 0xca, - 0xe7, 0x6b, 0x0f, 0x44, 0xd5, 0x02, 0xe0, 0x98, 0xb8, 0x7e, 0x0a, 0x4c, 0xc6, 0xc8, 0xdd, 0x10, - 0xa0, 0x49, 0x3a, 0x75, 0xeb, 0xc7, 0xa0, 0x65, 0x97, 0x62, 0xbb, 0xc9, 0x95, 0x1d, 0xdb, 0xc1, - 0x98, 0x0f, 0x2f, 0x97, 0x99, 0xa1, 0x6c, 0x33, 0xa3, 0xb5, 0x60, 0xc9, 0xe4, 0xc4, 0xfc, 0x2c, - 0x61, 0x3e, 0xbe, 0x18, 0x56, 0x14, 0xcb, 0xdb, 0x99, 0x67, 0xfb, 0x98, 0x94, 0xb6, 0xca, 0x4f, - 0x4f, 0x04, 0x63, 0x2a, 0x17, 0x53, 0x10, 0xb9, 0x9a, 0x18, 0xfd, 0xcc, 0x05, 0x9c, 0xb2, 0xff, - 0x1c, 0x40, 0x0b, 0xd5, 0xf6, 0x07, 0xd1, 0x88, 0x09, 0xd7, 0x47, 0x2e, 0x66, 0x09, 0x34, 0x6b, - 0x1d, 0x62, 0x7d, 0x1b, 0x76, 0x97, 0x99, 0x41, 0xb6, 0x99, 0xf1, 0xff, 0x4b, 0x13, 0x7b, 0x7c, - 0x73, 0xf4, 0xf7, 0x60, 0xc0, 0x05, 0x13, 0x4e, 0x81, 0x68, 0x03, 0xf5, 0x4f, 0x08, 0xe0, 0xfa, - 0x38, 0x99, 0xc0, 0x6e, 0xed, 0x2e, 0x0b, 0x82, 0x14, 0x84, 0x68, 0xd6, 0x3b, 0xc4, 0xfa, 0x3e, - 0xfa, 0x15, 0x02, 0x38, 0x15, 0x76, 0x56, 0x40, 0xc3, 0xeb, 0xe5, 0x5a, 0x27, 0xab, 0xb5, 0x4e, - 0x5e, 0xd7, 0x3a, 0xb9, 0xdf, 0xe8, 0xca, 0x6a, 0xa3, 0x2b, 0xcf, 0x1b, 0x5d, 0xb9, 0x39, 0xdd, - 0xfb, 0x63, 0x0e, 0x33, 0x99, 0x22, 0xef, 0x61, 0x1a, 0x55, 0x31, 0x9d, 0x1f, 0xd3, 0xbb, 0xc3, - 0xf7, 0x90, 0x6f, 0xa1, 0xba, 0xaa, 0xd7, 0xc8, 0x0f, 0x74, 0xf4, 0x16, 0x00, 0x00, 0xff, 0xff, - 0xc4, 0x5e, 0x24, 0x25, 0x3c, 0x02, 0x00, 0x00, + 0xc0, 0x2b, 0x88, 0xd2, 0xa4, 0x88, 0x14, 0x2c, 0x25, 0x55, 0xa4, 0x88, 0x2a, 0x4a, 0x63, 0xad, + 0xed, 0xb1, 0x63, 0x81, 0x77, 0x90, 0x77, 0x41, 0xe1, 0x2d, 0x52, 0xe5, 0x21, 0xf2, 0x0e, 0xe9, + 0x29, 0x29, 0x53, 0x39, 0x11, 0xbc, 0x01, 0x4f, 0x10, 0xe1, 0x9f, 0x08, 0x92, 0x54, 0x9e, 0x99, + 0xef, 0x9b, 0x6f, 0x3e, 0xcf, 0xac, 0xda, 0x45, 0x91, 0xa0, 0x88, 0x05, 0x95, 0x38, 0x06, 0x1e, + 0x32, 0x5f, 0x62, 0xba, 0xa0, 0xf3, 0xbe, 0x07, 0x92, 0xf5, 0xe9, 0x94, 0xa5, 0x2c, 0x11, 0xf6, + 0x34, 0x45, 0x89, 0xda, 0xbf, 0x92, 0x6a, 0xef, 0x53, 0xed, 0x92, 0xda, 0xd6, 0xfd, 0x1c, 0xa6, + 0x1e, 0x13, 0xf0, 0xde, 0xef, 0x63, 0xcc, 0x8b, 0xee, 0x76, 0xab, 0xc0, 0xdd, 0x3c, 0xa3, 0x45, + 0x52, 0x42, 0xbf, 0x23, 0x8c, 0xb0, 0xa8, 0xef, 0xa2, 0xa2, 0x6a, 0x3e, 0xd5, 0xd4, 0xc6, 0x55, + 0x3e, 0x5f, 0x7b, 0x20, 0xaa, 0x16, 0x00, 0xc7, 0xc4, 0xf5, 0x53, 0x60, 0x32, 0x46, 0xee, 0x86, + 0x00, 0x4d, 0xd2, 0xa9, 0x5b, 0x3f, 0x06, 0x2d, 0xbb, 0x14, 0xdb, 0x4d, 0xae, 0xec, 0xd8, 0x0e, + 0xc6, 0x7c, 0x78, 0xb9, 0xcc, 0x0c, 0x65, 0x9b, 0x19, 0xad, 0x05, 0x4b, 0x26, 0x27, 0xe6, 0x67, + 0x09, 0xf3, 0xf1, 0xc5, 0xb0, 0xa2, 0x58, 0xde, 0xce, 0x3c, 0xdb, 0xc7, 0xa4, 0xb4, 0x55, 0x7e, + 0x7a, 0x22, 0x18, 0x53, 0xb9, 0x98, 0x82, 0xc8, 0xd5, 0xc4, 0xe8, 0x67, 0x2e, 0xe0, 0x94, 0xfd, + 0xe7, 0x00, 0x5a, 0xa8, 0xb6, 0x3f, 0x88, 0x46, 0x4c, 0xb8, 0x3e, 0x72, 0x31, 0x4b, 0xa0, 0x59, + 0xeb, 0x10, 0xeb, 0xdb, 0xb0, 0xbb, 0xcc, 0x0c, 0xb2, 0xcd, 0x8c, 0xff, 0x5f, 0x9a, 0xd8, 0xe3, + 0x9b, 0xa3, 0xbf, 0x07, 0x03, 0x2e, 0x98, 0x70, 0x0a, 0x44, 0x1b, 0xa8, 0x7f, 0x42, 0x00, 0xd7, + 0xc7, 0xc9, 0x04, 0x76, 0x6b, 0x77, 0x59, 0x10, 0xa4, 0x20, 0x44, 0xb3, 0xde, 0x21, 0xd6, 0xf7, + 0xd1, 0xaf, 0x10, 0xc0, 0xa9, 0xb0, 0xb3, 0x02, 0x1a, 0x5e, 0x2f, 0xd7, 0x3a, 0x59, 0xad, 0x75, + 0xf2, 0xba, 0xd6, 0xc9, 0xfd, 0x46, 0x57, 0x56, 0x1b, 0x5d, 0x79, 0xde, 0xe8, 0xca, 0xcd, 0xe9, + 0xde, 0x1f, 0x73, 0x98, 0xc9, 0x14, 0x79, 0x0f, 0xd3, 0xa8, 0x8a, 0xe9, 0xfc, 0x98, 0xde, 0x1d, + 0xbe, 0x87, 0x7c, 0x0b, 0xd5, 0x55, 0xbd, 0x46, 0x7e, 0xa0, 0xa3, 0xb7, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x26, 0xa3, 0xac, 0xa8, 0x3c, 0x02, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/transfer/ibc_handlers.go b/x/transfer/ibc_handlers.go index 9ccd06b86..d86ecfe2f 100644 --- a/x/transfer/ibc_handlers.go +++ b/x/transfer/ibc_handlers.go @@ -7,9 +7,9 @@ import ( transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" - "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" - feetypes "github.com/neutron-org/neutron/v4/x/feerefunder/types" - "github.com/neutron-org/neutron/v4/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" + feetypes "github.com/neutron-org/neutron/v5/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/interchaintxs/types" ) // HandleAcknowledgement passes the acknowledgement data to the appropriate contract via a sudo call. diff --git a/x/transfer/ibc_handlers_test.go b/x/transfer/ibc_handlers_test.go index 61f0b6540..e6ccadc1a 100644 --- a/x/transfer/ibc_handlers_test.go +++ b/x/transfer/ibc_handlers_test.go @@ -6,7 +6,7 @@ import ( types2 "cosmossdk.io/store/types" - "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" + "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" sdk "github.com/cosmos/cosmos-sdk/types" transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" @@ -14,12 +14,12 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" - "github.com/neutron-org/neutron/v4/testutil" - mock_types "github.com/neutron-org/neutron/v4/testutil/mocks/transfer/types" - testkeeper "github.com/neutron-org/neutron/v4/testutil/transfer/keeper" - feetypes "github.com/neutron-org/neutron/v4/x/feerefunder/types" - ictxtypes "github.com/neutron-org/neutron/v4/x/interchaintxs/types" - "github.com/neutron-org/neutron/v4/x/transfer" + "github.com/neutron-org/neutron/v5/testutil" + mock_types "github.com/neutron-org/neutron/v5/testutil/mocks/transfer/types" + testkeeper "github.com/neutron-org/neutron/v5/testutil/transfer/keeper" + feetypes "github.com/neutron-org/neutron/v5/x/feerefunder/types" + ictxtypes "github.com/neutron-org/neutron/v5/x/interchaintxs/types" + "github.com/neutron-org/neutron/v5/x/transfer" ) const TestCosmosAddress = "cosmos10h9stc5v6ntgeygf5xf945njqq5h32r53uquvw" diff --git a/x/transfer/keeper/keeper.go b/x/transfer/keeper/keeper.go index 56e630cd0..191a1ae4f 100644 --- a/x/transfer/keeper/keeper.go +++ b/x/transfer/keeper/keeper.go @@ -16,8 +16,8 @@ import ( channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" - feetypes "github.com/neutron-org/neutron/v4/x/feerefunder/types" - wrappedtypes "github.com/neutron-org/neutron/v4/x/transfer/types" + feetypes "github.com/neutron-org/neutron/v5/x/feerefunder/types" + wrappedtypes "github.com/neutron-org/neutron/v5/x/transfer/types" ) // KeeperTransferWrapper is a wrapper for original ibc keeper to override response for "Transfer" method diff --git a/x/transfer/keeper/keeper_test.go b/x/transfer/keeper/keeper_test.go index 7ba8be0a3..d085325b3 100644 --- a/x/transfer/keeper/keeper_test.go +++ b/x/transfer/keeper/keeper_test.go @@ -15,12 +15,12 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - "github.com/neutron-org/neutron/v4/app/params" - "github.com/neutron-org/neutron/v4/testutil" - mock_types "github.com/neutron-org/neutron/v4/testutil/mocks/transfer/types" - "github.com/neutron-org/neutron/v4/testutil/transfer/keeper" - feetypes "github.com/neutron-org/neutron/v4/x/feerefunder/types" - "github.com/neutron-org/neutron/v4/x/transfer/types" + "github.com/neutron-org/neutron/v5/app/params" + "github.com/neutron-org/neutron/v5/testutil" + mock_types "github.com/neutron-org/neutron/v5/testutil/mocks/transfer/types" + "github.com/neutron-org/neutron/v5/testutil/transfer/keeper" + feetypes "github.com/neutron-org/neutron/v5/x/feerefunder/types" + "github.com/neutron-org/neutron/v5/x/transfer/types" ) const ( diff --git a/x/transfer/module.go b/x/transfer/module.go index 509470d61..0479b53b5 100644 --- a/x/transfer/module.go +++ b/x/transfer/module.go @@ -15,8 +15,8 @@ import ( "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" - wrapkeeper "github.com/neutron-org/neutron/v4/x/transfer/keeper" - neutrontypes "github.com/neutron-org/neutron/v4/x/transfer/types" + wrapkeeper "github.com/neutron-org/neutron/v5/x/transfer/keeper" + neutrontypes "github.com/neutron-org/neutron/v5/x/transfer/types" ) /* diff --git a/x/transfer/types/expected_keepers.go b/x/transfer/types/expected_keepers.go index f13d094a0..5eb6f8edc 100644 --- a/x/transfer/types/expected_keepers.go +++ b/x/transfer/types/expected_keepers.go @@ -6,7 +6,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" - feerefundertypes "github.com/neutron-org/neutron/v4/x/feerefunder/types" + feerefundertypes "github.com/neutron-org/neutron/v5/x/feerefunder/types" ) type WasmKeeper interface { diff --git a/x/transfer/types/query.pb.go b/x/transfer/types/query.pb.go index 4d562d622..649f418da 100644 --- a/x/transfer/types/query.pb.go +++ b/x/transfer/types/query.pb.go @@ -30,30 +30,31 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("neutron/transfer/v1/query.proto", fileDescriptor_560cfedb574fdf6b) } var fileDescriptor_560cfedb574fdf6b = []byte{ - // 368 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0x3f, 0x4b, 0x03, 0x31, - 0x18, 0xc6, 0x7b, 0x42, 0x0b, 0xc6, 0x45, 0x32, 0x96, 0x12, 0xa1, 0x74, 0xd0, 0xaa, 0x89, 0xd7, - 0x56, 0x3f, 0x80, 0x38, 0x38, 0x38, 0xa8, 0x38, 0xb9, 0x48, 0xee, 0x8c, 0x77, 0x07, 0x6d, 0x92, - 0x26, 0xb9, 0x62, 0x91, 0x2e, 0x7e, 0x02, 0xa1, 0x5f, 0xc1, 0x41, 0xc4, 0x0f, 0xe2, 0x58, 0x70, - 0x71, 0x94, 0xd6, 0x0f, 0x22, 0x97, 0xbb, 0xb3, 0x0a, 0xfe, 0xe9, 0x6d, 0x49, 0x78, 0x9e, 0xe7, - 0xfd, 0xe5, 0x7d, 0x13, 0xb0, 0xc6, 0x59, 0x6c, 0x94, 0xe0, 0xc4, 0x28, 0xca, 0xf5, 0x15, 0x53, - 0x64, 0xe0, 0x92, 0x7e, 0xcc, 0xd4, 0x10, 0x4b, 0x25, 0x8c, 0x80, 0xab, 0x99, 0x00, 0xe7, 0x82, - 0x6a, 0x2d, 0x10, 0x22, 0xe8, 0x32, 0x42, 0x65, 0x44, 0x28, 0xe7, 0xc2, 0x50, 0x13, 0x09, 0xae, - 0x53, 0x7d, 0x75, 0x3d, 0xf2, 0x7c, 0x42, 0xa5, 0xec, 0x46, 0x7e, 0x7a, 0xfe, 0x5b, 0x72, 0xeb, - 0xbe, 0x0c, 0xca, 0x27, 0xc9, 0x1e, 0x3e, 0x39, 0x00, 0x1c, 0x30, 0x2e, 0x7a, 0x67, 0x8a, 0xfa, - 0x0c, 0x76, 0x70, 0xe4, 0xf9, 0xf8, 0x6b, 0xc6, 0x67, 0x71, 0x3c, 0x70, 0xb1, 0xf5, 0xcc, 0xe5, - 0xa7, 0xac, 0x1f, 0x33, 0x6d, 0xaa, 0xbb, 0x05, 0x5d, 0x5a, 0x0a, 0xae, 0x59, 0xdd, 0xbd, 0x7d, - 0x79, 0x1f, 0x2f, 0x6d, 0xc2, 0x0d, 0x92, 0x81, 0x7f, 0x07, 0xbe, 0x4c, 0x1c, 0x17, 0x26, 0xb1, - 0x68, 0x72, 0x13, 0x52, 0x1d, 0x8e, 0xe0, 0x83, 0x03, 0x56, 0xe6, 0x49, 0x1a, 0x16, 0xab, 0xac, - 0x73, 0xe0, 0xbd, 0xa2, 0xb6, 0x8c, 0xb8, 0x69, 0x89, 0x1b, 0xb0, 0xfe, 0x3f, 0x31, 0x1c, 0x3b, - 0xa0, 0x72, 0x4c, 0x15, 0xed, 0x69, 0xb8, 0xb3, 0x40, 0xb9, 0x54, 0x9a, 0x03, 0xba, 0x05, 0x1c, - 0x19, 0x5b, 0xc3, 0xb2, 0x21, 0x58, 0xfb, 0x99, 0x4d, 0xa6, 0x28, 0x8f, 0x0e, 0x58, 0xb6, 0x37, - 0x3b, 0xa4, 0x3a, 0x84, 0xed, 0x45, 0xfb, 0x90, 0xa8, 0x73, 0xb6, 0x4e, 0x31, 0x53, 0x86, 0xd7, - 0xb2, 0x78, 0x5b, 0xb0, 0xf9, 0x57, 0xeb, 0x92, 0x21, 0x27, 0xc3, 0xb6, 0x2d, 0x1c, 0xed, 0x1f, - 0x3d, 0x4f, 0x91, 0x33, 0x99, 0x22, 0xe7, 0x6d, 0x8a, 0x9c, 0xbb, 0x19, 0x2a, 0x4d, 0x66, 0xa8, - 0xf4, 0x3a, 0x43, 0xa5, 0xf3, 0x56, 0x10, 0x99, 0x30, 0xf6, 0xb0, 0x2f, 0x7a, 0x24, 0xfb, 0x25, - 0xdb, 0x42, 0x05, 0xf9, 0x9a, 0x0c, 0x3a, 0xe4, 0x7a, 0x9e, 0x6f, 0x86, 0x92, 0x69, 0xaf, 0x62, - 0xdf, 0x7e, 0xfb, 0x23, 0x00, 0x00, 0xff, 0xff, 0xf4, 0x46, 0x5b, 0xdc, 0x78, 0x03, 0x00, 0x00, + // 370 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0xcd, 0x4a, 0x3b, 0x31, + 0x14, 0xc5, 0x3b, 0x7f, 0x68, 0xe1, 0x1f, 0x37, 0x92, 0x65, 0x29, 0x11, 0x4a, 0x17, 0x5a, 0x35, + 0x71, 0xfa, 0xe1, 0x03, 0x88, 0x0b, 0x17, 0x2e, 0x54, 0x5c, 0xb9, 0x91, 0xcc, 0x18, 0x67, 0x06, + 0xda, 0x24, 0x4d, 0x32, 0xc5, 0x22, 0xdd, 0xf8, 0x04, 0x42, 0x5f, 0xc1, 0x85, 0x88, 0x0f, 0xe2, + 0xb2, 0xe0, 0xc6, 0xa5, 0xb4, 0x3e, 0x88, 0x4c, 0x66, 0xc6, 0x2a, 0xf8, 0xd1, 0xd9, 0x25, 0xe1, + 0x9c, 0x73, 0x7f, 0xb9, 0x37, 0x01, 0x6b, 0x9c, 0xc5, 0x46, 0x09, 0x4e, 0x8c, 0xa2, 0x5c, 0x5f, + 0x32, 0x45, 0x86, 0x2e, 0x19, 0xc4, 0x4c, 0x8d, 0xb0, 0x54, 0xc2, 0x08, 0xb8, 0x9a, 0x09, 0x70, + 0x2e, 0xa8, 0xd6, 0x02, 0x21, 0x82, 0x1e, 0x23, 0x54, 0x46, 0x84, 0x72, 0x2e, 0x0c, 0x35, 0x91, + 0xe0, 0x3a, 0xd5, 0x57, 0xd7, 0x23, 0xcf, 0x27, 0x54, 0xca, 0x5e, 0xe4, 0xa7, 0xe7, 0x3f, 0x25, + 0xb7, 0xee, 0xca, 0xa0, 0x7c, 0x9c, 0xec, 0xe1, 0xa3, 0x03, 0xc0, 0x3e, 0xe3, 0xa2, 0x7f, 0xaa, + 0xa8, 0xcf, 0x60, 0x07, 0x47, 0x9e, 0x8f, 0x3f, 0x67, 0x7c, 0x14, 0xc7, 0x43, 0x17, 0x5b, 0xcf, + 0x42, 0x7e, 0xc2, 0x06, 0x31, 0xd3, 0xa6, 0xda, 0x2d, 0xe8, 0xd2, 0x52, 0x70, 0xcd, 0xea, 0xee, + 0xcd, 0xf3, 0xdb, 0xe4, 0xdf, 0x26, 0xdc, 0x20, 0x19, 0xf8, 0x57, 0xe0, 0x8b, 0xc4, 0x71, 0x6e, + 0x12, 0x8b, 0x26, 0xd7, 0x21, 0xd5, 0xe1, 0x18, 0xde, 0x3b, 0x60, 0x65, 0x91, 0xa4, 0x61, 0xb1, + 0xca, 0x3a, 0x07, 0xde, 0x2d, 0x6a, 0xcb, 0x88, 0x9b, 0x96, 0xb8, 0x01, 0xeb, 0x7f, 0x13, 0xc3, + 0x89, 0x03, 0x2a, 0x47, 0x54, 0xd1, 0xbe, 0x86, 0x3b, 0x4b, 0x94, 0x4b, 0xa5, 0x39, 0xa0, 0x5b, + 0xc0, 0x91, 0xb1, 0x35, 0x2c, 0x1b, 0x82, 0xb5, 0xef, 0xd9, 0x64, 0x8a, 0xf2, 0xe0, 0x80, 0xff, + 0xf6, 0x66, 0x07, 0x54, 0x87, 0xb0, 0xbd, 0x6c, 0x1f, 0x12, 0x75, 0xce, 0xd6, 0x29, 0x66, 0xca, + 0xf0, 0x5a, 0x16, 0x6f, 0x0b, 0x36, 0x7f, 0x6b, 0x5d, 0x32, 0xe4, 0x64, 0xd8, 0xb6, 0x85, 0xe3, + 0xbd, 0xc3, 0xa7, 0x19, 0x72, 0xa6, 0x33, 0xe4, 0xbc, 0xce, 0x90, 0x73, 0x3b, 0x47, 0xa5, 0xe9, + 0x1c, 0x95, 0x5e, 0xe6, 0xa8, 0x74, 0xd6, 0x0a, 0x22, 0x13, 0xc6, 0x1e, 0xf6, 0x45, 0x9f, 0x64, + 0xbf, 0x64, 0x5b, 0xa8, 0x20, 0x5f, 0x93, 0x61, 0x97, 0x5c, 0x2d, 0xf2, 0xcd, 0x48, 0x32, 0xed, + 0x55, 0xec, 0xdb, 0x6f, 0xbf, 0x07, 0x00, 0x00, 0xff, 0xff, 0x63, 0xe0, 0x46, 0x3b, 0x78, 0x03, + 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/transfer/types/tx.go b/x/transfer/types/tx.go index ada5bc1ae..e87ce7e09 100644 --- a/x/transfer/types/tx.go +++ b/x/transfer/types/tx.go @@ -6,7 +6,7 @@ import ( "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" "google.golang.org/grpc" - feerefundertypes "github.com/neutron-org/neutron/v4/x/feerefunder/types" + feerefundertypes "github.com/neutron-org/neutron/v5/x/feerefunder/types" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/transfer/types/tx.pb.go b/x/transfer/types/tx.pb.go index 94361dafa..b2e46f9df 100644 --- a/x/transfer/types/tx.pb.go +++ b/x/transfer/types/tx.pb.go @@ -13,7 +13,7 @@ import ( proto "github.com/cosmos/gogoproto/proto" types3 "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" types1 "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" - types2 "github.com/neutron-org/neutron/v4/x/feerefunder/types" + types2 "github.com/neutron-org/neutron/v5/x/feerefunder/types" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" @@ -234,50 +234,50 @@ func init() { func init() { proto.RegisterFile("neutron/transfer/v1/tx.proto", fileDescriptor_c44193c4a9c18e30) } var fileDescriptor_c44193c4a9c18e30 = []byte{ - // 686 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0x4f, 0x6f, 0xd3, 0x4a, - 0x10, 0x8f, 0x5f, 0xd2, 0xb4, 0xdd, 0xbc, 0xfe, 0x79, 0xdb, 0xf7, 0x5a, 0x37, 0x6a, 0xed, 0x3e, - 0x0b, 0xa4, 0x52, 0xc4, 0x9a, 0x04, 0x10, 0x52, 0x4f, 0x28, 0x95, 0x10, 0x95, 0xa8, 0x14, 0x59, - 0xe5, 0x82, 0x90, 0x8a, 0xe3, 0x4c, 0x1c, 0x8b, 0x78, 0xd7, 0xec, 0x6e, 0xa2, 0xf6, 0x82, 0x10, - 0xa7, 0x1e, 0xf9, 0x08, 0xfd, 0x08, 0xfd, 0x00, 0x7c, 0x80, 0x1e, 0x7b, 0xe4, 0x14, 0xa1, 0xf6, - 0x50, 0xce, 0xbd, 0x72, 0x41, 0x5e, 0xaf, 0xd3, 0xa4, 0x42, 0x70, 0xca, 0xcc, 0xfc, 0x7e, 0x33, - 0xe3, 0xf9, 0xcd, 0x6c, 0xd0, 0x1a, 0x85, 0xbe, 0xe4, 0x8c, 0xba, 0x92, 0xfb, 0x54, 0x74, 0x80, - 0xbb, 0x83, 0x9a, 0x2b, 0x0f, 0x49, 0xc2, 0x99, 0x64, 0x78, 0x51, 0xa3, 0x24, 0x47, 0xab, 0x56, - 0xc0, 0x44, 0xcc, 0x84, 0xdb, 0xf2, 0x05, 0xb8, 0x83, 0x5a, 0x0b, 0xa4, 0x5f, 0x73, 0x03, 0x16, - 0xd1, 0x2c, 0xa3, 0xba, 0xa2, 0xf1, 0x58, 0x84, 0x69, 0xa5, 0x58, 0x84, 0x1a, 0xf8, 0x37, 0x64, - 0x21, 0x53, 0xa6, 0x9b, 0x5a, 0x3a, 0x7a, 0x3f, 0x6a, 0x05, 0xae, 0x9f, 0x24, 0xbd, 0x28, 0xf0, - 0x65, 0xc4, 0xa8, 0x98, 0xfc, 0x0e, 0x6d, 0x6b, 0xb2, 0x9d, 0x92, 0x03, 0xc6, 0xc1, 0x0d, 0x7a, - 0x11, 0x50, 0x99, 0x52, 0x32, 0x4b, 0x13, 0xd6, 0xf3, 0x61, 0x3a, 0x00, 0x1c, 0x3a, 0x7d, 0xda, - 0x06, 0x9e, 0xda, 0x19, 0xec, 0xfc, 0x28, 0xa2, 0xca, 0x9e, 0x08, 0xf7, 0x75, 0x55, 0xfc, 0x14, - 0x55, 0x04, 0xeb, 0xf3, 0x00, 0x0e, 0x12, 0xc6, 0xa5, 0x69, 0x6c, 0x18, 0x9b, 0xb3, 0x8d, 0xe5, - 0xeb, 0xa1, 0x8d, 0x8f, 0xfc, 0xb8, 0xb7, 0xed, 0x8c, 0x81, 0x8e, 0x87, 0x32, 0xaf, 0xc9, 0xb8, - 0xc4, 0xcf, 0xd0, 0xbc, 0xc6, 0x82, 0xae, 0x4f, 0x29, 0xf4, 0xcc, 0xbf, 0x54, 0xee, 0xea, 0xf5, - 0xd0, 0xfe, 0x6f, 0x22, 0x57, 0xe3, 0x8e, 0x37, 0x97, 0x05, 0x76, 0x32, 0x1f, 0x3f, 0x41, 0x53, - 0x92, 0xbd, 0x03, 0x6a, 0x16, 0x37, 0x8c, 0xcd, 0x4a, 0x7d, 0x95, 0x64, 0xb2, 0x91, 0x54, 0x56, - 0xa2, 0x65, 0x25, 0x3b, 0x2c, 0xa2, 0x8d, 0xd2, 0xd9, 0xd0, 0x2e, 0x78, 0x19, 0x1b, 0x2f, 0xa3, - 0xb2, 0x80, 0x74, 0x2a, 0xb3, 0x94, 0x36, 0xf4, 0xb4, 0x87, 0xab, 0x68, 0x86, 0x43, 0x00, 0xd1, - 0x00, 0xb8, 0x39, 0xa5, 0x90, 0x91, 0x8f, 0xdf, 0xa2, 0x79, 0x19, 0xc5, 0xc0, 0xfa, 0xf2, 0xa0, - 0x0b, 0x51, 0xd8, 0x95, 0x66, 0x59, 0xf5, 0xac, 0x92, 0xa8, 0x15, 0x90, 0x54, 0x4e, 0xa2, 0x45, - 0x1c, 0xd4, 0xc8, 0x0b, 0xc5, 0x68, 0xac, 0xa7, 0x4d, 0x6f, 0x86, 0x99, 0xcc, 0x77, 0xbc, 0x39, - 0x1d, 0xc8, 0xd8, 0x78, 0x17, 0xfd, 0x93, 0x33, 0xd2, 0x5f, 0x21, 0xfd, 0x38, 0x31, 0xa7, 0x37, - 0x8c, 0xcd, 0x52, 0x63, 0xed, 0x7a, 0x68, 0x9b, 0x93, 0x45, 0x46, 0x14, 0xc7, 0x5b, 0xd4, 0xb1, - 0xfd, 0x3c, 0x84, 0x31, 0x2a, 0xc5, 0x10, 0x33, 0x73, 0x46, 0x0d, 0xa1, 0x6c, 0xfc, 0x10, 0x15, - 0x3b, 0x00, 0xe6, 0xac, 0xfa, 0x6a, 0x93, 0xe4, 0x27, 0x39, 0xb6, 0x63, 0xf2, 0x1c, 0x40, 0x0b, - 0x95, 0x52, 0xb7, 0x97, 0x8e, 0x4f, 0xec, 0xc2, 0xf7, 0x13, 0xbb, 0xf0, 0xe9, 0xea, 0x74, 0x4b, - 0x6b, 0xe4, 0x34, 0xd1, 0xd2, 0xd8, 0xf2, 0x3d, 0x10, 0x09, 0xa3, 0x02, 0xb0, 0x8d, 0x2a, 0x02, - 0xde, 0xf7, 0x81, 0x06, 0x70, 0x10, 0xb5, 0xd5, 0x11, 0x94, 0x3c, 0x94, 0x87, 0x76, 0xdb, 0xd8, - 0x44, 0xd3, 0x13, 0x5b, 0xf6, 0x72, 0xd7, 0xf9, 0x80, 0x16, 0xf6, 0x44, 0xf8, 0x2a, 0x69, 0xfb, - 0x12, 0x9a, 0x3e, 0xf7, 0x63, 0xa1, 0x16, 0x14, 0x85, 0x14, 0x78, 0x76, 0x4d, 0x9e, 0xf6, 0x70, - 0x03, 0x95, 0x13, 0xc5, 0x50, 0x35, 0x2a, 0xf5, 0x3b, 0x4a, 0xfc, 0xf1, 0xc3, 0x1f, 0x3d, 0xb1, - 0x74, 0x0d, 0x59, 0x35, 0x3d, 0x92, 0xce, 0xdc, 0x5e, 0x38, 0x1e, 0x4d, 0xa4, 0x8a, 0x3a, 0xab, - 0x68, 0xe5, 0x56, 0xff, 0x7c, 0xaa, 0xfa, 0x17, 0x03, 0x15, 0xf7, 0x44, 0x88, 0x9b, 0x68, 0x66, - 0x74, 0xee, 0xeb, 0xe4, 0xf6, 0x6b, 0x26, 0x63, 0x82, 0x54, 0xef, 0xfe, 0x16, 0x1e, 0xe9, 0xf5, - 0x06, 0xfd, 0x3d, 0x31, 0xf1, 0xff, 0xbf, 0x4c, 0x1b, 0xa7, 0x54, 0xef, 0xfd, 0x91, 0x92, 0x57, - 0xaf, 0x4e, 0x7d, 0xbc, 0x3a, 0xdd, 0x32, 0x1a, 0x2f, 0xcf, 0x2e, 0x2c, 0xe3, 0xfc, 0xc2, 0x32, - 0xbe, 0x5d, 0x58, 0xc6, 0xe7, 0x4b, 0xab, 0x70, 0x7e, 0x69, 0x15, 0xbe, 0x5e, 0x5a, 0x85, 0xd7, - 0xf5, 0x30, 0x92, 0xdd, 0x7e, 0x8b, 0x04, 0x2c, 0x76, 0x75, 0xd5, 0x07, 0x8c, 0x87, 0xb9, 0xed, - 0x0e, 0x1e, 0xbb, 0x87, 0x37, 0xff, 0x21, 0xf2, 0x28, 0x01, 0xd1, 0x2a, 0xab, 0xe7, 0xff, 0xe8, - 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0x33, 0x1a, 0x12, 0x42, 0xec, 0x04, 0x00, 0x00, + // 685 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0x4f, 0x4f, 0xdb, 0x4a, + 0x10, 0x8f, 0x5f, 0x42, 0x80, 0xcd, 0xe3, 0xcf, 0x5b, 0xde, 0x03, 0x13, 0x81, 0xcd, 0xb3, 0x5a, + 0x89, 0x52, 0x75, 0xdd, 0xa4, 0x42, 0x95, 0x38, 0x55, 0x41, 0xaa, 0x8a, 0x54, 0xa4, 0xc8, 0xa2, + 0x97, 0xaa, 0x12, 0x75, 0x9c, 0x89, 0x63, 0x35, 0xde, 0x75, 0x77, 0x37, 0x11, 0x5c, 0xaa, 0xaa, + 0x27, 0x8e, 0xfd, 0x08, 0x7c, 0x04, 0x3e, 0x40, 0x3f, 0x00, 0x47, 0x8e, 0x3d, 0x45, 0x15, 0x1c, + 0xe8, 0x99, 0x6b, 0x2f, 0x95, 0xd7, 0xeb, 0x90, 0xa0, 0xaa, 0x3d, 0x65, 0x66, 0x7e, 0xbf, 0x99, + 0xf1, 0xfc, 0x66, 0x36, 0x68, 0x8d, 0x42, 0x5f, 0x72, 0x46, 0x5d, 0xc9, 0x7d, 0x2a, 0x3a, 0xc0, + 0xdd, 0x41, 0xcd, 0x95, 0x47, 0x24, 0xe1, 0x4c, 0x32, 0xbc, 0xa8, 0x51, 0x92, 0xa3, 0x55, 0x2b, + 0x60, 0x22, 0x66, 0xc2, 0x6d, 0xf9, 0x02, 0xdc, 0x41, 0xad, 0x05, 0xd2, 0xaf, 0xb9, 0x01, 0x8b, + 0x68, 0x96, 0x51, 0x5d, 0xd1, 0x78, 0x2c, 0xc2, 0xb4, 0x52, 0x2c, 0x42, 0x0d, 0xfc, 0x1b, 0xb2, + 0x90, 0x29, 0xd3, 0x4d, 0x2d, 0x1d, 0x7d, 0x18, 0xb5, 0x02, 0xd7, 0x4f, 0x92, 0x5e, 0x14, 0xf8, + 0x32, 0x62, 0x54, 0x4c, 0x7e, 0x87, 0xb6, 0x35, 0xd9, 0x4e, 0xc9, 0x01, 0xe3, 0xe0, 0x06, 0xbd, + 0x08, 0xa8, 0x4c, 0x29, 0x99, 0xa5, 0x09, 0xeb, 0xf9, 0x30, 0x1d, 0x00, 0x0e, 0x9d, 0x3e, 0x6d, + 0x03, 0x4f, 0xed, 0x0c, 0x76, 0x7e, 0x14, 0x51, 0x65, 0x5f, 0x84, 0x07, 0xba, 0x2a, 0x7e, 0x8a, + 0x2a, 0x82, 0xf5, 0x79, 0x00, 0x87, 0x09, 0xe3, 0xd2, 0x34, 0x36, 0x8c, 0xcd, 0xd9, 0xc6, 0xf2, + 0xcd, 0xd0, 0xc6, 0xc7, 0x7e, 0xdc, 0xdb, 0x71, 0xc6, 0x40, 0xc7, 0x43, 0x99, 0xd7, 0x64, 0x5c, + 0xe2, 0x67, 0x68, 0x5e, 0x63, 0x41, 0xd7, 0xa7, 0x14, 0x7a, 0xe6, 0x5f, 0x2a, 0x77, 0xf5, 0x66, + 0x68, 0xff, 0x37, 0x91, 0xab, 0x71, 0xc7, 0x9b, 0xcb, 0x02, 0xbb, 0x99, 0x8f, 0xb7, 0xd1, 0x94, + 0x64, 0xef, 0x80, 0x9a, 0xc5, 0x0d, 0x63, 0xb3, 0x52, 0x5f, 0x25, 0x99, 0x6c, 0x24, 0x95, 0x95, + 0x68, 0x59, 0xc9, 0x2e, 0x8b, 0x68, 0xa3, 0x74, 0x3e, 0xb4, 0x0b, 0x5e, 0xc6, 0xc6, 0xcb, 0xa8, + 0x2c, 0x20, 0x9d, 0xca, 0x2c, 0xa5, 0x0d, 0x3d, 0xed, 0xe1, 0x2a, 0x9a, 0xe1, 0x10, 0x40, 0x34, + 0x00, 0x6e, 0x4e, 0x29, 0x64, 0xe4, 0xe3, 0xb7, 0x68, 0x5e, 0x46, 0x31, 0xb0, 0xbe, 0x3c, 0xec, + 0x42, 0x14, 0x76, 0xa5, 0x59, 0x56, 0x3d, 0xab, 0x24, 0x6a, 0x05, 0x24, 0x95, 0x93, 0x68, 0x11, + 0x07, 0x35, 0xf2, 0x42, 0x31, 0x1a, 0xeb, 0x69, 0xd3, 0xdb, 0x61, 0x26, 0xf3, 0x1d, 0x6f, 0x4e, + 0x07, 0x32, 0x36, 0xde, 0x43, 0xff, 0xe4, 0x8c, 0xf4, 0x57, 0x48, 0x3f, 0x4e, 0xcc, 0xe9, 0x0d, + 0x63, 0xb3, 0xd4, 0x58, 0xbb, 0x19, 0xda, 0xe6, 0x64, 0x91, 0x11, 0xc5, 0xf1, 0x16, 0x75, 0xec, + 0x20, 0x0f, 0x61, 0x8c, 0x4a, 0x31, 0xc4, 0xcc, 0x9c, 0x51, 0x43, 0x28, 0x1b, 0x3f, 0x46, 0xc5, + 0x0e, 0x80, 0x39, 0xab, 0xbe, 0xda, 0x24, 0xf9, 0x49, 0x8e, 0xed, 0x98, 0x3c, 0x07, 0xd0, 0x42, + 0xa5, 0xd4, 0x9d, 0xa5, 0x93, 0x53, 0xbb, 0xf0, 0xfd, 0xd4, 0x2e, 0x7c, 0xba, 0x3e, 0xdb, 0xd2, + 0x1a, 0x39, 0x4d, 0xb4, 0x34, 0xb6, 0x7c, 0x0f, 0x44, 0xc2, 0xa8, 0x00, 0x6c, 0xa3, 0x8a, 0x80, + 0xf7, 0x7d, 0xa0, 0x01, 0x1c, 0x46, 0x6d, 0x75, 0x04, 0x25, 0x0f, 0xe5, 0xa1, 0xbd, 0x36, 0x36, + 0xd1, 0xf4, 0xc4, 0x96, 0xbd, 0xdc, 0x75, 0x3e, 0xa0, 0x85, 0x7d, 0x11, 0xbe, 0x4a, 0xda, 0xbe, + 0x84, 0xa6, 0xcf, 0xfd, 0x58, 0xa8, 0x05, 0x45, 0x21, 0x05, 0x9e, 0x5d, 0x93, 0xa7, 0x3d, 0xdc, + 0x40, 0xe5, 0x44, 0x31, 0x54, 0x8d, 0x4a, 0xfd, 0x9e, 0x12, 0x7f, 0xfc, 0xf0, 0x47, 0x4f, 0x2c, + 0x5d, 0x43, 0x56, 0x4d, 0x8f, 0xa4, 0x33, 0x77, 0x16, 0x4e, 0x46, 0x13, 0xa9, 0xa2, 0xce, 0x2a, + 0x5a, 0xb9, 0xd3, 0x3f, 0x9f, 0xaa, 0xfe, 0xc5, 0x40, 0xc5, 0x7d, 0x11, 0xe2, 0x26, 0x9a, 0x19, + 0x9d, 0xfb, 0x3a, 0xb9, 0xfb, 0x9a, 0xc9, 0x98, 0x20, 0xd5, 0xfb, 0xbf, 0x85, 0x47, 0x7a, 0xbd, + 0x41, 0x7f, 0x4f, 0x4c, 0xfc, 0xff, 0x2f, 0xd3, 0xc6, 0x29, 0xd5, 0x07, 0x7f, 0xa4, 0xe4, 0xd5, + 0xab, 0x53, 0x1f, 0xaf, 0xcf, 0xb6, 0x8c, 0xc6, 0xcb, 0xf3, 0x4b, 0xcb, 0xb8, 0xb8, 0xb4, 0x8c, + 0x6f, 0x97, 0x96, 0xf1, 0xf9, 0xca, 0x2a, 0x5c, 0x5c, 0x59, 0x85, 0xaf, 0x57, 0x56, 0xe1, 0x75, + 0x3d, 0x8c, 0x64, 0xb7, 0xdf, 0x22, 0x01, 0x8b, 0x5d, 0x5d, 0xf5, 0x11, 0xe3, 0x61, 0x6e, 0xbb, + 0x83, 0x6d, 0xf7, 0xe8, 0xf6, 0x3f, 0x44, 0x1e, 0x27, 0x20, 0x5a, 0x65, 0xf5, 0xfc, 0x9f, 0xfc, + 0x0c, 0x00, 0x00, 0xff, 0xff, 0xa4, 0xbc, 0x0f, 0xa5, 0xec, 0x04, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. From ea9906b70dea7d76e99ac49913a3ab7b760cbd20 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Mon, 23 Sep 2024 09:49:34 -0300 Subject: [PATCH 090/127] init upgrade handler v5 --- app/upgrades/v5.0.0/constants.go | 19 +++++++++++++++++++ app/upgrades/v5.0.0/upgrades.go | 27 +++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 app/upgrades/v5.0.0/constants.go create mode 100644 app/upgrades/v5.0.0/upgrades.go diff --git a/app/upgrades/v5.0.0/constants.go b/app/upgrades/v5.0.0/constants.go new file mode 100644 index 000000000..436b2baf7 --- /dev/null +++ b/app/upgrades/v5.0.0/constants.go @@ -0,0 +1,19 @@ +package v500 + +import ( + storetypes "cosmossdk.io/store/types" + "github.com/neutron-org/neutron/v5/app/upgrades" +) + +const ( + // UpgradeName defines the on-chain upgrade name. + UpgradeName = "v4.0.1" +) + +var Upgrade = upgrades.Upgrade{ + UpgradeName: UpgradeName, + CreateUpgradeHandler: CreateUpgradeHandler, + StoreUpgrades: storetypes.StoreUpgrades{ + Added: []string{}, + }, +} diff --git a/app/upgrades/v5.0.0/upgrades.go b/app/upgrades/v5.0.0/upgrades.go new file mode 100644 index 000000000..aa4edb02e --- /dev/null +++ b/app/upgrades/v5.0.0/upgrades.go @@ -0,0 +1,27 @@ +package v500 + +import ( + "context" + "fmt" + + upgradetypes "cosmossdk.io/x/upgrade/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + "github.com/neutron-org/neutron/v5/app/upgrades" +) + +func CreateUpgradeHandler( + _ *module.Manager, + _ module.Configurator, + _ *upgrades.UpgradeKeepers, + _ upgrades.StoreKeys, + _ codec.Codec, +) upgradetypes.UpgradeHandler { + return func(c context.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + ctx := sdk.UnwrapSDKContext(c) + + ctx.Logger().Info(fmt.Sprintf("Migration {%s} applied", UpgradeName)) + return vm, nil + } +} From fd5f7c751d17b367bff1212733d928a87407564d Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Mon, 23 Sep 2024 10:23:44 -0300 Subject: [PATCH 091/127] pause dex via params --- app/upgrades/v5.0.0/upgrades.go | 30 +++++++++++++++++++++++++++--- x/dex/keeper/msg_server.go | 10 ++++++++-- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/app/upgrades/v5.0.0/upgrades.go b/app/upgrades/v5.0.0/upgrades.go index aa4edb02e..89179f001 100644 --- a/app/upgrades/v5.0.0/upgrades.go +++ b/app/upgrades/v5.0.0/upgrades.go @@ -4,24 +4,48 @@ import ( "context" "fmt" + "cosmossdk.io/errors" upgradetypes "cosmossdk.io/x/upgrade/types" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" "github.com/neutron-org/neutron/v5/app/upgrades" + dexkeeper "github.com/neutron-org/neutron/v5/x/dex/keeper" ) func CreateUpgradeHandler( - _ *module.Manager, - _ module.Configurator, - _ *upgrades.UpgradeKeepers, + mm *module.Manager, + configurator module.Configurator, + keepers *upgrades.UpgradeKeepers, _ upgrades.StoreKeys, _ codec.Codec, ) upgradetypes.UpgradeHandler { return func(c context.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { ctx := sdk.UnwrapSDKContext(c) + ctx.Logger().Info("Starting module migrations...") + vm, err := mm.RunMigrations(ctx, configurator, vm) + if err != nil { + return vm, err + } + + err = setDexParams(ctx, keepers.DexKeeper) + if err != nil { + return nil, err + } + ctx.Logger().Info(fmt.Sprintf("Migration {%s} applied", UpgradeName)) return vm, nil } } + +func setDexParams(ctx sdk.Context, dexKeeper *dexkeeper.Keeper) error { + params := dexKeeper.GetParams(ctx) + params.Paused = true + err := dexKeeper.SetParams(ctx, params) + if err != nil { + return errors.Wrap(err, "failed to set dex params") + } + + return nil +} diff --git a/x/dex/keeper/msg_server.go b/x/dex/keeper/msg_server.go index f83600480..acc393d13 100644 --- a/x/dex/keeper/msg_server.go +++ b/x/dex/keeper/msg_server.go @@ -259,6 +259,12 @@ func (k MsgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParam return &types.MsgUpdateParamsResponse{}, nil } -func (k MsgServer) AssertNotPaused(_ context.Context) error { - return types.ErrDexPaused +func (k MsgServer) AssertNotPaused(goCtx context.Context) error { + ctx := sdk.UnwrapSDKContext(goCtx) + paused := k.GetParams(ctx).Paused + + if paused { + return types.ErrDexPaused + } + return nil } From fc24a82689c134677d63513817304f4ab336d4d4 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Mon, 23 Sep 2024 11:12:56 -0300 Subject: [PATCH 092/127] rm upgrade v4 --- app/app.go | 4 +- app/upgrades/types.go | 2 + app/upgrades/v4.0.1/constants.go | 32 ------ app/upgrades/v4.0.1/upgrades.go | 27 ----- app/upgrades/v4.0.1/upgrades_test.go | 145 --------------------------- 5 files changed, 4 insertions(+), 206 deletions(-) delete mode 100644 app/upgrades/v4.0.1/constants.go delete mode 100644 app/upgrades/v4.0.1/upgrades.go delete mode 100644 app/upgrades/v4.0.1/upgrades_test.go diff --git a/app/app.go b/app/app.go index bc9d6199a..f724e296d 100644 --- a/app/app.go +++ b/app/app.go @@ -36,7 +36,7 @@ import ( oracleclient "github.com/skip-mev/slinky/service/clients/oracle" servicemetrics "github.com/skip-mev/slinky/service/metrics" - v401 "github.com/neutron-org/neutron/v5/app/upgrades/v4.0.1" + v500 "github.com/neutron-org/neutron/v5/app/upgrades/v5.0.0" "github.com/neutron-org/neutron/v5/x/globalfee" globalfeetypes "github.com/neutron-org/neutron/v5/x/globalfee/types" @@ -221,7 +221,7 @@ const ( ) var ( - Upgrades = []upgrades.Upgrade{v401.Upgrade} + Upgrades = []upgrades.Upgrade{v500.Upgrade} // DefaultNodeHome default home directories for the application daemon DefaultNodeHome string diff --git a/app/upgrades/types.go b/app/upgrades/types.go index 293f71c8e..51e44ef13 100644 --- a/app/upgrades/types.go +++ b/app/upgrades/types.go @@ -13,6 +13,7 @@ import ( slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper" capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" ccvconsumerkeeper "github.com/cosmos/interchain-security/v5/x/ccv/consumer/keeper" + dexkeeper "github.com/neutron-org/neutron/v5/x/dex/keeper" auctionkeeper "github.com/skip-mev/block-sdk/v2/x/auction/keeper" feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper" marketmapkeeper "github.com/skip-mev/slinky/x/marketmap/keeper" @@ -64,6 +65,7 @@ type UpgradeKeepers struct { MarketmapKeeper *marketmapkeeper.Keeper FeeMarketKeeper *feemarketkeeper.Keeper DynamicfeesKeeper *dynamicfeeskeeper.Keeper + DexKeeper *dexkeeper.Keeper // subspaces GlobalFeeSubspace paramtypes.Subspace CcvConsumerSubspace paramtypes.Subspace diff --git a/app/upgrades/v4.0.1/constants.go b/app/upgrades/v4.0.1/constants.go deleted file mode 100644 index 3e774e6aa..000000000 --- a/app/upgrades/v4.0.1/constants.go +++ /dev/null @@ -1,32 +0,0 @@ -package v400 - -import ( - storetypes "cosmossdk.io/store/types" - feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" - marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types" - oracletypes "github.com/skip-mev/slinky/x/oracle/types" - - dynamicfeestypes "github.com/neutron-org/neutron/v5/x/dynamicfees/types" - - "github.com/neutron-org/neutron/v5/app/upgrades" - globalfeetypes "github.com/neutron-org/neutron/v5/x/globalfee/types" -) - -const ( - // UpgradeName defines the on-chain upgrade name. - UpgradeName = "v5.0.0" -) - -var Upgrade = upgrades.Upgrade{ - UpgradeName: UpgradeName, - CreateUpgradeHandler: CreateUpgradeHandler, - StoreUpgrades: storetypes.StoreUpgrades{ - Added: []string{ - globalfeetypes.ModuleName, - marketmaptypes.ModuleName, - oracletypes.ModuleName, - feemarkettypes.ModuleName, - dynamicfeestypes.ModuleName, - }, - }, -} diff --git a/app/upgrades/v4.0.1/upgrades.go b/app/upgrades/v4.0.1/upgrades.go deleted file mode 100644 index 8baddc48f..000000000 --- a/app/upgrades/v4.0.1/upgrades.go +++ /dev/null @@ -1,27 +0,0 @@ -package v400 - -import ( - "context" - "fmt" - - upgradetypes "cosmossdk.io/x/upgrade/types" - "github.com/cosmos/cosmos-sdk/codec" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - "github.com/neutron-org/neutron/v5/app/upgrades" -) - -func CreateUpgradeHandler( - _ *module.Manager, - _ module.Configurator, - _ *upgrades.UpgradeKeepers, - _ upgrades.StoreKeys, - _ codec.Codec, -) upgradetypes.UpgradeHandler { - return func(c context.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { - ctx := sdk.UnwrapSDKContext(c) - - ctx.Logger().Info(fmt.Sprintf("Migration {%s} applied", UpgradeName)) - return vm, nil - } -} diff --git a/app/upgrades/v4.0.1/upgrades_test.go b/app/upgrades/v4.0.1/upgrades_test.go deleted file mode 100644 index e52f4e299..000000000 --- a/app/upgrades/v4.0.1/upgrades_test.go +++ /dev/null @@ -1,145 +0,0 @@ -package v400_test - -import ( - "sort" - "testing" - - "github.com/skip-mev/slinky/cmd/constants/marketmaps" - marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types" - - slinkytypes "github.com/skip-mev/slinky/pkg/types" - - upgradetypes "cosmossdk.io/x/upgrade/types" - comettypes "github.com/cometbft/cometbft/proto/tendermint/types" - "github.com/cosmos/cosmos-sdk/x/consensus/types" - "github.com/stretchr/testify/require" - - "github.com/stretchr/testify/suite" - - v400 "github.com/neutron-org/neutron/v5/app/upgrades/v4.0.1" - "github.com/neutron-org/neutron/v5/testutil" -) - -type UpgradeTestSuite struct { - testutil.IBCConnectionTestSuite -} - -func TestKeeperTestSuite(t *testing.T) { - suite.Run(t, new(UpgradeTestSuite)) -} - -func (suite *UpgradeTestSuite) SetupTest() { - suite.IBCConnectionTestSuite.SetupTest() -} - -func (suite *UpgradeTestSuite) TestOracleUpgrade() { - app := suite.GetNeutronZoneApp(suite.ChainA) - ctx := suite.ChainA.GetContext() - t := suite.T() - - oldParams, err := app.ConsensusParamsKeeper.Params(ctx, &types.QueryParamsRequest{}) - suite.Require().NoError(err) - // it is automatically tracked in upgrade handler, we need to set it manually for tests - oldParams.Params.Version = &comettypes.VersionParams{App: 0} - // we need to properly set consensus params for tests or we get a panic - suite.Require().NoError(app.ConsensusParamsKeeper.ParamsStore.Set(ctx, *oldParams.Params)) - - markets := marketmaps.CoreMarketMap.Markets - suite.Require().NoError(err) - - upgrade := upgradetypes.Plan{ - Name: v400.UpgradeName, - Info: "some text here", - Height: 100, - } - require.NoError(t, app.UpgradeKeeper.ApplyUpgrade(ctx, upgrade)) - - params, err := app.MarketMapKeeper.GetParams(ctx) - suite.Require().NoError(err) - suite.Require().Equal(params.MarketAuthorities[0], "neutron1hxskfdxpp5hqgtjj6am6nkjefhfzj359x0ar3z") - suite.Require().Equal(params.MarketAuthorities[1], "neutron1ua63s43u2p4v38pxhcxmps0tj2gudyw2hfeetz") - suite.Require().Equal(params.Admin, "neutron1hxskfdxpp5hqgtjj6am6nkjefhfzj359x0ar3z") - - // check that the market map was properly set - mm, err := app.MarketMapKeeper.GetAllMarkets(ctx) - gotMM := marketmaptypes.MarketMap{Markets: mm} - suite.Require().NoError(err) - suite.Require().True(marketmaps.CoreMarketMap.Equal(gotMM)) - - numCps, err := app.OracleKeeper.GetNumCurrencyPairs(ctx) - suite.Require().NoError(err) - suite.Require().Equal(numCps, uint64(len(markets))) - - // check that all currency pairs have been initialized in the oracle module - tickers := make([]slinkytypes.CurrencyPair, 0, len(markets)) - for _, market := range markets { - decimals, err := app.OracleKeeper.GetDecimalsForCurrencyPair(ctx, market.Ticker.CurrencyPair) - suite.Require().NoError(err) - suite.Require().Equal(market.Ticker.Decimals, decimals) - - price, err := app.OracleKeeper.GetPriceWithNonceForCurrencyPair(ctx, market.Ticker.CurrencyPair) - suite.Require().NoError(err) - suite.Require().Equal(uint64(0), price.Nonce()) // no nonce because no updates yet - suite.Require().Equal(uint64(0), price.BlockHeight) // no block height because no price written yet - - suite.Require().True(market.Ticker.Enabled) - - tickers = append(tickers, market.Ticker.CurrencyPair) - } - - // check IDs for inserted currency pairs, sort currency-pairs alphabetically - sort.Slice(tickers, func(i, j int) bool { - return tickers[i].String() < tickers[j].String() - }) - - for i, cp := range tickers { - id, found := app.OracleKeeper.GetIDForCurrencyPair(ctx, cp) - suite.Require().True(found) - suite.Require().Equal(uint64(i), id) - } -} - -func (suite *UpgradeTestSuite) TestEnableVoteExtensionsUpgrade() { - app := suite.GetNeutronZoneApp(suite.ChainA) - ctx := suite.ChainA.GetContext() - t := suite.T() - - oldParams, err := app.ConsensusParamsKeeper.Params(ctx, &types.QueryParamsRequest{}) - suite.Require().NoError(err) - - // VoteExtensionsEnableHeight must be updated after the upgrade on upgrade height - // but the rest of params must be the same - oldParams.Params.Abci = &comettypes.ABCIParams{VoteExtensionsEnableHeight: ctx.BlockHeight() + 4} - // it is automatically tracked in upgrade handler, we need to set it manually for tests - oldParams.Params.Version = &comettypes.VersionParams{App: 0} - // we need to properly set consensus params for tests or we get a panic - suite.Require().NoError(app.ConsensusParamsKeeper.ParamsStore.Set(ctx, *oldParams.Params)) - - upgrade := upgradetypes.Plan{ - Name: v400.UpgradeName, - Info: "some text here", - Height: ctx.BlockHeight(), - } - require.NoError(t, app.UpgradeKeeper.ApplyUpgrade(ctx, upgrade)) - - newParams, err := app.ConsensusParamsKeeper.Params(ctx, &types.QueryParamsRequest{}) - suite.Require().NoError(err) - - suite.Require().Equal(oldParams, newParams) -} - -func (suite *UpgradeTestSuite) TestDynamicFeesUpgrade() { - app := suite.GetNeutronZoneApp(suite.ChainA) - ctx := suite.ChainA.GetContext() - t := suite.T() - - upgrade := upgradetypes.Plan{ - Name: v400.UpgradeName, - Info: "some text here", - Height: 100, - } - require.NoError(t, app.UpgradeKeeper.ApplyUpgrade(ctx, upgrade)) - - params := app.DynamicFeesKeeper.GetParams(ctx) - suite.Require().Equal(params.NtrnPrices, v400.NtrnPrices) -} From 078ef5f2af8b52b42382b71ba3f48526ded3a46b Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Mon, 23 Sep 2024 16:50:53 -0400 Subject: [PATCH 093/127] Use Token0,Token1,TokenIn for TrancheUserUpdate --- x/dex/types/events.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/x/dex/types/events.go b/x/dex/types/events.go index 1ebaef969..9b616e26f 100644 --- a/x/dex/types/events.go +++ b/x/dex/types/events.go @@ -423,16 +423,18 @@ func GetEventsDecTotalPoolReserves(pairID PairID) sdk.Events { } func TrancheUserUpdateEvent(trancheUser LimitOrderTrancheUser) sdk.Event { + pairID := trancheUser.TradePairId.MustPairID() attrs := []sdk.Attribute{ sdk.NewAttribute(sdk.AttributeKeyModule, "dex"), sdk.NewAttribute(sdk.AttributeKeyAction, TrancheUserUpdateEventKey), sdk.NewAttribute(AttributeTrancheKey, trancheUser.TrancheKey), sdk.NewAttribute(AttributeCreator, trancheUser.Address), sdk.NewAttribute(AttributeTickIndex, strconv.Itoa(int(trancheUser.TickIndexTakerToMaker))), - sdk.NewAttribute(AttributeMakerDenom, trancheUser.TradePairId.MakerDenom), - sdk.NewAttribute(AttributeTakerDenom, trancheUser.TradePairId.TakerDenom), + sdk.NewAttribute(AttributeToken0, pairID.Token0), + sdk.NewAttribute(AttributeToken1, pairID.Token1), + sdk.NewAttribute(AttributeTokenIn, trancheUser.TradePairId.MakerDenom), sdk.NewAttribute(AttributeSharesOwned, trancheUser.SharesOwned.String()), sdk.NewAttribute(AttributeSharesWithdrawn, trancheUser.SharesWithdrawn.String()), } - return sdk.NewEvent(EventTypeTickUpdate, attrs...) + return sdk.NewEvent(EventTypeTrancheUserUpdate, attrs...) } From 1c11522687fcbfb48918a4be08f1d9575eab0d62 Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Mon, 23 Sep 2024 17:07:16 -0400 Subject: [PATCH 094/127] Add ErrNoLiquidity --- x/dex/keeper/grpc_query_estimate_multi_hop_swap_test.go | 2 +- x/dex/keeper/integration_multihopswap_test.go | 2 +- x/dex/keeper/integration_placelimitorder_test.go | 4 ++-- x/dex/keeper/liquidity.go | 2 +- x/dex/keeper/msg_server.go | 2 +- x/dex/keeper/multihop_swap.go | 2 +- x/dex/types/errors.go | 5 +++++ 7 files changed, 12 insertions(+), 7 deletions(-) diff --git a/x/dex/keeper/grpc_query_estimate_multi_hop_swap_test.go b/x/dex/keeper/grpc_query_estimate_multi_hop_swap_test.go index 88312e2ef..611ed29b2 100644 --- a/x/dex/keeper/grpc_query_estimate_multi_hop_swap_test.go +++ b/x/dex/keeper/grpc_query_estimate_multi_hop_swap_test.go @@ -46,7 +46,7 @@ func (s *DexTestSuite) TestEstimateMultiHopSwapInsufficientLiquiditySingleRoute( // THEN estimate multihopswap fails route := [][]string{{"TokenA", "TokenB", "TokenC", "TokenD"}} s.aliceEstimatesMultiHopSwapFails( - types.ErrLimitPriceNotSatisfied, + types.ErrNoLiquidity, route, 100, math_utils.MustNewPrecDecFromStr("0.9"), diff --git a/x/dex/keeper/integration_multihopswap_test.go b/x/dex/keeper/integration_multihopswap_test.go index 29ffdc6f0..081d6c07d 100644 --- a/x/dex/keeper/integration_multihopswap_test.go +++ b/x/dex/keeper/integration_multihopswap_test.go @@ -195,7 +195,7 @@ func (s *DexTestSuite) TestMultiHopSwapInsufficientLiquiditySingleRoute() { // THEN alice multihopswap fails route := [][]string{{"TokenA", "TokenB", "TokenC", "TokenD"}} s.aliceMultiHopSwapFails( - types.ErrLimitPriceNotSatisfied, + types.ErrNoLiquidity, route, 100, math_utils.MustNewPrecDecFromStr("0.9"), diff --git a/x/dex/keeper/integration_placelimitorder_test.go b/x/dex/keeper/integration_placelimitorder_test.go index 37c822973..120eae12a 100644 --- a/x/dex/keeper/integration_placelimitorder_test.go +++ b/x/dex/keeper/integration_placelimitorder_test.go @@ -528,7 +528,7 @@ func (s *DexTestSuite) TestPlaceLimitOrderIoCNoLiq() { s.fundAliceBalances(10, 0) // GIVEN no liquidity // Thenalice IoC limitOrder fails - s.assertAliceLimitSellFails(types.ErrLimitPriceNotSatisfied, "TokenA", 0, 10, types.LimitOrderType_IMMEDIATE_OR_CANCEL) + s.assertAliceLimitSellFails(types.ErrNoLiquidity, "TokenA", 0, 10, types.LimitOrderType_IMMEDIATE_OR_CANCEL) } func (s *DexTestSuite) TestPlaceLimitOrderIoCWithLPFills() { @@ -571,7 +571,7 @@ func (s *DexTestSuite) TestPlaceLimitOrderIoCWithLPNoFill() { // GIVEN LP of 5 tokenB at tick -1 s.bobDeposits(NewDeposit(0, 5, -1, 1)) // THEN alice IoC limitOrder for 10 tokenA below current 0To1 price fails - s.assertAliceLimitSellFails(types.ErrLimitPriceNotSatisfied, "TokenA", -1, 10, types.LimitOrderType_IMMEDIATE_OR_CANCEL) + s.assertAliceLimitSellFails(types.ErrNoLiquidity, "TokenA", -1, 10, types.LimitOrderType_IMMEDIATE_OR_CANCEL) } func (s *DexTestSuite) TestPlaceLimitOrderIoCTooSmallFails() { diff --git a/x/dex/keeper/liquidity.go b/x/dex/keeper/liquidity.go index 145657505..f1f7ae66c 100644 --- a/x/dex/keeper/liquidity.go +++ b/x/dex/keeper/liquidity.go @@ -145,7 +145,7 @@ func (k Keeper) TakerLimitOrderSwap( } if totalInCoin.Amount.IsZero() { - return sdk.Coin{}, sdk.Coin{}, types.ErrLimitPriceNotSatisfied + return sdk.Coin{}, sdk.Coin{}, types.ErrNoLiquidity } truePrice := math_utils.NewPrecDecFromInt(totalOutCoin.Amount).QuoInt(totalInCoin.Amount) diff --git a/x/dex/keeper/msg_server.go b/x/dex/keeper/msg_server.go index 2b3bca666..671b70ab4 100644 --- a/x/dex/keeper/msg_server.go +++ b/x/dex/keeper/msg_server.go @@ -260,5 +260,5 @@ func (k MsgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParam } func (k MsgServer) AssertNotPaused(_ context.Context) error { - return types.ErrDexPaused + return nil } diff --git a/x/dex/keeper/multihop_swap.go b/x/dex/keeper/multihop_swap.go index ab1ad4798..295d647e7 100644 --- a/x/dex/keeper/multihop_swap.go +++ b/x/dex/keeper/multihop_swap.go @@ -284,7 +284,7 @@ func (k Keeper) SwapFullAmountIn( return sdk.Coin{}, sdk.Coin{}, err } if !orderFilled { - return sdk.Coin{}, sdk.Coin{}, types.ErrLimitPriceNotSatisfied + return sdk.Coin{}, sdk.Coin{}, types.ErrNoLiquidity } dust = sdk.Coin.Sub(sdk.NewCoin(swapAmountTakerDenom.Denom, amountIn), swapAmountTakerDenom) diff --git a/x/dex/types/errors.go b/x/dex/types/errors.go index 69211ca8f..2c639904b 100644 --- a/x/dex/types/errors.go +++ b/x/dex/types/errors.go @@ -224,4 +224,9 @@ var ( 1163, "Cannot convert price to int64 tick value", ) + ErrNoLiquidity = sdkerrors.Register( + ModuleName, + 1164, + "No tradable liquidity below LimitSellPrice", + ) ) From 5e10e83db62304ff891f467ce84c6ca89884b87f Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 24 Sep 2024 09:32:14 -0300 Subject: [PATCH 095/127] aftermerge clean --- app/app.go | 1 - app/upgrades/v5.0.0/constants.go | 2 +- app/upgrades/v5.0.0/upgrades.go | 1 - app/upgrades/v5.0.0/upgrades_test.go | 65 ---------------------------- 4 files changed, 1 insertion(+), 68 deletions(-) delete mode 100644 app/upgrades/v5.0.0/upgrades_test.go diff --git a/app/app.go b/app/app.go index e2ddf2123..464d5a62c 100644 --- a/app/app.go +++ b/app/app.go @@ -37,7 +37,6 @@ import ( servicemetrics "github.com/skip-mev/slinky/service/metrics" v500 "github.com/neutron-org/neutron/v5/app/upgrades/v5.0.0" - v500 "github.com/neutron-org/neutron/v4/app/upgrades/v5.0.0" "github.com/neutron-org/neutron/v5/x/globalfee" globalfeetypes "github.com/neutron-org/neutron/v5/x/globalfee/types" diff --git a/app/upgrades/v5.0.0/constants.go b/app/upgrades/v5.0.0/constants.go index 436b2baf7..dcc1aff40 100644 --- a/app/upgrades/v5.0.0/constants.go +++ b/app/upgrades/v5.0.0/constants.go @@ -7,7 +7,7 @@ import ( const ( // UpgradeName defines the on-chain upgrade name. - UpgradeName = "v4.0.1" + UpgradeName = "v5.0.0" ) var Upgrade = upgrades.Upgrade{ diff --git a/app/upgrades/v5.0.0/upgrades.go b/app/upgrades/v5.0.0/upgrades.go index d3c0d85ce..143db2b7b 100644 --- a/app/upgrades/v5.0.0/upgrades.go +++ b/app/upgrades/v5.0.0/upgrades.go @@ -4,7 +4,6 @@ import ( "context" "fmt" - "cosmossdk.io/errors" upgradetypes "cosmossdk.io/x/upgrade/types" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/app/upgrades/v5.0.0/upgrades_test.go b/app/upgrades/v5.0.0/upgrades_test.go deleted file mode 100644 index 0a5d07207..000000000 --- a/app/upgrades/v5.0.0/upgrades_test.go +++ /dev/null @@ -1,65 +0,0 @@ -package v400_test - -import ( - "testing" - - "cosmossdk.io/math" - upgradetypes "cosmossdk.io/x/upgrade/types" - "github.com/stretchr/testify/suite" - - v500 "github.com/neutron-org/neutron/v4/app/upgrades/v5.0.0" - "github.com/neutron-org/neutron/v4/testutil/common/sample" - - "github.com/neutron-org/neutron/v4/testutil" - dexkeeper "github.com/neutron-org/neutron/v4/x/dex/keeper" - dextypes "github.com/neutron-org/neutron/v4/x/dex/types" -) - -type UpgradeTestSuite struct { - testutil.IBCConnectionTestSuite -} - -func TestKeeperTestSuite(t *testing.T) { - suite.Run(t, new(UpgradeTestSuite)) -} - -func (suite *UpgradeTestSuite) SetupTest() { - suite.IBCConnectionTestSuite.SetupTest() -} - -func (suite *UpgradeTestSuite) TestUpgradeDexPause() { - var ( - app = suite.GetNeutronZoneApp(suite.ChainA) - ctx = suite.ChainA.GetContext().WithChainID("neutron-1") - msgServer = dexkeeper.NewMsgServerImpl(app.DexKeeper) - ) - - params := app.DexKeeper.GetParams(ctx) - - suite.False(params.Paused) - - upgrade := upgradetypes.Plan{ - Name: v500.UpgradeName, - Info: "some text here", - Height: 100, - } - suite.NoError(app.UpgradeKeeper.ApplyUpgrade(ctx, upgrade)) - - params = app.DexKeeper.GetParams(ctx) - - suite.True(params.Paused) - - _, err := msgServer.Deposit(ctx, &dextypes.MsgDeposit{ - Creator: sample.AccAddress(), - Receiver: sample.AccAddress(), - TokenA: "TokenA", - TokenB: "TokenB", - TickIndexesAToB: []int64{1}, - Fees: []uint64{1}, - AmountsA: []math.Int{math.OneInt()}, - AmountsB: []math.Int{math.ZeroInt()}, - Options: []*dextypes.DepositOptions{{}}, - }) - - suite.ErrorIs(err, dextypes.ErrDexPaused) -} From 18c5e3edbfe3c4f7ac1a2aa345f533e04645e6b6 Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Tue, 24 Sep 2024 11:45:15 -0400 Subject: [PATCH 096/127] fix test --- x/dex/keeper/grpc_query_simulate_cancel_limit_order_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/dex/keeper/grpc_query_simulate_cancel_limit_order_test.go b/x/dex/keeper/grpc_query_simulate_cancel_limit_order_test.go index c7144b9c1..0f45403b3 100644 --- a/x/dex/keeper/grpc_query_simulate_cancel_limit_order_test.go +++ b/x/dex/keeper/grpc_query_simulate_cancel_limit_order_test.go @@ -47,6 +47,6 @@ func (s *DexTestSuite) TestSimulateCancelLimitOrderFails() { } resp, err := s.App.DexKeeper.SimulateCancelLimitOrder(s.Ctx, req) - s.ErrorIs(err, types.ErrActiveLimitOrderNotFound) + s.ErrorIs(err, types.ErrValidLimitOrderTrancheNotFound) s.Nil(resp) } From 10a548a3b0c65656497a2b234a0a6da2c07f915d Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Tue, 24 Sep 2024 11:56:48 -0400 Subject: [PATCH 097/127] fix merge --- x/dex/keeper/cancel_limit_order.go | 4 ++-- x/dex/keeper/withdraw_filled_limit_order.go | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/x/dex/keeper/cancel_limit_order.go b/x/dex/keeper/cancel_limit_order.go index 24142db0e..967ff5602 100644 --- a/x/dex/keeper/cancel_limit_order.go +++ b/x/dex/keeper/cancel_limit_order.go @@ -42,8 +42,8 @@ func (k Keeper) CancelLimitOrderCore( callerAddr, pairID.Token0, pairID.Token1, - tradePairID.MakerDenom, - tradePairID.TakerDenom, + makerDenom, + takerDenom, takerCoinOut.Amount, makerCoinOut.Amount, trancheKey, diff --git a/x/dex/keeper/withdraw_filled_limit_order.go b/x/dex/keeper/withdraw_filled_limit_order.go index 536c7d38f..40ff3c6ec 100644 --- a/x/dex/keeper/withdraw_filled_limit_order.go +++ b/x/dex/keeper/withdraw_filled_limit_order.go @@ -39,10 +39,10 @@ func (k Keeper) WithdrawFilledLimitOrderCore( callerAddr, pairID.Token0, pairID.Token1, - tradePairID.MakerDenom, - tradePairID.TakerDenom, - amountOutTokenOut, - remainingTokenIn, + makerDenom, + takerDenom, + takerCoinOut.Amount, + makerCoinOut.Amount, trancheKey, )) From 1746fc98d636c81abf5e50be94803b0036ab86f0 Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Wed, 25 Sep 2024 14:44:29 +0300 Subject: [PATCH 098/127] swagger --- docs/static/swagger.yaml | 3962 ++++++++++++++++++++++++-------------- 1 file changed, 2563 insertions(+), 1399 deletions(-) diff --git a/docs/static/swagger.yaml b/docs/static/swagger.yaml index 96816efe0..cfc211971 100644 --- a/docs/static/swagger.yaml +++ b/docs/static/swagger.yaml @@ -15476,6 +15476,39 @@ definitions: format: uint64 type: string type: object + neutron.contractmanager.QueryFailureResponse: + description: QueryFailureResponse is response type for the Query/Failure RPC method. + properties: + failure: + properties: + address: + title: Address of the failed contract + type: string + error: + title: >- + Redacted error response of the sudo call. Full error is emitted as + an event + type: string + id: + format: uint64 + title: Id of the failure under specific address + type: string + sudo_payload: + format: byte + title: Serialized MessageSudoCallback with Packet and Ack(if exists) + type: string + title: >- + Failure message contains information about ACK failures and can be + used to + + replay ACK in case of requirement. + + Note that Failure means that sudo handler to cosmwasm contract failed + for + + some reason + type: object + type: object neutron.contractmanager.QueryFailuresResponse: description: QueryFailuresResponse is response type for the Query/Failures RPC method. properties: @@ -15548,17 +15581,28 @@ definitions: type: string type: object type: object + neutron.cron.ExecutionStage: + default: EXECUTION_STAGE_END_BLOCKER + description: |- + - EXECUTION_STAGE_END_BLOCKER: Execution at the end of the block + - EXECUTION_STAGE_BEGIN_BLOCKER: Execution at the beginning of the block + enum: + - EXECUTION_STAGE_END_BLOCKER + - EXECUTION_STAGE_BEGIN_BLOCKER + title: Defines when messages will be executed in the block + type: string neutron.cron.MsgExecuteContract: properties: contract: - title: Contract is the address of the smart contract + title: The address of the smart contract type: string msg: - title: Msg is json encoded message to be passed to the contract + title: JSON encoded message to be passed to the contract type: string + title: Defines the contract and the message to pass type: object neutron.cron.Params: - description: Params defines the parameters for the module. + description: Defines the parameters for the module. properties: limit: format: uint64 @@ -15569,9 +15613,20 @@ definitions: type: string type: object neutron.cron.QueryGetScheduleResponse: + description: The response type for the Query/Params RPC method. properties: schedule: properties: + execution_stage: + title: Stage when messages will be executed + default: EXECUTION_STAGE_END_BLOCKER + description: |- + - EXECUTION_STAGE_END_BLOCKER: Execution at the end of the block + - EXECUTION_STAGE_BEGIN_BLOCKER: Execution at the beginning of the block + enum: + - EXECUTION_STAGE_END_BLOCKER + - EXECUTION_STAGE_BEGIN_BLOCKER + type: string last_execute_height: format: uint64 title: Last execution's block height @@ -15580,13 +15635,16 @@ definitions: items: properties: contract: - title: Contract is the address of the smart contract + title: The address of the smart contract type: string msg: - title: Msg is json encoded message to be passed to the contract + title: JSON encoded message to be passed to the contract type: string + title: Defines the contract and the message to pass type: object - title: Msgs that will be executed every period amount of time + title: >- + Msgs that will be executed every certain number of blocks, + specified in the `period` field type: array name: title: Name of schedule @@ -15595,9 +15653,11 @@ definitions: format: uint64 title: Period in blocks type: string + title: Defines the schedule for execution type: object type: object neutron.cron.QueryParamsResponse: + description: The response type for the Query/Params RPC method. properties: params: description: params holds all the parameters of this module. @@ -15612,6 +15672,7 @@ definitions: type: object type: object neutron.cron.QuerySchedulesResponse: + description: The response type for the Query/Params RPC method. properties: pagination: description: |- @@ -15642,6 +15703,16 @@ definitions: schedules: items: properties: + execution_stage: + title: Stage when messages will be executed + default: EXECUTION_STAGE_END_BLOCKER + description: |- + - EXECUTION_STAGE_END_BLOCKER: Execution at the end of the block + - EXECUTION_STAGE_BEGIN_BLOCKER: Execution at the beginning of the block + enum: + - EXECUTION_STAGE_END_BLOCKER + - EXECUTION_STAGE_BEGIN_BLOCKER + type: string last_execute_height: format: uint64 title: Last execution's block height @@ -15650,13 +15721,16 @@ definitions: items: properties: contract: - title: Contract is the address of the smart contract + title: The address of the smart contract type: string msg: - title: Msg is json encoded message to be passed to the contract + title: JSON encoded message to be passed to the contract type: string + title: Defines the contract and the message to pass type: object - title: Msgs that will be executed every period amount of time + title: >- + Msgs that will be executed every certain number of blocks, + specified in the `period` field type: array name: title: Name of schedule @@ -15665,11 +15739,22 @@ definitions: format: uint64 title: Period in blocks type: string + title: Defines the schedule for execution type: object type: array type: object neutron.cron.Schedule: properties: + execution_stage: + title: Stage when messages will be executed + default: EXECUTION_STAGE_END_BLOCKER + description: |- + - EXECUTION_STAGE_END_BLOCKER: Execution at the end of the block + - EXECUTION_STAGE_BEGIN_BLOCKER: Execution at the beginning of the block + enum: + - EXECUTION_STAGE_END_BLOCKER + - EXECUTION_STAGE_BEGIN_BLOCKER + type: string last_execute_height: format: uint64 title: Last execution's block height @@ -15678,13 +15763,16 @@ definitions: items: properties: contract: - title: Contract is the address of the smart contract + title: The address of the smart contract type: string msg: - title: Msg is json encoded message to be passed to the contract + title: JSON encoded message to be passed to the contract type: string + title: Defines the contract and the message to pass type: object - title: Msgs that will be executed every period amount of time + title: >- + Msgs that will be executed every certain number of blocks, specified + in the `period` field type: array name: title: Name of schedule @@ -15693,6 +15781,14 @@ definitions: format: uint64 title: Period in blocks type: string + title: Defines the schedule for execution + type: object + neutron.dex.DepositOptions: + properties: + disable_autoswap: + type: boolean + fail_tx_on_bel: + type: boolean type: object neutron.dex.DepositRecord: properties: @@ -15776,6 +15872,14 @@ definitions: format: int64 type: string type: object + neutron.dex.FailedDeposit: + properties: + deposit_idx: + format: uint64 + type: string + error: + type: string + type: object neutron.dex.LimitOrderTranche: properties: expiration_time: @@ -15873,161 +15977,509 @@ definitions: - JUST_IN_TIME - GOOD_TIL_TIME type: string - neutron.dex.MultiHopRoute: - properties: - hops: - items: - type: string - type: array - type: object - neutron.dex.PairID: - properties: - token0: - type: string - token1: - type: string - type: object - neutron.dex.Params: - description: Params defines the parameters for the module. + neutron.dex.MsgCancelLimitOrder: properties: - fee_tiers: - items: - format: uint64 - type: string - type: array - good_til_purge_allowance: - format: uint64 + creator: type: string - max_jits_per_block: - format: uint64 + tranche_key: type: string - paused: - type: boolean type: object - neutron.dex.Pool: + neutron.dex.MsgCancelLimitOrderResponse: properties: - id: - format: uint64 - type: string - lower_tick0: + maker_coin_out: + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. properties: - key: - properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: + amount: type: string - reserves_maker_denom: + denom: type: string type: object - upper_tick1: + title: Total amount of maker reserves that were canceled + taker_coin_out: + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. properties: - key: - properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: + amount: type: string - reserves_maker_denom: + denom: type: string type: object + title: Total amount of taker reserves that were withdrawn type: object - neutron.dex.PoolMetadata: + neutron.dex.MsgDeposit: properties: - fee: - format: uint64 + amounts_a: + items: + type: string + type: array + amounts_b: + items: + type: string + type: array + creator: type: string - id: - format: uint64 + fees: + items: + format: uint64 + type: string + type: array + options: + items: + properties: + disable_autoswap: + type: boolean + fail_tx_on_bel: + type: boolean + type: object + type: array + receiver: type: string - pair_id: - properties: - token0: - type: string - token1: - type: string - type: object - tick: - format: int64 + tick_indexes_a_to_b: + items: + format: int64 + type: string + type: array + token_a: + type: string + token_b: type: string type: object - neutron.dex.PoolReserves: + neutron.dex.MsgDepositResponse: properties: - key: - properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - type: object - price_opposite_taker_to_maker: + failed_deposits: + items: + properties: + deposit_idx: + format: uint64 + type: string + error: + type: string + type: object + type: array + reserve0_deposited: + items: + type: string + type: array + reserve1_deposited: + items: + type: string + type: array + shares_issued: + items: + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + type: array + type: object + neutron.dex.MsgMultiHopSwap: + properties: + amount_in: type: string - price_taker_to_maker: + creator: type: string - reserves_maker_denom: + exit_limit_price: + type: string + pick_best_route: + description: >- + If pickBestRoute == true then all routes are run and the route with + the + + best price is chosen otherwise, the first succesful route is used. + type: boolean + receiver: type: string + routes: + items: + properties: + hops: + items: + type: string + type: array + type: object + type: array type: object - neutron.dex.PoolReservesKey: + neutron.dex.MsgMultiHopSwapResponse: properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: + coin_out: + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. properties: - maker_denom: + amount: type: string - taker_denom: + denom: type: string type: object - type: object - neutron.dex.QueryAllInactiveLimitOrderTrancheResponse: - properties: - inactive_limit_order_tranche: + dust: items: - properties: - expiration_time: - format: date-time - title: >- + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + type: array + route: + properties: + hops: + items: + type: string + type: array + type: object + type: object + neutron.dex.MsgPlaceLimitOrder: + properties: + amount_in: + type: string + creator: + type: string + expiration_time: + description: expirationTime is only valid iff orderType == GOOD_TIL_TIME. + format: date-time + type: string + limit_sell_price: + type: string + max_amount_out: + type: string + order_type: + default: GOOD_TIL_CANCELLED + enum: + - GOOD_TIL_CANCELLED + - FILL_OR_KILL + - IMMEDIATE_OR_CANCEL + - JUST_IN_TIME + - GOOD_TIL_TIME + type: string + receiver: + type: string + tick_index_in_to_out: + description: >- + DEPRECATED: tick_index_in_to_out will be removed in future release; + limit_sell_price should be used instead. + format: int64 + type: string + token_in: + type: string + token_out: + type: string + type: object + neutron.dex.MsgPlaceLimitOrderResponse: + properties: + coin_in: + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: Total amount of coin used for the limit order + taker_coin_in: + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: >- + Total amount of the token in that was immediately swapped for + takerOutCoin + taker_coin_out: + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: >- + Total amount of coin received from the taker portion of the limit + order + + This is the amount of coin immediately available in the users account + after + + executing the limit order. It does not include any future proceeds + from the + + maker portion which will have withdrawn in the future + trancheKey: + type: string + type: object + neutron.dex.MsgWithdrawFilledLimitOrder: + properties: + creator: + type: string + tranche_key: + type: string + type: object + neutron.dex.MsgWithdrawFilledLimitOrderResponse: + properties: + maker_coin_out: + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: >- + Total amount of maker reserves that were withdrawn --only applies to + inactive LimitOrders + taker_coin_out: + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: Total amount of taker reserves that were withdrawn + type: object + neutron.dex.MsgWithdrawal: + properties: + creator: + type: string + fees: + items: + format: uint64 + type: string + type: array + receiver: + type: string + shares_to_remove: + items: + type: string + type: array + tick_indexes_a_to_b: + items: + format: int64 + type: string + type: array + token_a: + type: string + token_b: + type: string + type: object + neutron.dex.MsgWithdrawalResponse: + properties: + reserve0_withdrawn: + type: string + reserve1_withdrawn: + type: string + shares_burned: + items: + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + type: array + type: object + neutron.dex.MultiHopRoute: + properties: + hops: + items: + type: string + type: array + type: object + neutron.dex.PairID: + properties: + token0: + type: string + token1: + type: string + type: object + neutron.dex.Params: + description: Params defines the parameters for the module. + properties: + fee_tiers: + items: + format: uint64 + type: string + type: array + good_til_purge_allowance: + format: uint64 + type: string + max_jits_per_block: + format: uint64 + type: string + paused: + type: boolean + type: object + neutron.dex.Pool: + properties: + id: + format: uint64 + type: string + lower_tick0: + properties: + key: + properties: + fee: + format: uint64 + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + type: object + price_opposite_taker_to_maker: + type: string + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + type: object + upper_tick1: + properties: + key: + properties: + fee: + format: uint64 + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + type: object + price_opposite_taker_to_maker: + type: string + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + type: object + type: object + neutron.dex.PoolMetadata: + properties: + fee: + format: uint64 + type: string + id: + format: uint64 + type: string + pair_id: + properties: + token0: + type: string + token1: + type: string + type: object + tick: + format: int64 + type: string + type: object + neutron.dex.PoolReserves: + properties: + key: + properties: + fee: + format: uint64 + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + type: object + price_opposite_taker_to_maker: + type: string + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + type: object + neutron.dex.PoolReservesKey: + properties: + fee: + format: uint64 + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + type: object + neutron.dex.QueryAllInactiveLimitOrderTrancheResponse: + properties: + inactive_limit_order_tranche: + items: + properties: + expiration_time: + format: date-time + title: >- JIT orders also use expiration_time to handle deletion but represent a special case @@ -16871,67 +17323,326 @@ definitions: max_jits_per_block: format: uint64 type: string - paused: - type: boolean + paused: + type: boolean + type: object + type: object + neutron.dex.QueryPoolResponse: + properties: + pool: + properties: + id: + format: uint64 + type: string + lower_tick0: + properties: + key: + properties: + fee: + format: uint64 + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + type: object + price_opposite_taker_to_maker: + type: string + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + type: object + upper_tick1: + properties: + key: + properties: + fee: + format: uint64 + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + type: object + price_opposite_taker_to_maker: + type: string + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + type: object + type: object + type: object + neutron.dex.QuerySimulateCancelLimitOrderResponse: + properties: + resp: + properties: + maker_coin_out: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: Total amount of maker reserves that were canceled + taker_coin_out: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: Total amount of taker reserves that were withdrawn + type: object + type: object + neutron.dex.QuerySimulateDepositResponse: + properties: + resp: + properties: + failed_deposits: + items: + properties: + deposit_idx: + format: uint64 + type: string + error: + type: string + type: object + type: array + reserve0_deposited: + items: + type: string + type: array + reserve1_deposited: + items: + type: string + type: array + shares_issued: + items: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + type: array + type: object + type: object + neutron.dex.QuerySimulateMultiHopSwapResponse: + properties: + resp: + properties: + coin_out: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + dust: + items: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + type: array + route: + properties: + hops: + items: + type: string + type: array + type: object + type: object + type: object + neutron.dex.QuerySimulatePlaceLimitOrderResponse: + properties: + resp: + properties: + coin_in: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: Total amount of coin used for the limit order + taker_coin_in: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: >- + Total amount of the token in that was immediately swapped for + takerOutCoin + taker_coin_out: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: >- + Total amount of coin received from the taker portion of the limit + order + + This is the amount of coin immediately available in the users + account after + + executing the limit order. It does not include any future proceeds + from the + + maker portion which will have withdrawn in the future + trancheKey: + type: string type: object type: object - neutron.dex.QueryPoolResponse: + neutron.dex.QuerySimulateWithdrawFilledLimitOrderResponse: properties: - pool: + resp: properties: - id: - format: uint64 - type: string - lower_tick0: + maker_coin_out: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. properties: - key: - properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: + amount: type: string - reserves_maker_denom: + denom: type: string type: object - upper_tick1: + title: >- + Total amount of maker reserves that were withdrawn --only applies + to inactive LimitOrders + taker_coin_out: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. properties: - key: - properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: + amount: type: string - reserves_maker_denom: + denom: type: string type: object + title: Total amount of taker reserves that were withdrawn + type: object + type: object + neutron.dex.QuerySimulateWithdrawalResponse: + properties: + resp: + properties: + reserve0_withdrawn: + type: string + reserve1_withdrawn: + type: string + shares_burned: + items: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + type: array type: object type: object neutron.dex.TickLiquidity: @@ -17636,6 +18347,16 @@ definitions: neutron.interchainqueries.Params: description: Params defines the parameters for the module. properties: + max_kv_query_keys_count: + format: uint64 + title: Maximum amount of keys in a registered key value query + type: string + max_transactions_filters: + format: uint64 + title: >- + max_transactions_filters defines maximum allowed amount of tx filters + in msgRegisterInterchainQuery + type: string query_deposit: description: Amount of coins deposited for the query. items: @@ -17681,6 +18402,16 @@ definitions: params: description: params holds all the parameters of this module. properties: + max_kv_query_keys_count: + format: uint64 + title: Maximum amount of keys in a registered key value query + type: string + max_transactions_filters: + format: uint64 + title: >- + max_transactions_filters defines maximum allowed amount of tx + filters in msgRegisterInterchainQuery + type: string query_deposit: description: Amount of coins deposited for the query. items: @@ -23461,7 +24192,7 @@ definitions: type: object info: title: Neutron - version: v4 + version: v5 paths: /block-sdk/auction/v1/params: get: @@ -39200,41 +39931,201 @@ paths: amount. - NOTE: The amount field is an Int which implements - the custom method + NOTE: The amount field is an Int which implements + the custom method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: the packet receive fee + type: array + timeout_fee: + items: + description: >- + Coin defines a token with a denomination and an + amount. + + + NOTE: The amount field is an Int which implements + the custom method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: the packet timeout fee + type: array + title: >- + Fee defines the ICS29 receive, acknowledgement and timeout + fees + type: object + type: object + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: Parameters queries the parameters of the module. + tags: + - Query + /neutron/contractmanager/failures: + get: + operationId: Failures + parameters: + - description: address of the contract which Sudo call failed. + in: query + name: address + required: false + type: string + - description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + format: byte + in: query + name: pagination.key + required: false + type: string + - description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + format: uint64 + in: query + name: pagination.offset + required: false + type: string + - description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: pagination.limit + required: false + type: string + - description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + name: pagination.count_total + required: false + type: boolean + - description: >- + reverse is set to true if results are to be returned in the + descending order. + + + Since: cosmos-sdk 0.43 + in: query + name: pagination.reverse + required: false + type: boolean + responses: + '200': + description: A successful response. + schema: + description: >- + QueryFailuresResponse is response type for the Query/Failures RPC + method. + properties: + failures: + items: + properties: + address: + title: Address of the failed contract + type: string + error: + title: >- + Redacted error response of the sudo call. Full error is + emitted as an event + type: string + id: + format: uint64 + title: Id of the failure under specific address + type: string + sudo_payload: + format: byte + title: >- + Serialized MessageSudoCallback with Packet and Ack(if + exists) + type: string + title: >- + Failure message contains information about ACK failures and + can be used to + + replay ACK in case of requirement. - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: the packet receive fee - type: array - timeout_fee: - items: - description: >- - Coin defines a token with a denomination and an - amount. + Note that Failure means that sudo handler to cosmwasm + contract failed for + some reason + type: object + type: array + pagination: + description: >- + PageResponse is to be embedded in gRPC response messages where + the - NOTE: The amount field is an Int which implements - the custom method + corresponding request message has used PageRequest. - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: the packet timeout fee - type: array + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + properties: + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte + type: string + total: + format: uint64 title: >- - Fee defines the ICS29 receive, acknowledgement and timeout - fees - type: object + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + type: string type: object type: object default: @@ -39259,23 +40150,17 @@ paths: message: type: string type: object - summary: Parameters queries the parameters of the module. + summary: Queries a list of Failures occurred on the network. tags: - Query - /neutron/contractmanager/failures: + /neutron/contractmanager/failures/{address}: get: - operationId: Failures + operationId: AddressFailures parameters: - description: address of the contract which Sudo call failed. - in: query + in: path name: address - required: false - type: string - - description: ID of the failure for the given contract. - format: uint64 - in: query - name: failure_id - required: false + required: true type: string - description: |- key is a value returned in PageResponse.next_key to begin @@ -39425,24 +40310,183 @@ paths: message: type: string type: object - summary: Queries a list of Failures occurred on the network. + summary: Queries Failures by contract address. + tags: + - Query + /neutron/contractmanager/failures/{address}/{failure_id}: + get: + operationId: AddressFailure + parameters: + - description: address of the contract which Sudo call failed. + in: path + name: address + required: true + type: string + - description: ID of the failure for the given contract. + format: uint64 + in: path + name: failure_id + required: true + type: string + responses: + '200': + description: A successful response. + schema: + description: >- + QueryFailureResponse is response type for the Query/Failure RPC + method. + properties: + failure: + properties: + address: + title: Address of the failed contract + type: string + error: + title: >- + Redacted error response of the sudo call. Full error is + emitted as an event + type: string + id: + format: uint64 + title: Id of the failure under specific address + type: string + sudo_payload: + format: byte + title: >- + Serialized MessageSudoCallback with Packet and Ack(if + exists) + type: string + title: >- + Failure message contains information about ACK failures and + can be used to + + replay ACK in case of requirement. + + Note that Failure means that sudo handler to cosmwasm contract + failed for + + some reason + type: object + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: Queries a Failure by contract address and failure ID. + tags: + - Query + /neutron/contractmanager/params: + get: + operationId: Params + responses: + '200': + description: A successful response. + schema: + description: >- + QueryParamsResponse is response type for the Query/Params RPC + method. + properties: + params: + description: params holds all the parameters of this module. + properties: + sudo_call_gas_limit: + format: uint64 + type: string + type: object + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: Parameters queries the parameters of the module. + tags: + - Query + /neutron/cron/params: + get: + operationId: Params + responses: + '200': + description: A successful response. + schema: + description: The response type for the Query/Params RPC method. + properties: + params: + description: params holds all the parameters of this module. + properties: + limit: + format: uint64 + title: Limit of schedules executed in one block + type: string + security_address: + title: Security address that can remove schedules + type: string + type: object + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: Queries the parameters of the module. tags: - Query - /neutron/contractmanager/failures/{address}: + /neutron/cron/schedule: get: - operationId: AddressFailures + operationId: Schedules parameters: - - description: address of the contract which Sudo call failed. - in: path - name: address - required: true - type: string - - description: ID of the failure for the given contract. - format: uint64 - in: query - name: failure_id - required: false - type: string - description: |- key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key @@ -39503,43 +40547,8 @@ paths: '200': description: A successful response. schema: - description: >- - QueryFailuresResponse is response type for the Query/Failures RPC - method. + description: The response type for the Query/Params RPC method. properties: - failures: - items: - properties: - address: - title: Address of the failed contract - type: string - error: - title: >- - Redacted error response of the sudo call. Full error is - emitted as an event - type: string - id: - format: uint64 - title: Id of the failure under specific address - type: string - sudo_payload: - format: byte - title: >- - Serialized MessageSudoCallback with Packet and Ack(if - exists) - type: string - title: >- - Failure message contains information about ACK failures and - can be used to - - replay ACK in case of requirement. - - Note that Failure means that sudo handler to cosmwasm - contract failed for - - some reason - type: object - type: array pagination: description: >- PageResponse is to be embedded in gRPC response messages where @@ -39568,6 +40577,49 @@ paths: was set, its value is undefined otherwise type: string type: object + schedules: + items: + properties: + execution_stage: + title: Stage when messages will be executed + default: EXECUTION_STAGE_END_BLOCKER + description: >- + - EXECUTION_STAGE_END_BLOCKER: Execution at the end of + the block + - EXECUTION_STAGE_BEGIN_BLOCKER: Execution at the beginning of the block + enum: + - EXECUTION_STAGE_END_BLOCKER + - EXECUTION_STAGE_BEGIN_BLOCKER + type: string + last_execute_height: + format: uint64 + title: Last execution's block height + type: string + msgs: + items: + properties: + contract: + title: The address of the smart contract + type: string + msg: + title: JSON encoded message to be passed to the contract + type: string + title: Defines the contract and the message to pass + type: object + title: >- + Msgs that will be executed every certain number of + blocks, specified in the `period` field + type: array + name: + title: Name of schedule + type: string + period: + format: uint64 + title: Period in blocks + type: string + title: Defines the schedule for execution + type: object + type: array type: object default: description: An unexpected error response. @@ -39591,148 +40643,63 @@ paths: message: type: string type: object - summary: Queries Failures by contract address. + summary: Queries a list of Schedule items. tags: - Query - /neutron/contractmanager/failures/{address}/{failure_id}: + /neutron/cron/schedule/{name}: get: - operationId: AddressFailure + operationId: Schedule parameters: - - description: address of the contract which Sudo call failed. - in: path - name: address - required: true - type: string - - description: ID of the failure for the given contract. - format: uint64 - in: path - name: failure_id + - in: path + name: name required: true type: string - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key - required: false - type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - format: uint64 - in: query - name: pagination.offset - required: false - type: string - - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit - required: false - type: string - - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - name: pagination.count_total - required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - name: pagination.reverse - required: false - type: boolean responses: '200': description: A successful response. schema: - description: >- - QueryFailuresResponse is response type for the Query/Failures RPC - method. + description: The response type for the Query/Params RPC method. properties: - failures: - items: - properties: - address: - title: Address of the failed contract - type: string - error: - title: >- - Redacted error response of the sudo call. Full error is - emitted as an event - type: string - id: - format: uint64 - title: Id of the failure under specific address - type: string - sudo_payload: - format: byte - title: >- - Serialized MessageSudoCallback with Packet and Ack(if - exists) - type: string - title: >- - Failure message contains information about ACK failures and - can be used to - - replay ACK in case of requirement. - - Note that Failure means that sudo handler to cosmwasm - contract failed for - - some reason - type: object - type: array - pagination: - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } + schedule: properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte + execution_stage: + title: Stage when messages will be executed + default: EXECUTION_STAGE_END_BLOCKER + description: >- + - EXECUTION_STAGE_END_BLOCKER: Execution at the end of the + block + - EXECUTION_STAGE_BEGIN_BLOCKER: Execution at the beginning of the block + enum: + - EXECUTION_STAGE_END_BLOCKER + - EXECUTION_STAGE_BEGIN_BLOCKER type: string - total: + last_execute_height: format: uint64 + title: Last execution's block height + type: string + msgs: + items: + properties: + contract: + title: The address of the smart contract + type: string + msg: + title: JSON encoded message to be passed to the contract + type: string + title: Defines the contract and the message to pass + type: object title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise + Msgs that will be executed every certain number of blocks, + specified in the `period` field + type: array + name: + title: Name of schedule + type: string + period: + format: uint64 + title: Period in blocks type: string + title: Defines the schedule for execution type: object type: object default: @@ -39757,25 +40724,57 @@ paths: message: type: string type: object - summary: Queries a Failure by contract address and failure ID. + summary: Queries a Schedule by name. tags: - Query - /neutron/contractmanager/params: + /neutron/dex/estimate_multi_hop_swap: get: - operationId: Params + operationId: EstimateMultiHopSwap + parameters: + - description: 'DEPRECATED: Use QuerySimulateMultiHopSwap.' + in: query + name: creator + required: false + type: string + - in: query + name: receiver + required: false + type: string + - in: query + name: amount_in + required: false + type: string + - in: query + name: exit_limit_price + required: false + type: string + - description: >- + If pickBestRoute == true then all routes are run and the route with + the + + best price is chosen otherwise, the first succesful route is used. + in: query + name: pick_best_route + required: false + type: boolean responses: '200': description: A successful response. schema: - description: >- - QueryParamsResponse is response type for the Query/Params RPC - method. properties: - params: - description: params holds all the parameters of this module. + coin_out: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. properties: - sudo_call_gas_limit: - format: uint64 + amount: + type: string + denom: type: string type: object type: object @@ -39801,28 +40800,131 @@ paths: message: type: string type: object - summary: Parameters queries the parameters of the module. + summary: DEPRECATED Queries the simulated result of a multihop swap tags: - Query - /neutron/cron/params: + /neutron/dex/estimate_place_limit_order: get: - operationId: Params + operationId: EstimatePlaceLimitOrder + parameters: + - description: 'DEPRECATED: Use QuerySimulatePlaceLimitOrder.' + in: query + name: creator + required: false + type: string + - in: query + name: receiver + required: false + type: string + - in: query + name: token_in + required: false + type: string + - in: query + name: token_out + required: false + type: string + - format: int64 + in: query + name: tick_index_in_to_out + required: false + type: string + - in: query + name: amount_in + required: false + type: string + - default: GOOD_TIL_CANCELLED + enum: + - GOOD_TIL_CANCELLED + - FILL_OR_KILL + - IMMEDIATE_OR_CANCEL + - JUST_IN_TIME + - GOOD_TIL_TIME + in: query + name: order_type + required: false + type: string + - description: expirationTime is only valid iff orderType == GOOD_TIL_TIME. + format: date-time + in: query + name: expiration_time + required: false + type: string + - in: query + name: maxAmount_out + required: false + type: string responses: '200': description: A successful response. schema: properties: - params: - description: params holds all the parameters of this module. + swap_in_coin: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. properties: - limit: - format: uint64 - title: Limit of schedules executed in one block + amount: type: string - security_address: - title: Security address that can remove schedules + denom: + type: string + type: object + title: >- + Total amount of the token in that was immediately swapped for + swapOutCoin + swap_out_coin: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: >- + Total amount of coin received from the taker portion of the + limit order + + This is the amount of coin immediately available in the users + account after + + executing the limit order. It does not include any future + proceeds from the + + maker portion which will have withdrawn in the future + total_in_coin: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: type: string type: object + title: >- + Total amount of coin used for the limit order + + You can derive makerLimitInCoin using the equation: + totalInCoin = + + swapInCoin + makerLimitInCoin type: object default: description: An unexpected error response. @@ -39846,12 +40948,12 @@ paths: message: type: string type: object - summary: Queries the parameters of the module. + summary: DEPRECATED Queries the simulated result of a PlaceLimit order tags: - Query - /neutron/cron/schedule: + /neutron/dex/filled_limit_order_tranche: get: - operationId: Schedules + operationId: InactiveLimitOrderTrancheAll2 parameters: - description: |- key is a value returned in PageResponse.next_key to begin @@ -39914,6 +41016,48 @@ paths: description: A successful response. schema: properties: + inactive_limit_order_tranche: + items: + properties: + expiration_time: + format: date-time + title: >- + JIT orders also use expiration_time to handle deletion + but represent a special case + + All JIT orders have a expiration_time of 0 and an + exception is made to still treat these orders as live + + Order deletion still functions the same and the orders + will be deleted at the end of the block + type: string + key: + properties: + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + tranche_key: + type: string + type: object + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + reserves_taker_denom: + type: string + total_maker_denom: + type: string + total_taker_denom: + type: string + type: object + type: array pagination: description: >- PageResponse is to be embedded in gRPC response messages where @@ -39942,36 +41086,6 @@ paths: was set, its value is undefined otherwise type: string type: object - schedules: - items: - properties: - last_execute_height: - format: uint64 - title: Last execution's block height - type: string - msgs: - items: - properties: - contract: - title: Contract is the address of the smart contract - type: string - msg: - title: >- - Msg is json encoded message to be passed to the - contract - type: string - type: object - title: Msgs that will be executed every period amount of time - type: array - name: - title: Name of schedule - type: string - period: - format: uint64 - title: Period in blocks - type: string - type: object - type: array type: object default: description: An unexpected error response. @@ -39995,15 +41109,28 @@ paths: message: type: string type: object - summary: Queries a list of Schedule items. + summary: Queries a list of InactiveLimitOrderTranche items. tags: - Query - /neutron/cron/schedule/{name}: + /neutron/dex/filled_limit_order_tranche/{pair_id}/{token_in}/{tick_index}/{tranche_key}: get: - operationId: Schedule + operationId: InactiveLimitOrderTranche2 parameters: - in: path - name: name + name: pair_id + required: true + type: string + - in: path + name: token_in + required: true + type: string + - format: int64 + in: path + name: tick_index + required: true + type: string + - in: path + name: tranche_key required: true type: string responses: @@ -40011,32 +41138,44 @@ paths: description: A successful response. schema: properties: - schedule: + inactive_limit_order_tranche: properties: - last_execute_height: - format: uint64 - title: Last execution's block height + expiration_time: + format: date-time + title: >- + JIT orders also use expiration_time to handle deletion but + represent a special case + + All JIT orders have a expiration_time of 0 and an + exception is made to still treat these orders as live + + Order deletion still functions the same and the orders + will be deleted at the end of the block type: string - msgs: - items: - properties: - contract: - title: Contract is the address of the smart contract - type: string - msg: - title: >- - Msg is json encoded message to be passed to the - contract - type: string - type: object - title: Msgs that will be executed every period amount of time - type: array - name: - title: Name of schedule + key: + properties: + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + tranche_key: + type: string + type: object + price_taker_to_maker: type: string - period: - format: uint64 - title: Period in blocks + reserves_maker_denom: + type: string + reserves_taker_denom: + type: string + total_maker_denom: + type: string + total_taker_denom: type: string type: object type: object @@ -40062,36 +41201,67 @@ paths: message: type: string type: object - summary: Queries a Schedule by name. + summary: Queries a InactiveLimitOrderTranche by index. tags: - Query - /neutron/dex/estimate_multi_hop_swap: + /neutron/dex/inactive_limit_order_tranche: get: - operationId: EstimateMultiHopSwap + operationId: InactiveLimitOrderTrancheAll parameters: - - in: query - name: creator + - description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + format: byte + in: query + name: pagination.key required: false type: string - - in: query - name: receiver + - description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + format: uint64 + in: query + name: pagination.offset required: false type: string - - in: query - name: amount_in + - description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: pagination.limit required: false type: string - - in: query - name: exit_limit_price + - description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + name: pagination.count_total required: false - type: string + type: boolean - description: >- - If pickBestRoute == true then all routes are run and the route with - the + reverse is set to true if results are to be returned in the + descending order. - best price is chosen otherwise, the first succesful route is used. + + Since: cosmos-sdk 0.43 in: query - name: pick_best_route + name: pagination.reverse required: false type: boolean responses: @@ -40099,19 +41269,74 @@ paths: description: A successful response. schema: properties: - coin_out: - description: >- - Coin defines a token with a denomination and an amount. + inactive_limit_order_tranche: + items: + properties: + expiration_time: + format: date-time + title: >- + JIT orders also use expiration_time to handle deletion + but represent a special case + All JIT orders have a expiration_time of 0 and an + exception is made to still treat these orders as live - NOTE: The amount field is an Int which implements the custom - method + Order deletion still functions the same and the orders + will be deleted at the end of the block + type: string + key: + properties: + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + tranche_key: + type: string + type: object + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + reserves_taker_denom: + type: string + total_maker_denom: + type: string + total_taker_denom: + type: string + type: object + type: array + pagination: + description: >- + PageResponse is to be embedded in gRPC response messages where + the - signatures required by gogoproto. + corresponding request message has used PageRequest. + + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } properties: - amount: + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte type: string - denom: + total: + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise type: string type: object type: object @@ -40137,130 +41362,75 @@ paths: message: type: string type: object - summary: Queries the simulated result of a multihop swap + summary: Queries a list of InactiveLimitOrderTranche items. tags: - Query - /neutron/dex/estimate_place_limit_order: + /neutron/dex/inactive_limit_order_tranche/{pair_id}/{token_in}/{tick_index}/{tranche_key}: get: - operationId: EstimatePlaceLimitOrder + operationId: InactiveLimitOrderTranche parameters: - - in: query - name: creator - required: false - type: string - - in: query - name: receiver - required: false + - in: path + name: pair_id + required: true type: string - - in: query + - in: path name: token_in - required: false - type: string - - in: query - name: token_out - required: false + required: true type: string - format: int64 - in: query - name: tick_index_in_to_out - required: false - type: string - - in: query - name: amount_in - required: false - type: string - - default: GOOD_TIL_CANCELLED - enum: - - GOOD_TIL_CANCELLED - - FILL_OR_KILL - - IMMEDIATE_OR_CANCEL - - JUST_IN_TIME - - GOOD_TIL_TIME - in: query - name: order_type - required: false - type: string - - description: expirationTime is only valid iff orderType == GOOD_TIL_TIME. - format: date-time - in: query - name: expiration_time - required: false + in: path + name: tick_index + required: true type: string - - in: query - name: maxAmount_out - required: false + - in: path + name: tranche_key + required: true type: string responses: '200': description: A successful response. schema: properties: - swap_in_coin: - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. + inactive_limit_order_tranche: properties: - amount: - type: string - denom: - type: string - type: object - title: >- - Total amount of the token in that was immediately swapped for - swapOutCoin - swap_out_coin: - description: >- - Coin defines a token with a denomination and an amount. - + expiration_time: + format: date-time + title: >- + JIT orders also use expiration_time to handle deletion but + represent a special case - NOTE: The amount field is an Int which implements the custom - method + All JIT orders have a expiration_time of 0 and an + exception is made to still treat these orders as live - signatures required by gogoproto. - properties: - amount: + Order deletion still functions the same and the orders + will be deleted at the end of the block type: string - denom: + key: + properties: + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + tranche_key: + type: string + type: object + price_taker_to_maker: type: string - type: object - title: >- - Total amount of coin received from the taker portion of the - limit order - - This is the amount of coin immediately available in the users - account after - - executing the limit order. It does not include any future - proceeds from the - - maker portion which will have withdrawn in the future - total_in_coin: - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - properties: - amount: + reserves_maker_denom: type: string - denom: + reserves_taker_denom: + type: string + total_maker_denom: + type: string + total_taker_denom: type: string type: object - title: >- - Total amount of coin used for the limit order - - You can derive makerLimitInCoin using the equation: - totalInCoin = - - swapInCoin + makerLimitInCoin type: object default: description: An unexpected error response. @@ -40284,13 +41454,21 @@ paths: message: type: string type: object - summary: Queries the simulated result of a PlaceLimit order + summary: Queries a InactiveLimitOrderTranche by index. tags: - Query - /neutron/dex/filled_limit_order_tranche: + /neutron/dex/limit_order_tranche/{pair_id}/{token_in}: get: - operationId: InactiveLimitOrderTrancheAll2 + operationId: LimitOrderTrancheAll parameters: + - in: path + name: pair_id + required: true + type: string + - in: path + name: token_in + required: true + type: string - description: |- key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key @@ -40352,7 +41530,7 @@ paths: description: A successful response. schema: properties: - inactive_limit_order_tranche: + limit_order_tranche: items: properties: expiration_time: @@ -40445,12 +41623,14 @@ paths: message: type: string type: object - summary: Queries a list of InactiveLimitOrderTranche items. + summary: |- + Queries a list of LimitOrderTranche items for a given pairID / TokenIn + combination. tags: - Query - /neutron/dex/filled_limit_order_tranche/{pair_id}/{token_in}/{tick_index}/{tranche_key}: + /neutron/dex/limit_order_tranche/{pair_id}/{token_in}/{tick_index}/{tranche_key}: get: - operationId: InactiveLimitOrderTranche2 + operationId: LimitOrderTranche parameters: - in: path name: pair_id @@ -40474,7 +41654,7 @@ paths: description: A successful response. schema: properties: - inactive_limit_order_tranche: + limit_order_tranche: properties: expiration_time: format: date-time @@ -40537,12 +41717,12 @@ paths: message: type: string type: object - summary: Queries a InactiveLimitOrderTranche by index. + summary: Queries a LimitOrderTranche by index. tags: - Query - /neutron/dex/inactive_limit_order_tranche: + /neutron/dex/limit_order_tranche_user: get: - operationId: InactiveLimitOrderTrancheAll + operationId: LimitOrderTrancheUserAll parameters: - description: |- key is a value returned in PageResponse.next_key to begin @@ -40605,45 +41785,38 @@ paths: description: A successful response. schema: properties: - inactive_limit_order_tranche: + limit_order_tranche_user: items: properties: - expiration_time: - format: date-time - title: >- - JIT orders also use expiration_time to handle deletion - but represent a special case - - All JIT orders have a expiration_time of 0 and an - exception is made to still treat these orders as live - - Order deletion still functions the same and the orders - will be deleted at the end of the block + address: type: string - key: - properties: - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - tranche_key: - type: string - type: object - price_taker_to_maker: + order_type: + default: GOOD_TIL_CANCELLED + enum: + - GOOD_TIL_CANCELLED + - FILL_OR_KILL + - IMMEDIATE_OR_CANCEL + - JUST_IN_TIME + - GOOD_TIL_TIME type: string - reserves_maker_denom: + shares_cancelled: + title: 'TODO: remove this in next release. It is no longer used' type: string - reserves_taker_denom: + shares_owned: type: string - total_maker_denom: + shares_withdrawn: type: string - total_taker_denom: + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + tranche_key: type: string type: object type: array @@ -40698,74 +41871,118 @@ paths: message: type: string type: object - summary: Queries a list of InactiveLimitOrderTranche items. + summary: Queries a list of LimitOrderTranchUser items. tags: - Query - /neutron/dex/inactive_limit_order_tranche/{pair_id}/{token_in}/{tick_index}/{tranche_key}: + /neutron/dex/limit_order_tranche_user/{address}/{tranche_key}: get: - operationId: InactiveLimitOrderTranche + operationId: LimitOrderTrancheUser parameters: - in: path - name: pair_id - required: true - type: string - - in: path - name: token_in - required: true - type: string - - format: int64 - in: path - name: tick_index + name: address required: true type: string - in: path name: tranche_key required: true type: string + - in: query + name: calc_withdrawable_shares + required: false + type: boolean responses: '200': description: A successful response. schema: properties: - inactive_limit_order_tranche: + limit_order_tranche_user: properties: - expiration_time: - format: date-time - title: >- - JIT orders also use expiration_time to handle deletion but - represent a special case - - All JIT orders have a expiration_time of 0 and an - exception is made to still treat these orders as live - - Order deletion still functions the same and the orders - will be deleted at the end of the block + address: type: string - key: + order_type: + default: GOOD_TIL_CANCELLED + enum: + - GOOD_TIL_CANCELLED + - FILL_OR_KILL + - IMMEDIATE_OR_CANCEL + - JUST_IN_TIME + - GOOD_TIL_TIME + type: string + shares_cancelled: + title: 'TODO: remove this in next release. It is no longer used' + type: string + shares_owned: + type: string + shares_withdrawn: + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: properties: - tick_index_taker_to_maker: - format: int64 + maker_denom: type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - tranche_key: + taker_denom: type: string type: object - price_taker_to_maker: - type: string - reserves_maker_denom: - type: string - reserves_taker_denom: + tranche_key: type: string - total_maker_denom: + type: object + withdrawable_shares: + type: string + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: Queries a LimitOrderTrancheUser by index. + tags: + - Query + /neutron/dex/params: + get: + operationId: Params + responses: + '200': + description: A successful response. + schema: + description: >- + QueryParamsResponse is response type for the Query/Params RPC + method. + properties: + params: + description: params holds all the parameters of this module. + properties: + fee_tiers: + items: + format: uint64 + type: string + type: array + good_til_purge_allowance: + format: uint64 type: string - total_taker_denom: + max_jits_per_block: + format: uint64 type: string + paused: + type: boolean type: object type: object default: @@ -40790,151 +42007,87 @@ paths: message: type: string type: object - summary: Queries a InactiveLimitOrderTranche by index. + summary: Parameters queries the parameters of the module. tags: - Query - /neutron/dex/limit_order_tranche/{pair_id}/{token_in}: + /neutron/dex/pool/{pair_id}/{tick_index}/{fee}: get: - operationId: LimitOrderTrancheAll + operationId: Pool parameters: - in: path name: pair_id required: true type: string - - in: path - name: token_in + - format: int64 + in: path + name: tick_index required: true type: string - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key - required: false - type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - format: uint64 - in: query - name: pagination.offset - required: false - type: string - - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit - required: false + - format: uint64 + in: path + name: fee + required: true type: string - - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - name: pagination.count_total - required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - name: pagination.reverse - required: false - type: boolean responses: '200': description: A successful response. schema: properties: - limit_order_tranche: - items: - properties: - expiration_time: - format: date-time - title: >- - JIT orders also use expiration_time to handle deletion - but represent a special case - - All JIT orders have a expiration_time of 0 and an - exception is made to still treat these orders as live - - Order deletion still functions the same and the orders - will be deleted at the end of the block - type: string - key: - properties: - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - tranche_key: - type: string - type: object - price_taker_to_maker: - type: string - reserves_maker_denom: - type: string - reserves_taker_denom: - type: string - total_maker_denom: - type: string - total_taker_denom: - type: string - type: object - type: array - pagination: - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } + pool: properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte - type: string - total: + id: format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise type: string + lower_tick0: + properties: + key: + properties: + fee: + format: uint64 + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + type: object + price_opposite_taker_to_maker: + type: string + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + type: object + upper_tick1: + properties: + key: + properties: + fee: + format: uint64 + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + type: object + price_opposite_taker_to_maker: + type: string + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + type: object type: object type: object default: @@ -40959,76 +42112,78 @@ paths: message: type: string type: object - summary: |- - Queries a list of LimitOrderTranche items for a given pairID / TokenIn - combination. + summary: Queries a pool by pair, tick and fee tags: - Query - /neutron/dex/limit_order_tranche/{pair_id}/{token_in}/{tick_index}/{tranche_key}: + /neutron/dex/pool/{pool_id}: get: - operationId: LimitOrderTranche + operationId: PoolByID parameters: - - in: path - name: pair_id - required: true - type: string - - in: path - name: token_in - required: true - type: string - - format: int64 + - format: uint64 in: path - name: tick_index - required: true - type: string - - in: path - name: tranche_key + name: pool_id required: true type: string responses: '200': description: A successful response. - schema: - properties: - limit_order_tranche: - properties: - expiration_time: - format: date-time - title: >- - JIT orders also use expiration_time to handle deletion but - represent a special case - - All JIT orders have a expiration_time of 0 and an - exception is made to still treat these orders as live - - Order deletion still functions the same and the orders - will be deleted at the end of the block + schema: + properties: + pool: + properties: + id: + format: uint64 type: string - key: + lower_tick0: properties: - tick_index_taker_to_maker: - format: int64 + key: + properties: + fee: + format: uint64 + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + type: object + price_opposite_taker_to_maker: type: string - trade_pair_id: + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + type: object + upper_tick1: + properties: + key: properties: - maker_denom: + fee: + format: uint64 type: string - taker_denom: + tick_index_taker_to_maker: + format: int64 type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object type: object - tranche_key: + price_opposite_taker_to_maker: + type: string + price_taker_to_maker: + type: string + reserves_maker_denom: type: string type: object - price_taker_to_maker: - type: string - reserves_maker_denom: - type: string - reserves_taker_denom: - type: string - total_maker_denom: - type: string - total_taker_denom: - type: string type: object type: object default: @@ -41053,67 +42208,36 @@ paths: message: type: string type: object - summary: Queries a LimitOrderTranche by index. + summary: Queries a pool by ID tags: - Query - /neutron/dex/limit_order_tranche_user: + /neutron/dex/pool_metadata: get: - operationId: LimitOrderTrancheUserAll + operationId: SimulateMultiHopSwap parameters: - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key + - in: query + name: msg.creator required: false type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - format: uint64 - in: query - name: pagination.offset + - in: query + name: msg.receiver required: false type: string - - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit + - in: query + name: msg.amount_in required: false type: string - - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - name: pagination.count_total + - in: query + name: msg.exit_limit_price required: false - type: boolean + type: string - description: >- - reverse is set to true if results are to be returned in the - descending order. - + If pickBestRoute == true then all routes are run and the route with + the - Since: cosmos-sdk 0.43 + best price is chosen otherwise, the first succesful route is used. in: query - name: pagination.reverse + name: msg.pick_best_route required: false type: boolean responses: @@ -41121,68 +42245,47 @@ paths: description: A successful response. schema: properties: - limit_order_tranche_user: - items: - properties: - address: - type: string - order_type: - default: GOOD_TIL_CANCELLED - enum: - - GOOD_TIL_CANCELLED - - FILL_OR_KILL - - IMMEDIATE_OR_CANCEL - - JUST_IN_TIME - - GOOD_TIL_TIME - type: string - shares_cancelled: - title: 'TODO: remove this in next release. It is no longer used' - type: string - shares_owned: - type: string - shares_withdrawn: - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: + resp: + properties: + coin_out: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + dust: + items: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. properties: - maker_denom: + amount: type: string - taker_denom: + denom: type: string type: object - tranche_key: - type: string - type: object - type: array - pagination: - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte - type: string - total: - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - type: string + type: array + route: + properties: + hops: + items: + type: string + type: array + type: object type: object type: object default: @@ -41207,65 +42310,42 @@ paths: message: type: string type: object - summary: Queries a list of LimitOrderTranchUser items. + summary: Simulates MsgMultiHopSwap tags: - Query - /neutron/dex/limit_order_tranche_user/{address}/{tranche_key}: + /neutron/dex/pool_metadata/{id}: get: - operationId: LimitOrderTrancheUser + operationId: PoolMetadata parameters: - - in: path - name: address - required: true - type: string - - in: path - name: tranche_key + - format: uint64 + in: path + name: id required: true type: string - - in: query - name: calc_withdrawable_shares - required: false - type: boolean responses: '200': description: A successful response. schema: properties: - limit_order_tranche_user: + Pool_metadata: properties: - address: - type: string - order_type: - default: GOOD_TIL_CANCELLED - enum: - - GOOD_TIL_CANCELLED - - FILL_OR_KILL - - IMMEDIATE_OR_CANCEL - - JUST_IN_TIME - - GOOD_TIL_TIME - type: string - shares_cancelled: - title: 'TODO: remove this in next release. It is no longer used' - type: string - shares_owned: - type: string - shares_withdrawn: + fee: + format: uint64 type: string - tick_index_taker_to_maker: - format: int64 + id: + format: uint64 type: string - trade_pair_id: + pair_id: properties: - maker_denom: + token0: type: string - taker_denom: + token1: type: string type: object - tranche_key: + tick: + format: int64 type: string type: object - withdrawable_shares: - type: string type: object default: description: An unexpected error response. @@ -41289,37 +42369,137 @@ paths: message: type: string type: object - summary: Queries a LimitOrderTrancheUser by index. + summary: Queries a PoolMetadata by ID tags: - Query - /neutron/dex/params: + /neutron/dex/pool_reserves/{pair_id}/{token_in}: get: - operationId: Params + operationId: PoolReservesAll + parameters: + - in: path + name: pair_id + required: true + type: string + - in: path + name: token_in + required: true + type: string + - description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + format: byte + in: query + name: pagination.key + required: false + type: string + - description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + format: uint64 + in: query + name: pagination.offset + required: false + type: string + - description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: pagination.limit + required: false + type: string + - description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + name: pagination.count_total + required: false + type: boolean + - description: >- + reverse is set to true if results are to be returned in the + descending order. + + + Since: cosmos-sdk 0.43 + in: query + name: pagination.reverse + required: false + type: boolean responses: '200': description: A successful response. schema: - description: >- - QueryParamsResponse is response type for the Query/Params RPC - method. properties: - params: - description: params holds all the parameters of this module. + pagination: + description: >- + PageResponse is to be embedded in gRPC response messages where + the + + corresponding request message has used PageRequest. + + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } properties: - fee_tiers: - items: - format: uint64 - type: string - type: array - good_til_purge_allowance: - format: uint64 + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte type: string - max_jits_per_block: + total: format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise type: string - paused: - type: boolean type: object + pool_reserves: + items: + properties: + key: + properties: + fee: + format: uint64 + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + type: object + price_opposite_taker_to_maker: + type: string + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + type: object + type: array type: object default: description: An unexpected error response. @@ -41343,17 +42523,21 @@ paths: message: type: string type: object - summary: Parameters queries the parameters of the module. + summary: Queries a list of PoolReserves items. tags: - Query - /neutron/dex/pool/{pair_id}/{tick_index}/{fee}: + /neutron/dex/pool_reserves/{pair_id}/{token_in}/{tick_index}/{fee}: get: - operationId: Pool + operationId: PoolReserves parameters: - in: path name: pair_id required: true type: string + - in: path + name: token_in + required: true + type: string - format: int64 in: path name: tick_index @@ -41369,61 +42553,30 @@ paths: description: A successful response. schema: properties: - pool: + pool_reserves: properties: - id: - format: uint64 - type: string - lower_tick0: + key: properties: - key: - properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: + fee: + format: uint64 type: string - reserves_maker_denom: + tick_index_taker_to_maker: + format: int64 type: string - type: object - upper_tick1: - properties: - key: + trade_pair_id: properties: - fee: - format: uint64 + maker_denom: type: string - tick_index_taker_to_maker: - format: int64 + taker_denom: type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: - type: string - reserves_maker_denom: - type: string type: object + price_opposite_taker_to_maker: + type: string + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string type: object type: object default: @@ -41448,78 +42601,60 @@ paths: message: type: string type: object - summary: Queries a pool by pair, tick and fee + summary: Queries a PoolReserve by index tags: - Query - /neutron/dex/pool/{pool_id}: + /neutron/dex/simulate_cancel_limit_order: get: - operationId: PoolByID + operationId: SimulateCancelLimitOrder parameters: - - format: uint64 - in: path - name: pool_id - required: true + - in: query + name: msg.creator + required: false + type: string + - in: query + name: msg.tranche_key + required: false type: string responses: '200': description: A successful response. schema: properties: - pool: + resp: properties: - id: - format: uint64 - type: string - lower_tick0: - properties: - key: - properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: + maker_coin_out: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + properties: + amount: type: string - reserves_maker_denom: + denom: type: string type: object - upper_tick1: + title: Total amount of maker reserves that were canceled + taker_coin_out: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. properties: - key: - properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: + amount: type: string - reserves_maker_denom: + denom: type: string type: object + title: Total amount of taker reserves that were withdrawn type: object type: object default: @@ -41544,123 +42679,102 @@ paths: message: type: string type: object - summary: Queries a pool by ID + summary: Simulates MsgCancelLimitOrder tags: - Query - /neutron/dex/pool_metadata: + /neutron/dex/simulate_deposit: get: - operationId: PoolMetadataAll + operationId: SimulateDeposit parameters: - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key + - in: query + name: msg.creator required: false type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - format: uint64 - in: query - name: pagination.offset + - in: query + name: msg.receiver required: false type: string - - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit + - in: query + name: msg.token_a required: false type: string - - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. + - in: query + name: msg.token_b + required: false + type: string + - collectionFormat: multi in: query - name: pagination.count_total + items: + type: string + name: msg.amounts_a required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 + type: array + - collectionFormat: multi in: query - name: pagination.reverse + items: + type: string + name: msg.amounts_b required: false - type: boolean + type: array + - collectionFormat: multi + in: query + items: + format: int64 + type: string + name: msg.tick_indexes_a_to_b + required: false + type: array + - collectionFormat: multi + in: query + items: + format: uint64 + type: string + name: msg.fees + required: false + type: array responses: '200': description: A successful response. schema: properties: - pagination: - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } + resp: properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte - type: string - total: - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - type: string - type: object - pool_metadata: - items: - properties: - fee: - format: uint64 + failed_deposits: + items: + properties: + deposit_idx: + format: uint64 + type: string + error: + type: string + type: object + type: array + reserve0_deposited: + items: type: string - id: - format: uint64 + type: array + reserve1_deposited: + items: type: string - pair_id: + type: array + shares_issued: + items: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. properties: - token0: + amount: type: string - token1: + denom: type: string type: object - tick: - format: int64 - type: string - type: object - type: array + type: array + type: object type: object default: description: An unexpected error response. @@ -41684,40 +42798,134 @@ paths: message: type: string type: object - summary: Queries a list of PoolMetadata items. + summary: Simulates MsgDeposit tags: - Query - /neutron/dex/pool_metadata/{id}: + /neutron/dex/simulate_place_limit_order: get: - operationId: PoolMetadata + operationId: SimulatePlaceLimitOrder parameters: - - format: uint64 - in: path - name: id - required: true + - in: query + name: msg.creator + required: false + type: string + - in: query + name: msg.receiver + required: false + type: string + - in: query + name: msg.token_in + required: false + type: string + - in: query + name: msg.token_out + required: false + type: string + - description: >- + DEPRECATED: tick_index_in_to_out will be removed in future release; + limit_sell_price should be used instead. + format: int64 + in: query + name: msg.tick_index_in_to_out + required: false + type: string + - in: query + name: msg.amount_in + required: false + type: string + - default: GOOD_TIL_CANCELLED + enum: + - GOOD_TIL_CANCELLED + - FILL_OR_KILL + - IMMEDIATE_OR_CANCEL + - JUST_IN_TIME + - GOOD_TIL_TIME + in: query + name: msg.order_type + required: false + type: string + - description: expirationTime is only valid iff orderType == GOOD_TIL_TIME. + format: date-time + in: query + name: msg.expiration_time + required: false + type: string + - in: query + name: msg.max_amount_out + required: false + type: string + - in: query + name: msg.limit_sell_price + required: false type: string responses: '200': description: A successful response. schema: properties: - Pool_metadata: + resp: properties: - fee: - format: uint64 - type: string - id: - format: uint64 - type: string - pair_id: + coin_in: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: Total amount of coin used for the limit order + taker_coin_in: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. properties: - token0: + amount: type: string - token1: + denom: type: string type: object - tick: - format: int64 + title: >- + Total amount of the token in that was immediately swapped + for takerOutCoin + taker_coin_out: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: >- + Total amount of coin received from the taker portion of + the limit order + + This is the amount of coin immediately available in the + users account after + + executing the limit order. It does not include any future + proceeds from the + + maker portion which will have withdrawn in the future + trancheKey: type: string type: object type: object @@ -41743,137 +42951,63 @@ paths: message: type: string type: object - summary: Queries a PoolMetadata by ID + summary: Simulates MsgPlaceLimitOrder tags: - Query - /neutron/dex/pool_reserves/{pair_id}/{token_in}: + /neutron/dex/simulate_withdraw_filled_limit_order: get: - operationId: PoolReservesAll + operationId: SimulateWithdrawFilledLimitOrder parameters: - - in: path - name: pair_id - required: true - type: string - - in: path - name: token_in - required: true - type: string - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key - required: false - type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - format: uint64 - in: query - name: pagination.offset + - in: query + name: msg.creator required: false type: string - - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit + - in: query + name: msg.tranche_key required: false type: string - - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - name: pagination.count_total - required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - name: pagination.reverse - required: false - type: boolean responses: '200': description: A successful response. schema: properties: - pagination: - description: >- - PageResponse is to be embedded in gRPC response messages where - the + resp: + properties: + maker_coin_out: + description: >- + Coin defines a token with a denomination and an amount. - corresponding request message has used PageRequest. - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte - type: string - total: - format: uint64 + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object title: >- - total is total number of results available if - PageRequest.count_total + Total amount of maker reserves that were withdrawn --only + applies to inactive LimitOrders + taker_coin_out: + description: >- + Coin defines a token with a denomination and an amount. - was set, its value is undefined otherwise - type: string + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: Total amount of taker reserves that were withdrawn type: object - pool_reserves: - items: - properties: - key: - properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: - type: string - reserves_maker_denom: - type: string - type: object - type: array type: object default: description: An unexpected error response. @@ -41897,60 +43031,80 @@ paths: message: type: string type: object - summary: Queries a list of PoolReserves items. + summary: Simulates MsgWithdrawFilledLimitOrder tags: - Query - /neutron/dex/pool_reserves/{pair_id}/{token_in}/{tick_index}/{fee}: + /neutron/dex/simulate_withdrawal: get: - operationId: PoolReserves + operationId: SimulateWithdrawal parameters: - - in: path - name: pair_id - required: true + - in: query + name: msg.creator + required: false type: string - - in: path - name: token_in - required: true + - in: query + name: msg.receiver + required: false type: string - - format: int64 - in: path - name: tick_index - required: true + - in: query + name: msg.token_a + required: false type: string - - format: uint64 - in: path - name: fee - required: true + - in: query + name: msg.token_b + required: false type: string + - collectionFormat: multi + in: query + items: + type: string + name: msg.shares_to_remove + required: false + type: array + - collectionFormat: multi + in: query + items: + format: int64 + type: string + name: msg.tick_indexes_a_to_b + required: false + type: array + - collectionFormat: multi + in: query + items: + format: uint64 + type: string + name: msg.fees + required: false + type: array responses: '200': description: A successful response. schema: properties: - pool_reserves: + resp: properties: - key: - properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: + reserve0_withdrawn: type: string - reserves_maker_denom: + reserve1_withdrawn: type: string + shares_burned: + items: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + type: array type: object type: object default: @@ -41975,7 +43129,7 @@ paths: message: type: string type: object - summary: Queries a PoolReserve by index + summary: Simulates MsgWithdrawal tags: - Query /neutron/dex/tick_liquidity/{pair_id}/{token_in}: @@ -42739,6 +43893,16 @@ paths: params: description: params holds all the parameters of this module. properties: + max_kv_query_keys_count: + format: uint64 + title: Maximum amount of keys in a registered key value query + type: string + max_transactions_filters: + format: uint64 + title: >- + max_transactions_filters defines maximum allowed amount of + tx filters in msgRegisterInterchainQuery + type: string query_deposit: description: Amount of coins deposited for the query. items: From 253e955c0658489715e6531da8d6e9861a4f94ec Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Wed, 25 Sep 2024 15:18:18 +0300 Subject: [PATCH 099/127] remove unnecessary upgrade --- app/app.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/app.go b/app/app.go index 464d5a62c..7cf6a9175 100644 --- a/app/app.go +++ b/app/app.go @@ -221,7 +221,7 @@ const ( ) var ( - Upgrades = []upgrades.Upgrade{v500.Upgrade, v500.Upgrade} + Upgrades = []upgrades.Upgrade{v500.Upgrade} // DefaultNodeHome default home directories for the application daemon DefaultNodeHome string From 2a81f5da31232cd746a788733b486dcf9f28429a Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Wed, 25 Sep 2024 15:22:44 +0300 Subject: [PATCH 100/127] remove unnecessary file --- x/ibc-rate-limit/target/.rustc_info.json | 1 - 1 file changed, 1 deletion(-) delete mode 100644 x/ibc-rate-limit/target/.rustc_info.json diff --git a/x/ibc-rate-limit/target/.rustc_info.json b/x/ibc-rate-limit/target/.rustc_info.json deleted file mode 100644 index 2fbd7f6db..000000000 --- a/x/ibc-rate-limit/target/.rustc_info.json +++ /dev/null @@ -1 +0,0 @@ -{"rustc_fingerprint":11425837224790591013,"outputs":{"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.81.0 (eeb90cda1 2024-09-04) (Homebrew)\nbinary: rustc\ncommit-hash: eeb90cda1969383f56a2637cbd3037bdf598841c\ncommit-date: 2024-09-04\nhost: x86_64-apple-darwin\nrelease: 1.81.0\nLLVM version: 18.1.8\n","stderr":""},"15729799797837862367":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n/usr/local/Cellar/rust/1.81.0\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_feature=\"cmpxchg16b\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_feature=\"sse3\"\ntarget_feature=\"sse4.1\"\ntarget_feature=\"ssse3\"\ntarget_has_atomic=\"128\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"macos\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"apple\"\nunix\n","stderr":""},"16495917692426387086":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n","stderr":""}},"successes":{}} \ No newline at end of file From f7bd796dfeb2c8da6b207f9739e5d282627cf2c1 Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Wed, 25 Sep 2024 15:31:12 +0300 Subject: [PATCH 101/127] upgrade tests --- app/upgrades/v5.0.0/upgrades_test.go | 65 ++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 app/upgrades/v5.0.0/upgrades_test.go diff --git a/app/upgrades/v5.0.0/upgrades_test.go b/app/upgrades/v5.0.0/upgrades_test.go new file mode 100644 index 000000000..05cb9eb7a --- /dev/null +++ b/app/upgrades/v5.0.0/upgrades_test.go @@ -0,0 +1,65 @@ +package v500_test + +import ( + "testing" + + "cosmossdk.io/math" + upgradetypes "cosmossdk.io/x/upgrade/types" + "github.com/stretchr/testify/suite" + + v500 "github.com/neutron-org/neutron/v5/app/upgrades/v5.0.0" + "github.com/neutron-org/neutron/v5/testutil/common/sample" + + "github.com/neutron-org/neutron/v5/testutil" + dexkeeper "github.com/neutron-org/neutron/v5/x/dex/keeper" + dextypes "github.com/neutron-org/neutron/v5/x/dex/types" +) + +type UpgradeTestSuite struct { + testutil.IBCConnectionTestSuite +} + +func TestKeeperTestSuite(t *testing.T) { + suite.Run(t, new(UpgradeTestSuite)) +} + +func (suite *UpgradeTestSuite) SetupTest() { + suite.IBCConnectionTestSuite.SetupTest() +} + +func (suite *UpgradeTestSuite) TestUpgradeDexPause() { + var ( + app = suite.GetNeutronZoneApp(suite.ChainA) + ctx = suite.ChainA.GetContext().WithChainID("neutron-1") + msgServer = dexkeeper.NewMsgServerImpl(app.DexKeeper) + ) + + params := app.DexKeeper.GetParams(ctx) + + suite.False(params.Paused) + + upgrade := upgradetypes.Plan{ + Name: v500.UpgradeName, + Info: "some text here", + Height: 100, + } + suite.NoError(app.UpgradeKeeper.ApplyUpgrade(ctx, upgrade)) + + params = app.DexKeeper.GetParams(ctx) + + suite.True(params.Paused) + + _, err := msgServer.Deposit(ctx, &dextypes.MsgDeposit{ + Creator: sample.AccAddress(), + Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", + TickIndexesAToB: []int64{1}, + Fees: []uint64{1}, + AmountsA: []math.Int{math.OneInt()}, + AmountsB: []math.Int{math.ZeroInt()}, + Options: []*dextypes.DepositOptions{{}}, + }) + + suite.ErrorIs(err, dextypes.ErrDexPaused) +} From f9bbf8c8bce9552a8f6f9453c9eac06a78a405ec Mon Sep 17 00:00:00 2001 From: Julian Compagni Portis Date: Wed, 25 Sep 2024 16:01:55 -0400 Subject: [PATCH 102/127] Add amountOut for cancel limitOrderEvent to avoid breaking changes --- x/dex/types/events.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/x/dex/types/events.go b/x/dex/types/events.go index 9b616e26f..b0ab4956f 100644 --- a/x/dex/types/events.go +++ b/x/dex/types/events.go @@ -233,6 +233,12 @@ func CancelLimitOrderEvent( amountOutMaker math.Int, trancheKey string, ) sdk.Event { + pairID := PairID{Token0: token0, Token1: token1} + takerDenom := pairID.MustOppositeToken(makerDenom) + coinsOut := sdk.NewCoins( + sdk.NewCoin(makerDenom, amountOutMaker), + sdk.NewCoin(takerDenom, amountOutTaker), + ) attrs := []sdk.Attribute{ sdk.NewAttribute(sdk.AttributeKeyModule, "dex"), sdk.NewAttribute(sdk.AttributeKeyAction, CancelLimitOrderEventKey), @@ -242,6 +248,8 @@ func CancelLimitOrderEvent( sdk.NewAttribute(AttributeToken1, token1), sdk.NewAttribute(AttributeTokenIn, makerDenom), sdk.NewAttribute(AttributeTokenOut, tokenOut), + // DEPRECATED: `AmountOut` will be removed in the next release + sdk.NewAttribute(AttributeAmountOut, coinsOut.String()), sdk.NewAttribute(AttributeTokenInAmountOut, amountOutMaker.String()), sdk.NewAttribute(AttributeTokenOutAmountOut, amountOutTaker.String()), sdk.NewAttribute(AttributeTrancheKey, trancheKey), From dc65431f8b1af8b6c20c2d2b77ce143b031bd56c Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Thu, 26 Sep 2024 16:19:35 +0300 Subject: [PATCH 103/127] update market map admin --- app/upgrades/types.go | 3 ++- app/upgrades/v5.0.0/constants.go | 3 +++ app/upgrades/v5.0.0/upgrades.go | 18 ++++++++++++++++++ app/upgrades/v5.0.0/upgrades_test.go | 20 ++++++++++++++++++++ 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/app/upgrades/types.go b/app/upgrades/types.go index 51e44ef13..7e1450fb2 100644 --- a/app/upgrades/types.go +++ b/app/upgrades/types.go @@ -13,11 +13,12 @@ import ( slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper" capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" ccvconsumerkeeper "github.com/cosmos/interchain-security/v5/x/ccv/consumer/keeper" - dexkeeper "github.com/neutron-org/neutron/v5/x/dex/keeper" auctionkeeper "github.com/skip-mev/block-sdk/v2/x/auction/keeper" feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper" marketmapkeeper "github.com/skip-mev/slinky/x/marketmap/keeper" + dexkeeper "github.com/neutron-org/neutron/v5/x/dex/keeper" + dynamicfeeskeeper "github.com/neutron-org/neutron/v5/x/dynamicfees/keeper" contractmanagerkeeper "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" diff --git a/app/upgrades/v5.0.0/constants.go b/app/upgrades/v5.0.0/constants.go index dcc1aff40..043690996 100644 --- a/app/upgrades/v5.0.0/constants.go +++ b/app/upgrades/v5.0.0/constants.go @@ -2,12 +2,15 @@ package v500 import ( storetypes "cosmossdk.io/store/types" + "github.com/neutron-org/neutron/v5/app/upgrades" ) const ( // UpgradeName defines the on-chain upgrade name. UpgradeName = "v5.0.0" + + MarketMapAuthorityMultisig = "neutron1anjpluecd0tdc0n8xzc3l5hua4h93wyq0x7v56" ) var Upgrade = upgrades.Upgrade{ diff --git a/app/upgrades/v5.0.0/upgrades.go b/app/upgrades/v5.0.0/upgrades.go index 143db2b7b..fb63577ff 100644 --- a/app/upgrades/v5.0.0/upgrades.go +++ b/app/upgrades/v5.0.0/upgrades.go @@ -5,9 +5,14 @@ import ( "fmt" upgradetypes "cosmossdk.io/x/upgrade/types" + adminmoduletypes "github.com/cosmos/admin-module/v2/x/adminmodule/types" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + marketmapkeeper "github.com/skip-mev/slinky/x/marketmap/keeper" + marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types" + "github.com/neutron-org/neutron/v5/app/upgrades" dexkeeper "github.com/neutron-org/neutron/v5/x/dex/keeper" ) @@ -37,6 +42,11 @@ func CreateUpgradeHandler( } } + err = setMarketMapParams(ctx, keepers.MarketmapKeeper) + if err != nil { + return nil, err + } + ctx.Logger().Info(fmt.Sprintf("Migration {%s} applied", UpgradeName)) return vm, nil } @@ -57,3 +67,11 @@ func upgradeDexPause(ctx sdk.Context, k dexkeeper.Keeper) error { return nil } + +func setMarketMapParams(ctx sdk.Context, marketmapKeeper *marketmapkeeper.Keeper) error { + marketmapParams := marketmaptypes.Params{ + MarketAuthorities: []string{authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), MarketMapAuthorityMultisig}, + Admin: authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), + } + return marketmapKeeper.SetParams(ctx, marketmapParams) +} diff --git a/app/upgrades/v5.0.0/upgrades_test.go b/app/upgrades/v5.0.0/upgrades_test.go index 05cb9eb7a..77fd076a8 100644 --- a/app/upgrades/v5.0.0/upgrades_test.go +++ b/app/upgrades/v5.0.0/upgrades_test.go @@ -5,6 +5,7 @@ import ( "cosmossdk.io/math" upgradetypes "cosmossdk.io/x/upgrade/types" + "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" v500 "github.com/neutron-org/neutron/v5/app/upgrades/v5.0.0" @@ -27,6 +28,25 @@ func (suite *UpgradeTestSuite) SetupTest() { suite.IBCConnectionTestSuite.SetupTest() } +func (suite *UpgradeTestSuite) TestOracleUpgrade() { + app := suite.GetNeutronZoneApp(suite.ChainA) + ctx := suite.ChainA.GetContext() + t := suite.T() + + upgrade := upgradetypes.Plan{ + Name: v500.UpgradeName, + Info: "some text here", + Height: 100, + } + require.NoError(t, app.UpgradeKeeper.ApplyUpgrade(ctx, upgrade)) + + params, err := app.MarketMapKeeper.GetParams(ctx) + suite.Require().NoError(err) + suite.Require().Equal(params.MarketAuthorities[0], "neutron1hxskfdxpp5hqgtjj6am6nkjefhfzj359x0ar3z") + suite.Require().Equal(params.MarketAuthorities[1], v500.MarketMapAuthorityMultisig) + suite.Require().Equal(params.Admin, "neutron1hxskfdxpp5hqgtjj6am6nkjefhfzj359x0ar3z") +} + func (suite *UpgradeTestSuite) TestUpgradeDexPause() { var ( app = suite.GetNeutronZoneApp(suite.ChainA) From 7f205d397b9918fecccb2a96d8045b41cb126ed9 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Thu, 26 Sep 2024 13:51:35 -0300 Subject: [PATCH 104/127] some refactoring and new tests --- x/ibc-rate-limit/client/cli/query.go | 4 +- x/ibc-rate-limit/ibc_middleware_test.go | 105 ++++++++++++++++++++++++ x/ibc-rate-limit/types/tx.go | 4 + 3 files changed, 111 insertions(+), 2 deletions(-) diff --git a/x/ibc-rate-limit/client/cli/query.go b/x/ibc-rate-limit/client/cli/query.go index b2a50e191..14a59bf94 100644 --- a/x/ibc-rate-limit/client/cli/query.go +++ b/x/ibc-rate-limit/client/cli/query.go @@ -33,7 +33,7 @@ func GetParams() *cobra.Command { cmd := &cobra.Command{ Use: "params [flags]", Short: "Get the params for the x/ibc-rate-limit module", - Args: cobra.ExactArgs(0), + Args: cobra.NoArgs, RunE: func(cmd *cobra.Command, _ []string) error { clientCtx, err := client.GetClientQueryContext(cmd) if err != nil { @@ -52,5 +52,5 @@ func GetParams() *cobra.Command { flags.AddQueryFlagsToCmd(cmd) - return nil + return cmd } diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index 788dd1b5d..d6a0136f3 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -360,6 +360,93 @@ func (suite *MiddlewareTestSuite) TestSendTransferReset() { suite.Require().NoError(err) } +// Test rate while having 2 limits (daily & weekly). +// Daily is hit, wait until 'day' ends. Do this twice. Second iteration will hit the 'weekly' quota. +// Then we check that weekly rate limit still hits even after daily quota is refreshed. +func (suite *MiddlewareTestSuite) TestSendTransferDailyReset() { + suite.ConfigureTransferChannel() + quotaPercentage := 4 + suite.initializeEscrow() + // Get the denom and amount to send + denom := sdk.DefaultBondDenom + channel := "channel-2" + + app := suite.GetNeutronZoneApp(suite.ChainA) + + // This is the first one. Inside the tests. It works as expected. + channelValue := CalculateChannelValue(suite.ChainA.GetContext(), denom, app.BankKeeper) + + // The amount to be sent is 2% (weekly quota is 4%, daily is 2%) + quota := channelValue.QuoRaw(int64(100 / quotaPercentage)) + sendAmount := quota.QuoRaw(2) + + fmt.Printf("Testing send rate limiting for denom=%s, channelValue=%s, weekly_quota=%s, daily_quota=%s, sendAmount=%s\n", denom, channelValue, quota, sendAmount, sendAmount) + + // Setup contract + testOwner := sdk.MustAccAddressFromBech32(testutil.TestOwnerAddress) + suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") + quotas1 := suite.BuildChannelQuota("weekly", channel, denom, 604800, 4, 4) + quotas2 := suite.BuildChannelQuota("daily", channel, denom, 86400, 2, 2) + addr := suite.InstantiateRLContract2Quotas(quotas1, quotas2) + suite.RegisterRateLimitingContract(addr) + + // send 1% (daily quota is 1%) + fmt.Printf("Sending %s from A to B. Represented in chain A as wrapped? No", denom) + r, err := suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) + suite.Require().NoError(err) + + // Calculate remaining allowance in the quota + attrs := suite.ExtractAttributes(suite.FindEvent(r.GetEvents(), "wasm")) + fmt.Println(r.GetEvents()) + + used, ok := sdkmath.NewIntFromString(attrs["daily_used_out"]) + suite.Require().True(ok) + + suite.Require().Equal(used, sendAmount) + + // Sending above the daily quota should fail. + _, err = suite.AssertSend(false, suite.MessageFromAToB(denom, sendAmount)) + suite.Require().Error(err) + parts := strings.Split(attrs["daily_period_end"], ".") // Splitting timestamp into secs and nanos + secs, err := strconv.ParseInt(parts[0], 10, 64) + suite.Require().NoError(err) + nanos, err := strconv.ParseInt(parts[1], 10, 64) + suite.Require().NoError(err) + resetTime := time.Unix(secs, nanos) + + // Move chainA forward one block + suite.ChainA.NextBlock() + + // Reset time + one second + oneSecAfterReset := resetTime.Add(time.Second) + suite.Coordinator.IncrementTimeBy(oneSecAfterReset.Sub(suite.Coordinator.CurrentTime)) + + // Sending should succeed again. It hits daily quota for the second time & weekly quota at the same time + r, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sendAmount)) + suite.Require().NoError(err) + + attrs = suite.ExtractAttributes(suite.FindEvent(r.GetEvents(), "wasm")) + + parts = strings.Split(attrs["daily_period_end"], ".") // Splitting timestamp into secs and nanos + secs, err = strconv.ParseInt(parts[0], 10, 64) + suite.Require().NoError(err) + nanos, err = strconv.ParseInt(parts[1], 10, 64) + suite.Require().NoError(err) + resetTime = time.Unix(secs, nanos) + + // Move chainA forward one block + suite.ChainA.NextBlock() + + // Reset time + one second + oneSecAfterResetDayTwo := resetTime.Add(time.Second) + // Now we're waiting for the second 'day' to expire + suite.Coordinator.IncrementTimeBy(oneSecAfterResetDayTwo.Sub(suite.Coordinator.CurrentTime)) + + // Sending should fail. Daily quota is refreshed but weekly is over + // _, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sdkmath.NewInt(2))) + // suite.Require().Error(err) +} + // Test rate limiting on receives func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { quotaPercentage := 4 @@ -610,6 +697,24 @@ func (suite *MiddlewareTestSuite) InstantiateRLContract(quotas string) sdk.AccAd return addr } +func (suite *MiddlewareTestSuite) InstantiateRLContract2Quotas(quotas1 string, quotas2 string) sdk.AccAddress { + app := suite.GetNeutronZoneApp(suite.ChainA) + transferModule := app.AccountKeeper.GetModuleAddress(transfertypes.ModuleName) + initMsgBz := []byte(fmt.Sprintf(`{ + "gov_module": "%s", + "ibc_module":"%s", + "paths": [%s, %s] + }`, + testutil.TestOwnerAddress, transferModule, quotas1, quotas2)) + + contractKeeper := wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) + codeID := uint64(1) + creator := suite.ChainA.SenderAccount.GetAddress() + addr, _, err := contractKeeper.Instantiate(suite.ChainA.GetContext(), codeID, creator, creator, initMsgBz, "rate limiting contract", nil) + suite.Require().NoError(err) + return addr +} + func (suite *MiddlewareTestSuite) RegisterRateLimitingContract(addr []byte) { addrStr, _ := sdk.Bech32ifyAddressBytes("neutron", addr) app := suite.GetNeutronZoneApp(suite.ChainA) diff --git a/x/ibc-rate-limit/types/tx.go b/x/ibc-rate-limit/types/tx.go index 9e486a522..ec4026dc7 100644 --- a/x/ibc-rate-limit/types/tx.go +++ b/x/ibc-rate-limit/types/tx.go @@ -32,6 +32,10 @@ func (msg *MsgUpdateParams) Validate() error { return errorsmod.Wrap(err, "authority is invalid") } + // we allow unsetting the contract + if msg.Params.ContractAddress == "" { + return nil + } if _, err := sdk.AccAddressFromBech32(msg.Params.ContractAddress); err != nil { return errorsmod.Wrap(err, "contract_address is invalid") } From 743d590ee948ebf3752fb82daa17621450c7c10c Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Thu, 26 Sep 2024 15:03:21 -0300 Subject: [PATCH 105/127] regen proto & rm unused file --- .../neutron/ibcratelimit/v1beta1/query.proto | 2 +- proto/neutron/ibcratelimit/v1beta1/query.yml | 10 ----- .../client/queryproto/query.pb.go | 44 +++++++++---------- .../client/queryproto/query.pb.gw.go | 2 +- 4 files changed, 24 insertions(+), 34 deletions(-) delete mode 100644 proto/neutron/ibcratelimit/v1beta1/query.yml diff --git a/proto/neutron/ibcratelimit/v1beta1/query.proto b/proto/neutron/ibcratelimit/v1beta1/query.proto index c9c34f9c0..05ca095f1 100644 --- a/proto/neutron/ibcratelimit/v1beta1/query.proto +++ b/proto/neutron/ibcratelimit/v1beta1/query.proto @@ -13,7 +13,7 @@ service Query { // Params defines a gRPC query method that returns the ibc-rate-limit module's // parameters. rpc Params(ParamsRequest) returns (ParamsResponse) { - option (google.api.http).get = "/osmosis/ibc-rate-limit/v1beta1/params"; + option (google.api.http).get = "/neutron/ibc-rate-limit/v1beta1/params"; } } diff --git a/proto/neutron/ibcratelimit/v1beta1/query.yml b/proto/neutron/ibcratelimit/v1beta1/query.yml deleted file mode 100644 index 544f115c4..000000000 --- a/proto/neutron/ibcratelimit/v1beta1/query.yml +++ /dev/null @@ -1,10 +0,0 @@ -keeper: - path: "github.com/neutron-org/neutron/v4/x/ibc-rate-limit" - struct: "Keeper" -client_path: "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client" -queries: - Params: - proto_wrapper: - query_func: "k.GetParams" - cli: - cmd: "GetParams" diff --git a/x/ibc-rate-limit/client/queryproto/query.pb.go b/x/ibc-rate-limit/client/queryproto/query.pb.go index 94bef00f9..434a85e5f 100644 --- a/x/ibc-rate-limit/client/queryproto/query.pb.go +++ b/x/ibc-rate-limit/client/queryproto/query.pb.go @@ -124,28 +124,28 @@ func init() { } var fileDescriptor_a6095f726b1d3aec = []byte{ - // 326 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x51, 0xcf, 0x4a, 0x3b, 0x31, - 0x18, 0xdc, 0xfc, 0xf8, 0xd9, 0xc3, 0x8a, 0x0a, 0x8b, 0x07, 0x29, 0x25, 0x4a, 0x11, 0xa9, 0x7f, - 0x9a, 0xd0, 0xea, 0x13, 0x14, 0x1f, 0x40, 0x8b, 0x27, 0x0f, 0x42, 0x76, 0x09, 0x31, 0xd0, 0xcd, - 0xb7, 0x4d, 0xb2, 0x45, 0xaf, 0x3e, 0x81, 0xd0, 0xb3, 0xef, 0xd3, 0x63, 0xc1, 0x8b, 0x27, 0x91, - 0xae, 0x0f, 0x22, 0x9b, 0xa4, 0x22, 0x22, 0xa5, 0xa7, 0x4c, 0xbe, 0xcc, 0x0c, 0xf3, 0x4d, 0xe2, - 0x8e, 0xe2, 0xa5, 0xd5, 0xa0, 0xa8, 0x4c, 0x33, 0xcd, 0x2c, 0x1f, 0xc9, 0x5c, 0x5a, 0x3a, 0xe9, - 0xa5, 0xdc, 0xb2, 0x1e, 0x1d, 0x97, 0x5c, 0x3f, 0x92, 0x42, 0x83, 0x85, 0xa4, 0x15, 0x98, 0xe4, - 0x27, 0x93, 0x04, 0x66, 0xf3, 0x24, 0x03, 0x93, 0x83, 0xa1, 0x29, 0x33, 0xdc, 0xcb, 0xbe, 0x4d, - 0x0a, 0x26, 0xa4, 0x62, 0x56, 0x82, 0xf2, 0x4e, 0xcd, 0x5d, 0x01, 0x02, 0x1c, 0xa4, 0x35, 0x0a, - 0xd3, 0x96, 0x00, 0x10, 0x23, 0x4e, 0x59, 0x21, 0x29, 0x53, 0x0a, 0xac, 0x93, 0x98, 0xf0, 0x7a, - 0xbc, 0x32, 0x67, 0xc1, 0x34, 0xcb, 0x03, 0xb5, 0xbd, 0x13, 0x6f, 0x5d, 0xb9, 0xfb, 0x90, 0x8f, - 0x4b, 0x6e, 0x6c, 0xfb, 0x26, 0xde, 0x5e, 0x0e, 0x4c, 0x01, 0xca, 0xf0, 0x64, 0x10, 0x37, 0xbc, - 0x64, 0x0f, 0x1d, 0xa0, 0xce, 0x66, 0xff, 0x90, 0xac, 0x5a, 0x8e, 0x78, 0xf5, 0xe0, 0xff, 0xec, - 0x7d, 0x3f, 0x1a, 0x06, 0x65, 0xff, 0x05, 0xc5, 0x1b, 0xd7, 0xf5, 0xa2, 0xc9, 0x14, 0xc5, 0x0d, - 0x4f, 0x49, 0x4e, 0xd7, 0x31, 0x0a, 0xb9, 0x9a, 0x67, 0xeb, 0x91, 0x7d, 0xe6, 0x36, 0x79, 0x7a, - 0xfd, 0x9c, 0xfe, 0xeb, 0x24, 0x47, 0xd4, 0x35, 0x2d, 0x4d, 0x5d, 0x45, 0xb7, 0x96, 0x75, 0xff, - 0x2a, 0x63, 0x70, 0x37, 0x5b, 0x60, 0x34, 0x5f, 0x60, 0xf4, 0xb1, 0xc0, 0xe8, 0xb9, 0xc2, 0xd1, - 0xbc, 0xc2, 0xd1, 0x5b, 0x85, 0xa3, 0xdb, 0x4b, 0x21, 0xed, 0x7d, 0x99, 0x92, 0x0c, 0x72, 0x1a, - 0x12, 0x74, 0x41, 0x8b, 0x25, 0xa6, 0x93, 0x0b, 0xfa, 0xf0, 0xdb, 0x3c, 0x1b, 0x49, 0xae, 0xac, - 0xff, 0x59, 0x57, 0x73, 0xda, 0x70, 0xc7, 0xf9, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x82, 0x38, - 0x7b, 0x6a, 0x42, 0x02, 0x00, 0x00, + // 323 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xcf, 0x4a, 0x33, 0x31, + 0x14, 0xc5, 0x27, 0x1f, 0x9f, 0x5d, 0x44, 0x54, 0x18, 0x5c, 0x48, 0x29, 0x51, 0x8a, 0x48, 0xfd, + 0xd3, 0x84, 0x56, 0x9f, 0xa0, 0xf8, 0x00, 0x5a, 0x5c, 0xb9, 0x10, 0x32, 0x43, 0x88, 0x81, 0x4e, + 0xee, 0x34, 0xc9, 0x14, 0xdd, 0xfa, 0x04, 0x42, 0xd7, 0xbe, 0x4f, 0x97, 0x05, 0x37, 0xae, 0x44, + 0x5a, 0x1f, 0x44, 0x66, 0x92, 0x96, 0x22, 0x52, 0xba, 0xca, 0xcd, 0xcd, 0x39, 0x3f, 0xee, 0x3d, + 0xc1, 0x2d, 0x2d, 0x0a, 0x67, 0x40, 0x33, 0x95, 0xa4, 0x86, 0x3b, 0x31, 0x50, 0x99, 0x72, 0x6c, + 0xd4, 0x49, 0x84, 0xe3, 0x1d, 0x36, 0x2c, 0x84, 0x79, 0xa6, 0xb9, 0x01, 0x07, 0x71, 0x23, 0x28, + 0xe9, 0xaa, 0x92, 0x06, 0x65, 0xfd, 0x2c, 0x05, 0x9b, 0x81, 0x65, 0x09, 0xb7, 0xc2, 0xdb, 0x96, + 0x90, 0x9c, 0x4b, 0xa5, 0xb9, 0x53, 0xa0, 0x3d, 0xa9, 0xbe, 0x2f, 0x41, 0x42, 0x55, 0xb2, 0xb2, + 0x0a, 0xdd, 0x86, 0x04, 0x90, 0x03, 0xc1, 0x78, 0xae, 0x18, 0xd7, 0x1a, 0x5c, 0x65, 0xb1, 0xe1, + 0xf5, 0x74, 0xed, 0x9c, 0x39, 0x37, 0x3c, 0x0b, 0xd2, 0xe6, 0x1e, 0xde, 0xb9, 0xa9, 0xee, 0x7d, + 0x31, 0x2c, 0x84, 0x75, 0xcd, 0x3b, 0xbc, 0xbb, 0x68, 0xd8, 0x1c, 0xb4, 0x15, 0x71, 0x0f, 0xd7, + 0xbc, 0xe5, 0x00, 0x1d, 0xa1, 0xd6, 0x76, 0xf7, 0x98, 0xae, 0x5b, 0x8e, 0x7a, 0x77, 0xef, 0xff, + 0xe4, 0xf3, 0x30, 0xea, 0x07, 0x67, 0xf7, 0x0d, 0xe1, 0xad, 0xdb, 0x72, 0xd1, 0x78, 0x8c, 0x70, + 0xcd, 0x4b, 0xe2, 0xf3, 0x4d, 0x40, 0x61, 0xae, 0xfa, 0xc5, 0x66, 0x62, 0x3f, 0x73, 0x93, 0xbe, + 0xbc, 0x7f, 0x8f, 0xff, 0xb5, 0xe2, 0x13, 0xb6, 0x12, 0x45, 0xbb, 0xb4, 0xb5, 0xff, 0x0a, 0xa3, + 0xf7, 0x30, 0x99, 0x11, 0x34, 0x9d, 0x11, 0xf4, 0x35, 0x23, 0xe8, 0x75, 0x4e, 0xa2, 0xe9, 0x9c, + 0x44, 0x1f, 0x73, 0x12, 0xdd, 0x5f, 0x4b, 0xe5, 0x1e, 0x8b, 0x84, 0xa6, 0x90, 0x2d, 0x58, 0x6d, + 0x30, 0x72, 0xc9, 0x1d, 0x5d, 0xb1, 0xa7, 0xdf, 0xf0, 0x74, 0xa0, 0x84, 0x76, 0xfe, 0x67, 0xab, + 0x98, 0x93, 0x5a, 0x75, 0x5c, 0xfe, 0x04, 0x00, 0x00, 0xff, 0xff, 0xb7, 0x7e, 0xd8, 0x5f, 0x42, + 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/ibc-rate-limit/client/queryproto/query.pb.gw.go b/x/ibc-rate-limit/client/queryproto/query.pb.gw.go index 24a070e4a..c9d226b26 100644 --- a/x/ibc-rate-limit/client/queryproto/query.pb.gw.go +++ b/x/ibc-rate-limit/client/queryproto/query.pb.gw.go @@ -145,7 +145,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"osmosis", "ibc-rate-limit", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"neutron", "ibc-rate-limit", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( From fba0200a0d2353fffe0c143a24cfd84bf0d23a38 Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Fri, 27 Sep 2024 12:15:34 +0300 Subject: [PATCH 106/127] update cosmos sdk version --- go.mod | 4 ++-- go.sum | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 08d002738..5ef234b49 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( cosmossdk.io/x/feegrant v0.1.1 cosmossdk.io/x/tx v0.13.5 cosmossdk.io/x/upgrade v0.1.4 - github.com/CosmWasm/wasmd v0.51.0 + github.com/CosmWasm/wasmd v0.53.0 github.com/CosmWasm/wasmvm/v2 v2.1.3 github.com/cometbft/cometbft v0.38.11 github.com/cosmos/admin-module/v2 v2.0.0-20240430142959-8b3328d1b1a2 @@ -221,7 +221,7 @@ replace ( github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 github.com/CosmWasm/wasmd => github.com/neutron-org/wasmd v0.53.0-neutron github.com/cosmos/admin-module/v2 => github.com/neutron-org/admin-module/v2 v2.0.2 - github.com/cosmos/cosmos-sdk => github.com/neutron-org/cosmos-sdk v0.50.8-neutron + github.com/cosmos/cosmos-sdk => github.com/neutron-org/cosmos-sdk v0.50.9-neutron.0.20240924163649-207f347e9c53 // explicitely replace iavl to v1.2.0 cause sometimes go mod tidy uses not right version github.com/cosmos/iavl => github.com/cosmos/iavl v1.2.0 github.com/cosmos/interchain-security/v5 => github.com/cosmos/interchain-security/v5 v5.0.0-20240802125602-fa1e09444aae diff --git a/go.sum b/go.sum index c8c82dde1..93d66b738 100644 --- a/go.sum +++ b/go.sum @@ -847,8 +847,8 @@ github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/neutron-org/admin-module/v2 v2.0.2 h1:XDDFWjvkVBKRf3lBFCazT1zAXZ3dHX8GaZ4ol8Hdk8I= github.com/neutron-org/admin-module/v2 v2.0.2/go.mod h1:RfOyabXsdJ5btcOKyKPZDYiZhtuKFubbJMOb8EJZtvA= -github.com/neutron-org/cosmos-sdk v0.50.8-neutron h1:L+4obYi/KkkmS05gBlXNF+FhipHYTl0iO3EkmpMBXkE= -github.com/neutron-org/cosmos-sdk v0.50.8-neutron/go.mod h1:Zb+DgHtiByNwgj71IlJBXwOq6dLhtyAq3AgqpXm/jHo= +github.com/neutron-org/cosmos-sdk v0.50.9-neutron.0.20240924163649-207f347e9c53 h1:7FJOHOt9F0oea0b5jrn090u/zn7+LdBmT6ZDmrJtTqs= +github.com/neutron-org/cosmos-sdk v0.50.9-neutron.0.20240924163649-207f347e9c53/go.mod h1:TMH6wpoYBcg7Cp5BEg8fneLr+8XloNQkf2MRNF9V6JE= github.com/neutron-org/wasmd v0.53.0-neutron h1:Dv1VP1+QjYeb6RMo03sxw0Pe42JU0MPxefwNaG22KVs= github.com/neutron-org/wasmd v0.53.0-neutron/go.mod h1:FJl/aWjdpGof3usAMFQpDe07Rkx77PUzp0cygFMOvtw= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= From 3c9e9907d7e8b191b6b06ba2ac4faef065c8ebe1 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Fri, 27 Sep 2024 08:10:48 -0300 Subject: [PATCH 107/127] rm unoptimised file and right multi-quota init --- x/ibc-rate-limit/.cargo/config.toml | 3 --- x/ibc-rate-limit/artifacts/checksums.txt | 1 - x/ibc-rate-limit/artifacts/rate_limiter.wasm | Bin 407455 -> 0 bytes x/ibc-rate-limit/bytecode/rate_limiter.wasm | Bin 1938280 -> 0 bytes x/ibc-rate-limit/ibc_middleware_test.go | 26 ++++++++++++------- 5 files changed, 17 insertions(+), 13 deletions(-) delete mode 100644 x/ibc-rate-limit/.cargo/config.toml delete mode 100644 x/ibc-rate-limit/artifacts/checksums.txt delete mode 100644 x/ibc-rate-limit/artifacts/rate_limiter.wasm diff --git a/x/ibc-rate-limit/.cargo/config.toml b/x/ibc-rate-limit/.cargo/config.toml deleted file mode 100644 index f31de6c2a..000000000 --- a/x/ibc-rate-limit/.cargo/config.toml +++ /dev/null @@ -1,3 +0,0 @@ -[alias] -wasm = "build --release --target wasm32-unknown-unknown" -unit-test = "test --lib" diff --git a/x/ibc-rate-limit/artifacts/checksums.txt b/x/ibc-rate-limit/artifacts/checksums.txt deleted file mode 100644 index ec9f58b8f..000000000 --- a/x/ibc-rate-limit/artifacts/checksums.txt +++ /dev/null @@ -1 +0,0 @@ -d73c99bc1b4e460435ad1453a42c44c2a85a02347691a313ce03095327441b38 rate_limiter.wasm diff --git a/x/ibc-rate-limit/artifacts/rate_limiter.wasm b/x/ibc-rate-limit/artifacts/rate_limiter.wasm deleted file mode 100644 index 7627ff34c56a87610dece7d4565200ad920e3969..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 407455 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

cM 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

^I(q}i#B&6hl$hmUV{oOQ1kgxc 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

puU+LO*?zjwn_V<|HdZmi2j?<()6SB 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%0DyaL?iS% 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�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 RO?V|fD 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

UVx|k>Lp5N&K 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 diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index d6a0136f3..a30c0481c 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -227,6 +227,12 @@ func (suite *MiddlewareTestSuite) BuildChannelQuota(name, channel, denom string, `, channel, denom, name, duration, sendPercentage, recvPercentage) } +func (suite *MiddlewareTestSuite) BuildChannelQuotaWith2Quotas(name, channel, denom string, duration1 uint32, name2 string, sendPercentage1, recvPercentage1, duration2, sendPercentage2, recvPercentage2 uint32) string { + return fmt.Sprintf(` + {"channel_id": "%s", "denom": "%s", "quotas": [{"name":"%s", "duration": %d, "send_recv":[%d, %d]},{"name":"%s", "duration": %d, "send_recv":[%d, %d]}] } + `, channel, denom, name, duration1, sendPercentage1, recvPercentage1, name2, duration2, sendPercentage2, recvPercentage2) +} + // Tests // Test that Sending IBC messages works when the middleware isn't configured @@ -385,12 +391,11 @@ func (suite *MiddlewareTestSuite) TestSendTransferDailyReset() { // Setup contract testOwner := sdk.MustAccAddressFromBech32(testutil.TestOwnerAddress) suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") - quotas1 := suite.BuildChannelQuota("weekly", channel, denom, 604800, 4, 4) - quotas2 := suite.BuildChannelQuota("daily", channel, denom, 86400, 2, 2) - addr := suite.InstantiateRLContract2Quotas(quotas1, quotas2) + quotas := suite.BuildChannelQuotaWith2Quotas("weekly", channel, denom, 604800, "daily", 4, 4, 86400, 2, 2) + addr := suite.InstantiateRLContract(quotas) suite.RegisterRateLimitingContract(addr) - // send 1% (daily quota is 1%) + // send 2% (daily quota is 2%) fmt.Printf("Sending %s from A to B. Represented in chain A as wrapped? No", denom) r, err := suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) suite.Require().NoError(err) @@ -407,6 +412,7 @@ func (suite *MiddlewareTestSuite) TestSendTransferDailyReset() { // Sending above the daily quota should fail. _, err = suite.AssertSend(false, suite.MessageFromAToB(denom, sendAmount)) suite.Require().Error(err) + // Now we 'wait' until 'day' ends parts := strings.Split(attrs["daily_period_end"], ".") // Splitting timestamp into secs and nanos secs, err := strconv.ParseInt(parts[0], 10, 64) suite.Require().NoError(err) @@ -443,8 +449,8 @@ func (suite *MiddlewareTestSuite) TestSendTransferDailyReset() { suite.Coordinator.IncrementTimeBy(oneSecAfterResetDayTwo.Sub(suite.Coordinator.CurrentTime)) // Sending should fail. Daily quota is refreshed but weekly is over - // _, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sdkmath.NewInt(2))) - // suite.Require().Error(err) + _, err = suite.AssertSend(false, suite.MessageFromAToB(sdk.DefaultBondDenom, sdkmath.NewInt(2))) + suite.Require().Error(err) } // Test rate limiting on receives @@ -697,15 +703,17 @@ func (suite *MiddlewareTestSuite) InstantiateRLContract(quotas string) sdk.AccAd return addr } -func (suite *MiddlewareTestSuite) InstantiateRLContract2Quotas(quotas1 string, quotas2 string) sdk.AccAddress { +func (suite *MiddlewareTestSuite) InstantiateRLContract2Quotas(quotas1 string) sdk.AccAddress { app := suite.GetNeutronZoneApp(suite.ChainA) transferModule := app.AccountKeeper.GetModuleAddress(transfertypes.ModuleName) initMsgBz := []byte(fmt.Sprintf(`{ "gov_module": "%s", "ibc_module":"%s", - "paths": [%s, %s] + "paths": [%s] }`, - testutil.TestOwnerAddress, transferModule, quotas1, quotas2)) + testutil.TestOwnerAddress, transferModule, quotas1)) + + fmt.Println(string(initMsgBz)) contractKeeper := wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) codeID := uint64(1) From be12fd84ca6ed7ddcff4ac38aae7e5c449ddfe8d Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Fri, 27 Sep 2024 08:23:44 -0300 Subject: [PATCH 108/127] move some values to constants, wrap some errors --- testutil/test_helpers.go | 15 +++++++++++---- x/ibc-rate-limit/ibc_module.go | 2 +- x/ibc-rate-limit/rate_limit.go | 10 +++++----- x/ibc-rate-limit/types/constants.go | 1 + 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/testutil/test_helpers.go b/testutil/test_helpers.go index a60efd6a7..aaaa6c5ab 100644 --- a/testutil/test_helpers.go +++ b/testutil/test_helpers.go @@ -75,6 +75,13 @@ var ( })) ) +const ( + One = 1 + Two = 2 + Three = 3 + Four = 4 +) + func init() { // ibctesting.DefaultTestingAppInit = SetupTestingApp() config.GetDefaultConfig() @@ -347,7 +354,7 @@ func testHomeDir(chainID string) string { // NewCoordinator initializes Coordinator with interchain security dummy provider and 2 neutron consumer chains func NewProviderConsumerCoordinator(t *testing.T) *ibctesting.Coordinator { coordinator := ibctesting.NewCoordinator(t, 0) - chainID := ibctesting.GetChainID(1) + chainID := ibctesting.GetChainID(One) ibctesting.DefaultTestingAppInit = icssimapp.ProviderAppIniter coordinator.Chains[chainID] = ibctesting.NewTestChain(t, coordinator, chainID) @@ -355,16 +362,16 @@ func NewProviderConsumerCoordinator(t *testing.T) *ibctesting.Coordinator { _ = config.GetDefaultConfig() sdk.SetAddrCacheEnabled(false) - chainID = ibctesting.GetChainID(2) + chainID = ibctesting.GetChainID(Two) ibctesting.DefaultTestingAppInit = SetupTestingApp(cmttypes.TM2PB.ValidatorUpdates(providerChain.Vals)) coordinator.Chains[chainID] = ibctesting.NewTestChainWithValSet(t, coordinator, chainID, providerChain.Vals, providerChain.Signers) - chainID = ibctesting.GetChainID(3) + chainID = ibctesting.GetChainID(Three) coordinator.Chains[chainID] = ibctesting.NewTestChainWithValSet(t, coordinator, chainID, providerChain.Vals, providerChain.Signers) - chainID = ibctesting.GetChainID(4) + chainID = ibctesting.GetChainID(Four) coordinator.Chains[chainID] = ibctesting.NewTestChainWithValSet(t, coordinator, chainID, providerChain.Vals, providerChain.Signers) diff --git a/x/ibc-rate-limit/ibc_module.go b/x/ibc-rate-limit/ibc_module.go index bad77dbaf..d7e4bb172 100644 --- a/x/ibc-rate-limit/ibc_module.go +++ b/x/ibc-rate-limit/ibc_module.go @@ -143,7 +143,7 @@ func (im *IBCModule) OnRecvPacket( err := CheckAndUpdateRateLimits(ctx, im.ics4Middleware.ContractKeeper, "recv_packet", contract, packet) if err != nil { - if strings.Contains(err.Error(), "rate limit exceeded") { + if strings.Contains(err.Error(), types.RateLimitExceededSubStr) { return utils.NewEmitErrorAcknowledgement(ctx, types.ErrRateLimitExceeded) } fullError := errorsmod.Wrap(types.ErrContractError, err.Error()) diff --git a/x/ibc-rate-limit/rate_limit.go b/x/ibc-rate-limit/rate_limit.go index 67945d02b..27ffd7f2f 100644 --- a/x/ibc-rate-limit/rate_limit.go +++ b/x/ibc-rate-limit/rate_limit.go @@ -31,7 +31,7 @@ func CheckAndUpdateRateLimits(ctx sdk.Context, contractKeeper *wasmkeeper.Permis packet, ) if err != nil { - return err + return errorsmod.Wrap(err, "failed to CheckAndUpdateRateLimits") } _, err = contractKeeper.Sudo(ctx, contractAddr, sendPacketMsg) @@ -56,18 +56,18 @@ func UndoSendRateLimit(ctx sdk.Context, contractKeeper *wasmkeeper.PermissionedK ) error { contractAddr, err := sdk.AccAddressFromBech32(contract) if err != nil { - return err + return errorsmod.Wrap(err, "failed to UndoSendRateLimit") } unwrapped, err := unwrapPacket(packet) if err != nil { - return err + return errorsmod.Wrap(err, "failed to UndoSendRateLimit") } msg := UndoSendMsg{UndoSend: UndoPacketMsg{Packet: unwrapped}} asJSON, err := json.Marshal(msg) if err != nil { - return err + return errorsmod.Wrap(err, "failed to UndoSendRateLimit") } _, err = contractKeeper.Sudo(ctx, contractAddr, asJSON) @@ -146,7 +146,7 @@ func BuildWasmExecMsg(msgType string, packet exported.PacketI) ([]byte, error) { } if err != nil { - return []byte{}, err + return []byte{}, errorsmod.Wrap(err, "failed to BuildWasmExecMsg") } return asJSON, nil diff --git a/x/ibc-rate-limit/types/constants.go b/x/ibc-rate-limit/types/constants.go index 33f1fd9ed..1332e8e53 100644 --- a/x/ibc-rate-limit/types/constants.go +++ b/x/ibc-rate-limit/types/constants.go @@ -1,3 +1,4 @@ package types const MaxSupportedIBCReceiverAddressLength = 4096 +const RateLimitExceededSubStr = "rate limit exceeded" From 437843a3674d5412e0b4bde4b044e39a26b9d148 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Fri, 27 Sep 2024 08:24:08 -0300 Subject: [PATCH 109/127] modify readme to get rid of osmo mentions --- x/ibc-rate-limit/README.md | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/x/ibc-rate-limit/README.md b/x/ibc-rate-limit/README.md index 103bbd88e..34165427e 100644 --- a/x/ibc-rate-limit/README.md +++ b/x/ibc-rate-limit/README.md @@ -1,9 +1,9 @@ # IBC Rate Limit The IBC Rate Limit module is responsible for adding a governance-configurable rate limit to IBC transfers. -This is a safety control, intended to protect assets on osmosis in event of: +This is a safety control, intended to protect assets on Neutron in event of: -* a bug/hack on osmosis +* a bug/hack on Neutron * a bug/hack on the counter-party chain * a bug/hack in IBC itself @@ -11,7 +11,7 @@ This is done in exchange for a potential (one-way) bridge liveness tradeoff, in The architecture of this package is a minimal go package which implements an [IBC Middleware](https://github.com/cosmos/ibc-go/blob/f57170b1d4dd202a3c6c1c61dcf302b6a9546405/docs/ibc/middleware/develop.md) that wraps the [ICS20 transfer](https://ibc.cosmos.network/main/apps/transfer/overview.html) app, and calls into a cosmwasm contract. The cosmwasm contract then has all of the actual IBC rate limiting logic. -The Cosmwasm code can be found in the [`contracts`](./contracts/) package, with bytecode findable in the [`bytecode`](./bytecode/) folder. The cosmwasm VM usage allows Osmosis chain governance to choose to change this safety control with no hard forks, via a parameter change proposal, a great mitigation for faster threat adaptavity. +The Cosmwasm code can be found in the [`contracts`](./contracts/) package, with bytecode findable in the [`bytecode`](./bytecode/) folder. The cosmwasm VM usage allows Neutron chain governance (Security SubDAI) to choose to change this safety control with no hard forks, via a parameter change proposal, a great mitigation for faster threat adaptavity. The status of the module is being in a state suitable for some initial governance settable rate limits for high value bridged assets. Its not in its long term / end state for all channels by any means, but does act as a strong protection we @@ -26,9 +26,9 @@ The motivation of IBC-rate-limit comes from the empirical observations of blockc - [Wormhole Bridge Hack ($326 million)](https://rekt.news/wormhole-rekt/) - [Nomad Bridge Hack ($190 million)](https://rekt.news/nomad-rekt/) - [Harmony Bridge Hack ($100 million)](https://rekt.news/harmony-rekt/) - (Would require rate limit + monitoring) -- [Dragonberry IBC bug](https://forum.cosmos.network/t/ibc-security-advisory-dragonberry/7702) (can't yet disclose amount at risk, but was saved due to being found first by altruistic Osmosis core developers) +- [Dragonberry IBC bug](https://forum.cosmos.network/t/ibc-security-advisory-dragonberry/7702) (can't yet disclose amount at risk, but was saved due to being found first by altruistic Neutron core developers) -In the presence of a software bug on Osmosis, IBC itself, or on a counterparty chain, we would like to prevent the bridge from being fully depegged. +In the presence of a software bug on Neutron, IBC itself, or on a counterparty chain, we would like to prevent the bridge from being fully depegged. This stems from the idea that a 30% asset depeg is ~infinitely better than a 100% depeg. Its _crazy_ that today these complex bridged assets can instantly go to 0 in event of bug. The goal of a rate limit is to raise an alert that something has potentially gone wrong, allowing validators and developers to have time to analyze, react, and protect larger portions of user funds. @@ -50,9 +50,9 @@ We do all of our rate limits based on the _net flow_ of assets on a channel pair We currently envision creating two kinds of rate limits: * Per denomination rate limits - - allows safety statements like "Only 30% of Stars on Osmosis can flow out in one day" or "The amount of Atom on Osmosis can at most double per day". + - allows safety statements like "Only 30% of Atom on Neutron can flow out in one day" or "The amount of Atom on Neutron can at most double per day". * Per channel rate limits - - Limit the total inflow and outflow on a given IBC channel, based on "USDC" equivalent, using Osmosis as the price oracle. + - Limit the total inflow and outflow on a given IBC channel, based on "USDC" equivalent, using Neutron as the price oracle. We currently only implement per denomination rate limits for non-native assets. We do not yet implement channel based rate limits. @@ -99,11 +99,11 @@ It does get more complex when the counterparty chain is itself a DEX, but this i ### Outflow parameterization -The "Outflow" side of a rate limit is protection against a bug on Osmosis OR IBC. +The "Outflow" side of a rate limit is protection against a bug on Neutron OR IBC. This has potential for much more user-frustrating issues, if set too low. E.g. if there's some event that causes many people to suddenly withdraw many STARS or many USDC. -So this parameterization has to contend with being a tradeoff of withdrawal liveness in high volatility periods vs being a crucial safety rail, in event of on-Osmosis bug. +So this parameterization has to contend with being a tradeoff of withdrawal liveness in high volatility periods vs being a crucial safety rail, in event of on-Neutron bug. TODO: Better fill out @@ -191,8 +191,8 @@ All of these messages receive the packet from the chain and extract the necessar To determine if a packet should be rate limited, we need: -* Channel: The channel on the Osmosis side: `packet.SourceChannel` for sends, and `packet.DestinationChannel` for receives. -* Denom: The denom of the token being transferred as known on the Osmosis side (more on that below) +* Channel: The channel on the Neutron side: `packet.SourceChannel` for sends, and `packet.DestinationChannel` for receives. +* Denom: The denom of the token being transferred as known on the Neutron side (more on that below) * Channel Value: The total value of the channel denominated in `Denom` (i.e.: channel-17 is worth 10k osmo). * Funds: the amount being transferred @@ -201,7 +201,7 @@ The contract also supports quotas on a custom channel called "any" that is check transfer channel or the "any" channel have a quota that has been filled, the transaction will be rate limited. #### Notes on Denom -We always use the the denom as represented on Osmosis. For native assets that is the local denom, and for non-native +We always use the the denom as represented on Neutron. For native assets that is the local denom, and for non-native assets it's the "ibc" prefix and the sha256 hash of the denom trace (`ibc/...`). ##### Sends @@ -216,7 +216,7 @@ is built on the `relay.SendTransfer()` in the transfer module and then passed to ##### Receives -This behaves slightly different if the asset is an osmosis asset that was sent to the counterparty and is being +This behaves slightly different if the asset is an Neutron asset that was sent to the counterparty and is being returned to the chain, or if the asset is being received by the chain and originates on the counterparty. In ibc this is called being a "source" or a "sink" respectively. @@ -230,16 +230,16 @@ If the chain is the source for the denom, there are two possibilities: #### Notes on Channel Value We have iterated on different strategies for calculating the channel value. Our preferred strategy is the following: -* For non-native tokens (`ibc/...`), the channel value should be the supply of those tokens in Osmosis +* For non-native tokens (`ibc/...`), the channel value should be the supply of those tokens in Neutron * For native tokens, the channel value should be the total amount of tokens in escrow across all ibc channels -The later ensures the limits are lower and represent the amount of native tokens that exist outside Osmosis. This is +The later ensures the limits are lower and represent the amount of native tokens that exist outside Neutron. This is beneficial as we assume the majority of native tokens exist on the native chain and the amount "normal" ibc transfers is proportional to the tokens that have left the chain. This strategy cannot be implemented at the moment because IBC does not track the amount of tokens in escrow across -all channels ([github issue](https://github.com/cosmos/ibc-go/issues/2664)). Instead, we use the current supply on -Osmosis for all denoms (i.e.: treat native and non-native tokens the same way). Once that ticket is fixed, we will +all channels ([github issue](https://github.com/cosmos/ibc-go/issues/2664)). Instead, we use the current supply on +Neutron for all denoms (i.e.: treat native and non-native tokens the same way). Once that ticket is fixed, we will update this strategy. ##### Caching @@ -258,8 +258,6 @@ The rate limit middleware wraps the `transferIBCModule` and is added as the entr The module is also provided to the underlying `transferIBCModule` as its `ICS4Wrapper`; previously, this would have pointed to a channel, which also implements the `ICS4Wrapper` interface. -This integration can be seen in [osmosis/app/keepers/keepers.go](https://github.com/osmosis-labs/osmosis/blob/main/app/keepers/keepers.go) - ## Testing strategy @@ -304,4 +302,4 @@ Not yet highlighted * Could imagine tieng it into looking at AMM volatility, or off-chain oracles * but these are both things we should be wary of security bugs in. * Maybe [constraint based programming with tracking of provenance](https://youtu.be/HB5TrK7A4pI?t=2852) as a solution -* Analyze changing denom-based rate limits, to just overall withdrawal amount for Osmosis \ No newline at end of file +* Analyze changing denom-based rate limits, to just overall withdrawal amount for Neutron From 460a74216ba7eaaa3235c0339e1d59546382f620 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Fri, 27 Sep 2024 08:54:10 -0300 Subject: [PATCH 110/127] rework module structure: unify it acc to rest modules --- .gitignore | 4 - app/app.go | 13 +- .../neutron/ibcratelimit/v1beta1/query.proto | 8 +- x/ibc-rate-limit/client/cli/query.go | 5 +- x/ibc-rate-limit/client/grpc/grpc_query.go | 31 ---- x/ibc-rate-limit/client/query_proto_wrap.go | 21 --- x/ibc-rate-limit/keeper/grpc_query_params.go | 20 +++ .../{ibcratelimitmodule => }/module.go | 14 +- .../module_simulation.go | 2 +- .../{client/queryproto => types}/query.pb.go | 154 +++++++++--------- .../queryproto => types}/query.pb.gw.go | 8 +- 11 files changed, 118 insertions(+), 162 deletions(-) delete mode 100644 x/ibc-rate-limit/client/grpc/grpc_query.go delete mode 100644 x/ibc-rate-limit/client/query_proto_wrap.go create mode 100644 x/ibc-rate-limit/keeper/grpc_query_params.go rename x/ibc-rate-limit/{ibcratelimitmodule => }/module.go (87%) rename x/ibc-rate-limit/{ibcratelimitmodule => }/module_simulation.go (98%) rename x/ibc-rate-limit/{client/queryproto => types}/query.pb.go (63%) rename x/ibc-rate-limit/{client/queryproto => types}/query.pb.gw.go (98%) diff --git a/.gitignore b/.gitignore index 225c53b1b..15d713cbc 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,3 @@ data .mutagen.yml vendor/ .testchains - -x/ibc-rate-limit/contracts/rate-limiter/target/ - -x/ibc-rate-limit/target/ diff --git a/app/app.go b/app/app.go index 1c5a99a5c..11bf55926 100644 --- a/app/app.go +++ b/app/app.go @@ -16,7 +16,7 @@ import ( "github.com/neutron-org/neutron/v4/x/dynamicfees" dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/ibcratelimitmodule" + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit" "cosmossdk.io/client/v2/autocli" "cosmossdk.io/core/appmodule" @@ -132,7 +132,6 @@ import ( ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck ibcconnectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" - ibcratelimit "github.com/neutron-org/neutron/v4/x/ibc-rate-limit" ibcratelimitkeeper "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/keeper" ibcratelimittypes "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" //nolint:staticcheck @@ -272,7 +271,7 @@ var ( ), ibchooks.AppModuleBasic{}, packetforward.AppModuleBasic{}, - ibcratelimitmodule.AppModuleBasic{}, + ibcratelimit.AppModuleBasic{}, auction.AppModuleBasic{}, globalfee.AppModule{}, feemarket.AppModuleBasic{}, @@ -621,7 +620,7 @@ func New( app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( appCodec, keys[icacontrollertypes.StoreKey], app.GetSubspace(icacontrollertypes.SubModuleName), - app.RateLimitingICS4Wrapper, // defiened in wireisc20 + app.RateLimitingICS4Wrapper, // defined in wireisc20 app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, scopedICAControllerKeeper, app.MsgServiceRouter(), authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), @@ -629,7 +628,7 @@ func New( app.ICAHostKeeper = icahostkeeper.NewKeeper( appCodec, keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName), - app.RateLimitingICS4Wrapper, // defiened in wireisc20 + app.RateLimitingICS4Wrapper, // defined in wireisc20 app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, app.AccountKeeper, scopedICAHostKeeper, app.MsgServiceRouter(), authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), @@ -821,7 +820,7 @@ func New( &app.BankKeeper, nil, nil, - app.RateLimitingICS4Wrapper, // defiened in wireisc20 + app.RateLimitingICS4Wrapper, // defined in wireisc20 app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, scopedWasmKeeper, @@ -859,7 +858,7 @@ func New( ) interchainTxsModule := interchaintxs.NewAppModule(appCodec, app.InterchainTxsKeeper, app.AccountKeeper, app.BankKeeper) contractManagerModule := contractmanager.NewAppModule(appCodec, app.ContractManagerKeeper) - ibcRateLimitmodule := ibcratelimitmodule.NewAppModule(appCodec, app.RateLimitingICS4Wrapper.IbcratelimitKeeper, app.RateLimitingICS4Wrapper) + ibcRateLimitmodule := ibcratelimit.NewAppModule(appCodec, app.RateLimitingICS4Wrapper.IbcratelimitKeeper, app.RateLimitingICS4Wrapper) ibcHooksModule := ibchooks.NewAppModule(app.AccountKeeper) transferModule := transferSudo.NewAppModule(app.TransferKeeper) diff --git a/proto/neutron/ibcratelimit/v1beta1/query.proto b/proto/neutron/ibcratelimit/v1beta1/query.proto index 05ca095f1..07ce62400 100644 --- a/proto/neutron/ibcratelimit/v1beta1/query.proto +++ b/proto/neutron/ibcratelimit/v1beta1/query.proto @@ -6,22 +6,22 @@ import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; import "neutron/ibcratelimit/v1beta1/params.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client/queryproto"; +option go_package = "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types"; // Query defines the gRPC querier service. service Query { // Params defines a gRPC query method that returns the ibc-rate-limit module's // parameters. - rpc Params(ParamsRequest) returns (ParamsResponse) { + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { option (google.api.http).get = "/neutron/ibc-rate-limit/v1beta1/params"; } } // ParamsRequest is the request type for the Query/Params RPC method. -message ParamsRequest {} +message QueryParamsRequest {} // aramsResponse is the response type for the Query/Params RPC method. -message ParamsResponse { +message QueryParamsResponse { // params defines the parameters of the module. Params params = 1 [(gogoproto.nullable) = false]; } diff --git a/x/ibc-rate-limit/client/cli/query.go b/x/ibc-rate-limit/client/cli/query.go index 14a59bf94..5eefda027 100644 --- a/x/ibc-rate-limit/client/cli/query.go +++ b/x/ibc-rate-limit/client/cli/query.go @@ -5,7 +5,6 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client/queryproto" "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" "github.com/spf13/cobra" ) @@ -39,9 +38,9 @@ func GetParams() *cobra.Command { if err != nil { return err } - queryClient := queryproto.NewQueryClient(clientCtx) + queryClient := types.NewQueryClient(clientCtx) - res, err := queryClient.Params(cmd.Context(), &queryproto.ParamsRequest{}) + res, err := queryClient.Params(cmd.Context(), &types.QueryParamsRequest{}) if err != nil { return err } diff --git a/x/ibc-rate-limit/client/grpc/grpc_query.go b/x/ibc-rate-limit/client/grpc/grpc_query.go deleted file mode 100644 index c43c18349..000000000 --- a/x/ibc-rate-limit/client/grpc/grpc_query.go +++ /dev/null @@ -1,31 +0,0 @@ -package grpc - -// THIS FILE IS GENERATED CODE, DO NOT EDIT -// SOURCE AT `proto/osmosis/ibcratelimit/v1beta1/query.yml` - -import ( - context "context" - - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client/queryproto" -) - -type Querier struct { - Q client.Querier -} - -var _ queryproto.QueryServer = Querier{} - -func (q Querier) Params(grpcCtx context.Context, - req *queryproto.ParamsRequest, -) (*queryproto.ParamsResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "empty request") - } - ctx := sdk.UnwrapSDKContext(grpcCtx) - return q.Q.Params(ctx, *req) -} diff --git a/x/ibc-rate-limit/client/query_proto_wrap.go b/x/ibc-rate-limit/client/query_proto_wrap.go deleted file mode 100644 index 364479b2d..000000000 --- a/x/ibc-rate-limit/client/query_proto_wrap.go +++ /dev/null @@ -1,21 +0,0 @@ -package client - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - - ibcratelimit "github.com/neutron-org/neutron/v4/x/ibc-rate-limit" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client/queryproto" -) - -// This file should evolve to being code gen'd, off of `proto/twap/v1beta/query.yml` - -type Querier struct { - K ibcratelimit.ICS4Wrapper -} - -func (q Querier) Params(ctx sdk.Context, - _ queryproto.ParamsRequest, -) (*queryproto.ParamsResponse, error) { - params := q.K.GetParams(ctx) - return &queryproto.ParamsResponse{Params: params}, nil -} diff --git a/x/ibc-rate-limit/keeper/grpc_query_params.go b/x/ibc-rate-limit/keeper/grpc_query_params.go new file mode 100644 index 000000000..4621ba4e9 --- /dev/null +++ b/x/ibc-rate-limit/keeper/grpc_query_params.go @@ -0,0 +1,20 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" +) + +func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + ctx := sdk.UnwrapSDKContext(c) + + return &types.QueryParamsResponse{Params: k.GetParams(ctx)}, nil +} diff --git a/x/ibc-rate-limit/ibcratelimitmodule/module.go b/x/ibc-rate-limit/module.go similarity index 87% rename from x/ibc-rate-limit/ibcratelimitmodule/module.go rename to x/ibc-rate-limit/module.go index f903c5f00..06de90beb 100644 --- a/x/ibc-rate-limit/ibcratelimitmodule/module.go +++ b/x/ibc-rate-limit/module.go @@ -1,4 +1,4 @@ -package ibcratelimitmodule +package ibcratelimit import ( "context" @@ -18,11 +18,7 @@ import ( "cosmossdk.io/core/appmodule" - ibcratelimit "github.com/neutron-org/neutron/v4/x/ibc-rate-limit" - ibcratelimitclient "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client" ibcratelimitcli "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client/cli" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client/grpc" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client/queryproto" "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" ) @@ -66,7 +62,7 @@ func (b AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncoding // --------------------------------------- // Interfaces. func (b AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { - queryproto.RegisterQueryHandlerClient(context.Background(), mux, queryproto.NewQueryClient(clientCtx)) //nolint:errcheck + types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) //nolint:errcheck } func (b AppModuleBasic) GetTxCmd() *cobra.Command { @@ -90,14 +86,14 @@ func (AppModuleBasic) RegisterInterfaces(reg codectypes.InterfaceRegistry) { type AppModule struct { AppModuleBasic - ics4wrapper *ibcratelimit.ICS4Wrapper + ics4wrapper *ICS4Wrapper keeper *keeper.Keeper } func NewAppModule( cdc codec.Codec, keeper *keeper.Keeper, - ics4wrapper *ibcratelimit.ICS4Wrapper, + ics4wrapper *ICS4Wrapper, ) AppModule { return AppModule{ AppModuleBasic: NewAppModuleBasic(cdc), @@ -123,7 +119,7 @@ func (AppModule) QuerierRoute() string { return types.RouterKey } // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { - queryproto.RegisterQueryServer(cfg.QueryServer(), grpc.Querier{Q: ibcratelimitclient.Querier{K: *am.ics4wrapper}}) + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(*am.keeper)) } diff --git a/x/ibc-rate-limit/ibcratelimitmodule/module_simulation.go b/x/ibc-rate-limit/module_simulation.go similarity index 98% rename from x/ibc-rate-limit/ibcratelimitmodule/module_simulation.go rename to x/ibc-rate-limit/module_simulation.go index a581845e7..9a617a91d 100644 --- a/x/ibc-rate-limit/ibcratelimitmodule/module_simulation.go +++ b/x/ibc-rate-limit/module_simulation.go @@ -1,4 +1,4 @@ -package ibcratelimitmodule +package ibcratelimit import ( "github.com/cosmos/cosmos-sdk/baseapp" diff --git a/x/ibc-rate-limit/client/queryproto/query.pb.go b/x/ibc-rate-limit/types/query.pb.go similarity index 63% rename from x/ibc-rate-limit/client/queryproto/query.pb.go rename to x/ibc-rate-limit/types/query.pb.go index 434a85e5f..d8ea5222d 100644 --- a/x/ibc-rate-limit/client/queryproto/query.pb.go +++ b/x/ibc-rate-limit/types/query.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. // source: neutron/ibcratelimit/v1beta1/query.proto -package queryproto +package types import ( context "context" @@ -10,7 +10,6 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - types "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" @@ -32,21 +31,21 @@ var _ = math.Inf const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // ParamsRequest is the request type for the Query/Params RPC method. -type ParamsRequest struct { +type QueryParamsRequest struct { } -func (m *ParamsRequest) Reset() { *m = ParamsRequest{} } -func (m *ParamsRequest) String() string { return proto.CompactTextString(m) } -func (*ParamsRequest) ProtoMessage() {} -func (*ParamsRequest) Descriptor() ([]byte, []int) { +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { return fileDescriptor_a6095f726b1d3aec, []int{0} } -func (m *ParamsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *ParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_ParamsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -56,36 +55,36 @@ func (m *ParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error return b[:n], nil } } -func (m *ParamsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ParamsRequest.Merge(m, src) +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) } -func (m *ParamsRequest) XXX_Size() int { +func (m *QueryParamsRequest) XXX_Size() int { return m.Size() } -func (m *ParamsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ParamsRequest.DiscardUnknown(m) +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) } -var xxx_messageInfo_ParamsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo // aramsResponse is the response type for the Query/Params RPC method. -type ParamsResponse struct { +type QueryParamsResponse struct { // params defines the parameters of the module. - Params types.Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` } -func (m *ParamsResponse) Reset() { *m = ParamsResponse{} } -func (m *ParamsResponse) String() string { return proto.CompactTextString(m) } -func (*ParamsResponse) ProtoMessage() {} -func (*ParamsResponse) Descriptor() ([]byte, []int) { +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { return fileDescriptor_a6095f726b1d3aec, []int{1} } -func (m *ParamsResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *ParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_ParamsResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -95,28 +94,28 @@ func (m *ParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, erro return b[:n], nil } } -func (m *ParamsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ParamsResponse.Merge(m, src) +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) } -func (m *ParamsResponse) XXX_Size() int { +func (m *QueryParamsResponse) XXX_Size() int { return m.Size() } -func (m *ParamsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ParamsResponse.DiscardUnknown(m) +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) } -var xxx_messageInfo_ParamsResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo -func (m *ParamsResponse) GetParams() types.Params { +func (m *QueryParamsResponse) GetParams() Params { if m != nil { return m.Params } - return types.Params{} + return Params{} } func init() { - proto.RegisterType((*ParamsRequest)(nil), "neutron.ibcratelimit.v1beta1.ParamsRequest") - proto.RegisterType((*ParamsResponse)(nil), "neutron.ibcratelimit.v1beta1.ParamsResponse") + proto.RegisterType((*QueryParamsRequest)(nil), "neutron.ibcratelimit.v1beta1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "neutron.ibcratelimit.v1beta1.QueryParamsResponse") } func init() { @@ -124,28 +123,27 @@ func init() { } var fileDescriptor_a6095f726b1d3aec = []byte{ - // 323 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xcf, 0x4a, 0x33, 0x31, - 0x14, 0xc5, 0x27, 0x1f, 0x9f, 0x5d, 0x44, 0x54, 0x18, 0x5c, 0x48, 0x29, 0x51, 0x8a, 0x48, 0xfd, - 0xd3, 0x84, 0x56, 0x9f, 0xa0, 0xf8, 0x00, 0x5a, 0x5c, 0xb9, 0x10, 0x32, 0x43, 0x88, 0x81, 0x4e, - 0xee, 0x34, 0xc9, 0x14, 0xdd, 0xfa, 0x04, 0x42, 0xd7, 0xbe, 0x4f, 0x97, 0x05, 0x37, 0xae, 0x44, - 0x5a, 0x1f, 0x44, 0x66, 0x92, 0x96, 0x22, 0x52, 0xba, 0xca, 0xcd, 0xcd, 0x39, 0x3f, 0xee, 0x3d, - 0xc1, 0x2d, 0x2d, 0x0a, 0x67, 0x40, 0x33, 0x95, 0xa4, 0x86, 0x3b, 0x31, 0x50, 0x99, 0x72, 0x6c, - 0xd4, 0x49, 0x84, 0xe3, 0x1d, 0x36, 0x2c, 0x84, 0x79, 0xa6, 0xb9, 0x01, 0x07, 0x71, 0x23, 0x28, - 0xe9, 0xaa, 0x92, 0x06, 0x65, 0xfd, 0x2c, 0x05, 0x9b, 0x81, 0x65, 0x09, 0xb7, 0xc2, 0xdb, 0x96, - 0x90, 0x9c, 0x4b, 0xa5, 0xb9, 0x53, 0xa0, 0x3d, 0xa9, 0xbe, 0x2f, 0x41, 0x42, 0x55, 0xb2, 0xb2, - 0x0a, 0xdd, 0x86, 0x04, 0x90, 0x03, 0xc1, 0x78, 0xae, 0x18, 0xd7, 0x1a, 0x5c, 0x65, 0xb1, 0xe1, - 0xf5, 0x74, 0xed, 0x9c, 0x39, 0x37, 0x3c, 0x0b, 0xd2, 0xe6, 0x1e, 0xde, 0xb9, 0xa9, 0xee, 0x7d, - 0x31, 0x2c, 0x84, 0x75, 0xcd, 0x3b, 0xbc, 0xbb, 0x68, 0xd8, 0x1c, 0xb4, 0x15, 0x71, 0x0f, 0xd7, - 0xbc, 0xe5, 0x00, 0x1d, 0xa1, 0xd6, 0x76, 0xf7, 0x98, 0xae, 0x5b, 0x8e, 0x7a, 0x77, 0xef, 0xff, - 0xe4, 0xf3, 0x30, 0xea, 0x07, 0x67, 0xf7, 0x0d, 0xe1, 0xad, 0xdb, 0x72, 0xd1, 0x78, 0x8c, 0x70, - 0xcd, 0x4b, 0xe2, 0xf3, 0x4d, 0x40, 0x61, 0xae, 0xfa, 0xc5, 0x66, 0x62, 0x3f, 0x73, 0x93, 0xbe, - 0xbc, 0x7f, 0x8f, 0xff, 0xb5, 0xe2, 0x13, 0xb6, 0x12, 0x45, 0xbb, 0xb4, 0xb5, 0xff, 0x0a, 0xa3, - 0xf7, 0x30, 0x99, 0x11, 0x34, 0x9d, 0x11, 0xf4, 0x35, 0x23, 0xe8, 0x75, 0x4e, 0xa2, 0xe9, 0x9c, - 0x44, 0x1f, 0x73, 0x12, 0xdd, 0x5f, 0x4b, 0xe5, 0x1e, 0x8b, 0x84, 0xa6, 0x90, 0x2d, 0x58, 0x6d, - 0x30, 0x72, 0xc9, 0x1d, 0x5d, 0xb1, 0xa7, 0xdf, 0xf0, 0x74, 0xa0, 0x84, 0x76, 0xfe, 0x67, 0xab, - 0x98, 0x93, 0x5a, 0x75, 0x5c, 0xfe, 0x04, 0x00, 0x00, 0xff, 0xff, 0xb7, 0x7e, 0xd8, 0x5f, 0x42, - 0x02, 0x00, 0x00, + // 318 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x90, 0xbf, 0x4a, 0x7b, 0x31, + 0x14, 0xc7, 0x6f, 0x7e, 0xfc, 0xec, 0x70, 0xdd, 0x62, 0x07, 0x29, 0x25, 0x4a, 0x11, 0xa9, 0x42, + 0x13, 0x5b, 0x1d, 0x9c, 0xfb, 0x04, 0xda, 0x4d, 0xb7, 0xdc, 0x12, 0x62, 0xa0, 0x37, 0x27, 0x4d, + 0x72, 0x8b, 0x5d, 0x7d, 0x02, 0xc1, 0xd9, 0xd9, 0x57, 0xe9, 0x58, 0x70, 0x71, 0x12, 0x69, 0x7d, + 0x10, 0xe9, 0x4d, 0x2c, 0xf5, 0x0f, 0x17, 0xdc, 0x0e, 0x27, 0xdf, 0xcf, 0x87, 0x6f, 0x4e, 0xda, + 0xd6, 0xa2, 0xf0, 0x16, 0x34, 0x53, 0xd9, 0xd0, 0x72, 0x2f, 0x46, 0x2a, 0x57, 0x9e, 0x4d, 0xba, + 0x99, 0xf0, 0xbc, 0xcb, 0xc6, 0x85, 0xb0, 0x53, 0x6a, 0x2c, 0x78, 0xc0, 0xcd, 0x98, 0xa4, 0x9b, + 0x49, 0x1a, 0x93, 0x8d, 0xe3, 0x21, 0xb8, 0x1c, 0x1c, 0xcb, 0xb8, 0x13, 0x01, 0x5b, 0x4b, 0x0c, + 0x97, 0x4a, 0x73, 0xaf, 0x40, 0x07, 0x53, 0xa3, 0x2e, 0x41, 0x42, 0x39, 0xb2, 0xd5, 0x14, 0xb7, + 0x4d, 0x09, 0x20, 0x47, 0x82, 0x71, 0xa3, 0x18, 0xd7, 0x1a, 0x7c, 0x89, 0xb8, 0xf8, 0x7a, 0x54, + 0xd9, 0xd3, 0x70, 0xcb, 0xf3, 0x18, 0x6d, 0xd5, 0x53, 0x7c, 0xb9, 0x2a, 0x70, 0x51, 0x2e, 0x07, + 0x62, 0x5c, 0x08, 0xe7, 0x5b, 0x57, 0xe9, 0xce, 0x97, 0xad, 0x33, 0xa0, 0x9d, 0xc0, 0xfd, 0xb4, + 0x16, 0xe0, 0x5d, 0xb4, 0x8f, 0xda, 0xdb, 0xbd, 0x03, 0x5a, 0xf5, 0x4d, 0x1a, 0xe8, 0xfe, 0xff, + 0xd9, 0xeb, 0x5e, 0x32, 0x88, 0x64, 0xef, 0x09, 0xa5, 0x5b, 0xa5, 0x1b, 0x3f, 0xa2, 0xb4, 0x16, + 0x22, 0xf8, 0xa4, 0x5a, 0xf4, 0xb3, 0x61, 0xa3, 0xfb, 0x07, 0x22, 0xb4, 0x6f, 0xd1, 0xbb, 0xe7, + 0xf7, 0x87, 0x7f, 0x6d, 0x7c, 0xc8, 0x36, 0xce, 0xd3, 0x59, 0xb1, 0x9d, 0xdf, 0x0e, 0xd4, 0x1f, + 0xcc, 0x16, 0x04, 0xcd, 0x17, 0x04, 0xbd, 0x2d, 0x08, 0xba, 0x5f, 0x92, 0x64, 0xbe, 0x24, 0xc9, + 0xcb, 0x92, 0x24, 0xd7, 0xe7, 0x52, 0xf9, 0x9b, 0x22, 0xa3, 0x43, 0xc8, 0x3f, 0x5d, 0x1d, 0xb0, + 0x72, 0xed, 0x9d, 0x9c, 0xb1, 0xdb, 0xef, 0x72, 0x3f, 0x35, 0xc2, 0x65, 0xb5, 0xf2, 0xea, 0xa7, + 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x44, 0xdd, 0x4d, 0xd4, 0x4a, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -162,7 +160,7 @@ const _ = grpc.SupportPackageIsVersion4 type QueryClient interface { // Params defines a gRPC query method that returns the ibc-rate-limit module's // parameters. - Params(ctx context.Context, in *ParamsRequest, opts ...grpc.CallOption) (*ParamsResponse, error) + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) } type queryClient struct { @@ -173,8 +171,8 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { return &queryClient{cc} } -func (c *queryClient) Params(ctx context.Context, in *ParamsRequest, opts ...grpc.CallOption) (*ParamsResponse, error) { - out := new(ParamsResponse) +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) err := c.cc.Invoke(ctx, "/neutron.ibcratelimit.v1beta1.Query/Params", in, out, opts...) if err != nil { return nil, err @@ -186,14 +184,14 @@ func (c *queryClient) Params(ctx context.Context, in *ParamsRequest, opts ...grp type QueryServer interface { // Params defines a gRPC query method that returns the ibc-rate-limit module's // parameters. - Params(context.Context, *ParamsRequest) (*ParamsResponse, error) + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. type UnimplementedQueryServer struct { } -func (*UnimplementedQueryServer) Params(ctx context.Context, req *ParamsRequest) (*ParamsResponse, error) { +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } @@ -202,7 +200,7 @@ func RegisterQueryServer(s grpc1.Server, srv QueryServer) { } func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ParamsRequest) + in := new(QueryParamsRequest) if err := dec(in); err != nil { return nil, err } @@ -214,7 +212,7 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf FullMethod: "/neutron.ibcratelimit.v1beta1.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Params(ctx, req.(*ParamsRequest)) + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) } return interceptor(ctx, in, info, handler) } @@ -232,7 +230,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ Metadata: "neutron/ibcratelimit/v1beta1/query.proto", } -func (m *ParamsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -242,12 +240,12 @@ func (m *ParamsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *ParamsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -255,7 +253,7 @@ func (m *ParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *ParamsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -265,12 +263,12 @@ func (m *ParamsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *ParamsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -299,7 +297,7 @@ func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *ParamsRequest) Size() (n int) { +func (m *QueryParamsRequest) Size() (n int) { if m == nil { return 0 } @@ -308,7 +306,7 @@ func (m *ParamsRequest) Size() (n int) { return n } -func (m *ParamsResponse) Size() (n int) { +func (m *QueryParamsResponse) Size() (n int) { if m == nil { return 0 } @@ -325,7 +323,7 @@ func sovQuery(x uint64) (n int) { func sozQuery(x uint64) (n int) { return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *ParamsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -348,10 +346,10 @@ func (m *ParamsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ParamsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -375,7 +373,7 @@ func (m *ParamsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *ParamsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -398,10 +396,10 @@ func (m *ParamsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ParamsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: diff --git a/x/ibc-rate-limit/client/queryproto/query.pb.gw.go b/x/ibc-rate-limit/types/query.pb.gw.go similarity index 98% rename from x/ibc-rate-limit/client/queryproto/query.pb.gw.go rename to x/ibc-rate-limit/types/query.pb.gw.go index c9d226b26..1e18d9032 100644 --- a/x/ibc-rate-limit/client/queryproto/query.pb.gw.go +++ b/x/ibc-rate-limit/types/query.pb.gw.go @@ -2,11 +2,11 @@ // source: neutron/ibcratelimit/v1beta1/query.proto /* -Package queryproto is a reverse proxy. +Package types is a reverse proxy. It translates gRPC into RESTful JSON APIs. */ -package queryproto +package types import ( "context" @@ -34,7 +34,7 @@ var _ = descriptor.ForMessage var _ = metadata.Join func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ParamsRequest + var protoReq QueryParamsRequest var metadata runtime.ServerMetadata msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -43,7 +43,7 @@ func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, cl } func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ParamsRequest + var protoReq QueryParamsRequest var metadata runtime.ServerMetadata msg, err := server.Params(ctx, &protoReq) From f7e6f630b73d3f0410ce6f37e1b41c33705f6500 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Fri, 27 Sep 2024 09:05:09 -0300 Subject: [PATCH 111/127] use unoptimised wasm file bc optimised thow an err in tests --- x/ibc-hooks/bytecode/rate_limiter.wasm | Bin 0 -> 407455 bytes x/ibc-rate-limit/bytecode/rate_limiter.wasm | Bin 0 -> 1938280 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 x/ibc-hooks/bytecode/rate_limiter.wasm diff --git a/x/ibc-hooks/bytecode/rate_limiter.wasm b/x/ibc-hooks/bytecode/rate_limiter.wasm new file mode 100644 index 0000000000000000000000000000000000000000..7627ff34c56a87610dece7d4565200ad920e3969 GIT binary patch literal 407455 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

cM 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

^I(q}i#B&6hl$hmUV{oOQ1kgxc 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

puU+LO*?zjwn_V<|HdZmi2j?<()6SB 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%0DyaL?iS% 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�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 RO?V|fD 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

UVx|k>Lp5N&K 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 literal 0 HcmV?d00001 From af15a0a226cc4b043e33abd49ec8edb9560b8914 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Fri, 27 Sep 2024 09:09:24 -0300 Subject: [PATCH 112/127] upd constants --- x/ibc-rate-limit/ics4_wrapper.go | 2 +- x/ibc-rate-limit/types/constants.go | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/x/ibc-rate-limit/ics4_wrapper.go b/x/ibc-rate-limit/ics4_wrapper.go index d1ac8f18c..6cbb43222 100644 --- a/x/ibc-rate-limit/ics4_wrapper.go +++ b/x/ibc-rate-limit/ics4_wrapper.go @@ -82,7 +82,7 @@ func (i *ICS4Wrapper) SendPacket(ctx sdk.Context, chanCap *capabilitytypes.Capab TimeoutHeight: timeoutHeight, } - err := CheckAndUpdateRateLimits(ctx, i.ContractKeeper, "send_packet", contract, fullPacket) + err := CheckAndUpdateRateLimits(ctx, i.ContractKeeper, types.SendPacket, contract, fullPacket) if err != nil { return 0, errorsmod.Wrap(err, "rate limit SendPacket failed to authorize transfer") } diff --git a/x/ibc-rate-limit/types/constants.go b/x/ibc-rate-limit/types/constants.go index 1332e8e53..3c0fc4f15 100644 --- a/x/ibc-rate-limit/types/constants.go +++ b/x/ibc-rate-limit/types/constants.go @@ -1,4 +1,7 @@ package types -const MaxSupportedIBCReceiverAddressLength = 4096 -const RateLimitExceededSubStr = "rate limit exceeded" +const ( + MaxSupportedIBCReceiverAddressLength = 4096 + RateLimitExceededSubStr = "rate limit exceeded" + SendPacket = "send_packet" +) From 4672c4b20af147e6e87decb42c99e0b2d4d58b01 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Fri, 27 Sep 2024 09:36:17 -0300 Subject: [PATCH 113/127] avoid pure strings in code & store unoptimised wasm file bc optimised versions thows an err --- x/ibc-rate-limit/bytecode/rate_limiter.wasm | Bin 1938280 -> 407455 bytes x/ibc-rate-limit/ibc_module.go | 2 +- x/ibc-rate-limit/ics4_wrapper.go | 2 +- x/ibc-rate-limit/types/constants.go | 1 - 4 files changed, 2 insertions(+), 3 deletions(-) diff --git a/x/ibc-rate-limit/bytecode/rate_limiter.wasm b/x/ibc-rate-limit/bytecode/rate_limiter.wasm index 31e5820bca75858d2f4bdc53a180776b014008fe..7627ff34c56a87610dece7d4565200ad920e3969 100644 GIT binary patch literal 407455 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

cM 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

^I(q}i#B&6hl$hmUV{oOQ1kgxc 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

puU+LO*?zjwn_V<|HdZmi2j?<()6SB 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%0DyaL?iS% zTEoZ^{HNlJf{V~bti=58n~J?07HFSf#D_w%I^JH4dynQ%SnLVjBwZ)-ZxCPJZTD0JalF2<6D9-ZBy&4c%e^C`ZIwMd(^^%_j4(7MMUL+9j5{WJgmeLia93CuXcm$$HCs*BL3AQBO6bq>!P_Es5 zALH5-_SfUD8Fn!IEnXV%BG!$d3lp1uB9E;chaz>0UIm-cA0Y-t3`RtJc%*x@DX2c7 zM_z-j457^M7OFg09n|3DucuXlAvsdj|2TkX-R{G|9D^Zu*-$luwmScdcagN zzX@@g!v`nYUXtS@vAZCgR0}BI+(<#J&v>jO0FoC)W7%iXs7ip$%L8Jw5T1Z=dKW7Z zn+!0Apw>vlngA>&c)*Bc69BaYM@F)3_Q4ZihOccLdk;Nchj418S>S7UA8=${@t@Xk zO3S(eTAz6bqMn8%QaH zYrGDuX06w%4y*z2J8&g{-+^lZbO&xm*zdp{1iAxLtpIcfmJz59tYlbq-~@#KFYQ2% z$2njh0`tb>VgfxLYYB93t|Iss_NFi=qZi#S-3)O;Z%mWN$z}ET@MlcA>+ZchEb&S^ zOjfsHR{4EEn0RI)+yiHMr=OAoXtoEF^g+3I!Xqgy`34vQcehi$Su1&A6sZQF%0?Hx zZAe>?{5WdJxoAZ|&uAQ^Q5dmLK&NH`_&QY$pmnMSVPB_K5@?-TOQ3aXGl9~n9Skd- zN{w!yQ__j~kDGYf)PKgrhb9d1W&-%C5QQ}SW(>XP_TJSN{jmy4eu_okcnEeW%Ep5S z<2PdNA1*{M?8YQ3u{D!ZK+|ou_^>+)cn3RUIi=;qzW~12EqcLR>e1@-qT?kMPka`DSE&m+NA3>le z=~qxl4=GD;lKvE!Zl`ubHLiCO7;`%Xm63V@CR6 zJFQIo2lOKeVOF#!?=nP>L8eMYN_BAu#|x3kC+rJ-hwfRHU%L#EGDE!Y@r!Pa04TpVdZ3u0_R3Bu$)M(+C%fb$qRuL2;~ zalTBfLRDuiGn&Ld0BeVVK+%B!yW}x zi&oP)x)9ZyxzrFnS;&m=bCOl0y_GnRx-r0|R?c?Yb?Dj1M50$P(>07d{v zYw{gbb0z_-NtTP+#Q^_BcOSjV*XGmVw;_h)O0!+`bqo_t=o+&lAsp=T3FTAw!r0vn z=B$Y67&@QOK$GC13`bm|`j%GnZgTq*thMGbRNW!W_^z4?Dm2Y9?eVY2&skFiD#4>w^>@hc4 z`aLWnnSa8PE1cvi(~*Z31rF%?CoHoX@X%tp0y{rpN!D{tSd!o$S`_Z)%Y=ODl3ZhW zPuYLa3bzPG@!3vbW2+fkgKisvx{_a;74Z|5XgNl@{*Y)9{YZ5x+AF&LBheC9aW?BJlC4E-8x~&ESjl!X6T1O?&I4%uaySy(gic=qfTKB)EY9JG z6#%_&PRBk(mNi~PkJ!8+SU9OH@#>DA@VS^v_IDdaS0k3a!RN8b0ho~T(D6Ru0uY)Y zttPbYW<{dO0HM!`MqY+T?sbaZPe)>-pqX1)BVLY>{R?K%)GnT8ZUw{T2$von$&Nrn zs}SC$JQBMBBASD6d2u9C6onj@06-hF+YqsW;Zg01hJe0?VcwDxMW;cdHUjQaj;XAu zJ*2)Bi0a51UF-`&9ka4Vgi)i+F#%!ZkhRZ|VXyYZ2(xxsV=aKLaTUX|MpPQ>jHcIt z(i&Gfv!xgrTL5}LJ2=*w!==LD!>D$tmmt$D0G>r-xcGk=eNGrANA$kKi1L^)|CMYVdW|`3H1t%K9~RnDF;`{9e6C`Ho~s#^>oW#fiD=;cK7+e8iG6h z$@Ab$=C`xN=GFjv;Ydx6lSj7Nz-mY<+^Lr(X0x(icADkL&;_8 zSpHCGB9n6X)I#}KIITePJhvn>5$QCc^r%Sae27Woo(DsPq9>{9sRqgO-Gp=!nZzU5 zkvQEfO`t~t{;mLjTUjZFXzW&MJdVh7cxKN>ObI~gf=KKjB<;h9;%Kw%Dx|6g;2iNI z#9GTl7>T7g{;>vOjzo^i&CC!@c>_c28W@%(02r1T4omVw6V6$ML(|9JU@5u)UDXHa zz46%_@~8sB_{@+G-5O3Ahm(usw!x6t1%p6PP{#}=b|CICRvtz!>DpeqRWb~33I z0BZpH9t7Qty#P0BBcrMiE)LZXfMAC!1wa!0R)?kjhcGr zmsLuFc792KzT`Ha4asS~BD4klU();(7j3oV8lEr;MZY#tT8kkgl1;5v(Mf7BkkECZ z6N&P*GGrH7MfpG6R#CnpNE4(HVwiq0g!&-Wr*nmK)-MWvQ&8yJz~qyO)~*xH~j>k ziaMgZDONHRlLcZqsl{GIz8V5fHlvYdCG%mji46l-3qU_G`#6$q2A~gk6cl&|Q_%-} z655*G&6|1Xk@Z1X`+yS=);{1ognb{d20;6OD;ZWk;97?3eZb9toMW2v;)t&2i>9Xm!^X=iDdVx6Jz ztC*BtTpfCwu}}cdi{nKSP55;$u0R#|PkC|Qg1MA%o=wFJJZ7U8(B*bEZgLN<&drgaXwh47@i6jKwM2WrOC^Bp$*`S|@hDK>hG-hL?G$)$C24`qee8O@kO0%Ld8y=@= z@dI!KKMj7^a|)8u(L2P=1kcOa$Qi}W}r30ux?;tXC8K z1B*VP{*)t0;6PaVl%po(WMYa){V7MC#?q%8HKG2LV>KI$Q;u;S>t!^a!;;{gbRCdnxBo3d{DdWY@~x1! zKR+I^+E6_4rYX1wom>=>k1H#|baF9{GjbnoLa;e=g3Y1oVC`Jr91_TeYEJaK(VoJw z7n0|MO5zpDX2@=7%;&H!((7zU(msBjBB(sO$4f8@n1X^sioAGdMWDlxJQsw}m_Qll zg^Hpjg9G)R5z59t3o`O{2u;o1we9w~cMm4X`@bLD3&ns}np}ZPRyj}bgFdu(@4_93 zqh~*aU6JgE+nEQpGsOi3VGo=>*Agr96qvo*u1~gmM?<`k@?yNBr|wc*XKNKfG3U63 z$*c74s`D+eE(FR2C^(IG2Q9-5GYNL!a+M!r4m8EHNfonkKHfr-@qlnY8S04D2_Tf| z_Jxde1#YV~j`%d~#mE7ul+lqYbnLO9c#=eFr*^H|!+@{T5 z0wL}IpmV=a844^#M9(oz8gAKUo|8L+m!(Hw!K|k z0vK+&^*e_^yWWcleAm0yi)!!f_O1f*XOJxb{tTkKxWR7kKksdqpxM4<&*FfTuVdu^ zzgx%tCEK0yj0#&8wCvzd{(0x!kHWlnT@Q@cQ*dZ42!y#eY_IfAIO??Jf8lmh91Fcp zz7~$3tIQ}zadJ}_7Es<|Ne;+(?+DX*J~>t$Z%e!08w=z;X%ym@x+g9c@O?(fEK=}I z7Ky!3#{58vpT4l<(fVY$8(WQf7jwqxhFyiL$6?!uGtOH$^*Rt>6@Y(Qt&TvQR@=g` zI;|#Pi2Soo2cfQxs7s$vI2IWGiGS8fxAeIQxm`Xj8eJ0>8B7VSMBo8n+R0!{XGqtB`C*c0)|UT!AV0#kOD z4gD+{iRY_W+Oc#eDq608naI8qe<&om}3Gmx}f@5O}inl_ilSGFYnSkVlZduXcfr_4+ zrH*R86pfBl+ta48w@!XGKhqm!iCW-0Yd6HJ1=@IrYEN8jTEWAc2V>aMUYy0 z8Lm6(_gHc0Szj6T@3A65K9r9Bh=#HdndEyc57U~J1`O<8*$P(Al?U@>j9)w0RUfRoPv4nhF<`b}9mygRd z!FP={LA%DprKrN!wlbb7)!J4G;A;8c%t>&X8^v+yocE-YH^jVyxjd$z zlTX5+lr*TE1HN?P->baDOdzsMu?5Ky8)K}192pbpi!>CR%=#!g!!L|Fgyd0O7_rPU zR+UcK4_MP0zxXq!0?H-_JM_wZ@hZi3Xwj{nw5PFOZ;M5wwC53MX)giL(q4h^KO^lP zoEO=MGBBcbskpZzukj}z!&6D96yssHMDp=ier7frLjs+&_A{Gh4pRc;DL zbhE{yxW1bD81BW4O@`RWn9(@uviT!N9D}RAsijD^^P+biV?q0Pzc}>*Dt-6^TfE28 z?!Xc(r=HSPc#%1i^}Etct)HZ-Qqwumk#xzGub7WmP z2Cw>IOc8qFucw*fNGUgfoF??!iub6ov}YR@kdvp=D11WXxv)s>1L*`~aK#d_Ufl5hSPW=%=zx2u_ukb+ z^FRzLd4u&7kmOd}jXiDgNH@$KFFQq?|JGo*%B!VjK4yd5v_poNURoZ1#L06_&gjrTb28gTZG4r!X2x4KvOW5-J5PPZ z)(X@9yRY>LQ@*xrzf#rx_KY9!ZF*>E`Wjp&-gY*0lVG-y6Fxp`ivvkNFqa-k@2QyE zH6f(`XS>%-(Vm;o+mA(>S=P`#2u*DeMJWhYyFxgJ?cyA$gN5HME!!_n~Zw&k# z5WB(<&#=sahzSB=ehQ(vbq5;a1`LICN5tI3aN9#~qKeG>FcqwhYMa?m z7~K%S&G)jLINnz2Cun}TMaFS-bQ!+u0Nu>Y#)~2NZXR<&2aqSt!HW>N8FMi-WaThN zT)1mkWS~{%=jDhVxCZa#Ace2>Sg_3y*G$GL6+pPrMTU5a2#Gxt(H2V>*;OAkvIR@e z%rRnDVrf~+zB=e$fez`G5SX7rY&B@hswB zKt>cZ#g|!N4vOK0b0Q0_GUu92Qm+D(1GsycjYO1DOiQc5=s2TEV0ki0>Id}F2rqY` zENV%xs1>>>8MP)DwJ|4ZYcR^~tQe5FN`QRc`s74a1*2x>L{$f)YIKx{AKBV#0s2K` z<{8an8MI|36Q5`_%JS&Im=$1d6rK1<^WDiWBk`r#?B(!U*8+5Sw?*my^?nIuAZG z37bf`+SoNSEkNkfFOnId8qWmXMnt0h0=V;$MkLc(F?JOabpEVa<^h#}xcwQKOfSVJ zv*#OZdYg0l=+1+P1%%2f2feq zQ;Jhr$TT;%&;y$M3kp3bo?Gb57JsbJmlUTEohUmr6M9o&sgbi9;KLJsJeQwkTpeZj zT>$noDV;wrjGnK$S>nTtg3vmp8Jt17bmOB9{>7G~cXvQBGc`t!>{9@#uGH;hbd~D% z?nu>%U*@82moX9_eUZ9d37~a*0>Zzp+tGEZAZlqRe9!M2o9n!jQtRVFEuXRXlK1^UO zO3hqu)O!*%@jNWzdlDq%coHN8JqejWZ*{IgdH&|pMu1=SAmqJEwqCguZBZote0S!5 z$;8$m6K?q*WTFc=%8>*KIg%hDC<*DuKob7d2uXlX^)L39s6)QLBogI#4xI;elDz5@5 zB1MKN)J0~E^|HjrYFR?ua9PqGdxq?Ixw-H8Cubv>@1I0q<*V5M`X@hPTB`wYdzo1g zWz@Y$%k0uWVKfOC{$3L4pRDw97si-=N3f_=H&v93Dg*LssmzI*5R96W6SX)PRhtvF zDi~Fl6SXB6C9tC+TO{IVVQ@Z{3d!$WWnPAVLJN~ceCAanBYl!S0NN*+fUx#S<{<1_ zlx*7D&DB21VkT5RNiD<5qO?Fdnj-0wL}x&5AEI*3tC>33(YFJH4*xKUq+!)5I%&h| z6FkEz*VXf(I8aP`+3FV^@j3=XCT&J99OoH798ngTjM*j1qp`FH`KU0x-6)M8s|f7C z*d1mId=Y}aH8@W1z}4Bg^sND;{=P%snn3F>OX`S>T7QXy`m1rh{*n^ZUyZf?`uKlX zR+E2Ef1|gmz0e_S(hoR1#OFmUhlJF)xOW9w6M|+W%LKutnIyoB$ZPn_!G57(g~{YK zd`*H)@a}N?1b>H~6dGH9hn@s&M}D!IL&Erx0pBWZo4w=tY6hcGOPgk)pMvG48=Kwz z6jY>iBQqVJi5gfDoosY#cM-o7YON{gdCJ_Zg`Z$<#*e#psUyCcf^j_9z`G3bipIYZ zz5U?Sn&{we_fNa-9htRI3d z0SGEHyFN#mCE?$o%yO>95z${$W)YixFjh-!!6qY5zUXN!L6OlyzUXN)fPSaT4ut)8 zx};hI=y$r{4a4>OdzA!ge{TZAYJYDI!a2RyRm$-{{n{?S_kQ>OUX-28;m{8ZLrhJ4 zZ;XT-M~H+RM~H-Ar|;B)$(J~=609RU*N|`EAVHcm?+qNk=t1AeDGOF_>yB9B-IvSWkt#m z{=d_Tu#-8S`%`B>4OkHpa;yjmIaY*(V5k3Ct%&bQkimk_4afH+xZ%ME;l3x~6SODc z6SODc6SOBmLXIavLcJ%!8lF$%r)y{Y$ZulcVXNl{ai>K;!=oa5Vdzbm zZWaN1DjF}A75rF=eDdocEdF;z zKmzX)MC=}z%n6W6aZ9YOZUmUaK}Y-91?FaP!x7jN8UL#bie*YvoDGUw83q1=f`ps} z1qm2P{!vDmz`H#Y9SzA+Ft4(dwnlzviXyB8p-JT*7BYP|9 zS2U1*-`_9&+Mx7T1*Kp2|D|6qePOO{i{bFsR`{3*w7B>UEPin0vmNXydy>OaIx-J@ zijR(WM}l$Q?SmQKNHLeSz;{d5F=CPtdkl)cg>v5?ias5R?zV&0zlht~yed-;V9hhK z@~TV~LGY>!%#M%`0AsuvGn3K5TQMAKR`6DgKh~nZ^HxkXi^Q#%6mP}Uc;MG=#K_nC zuVnl@!+X6y1p(Qp*ZX_#y{JQi;>k$Bn=4EpeM5b7Md$EuuJ{D$Px9spDfCO_&6OC> zAZ}riQ?LQS^M`I3B!{zyF`hjvBM6>5>_l$<_2&*{BXiCjN>^H)JCq86Q+2+nEnaU6 z9^@*%z-V;$qcCfx((HN*%B)a-IPYNi3geGxw zbb#=UQ6Qq-V7e)&1zwUasZ)-DT}1)W{uZ9E$X9HlNS`AX`O9LYap8QU=ZK+$PztTP zYesvh?INz+iz8+vlvG@hkd|Mk8~y@5J4Y2iRegYJQJ}1)_~gr}j6BhdU2!}NJ)1Wl zFRo&jE+(kPyV=;KwE*%sX;W200>z{%>~#DN^f8+$2}`l1D|>wn(+7Kf2-5$@d)=G; z-_XN-%t{k)ct>+@Fr)mkGuhq%zKWNdjeK)|7YH=>Q3`}9$a(QCW;6e+tt3D&{#jcR z{)}gB-F;U$Vwm&rcEG(j(sREETM%}XD zSQ&^$YBf4JVT$A7D;0lWM(qhx|%|3yJ5np|`B>KfM_S ziRQMFMqIa2zB^jBG1#kjUuJo|da)I)XjR`u#ecC%qCK$|pv2jU@#91Pwr>-7-`9}5 zVM*pWd1uyoUv4OV+)8}|VhKdtY@V5obCE};=nfP=feYx~_flo<6*_nGGVhFg@zYic zhEeosn47z(#m`x3xn`{5fO*kMqbSZFzqo=F!$n4}F^j*n@bx=*CcjXXD{<45FWxT> z+c6G~nH*UzZWD4~R1;uO#5gEw0Q^sVtOW3tXe~kTQy+gqC4zK>Nl}=uK!OP@y~J&L zIxc(%<{z$2$?;}131VABa?&W7Yi6U%p^CdOH3-I0#)#8DLN0CcOZ<{b%+p;tKE#EQKe}4S!?`a;8w*~f}$m2Y~$i1@ughx`s|2!=50e%yu0iFFtm+9^Y(>oA6CudA@uUxS<`{La#Hnves2UjdNiW?!J&@kJ~Ov|zPmSe1BmOc6+MbG0M- z;tY4eY{#&2l1}I7WM9HdU?=>tfX{F>Rwb5&a8ok(K@taB(98m-kfxIUsL8eDe{PMp!hYyGslF;B)fAx_=6m z!;oR26E>{)AWMAFMS)}1W1nfc`ztXydA99|J0s(8f`tX-#5AoHVlb3a#^iu2rsK10 zI?vsB&F`jps(}9ZOzKU4`?b<0;XcmAXn`!P(ams0FlHsFUMj@M;i{e-4uVY(W+fVJ zeRB{L2r@35Wg6C^ZTOlM+nWz?lVOV=8S@lC6jq>;VqwgohUF5$WcM}2BJ2e8It6QCepM{Q=>fv=T*?;MSfuaL>-sQW(IKY}+QVKqbaGE?Zq(z$ zG9t1k76^;s+Ux?CGyI)OjS`W%uX}+?E%B*Ma90B5uqsY*z4(G$d{?v78=A&PA;a49 zN?diL5q%3|VKtt^9zn1ggSPk?LoCE-lrek1D8wKF#*{qf$nhg%?mEj5Uo8*I80CO1 z#Ny7p8nd~x0S^ecVQRjDX5U4j{B5KmTWX$XI4N8b_!v6`=0y}7&$L$i@LA>G z=#rh+lM}P^N^@dz^5lS=WH}%wSxysjVsi52fSf!#2RV6uAHb)g;bKKUJi!~K&H)i4 zwt3Iod*dr;Ma-XzFkC+#Y>6oBmNO<~ME4(U$eZ=ft^nsgiF>YCh&ktA>PauaEoZFQ zoeyAfekbVvo-Mxbg?sNCV3;n)cT~=6j{*juv_ArdzyR@yrjvngaeSU|bqs^oDtIZgPzH?fpZd1C}4!`84-3#rhINHg+Ps?lEsOzCPN>+#c)Ga8)3~{@shh*~Hr;=!fJhMRI%GMd~w9LbY*(Cv;=;e6;gcE{!Bqx`GB3T>Z zq!YJ+lNu1P(!gBfv`$=zt&y8Sz(Phi4>_5{5wIqj5E*49@{Y%Kd7toieC1X(`7K@U z9;)0QK{%Slj8^52u53`QCivx&K%qorxp{9xk~4Lthw&*>*?@(h$Oep2vaQjCu}(UD z`$5>wK^Hmu0$h#O)DXOAXVNF4C942fTjX@KVj}@+N*r>c5ci-E3ODkNS?cyj*ZPE) z_`E&uGw|{^q@nUSbv6cje0f1goQOPnEWA3=5)X0I%ykmx6hkl`yDh>w!D*ED&E$GQ zt8>kyNKD6i?@1)#MyGR{(}&Eh#G{Gyz}N(T#6l)B2S*<8sbq zd-cN}z#sN?1bW!Nfqc{if7ttk`eFYi($Ell!#=}h#9~w~PdeOr4L(#2kKK9NNv!+9 zTVucx6VCHa$J7(k4Y38ab=uoW)gdh2M;NbM$je6)Sd47K%P?bmz~GQT+wE+?jIc(P zg=tARZ#s?Kx!-w(qphOT_=4mc7-d%8j_ftT zmpus$WKR;ukt1cF!}y0v_DmvWzeSnca`5HLeguFo`)LGP_RNII|?f}fn#J9(kTdEY~>tV=Apve6eQ>l z=)^3UP>aN~gS|fE4Cv&C+9i(It)7r<4(p5uP_j^_={j3 z)&OMjk?rZoyA|O$?usTy!%->0u3r4~){&tIS0P*|?}(;&`?Z=;?B)o$UIFAZ4mHLx zfFU7)b+$hry@>&y&qj3%5I+GiaS5CmMo3LPHym-9lmyU4#S9q1_@gN7Js@a#c-gKk zEb(<4H1p!H%)1VeT@mSA9&RG@lF(e`P27c2iiUasnGx%0ZR9UW6$Bkq;S%N6L!7fL&CpYw%D5TjYSu%Fh;?)Ic?m;#a%oOdXj^- zZX{2ehbACYbTTq|XTtp6E*X#59G7LJr#`{DSS2$981djH_&M1KA$lfbG5h0NbPg-E0?o zY~uqv*j1lHwkI}Vd-@+>``~{!+pRse^OjA=EAn5EsU3#uOOBq znv{!J<+=aHR_Ff(Lwpz1qL<~R7&r;uF<=CqN(<*YWztB1L`20bUjLM)AeiwIoYw81 zMEW<}#BItX%KUEzOrp&HI$w@2^A8AAT!eMhp|BRtw{GG=mA^mh-`+6)&#XUZKQ8(m z9KY4ropG*p@oXiyIag*IVhQJ&zc$=O+~!zf6rL(OQ?P9}^+@bI63hVj@5kgc;eQSO zNPBj=;VR5Z%mvPxMY!97DWYPEVa`Ig7u#wQXvtED#JqgBh& z?kr4sgApm`4q(RZ4xDA?S}%UOjt6G^A;5C-xyFk>UB?5vr9zw!%oSM0wO;xaI{jY? zWqnWT^nWQ#9*gv4WECbb1SVRK{z%3}w{9>Uy64emP zYMyBmrdWuvWD^z7whdD>J}!~;LDoPQ#6pZbWn;z%8bg`-f*ePlm7Z0v59nD9fG5C$YCLjg;T46beIDkg(1h-A zN+CZjpZRH9KDeo95x(jPLrg{V9jL#eB$GHffXAHeL=xxVjQgobuowx(TyG}RbFdq* z619!J!RQ|O3~y0g3m`WEBa5aPVzU?3IFZ=f5Z5DPQ)C=_lhG>q)?S9#f!HA}o$x0h z-hoKyml!gnIByYTqjAAprzyVjfYgs61zInL?Abj0Eig}kvDb#|U*wizBZ(Lp#Sna( zLMCXd6HM|F5bFf8#6=*$hZjQ*E%K_^3j|JeLvSuX!KSTOS;jtU49;WoG(k2oamqMD zypALx8pSKSUL%i6+omHs)i?o2+&>631a6|Afd9 zh^*Mdh$P0qdL(;=1fAiEaYkukC)+oU@TM9T&B(gploEJG@-v(>&Zg7X3eqU-V!zX{v_pkEHq%b3XxWt zQ|mNr%5C2r{W*?w+EZ(vNy-ZEK@!cdwf$&CIs+tOeh6D?z4(cVuR9|rUMOjugszj` z%)QJb-&a`(Yi$iX)fQ`;AyKW&$nQFs_l6Kr(BJfo_IG|ID`9}89Up44lCkif;^QE_ zIY3gWp3jb>aq#i9{ z&)ul>Xa#}NqcsTodbCkSK)xdK2zc8{xB^NLDx}QVL^obCc`x+`7YBovKA-A5Db9789?oboa=#Y~j zNKYN+ba1?$!guXKdjcKJ+pP`aEfg2mMeiUK@HF7u(P(HGc@~^+P z47sSn$x%;@b~7w-6sEe00aha2(QEnjh^!b0L;n|W%sMV1VWd@>=%dzL7lRQ%XPx&1##+^2oPz z=cWd7$TCULWlBw%#=8~h#4(>5;)Oxzh>L%%BgX5FSbLT&?m(|soNXnRVsc?kT`Bi- z&=J?Dj%ZB6W$1`0ikC*ZBW_e#WJfH83=jWBM;sO8zZUGSQXL^%3_?PC)uX|8#g$eo z-y4(!CGM3$aj&fxH;dm)cvYZi*~cVk(a1i&I*>w+S`gd|bHz>BNmcy|0&*o$w^ohV z&#d(A5XcTz_Bpg;A!^QUYA_?nKGdF*is1&^5@Z7VNPm~ zA0CjBKECrNRwZxT?+RzV;q2AO5kFk(g)8o`#cpf7aC!*732=)Sz6M9s`^<$Yhnp;% zZBIDj9p--Aa3U9@&#v>r$9`;!VayHs@GfXCb3bkrQ8#-cBf7<0c2B7#`Y^-t@KpzT zBl}Ts=-gPGIN_jr-0fzwL*C(vz-3#vPePc~!k?b%r5PaeM3QX=<0u1s)Zryr2<0;uH#hdHDW6z^hfAE7zX~8DepO*IJ*~hyVAy zX3sK3$*q#tC;tGi$p*Y;A=gy_Uh8~bpZ>$VVmr{EC+qdvZPe8>wX~ZKE*VLE38t+d z8}2_a@~BQbOr*b9W@V zS`z|I=7C$;1dU+Y}KxKw%Y@(Ixu{NYSled;yDdEGXKw{#4Et*S~j`BOhxVm*h0_?gZJJF zI2+iOYFAJvpV>`y*HyE?9M8TTTY^a4^Dm;}6|9(IcmrT9 z0mbkb#ITuwVzBzb0|wAyNWJ+_i{TwT2u>U8h&3Gd)!~no7~rmo@#i*BmsNkJasMqi zEkmQ*JDMVi=2#O7@(=3NS}>$_YBRz?oywUT zcOX*hR5LJ>dh4H(RXLMuSyd5eSgiF5qZ$s4$zjyIr>eSscC( zam3tq82?b*-K1t-iPKF$6;6B;9+ptc_cr8vWaLG;L5R_HE!yb4G-iBVva}!8ZmjF2 zv@7tC$FFM)_FaV2aib82vmr|jxqT>$8XhR>9IT=w+Z&RzQB)<1+L(6pf<;};qU84A zFS7srXz$kE__t*CY0UoiuVr`E!>zBv{S%6mxBr~No2+_~a*I(G&PB9t=2?}#NOyp@ zY9-QQ#T&g)iZp@;>uffcTNG&%_**_!A~n}Lcx2>>^dyXoUx@VP$5cb=lEeykU1ifhMZSI`vJP-ZNM`0 z2*gtNK**EH=YoLUS}`$hj>u#3^Fcr{BzRda&{^Ut%jF<&mY5h*S?xef?!O?Pj=5!JY#{RYEug~9Nink6xvPov*vEA@Sctm!AL?%u%3-Vq7;Vckd zV`Hwuo>5)`QD@@LoRs;QW-m$D)K96}EVCl-eRR?%AjlMlqIoR!A0TvNAxB}s#WMCs z8B&Pzv5Unl2i6nP!t99=Bqk0woU

M89TW6XE-AH^dATzGvF$zj61dGrtMVUyNQgsQc=YzeEb+DqFFn%~ z7pU-S{Ty+>7Z&Ck2&v%2*51~^#H%r#^Tmu#vo{^lnB9ek=<+>71!XS@(E`JG;yK3u zVedVlt17nt@j3V0!@U={4H9xmfg5V*K?P#N03s0!v7n)8un{X!ECE~WvBzf%q7o~y z#~z<8miLT>XY{GW9@{ha_@44&egDsA&dl6%11QDyb^X@*vzBpxrtB$u&&-}ZbLYq# z2#=wgv1hSX-Zl+33ZIxQ#4p<6Z^znr4dR>`^-7P>rM?MRGo`xqyz5w1R*q%$;<_{( ziM3{Z3tq0$_3YQEvNPRXxVgghO{eR>Gt<%V==nZc$rXFf`uI(e>G=3u&%h!NKbGs| zceqT)1I3<8Ms!Q(t>0xb9ara`-@~<>R_k=UAe19Tz&CfWN2beg#2kI?kwhlMj_z1I6f38Ff zvqqSe0rL>R>=9%rn8N;Nq@ikVq$t(No8c2einL;iN*I1eEmuBTGJ_7vp7`pyQ*VLW!AjW3~ zR&1Gq=gK-o@e4}DnSwsXb$A?cwNh@T;KZ>GkHWvH;lvcZbP8`h)}E_Y6QfW+e2@0a6hl2V{pS!*TaMK!ylok`y{D%9GVeNVS#`E5-OoQEY%+<1>KGg$@t$tm8h<_`nDd@Lp*>E##G~5dEu_miA$&Aa37)PAau^k zcx>O}g-GHwYR*3WgIogqhvI`*jGLVs>FH=-6fNf9 z7ku~cZHXfCIy@`BeGxWBpu>0zIr_f|7`_0!oYWh8|09qIy(+h^ksq*WHv!zfPDf{% zfYerB_+E#sGFC28J&)#HgTwjz!ACalh?!{K3N-Jp2tAusQq8MY&D(W1A^w3lIiS$I zEHv*eU~luj)>t*~dtlwXThY8a)x2?NUZb~pEuQ9WeL%P7nE>596X0#$0@OL<^A0<0 zeTE^x=2lnWbA4Wekc`r^jRFWCJ{=B~fW;*Bh=u{@UuOzV z0%ZtuJ;Q?M+-K5A!{9-;VBgB8QE*@t`jwLr2D$9lWl)9s{UK`f(+#`3aZo;}O@UM+ zrqyaR1pQ2``*{e|hFJIOYV>Opc|mRVLBFV~# zzLX_ID>&mPyhx@xMK;)sll#%0!2PPhdYrJqqHO&Qrf68QR;=;A)8J+_I6+=$@C-D# z5VUD<3BVRMcpzl%eEz)XtrV0SvP16gzjW-jZ^}+;r_2RE=aNlR_lwRbr!I}6_ zuyyW(;N=AKBH9yp5e?o0p=TkK6AT+%?P>6Q#OVf8FBSr8z1R&6J{s8D;FC2*gWp1f z>r{ge6UhNVz`n4Z4mKARS#rG%i>X#-TuITpWk4BGz3+ zYXHz)$4qIuVghv6nE-Fsm8{dSw|`MH==Fi0 z*3+dU+I?LwK*PGo3ldv}hQ++=dcl^j>%-P* zSZB2!*nz(5X;?AJTwlYwOK|z`G;9JIRz_ZE*!^f&rMF=pTutM)-bNPOfSbE#@JMjF=d!M$uZ_NOd7V_Fu^_RZVjs$ zU?z`I>uFf?1{&5~V)y?}!)9@esfNACG3ISp(6h4Y-s7R#CX6u$E31^)?OI~@;BJd+ zMFb|PhUr<63rai6q$+X+Wtr05vYs*4+^u0;L784lY(B>rc|jG|aEy6Z&;rj2%1kyY zw}}lq5P8xYw(E076{oGIVZ|tOeGTg_vDLrRu){gV$O{eoh-1v#u$nDz82unlpW*(L zX;1-UK{mA%^NKY1w%OLmaF%Ln9C0-J?uQJ^U85lOP#K;;Aw9bw#yPT4(z&s>(8N|r z_lwQMNb4kxQ5M36BrzZK-uOIHSXmj)`C=j>eg9@c6Lv&3!kTZfq@&r?nA>uGW=E3tR=7B=}Ot>B31kI;# z&Oz27o+g%0;k<@EPZHoM91JB<1loNH2X+@#sT2Y1S9)VAB%K@k4*gm!X}4eNNbjE^ z)v$^5zM0Wl^js@x^jrW}Rk}c%o=YCM#XYyH?m1qIm*b=MTWugkm!PsGD1$w>O}C!A ztb5PZuG4d4&~xR?u6nKtwC=fD(5B}a2vpBCgHG$YHUzNeXq9(LIyYt=hrTaoxY9_{ zs^^MHqvx(e&y|rz&-F#mRf9G?*8s4EI){C?$oP3Lv&#}b_!sd=^$~ikVLyHe`lR2K zoF3vN-Mb$QRuk>x!71>i?}s>EDV*~}zu=z0#{eU#nA4mW{9tGN0124h#W~MpMhC%_ z)XD}unHhZ&rfUajwOJJlWut?%6;>h->c&o!UYnbN_1=xU^Lv5iN(1K~ZG|T_#*pUj zJV9RQH15s|L7Pr10nnXxU2eCnj0wn8J5cf!i{9NP-`4u7ZHdBRGfbU;b`tf*ho;pm?3Q(c2RsbF>aW0ZAh5`&e z5EB_&1O-?F1!yCUUZd&JN!nw2=)ElG8}iT!z|A|c?zQfw2RH9Qo+Cj4xOq>4HVRM# zpcQ~jFn4U4=@FQKCNQV;I6?tFLNg3jO(|vZ>uCxVfN8Y?a9d8ip{8(KUZI-8ZF#k~ zDRo=g6x?QE;SDGq)26fXv>)*FA`fM8N_M6aq^ucF$^O;-luQT2(S!1otS?TBR9drJ02mL(dPkf&tt0W<@|9>gix=Q!$W1K=@N{Jx)gB7jq} z(KzDLXI|q_+Sqx$0#6{4m7hqAS>OeQlf*mF!oay23kn`83mPvADgapIC0{1YeO2+a8j-ZBsCvXHz zD#sL0;B;Oo3!cD{GgHVBAy42YV~UX{PQ_@qK3_X_7qtvNh=F}EW_Fn($CKj2Dz(dD z3b;$w<+0`j#e=6sydAv`j{z5^Qn=UFdQSDZ^M~^i&eo^mH}n~vGEX=dK;Dj%KjZR7 zHQnz{EY9C>Op9b}BbN^6@4Uuq|7C^{TcP^SN<7fq3(tgn0XaJl_^sZ5#r*dqdKhYK zul!_+EoP5E%o2ZiDJGFu5jmb*j`#PE4?P*H&inXb;4*(+R1~AD+wl#eaq-|yXj@&L zdy_~$`4{%}z}+H*B$)RMe>^@Oc@s$P)F5wf4~i0V%dmrLnylmHPo9sDW_q_79BQ zjLPW%$pybeGXX9acGpkH(~o)X_2cc$za4{PI&_QVav3`CX0R<`2iEzAg&M)K96&y6 zAbgXDL&5`gR-*fdAL_*v!WeS89P&8@*`>m9SZO{7W9!S!uoHKG_dECl{yzsvE0DDO zn`nUV{4N5<4PH^cDkh)$Z9^LU)Nd!~)KkA_BPGNt_|$KdS%aT~ZG)RF30h|>0-efs zmnU1`S#Z1;0c=Y7U3o!RJrZ;ED1V(p%Keq{Q%EC+>FiKk3VAgGq>vF1e;IvHib9g}<$8EMoF&Z!e4q6kESqC@b6X?d#@*#A zPk?-%H5xqt>!Re86FL}0bb%f;-k*ni9-l0Nx!ZvfOYwvDkkm;aXa7)Ui27KfK;)G} zaGwpuAP=5_3k?XLi<4FzF#b?nii>}Z{wQbq`JwFSjwqrE0HTT%f}RAm+@2ltfEAT* zGS@Qla`h&21Ay-FX3(h~KM47>pdvHD=r9DZH_NZG21O_W6L6c=N6LT!RCpx=R|vn&at6zh*fP>K(>6yo~q?bWXoYxir)Jm3>Kr?@>eISg>`8tG6K4E3?exX zI?FI-b3Fm>d+F~%SFS*kN15c*P(uD-R|l9M>@t9>xBG)#S&>6#sm1B!5N6fB7Xxzg zmAzkc6oykj^!JkpWv4jHLp>wYQ1}Z7!2BefYf+nto&Z^!_&L+CWV5+9hN984rXu0z zm^ol+f4>ClF=<%ZS0hmui$k>DHU0vuHw~SY_zgm7YOD1khG0Tt>>7`QrCmr~*fd-| z2_qV`*)&uF=uN{cWWs8Y+BBE|z11=So~>5Tf1fGDiCJjlWg*M=0rJ}uf5b-(I#J`Z zLs;v0-A7vEy>x#aw1eM`eU27Sl1=~HBMo`rIp3h4$z(3zz$KJ%Q$c65_>zBn1dGnj37JLVAZ+JVH>|_?HOCQW zoh)zTK9IE$5=$utMRR zT%d*TLTo3Ttp?%61BTpcIRShD^^z%)7QS3aU2bgbF%SC0$6sNhD727^_k-rxJc)SK!#M#1)o|k8#QE+rJC*Gg^pfp6 z%je0)D=|*X8dwCn0?;Vo4C(S@I~i&0bKCr$Y*apH;>Dgsm~Vys&X3+iyqWF7{V zy50~7bQYe$RO4<$KIgUXJoT0rl{#j6n!Ad9a>WkbK9RpZtH%Xw!}~B+;E-J$4{u&& zcNQP)spVhD>8WpU6VmiIjqd>0&niRR0xLcGu! z5QoWE#)R)^M&ojvu=D;2gNY35{y*-ODt9+L49qi@gF8^`x!jfmLJYqLIM+~0+WBd{QsKQ7_ zF822|uPTHY@SCqHa6y-^D#Y@!`Zn&54{G5GlKtlEK5;I&p9Y78{oniWc@)&Z--N1s ztgG^(uFCzt3h_J>ul9$I#x;o+aPj}c-#0cEEZa59OV03%N15tfvb+y^$wvA2gU{=| z21}5w|9*h0`uN1r?4JKYeT8qo3f*rz!Wqck34D*%X`pr7n?W(}_-mZE| z*Dv!TM`VBve##ON@QlznqQ5Fo;qMpz4=T(6sIUBedN{073}FD@n}}_XW_0Oh>{n@v z9%ObBn^EyIKBt752O7OS^NB9`7EF`7Gx3Z5(0Sk+E5mP;Uqa8|VG>aQAUpfSUo0`1 zsoo~bXP$CP1d48GXc3|LF*@1h}D3nVnCnLM;D4)0()?Vma zble{ca`4rW=lX|S)^}rUevWU8h6Z3%rp4IVmKgdGYQUI3wgy|u4Npw5kJ^8>#b4M* zyQ7AGEO`AopLmIVMAm8Gk1c0Qxw$(J=i3`Bao1MZ=)Y_^H^gl5B)BgByyud>Zcn(dSf3_n=Qs^5Gpth4}{C)`=%l)nQ+WTPUpBEIphH+*% z3zLK!-e-v;PQ-^}BV#RR?`>>x^L;Ko=ASsco)D1XQ*QBz;K?ri+V=Pb;S(|q`C#a~ ze2Op^kWV7ta=zZxCq{h;dTYx$0fyOU7rWt4gl%yU@-oeuBYonNo7bi1Y~>f@UJA%G zUOMMON0!UH-f%A;Z}^2c+$cwTnf~FqmiYHupiv)hJr9D5;kk3&G#f#qseAD^g>o+V z0zX!`18o_+HD*+S1}|6@aKX<<;gPf3+!)n4SK{ZMGV#8aEyuyvEX>i>G!HFM$C8Vz5nVHvnwPme0Cwq>OII21Gh)6IT#Ys zBE4{pUz~v*(t;}y@+s@H&6{v2Z;dqNmb1-5N8DcM(%apG?ZZS#qY^osrDaX#Z|f5W zOzR;IILGq&dn5GU!@=ck%$cLbx06-AOiQqvHHYnzJ|V#r_rFBR(ji8~5FN zI7BD+eJtm&2NiSBYd#b%Z_sg=rIIyHtA(!xcA5OGti8`0e(}XzcrE{dmGZ#Bm><4} zgZVIqv|=Tyz0MLJ%mHv;6_tkj7uUe4_9eoWU|H-s$S<~;7!V6*U^cm|#un2sunFW2 z#y%7`%Z{0cw2#m@*v>D`{JR1N-|ZK#YH%NZjrhMZ6%)X{PyfGNpw#2AGQ7D6@hu!_ zIm1uD*U?!#=sx$_;!x%TedF8s{nWRTc7KXy4@7^-^6*<)=s^^XYlZ2$U_aFGThyl> zKL^>mOo4|_^NWM`Rp6dOgcvv11@5G3*NyXwS-T>r8Xff`G)Q)${hyQl;;C!|Ux40f z#GYk&t^y1HjqgS$6zG-b6DJIG0jd#h$EI*MKrplOZo#WU(-qihAWV^cTp;A{4v0f`w(J}3x5Pc)1jM1o zTdF%|LV295nfQwQgrGQNmOCC6Qqj10J2#GY#F#e%Vo3%XAvb9|-)o7CJrS}q)B1jf zz2@5i8$#a=nMnWR9dKa05fno{v79?#DenKOq!C?*Xy2XqWAAaUU!3%1P>i@XWZAFb zK>3<#fRYHlbDM|9C(i*G9kF~1hatlXY@F;fPs1k%PD1d_$Z&B!mZakqc;*DZxN>L@ zH^w>vKX=!l^A4X_HO!3xpFJ=)+4En+%T8p!70Nm=*h5@+mJ3i0_6EM9QAl*&3|lNd z6XE+HQG7an5r4W15O?;wK5@*aVETR7ve$m@7bnB#Hex(vxW?y*n+XmDsQTI#`~EW^ zMl1|L*=IQ7+W`QdxHFLR4h*|R4EPcQaqX>sal&UPfPLZn*)Q%r6@Y#5dBbF-VJ#R^XPEU_AwZ<$Q}h+UwXfN!Irt2TOg43xqxMPFwu^7Mj};wR~Hn+uXi8 z;!B@ceKP92Hfq^de}(UkE_DI=Zpd(K9NXM1!nX^y9=>OwK+f%Wli}{Q0Wp8P<=Y;i z&atOs6aGB{CP-xz@>324IUSdW{GNd45aA#JEVn zWFMa8Cc)Atf>(!Je;01Dn0kF?`Nay>YlTU>H`BJjHTx_+u$RTSVk_f+FFT?Srj{Ta z>h^+9q4$jFj}gutva{^3mVBL_AE)*0fX;IsxX*o~Hu$>byn)4GIFbcFv+P5$S;D?j z1bbr2lHIgF5H`s6%Fmu~1oH-02j5kFgrO{g|A@z`r{ZT&?4wsk1gsjjO;<4P^-%1@ zD{++%aq%%(fp1hk9?{2fm*PGT4!)kmevX_v$Z5?`N#jib5qxKSAgs9dA=eMG0v912 zJCit`2!(IL4@5O~pKcADtFqAV68tb8+y=%qlW-3o-!U4TqA*lQ#3x5Zv=J+8g5`aZ z86UbWe1o9Fi}35;n<3~DfS!4w$i1M+g;MNk`|={u?K}bB;@7{YBgUktvnB&Vp#4>C zm@oLrFw+3y_<&Rch*bkdLD|R%HVaOz`^v8*XiPUa-x@QR*Zuk4myz2`&l@676imZP+|%x`V)jwj@CjzF$$;(bnvqwsMaJ@sFvuPM6~zzIId@( z^ofQ>pxkECt-O8{oejlrlgauOqq4^q;)ZoyxNgou-f4f?Fn zk@2dI2eXbnt#Gh5y^_JeIc}w)kF2PO9D#vPcKw*6uN8^xg3+%7I0J-d&2|e!Ez|`w z%p|+>Aiy0XF`sz42saXjTh6?tj+g)kLcE{l@Gap{q+$NP4OdEbKQ~R?%}|QSy6N}q zZ;N@O-S9P2a6*sMPx2gzJ=R=IKk-57{5@p}=LcBqcVIb_C6ZALHAaOkA{{ZwfkVG^B}%4 zf5;g8Eb$^Mn3DSmI%*P5-kkXP^1D_!{l%U#)D2 zbt-xr>f|i@x8t(Kd(qWnEthSp<$QzvuVj0Vm2u(Gw#)Vr^y6&B_CYARZ!{JmC;5&g zK7mlPPq#9b!$HbRi`nN{&YOEW;u|PO_A>YRXFQCu)Mx)fq5CVfeE z>=uNVkuDt^yjSJn%#^!--{9>^1GtXn?msdxTWN@_W?7%$!|56lyg+FPc4~4V7Qtsd zDRNilm|D?{$-Qn^^lId&V(GVsg0FbfZi^dwvuI*4@}9o(UDXEAuyy3Ss?DVJTcK?P z8?td^8J%QvZ+M+DVhhov*nC9Z$H}Pw*0#79^M7s&d@WD-MFNjuf>u_+Ec_UDE|!x# ztQT_gD{W$|d}bE9ZKiv7ByV*vtJa-)IO_9WjszPpEI1RP7~oKMjKUu}33u!8q-b7; z<@+2{neSWtaS~%3aX+fGc&Oz(5C20w=?VBS!%870qk0U#=u*EJMH)t+@HIl@PWW|O ze1)Wy*_Q8^2?+S;dRrU`?v+W)`RaUIti|JOpoOz-oljIDGg4x+wa_P~AX{F$CA|f* zg^xfVq}BfxT(6g5YRtPXaH4A7C5X$rJ|2utcMU44Ti)mSfvh4Ib5hIuHfrouVz0d_ zG2|H5_NokkERiny!=*x0@8A=8KMW2Wt#pq=BKOsPX6BYd#AEamtM4^L>rlyh=Km!- zc#*0wXZFRD<3Sojlt(Y(>3PB6@h;|&T0A||#B;V=JS{JnqvAPhFP@ee+(qT*Y`1ty zUi7^>{7405EuJ|x^a|)U&{_B3px2~i*DT%>Uu{&JILd%Ud@yX{PFAyrRS>!f?F{bd z6a9i#RK%Y_t&>1`y{$;_HPr-GsdDSgbUZB_;HH;NIs|=KIWH05{+F04h&^zadti;- zeXxl9sCdSZCNGMe>H(g9$@|C&tUfW7ss9Wa{}-R3=RYSq4%Zk=6)3Os{l9Sx zLmEm%7nM|^U$hcM@M54+qOD;hutNB0kW`|aZb~%xk5D29Ei7UeLW!1ch7vU*e;M;b ziEdWCg@GxRh=wW~pp|HBHzm^XT8XA~Q=;p-DNz>`rwV0JiM{|`3))p8osttLl}MLl zl!zPD23C_wbPw9u4B#r!SEzLxqo_pfstH<&((t-UB%LUo$gG_xL72!|d3I9r%S5H5 z@;s>8BPTs5PsF2f{T~X2UpgtJOo5NJ@~DHszb?Wl7N)AKT6{QnBY|~+Uj$)_$7aBB zot9_6H!YDvZoRs5J569l9e|iq@#)_0;mCZI;BNSE|F<2UwAmWqVSJOfai}9!5a9PH zcIAA0A{Ner*jStaS1-el1O@}-AWvG%ZO_|*W2G+Rt!b?N}p zl0AHd5U1dhM%H5FS+UqJ&L+qLNUP4pxQ$y*ZvR5vHYXTT~J34)9gJPaH~s+hKOEpWq@R*xHAs@Dwnz zpZkj?E@J%_p}(*CF(pc8?vT)@PJgkRPgz5Mi1 zC#9DguEB<5{_;N|Zao^BbS_nKgRD0gBUK~@$!hPxl0QhGT+C!m--Is^V!#M1gNB3HY5EPJ}+;-!|j484^c9GKAR&VNf$Tyj__`Z&Cdg|I&JUn+=?-xfY3 z(9+A;e|!8+0)QW6n21@ainRPLg@}Go46|5f%8rhof-l*E#*c4eID^E~1)%xEn`lKB z?$t2W>fxbg)Vz2B-qXmo28C7wRJvd%q+^xp0h1%#>NJ7Y)oBH7s>6>S>*@&HxA#^j z0i6GmTb&Znx;o{gO?9f6N>!&Bw5d*~3s4>5+y@u?Cx@c9lxP0xgqo#}J^<%jJ<)H6 z20m4i020ZnjPP3?oVD75&9y65L(Xwk~cHKdiQ z9EYj7US=8?oesJc^kDq{=(e4pfaRdKx3&*mgjys3dY^9XAR=ECyLF>~3(;9&j2~H9 z2FN6+%$ZQGLS)ImW_aiX(B+`BJ_`(#pqAkC0ER;J4s=2bVDiRbBmx%>8%;j>7hBnp zI@L%9$W~jP6#ZnY%c?W!JG&{BsO@+^S8b(L~Y3Xwok(x8y zD$it5wN_^2WKRH2`$CcNXQfh%m=lRcj!`M7gCl;9_KGZoti5YkN;8_psr&OP~V6Ra4UKGcA z6AwBpK>bwz3@?s?5x+#I8eR+lui!t5-Mqx$<>m`)t>nb55+$4T;C@&5vm(2xYBNE< zrPi=;kvAaHV<5uai3fE{-WrlqS~F-phjfD0b4c(Y?;Mf@(sM`!Xfub@xd7sloLc~s ztK2EAgL%{pD-QNdX$b&5Yzj$xX4n#7U7bqMx;iza&6HNpRBB4=0Bx$1z$OepSEmFp z+2A&`0<`8_2U>G(ByBjiFqPsQJJiFu*ahHh<`|ed_+nnJ!Suf*@9u^hbEBuMfGQ$; z^2vTt9*owKE)B+)e}LZ^g6{Wsf1fzVY%@Uqxz?CC2W=Yx25g)Iwv)*)MTIz6gSeFK z8K_A>Gf;~F%s?##&;zxCbhm*z6%|e!s0>IOs4~DiP+`cW4^$c89jFZO4pd?c)EJez z8kHFGWu6?gb)?mxZ3L|cZ3}1)S~E;IQKbzz26%@Yv3JN3t05;xemgmC?#Kr({xh}N zv_XquaVS=xF4Q2oS15WKCXLu4i0g58VJHHv7lv}udSR#nNM9IWWuz|*4A2Y1wO9;l z$@hujp-VwGgO&>eK_`K`Fi`snDo~ewUF|CdZM3fpfZDhDOGYI*=p~~Dz-VGUfY!t& z(toxlwxSYR6FW#NP2{8cS`!nX|5!~dB*#Bh6H8EoC#AB8%3< za?oZ@tR+ZkVhdn$zN?Atpp7PW0c@Ej#_+2*qlpCoMiYwxv?i93?lvdxf(brtb!I@? z>MR4itMe45@S4#wz`Hs#z`HsV>(#jumC%}4Lt1HKJ!q|oO`wfQ-Ab^zN@P~lKhLCA zt8)jMkzC+vqQDC!S`!OEYfUUAt>?rFfKAlIYVuWcVk2myiR}bZ6Wx7V0uKfxKZ=<} zn7xy>Z(~5(zD)+C_H9LAU=*$tz$jb=fL6F_(tozX)u9qv;TlORg=+z=6|Nn$QMfLG z|A!UMY!%=L6UmSBqZO`9`{78%;Z|3O`x@& zx0BX--UX1Z=QOPmy{wJrxhIN28}~#dfji@JtJ46O{5WFNoQ%`doB?TSE(20( z&PQ#HnzsQMHSYw_Y92gpT{Yhf_r!EmCT(7o0p59)0p59)SkJ3TR6?tH5ox``gVt(Z z0otf}HNpSGYHnN=JfP!brd<`pX|4(x;B{5V0M}JvxH#kjUC~^K)40e0FBci$ad_0B zLz7>+et;&>+7HkHTKfUS641sEkO0ztfO62r!%*u2?O|vJOn&8ZZf73lj*T6k;#@%5 za4rVYoNGWE&P^`RoI3!MU%Q-xC!{zRf!1{{C2crYFqQIMG=esq+g(7;dte6`I}x0} zOGy7i0cd0G6a%DLJDa@tl#zqByDI_AsH_3dqq3fKx5Wo;=5%X^0cqBb4DebzbC|+w z?Z^P{sAPb5R1)h^*@Q~yQQ1mbjmi$tdQ|cuRgTIy-G2!Jxc;Ja{S^Yh2N9*)uLLyw z4ELu8g-k*A7XjFT48dyzFX$ScK6AOr9YTKGs+ zs0=vVO5kV3OWh1n$F=CJ(3m;WzdR>paBnL3n)8MEKIs zze&rQ7%hflx&eSXRtm>-Gij+~0UjfncA`?^+N-h~eo&ryRJON41 z6R}2w^%2N4=E*>wW4&h_nRuYG4htw7RLB&=t%31n58$c+dtx}Q%Abnlodm_9_?ms- zF08_s+|wEy-xcQ<1pv}O*aQ7l0-z0q3ev8D5MK&yuW@r_N5?>C8UUc}kzJL((8J8< zlmkWZLa`fEsMW~Gj*2H$PQHnKKM3-aI`|nc zy~!qtrD)PLM>Z(|+BB&UAk`!Q-K28To+eefx!fkz0c=^5n#j)EBq$AQm1+_L(wf8o z`OG&i>hWZ%6D%mR&9?nw%TNb(G*tlF*nY(Tx*y6&du+c-naQ>N>OpJUua&g6{W<_P z(e@K3qcY0&D+Fz9zj6X;`^D#$;qyd*XtlfDZUQh1P%A*%0>sh2NoHXOIp_sQoPr+V zx8rzfl>pESP$B7V3(#hmg;-G27a$qnU4R(iU4V$O07(aU2`Zr%opR86(WwG$Ou<@$ z&0Rmt!ohVs&4tbYuM3^n>p~~~Lr$%r=sfCfKr@n~Ac+r(adHlz?Idw(%9=@#Hr7lb zkhW&3KpShO!3F3_GZD&@m|`nw0*0af$*J7~cD9o7v#}PnfkSeJ)hAwFg)s;q7oo$| zBE-2&y?%TZsvbNIiA$_l^a6lFfc!J!(O>q$>`8h_PJ9WLp>oht)8<0cssOa6)sl8K zO+=r;TH3%|XT;;JpqoMW?u9jUd#sh5@_4OJK1wU(KxspKavv)uEwxSnGf;x3gUc5A z>XYQ42TBou87QRyy80EQyA71-sAQU7iUDbsnhfw-YTGe|*HV)K-hsjZ??55e1Em_3 z&;z9ov>qsppgB;Cnsc^DQ*#D*)tuO?=EPoWt%V#nceH^Q|C!ow&EFJjEzXmocGMub zuN9X^MO^^e8I`O~P1Gf%^+a6`kUmjUi_$jfQmuH+0Lu}NimH%BJEIyv8)sA-L29Co zoq@{iuk^1F!02Boz?SJ>B{^vQs{t_jR}Y}|uZgs)fAN|#aFc?$aJ3+QGC&6a^)Ak9 z1>#Hqug*I zwnyiZ09xmYNN@R^SKM9yWPn%y7~s`EV!b;pMJ4p^w1TwSomPX^x>yJLkJZISa{NlI2Pl z3jwq)mVwsuVl`>4i**2-sEdu{tLDXa&_)+yHAWX{L6-pHrcYR2UabJoSF5T)%WWSo zuhs$RZC@j4we6E;x6I_;7VQG9ortmXK^wEX07#qNm7tB;UGD;z-SOGm;!$hBOW zwrp!LfNpCUXw%k80NvIa(w?@~%S>)tTS4o#c91r06&I%3S_0a%waNu-t30d#M1A60 za9Y8V^k{DbFr&Q_K#%s|MWDNl_I=SYY1TFa(yVP6;I(}AWD2k4BLloE4+Fd_53#m< zlBk3p;YFbJ2rmWA5iYM(RSEPE>%)%94d}~ z@rBUoYP2eOqP2f?5r+~0)rfZF{dzl{n3(Dg)%le2h=EFZ0}(^1~9RW8ejYDywHM* z^FW_%`OZV1*pm-+@J1X0@T`w}(Z3Z=SotHG@0u;aG^1__%u=pZUQZu&XGVCc2fNqP zE9bb=lTW572pq0bP!&eql@Xrr!S40+v>bPhi1B9)v5WB<#r<(f7m$7+9Ag`bNk5w# z`wVF+NIw^obS>%U!?EBC@Pm;4dRVAG=w{OJ?@G`{Fx|??VvL?KM+wQGi*YUS;45Iv zs9RWF{BTzGrN4ZCNJ6=L?-C1CY|6%Mh&1q2^jxgplL zl;9)8u$q+wA>S~($b`)DUGf{D6PjxqK64ow2d*`~_=Ql98YX|qH#2$$)T16it49-Q zsUGp8xn?lkN4`CymmpmS#`+pS@rc&cQ5 zF(2YR>UUWK`!{QFz#c-Zp831UzQb<=OPFj`w;J>ue+N30g7YJ$H?E&dWktIu6TY3W zJosvGVwbV#bw`{x5H`~DR>swj`vl*p$v?z$&RUC4r!ahhm9gW~?rZ7!ms=TSf4AkU z?D-F;rRjOh-z>3|>1SA0My$jVkH-Lxvoc=9n{8__X7a18b(St3)yaojusE6FLqBnV z4q^^kw1rOM2%W?l)AkF{QLF#e5_XN^OEuGW#j?Xx!n@B6? zbSr3SZ?en|08Y;=PxJt-$_mgq%?gZRjg^Bsfdpv|YS>O3>;ZeKn^kqHQ91pqZM7wpj`P(8xmrQZ>&y&YuY1<_VbC+dmiyU6~%`8SOl* z+w4QS7S=@_(zSy&hjd+Rm-?w;4A0-`9SnazRsfv8+&!c#2d(#;b)@xvvk@SDzX>@o zI(0#d0Wt|XpT8e#AzyV!*9BVcH~C|-f*^qOeaPwbU5HXkZYVCcT*k3+YhY*9pPU@? zS8W}hF^FbgA+kYh(}KOk7h@n+&_io1+a%a z3EZE(M0@QEGZZgl=083uz8Z!_7iih5lXk!^u2-s83rMSdA%A>P46JwYm7sO6)|1w~ z+61r(y-JUIEBUHjyy&fZl|Q~HB#^x-TaSx4rdPSEcX#thqj$K~pv?}q4nXTiBWceL zw?$@hcen!cw%*|;NShsQA&}n9SAjM=+y)oyq<%PS!z9+y9{7$emf*+m`ENz9!$p8L zviLYV+PDm7WuOy-`oBFQXrN6w23}q24m&B-PqQN}$e@KR zcN({=Oz01_(~yNF!8HH70kW_n(7LcvRal6HRS=+{$P!eETqToyJ3si+NLP1cz#6QJ z_$O`RBRtytIlgaEeHhwjS<>53!!pBGrj$iJf%?%}6KErgRsb!F4$>Z32z+}(A7~bU z*0LxjZDdi#RO)(GJ!m6~Ru@1P@%Pbh0O;u|FbX6Njd#c(jGr4Nh30hY*h=)W{RZRlvs#btDRjqRYs_OP@5&BiWQFHP` zesM|+BY1$-p9^3MIS4t$x06&;d>3dl#mDfJpPu3iNUJG6P6ovY$e(PDmn_N%6pKpG zhD8mtsnx8Wv|8To!^S2Z{v<`1!kN1|#8V}QK-Gz&?oO$?BCpW-`0 z{hL_yNUI>q1KTzLyc-(hd2JVH?@~yg7kbkyg%Zo9F!azz5NcoW8D))@ObZEySVJV! z3INTt4m6lXxxO}%#t+Q7wziOV*Hzg&?ZEjvSR-ZcbP=fDiDh_trvO0rPBCfS!R(zf z1b{`RtWYI^Ze>{mII?Gd^0svi~ zV$!-k+ANgy*`QfihAf+J7RGPGgiuKq6?9Hx^{EBWYg8j>E{JAXq6&w+%aROmm!%L* z`Bt(z!WtBRZ$H>D1V>tl_#)Uli3DB|y0S-D-ux&c(7zEb1K6^Yrz&#LzUW#2DQsSm zY5>rk+f3T+T=T>J-6?DD5BnLA=8KjAUSISKrttcrWq{Wg%>b`2npmHLwxJUGd5yx#wSKS<qvX~2Uu4r@^-41_fFa-i@u8-^vr~3zEYwu0MMc@CjDoNz6_PnqOT;a zL|+41i@qMT5q%SZ7JVy#o|!tBL(NPA`r#FQg8K4j%}nwo%8b?}_(li3ZTVwe_g4w@ zUz=3C*zFWe_lsTO|H>bR=a~46xAcr;S$2C> zs8Zd}ZTPsiu=m0C`Hn0Um84f&e!f%g?ht1Rn{cHqU+B(1)rvf!oNxie=bwfnsTxnf z>=-BU)VJoJ21{&Zd@Da#;FBMk&tGAM_C=ZsjK4`$zC^ecfQDF@>{eRwaLrsf z2E-qPeNc_$`Sq}A=$NVlfS_YMbZi6-ix)NlxwdrYO2>Ns4Y=K(#uWjmTdp<$3i(mq?&e{+8zey>~i8Zh@JSI8;Mp&2+$s4SU zD=E?KJ*-E4gF}TgN^R{Vm1QsTBPWFjq#^|V*^ntT#fQM{UUVftA@gAHF$c0 z`_0b$%LDIv++}>_>ZR`fG=2$!MW)u>XafGUR@Mk!$~WOp>i{ixMSG!ZL=xQrFXc&) zPJ*;@CtL-8S|KpKlm~*Y08LZnZuC$+Y5LRVBY!i1YpM)DAF*f}!qQ85IHGlc_EKJf zE@>xUcqz{V9m`jy3PCYJ%1e0>80kKUVuo?Ol+nA9vI;5Tp$y#sx>m6eGNyqs@J=$O z)$o%#e6XiaCqaP%|Mhehy_0Wt@6FFW36ytoD0;JtWxzZ633@X&NcH9c)O7&eo5iG6 zZ{CO=ECZ(D$KI>~t$VYHwC>F|fb`zPI7shJ2I$^wK_k1!7v9N7K^F{Gy-83;kn&D; zczUzrbBy4v(2`oDp_}Pjw4?#F)Qcn0l4bzik~Y$+B|RYIPMIk?_A9Cq8-faBj7DE) z@c{HJ9qNMv3$*ks9S2bD0*rL2-0yh=aWPI{ltc09FiX@ha|CdNItx-Lz0DcvM@L#Sy*srs<0$z7A75%MFbn|kj$8j zrx4YVm0Z5?`o2-(uHE=blIxtL2ui_PIwvWL3IZjHYS2a$bpTovjii+**yAnCqJ#T{~z~ zyDk7-yV&sb+7$rn+LeP&>4OVY?HZU&)vg(|JLk*ZGatv9akOJxkX(A&m`BKIzmuez z_Jake8h;eTX+H^|r~M+*YTA#JK`8>H3z92G1%YBw4cf4%V>Y#THIh~=B8~rX=e8aY zuXI8Brn|GBG)L%y%z>AWvmXPbAL~Rl9WuamLGlYmEi4+&xfqwf4gh|-DD>_}&`79` zbhj~C2?5=0OjZd%A08LUI?(8_z&#MNnQY-|I}i(#!OFSFb~lm{or`RD3xR5PJ80AH zE&$!`*vM47<7{^U0_a?fY;K#2$w0Tc62P>%o-uGSM%ZRnpBKy6?tuQf69bSu$hI>9 z7dlsAT&ML200MO<;2*uZcM$z$w==yrnG!F3PG0{W-;{e99Xa%i}gAk474g}CSC^C+{*&IG+ z{P)e2)9=A~mUjAOyoPUM^E=}>(Ut?^XOyd(x7B~p0_6atO_mr9&U64$&V>ZZHY*{m z#9R*Ah`9fwaxyw8h#1rLT`gcM&L?EH)-pbOC5n zbTNP~x{S0gdVMxoB@!5$td2n0WKE>CP1Z)BY_cxUy4$5qmKckQY_?4ne-nyONEUPs zuEBay0-zVCa?l&^9Hf0+MOJhUegWrT9RZz#$HUxc1aO^$-(zwhpmXq947+wF;}$$V z#~tc&Y|#7iFJ-qdKzd*No)qda!R55k$$?w&UKkj$aY`EJ&~O3J(kLeFN+WW`neHe% ziF!ci;CY?^>3uomtW*m56P;z=6!gA)tA;XpjG*@=cxoyOy)XNnk;1&FIt=k;s06p& zcOtG1G`HQeQB)gfx$XW0ToZ+A+x;_as$u|cyJ^E$fX234n(Z~9jfyl7C>3b|tyCo1 z_dv`JZl=&T3(+~_&0am;9}Ox3rqeL~9qLm?0Ec1dR|v0)KspOUZ&aeLZo(wmDr?dN z3|E5OOtgVkQx&4+zc}sCE`&?}AkDo8T5M&YDK@E>Rg6%2*~|<|FN52GD;?F; z%TfZmgQ%BP09r5WL2JEi25t1Roj~cO*gjn^lfd*LQ7=nCD<6{7%SvFQmvsbMFPjNc zdfDM7OhRDhpZt(S&p|`&bpM}MsLL@4$;qb(T9P*TY_fza$U#p&)c{7qbpTqzjilYl zM@qPbxwM2k0gQwb+W=?@7ZYd+R}g3k*8*q>H-Xj?ZU?O;9K;6ONVot%OSlrWmT(hj zBVjQSKufp)Kufq3w3cusXd~fT0wv)_(B7G+)y*U&+y&Yz;Uv`GNVtSROSqCCCE+?Z zVbX|~g#4tAG#oO4^iVxxLe_nS{L*n0?^bZiY@3qL+FtiR`L4;zm8Y6i@6SX}ax8Ns(4aVi|qVZ+-f@k(zOyj@g3NgB$`+YZD!8B^%!}kzok3ig*;7J(t6!4*7IC^Z~ z=u#NSZI@bN^j5>7D{y$&30m97!CKJLJ`Qqk$!uJGMsGDBdJbia=+Tn~NNc$SG(;Pu zwaj!hP$1q2EoNfWP>zrQt!5K|qjg%&8f!Byutx2um}~T;5s}#*F7hRg)rio!XPL5*hp8%Yagm zu#b`>&H3gZLLMWIo{7f#GWy{U%?Ih>;dKVxM>#Lpa;_MY`d}CRpJV8vcR#%OIzD8? zkARKAPcnVAm~471N%RmSJv<(N%yrw3IVG6;vk;6POdhAXJg)+#Lukxtl$h^9+#SxQ zB48-9pRJXbJ3YkZXz|#;1ZN{5=etn`31i?A0C>qIhJ$b z?UwlBV9=$OGv9(`ekACLX=#M-#%=Jy$+V*W`=c#x!jv&C5Im?`QRxZ49PJm}+Kmeb z7yo9$e}CwHQDa=+;3>bEF!~yPC4e3n*FSjvZzddkp^cB?BH_T`Rlk{VG3vO_a3mZW zyy-U+j^Ec7uR{gKjS4pYX2P5Bd66g3_v6L~AMch>*t`Ga;JhFtVmCPWvNGlXyWi*T z_he$1V*);`$&p_)iCyYIQK)S8m-C&}cTL89=6+s?-!-vsx*Vrf=wA6Plt-bp`dcXJ zALLiwdE7#79s95M`0Pz>M9`T(~ zN&x{_#!mw%Ca4AfV*$zla%SPvAtHQlx8}&>p-PogdcJA_(3i&Z#g_1np7wl6OwX5W zM+39IjdtpeW>1)oZbt0-J6g7-jhX+6PTuo4w;N@zftzIA$=EkH#5#ESZ?aAznylmZ zOoS;!@R*Y$f6P(_pnuF#Nm~DyrG~)!V;0s%{g`F5J_;Cn0VA;*O zTUwqNP9PhY=OW}ui%H}5$iHyh%yMS-vh4e=g~M$C06$VS_R-Wws^pmGN~#y7onA^= zOEeqoOV_x~id~3_rXRlh!w)2J)^QIXU&J`Wv|z8iX_STgFTXz@+>RBa30=zhKx#=V z0Y;u2NSy%d)i*hif>-E)^aMsh5{P3sewWV@#RT9I{|Nlc2rza-Zva#Q$X`N=Fh35? z!7k?pOanx~mV@ zE!+9G`|&NQTXM;XVHJ@}&fGQFRWT=)oSffPvDn8bwZ$zp^tm51E@-1}!K(oDyj=*e z-p-bCDPgRfw?BcNlrtme?SBJQ5m5Jj2LE~j&fCW=hZ}`}^Y)JU(= z*h-D5QDEaVrV**7#;|%V%&L{T9l$7c7s2|KTGvR9IA*>bHHy`_oWksQc9I;iTB!?E z?8a5G6sglp3#@$UrUmy+rm7W4zJaQyNsI#OJs0PetPCxQ5T-;{mE5EyaS;^21kjQ= z-4ozi66rFB62zaI2){R3>XFw7phsQ{X+84V2{ttHgncWv15XW8qiq09!st1kkKkSX zq30ub_RS(?EIJQ%`v{(QdAMnYu?l@-F+A<(4)z<<(_X#@UKG{KgB-$^JB00(nWy{3 zU91jPof45ic9>~i$0Mx)PMlOokEGk=j1GuPYoA$RAuM;dcP_bd)7`(=< zSmY%XZ`6uQ)MefP>e<w(!yu%Uq&`xc8+2U5r-G5P>JO=Hy{ErCYcpJ%vR zHP^zr7yI{1Tno#;vXK_n1dN?`5Q=e?+HvUsx#NociW0=NvV{2isC5FgsdXWMu5}4% zUF&iJUF&1|_YfZAS%iM+1vMZaZMD@AXlXS9m;u&8prti8y9XR?dT;h02)y-ij~rO1bMv*Ww172lGk|@st7894_;dqblYmv}3ckn0UybuR7)V{z}5(?giWodJUp!0N}a zcF5K~tFvI12y^&cgaB=N3i|;V!~PLUJI>`4{`CVw+yQq>?0gtZMR|U?;gFX3v6$k` z)GKdwJ*xHQaq7*~-<@+~y-;!|+62vve*wJ-UXR9VZBGJdy(uEC^`?|S>ka3nG`-1* z;LwqLwBFPZXuYWiFhXe}&_W@jl-?wuCJd3i$;@NGwpDW)h1d=S!e>AdOq!-dVx?Q? z#tr!bq?SW|JCst)tlU?eRflaj0X6}l69Fm#)CPbPe2q#d=g)e8RKp0?+py5_sBJ4V zQrl*rxGu#dejQ4P)gy-5Rtr!7ptS80ZyTv?mEBEA9bmLAty{FVv7b`fcIlf!ygX8A z+hfRSzxxQh_t-V&j1O6MZl1dj%xS|Ga@uoF%7^5i>oFx3WLPOvqDPf2m2$n`)7|4v zM?08&A3$98+`ovFK0p4L$F8{GE}Xe)wV(EL%Jb#ArpjF-!@qKycm3i~HUUP)tlwAo z1R7tAZiT{!&W~Z+$o|%fT1}w$2@L@26`_=NGh^jyxdM`DV@B>18UQ*8DBP?#CgK}h zmhq=iSRnz;i3b5n0F*iLV0Yo3+FiJ50hmhSJ;A$N^KJmUDgx^13V>Sjev`farG@mYFS@Oq>NcPb5J6c z1X?0B0Io!&1EgLhG#)sPTGO~D#BQK*-4!A9G@8&#ZqT^Mc+`RI>BAL=cH%pz2Lt2= zg?8f0o&dEUNn^?V$bYdAbdaT92*k~)g&;v%F9d}I8(Ij2-42h~?fupCvID(miMhVi zcz^j;�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 RO?V|fD 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

UVx|k>Lp5N&K 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 diff --git a/x/ibc-rate-limit/ibc_module.go b/x/ibc-rate-limit/ibc_module.go index d7e4bb172..5ac18bfe8 100644 --- a/x/ibc-rate-limit/ibc_module.go +++ b/x/ibc-rate-limit/ibc_module.go @@ -141,7 +141,7 @@ func (im *IBCModule) OnRecvPacket( return im.app.OnRecvPacket(ctx, packet, relayer) } - err := CheckAndUpdateRateLimits(ctx, im.ics4Middleware.ContractKeeper, "recv_packet", contract, packet) + err := CheckAndUpdateRateLimits(ctx, im.ics4Middleware.ContractKeeper, msgRecv, contract, packet) if err != nil { if strings.Contains(err.Error(), types.RateLimitExceededSubStr) { return utils.NewEmitErrorAcknowledgement(ctx, types.ErrRateLimitExceeded) diff --git a/x/ibc-rate-limit/ics4_wrapper.go b/x/ibc-rate-limit/ics4_wrapper.go index 6cbb43222..fb5163cd4 100644 --- a/x/ibc-rate-limit/ics4_wrapper.go +++ b/x/ibc-rate-limit/ics4_wrapper.go @@ -82,7 +82,7 @@ func (i *ICS4Wrapper) SendPacket(ctx sdk.Context, chanCap *capabilitytypes.Capab TimeoutHeight: timeoutHeight, } - err := CheckAndUpdateRateLimits(ctx, i.ContractKeeper, types.SendPacket, contract, fullPacket) + err := CheckAndUpdateRateLimits(ctx, i.ContractKeeper, msgSend, contract, fullPacket) if err != nil { return 0, errorsmod.Wrap(err, "rate limit SendPacket failed to authorize transfer") } diff --git a/x/ibc-rate-limit/types/constants.go b/x/ibc-rate-limit/types/constants.go index 3c0fc4f15..4d4fce0bd 100644 --- a/x/ibc-rate-limit/types/constants.go +++ b/x/ibc-rate-limit/types/constants.go @@ -3,5 +3,4 @@ package types const ( MaxSupportedIBCReceiverAddressLength = 4096 RateLimitExceededSubStr = "rate limit exceeded" - SendPacket = "send_packet" ) From 30f65578d2c05ef32f58c24adbb9f972fedd044e Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Fri, 27 Sep 2024 09:36:38 -0300 Subject: [PATCH 114/127] add comment explaining stack --- app/app.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/app/app.go b/app/app.go index 11bf55926..4618d68db 100644 --- a/app/app.go +++ b/app/app.go @@ -1639,6 +1639,18 @@ func overrideWasmVariables() { wasmtypes.MaxProposalWasmSize = wasmtypes.MaxWasmSize } +// WireICS20PreWasmKeeper Create the IBC Transfer Stack from bottom to top: +// * SendPacket. Originates from the transferKeeper and goes up the stack: +// transferKeeper.SendPacket -> ibc_rate_limit.SendPacket -> ibc_hooks.SendPacket -> channel.SendPacket +// * RecvPacket, message that originates from core IBC and goes down to app, the flow is the other way +// channel.RecvPacket -> ibc_hooks.OnRecvPacket -> ibc_rate_limit.OnRecvPacket -> gmp.OnRecvPacket -> pfm.OnRecvPacket -> transfer.OnRecvPacket +// +// Note that the forward middleware is only integrated on the "receive" direction. It can be safely skipped when sending. +// Note also that the forward middleware is called "router", but we are using the name "pfm" (packet forward middleware) for clarity +// This may later be renamed upstream: https://github.com/ibc-apps/middleware/packet-forward-middleware/issues/10 +// +// After this, the wasm keeper is required to be set on both +// app.Ics20WasmHooks AND app.RateLimitingICS4Wrapper func (app *App) WireICS20PreWasmKeeper( appCodec codec.Codec, ) { @@ -1658,7 +1670,7 @@ func (app *App) WireICS20PreWasmKeeper( app.Ics20WasmHooks = &wasmHooks app.HooksICS4Wrapper = ibchooks.NewICS4Middleware( app.IBCKeeper.ChannelKeeper, - app.PFMKeeper, + app.IBCKeeper.ChannelKeeper, &wasmHooks, ) From a234457b22026e8bb55b0116f7ab5b33ec885055 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Fri, 27 Sep 2024 11:38:06 -0300 Subject: [PATCH 115/127] upgrade rl to v5 --- app/app.go | 12 +++--- app/proposals_allowlisting.go | 2 +- .../ibcratelimit/v1beta1/genesis.proto | 2 +- .../neutron/ibcratelimit/v1beta1/params.proto | 2 +- .../neutron/ibcratelimit/v1beta1/query.proto | 2 +- proto/neutron/ibcratelimit/v1beta1/tx.proto | 2 +- x/ibc-rate-limit/client/cli/query.go | 2 +- x/ibc-rate-limit/genesis.go | 2 +- x/ibc-rate-limit/genesis_test.go | 4 +- x/ibc-rate-limit/ibc_middleware_test.go | 4 +- x/ibc-rate-limit/ibc_module.go | 4 +- x/ibc-rate-limit/ics4_wrapper.go | 4 +- x/ibc-rate-limit/keeper/grpc_query_params.go | 2 +- x/ibc-rate-limit/keeper/keeper.go | 2 +- x/ibc-rate-limit/keeper/msg_server.go | 2 +- x/ibc-rate-limit/module.go | 6 +-- x/ibc-rate-limit/module_simulation.go | 6 +-- x/ibc-rate-limit/rate_limit.go | 2 +- x/ibc-rate-limit/types/genesis.pb.go | 4 +- x/ibc-rate-limit/types/params.pb.go | 4 +- x/ibc-rate-limit/types/query.pb.go | 40 +++++++++---------- x/ibc-rate-limit/types/tx.pb.go | 6 +-- 22 files changed, 57 insertions(+), 59 deletions(-) diff --git a/app/app.go b/app/app.go index a8c4daec2..ea196190c 100644 --- a/app/app.go +++ b/app/app.go @@ -10,16 +10,14 @@ import ( "path/filepath" "time" - "github.com/neutron-org/neutron/v5/x/dynamicfees" dynamicfeestypes "github.com/neutron-org/neutron/v5/x/dynamicfees/types" "github.com/skip-mev/feemarket/x/feemarket" feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper" feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" - "github.com/neutron-org/neutron/v4/x/dynamicfees" - dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit" + "github.com/neutron-org/neutron/v5/x/dynamicfees" + "github.com/neutron-org/neutron/v5/x/ibc-rate-limit" "cosmossdk.io/client/v2/autocli" "cosmossdk.io/core/appmodule" @@ -135,8 +133,8 @@ import ( ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck ibcconnectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" - ibcratelimitkeeper "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/keeper" - ibcratelimittypes "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" + ibcratelimitkeeper "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/keeper" + ibcratelimittypes "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types" //nolint:staticcheck ibcporttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" ibchost "github.com/cosmos/ibc-go/v8/modules/core/exported" @@ -415,7 +413,7 @@ type App struct { checkTxHandler checktx.CheckTx } -// AutoCLIOpts returns options based upon the modules in the neutron v4 app. +// AutoCLIOpts returns options based upon the modules in the neutron v5 app. func (app *App) AutoCLIOpts(initClientCtx client.Context) autocli.AppOptions { modules := make(map[string]appmodule.AppModule) for _, m := range app.mm.Modules { diff --git a/app/proposals_allowlisting.go b/app/proposals_allowlisting.go index b5e604ee7..e68cd1b46 100644 --- a/app/proposals_allowlisting.go +++ b/app/proposals_allowlisting.go @@ -16,7 +16,7 @@ import ( ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck ccvconsumertypes "github.com/cosmos/interchain-security/v5/x/ccv/consumer/types" - ibcratelimittypes "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" + ibcratelimittypes "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types" feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types" diff --git a/proto/neutron/ibcratelimit/v1beta1/genesis.proto b/proto/neutron/ibcratelimit/v1beta1/genesis.proto index 64f0df800..f66c0fcd4 100644 --- a/proto/neutron/ibcratelimit/v1beta1/genesis.proto +++ b/proto/neutron/ibcratelimit/v1beta1/genesis.proto @@ -6,7 +6,7 @@ import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; import "neutron/ibcratelimit/v1beta1/params.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types"; // GenesisState defines the ibc-rate-limit module's genesis state. message GenesisState { diff --git a/proto/neutron/ibcratelimit/v1beta1/params.proto b/proto/neutron/ibcratelimit/v1beta1/params.proto index 3af333e3a..8dee35a10 100644 --- a/proto/neutron/ibcratelimit/v1beta1/params.proto +++ b/proto/neutron/ibcratelimit/v1beta1/params.proto @@ -3,7 +3,7 @@ package neutron.ibcratelimit.v1beta1; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types"; // Params defines the parameters for the ibc-rate-limit module. message Params { diff --git a/proto/neutron/ibcratelimit/v1beta1/query.proto b/proto/neutron/ibcratelimit/v1beta1/query.proto index 07ce62400..79b560ff3 100644 --- a/proto/neutron/ibcratelimit/v1beta1/query.proto +++ b/proto/neutron/ibcratelimit/v1beta1/query.proto @@ -6,7 +6,7 @@ import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; import "neutron/ibcratelimit/v1beta1/params.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types"; // Query defines the gRPC querier service. service Query { diff --git a/proto/neutron/ibcratelimit/v1beta1/tx.proto b/proto/neutron/ibcratelimit/v1beta1/tx.proto index fb0a25912..71ff52e9c 100644 --- a/proto/neutron/ibcratelimit/v1beta1/tx.proto +++ b/proto/neutron/ibcratelimit/v1beta1/tx.proto @@ -9,7 +9,7 @@ import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; import "neutron/ibcratelimit/v1beta1/params.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types"; +option go_package = "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types"; // Msg defines the tokefactory module's gRPC message service. service Msg { diff --git a/x/ibc-rate-limit/client/cli/query.go b/x/ibc-rate-limit/client/cli/query.go index 5eefda027..50126ff5d 100644 --- a/x/ibc-rate-limit/client/cli/query.go +++ b/x/ibc-rate-limit/client/cli/query.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" + "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types" "github.com/spf13/cobra" ) diff --git a/x/ibc-rate-limit/genesis.go b/x/ibc-rate-limit/genesis.go index 9a1882222..938943b59 100644 --- a/x/ibc-rate-limit/genesis.go +++ b/x/ibc-rate-limit/genesis.go @@ -3,7 +3,7 @@ package ibcratelimit import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" + "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types" ) // InitGenesis initializes the x/ibc-rate-limit module's state from a provided genesis diff --git a/x/ibc-rate-limit/genesis_test.go b/x/ibc-rate-limit/genesis_test.go index 485d97406..c2bd546f8 100644 --- a/x/ibc-rate-limit/genesis_test.go +++ b/x/ibc-rate-limit/genesis_test.go @@ -4,10 +4,10 @@ import ( "testing" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" + "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types" "github.com/stretchr/testify/suite" - "github.com/neutron-org/neutron/v4/testutil/apptesting" + "github.com/neutron-org/neutron/v5/testutil/apptesting" ) type GenesisTestSuite struct { diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index a30c0481c..d354a12ea 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -10,7 +10,7 @@ import ( sdkmath "cosmossdk.io/math" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" - "github.com/neutron-org/neutron/v4/testutil" + "github.com/neutron-org/neutron/v5/testutil" "github.com/stretchr/testify/require" "golang.org/x/exp/slices" @@ -23,7 +23,7 @@ import ( ibctesting "github.com/cosmos/ibc-go/v8/testing" "github.com/stretchr/testify/suite" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" + "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types" ) type MiddlewareTestSuite struct { diff --git a/x/ibc-rate-limit/ibc_module.go b/x/ibc-rate-limit/ibc_module.go index 5ac18bfe8..a34e9beb4 100644 --- a/x/ibc-rate-limit/ibc_module.go +++ b/x/ibc-rate-limit/ibc_module.go @@ -4,7 +4,7 @@ import ( "encoding/json" "strings" - "github.com/neutron-org/neutron/v4/x/ibc-hooks/utils" + "github.com/neutron-org/neutron/v5/x/ibc-hooks/utils" errorsmod "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" @@ -16,7 +16,7 @@ import ( porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" "github.com/cosmos/ibc-go/v8/modules/core/exported" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" + "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types" ) type IBCModule struct { diff --git a/x/ibc-rate-limit/ics4_wrapper.go b/x/ibc-rate-limit/ics4_wrapper.go index fb5163cd4..41301ab86 100644 --- a/x/ibc-rate-limit/ics4_wrapper.go +++ b/x/ibc-rate-limit/ics4_wrapper.go @@ -16,8 +16,8 @@ import ( porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" "github.com/cosmos/ibc-go/v8/modules/core/exported" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/keeper" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" + "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/keeper" + "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types" ) var ( diff --git a/x/ibc-rate-limit/keeper/grpc_query_params.go b/x/ibc-rate-limit/keeper/grpc_query_params.go index 4621ba4e9..99a9571cb 100644 --- a/x/ibc-rate-limit/keeper/grpc_query_params.go +++ b/x/ibc-rate-limit/keeper/grpc_query_params.go @@ -7,7 +7,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" + "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types" ) func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { diff --git a/x/ibc-rate-limit/keeper/keeper.go b/x/ibc-rate-limit/keeper/keeper.go index beefdf69e..a726c3ef1 100644 --- a/x/ibc-rate-limit/keeper/keeper.go +++ b/x/ibc-rate-limit/keeper/keeper.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" + "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types" ) // Keeper of the globalfee store diff --git a/x/ibc-rate-limit/keeper/msg_server.go b/x/ibc-rate-limit/keeper/msg_server.go index 3c0e1098b..1f7e864bc 100644 --- a/x/ibc-rate-limit/keeper/msg_server.go +++ b/x/ibc-rate-limit/keeper/msg_server.go @@ -7,7 +7,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" + "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types" ) type msgServer struct { diff --git a/x/ibc-rate-limit/module.go b/x/ibc-rate-limit/module.go index 06de90beb..aa794bf49 100644 --- a/x/ibc-rate-limit/module.go +++ b/x/ibc-rate-limit/module.go @@ -6,7 +6,7 @@ import ( "fmt" "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/keeper" + "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/keeper" "github.com/spf13/cobra" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -18,8 +18,8 @@ import ( "cosmossdk.io/core/appmodule" - ibcratelimitcli "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client/cli" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" + ibcratelimitcli "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/client/cli" + "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types" ) var ( diff --git a/x/ibc-rate-limit/module_simulation.go b/x/ibc-rate-limit/module_simulation.go index 9a617a91d..0bc601524 100644 --- a/x/ibc-rate-limit/module_simulation.go +++ b/x/ibc-rate-limit/module_simulation.go @@ -6,9 +6,9 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" - "github.com/neutron-org/neutron/v4/testutil/common/sample" - ibcratelimitsimulation "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/simulation" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" + "github.com/neutron-org/neutron/v5/testutil/common/sample" + ibcratelimitsimulation "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/simulation" + "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types" ) // avoid unused import issue diff --git a/x/ibc-rate-limit/rate_limit.go b/x/ibc-rate-limit/rate_limit.go index 27ffd7f2f..eb8d01f49 100644 --- a/x/ibc-rate-limit/rate_limit.go +++ b/x/ibc-rate-limit/rate_limit.go @@ -10,7 +10,7 @@ import ( clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" "github.com/cosmos/ibc-go/v8/modules/core/exported" - "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" + "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types" ) var ( diff --git a/x/ibc-rate-limit/types/genesis.pb.go b/x/ibc-rate-limit/types/genesis.pb.go index 4ba5e6d0a..735122fb7 100644 --- a/x/ibc-rate-limit/types/genesis.pb.go +++ b/x/ibc-rate-limit/types/genesis.pb.go @@ -94,9 +94,9 @@ var fileDescriptor_4a6a285b43c9c3fe = []byte{ 0x86, 0x20, 0xa8, 0x4e, 0xa7, 0xa0, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0xb2, 0x48, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x87, 0x9a, 0xab, 0x9b, - 0x5f, 0x94, 0x0e, 0x63, 0xeb, 0x97, 0x99, 0xe8, 0x57, 0x80, 0x1c, 0xad, 0x0b, 0xb2, 0x49, 0x17, + 0x5f, 0x94, 0x0e, 0x63, 0xeb, 0x97, 0x99, 0xea, 0x57, 0x80, 0x1c, 0xad, 0x0b, 0xb2, 0x49, 0x17, 0xe2, 0xec, 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0xb0, 0x73, 0x8d, 0x01, 0x01, 0x00, 0x00, - 0xff, 0xff, 0x62, 0xd7, 0xa1, 0x99, 0x71, 0x01, 0x00, 0x00, + 0xff, 0xff, 0xc8, 0xd2, 0x7b, 0x68, 0x71, 0x01, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/ibc-rate-limit/types/params.pb.go b/x/ibc-rate-limit/types/params.pb.go index b0051ec28..81ce2f24f 100644 --- a/x/ibc-rate-limit/types/params.pb.go +++ b/x/ibc-rate-limit/types/params.pb.go @@ -89,9 +89,9 @@ var fileDescriptor_96b2a3ecd8a27c06 = []byte{ 0x4a, 0x41, 0xfc, 0x30, 0x21, 0x47, 0x88, 0x88, 0x53, 0xd0, 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x38, 0xe1, 0xb1, 0x1c, 0xc3, 0x85, 0xc7, 0x72, 0x0c, 0x37, 0x1e, 0xcb, 0x31, 0x44, 0x59, 0xa4, 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea, - 0x43, 0x9d, 0xab, 0x9b, 0x5f, 0x94, 0x0e, 0x63, 0xeb, 0x97, 0x99, 0xe8, 0x57, 0x80, 0xbc, 0xaa, + 0x43, 0x9d, 0xab, 0x9b, 0x5f, 0x94, 0x0e, 0x63, 0xeb, 0x97, 0x99, 0xea, 0x57, 0x80, 0xbc, 0xaa, 0x0b, 0xf2, 0x80, 0x2e, 0xc4, 0xb3, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0x60, 0x07, 0x1b, - 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x60, 0x02, 0x98, 0x11, 0x01, 0x00, 0x00, + 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x5f, 0x65, 0xd8, 0x69, 0x11, 0x01, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/ibc-rate-limit/types/query.pb.go b/x/ibc-rate-limit/types/query.pb.go index d8ea5222d..f794ecbd4 100644 --- a/x/ibc-rate-limit/types/query.pb.go +++ b/x/ibc-rate-limit/types/query.pb.go @@ -124,26 +124,26 @@ func init() { var fileDescriptor_a6095f726b1d3aec = []byte{ // 318 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x90, 0xbf, 0x4a, 0x7b, 0x31, - 0x14, 0xc7, 0x6f, 0x7e, 0xfc, 0xec, 0x70, 0xdd, 0x62, 0x07, 0x29, 0x25, 0x4a, 0x11, 0xa9, 0x42, - 0x13, 0x5b, 0x1d, 0x9c, 0xfb, 0x04, 0xda, 0x4d, 0xb7, 0xdc, 0x12, 0x62, 0xa0, 0x37, 0x27, 0x4d, - 0x72, 0x8b, 0x5d, 0x7d, 0x02, 0xc1, 0xd9, 0xd9, 0x57, 0xe9, 0x58, 0x70, 0x71, 0x12, 0x69, 0x7d, - 0x10, 0xe9, 0x4d, 0x2c, 0xf5, 0x0f, 0x17, 0xdc, 0x0e, 0x27, 0xdf, 0xcf, 0x87, 0x6f, 0x4e, 0xda, - 0xd6, 0xa2, 0xf0, 0x16, 0x34, 0x53, 0xd9, 0xd0, 0x72, 0x2f, 0x46, 0x2a, 0x57, 0x9e, 0x4d, 0xba, - 0x99, 0xf0, 0xbc, 0xcb, 0xc6, 0x85, 0xb0, 0x53, 0x6a, 0x2c, 0x78, 0xc0, 0xcd, 0x98, 0xa4, 0x9b, - 0x49, 0x1a, 0x93, 0x8d, 0xe3, 0x21, 0xb8, 0x1c, 0x1c, 0xcb, 0xb8, 0x13, 0x01, 0x5b, 0x4b, 0x0c, - 0x97, 0x4a, 0x73, 0xaf, 0x40, 0x07, 0x53, 0xa3, 0x2e, 0x41, 0x42, 0x39, 0xb2, 0xd5, 0x14, 0xb7, - 0x4d, 0x09, 0x20, 0x47, 0x82, 0x71, 0xa3, 0x18, 0xd7, 0x1a, 0x7c, 0x89, 0xb8, 0xf8, 0x7a, 0x54, - 0xd9, 0xd3, 0x70, 0xcb, 0xf3, 0x18, 0x6d, 0xd5, 0x53, 0x7c, 0xb9, 0x2a, 0x70, 0x51, 0x2e, 0x07, - 0x62, 0x5c, 0x08, 0xe7, 0x5b, 0x57, 0xe9, 0xce, 0x97, 0xad, 0x33, 0xa0, 0x9d, 0xc0, 0xfd, 0xb4, - 0x16, 0xe0, 0x5d, 0xb4, 0x8f, 0xda, 0xdb, 0xbd, 0x03, 0x5a, 0xf5, 0x4d, 0x1a, 0xe8, 0xfe, 0xff, - 0xd9, 0xeb, 0x5e, 0x32, 0x88, 0x64, 0xef, 0x09, 0xa5, 0x5b, 0xa5, 0x1b, 0x3f, 0xa2, 0xb4, 0x16, - 0x22, 0xf8, 0xa4, 0x5a, 0xf4, 0xb3, 0x61, 0xa3, 0xfb, 0x07, 0x22, 0xb4, 0x6f, 0xd1, 0xbb, 0xe7, - 0xf7, 0x87, 0x7f, 0x6d, 0x7c, 0xc8, 0x36, 0xce, 0xd3, 0x59, 0xb1, 0x9d, 0xdf, 0x0e, 0xd4, 0x1f, - 0xcc, 0x16, 0x04, 0xcd, 0x17, 0x04, 0xbd, 0x2d, 0x08, 0xba, 0x5f, 0x92, 0x64, 0xbe, 0x24, 0xc9, - 0xcb, 0x92, 0x24, 0xd7, 0xe7, 0x52, 0xf9, 0x9b, 0x22, 0xa3, 0x43, 0xc8, 0x3f, 0x5d, 0x1d, 0xb0, - 0x72, 0xed, 0x9d, 0x9c, 0xb1, 0xdb, 0xef, 0x72, 0x3f, 0x35, 0xc2, 0x65, 0xb5, 0xf2, 0xea, 0xa7, - 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x44, 0xdd, 0x4d, 0xd4, 0x4a, 0x02, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x90, 0xcd, 0x4a, 0x33, 0x31, + 0x14, 0x86, 0x27, 0x1f, 0x9f, 0x5d, 0x8c, 0xbb, 0xd8, 0x85, 0x94, 0x12, 0xa5, 0x88, 0x54, 0xa1, + 0x89, 0xad, 0x08, 0xae, 0x7b, 0x05, 0xda, 0x9d, 0xee, 0x32, 0x25, 0xc4, 0x40, 0x27, 0x27, 0x4d, + 0x32, 0xc5, 0x6e, 0xbd, 0x02, 0xc1, 0xb5, 0x6b, 0x6f, 0xa5, 0xcb, 0x82, 0x1b, 0x57, 0x22, 0xad, + 0x17, 0x22, 0x9d, 0xc4, 0x52, 0x7f, 0x18, 0x70, 0x77, 0x38, 0x79, 0x9f, 0x87, 0x37, 0x27, 0x6d, + 0x6b, 0x51, 0x78, 0x0b, 0x9a, 0xa9, 0x6c, 0x68, 0xb9, 0x17, 0x23, 0x95, 0x2b, 0xcf, 0x26, 0xdd, + 0x4c, 0x78, 0xde, 0x65, 0xe3, 0x42, 0xd8, 0x29, 0x35, 0x16, 0x3c, 0xe0, 0x66, 0x4c, 0xd2, 0xcd, + 0x24, 0x8d, 0xc9, 0xc6, 0xf1, 0x10, 0x5c, 0x0e, 0x8e, 0x65, 0xdc, 0x89, 0x80, 0xad, 0x25, 0x86, + 0x4b, 0xa5, 0xb9, 0x57, 0xa0, 0x83, 0xa9, 0x51, 0x97, 0x20, 0xa1, 0x1c, 0xd9, 0x6a, 0x8a, 0xdb, + 0xa6, 0x04, 0x90, 0x23, 0xc1, 0xb8, 0x51, 0x8c, 0x6b, 0x0d, 0xbe, 0x44, 0x5c, 0x7c, 0x3d, 0xaa, + 0xec, 0x69, 0xb8, 0xe5, 0x79, 0x8c, 0xb6, 0xea, 0x29, 0xbe, 0x5c, 0x15, 0xb8, 0x28, 0x97, 0x03, + 0x31, 0x2e, 0x84, 0xf3, 0xad, 0xab, 0x74, 0xe7, 0xcb, 0xd6, 0x19, 0xd0, 0x4e, 0xe0, 0x7e, 0x5a, + 0x0b, 0xf0, 0x2e, 0xda, 0x47, 0xed, 0xed, 0xde, 0x01, 0xad, 0xfa, 0x26, 0x0d, 0x74, 0xff, 0xff, + 0xec, 0x75, 0x2f, 0x19, 0x44, 0xb2, 0xf7, 0x84, 0xd2, 0xad, 0xd2, 0x8d, 0x1f, 0x51, 0x5a, 0x0b, + 0x11, 0x7c, 0x52, 0x2d, 0xfa, 0xd9, 0xb0, 0xd1, 0xfd, 0x03, 0x11, 0xda, 0xb7, 0xe8, 0xdd, 0xf3, + 0xfb, 0xc3, 0xbf, 0x36, 0x3e, 0x64, 0x1b, 0xe7, 0xe9, 0xac, 0xd8, 0xce, 0x6f, 0x07, 0xea, 0x0f, + 0x66, 0x0b, 0x82, 0xe6, 0x0b, 0x82, 0xde, 0x16, 0x04, 0xdd, 0x2f, 0x49, 0x32, 0x5f, 0x92, 0xe4, + 0x65, 0x49, 0x92, 0xeb, 0x73, 0xa9, 0xfc, 0x4d, 0x91, 0xd1, 0x21, 0xe4, 0x9f, 0xae, 0x0e, 0x58, + 0xb9, 0xf6, 0x4e, 0xce, 0xd8, 0xed, 0x77, 0xb9, 0x9f, 0x1a, 0xe1, 0xb2, 0x5a, 0x79, 0xf5, 0xd3, + 0x8f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xee, 0xd8, 0x97, 0x25, 0x4a, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/ibc-rate-limit/types/tx.pb.go b/x/ibc-rate-limit/types/tx.pb.go index ca465e009..ddf4576ad 100644 --- a/x/ibc-rate-limit/types/tx.pb.go +++ b/x/ibc-rate-limit/types/tx.pb.go @@ -165,9 +165,9 @@ var fileDescriptor_88b553b0b85135fe = []byte{ 0xbb, 0x14, 0x6b, 0x03, 0xc8, 0x8b, 0x4e, 0x41, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, 0x10, 0x65, 0x91, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x0f, 0xb5, - 0x41, 0x37, 0xbf, 0x28, 0x1d, 0xc6, 0xd6, 0x2f, 0x33, 0xd1, 0xaf, 0x40, 0xf7, 0x7d, 0x49, 0x65, - 0x41, 0x6a, 0x71, 0x12, 0x1b, 0x38, 0x2a, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x78, 0xe1, - 0x33, 0x6c, 0xd9, 0x02, 0x00, 0x00, + 0x41, 0x37, 0xbf, 0x28, 0x1d, 0xc6, 0xd6, 0x2f, 0x33, 0xd5, 0xaf, 0x40, 0xf7, 0x7d, 0x49, 0x65, + 0x41, 0x6a, 0x71, 0x12, 0x1b, 0x38, 0x2a, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xd2, 0xe4, + 0xe9, 0x9d, 0xd9, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. From 2ec4d098997e3305837f23215c9c3c2193fae3f6 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Fri, 27 Sep 2024 12:48:54 -0300 Subject: [PATCH 116/127] make channel constant --- x/ibc-rate-limit/ibc_middleware_test.go | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index d354a12ea..b9752c6e6 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -30,6 +30,8 @@ type MiddlewareTestSuite struct { testutil.IBCConnectionTestSuite } +const channelTest = "channel-2" + // Setup func TestMiddlewareTestSuite(t *testing.T) { suite.Run(t, new(MiddlewareTestSuite)) @@ -277,9 +279,8 @@ func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { suite.initializeEscrow() // Get the denom and amount to send denom := sdk.DefaultBondDenom - channel := "channel-2" if !native { - denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-2", denom)) + denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", channelTest, denom)) fmt.Println(denomTrace) denom = denomTrace.IBCDenom() } @@ -298,7 +299,7 @@ func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { // Setup contract testOwner := sdk.MustAccAddressFromBech32(testutil.TestOwnerAddress) suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") - quotas := suite.BuildChannelQuota("weekly", channel, denom, 604800, 5, 5) + quotas := suite.BuildChannelQuota("weekly", channelTest, denom, 604800, 5, 5) addr := suite.InstantiateRLContract(quotas) suite.RegisterRateLimitingContract(addr) @@ -375,7 +376,6 @@ func (suite *MiddlewareTestSuite) TestSendTransferDailyReset() { suite.initializeEscrow() // Get the denom and amount to send denom := sdk.DefaultBondDenom - channel := "channel-2" app := suite.GetNeutronZoneApp(suite.ChainA) @@ -391,7 +391,7 @@ func (suite *MiddlewareTestSuite) TestSendTransferDailyReset() { // Setup contract testOwner := sdk.MustAccAddressFromBech32(testutil.TestOwnerAddress) suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") - quotas := suite.BuildChannelQuotaWith2Quotas("weekly", channel, denom, 604800, "daily", 4, 4, 86400, 2, 2) + quotas := suite.BuildChannelQuotaWith2Quotas("weekly", channelTest, denom, 604800, "daily", 4, 4, 86400, 2, 2) addr := suite.InstantiateRLContract(quotas) suite.RegisterRateLimitingContract(addr) @@ -460,12 +460,11 @@ func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { // Get the denom and amount to send sendDenom := sdk.DefaultBondDenom localDenom := sdk.DefaultBondDenom - channel := "channel-2" if native { - denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-2", localDenom)) + denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", channelTest, localDenom)) localDenom = denomTrace.IBCDenom() } else { - denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-2", sendDenom)) + denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", channelTest, sendDenom)) sendDenom = denomTrace.IBCDenom() } @@ -483,7 +482,7 @@ func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { suite.GetNeutronZoneApp(suite.ChainA) testOwner := sdk.MustAccAddressFromBech32(testutil.TestOwnerAddress) suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") - quotas := suite.BuildChannelQuota("weekly", channel, localDenom, 604800, 4, 4) + quotas := suite.BuildChannelQuota("weekly", channelTest, localDenom, 604800, 4, 4) addr := suite.InstantiateRLContract(quotas) suite.RegisterRateLimitingContract(addr) @@ -539,7 +538,7 @@ func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { // Setup contract testOwner := sdk.MustAccAddressFromBech32(testutil.TestOwnerAddress) suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") - quotas := suite.BuildChannelQuota("weekly", "channel-2", sdk.DefaultBondDenom, 604800, 1, 1) + quotas := suite.BuildChannelQuota("weekly", channelTest, sdk.DefaultBondDenom, 604800, 1, 1) addr := suite.InstantiateRLContract(quotas) suite.RegisterRateLimitingContract(addr) From 146dce59cb31ec1e97a03cbc804c3cbdfdaa6fb7 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Mon, 30 Sep 2024 09:38:53 -0300 Subject: [PATCH 117/127] ref: simple return instead of branching --- x/ibc-rate-limit/ibc_module.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/x/ibc-rate-limit/ibc_module.go b/x/ibc-rate-limit/ibc_module.go index a34e9beb4..38b4349ca 100644 --- a/x/ibc-rate-limit/ibc_module.go +++ b/x/ibc-rate-limit/ibc_module.go @@ -217,15 +217,12 @@ func (im *IBCModule) RevertSentPacket( return nil } - if err := UndoSendRateLimit( + return UndoSendRateLimit( ctx, im.ics4Middleware.ContractKeeper, contract, packet, - ); err != nil { - return err - } - return nil + ) } // SendPacket implements the ICS4 Wrapper interface From cfa54003cf1f8e9e7dd0d713c80605641d14f610 Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Mon, 30 Sep 2024 17:38:00 +0300 Subject: [PATCH 118/127] add ibc rate limits into upgrade handler --- app/upgrades/v5.0.0/constants.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/upgrades/v5.0.0/constants.go b/app/upgrades/v5.0.0/constants.go index dcc1aff40..96adc3463 100644 --- a/app/upgrades/v5.0.0/constants.go +++ b/app/upgrades/v5.0.0/constants.go @@ -2,7 +2,9 @@ package v500 import ( storetypes "cosmossdk.io/store/types" + "github.com/neutron-org/neutron/v5/app/upgrades" + ibcratelimittypes "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types" ) const ( @@ -14,6 +16,6 @@ var Upgrade = upgrades.Upgrade{ UpgradeName: UpgradeName, CreateUpgradeHandler: CreateUpgradeHandler, StoreUpgrades: storetypes.StoreUpgrades{ - Added: []string{}, + Added: []string{ibcratelimittypes.ModuleName}, }, } From b1d32a8459dff94579ae1ea5d2c9856126b42e81 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Mon, 30 Sep 2024 13:40:28 -0300 Subject: [PATCH 119/127] use channel keeper instead of rl wrapper in wasm & ica --- app/app.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/app.go b/app/app.go index ea196190c..982a356b5 100644 --- a/app/app.go +++ b/app/app.go @@ -621,7 +621,7 @@ func New( app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( appCodec, keys[icacontrollertypes.StoreKey], app.GetSubspace(icacontrollertypes.SubModuleName), - app.RateLimitingICS4Wrapper, // defined in wireisc20 + app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, scopedICAControllerKeeper, app.MsgServiceRouter(), authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), @@ -629,7 +629,7 @@ func New( app.ICAHostKeeper = icahostkeeper.NewKeeper( appCodec, keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName), - app.RateLimitingICS4Wrapper, // defined in wireisc20 + app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, app.AccountKeeper, scopedICAHostKeeper, app.MsgServiceRouter(), authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), @@ -821,7 +821,7 @@ func New( &app.BankKeeper, nil, nil, - app.RateLimitingICS4Wrapper, // defined in wireisc20 + app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, scopedWasmKeeper, From aea67835ea04a1329836fd8f56ace54f67deba19 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 08:23:12 +0000 Subject: [PATCH 120/127] Bump google.golang.org/grpc from 1.67.0 to 1.67.1 Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.67.0 to 1.67.1. - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.67.0...v1.67.1) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 5ef234b49..b94fd576c 100644 --- a/go.mod +++ b/go.mod @@ -46,7 +46,7 @@ require ( github.com/stretchr/testify v1.9.0 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 - google.golang.org/grpc v1.67.0 + google.golang.org/grpc v1.67.1 google.golang.org/protobuf v1.34.2 gopkg.in/yaml.v2 v2.4.0 ) diff --git a/go.sum b/go.sum index 93d66b738..07afbd047 100644 --- a/go.sum +++ b/go.sum @@ -1676,8 +1676,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.67.0 h1:IdH9y6PF5MPSdAntIcpjQ+tXO41pcQsfZV2RxtQgVcw= -google.golang.org/grpc v1.67.0/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= +google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= From ef2d0b0faf97b324f1530bd8bb8a40cdbe694ce6 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 1 Oct 2024 09:15:42 -0300 Subject: [PATCH 121/127] add ibc rate limit contract init to upgrade --- app/upgrades/types.go | 2 ++ app/upgrades/v5.0.0/constants.go | 3 +++ app/upgrades/v5.0.0/upgrades.go | 24 ++++++++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/app/upgrades/types.go b/app/upgrades/types.go index 51e44ef13..6a313828f 100644 --- a/app/upgrades/types.go +++ b/app/upgrades/types.go @@ -14,6 +14,7 @@ import ( capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" ccvconsumerkeeper "github.com/cosmos/interchain-security/v5/x/ccv/consumer/keeper" dexkeeper "github.com/neutron-org/neutron/v5/x/dex/keeper" + ibcratelimitkeeper "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/keeper" auctionkeeper "github.com/skip-mev/block-sdk/v2/x/auction/keeper" feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper" marketmapkeeper "github.com/skip-mev/slinky/x/marketmap/keeper" @@ -66,6 +67,7 @@ type UpgradeKeepers struct { FeeMarketKeeper *feemarketkeeper.Keeper DynamicfeesKeeper *dynamicfeeskeeper.Keeper DexKeeper *dexkeeper.Keeper + IbcRateLimitKeeper *ibcratelimitkeeper.Keeper // subspaces GlobalFeeSubspace paramtypes.Subspace CcvConsumerSubspace paramtypes.Subspace diff --git a/app/upgrades/v5.0.0/constants.go b/app/upgrades/v5.0.0/constants.go index 96adc3463..06352d8b8 100644 --- a/app/upgrades/v5.0.0/constants.go +++ b/app/upgrades/v5.0.0/constants.go @@ -10,6 +10,9 @@ import ( const ( // UpgradeName defines the on-chain upgrade name. UpgradeName = "v5.0.0" + // RateLimitContract defines the RL contract addr which we set as a contract address in ibc-rate-limit middleware + // https://neutron.celat.one/neutron-1/contracts/neutron15aqgplxcavqhurr0g5wwtdw6025dknkqwkfh0n46gp2qjl6236cs2yd3nl + RateLimitContract = "neutron15aqgplxcavqhurr0g5wwtdw6025dknkqwkfh0n46gp2qjl6236cs2yd3nl" ) var Upgrade = upgrades.Upgrade{ diff --git a/app/upgrades/v5.0.0/upgrades.go b/app/upgrades/v5.0.0/upgrades.go index 143db2b7b..8f49c1140 100644 --- a/app/upgrades/v5.0.0/upgrades.go +++ b/app/upgrades/v5.0.0/upgrades.go @@ -10,6 +10,8 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" "github.com/neutron-org/neutron/v5/app/upgrades" dexkeeper "github.com/neutron-org/neutron/v5/x/dex/keeper" + ibcratelimitkeeper "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/keeper" + ibcratelimittypes "github.com/neutron-org/neutron/v5/x/ibc-rate-limit/types" ) func CreateUpgradeHandler( @@ -37,6 +39,15 @@ func CreateUpgradeHandler( } } + ctx.Logger().Info("Running ibc-rate-limit upgrades...") + // Only set rate limit contract for mainnet + if ctx.ChainID() == "neutron-1" { + err = upgradeIbcRateLimitSetContract(ctx, *keepers.IbcRateLimitKeeper) + if err != nil { + return nil, err + } + } + ctx.Logger().Info(fmt.Sprintf("Migration {%s} applied", UpgradeName)) return vm, nil } @@ -57,3 +68,16 @@ func upgradeDexPause(ctx sdk.Context, k dexkeeper.Keeper) error { return nil } + +func upgradeIbcRateLimitSetContract(ctx sdk.Context, k ibcratelimitkeeper.Keeper) error { + // Set the dex to paused + ctx.Logger().Info("Setting ibc rate limiting contract...") + + if err := k.SetParams(ctx, ibcratelimittypes.Params{ContractAddress: RateLimitContract}); err != nil { + return err + } + + ctx.Logger().Info("Rate limit contract is set") + + return nil +} From ddff618a724083638452a7361b99e433322a19c0 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 1 Oct 2024 10:14:17 -0300 Subject: [PATCH 122/127] aftermerge fix --- app/app.go | 1 + app/upgrades/types.go | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app/app.go b/app/app.go index 982a356b5..98ee5b3d4 100644 --- a/app/app.go +++ b/app/app.go @@ -1363,6 +1363,7 @@ func (app *App) setupUpgradeHandlers() { FeeMarketKeeper: app.FeeMarkerKeeper, DynamicfeesKeeper: app.DynamicFeesKeeper, DexKeeper: &app.DexKeeper, + IbcRateLimitKeeper: app.RateLimitingICS4Wrapper.IbcratelimitKeeper, GlobalFeeSubspace: app.GetSubspace(globalfee.ModuleName), CcvConsumerSubspace: app.GetSubspace(ccvconsumertypes.ModuleName), }, diff --git a/app/upgrades/types.go b/app/upgrades/types.go index b366fc84a..6a313828f 100644 --- a/app/upgrades/types.go +++ b/app/upgrades/types.go @@ -19,8 +19,6 @@ import ( feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper" marketmapkeeper "github.com/skip-mev/slinky/x/marketmap/keeper" - dexkeeper "github.com/neutron-org/neutron/v5/x/dex/keeper" - dynamicfeeskeeper "github.com/neutron-org/neutron/v5/x/dynamicfees/keeper" contractmanagerkeeper "github.com/neutron-org/neutron/v5/x/contractmanager/keeper" From c4358887889516185c6ee7077a41f18c2c24f0e2 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 1 Oct 2024 16:25:30 -0300 Subject: [PATCH 123/127] rm prints. here we dont like prints --- x/ibc-rate-limit/ibc_middleware_test.go | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index b9752c6e6..9fc35a90f 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -281,7 +281,6 @@ func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { denom := sdk.DefaultBondDenom if !native { denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", channelTest, denom)) - fmt.Println(denomTrace) denom = denomTrace.IBCDenom() } @@ -294,8 +293,6 @@ func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { quota := channelValue.QuoRaw(int64(100 / quotaPercentage)) sendAmount := quota.QuoRaw(2) - fmt.Printf("Testing send rate limiting for denom=%s, channelValue=%s, quota=%s, sendAmount=%s\n", denom, channelValue, quota, sendAmount) - // Setup contract testOwner := sdk.MustAccAddressFromBech32(testutil.TestOwnerAddress) suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") @@ -304,17 +301,14 @@ func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { suite.RegisterRateLimitingContract(addr) // send 2.5% (quota is 5%) - fmt.Printf("Sending %s from A to B. Represented in chain A as wrapped? %v\n", denom, !native) _, err := suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) suite.Require().NoError(err) // send 2.5% (quota is 5%) - fmt.Println("trying to send ", sendAmount) r, _ := suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) // Calculate remaining allowance in the quota attrs := suite.ExtractAttributes(suite.FindEvent(r.GetEvents(), "wasm")) - fmt.Println(r.GetEvents()) used, ok := sdkmath.NewIntFromString(attrs["weekly_used_out"]) suite.Require().True(ok) @@ -386,8 +380,6 @@ func (suite *MiddlewareTestSuite) TestSendTransferDailyReset() { quota := channelValue.QuoRaw(int64(100 / quotaPercentage)) sendAmount := quota.QuoRaw(2) - fmt.Printf("Testing send rate limiting for denom=%s, channelValue=%s, weekly_quota=%s, daily_quota=%s, sendAmount=%s\n", denom, channelValue, quota, sendAmount, sendAmount) - // Setup contract testOwner := sdk.MustAccAddressFromBech32(testutil.TestOwnerAddress) suite.StoreTestCode(suite.ChainA.GetContext(), testOwner, "./bytecode/rate_limiter.wasm") @@ -396,13 +388,11 @@ func (suite *MiddlewareTestSuite) TestSendTransferDailyReset() { suite.RegisterRateLimitingContract(addr) // send 2% (daily quota is 2%) - fmt.Printf("Sending %s from A to B. Represented in chain A as wrapped? No", denom) r, err := suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) suite.Require().NoError(err) // Calculate remaining allowance in the quota attrs := suite.ExtractAttributes(suite.FindEvent(r.GetEvents(), "wasm")) - fmt.Println(r.GetEvents()) used, ok := sdkmath.NewIntFromString(attrs["daily_used_out"]) suite.Require().True(ok) @@ -476,8 +466,6 @@ func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { quota := channelValue.QuoRaw(int64(100 / quotaPercentage)) sendAmount := quota.QuoRaw(2) - fmt.Printf("Testing recv rate limiting for denom=%s, channelValue=%s, quota=%s, sendAmount=%s\n", localDenom, channelValue, quota, sendAmount) - // Setup contract suite.GetNeutronZoneApp(suite.ChainA) testOwner := sdk.MustAccAddressFromBech32(testutil.TestOwnerAddress) @@ -487,7 +475,6 @@ func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { suite.RegisterRateLimitingContract(addr) // receive 2.5% (quota is 5%) - fmt.Printf("Sending %s from B to A. Represented in chain A as wrapped? %v\n", sendDenom, native) _, err := suite.AssertReceive(true, suite.MessageFromBToA(sendDenom, sendAmount)) suite.Require().NoError(err) @@ -711,9 +698,6 @@ func (suite *MiddlewareTestSuite) InstantiateRLContract2Quotas(quotas1 string) s "paths": [%s] }`, testutil.TestOwnerAddress, transferModule, quotas1)) - - fmt.Println(string(initMsgBz)) - contractKeeper := wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) codeID := uint64(1) creator := suite.ChainA.SenderAccount.GetAddress() From 36b8736b7c7e0a82056417cc4b98b6a25cd342bc Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Tue, 1 Oct 2024 23:40:24 +0300 Subject: [PATCH 124/127] disable burn rights for wasm --- app/app.go | 2 +- wasmbinding/test/custom_message_test.go | 99 ------------------------- 2 files changed, 1 insertion(+), 100 deletions(-) diff --git a/app/app.go b/app/app.go index 7cf6a9175..2f4152cd0 100644 --- a/app/app.go +++ b/app/app.go @@ -284,7 +284,7 @@ var ( auctiontypes.ModuleName: nil, ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner}, icatypes.ModuleName: nil, - wasmtypes.ModuleName: {authtypes.Burner}, + wasmtypes.ModuleName: {}, interchainqueriesmoduletypes.ModuleName: nil, feetypes.ModuleName: nil, feeburnertypes.ModuleName: nil, diff --git a/wasmbinding/test/custom_message_test.go b/wasmbinding/test/custom_message_test.go index 709730997..3f826c48f 100644 --- a/wasmbinding/test/custom_message_test.go +++ b/wasmbinding/test/custom_message_test.go @@ -3,13 +3,8 @@ package test import ( "encoding/json" "fmt" - "strings" "testing" - transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" - ibctesting "github.com/cosmos/ibc-go/v8/testing" - contractmanagertypes "github.com/neutron-org/neutron/v5/x/contractmanager/types" types2 "github.com/neutron-org/neutron/v5/x/cron/types" @@ -736,100 +731,6 @@ func (suite *CustomMessengerTestSuite) TestAddRemoveSchedule() { suite.NoError(err) } -func (suite *CustomMessengerTestSuite) TestBurnTokens() { - // add NTRN to the contract - senderAddress := suite.ChainA.SenderAccounts[0].SenderAccount.GetAddress() - coinsAmnt := sdk.NewCoins(sdk.NewCoin(params.DefaultDenom, math.NewInt(int64(10_000_000)))) - bankKeeper := suite.neutron.BankKeeper - err := bankKeeper.SendCoins(suite.ctx, senderAddress, suite.contractAddress, coinsAmnt) - suite.NoError(err) - - suite.ConfigureTransferChannel() - - // add IBC denom to the contract - // Create Transfer Msg - transferMsg := transfertypes.NewMsgTransfer(suite.TransferPath.EndpointB.ChannelConfig.PortID, - suite.TransferPath.EndpointB.ChannelID, - sdk.NewCoin(params.DefaultDenom, math.NewInt(100)), - suite.ChainB.SenderAccounts[0].SenderAccount.GetAddress().String(), - strings.TrimSpace(suite.contractAddress.String()), - clienttypes.NewHeight(1, 110), - 0, - "", - ) - - // Send message from chainB to chainA - res, err := suite.TransferPath.EndpointB.Chain.SendMsgs(transferMsg) - suite.Require().NoError(err) - - // Relay transfer msg to Neutron chain - packet, err := ibctesting.ParsePacketFromEvents(res.GetEvents()) - suite.Require().NoError(err) - - suite.Require().NoError(suite.TransferPath.RelayPacket(packet)) - // ----------------------------------- - - // Add tf token to the contract - // Create denom for minting - fullMsg := bindings.NeutronMsg{ - CreateDenom: &bindings.CreateDenom{ - Subdenom: "tfdenom", - }, - } - - _, err = suite.executeNeutronMsg(suite.contractAddress, fullMsg) - suite.NoError(err) - - tfDenom := fmt.Sprintf("factory/%s/%s", suite.contractAddress.String(), fullMsg.CreateDenom.Subdenom) - - amount, ok := math.NewIntFromString("808010808") - require.True(suite.T(), ok) - - fullMsg = bindings.NeutronMsg{ - MintTokens: &bindings.MintTokens{ - Denom: tfDenom, - Amount: amount, - MintToAddress: suite.contractAddress.String(), - }, - } - - _, err = suite.executeNeutronMsg(suite.contractAddress, fullMsg) - suite.NoError(err) - - type testCase struct { - Name string - CoinToBurn sdk.Coin - } - - ibcTokenDenomHash, err := suite.neutron.TransferKeeper.DenomHash( - suite.ctx, - &transfertypes.QueryDenomHashRequest{Trace: ibctesting.TransferPort + "/" + suite.TransferPath.EndpointA.ChannelID + "/" + params.DefaultDenom}) - suite.Require().NoError(err) - - testcases := []testCase{ - {Name: "burn NTRN", CoinToBurn: sdk.NewCoin(params.DefaultDenom, math.NewInt(1000))}, - {Name: "burn tf denom", CoinToBurn: sdk.NewCoin(tfDenom, math.NewInt(1000))}, - {Name: "burn ibc denom", CoinToBurn: sdk.NewCoin("ibc/"+ibcTokenDenomHash.Hash, math.NewInt(50))}, - } - - for _, tc := range testcases { - suite.Run(tc.Name, func() { - balanceBeforeBurn := bankKeeper.GetBalance(suite.ctx, suite.contractAddress, tc.CoinToBurn.Denom) - - // Craft Burn message - msg := types.CosmosMsg{ - Bank: &types.BankMsg{Burn: &types.BurnMsg{Amount: types.Array[types.Coin]{types.Coin{Amount: tc.CoinToBurn.Amount.String(), Denom: tc.CoinToBurn.Denom}}}}, - } - - // Dispatch Burn message - _, err = suite.executeMsg(suite.contractAddress, msg) - suite.NoError(err) - - suite.Require().Equal(balanceBeforeBurn.Sub(tc.CoinToBurn), bankKeeper.GetBalance(suite.ctx, suite.contractAddress, tc.CoinToBurn.Denom)) - }) - } -} - func (suite *CustomMessengerTestSuite) TestResubmitFailureAck() { // Add failure packet := ibcchanneltypes.Packet{} From f15be55159b7bb3d8fab13b2b5fc0a04bbbab270 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Wed, 2 Oct 2024 07:47:40 -0300 Subject: [PATCH 125/127] check weekly used out as well + send 2untrn instead of 1 --- x/ibc-rate-limit/ibc_middleware_test.go | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index 9fc35a90f..e70f2815f 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -240,7 +240,7 @@ func (suite *MiddlewareTestSuite) BuildChannelQuotaWith2Quotas(name, channel, de // Test that Sending IBC messages works when the middleware isn't configured func (suite *MiddlewareTestSuite) TestSendTransferNoContract() { suite.ConfigureTransferChannel() - one := sdkmath.NewInt(1) + one := sdkmath.NewInt(2) _, err := suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, one)) suite.Require().NoError(err) } @@ -248,7 +248,7 @@ func (suite *MiddlewareTestSuite) TestSendTransferNoContract() { // Test that Receiving IBC messages works when the middleware isn't configured func (suite *MiddlewareTestSuite) TestReceiveTransferNoContract() { suite.ConfigureTransferChannel() - one := sdkmath.NewInt(1) + one := sdkmath.NewInt(2) _, err := suite.AssertReceive(true, suite.MessageFromBToA(sdk.DefaultBondDenom, one)) suite.Require().NoError(err) } @@ -357,7 +357,7 @@ func (suite *MiddlewareTestSuite) TestSendTransferReset() { suite.Coordinator.IncrementTimeBy(oneSecAfterReset.Sub(suite.Coordinator.CurrentTime)) // Sending should succeed again - _, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sdkmath.NewInt(1))) + _, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sdkmath.NewInt(2))) suite.Require().NoError(err) } @@ -399,6 +399,10 @@ func (suite *MiddlewareTestSuite) TestSendTransferDailyReset() { suite.Require().Equal(used, sendAmount) + weeklyUsed, ok := sdkmath.NewIntFromString(attrs["weekly_used_out"]) + suite.Require().True(ok) + suite.Require().Equal(weeklyUsed, sendAmount) + // Sending above the daily quota should fail. _, err = suite.AssertSend(false, suite.MessageFromAToB(denom, sendAmount)) suite.Require().Error(err) @@ -423,6 +427,15 @@ func (suite *MiddlewareTestSuite) TestSendTransferDailyReset() { attrs = suite.ExtractAttributes(suite.FindEvent(r.GetEvents(), "wasm")) + used, ok = sdkmath.NewIntFromString(attrs["daily_used_out"]) + suite.Require().True(ok) + + suite.Require().Equal(used, sendAmount) + + weeklyUsed, ok = sdkmath.NewIntFromString(attrs["weekly_used_out"]) + suite.Require().True(ok) + suite.Require().Equal(weeklyUsed, sendAmount.MulRaw(2)) + parts = strings.Split(attrs["daily_period_end"], ".") // Splitting timestamp into secs and nanos secs, err = strconv.ParseInt(parts[0], 10, 64) suite.Require().NoError(err) @@ -585,7 +598,7 @@ func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { suite.Require().NoError(err) // We should be able to send again because the packet that exceeded the quota failed and has been reverted - _, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sdkmath.NewInt(1))) + _, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sdkmath.NewInt(2))) suite.Require().NoError(err) } @@ -637,7 +650,7 @@ func (suite *MiddlewareTestSuite) TestDenomRestrictionFlow() { suite.RegisterRateLimitingContract(contractAddr) denom := sdk.DefaultBondDenom - sendAmount := sdkmath.NewInt(1) + sendAmount := sdkmath.NewInt(2) acceptedChannel := suite.TransferPath.EndpointA.ChannelID // Sending on a diff channel should work From 772156bc5e26ff7ef25df87bd0c34ec0dd3a4429 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Wed, 2 Oct 2024 08:05:19 -0300 Subject: [PATCH 126/127] add upgrade test just in case --- app/upgrades/v5.0.0/upgrades_test.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/app/upgrades/v5.0.0/upgrades_test.go b/app/upgrades/v5.0.0/upgrades_test.go index 77fd076a8..67196ffee 100644 --- a/app/upgrades/v5.0.0/upgrades_test.go +++ b/app/upgrades/v5.0.0/upgrades_test.go @@ -83,3 +83,25 @@ func (suite *UpgradeTestSuite) TestUpgradeDexPause() { suite.ErrorIs(err, dextypes.ErrDexPaused) } + +func (suite *UpgradeTestSuite) TestUpgradeSetRateLimitContract() { + var ( + app = suite.GetNeutronZoneApp(suite.ChainA) + ctx = suite.ChainA.GetContext().WithChainID("neutron-1") + ) + + params := app.RateLimitingICS4Wrapper.IbcratelimitKeeper.GetParams(ctx) + + suite.Equal(params.ContractAddress, "") + + upgrade := upgradetypes.Plan{ + Name: v500.UpgradeName, + Info: "some text here", + Height: 100, + } + suite.NoError(app.UpgradeKeeper.ApplyUpgrade(ctx, upgrade)) + + params = app.RateLimitingICS4Wrapper.IbcratelimitKeeper.GetParams(ctx) + + suite.Equal(params.ContractAddress, v500.RateLimitContract) +} From 7ee6aa2b1a032793dd7dee5076f50c0843f18afa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 08:41:10 +0000 Subject: [PATCH 127/127] Bump google.golang.org/protobuf from 1.34.2 to 1.35.1 Bumps google.golang.org/protobuf from 1.34.2 to 1.35.1. --- updated-dependencies: - dependency-name: google.golang.org/protobuf dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index b94fd576c..1f1ff6172 100644 --- a/go.mod +++ b/go.mod @@ -47,7 +47,7 @@ require ( golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 google.golang.org/grpc v1.67.1 - google.golang.org/protobuf v1.34.2 + google.golang.org/protobuf v1.35.1 gopkg.in/yaml.v2 v2.4.0 ) diff --git a/go.sum b/go.sum index 07afbd047..b576a5f4b 100644 --- a/go.sum +++ b/go.sum @@ -1694,8 +1694,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= +google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

;{ZgiUElh}b4z*%4b=QpfYXC|%Q$&C35puy+ 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 JL+9$({C`pfYYhMZ From afd556c923db1bf71a94897132bbd9cdb50014c5 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Mon, 16 Sep 2024 15:26:53 -0300 Subject: [PATCH 068/127] register everything, add simulation etc --- app/app.go | 8 +++- x/ibc-rate-limit/ibc_middleware_test.go | 11 ++--- x/ibc-rate-limit/ibcratelimitmodule/module.go | 25 ++++++++-- .../ibcratelimitmodule/module_simulation.go | 48 +++++++++++++++++++ x/ibc-rate-limit/ics4_wrapper.go | 16 ++----- x/ibc-rate-limit/simulation/simap.go | 15 ++++++ x/ibc-rate-limit/types/codec.go | 2 +- 7 files changed, 100 insertions(+), 25 deletions(-) create mode 100644 x/ibc-rate-limit/ibcratelimitmodule/module_simulation.go create mode 100644 x/ibc-rate-limit/simulation/simap.go diff --git a/app/app.go b/app/app.go index 3b6b5cf8e..b181ca009 100644 --- a/app/app.go +++ b/app/app.go @@ -276,6 +276,7 @@ var ( ), ibchooks.AppModuleBasic{}, packetforward.AppModuleBasic{}, + ibcratelimitmodule.AppModuleBasic{}, auction.AppModuleBasic{}, globalfee.AppModule{}, feemarket.AppModuleBasic{}, @@ -379,6 +380,8 @@ type App struct { PFMModule packetforward.AppModule + //IBCRLModule ibcratelimitmodule.AppModule + TransferStack *ibchooks.IBCMiddleware Ics20WasmHooks *ibchooks.WasmHooks RateLimitingICS4Wrapper *ibcratelimit.ICS4Wrapper @@ -631,6 +634,7 @@ func New( ) app.WireICS20PreWasmKeeper(appCodec) + //app:= feerefunder.NewAppModule(appCodec, *app.FeeKeeper, app.AccountKeeper, app.BankKeeper) app.PFMModule = packetforward.NewAppModule(app.PFMKeeper, app.GetSubspace(pfmtypes.ModuleName)) app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( @@ -875,7 +879,7 @@ func New( ) interchainTxsModule := interchaintxs.NewAppModule(appCodec, app.InterchainTxsKeeper, app.AccountKeeper, app.BankKeeper) contractManagerModule := contractmanager.NewAppModule(appCodec, app.ContractManagerKeeper) - ibcRateLimitmodule := ibcratelimitmodule.NewAppModule(*app.RateLimitingICS4Wrapper) + ibcRateLimitmodule := ibcratelimitmodule.NewAppModule(appCodec, *app.RateLimitingICS4Wrapper.IbcratelimitKeeper, *app.RateLimitingICS4Wrapper) ibcHooksModule := ibchooks.NewAppModule(app.AccountKeeper) transferModule := transferSudo.NewAppModule(app.TransferKeeper) @@ -1093,6 +1097,7 @@ func New( ibc.NewAppModule(app.IBCKeeper), params.NewAppModule(app.ParamsKeeper), transferModule, + ibcRateLimitmodule, consumerModule, icaModule, app.PFMModule, @@ -1691,7 +1696,6 @@ func (app *App) WireICS20PreWasmKeeper( // wasm keeper we set later. nil, &app.BankKeeper, - app.GetSubspace(ibcratelimittypes.ModuleName), &ibcratelimitKeeper, ) app.RateLimitingICS4Wrapper = &rateLimitingICS4Wrapper diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index 41989ac52..13e9be5c6 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -614,13 +614,12 @@ func (suite *MiddlewareTestSuite) InstantiateRLContract(quotas string) sdk.AccAd } func (suite *MiddlewareTestSuite) RegisterRateLimitingContract(addr []byte) { - addrStr, err := sdk.Bech32ifyAddressBytes("neutron", addr) - msg := types.MsgUpdateParams{Params: types.Params{ContractAddress: addrStr}} - require.NoError(suite.ChainA.TB, err) + addrStr, _ := sdk.Bech32ifyAddressBytes("neutron", addr) app := suite.GetNeutronZoneApp(suite.ChainA) - paramSpace, ok := app.HooksICS4Wrapper.GetSubspace(types.ModuleName) - require.True(suite.ChainA.TB, ok) - paramSpace.SetParamSet(suite.ChainA.GetContext(), ¶ms) + _ = app.RateLimitingICS4Wrapper.IbcratelimitKeeper.SetParams(suite.ChainA.GetContext(), types.Params{ContractAddress: addrStr}) + a := app.RateLimitingICS4Wrapper.GetContractAddress(suite.ChainA.GetContext()) + fmt.Println(a) + require.True(suite.ChainA.TB, true) } // AssertEventEmitted asserts that ctx's event manager has emitted the given number of events diff --git a/x/ibc-rate-limit/ibcratelimitmodule/module.go b/x/ibc-rate-limit/ibcratelimitmodule/module.go index d9099f96d..e23192cf3 100644 --- a/x/ibc-rate-limit/ibcratelimitmodule/module.go +++ b/x/ibc-rate-limit/ibcratelimitmodule/module.go @@ -6,6 +6,7 @@ import ( "fmt" "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/keeper" "github.com/spf13/cobra" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -35,11 +36,18 @@ var ( _ module.HasServices = AppModule{} ) -type AppModuleBasic struct{} +type AppModuleBasic struct { + cdc codec.BinaryCodec +} + +func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} func (AppModuleBasic) Name() string { return types.ModuleName } -func (AppModuleBasic) RegisterLegacyAminoCodec(_ *codec.LegacyAmino) { +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + types.RegisterCodec(cdc) } func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { @@ -70,7 +78,8 @@ func (b AppModuleBasic) GetQueryCmd() *cobra.Command { } // RegisterInterfaces registers interfaces and implementations of the ibc-rate-limit module. -func (AppModuleBasic) RegisterInterfaces(_ codectypes.InterfaceRegistry) { +func (AppModuleBasic) RegisterInterfaces(reg codectypes.InterfaceRegistry) { + types.RegisterInterfaces(reg) } // ---------------------------------------------------------------------------- @@ -82,11 +91,16 @@ type AppModule struct { AppModuleBasic ics4wrapper ibcratelimit.ICS4Wrapper + keeper keeper.Keeper } -func NewAppModule(ics4wrapper ibcratelimit.ICS4Wrapper) AppModule { +func NewAppModule( + cdc codec.Codec, + keeper keeper.Keeper, + ics4wrapper ibcratelimit.ICS4Wrapper) AppModule { return AppModule{ - AppModuleBasic: AppModuleBasic{}, + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, ics4wrapper: ics4wrapper, } } @@ -109,6 +123,7 @@ func (AppModule) QuerierRoute() string { return types.RouterKey } // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { queryproto.RegisterQueryServer(cfg.QueryServer(), grpc.Querier{Q: ibcratelimitclient.Querier{K: am.ics4wrapper}}) + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) } // RegisterInvariants registers the txfees module's invariants. diff --git a/x/ibc-rate-limit/ibcratelimitmodule/module_simulation.go b/x/ibc-rate-limit/ibcratelimitmodule/module_simulation.go new file mode 100644 index 000000000..a581845e7 --- /dev/null +++ b/x/ibc-rate-limit/ibcratelimitmodule/module_simulation.go @@ -0,0 +1,48 @@ +package ibcratelimitmodule + +import ( + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/testutil/sims" + "github.com/cosmos/cosmos-sdk/types/module" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + "github.com/neutron-org/neutron/v4/testutil/common/sample" + ibcratelimitsimulation "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/simulation" + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" +) + +// avoid unused import issue +var ( + _ = sample.AccAddress + _ = ibcratelimitsimulation.FindAccount + _ = sims.StakePerAccount + _ = simulation.MsgEntryKind + _ = baseapp.Paramspace +) + +// GenerateGenesisState creates a randomized GenState of the module +func (AppModule) GenerateGenesisState(simState *module.SimulationState) { + accs := make([]string, len(simState.Accounts)) + for i, acc := range simState.Accounts { + accs[i] = acc.Address.String() + } + interchainqueriesGenesis := types.GenesisState{ + Params: types.DefaultParams(), + } + simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(&interchainqueriesGenesis) +} + +// ProposalContents doesn't return any content functions for governance proposals +func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedProposalMsg { + return nil +} + +// RegisterStoreDecoder registers a decoder +func (am AppModule) RegisterStoreDecoder(_ simtypes.StoreDecoderRegistry) {} + +// WeightedOperations returns the all the gov module operations with their respective weights. +func (am AppModule) WeightedOperations(_ module.SimulationState) []simtypes.WeightedOperation { + operations := make([]simtypes.WeightedOperation, 0) + + return operations +} diff --git a/x/ibc-rate-limit/ics4_wrapper.go b/x/ibc-rate-limit/ics4_wrapper.go index fca1429e8..f966a17e9 100644 --- a/x/ibc-rate-limit/ics4_wrapper.go +++ b/x/ibc-rate-limit/ics4_wrapper.go @@ -9,7 +9,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" @@ -31,8 +30,7 @@ type ICS4Wrapper struct { accountKeeper *authkeeper.AccountKeeper bankKeeper *bankkeeper.BaseKeeper ContractKeeper *wasmkeeper.PermissionedKeeper - paramSpace paramtypes.Subspace - ibcratelimitKeeper *keeper.Keeper + IbcratelimitKeeper *keeper.Keeper } func (i *ICS4Wrapper) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { @@ -42,18 +40,14 @@ func (i *ICS4Wrapper) GetAppVersion(ctx sdk.Context, portID, channelID string) ( func NewICS4Middleware( channel porttypes.ICS4Wrapper, accountKeeper *authkeeper.AccountKeeper, contractKeeper *wasmkeeper.PermissionedKeeper, - bankKeeper *bankkeeper.BaseKeeper, paramSpace paramtypes.Subspace, ibcratelimitkeeper *keeper.Keeper, + bankKeeper *bankkeeper.BaseKeeper, ibcratelimitkeeper *keeper.Keeper, ) ICS4Wrapper { - if !paramSpace.HasKeyTable() { - paramSpace = paramSpace.WithKeyTable(types.ParamKeyTable()) - } return ICS4Wrapper{ channel: channel, accountKeeper: accountKeeper, ContractKeeper: contractKeeper, bankKeeper: bankKeeper, - paramSpace: paramSpace, - ibcratelimitKeeper: ibcratelimitkeeper, + IbcratelimitKeeper: ibcratelimitkeeper, } } @@ -105,10 +99,10 @@ func (i *ICS4Wrapper) GetContractAddress(ctx sdk.Context) (contract string) { } func (i *ICS4Wrapper) GetParams(ctx sdk.Context) (params types.Params) { - params = i.ibcratelimitKeeper.GetParams(ctx) + params = i.IbcratelimitKeeper.GetParams(ctx) return params } func (i *ICS4Wrapper) SetParams(ctx sdk.Context, params types.Params) { - i.ibcratelimitKeeper.SetParams(ctx, params) + i.IbcratelimitKeeper.SetParams(ctx, params) } diff --git a/x/ibc-rate-limit/simulation/simap.go b/x/ibc-rate-limit/simulation/simap.go new file mode 100644 index 000000000..92c437c0d --- /dev/null +++ b/x/ibc-rate-limit/simulation/simap.go @@ -0,0 +1,15 @@ +package simulation + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" +) + +// FindAccount find a specific address from an account list +func FindAccount(accs []simtypes.Account, address string) (simtypes.Account, bool) { + creator, err := sdk.AccAddressFromBech32(address) + if err != nil { + panic(err) + } + return simtypes.FindAccount(accs, creator) +} diff --git a/x/ibc-rate-limit/types/codec.go b/x/ibc-rate-limit/types/codec.go index 4398b10e5..023b2655d 100644 --- a/x/ibc-rate-limit/types/codec.go +++ b/x/ibc-rate-limit/types/codec.go @@ -21,5 +21,5 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { var ( Amino = codec.NewLegacyAmino() - ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) + ModuleCdc *codec.ProtoCodec ) From 36117b4d7901d282c4c443265826195817158d4e Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Mon, 16 Sep 2024 15:52:16 -0300 Subject: [PATCH 069/127] rm unused --- app/app.go | 5 +---- x/ibc-rate-limit/ibc_middleware_test.go | 7 +------ 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/app/app.go b/app/app.go index b181ca009..0494f6814 100644 --- a/app/app.go +++ b/app/app.go @@ -380,8 +380,6 @@ type App struct { PFMModule packetforward.AppModule - //IBCRLModule ibcratelimitmodule.AppModule - TransferStack *ibchooks.IBCMiddleware Ics20WasmHooks *ibchooks.WasmHooks RateLimitingICS4Wrapper *ibcratelimit.ICS4Wrapper @@ -634,7 +632,6 @@ func New( ) app.WireICS20PreWasmKeeper(appCodec) - //app:= feerefunder.NewAppModule(appCodec, *app.FeeKeeper, app.AccountKeeper, app.BankKeeper) app.PFMModule = packetforward.NewAppModule(app.PFMKeeper, app.GetSubspace(pfmtypes.ModuleName)) app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( @@ -1688,7 +1685,7 @@ func (app *App) WireICS20PreWasmKeeper( &wasmHooks, ) - ibcratelimitKeeper := ibcratelimitkeeper.NewKeeper(appCodec, app.keys[ibctransfertypes.StoreKey], authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String()) + ibcratelimitKeeper := ibcratelimitkeeper.NewKeeper(appCodec, app.keys[ibcratelimittypes.ModuleName], authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String()) // ChannelKeeper wrapper for rate limiting SendPacket(). The wasmKeeper needs to be added after it's created rateLimitingICS4Wrapper := ibcratelimit.NewICS4Middleware( app.HooksICS4Wrapper, diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index 13e9be5c6..cf2f01562 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -521,12 +521,9 @@ func (suite *MiddlewareTestSuite) TestUnsetRateLimitingContract() { app := suite.GetNeutronZoneApp(suite.ChainA) // Unset the contract param - params, err := types.NewParams("") + err := app.RateLimitingICS4Wrapper.IbcratelimitKeeper.SetParams(suite.ChainA.GetContext(), types.Params{ContractAddress: ""}) suite.Require().NoError(err) - paramSpace, ok := app.ParamsKeeper.GetSubspace(types.ModuleName) - suite.Require().True(ok) // N.B.: this panics if validation fails. - paramSpace.SetParamSet(suite.ChainA.GetContext(), ¶ms) } // Test rate limits are reverted if a "send" fails @@ -617,8 +614,6 @@ func (suite *MiddlewareTestSuite) RegisterRateLimitingContract(addr []byte) { addrStr, _ := sdk.Bech32ifyAddressBytes("neutron", addr) app := suite.GetNeutronZoneApp(suite.ChainA) _ = app.RateLimitingICS4Wrapper.IbcratelimitKeeper.SetParams(suite.ChainA.GetContext(), types.Params{ContractAddress: addrStr}) - a := app.RateLimitingICS4Wrapper.GetContractAddress(suite.ChainA.GetContext()) - fmt.Println(a) require.True(suite.ChainA.TB, true) } From 71477ccb1f39f3739fdce584c58b22328e09dc2c Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Mon, 16 Sep 2024 15:57:04 -0300 Subject: [PATCH 070/127] lint --- x/ibc-rate-limit/ibcratelimitmodule/module.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x/ibc-rate-limit/ibcratelimitmodule/module.go b/x/ibc-rate-limit/ibcratelimitmodule/module.go index e23192cf3..780d65993 100644 --- a/x/ibc-rate-limit/ibcratelimitmodule/module.go +++ b/x/ibc-rate-limit/ibcratelimitmodule/module.go @@ -97,7 +97,8 @@ type AppModule struct { func NewAppModule( cdc codec.Codec, keeper keeper.Keeper, - ics4wrapper ibcratelimit.ICS4Wrapper) AppModule { + ics4wrapper ibcratelimit.ICS4Wrapper, +) AppModule { return AppModule{ AppModuleBasic: NewAppModuleBasic(cdc), keeper: keeper, From 81f63036f017299554396c7c6302203b00115b92 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Mon, 16 Sep 2024 16:09:09 -0300 Subject: [PATCH 071/127] return err on set params --- x/ibc-rate-limit/genesis.go | 5 ++++- x/ibc-rate-limit/ibc_middleware_test.go | 2 +- x/ibc-rate-limit/ics4_wrapper.go | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/x/ibc-rate-limit/genesis.go b/x/ibc-rate-limit/genesis.go index a22e6d0f4..9a1882222 100644 --- a/x/ibc-rate-limit/genesis.go +++ b/x/ibc-rate-limit/genesis.go @@ -9,7 +9,10 @@ import ( // InitGenesis initializes the x/ibc-rate-limit module's state from a provided genesis // state, which includes the parameter for the contract address. func (i *ICS4Wrapper) InitGenesis(ctx sdk.Context, genState types.GenesisState) { - i.SetParams(ctx, genState.Params) + err := i.IbcratelimitKeeper.SetParams(ctx, genState.Params) + if err != nil { + panic(err) + } } // ExportGenesis returns the x/ibc-rate-limit module's exported genesis. diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index cf2f01562..788dd1b5d 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -613,7 +613,7 @@ func (suite *MiddlewareTestSuite) InstantiateRLContract(quotas string) sdk.AccAd func (suite *MiddlewareTestSuite) RegisterRateLimitingContract(addr []byte) { addrStr, _ := sdk.Bech32ifyAddressBytes("neutron", addr) app := suite.GetNeutronZoneApp(suite.ChainA) - _ = app.RateLimitingICS4Wrapper.IbcratelimitKeeper.SetParams(suite.ChainA.GetContext(), types.Params{ContractAddress: addrStr}) + _ = app.RateLimitingICS4Wrapper.SetParams(suite.ChainA.GetContext(), types.Params{ContractAddress: addrStr}) require.True(suite.ChainA.TB, true) } diff --git a/x/ibc-rate-limit/ics4_wrapper.go b/x/ibc-rate-limit/ics4_wrapper.go index f966a17e9..d1ac8f18c 100644 --- a/x/ibc-rate-limit/ics4_wrapper.go +++ b/x/ibc-rate-limit/ics4_wrapper.go @@ -103,6 +103,6 @@ func (i *ICS4Wrapper) GetParams(ctx sdk.Context) (params types.Params) { return params } -func (i *ICS4Wrapper) SetParams(ctx sdk.Context, params types.Params) { - i.IbcratelimitKeeper.SetParams(ctx, params) +func (i *ICS4Wrapper) SetParams(ctx sdk.Context, params types.Params) error { + return i.IbcratelimitKeeper.SetParams(ctx, params) } From f9295926e8307af0bc227cf3bb183ddb4d982520 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Mon, 16 Sep 2024 17:34:59 -0300 Subject: [PATCH 072/127] resolve conflicts & gomodtidy --- app/app.go | 9 --------- go.mod | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/app/app.go b/app/app.go index 0d4ff3926..0692b5953 100644 --- a/app/app.go +++ b/app/app.go @@ -608,14 +608,6 @@ func New( ) feeModule := feerefunder.NewAppModule(appCodec, *app.FeeKeeper, app.AccountKeeper, app.BankKeeper) - // SwapKeeper as well - app.SwapKeeper = ibcswapkeeper.NewKeeper( - appCodec, - app.MsgServiceRouter(), - app.IBCKeeper.ChannelKeeper, - app.BankKeeper, - ) - app.ContractManagerKeeper = *contractmanagermodulekeeper.NewKeeper( appCodec, keys[contractmanagermoduletypes.StoreKey], @@ -1715,7 +1707,6 @@ func (app *App) WireICS20PreWasmKeeper( pfmkeeper.DefaultRefundTransferPacketTimeoutTimestamp, ) - ibcStack = ibcswap.NewIBCMiddleware(ibcStack, app.SwapKeeper) ibcStack = gmpmiddleware.NewIBCMiddleware(ibcStack) // RateLimiting IBC Middleware rateLimitingTransferModule := ibcratelimit.NewIBCModule(ibcStack, app.RateLimitingICS4Wrapper) diff --git a/go.mod b/go.mod index d203836f9..e3eb5440f 100644 --- a/go.mod +++ b/go.mod @@ -33,7 +33,6 @@ require ( github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 github.com/hashicorp/go-metrics v0.5.3 - github.com/iancoleman/orderedmap v0.3.0 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.20.3 github.com/rs/zerolog v1.33.0 @@ -142,6 +141,7 @@ require ( github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.1.0 // indirect github.com/huandu/skiplist v1.2.0 // indirect + github.com/iancoleman/orderedmap v0.3.0 // indirect github.com/iancoleman/strcase v0.3.0 // indirect github.com/improbable-eng/grpc-web v0.15.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect From f7821789af10d5e0127d6d30fb7ea94f29ec7f09 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 17 Sep 2024 08:17:49 -0300 Subject: [PATCH 073/127] Update x/ibc-rate-limit/keeper/keeper.go Co-authored-by: Mike Mozhaev --- x/ibc-rate-limit/keeper/keeper.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/ibc-rate-limit/keeper/keeper.go b/x/ibc-rate-limit/keeper/keeper.go index 4909b76f2..beefdf69e 100644 --- a/x/ibc-rate-limit/keeper/keeper.go +++ b/x/ibc-rate-limit/keeper/keeper.go @@ -14,7 +14,7 @@ type Keeper struct { storeKey storetypes.StoreKey // the address capable of executing a MsgUpdateParams message. Typically, this - // should be the x/gov module account. + // should be the x/adminmodule module account. authority string } From 4212295abd02353c087b572fe98fc95e2306df8d Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 17 Sep 2024 08:17:59 -0300 Subject: [PATCH 074/127] Update x/ibc-rate-limit/types/codec.go Co-authored-by: Mike Mozhaev --- x/ibc-rate-limit/types/codec.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/ibc-rate-limit/types/codec.go b/x/ibc-rate-limit/types/codec.go index 023b2655d..e1725d89d 100644 --- a/x/ibc-rate-limit/types/codec.go +++ b/x/ibc-rate-limit/types/codec.go @@ -8,7 +8,7 @@ import ( ) func RegisterCodec(cdc *codec.LegacyAmino) { - cdc.RegisterConcrete(&MsgUpdateParams{}, "osmosis/ibc-rate-limit/update-params", nil) + cdc.RegisterConcrete(&MsgUpdateParams{}, "neutron/ibc-rate-limit/update-params", nil) } func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { From 25378cf92257d12c3be8f504e7b1f2991fbd7b1f Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 17 Sep 2024 08:44:56 -0300 Subject: [PATCH 075/127] get rid of osmosis mentions & move proto to neutron folder --- .../ibcratelimit/v1beta1/genesis.proto | 4 +- .../ibcratelimit/v1beta1/params.proto | 2 +- .../ibcratelimit/v1beta1/query.proto | 4 +- .../ibcratelimit/v1beta1/query.yml | 0 .../ibcratelimit/v1beta1/tx.proto | 6 +- .../client/queryproto/query.pb.go | 70 +++++++++---------- .../client/queryproto/query.pb.gw.go | 2 +- x/ibc-rate-limit/types/genesis.pb.go | 44 ++++++------ x/ibc-rate-limit/types/params.pb.go | 24 +++---- x/ibc-rate-limit/types/tx.pb.go | 70 +++++++++---------- 10 files changed, 113 insertions(+), 113 deletions(-) rename proto/{osmosis => neutron}/ibcratelimit/v1beta1/genesis.proto (81%) rename proto/{osmosis => neutron}/ibcratelimit/v1beta1/params.proto (88%) rename proto/{osmosis => neutron}/ibcratelimit/v1beta1/query.proto (90%) rename proto/{osmosis => neutron}/ibcratelimit/v1beta1/query.yml (100%) rename proto/{osmosis => neutron}/ibcratelimit/v1beta1/tx.proto (88%) diff --git a/proto/osmosis/ibcratelimit/v1beta1/genesis.proto b/proto/neutron/ibcratelimit/v1beta1/genesis.proto similarity index 81% rename from proto/osmosis/ibcratelimit/v1beta1/genesis.proto rename to proto/neutron/ibcratelimit/v1beta1/genesis.proto index f923b547e..64f0df800 100644 --- a/proto/osmosis/ibcratelimit/v1beta1/genesis.proto +++ b/proto/neutron/ibcratelimit/v1beta1/genesis.proto @@ -1,10 +1,10 @@ syntax = "proto3"; -package osmosis.ibcratelimit.v1beta1; +package neutron.ibcratelimit.v1beta1; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; -import "osmosis/ibcratelimit/v1beta1/params.proto"; +import "neutron/ibcratelimit/v1beta1/params.proto"; option go_package = "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types"; diff --git a/proto/osmosis/ibcratelimit/v1beta1/params.proto b/proto/neutron/ibcratelimit/v1beta1/params.proto similarity index 88% rename from proto/osmosis/ibcratelimit/v1beta1/params.proto rename to proto/neutron/ibcratelimit/v1beta1/params.proto index 4d4c11518..65edad01f 100644 --- a/proto/osmosis/ibcratelimit/v1beta1/params.proto +++ b/proto/neutron/ibcratelimit/v1beta1/params.proto @@ -1,5 +1,5 @@ syntax = "proto3"; -package osmosis.ibcratelimit.v1beta1; +package neutron.ibcratelimit.v1beta1; import "gogoproto/gogo.proto"; diff --git a/proto/osmosis/ibcratelimit/v1beta1/query.proto b/proto/neutron/ibcratelimit/v1beta1/query.proto similarity index 90% rename from proto/osmosis/ibcratelimit/v1beta1/query.proto rename to proto/neutron/ibcratelimit/v1beta1/query.proto index 314b3d8ae..c9c34f9c0 100644 --- a/proto/osmosis/ibcratelimit/v1beta1/query.proto +++ b/proto/neutron/ibcratelimit/v1beta1/query.proto @@ -1,10 +1,10 @@ syntax = "proto3"; -package osmosis.ibcratelimit.v1beta1; +package neutron.ibcratelimit.v1beta1; import "cosmos/base/query/v1beta1/pagination.proto"; import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; -import "osmosis/ibcratelimit/v1beta1/params.proto"; +import "neutron/ibcratelimit/v1beta1/params.proto"; option go_package = "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client/queryproto"; diff --git a/proto/osmosis/ibcratelimit/v1beta1/query.yml b/proto/neutron/ibcratelimit/v1beta1/query.yml similarity index 100% rename from proto/osmosis/ibcratelimit/v1beta1/query.yml rename to proto/neutron/ibcratelimit/v1beta1/query.yml diff --git a/proto/osmosis/ibcratelimit/v1beta1/tx.proto b/proto/neutron/ibcratelimit/v1beta1/tx.proto similarity index 88% rename from proto/osmosis/ibcratelimit/v1beta1/tx.proto rename to proto/neutron/ibcratelimit/v1beta1/tx.proto index 539015d59..fb0a25912 100644 --- a/proto/osmosis/ibcratelimit/v1beta1/tx.proto +++ b/proto/neutron/ibcratelimit/v1beta1/tx.proto @@ -1,5 +1,5 @@ syntax = "proto3"; -package osmosis.ibcratelimit.v1beta1; +package neutron.ibcratelimit.v1beta1; import "amino/amino.proto"; import "cosmos/bank/v1beta1/bank.proto"; @@ -7,7 +7,7 @@ import "cosmos/base/v1beta1/coin.proto"; import "cosmos/msg/v1/msg.proto"; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; -import "osmosis/ibcratelimit/v1beta1/params.proto"; +import "neutron/ibcratelimit/v1beta1/params.proto"; option go_package = "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types"; @@ -21,7 +21,7 @@ service Msg { // // Since: 0.47 message MsgUpdateParams { - option (amino.name) = "osmosis/ibc-rate-limit/MsgUpdateParams"; + option (amino.name) = "neutron/ibc-rate-limit/MsgUpdateParams"; option (cosmos.msg.v1.signer) = "authority"; // Authority is the address of the governance account. diff --git a/x/ibc-rate-limit/client/queryproto/query.pb.go b/x/ibc-rate-limit/client/queryproto/query.pb.go index 3f07ac13a..94bef00f9 100644 --- a/x/ibc-rate-limit/client/queryproto/query.pb.go +++ b/x/ibc-rate-limit/client/queryproto/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: osmosis/ibcratelimit/v1beta1/query.proto +// source: neutron/ibcratelimit/v1beta1/query.proto package queryproto @@ -39,7 +39,7 @@ func (m *ParamsRequest) Reset() { *m = ParamsRequest{} } func (m *ParamsRequest) String() string { return proto.CompactTextString(m) } func (*ParamsRequest) ProtoMessage() {} func (*ParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6904fea69f32464e, []int{0} + return fileDescriptor_a6095f726b1d3aec, []int{0} } func (m *ParamsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -78,7 +78,7 @@ func (m *ParamsResponse) Reset() { *m = ParamsResponse{} } func (m *ParamsResponse) String() string { return proto.CompactTextString(m) } func (*ParamsResponse) ProtoMessage() {} func (*ParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6904fea69f32464e, []int{1} + return fileDescriptor_a6095f726b1d3aec, []int{1} } func (m *ParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -115,37 +115,37 @@ func (m *ParamsResponse) GetParams() types.Params { } func init() { - proto.RegisterType((*ParamsRequest)(nil), "osmosis.ibcratelimit.v1beta1.ParamsRequest") - proto.RegisterType((*ParamsResponse)(nil), "osmosis.ibcratelimit.v1beta1.ParamsResponse") + proto.RegisterType((*ParamsRequest)(nil), "neutron.ibcratelimit.v1beta1.ParamsRequest") + proto.RegisterType((*ParamsResponse)(nil), "neutron.ibcratelimit.v1beta1.ParamsResponse") } func init() { - proto.RegisterFile("osmosis/ibcratelimit/v1beta1/query.proto", fileDescriptor_6904fea69f32464e) -} - -var fileDescriptor_6904fea69f32464e = []byte{ - // 324 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xcf, 0x4a, 0x03, 0x31, - 0x10, 0xc6, 0x37, 0xa2, 0x3d, 0xac, 0xa8, 0xb0, 0x78, 0x90, 0x52, 0xa2, 0x14, 0x91, 0xfa, 0xa7, - 0x09, 0xad, 0x3e, 0x41, 0xf1, 0x01, 0xb4, 0x78, 0xf2, 0x20, 0x64, 0x97, 0x10, 0x03, 0xdd, 0xcc, - 0x36, 0xc9, 0x16, 0xbd, 0xfa, 0x04, 0x42, 0xcf, 0xbe, 0x4f, 0x8f, 0x05, 0x2f, 0x9e, 0x44, 0x5a, - 0x1f, 0x44, 0x36, 0x49, 0xa5, 0x88, 0x94, 0x9e, 0x76, 0x76, 0xe6, 0xfb, 0x7d, 0xcc, 0x7c, 0x89, - 0x5b, 0x60, 0x72, 0x30, 0xd2, 0x50, 0x99, 0x66, 0x9a, 0x59, 0x3e, 0x90, 0xb9, 0xb4, 0x74, 0xd4, - 0x49, 0xb9, 0x65, 0x1d, 0x3a, 0x2c, 0xb9, 0x7e, 0x26, 0x85, 0x06, 0x0b, 0x49, 0x23, 0x28, 0xc9, - 0xb2, 0x92, 0x04, 0x65, 0xfd, 0x2c, 0x73, 0x63, 0x9a, 0x32, 0xc3, 0x3d, 0xf6, 0x6b, 0x52, 0x30, - 0x21, 0x15, 0xb3, 0x12, 0x94, 0x77, 0xaa, 0xef, 0x0b, 0x10, 0xe0, 0x4a, 0x5a, 0x55, 0xa1, 0xdb, - 0x10, 0x00, 0x62, 0xc0, 0x29, 0x2b, 0x24, 0x65, 0x4a, 0x81, 0x75, 0x88, 0x09, 0xd3, 0xd3, 0x95, - 0x7b, 0x16, 0x4c, 0xb3, 0x3c, 0x48, 0x9b, 0x7b, 0xf1, 0xce, 0x8d, 0xfb, 0xef, 0xf3, 0x61, 0xc9, - 0x8d, 0x6d, 0xde, 0xc5, 0xbb, 0x8b, 0x86, 0x29, 0x40, 0x19, 0x9e, 0xf4, 0xe2, 0x9a, 0x47, 0x0e, - 0xd0, 0x11, 0x6a, 0x6d, 0x77, 0x8f, 0xc9, 0xaa, 0xe3, 0x88, 0xa7, 0x7b, 0x9b, 0x93, 0xcf, 0xc3, - 0xa8, 0x1f, 0xc8, 0xee, 0x1b, 0x8a, 0xb7, 0x6e, 0xab, 0x43, 0x93, 0x31, 0x8a, 0x6b, 0x5e, 0x92, - 0x9c, 0xaf, 0x63, 0x14, 0xf6, 0xaa, 0x5f, 0xac, 0x27, 0xf6, 0x3b, 0x37, 0xc9, 0xcb, 0xfb, 0xf7, - 0x78, 0xa3, 0x95, 0x9c, 0xd0, 0xa5, 0x28, 0xda, 0x15, 0xd6, 0xfe, 0x2f, 0x8c, 0xde, 0xc3, 0x64, - 0x86, 0xd1, 0x74, 0x86, 0xd1, 0xd7, 0x0c, 0xa3, 0xd7, 0x39, 0x8e, 0xa6, 0x73, 0x1c, 0x7d, 0xcc, - 0x71, 0x74, 0x7f, 0x2d, 0xa4, 0x7d, 0x2c, 0x53, 0x92, 0x41, 0x4e, 0x15, 0x2f, 0xad, 0x06, 0xd5, - 0x06, 0x2d, 0x16, 0x35, 0x1d, 0x5d, 0xd1, 0xa7, 0xbf, 0xe6, 0xd9, 0x40, 0x72, 0x65, 0xfd, 0xcb, - 0xba, 0x98, 0xd3, 0x9a, 0xfb, 0x5c, 0xfe, 0x04, 0x00, 0x00, 0xff, 0xff, 0x46, 0x34, 0xa0, 0x69, - 0x42, 0x02, 0x00, 0x00, + proto.RegisterFile("neutron/ibcratelimit/v1beta1/query.proto", fileDescriptor_a6095f726b1d3aec) +} + +var fileDescriptor_a6095f726b1d3aec = []byte{ + // 326 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x51, 0xcf, 0x4a, 0x3b, 0x31, + 0x18, 0xdc, 0xfc, 0xf8, 0xd9, 0xc3, 0x8a, 0x0a, 0x8b, 0x07, 0x29, 0x25, 0x4a, 0x11, 0xa9, 0x7f, + 0x9a, 0xd0, 0xea, 0x13, 0x14, 0x1f, 0x40, 0x8b, 0x27, 0x0f, 0x42, 0x76, 0x09, 0x31, 0xd0, 0xcd, + 0xb7, 0x4d, 0xb2, 0x45, 0xaf, 0x3e, 0x81, 0xd0, 0xb3, 0xef, 0xd3, 0x63, 0xc1, 0x8b, 0x27, 0x91, + 0xae, 0x0f, 0x22, 0x9b, 0xa4, 0x22, 0x22, 0xa5, 0xa7, 0x4c, 0xbe, 0xcc, 0x0c, 0xf3, 0x4d, 0xe2, + 0x8e, 0xe2, 0xa5, 0xd5, 0xa0, 0xa8, 0x4c, 0x33, 0xcd, 0x2c, 0x1f, 0xc9, 0x5c, 0x5a, 0x3a, 0xe9, + 0xa5, 0xdc, 0xb2, 0x1e, 0x1d, 0x97, 0x5c, 0x3f, 0x92, 0x42, 0x83, 0x85, 0xa4, 0x15, 0x98, 0xe4, + 0x27, 0x93, 0x04, 0x66, 0xf3, 0x24, 0x03, 0x93, 0x83, 0xa1, 0x29, 0x33, 0xdc, 0xcb, 0xbe, 0x4d, + 0x0a, 0x26, 0xa4, 0x62, 0x56, 0x82, 0xf2, 0x4e, 0xcd, 0x5d, 0x01, 0x02, 0x1c, 0xa4, 0x35, 0x0a, + 0xd3, 0x96, 0x00, 0x10, 0x23, 0x4e, 0x59, 0x21, 0x29, 0x53, 0x0a, 0xac, 0x93, 0x98, 0xf0, 0x7a, + 0xbc, 0x32, 0x67, 0xc1, 0x34, 0xcb, 0x03, 0xb5, 0xbd, 0x13, 0x6f, 0x5d, 0xb9, 0xfb, 0x90, 0x8f, + 0x4b, 0x6e, 0x6c, 0xfb, 0x26, 0xde, 0x5e, 0x0e, 0x4c, 0x01, 0xca, 0xf0, 0x64, 0x10, 0x37, 0xbc, + 0x64, 0x0f, 0x1d, 0xa0, 0xce, 0x66, 0xff, 0x90, 0xac, 0x5a, 0x8e, 0x78, 0xf5, 0xe0, 0xff, 0xec, + 0x7d, 0x3f, 0x1a, 0x06, 0x65, 0xff, 0x05, 0xc5, 0x1b, 0xd7, 0xf5, 0xa2, 0xc9, 0x14, 0xc5, 0x0d, + 0x4f, 0x49, 0x4e, 0xd7, 0x31, 0x0a, 0xb9, 0x9a, 0x67, 0xeb, 0x91, 0x7d, 0xe6, 0x36, 0x79, 0x7a, + 0xfd, 0x9c, 0xfe, 0xeb, 0x24, 0x47, 0xd4, 0x35, 0x2d, 0x4d, 0x5d, 0x45, 0xb7, 0x96, 0x75, 0xff, + 0x2a, 0x63, 0x70, 0x37, 0x5b, 0x60, 0x34, 0x5f, 0x60, 0xf4, 0xb1, 0xc0, 0xe8, 0xb9, 0xc2, 0xd1, + 0xbc, 0xc2, 0xd1, 0x5b, 0x85, 0xa3, 0xdb, 0x4b, 0x21, 0xed, 0x7d, 0x99, 0x92, 0x0c, 0x72, 0x1a, + 0x12, 0x74, 0x41, 0x8b, 0x25, 0xa6, 0x93, 0x0b, 0xfa, 0xf0, 0xdb, 0x3c, 0x1b, 0x49, 0xae, 0xac, + 0xff, 0x59, 0x57, 0x73, 0xda, 0x70, 0xc7, 0xf9, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x82, 0x38, + 0x7b, 0x6a, 0x42, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -175,7 +175,7 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { func (c *queryClient) Params(ctx context.Context, in *ParamsRequest, opts ...grpc.CallOption) (*ParamsResponse, error) { out := new(ParamsResponse) - err := c.cc.Invoke(ctx, "/osmosis.ibcratelimit.v1beta1.Query/Params", in, out, opts...) + err := c.cc.Invoke(ctx, "/neutron.ibcratelimit.v1beta1.Query/Params", in, out, opts...) if err != nil { return nil, err } @@ -211,7 +211,7 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/osmosis.ibcratelimit.v1beta1.Query/Params", + FullMethod: "/neutron.ibcratelimit.v1beta1.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).Params(ctx, req.(*ParamsRequest)) @@ -220,7 +220,7 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf } var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "osmosis.ibcratelimit.v1beta1.Query", + ServiceName: "neutron.ibcratelimit.v1beta1.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ { @@ -229,7 +229,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "osmosis/ibcratelimit/v1beta1/query.proto", + Metadata: "neutron/ibcratelimit/v1beta1/query.proto", } func (m *ParamsRequest) Marshal() (dAtA []byte, err error) { diff --git a/x/ibc-rate-limit/client/queryproto/query.pb.gw.go b/x/ibc-rate-limit/client/queryproto/query.pb.gw.go index cba553701..24a070e4a 100644 --- a/x/ibc-rate-limit/client/queryproto/query.pb.gw.go +++ b/x/ibc-rate-limit/client/queryproto/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: osmosis/ibcratelimit/v1beta1/query.proto +// source: neutron/ibcratelimit/v1beta1/query.proto /* Package queryproto is a reverse proxy. diff --git a/x/ibc-rate-limit/types/genesis.pb.go b/x/ibc-rate-limit/types/genesis.pb.go index 0d9a5780b..4ba5e6d0a 100644 --- a/x/ibc-rate-limit/types/genesis.pb.go +++ b/x/ibc-rate-limit/types/genesis.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: osmosis/ibcratelimit/v1beta1/genesis.proto +// source: neutron/ibcratelimit/v1beta1/genesis.proto package types @@ -35,7 +35,7 @@ func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_37b7c83ed1422177, []int{0} + return fileDescriptor_4a6a285b43c9c3fe, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -72,31 +72,31 @@ func (m *GenesisState) GetParams() Params { } func init() { - proto.RegisterType((*GenesisState)(nil), "osmosis.ibcratelimit.v1beta1.GenesisState") + proto.RegisterType((*GenesisState)(nil), "neutron.ibcratelimit.v1beta1.GenesisState") } func init() { - proto.RegisterFile("osmosis/ibcratelimit/v1beta1/genesis.proto", fileDescriptor_37b7c83ed1422177) + proto.RegisterFile("neutron/ibcratelimit/v1beta1/genesis.proto", fileDescriptor_4a6a285b43c9c3fe) } -var fileDescriptor_37b7c83ed1422177 = []byte{ - // 251 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x8e, 0xb1, 0x4e, 0xc3, 0x30, - 0x10, 0x86, 0x63, 0x09, 0x75, 0x28, 0x4c, 0x15, 0x03, 0xad, 0x90, 0x41, 0x88, 0x01, 0x90, 0xe2, - 0x53, 0x81, 0x81, 0x39, 0x0b, 0x2b, 0x0a, 0x1b, 0x0b, 0xb2, 0x23, 0x63, 0x2c, 0x35, 0xb9, 0xc8, - 0xbe, 0x54, 0xf4, 0x2d, 0x78, 0xac, 0x8e, 0x1d, 0x99, 0x10, 0x4a, 0x5e, 0x04, 0xc5, 0x36, 0x12, - 0x53, 0xb7, 0xbb, 0xfb, 0xbf, 0xdf, 0xfe, 0xa6, 0x37, 0xe8, 0x6b, 0xf4, 0xd6, 0x83, 0x55, 0x95, - 0x93, 0xa4, 0x57, 0xb6, 0xb6, 0x04, 0xeb, 0xa5, 0xd2, 0x24, 0x97, 0x60, 0x74, 0xa3, 0xbd, 0xf5, - 0xa2, 0x75, 0x48, 0x38, 0x3b, 0x4d, 0xac, 0xf8, 0xcf, 0x8a, 0xc4, 0x2e, 0xe6, 0x55, 0x88, 0x5f, - 0x03, 0x0b, 0x71, 0x89, 0xc5, 0xc5, 0xb1, 0x41, 0x83, 0xf1, 0x3e, 0x4e, 0xe9, 0x3a, 0x37, 0x88, - 0x66, 0xa5, 0x21, 0x6c, 0xaa, 0x7b, 0x03, 0xd9, 0x6c, 0x52, 0x74, 0xbd, 0xd7, 0xaa, 0x95, 0x4e, - 0xd6, 0xe9, 0xed, 0x8b, 0x72, 0x7a, 0xf4, 0x18, 0x2d, 0x9f, 0x49, 0x92, 0x9e, 0x15, 0xd3, 0x49, - 0xcc, 0x4f, 0xd8, 0x39, 0xbb, 0x3a, 0xbc, 0xbd, 0x14, 0xfb, 0xac, 0xc5, 0x53, 0x60, 0x8b, 0x83, - 0xed, 0xf7, 0x59, 0x56, 0xa6, 0x66, 0x51, 0x6e, 0x7b, 0xce, 0x76, 0x3d, 0x67, 0x3f, 0x3d, 0x67, - 0x9f, 0x03, 0xcf, 0x76, 0x03, 0xcf, 0xbe, 0x06, 0x9e, 0xbd, 0x3c, 0x18, 0x4b, 0xef, 0x9d, 0x12, - 0x15, 0xd6, 0xd0, 0xe8, 0x8e, 0x1c, 0x36, 0x39, 0x3a, 0xf3, 0x37, 0xc3, 0xfa, 0x1e, 0x3e, 0x46, - 0xe9, 0x7c, 0xfc, 0x29, 0x8f, 0xda, 0xb4, 0x69, 0xb5, 0x57, 0x93, 0xa0, 0x7b, 0xf7, 0x1b, 0x00, - 0x00, 0xff, 0xff, 0xd7, 0x02, 0x1d, 0xea, 0x71, 0x01, 0x00, 0x00, +var fileDescriptor_4a6a285b43c9c3fe = []byte{ + // 250 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0xca, 0x4b, 0x2d, 0x2d, + 0x29, 0xca, 0xcf, 0xd3, 0xcf, 0x4c, 0x4a, 0x2e, 0x4a, 0x2c, 0x49, 0xcd, 0xc9, 0xcc, 0xcd, 0x2c, + 0xd1, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, + 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x81, 0xaa, 0xd5, 0x43, 0x56, 0xab, 0x07, 0x55, + 0x2b, 0x25, 0x99, 0x9c, 0x5f, 0x9c, 0x9b, 0x5f, 0x1c, 0x0f, 0x56, 0xab, 0x0f, 0xe1, 0x40, 0x34, + 0x4a, 0x89, 0xa4, 0xe7, 0xa7, 0xe7, 0x43, 0xc4, 0x41, 0x2c, 0xa8, 0xa8, 0x64, 0x7a, 0x7e, 0x7e, + 0x7a, 0x4e, 0xaa, 0x3e, 0x98, 0x97, 0x54, 0x9a, 0xa6, 0x9f, 0x98, 0x57, 0x09, 0x95, 0xd2, 0xc4, + 0xeb, 0xaa, 0x82, 0xc4, 0xa2, 0xc4, 0x5c, 0xa8, 0xd9, 0x4a, 0x41, 0x5c, 0x3c, 0xee, 0x10, 0x57, + 0x06, 0x97, 0x24, 0x96, 0xa4, 0x0a, 0x39, 0x71, 0xb1, 0x41, 0xe4, 0x25, 0x18, 0x15, 0x18, 0x35, + 0xb8, 0x8d, 0x54, 0xf4, 0xf0, 0xb9, 0x5a, 0x2f, 0x00, 0xac, 0xd6, 0x89, 0xe5, 0xc4, 0x3d, 0x79, + 0x86, 0x20, 0xa8, 0x4e, 0xa7, 0xa0, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, + 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, + 0xb2, 0x48, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x87, 0x9a, 0xab, 0x9b, + 0x5f, 0x94, 0x0e, 0x63, 0xeb, 0x97, 0x99, 0xe8, 0x57, 0x80, 0x1c, 0xad, 0x0b, 0xb2, 0x49, 0x17, + 0xe2, 0xec, 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0xb0, 0x73, 0x8d, 0x01, 0x01, 0x00, 0x00, + 0xff, 0xff, 0x62, 0xd7, 0xa1, 0x99, 0x71, 0x01, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/ibc-rate-limit/types/params.pb.go b/x/ibc-rate-limit/types/params.pb.go index 65f64051f..bfc85f850 100644 --- a/x/ibc-rate-limit/types/params.pb.go +++ b/x/ibc-rate-limit/types/params.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: osmosis/ibcratelimit/v1beta1/params.proto +// source: neutron/ibcratelimit/v1beta1/params.proto package types @@ -32,7 +32,7 @@ func (m *Params) Reset() { *m = Params{} } func (m *Params) String() string { return proto.CompactTextString(m) } func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_4b7974c8f0f9446a, []int{0} + return fileDescriptor_96b2a3ecd8a27c06, []int{0} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -69,17 +69,17 @@ func (m *Params) GetContractAddress() string { } func init() { - proto.RegisterType((*Params)(nil), "osmosis.ibcratelimit.v1beta1.Params") + proto.RegisterType((*Params)(nil), "neutron.ibcratelimit.v1beta1.Params") } func init() { - proto.RegisterFile("osmosis/ibcratelimit/v1beta1/params.proto", fileDescriptor_4b7974c8f0f9446a) + proto.RegisterFile("neutron/ibcratelimit/v1beta1/params.proto", fileDescriptor_96b2a3ecd8a27c06) } -var fileDescriptor_4b7974c8f0f9446a = []byte{ - // 222 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0xcc, 0x2f, 0xce, 0xcd, - 0x2f, 0xce, 0x2c, 0xd6, 0xcf, 0x4c, 0x4a, 0x2e, 0x4a, 0x2c, 0x49, 0xcd, 0xc9, 0xcc, 0xcd, 0x2c, +var fileDescriptor_96b2a3ecd8a27c06 = []byte{ + // 218 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0xcc, 0x4b, 0x2d, 0x2d, + 0x29, 0xca, 0xcf, 0xd3, 0xcf, 0x4c, 0x4a, 0x2e, 0x4a, 0x2c, 0x49, 0xcd, 0xc9, 0xcc, 0xcd, 0x2c, 0xd1, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x2f, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x81, 0x2a, 0xd5, 0x43, 0x56, 0xaa, 0x07, 0x55, 0x2a, 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x56, 0xa8, 0x0f, 0x62, 0x41, 0xf4, 0x28, 0x05, 0x70, 0xb1, @@ -88,10 +88,10 @@ var fileDescriptor_4b7974c8f0f9446a = []byte{ 0x74, 0x4f, 0x5e, 0xbc, 0x32, 0x31, 0x37, 0xc7, 0x4a, 0x09, 0x5d, 0x85, 0x52, 0x10, 0x3f, 0x4c, 0xc8, 0x11, 0x22, 0xe2, 0x14, 0x74, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0x4e, 0x78, 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, - 0x16, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x79, 0xa9, 0xa5, 0x25, - 0x45, 0xf9, 0x79, 0xba, 0xf9, 0x45, 0xe9, 0x30, 0xb6, 0x7e, 0x99, 0x89, 0x7e, 0x05, 0xc8, 0x9b, - 0xba, 0x20, 0xc7, 0xeb, 0x42, 0x3c, 0x5a, 0x52, 0x59, 0x90, 0x5a, 0x9c, 0xc4, 0x06, 0x76, 0xac, - 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x9c, 0x9e, 0xa8, 0x62, 0x0d, 0x01, 0x00, 0x00, + 0x16, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x50, 0xa7, 0xea, 0xe6, + 0x17, 0xa5, 0xc3, 0xd8, 0xfa, 0x65, 0x26, 0xfa, 0x15, 0x20, 0x6f, 0xea, 0x82, 0x1c, 0xaf, 0x0b, + 0xf1, 0x68, 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, 0xd8, 0xb1, 0xc6, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xa8, 0x4c, 0xd8, 0x33, 0x0d, 0x01, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/ibc-rate-limit/types/tx.pb.go b/x/ibc-rate-limit/types/tx.pb.go index 5f2a0146d..ca465e009 100644 --- a/x/ibc-rate-limit/types/tx.pb.go +++ b/x/ibc-rate-limit/types/tx.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: osmosis/ibcratelimit/v1beta1/tx.proto +// source: neutron/ibcratelimit/v1beta1/tx.proto package types @@ -49,7 +49,7 @@ func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } func (*MsgUpdateParams) ProtoMessage() {} func (*MsgUpdateParams) Descriptor() ([]byte, []int) { - return fileDescriptor_a22cc8a8a128a1ff, []int{0} + return fileDescriptor_88b553b0b85135fe, []int{0} } func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -103,7 +103,7 @@ func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateParamsResponse) ProtoMessage() {} func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_a22cc8a8a128a1ff, []int{1} + return fileDescriptor_88b553b0b85135fe, []int{1} } func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -133,41 +133,41 @@ func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo func init() { - proto.RegisterType((*MsgUpdateParams)(nil), "osmosis.ibcratelimit.v1beta1.MsgUpdateParams") - proto.RegisterType((*MsgUpdateParamsResponse)(nil), "osmosis.ibcratelimit.v1beta1.MsgUpdateParamsResponse") + proto.RegisterType((*MsgUpdateParams)(nil), "neutron.ibcratelimit.v1beta1.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "neutron.ibcratelimit.v1beta1.MsgUpdateParamsResponse") } func init() { - proto.RegisterFile("osmosis/ibcratelimit/v1beta1/tx.proto", fileDescriptor_a22cc8a8a128a1ff) + proto.RegisterFile("neutron/ibcratelimit/v1beta1/tx.proto", fileDescriptor_88b553b0b85135fe) } -var fileDescriptor_a22cc8a8a128a1ff = []byte{ - // 392 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcd, 0x2f, 0xce, 0xcd, - 0x2f, 0xce, 0x2c, 0xd6, 0xcf, 0x4c, 0x4a, 0x2e, 0x4a, 0x2c, 0x49, 0xcd, 0xc9, 0xcc, 0xcd, 0x2c, +var fileDescriptor_88b553b0b85135fe = []byte{ + // 390 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcd, 0x4b, 0x2d, 0x2d, + 0x29, 0xca, 0xcf, 0xd3, 0xcf, 0x4c, 0x4a, 0x2e, 0x4a, 0x2c, 0x49, 0xcd, 0xc9, 0xcc, 0xcd, 0x2c, 0xd1, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x2f, 0xa9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x81, 0x2a, 0xd3, 0x43, 0x56, 0xa6, 0x07, 0x55, 0x26, 0x25, 0x98, 0x98, 0x9b, - 0x99, 0x97, 0xaf, 0x0f, 0x26, 0x21, 0x1a, 0xa4, 0xe4, 0x92, 0xc1, 0x3a, 0xf4, 0x93, 0x12, 0xf3, - 0xb2, 0xe1, 0xc6, 0x81, 0x38, 0x18, 0xf2, 0xc5, 0xa9, 0x70, 0xf9, 0xe4, 0xfc, 0xcc, 0x3c, 0xa8, - 0xbc, 0x38, 0x54, 0x3e, 0xb7, 0x38, 0x5d, 0xbf, 0xcc, 0x10, 0x44, 0x41, 0x25, 0x24, 0x21, 0x12, - 0xf1, 0x60, 0x9e, 0x3e, 0x84, 0x03, 0x95, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x87, 0x88, 0x83, 0x58, - 0x50, 0x51, 0x4d, 0xbc, 0x3e, 0x2c, 0x48, 0x2c, 0x4a, 0xcc, 0x85, 0x1a, 0xa0, 0x74, 0x96, 0x91, - 0x8b, 0xdf, 0xb7, 0x38, 0x3d, 0xb4, 0x20, 0x25, 0xb1, 0x24, 0x35, 0x00, 0x2c, 0x23, 0x64, 0xc6, - 0xc5, 0x99, 0x58, 0x5a, 0x92, 0x91, 0x5f, 0x94, 0x59, 0x52, 0x29, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, - 0xe9, 0x24, 0x71, 0x69, 0x8b, 0xae, 0x08, 0xd4, 0x66, 0xc7, 0x94, 0x94, 0xa2, 0xd4, 0xe2, 0xe2, - 0xe0, 0x92, 0xa2, 0xcc, 0xbc, 0xf4, 0x20, 0x84, 0x52, 0x21, 0x77, 0x2e, 0x36, 0x88, 0xd9, 0x12, - 0x4c, 0x0a, 0x8c, 0x1a, 0xdc, 0x46, 0x2a, 0x7a, 0xf8, 0x82, 0x50, 0x0f, 0x62, 0x9b, 0x13, 0xe7, - 0x89, 0x7b, 0xf2, 0x0c, 0x2b, 0x9e, 0x6f, 0xd0, 0x62, 0x0c, 0x82, 0x6a, 0xb7, 0xb2, 0x6c, 0x7a, - 0xbe, 0x41, 0x0b, 0x61, 0x70, 0xd7, 0xf3, 0x0d, 0x5a, 0x6a, 0x48, 0x5e, 0xd2, 0x05, 0x99, 0xa5, - 0x0b, 0xf1, 0x14, 0x9a, 0xdb, 0x95, 0x24, 0xb9, 0xc4, 0xd1, 0x84, 0x82, 0x52, 0x8b, 0x0b, 0xf2, - 0xf3, 0x8a, 0x53, 0x8d, 0x9a, 0x18, 0xb9, 0x98, 0x7d, 0x8b, 0xd3, 0x85, 0x4a, 0xb8, 0x78, 0x50, - 0xbc, 0xab, 0x8b, 0xdf, 0x99, 0x68, 0xc6, 0x49, 0x99, 0x92, 0xa4, 0x1c, 0x66, 0xbb, 0x14, 0x6b, - 0x03, 0xc8, 0x8b, 0x4e, 0x41, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, - 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, 0x10, 0x65, - 0x91, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x9f, 0x97, 0x5a, 0x5a, 0x52, - 0x94, 0x9f, 0xa7, 0x9b, 0x5f, 0x94, 0x0e, 0x63, 0xeb, 0x97, 0x99, 0xe8, 0x57, 0xa0, 0xfb, 0xbe, - 0xa4, 0xb2, 0x20, 0xb5, 0x38, 0x89, 0x0d, 0x1c, 0x95, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xdb, 0x78, 0x68, 0xc8, 0xd9, 0x02, 0x00, 0x00, + 0x99, 0x97, 0xaf, 0x0f, 0x26, 0x21, 0x1a, 0xa4, 0xe4, 0x92, 0xf3, 0x8b, 0x73, 0xf3, 0x8b, 0xf5, + 0x93, 0x12, 0xf3, 0xb2, 0xe1, 0xc6, 0x81, 0x38, 0x18, 0xf2, 0xc5, 0xa9, 0x70, 0xf9, 0xe4, 0xfc, + 0xcc, 0x3c, 0xa8, 0xbc, 0x38, 0x54, 0x3e, 0xb7, 0x38, 0x5d, 0xbf, 0xcc, 0x10, 0x44, 0x41, 0x25, + 0x24, 0x21, 0x12, 0xf1, 0x60, 0x9e, 0x3e, 0x84, 0x03, 0x95, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x87, + 0x88, 0x83, 0x58, 0x50, 0x51, 0x4d, 0xbc, 0x3e, 0x2c, 0x48, 0x2c, 0x4a, 0xcc, 0x85, 0x1a, 0xa0, + 0x74, 0x96, 0x91, 0x8b, 0xdf, 0xb7, 0x38, 0x3d, 0xb4, 0x20, 0x25, 0xb1, 0x24, 0x35, 0x00, 0x2c, + 0x23, 0x64, 0xc6, 0xc5, 0x99, 0x58, 0x5a, 0x92, 0x91, 0x5f, 0x94, 0x59, 0x52, 0x29, 0xc1, 0xa8, + 0xc0, 0xa8, 0xc1, 0xe9, 0x24, 0x71, 0x69, 0x8b, 0xae, 0x08, 0xd4, 0x66, 0xc7, 0x94, 0x94, 0xa2, + 0xd4, 0xe2, 0xe2, 0xe0, 0x92, 0xa2, 0xcc, 0xbc, 0xf4, 0x20, 0x84, 0x52, 0x21, 0x77, 0x2e, 0x36, + 0x88, 0xd9, 0x12, 0x4c, 0x0a, 0x8c, 0x1a, 0xdc, 0x46, 0x2a, 0x7a, 0xf8, 0x82, 0x50, 0x0f, 0x62, + 0x9b, 0x13, 0xe7, 0x89, 0x7b, 0xf2, 0x0c, 0x2b, 0x9e, 0x6f, 0xd0, 0x62, 0x0c, 0x82, 0x6a, 0xb7, + 0xb2, 0x6c, 0x7a, 0xbe, 0x41, 0x0b, 0x61, 0x70, 0xd7, 0xf3, 0x0d, 0x5a, 0x6a, 0x48, 0x5e, 0xd2, + 0x05, 0x99, 0xa5, 0x0b, 0xf1, 0x14, 0x9a, 0xdb, 0x95, 0x24, 0xb9, 0xc4, 0xd1, 0x84, 0x82, 0x52, + 0x8b, 0x0b, 0xf2, 0xf3, 0x8a, 0x53, 0x8d, 0x9a, 0x18, 0xb9, 0x98, 0x7d, 0x8b, 0xd3, 0x85, 0x4a, + 0xb8, 0x78, 0x50, 0xbc, 0xab, 0x8b, 0xdf, 0x99, 0x68, 0xc6, 0x49, 0x99, 0x92, 0xa4, 0x1c, 0x66, + 0xbb, 0x14, 0x6b, 0x03, 0xc8, 0x8b, 0x4e, 0x41, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, + 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, + 0xc7, 0x10, 0x65, 0x91, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x0f, 0xb5, + 0x41, 0x37, 0xbf, 0x28, 0x1d, 0xc6, 0xd6, 0x2f, 0x33, 0xd1, 0xaf, 0x40, 0xf7, 0x7d, 0x49, 0x65, + 0x41, 0x6a, 0x71, 0x12, 0x1b, 0x38, 0x2a, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x78, 0xe1, + 0x33, 0x6c, 0xd9, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -195,7 +195,7 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { out := new(MsgUpdateParamsResponse) - err := c.cc.Invoke(ctx, "/osmosis.ibcratelimit.v1beta1.Msg/UpdateParams", in, out, opts...) + err := c.cc.Invoke(ctx, "/neutron.ibcratelimit.v1beta1.Msg/UpdateParams", in, out, opts...) if err != nil { return nil, err } @@ -229,7 +229,7 @@ func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/osmosis.ibcratelimit.v1beta1.Msg/UpdateParams", + FullMethod: "/neutron.ibcratelimit.v1beta1.Msg/UpdateParams", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) @@ -238,7 +238,7 @@ func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(in } var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "osmosis.ibcratelimit.v1beta1.Msg", + ServiceName: "neutron.ibcratelimit.v1beta1.Msg", HandlerType: (*MsgServer)(nil), Methods: []grpc.MethodDesc{ { @@ -247,7 +247,7 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "osmosis/ibcratelimit/v1beta1/tx.proto", + Metadata: "neutron/ibcratelimit/v1beta1/tx.proto", } func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { From ff6fe4a360e19f4183929a603055fc1a66041448 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 17 Sep 2024 08:45:19 -0300 Subject: [PATCH 076/127] update code comments --- app/app.go | 5 ++--- x/ibc-rate-limit/ibc_module.go | 6 ++---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/app/app.go b/app/app.go index 0692b5953..8d2edf99c 100644 --- a/app/app.go +++ b/app/app.go @@ -621,7 +621,7 @@ func New( app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( appCodec, keys[icacontrollertypes.StoreKey], app.GetSubspace(icacontrollertypes.SubModuleName), - app.RateLimitingICS4Wrapper, // определяется в wireisc20 + app.RateLimitingICS4Wrapper, // defiened in wireisc20 app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, scopedICAControllerKeeper, app.MsgServiceRouter(), authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), @@ -629,7 +629,7 @@ func New( app.ICAHostKeeper = icahostkeeper.NewKeeper( appCodec, keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName), - app.RateLimitingICS4Wrapper, // may be replaced with middleware such as ics29 feerefunder + app.RateLimitingICS4Wrapper, // defiened in wireisc20 app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, app.AccountKeeper, scopedICAHostKeeper, app.MsgServiceRouter(), authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), @@ -1581,7 +1581,6 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(tokenfactorytypes.StoreKey).WithKeyTable(tokenfactorytypes.ParamKeyTable()) paramsKeeper.Subspace(interchainqueriesmoduletypes.StoreKey).WithKeyTable(interchainqueriesmoduletypes.ParamKeyTable()) paramsKeeper.Subspace(interchaintxstypes.StoreKey).WithKeyTable(interchaintxstypes.ParamKeyTable()) - // paramsKeeper.Subspace(ibcratelimittypes.ModuleName) return paramsKeeper } diff --git a/x/ibc-rate-limit/ibc_module.go b/x/ibc-rate-limit/ibc_module.go index 55c05cfd7..ae6f77308 100644 --- a/x/ibc-rate-limit/ibc_module.go +++ b/x/ibc-rate-limit/ibc_module.go @@ -161,10 +161,8 @@ func (im *IBCModule) OnAcknowledgementPacket( acknowledgement []byte, relayer sdk.AccAddress, ) error { - if ctx.IsCheckTx() || ctx.IsReCheckTx() { - return nil - // return im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) - } + // Osmosis have some osmo-specific code here, but it disrupts proper work of neutron chain. + // See: https://github.com/osmosis-labs/osmosis/pull/8308 & https://github.com/osmosis-labs/osmosis/pull/8420 var ack channeltypes.Acknowledgement if err := json.Unmarshal(acknowledgement, &ack); err != nil { return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet acknowledgement: %v", err) From d24b3528e71181cd8c7c37bc745d96bee7a65574 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 17 Sep 2024 08:50:22 -0300 Subject: [PATCH 077/127] add more comments to app.go --- app/app.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/app.go b/app/app.go index 8d2edf99c..691860ff3 100644 --- a/app/app.go +++ b/app/app.go @@ -821,7 +821,7 @@ func New( &app.BankKeeper, nil, nil, - app.RateLimitingICS4Wrapper, // may be replaced with middleware such as ics29 feerefunder + app.RateLimitingICS4Wrapper, // defiened in wireisc20 app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, scopedWasmKeeper, @@ -1668,7 +1668,7 @@ func (app *App) WireICS20PreWasmKeeper( rateLimitingICS4Wrapper := ibcratelimit.NewICS4Middleware( app.HooksICS4Wrapper, &app.AccountKeeper, - // wasm keeper we set later. + // wasm keeper we set later, right after wasmkeeper init. line 868 nil, &app.BankKeeper, &ibcratelimitKeeper, From b654088e62c473145be4637bd0913bc48be59c92 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 17 Sep 2024 09:02:57 -0300 Subject: [PATCH 078/127] modify ibcrl module to store pointers, should help avoid problems in future --- app/app.go | 2 +- x/ibc-rate-limit/ibcratelimitmodule/module.go | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/app.go b/app/app.go index 691860ff3..1c5a99a5c 100644 --- a/app/app.go +++ b/app/app.go @@ -859,7 +859,7 @@ func New( ) interchainTxsModule := interchaintxs.NewAppModule(appCodec, app.InterchainTxsKeeper, app.AccountKeeper, app.BankKeeper) contractManagerModule := contractmanager.NewAppModule(appCodec, app.ContractManagerKeeper) - ibcRateLimitmodule := ibcratelimitmodule.NewAppModule(appCodec, *app.RateLimitingICS4Wrapper.IbcratelimitKeeper, *app.RateLimitingICS4Wrapper) + ibcRateLimitmodule := ibcratelimitmodule.NewAppModule(appCodec, app.RateLimitingICS4Wrapper.IbcratelimitKeeper, app.RateLimitingICS4Wrapper) ibcHooksModule := ibchooks.NewAppModule(app.AccountKeeper) transferModule := transferSudo.NewAppModule(app.TransferKeeper) diff --git a/x/ibc-rate-limit/ibcratelimitmodule/module.go b/x/ibc-rate-limit/ibcratelimitmodule/module.go index 780d65993..f903c5f00 100644 --- a/x/ibc-rate-limit/ibcratelimitmodule/module.go +++ b/x/ibc-rate-limit/ibcratelimitmodule/module.go @@ -90,14 +90,14 @@ func (AppModuleBasic) RegisterInterfaces(reg codectypes.InterfaceRegistry) { type AppModule struct { AppModuleBasic - ics4wrapper ibcratelimit.ICS4Wrapper - keeper keeper.Keeper + ics4wrapper *ibcratelimit.ICS4Wrapper + keeper *keeper.Keeper } func NewAppModule( cdc codec.Codec, - keeper keeper.Keeper, - ics4wrapper ibcratelimit.ICS4Wrapper, + keeper *keeper.Keeper, + ics4wrapper *ibcratelimit.ICS4Wrapper, ) AppModule { return AppModule{ AppModuleBasic: NewAppModuleBasic(cdc), @@ -123,8 +123,8 @@ func (AppModule) QuerierRoute() string { return types.RouterKey } // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { - queryproto.RegisterQueryServer(cfg.QueryServer(), grpc.Querier{Q: ibcratelimitclient.Querier{K: am.ics4wrapper}}) - types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + queryproto.RegisterQueryServer(cfg.QueryServer(), grpc.Querier{Q: ibcratelimitclient.Querier{K: *am.ics4wrapper}}) + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(*am.keeper)) } // RegisterInvariants registers the txfees module's invariants. From 9a44936f8b058a162fefff77eaf1431117f7a407 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 17 Sep 2024 09:13:20 -0300 Subject: [PATCH 079/127] move max supported ibc reciever addr len to const --- x/ibc-rate-limit/ibc_module.go | 4 ++-- x/ibc-rate-limit/types/constants.go | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 x/ibc-rate-limit/types/constants.go diff --git a/x/ibc-rate-limit/ibc_module.go b/x/ibc-rate-limit/ibc_module.go index ae6f77308..bad77dbaf 100644 --- a/x/ibc-rate-limit/ibc_module.go +++ b/x/ibc-rate-limit/ibc_module.go @@ -119,8 +119,8 @@ func ValidateReceiverAddress(packet exported.PacketI) error { if err := json.Unmarshal(packet.GetData(), &receiverObj); err != nil { return err } - if len(receiverObj.Receiver) >= 4096 { - return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "IBC Receiver address too long. Max supported length is %d", 4096) + if len(receiverObj.Receiver) >= types.MaxSupportedIBCReceiverAddressLength { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "IBC Receiver address too long. Max supported length is %d", types.MaxSupportedIBCReceiverAddressLength) } return nil } diff --git a/x/ibc-rate-limit/types/constants.go b/x/ibc-rate-limit/types/constants.go new file mode 100644 index 000000000..33f1fd9ed --- /dev/null +++ b/x/ibc-rate-limit/types/constants.go @@ -0,0 +1,3 @@ +package types + +const MaxSupportedIBCReceiverAddressLength = 4096 From 931cab85ac4786cdfeab943b78059070cc8731d4 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Wed, 18 Sep 2024 06:52:03 -0300 Subject: [PATCH 080/127] whitelists rl update params --- app/proposals_allowlisting.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/proposals_allowlisting.go b/app/proposals_allowlisting.go index 9b360b0ea..a9879b6d2 100644 --- a/app/proposals_allowlisting.go +++ b/app/proposals_allowlisting.go @@ -16,6 +16,7 @@ import ( ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck ccvconsumertypes "github.com/cosmos/interchain-security/v5/x/ccv/consumer/types" + ibcratelimittypes "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types" @@ -93,7 +94,8 @@ func isSdkMessageWhitelisted(msg sdk.Msg) bool { *feemarkettypes.MsgParams, *dynamicfeestypes.MsgUpdateParams, *ibctransfertypes.MsgUpdateParams, - *globalfeetypes.MsgUpdateParams: + *globalfeetypes.MsgUpdateParams, + *ibcratelimittypes.MsgUpdateParams: return true } return false From 76a73d51f8e04b435c1aaf2c70b695e2b179aa94 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Wed, 18 Sep 2024 20:39:46 -0300 Subject: [PATCH 081/127] make contract address field nullable --- .../neutron/ibcratelimit/v1beta1/params.proto | 5 +++- x/ibc-rate-limit/artifacts/checksums.txt | 1 + x/ibc-rate-limit/artifacts/rate_limiter.wasm | Bin 0 -> 407455 bytes x/ibc-rate-limit/ibc_middleware_test.go | 6 +++++ x/ibc-rate-limit/types/params.pb.go | 22 +++++++++--------- 5 files changed, 22 insertions(+), 12 deletions(-) create mode 100644 x/ibc-rate-limit/artifacts/checksums.txt create mode 100644 x/ibc-rate-limit/artifacts/rate_limiter.wasm diff --git a/proto/neutron/ibcratelimit/v1beta1/params.proto b/proto/neutron/ibcratelimit/v1beta1/params.proto index 65edad01f..3af333e3a 100644 --- a/proto/neutron/ibcratelimit/v1beta1/params.proto +++ b/proto/neutron/ibcratelimit/v1beta1/params.proto @@ -7,5 +7,8 @@ option go_package = "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types"; // Params defines the parameters for the ibc-rate-limit module. message Params { - string contract_address = 1 [(gogoproto.moretags) = "yaml:\"contract_address\""]; + string contract_address = 1 [ + (gogoproto.moretags) = "yaml:\"contract_address\"", + (gogoproto.nullable) = true + ]; } diff --git a/x/ibc-rate-limit/artifacts/checksums.txt b/x/ibc-rate-limit/artifacts/checksums.txt new file mode 100644 index 000000000..ec9f58b8f --- /dev/null +++ b/x/ibc-rate-limit/artifacts/checksums.txt @@ -0,0 +1 @@ +d73c99bc1b4e460435ad1453a42c44c2a85a02347691a313ce03095327441b38 rate_limiter.wasm diff --git a/x/ibc-rate-limit/artifacts/rate_limiter.wasm b/x/ibc-rate-limit/artifacts/rate_limiter.wasm new file mode 100644 index 0000000000000000000000000000000000000000..7627ff34c56a87610dece7d4565200ad920e3969 GIT binary patch literal 407455 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

|x!#C$Nwd2LJ%Z80bQS$VS&~ycY7%mc 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�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 z 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%0A--2e=Z`)4 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 From 3d01feccf2cef2d15e6cd7745d2d46837cf9fa91 Mon Sep 17 00:00:00 2001 From: bonedaddy Date: Wed, 11 Sep 2024 02:58:29 -0700 Subject: [PATCH 061/127] remove unnecessary resolver set --- x/ibc-rate-limit/Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/x/ibc-rate-limit/Cargo.toml b/x/ibc-rate-limit/Cargo.toml index 8b6838589..64e7f0b3a 100644 --- a/x/ibc-rate-limit/Cargo.toml +++ b/x/ibc-rate-limit/Cargo.toml @@ -1,5 +1,4 @@ [workspace] -resolver = "2" members = [ 'contracts/*', ] From 44b08d01d31bfff46620635e8779b5042d894281 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Wed, 11 Sep 2024 09:31:28 -0300 Subject: [PATCH 062/127] prepare proto --- proto/osmosis/ibcratelimit/v1beta1/genesis.proto | 2 +- proto/osmosis/ibcratelimit/v1beta1/params.proto | 2 +- proto/osmosis/ibcratelimit/v1beta1/query.proto | 2 +- proto/osmosis/ibcratelimit/v1beta1/query.yml | 4 ++-- proto/osmosis/ibcratelimit/v1beta1/tx.proto | 9 ++++++--- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/proto/osmosis/ibcratelimit/v1beta1/genesis.proto b/proto/osmosis/ibcratelimit/v1beta1/genesis.proto index 174bc230b..f923b547e 100644 --- a/proto/osmosis/ibcratelimit/v1beta1/genesis.proto +++ b/proto/osmosis/ibcratelimit/v1beta1/genesis.proto @@ -6,7 +6,7 @@ import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; import "osmosis/ibcratelimit/v1beta1/params.proto"; -option go_package = "github.com/osmosis-labs/osmosis/v26/x/ibc-rate-limit/types"; +option go_package = "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types"; // GenesisState defines the ibc-rate-limit module's genesis state. message GenesisState { diff --git a/proto/osmosis/ibcratelimit/v1beta1/params.proto b/proto/osmosis/ibcratelimit/v1beta1/params.proto index e954b7876..4d4c11518 100644 --- a/proto/osmosis/ibcratelimit/v1beta1/params.proto +++ b/proto/osmosis/ibcratelimit/v1beta1/params.proto @@ -3,7 +3,7 @@ package osmosis.ibcratelimit.v1beta1; import "gogoproto/gogo.proto"; -option go_package = "github.com/osmosis-labs/osmosis/v26/x/ibc-rate-limit/types"; +option go_package = "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types"; // Params defines the parameters for the ibc-rate-limit module. message Params { diff --git a/proto/osmosis/ibcratelimit/v1beta1/query.proto b/proto/osmosis/ibcratelimit/v1beta1/query.proto index a16556d21..314b3d8ae 100644 --- a/proto/osmosis/ibcratelimit/v1beta1/query.proto +++ b/proto/osmosis/ibcratelimit/v1beta1/query.proto @@ -6,7 +6,7 @@ import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; import "osmosis/ibcratelimit/v1beta1/params.proto"; -option go_package = "github.com/osmosis-labs/osmosis/v26/x/ibc-rate-limit/client/queryproto"; +option go_package = "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client/queryproto"; // Query defines the gRPC querier service. service Query { diff --git a/proto/osmosis/ibcratelimit/v1beta1/query.yml b/proto/osmosis/ibcratelimit/v1beta1/query.yml index c4356fcba..544f115c4 100644 --- a/proto/osmosis/ibcratelimit/v1beta1/query.yml +++ b/proto/osmosis/ibcratelimit/v1beta1/query.yml @@ -1,7 +1,7 @@ keeper: - path: "github.com/osmosis-labs/osmosis/v26/x/ibc-rate-limit" + path: "github.com/neutron-org/neutron/v4/x/ibc-rate-limit" struct: "Keeper" -client_path: "github.com/osmosis-labs/osmosis/v26/x/ibc-rate-limit/client" +client_path: "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/client" queries: Params: proto_wrapper: diff --git a/proto/osmosis/ibcratelimit/v1beta1/tx.proto b/proto/osmosis/ibcratelimit/v1beta1/tx.proto index f50fccbe5..539015d59 100644 --- a/proto/osmosis/ibcratelimit/v1beta1/tx.proto +++ b/proto/osmosis/ibcratelimit/v1beta1/tx.proto @@ -1,12 +1,15 @@ syntax = "proto3"; package osmosis.ibcratelimit.v1beta1; -import "cosmos/base/query/v1beta1/pagination.proto"; +import "amino/amino.proto"; +import "cosmos/bank/v1beta1/bank.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/msg/v1/msg.proto"; +import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; -import "google/api/annotations.proto"; import "osmosis/ibcratelimit/v1beta1/params.proto"; -option go_package = "github.com/osmosis-labs/osmosis/v26/x/ibc-rate-limit/types"; +option go_package = "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types"; // Msg defines the tokefactory module's gRPC message service. service Msg { From e683d1d318172b0e33edd285d24ffede42e1594a Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Wed, 11 Sep 2024 09:32:17 -0300 Subject: [PATCH 063/127] regen proto & create necc files for keeper/msgserver --- .../client/queryproto/query.pb.go | 42 +- x/ibc-rate-limit/types/codec.go | 25 + x/ibc-rate-limit/types/genesis.pb.go | 34 +- x/ibc-rate-limit/types/keys.go | 6 + x/ibc-rate-limit/types/params.pb.go | 12 +- x/ibc-rate-limit/types/tx.go | 40 ++ x/ibc-rate-limit/types/tx.pb.go | 605 ++++++++++++++++++ 7 files changed, 720 insertions(+), 44 deletions(-) create mode 100644 x/ibc-rate-limit/types/codec.go create mode 100644 x/ibc-rate-limit/types/tx.go create mode 100644 x/ibc-rate-limit/types/tx.pb.go diff --git a/x/ibc-rate-limit/client/queryproto/query.pb.go b/x/ibc-rate-limit/client/queryproto/query.pb.go index 6a711f464..3f07ac13a 100644 --- a/x/ibc-rate-limit/client/queryproto/query.pb.go +++ b/x/ibc-rate-limit/client/queryproto/query.pb.go @@ -125,27 +125,27 @@ func init() { var fileDescriptor_6904fea69f32464e = []byte{ // 324 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xcf, 0x4a, 0x2b, 0x31, - 0x18, 0xc5, 0x27, 0x97, 0x6b, 0x17, 0x23, 0x2a, 0x0c, 0x2e, 0xa4, 0x94, 0x28, 0x45, 0xa4, 0xfe, - 0x69, 0x42, 0x2b, 0xf8, 0x00, 0x5d, 0xb8, 0xd6, 0xe2, 0xca, 0x95, 0xc9, 0x10, 0x62, 0x60, 0x26, - 0xdf, 0x74, 0x92, 0x16, 0xdd, 0xfa, 0x04, 0x42, 0xd7, 0xbe, 0x4f, 0x97, 0x05, 0x37, 0xae, 0x44, - 0x5a, 0x1f, 0x44, 0x26, 0x49, 0x4b, 0x11, 0x29, 0x5d, 0xcd, 0x24, 0xf9, 0x9d, 0xf3, 0x9d, 0x9c, - 0xc4, 0x2d, 0x30, 0x39, 0x18, 0x65, 0xa8, 0xe2, 0x69, 0xc9, 0xac, 0xc8, 0x54, 0xae, 0x2c, 0x1d, - 0x75, 0xb8, 0xb0, 0xac, 0x43, 0x07, 0x43, 0x51, 0x3e, 0x93, 0xa2, 0x04, 0x0b, 0x49, 0x23, 0x90, - 0x64, 0x95, 0x24, 0x81, 0xac, 0xef, 0x4b, 0x90, 0xe0, 0x40, 0x5a, 0xfd, 0x79, 0x4d, 0xbd, 0x21, - 0x01, 0x64, 0x26, 0x28, 0x2b, 0x14, 0x65, 0x5a, 0x83, 0x65, 0x56, 0x81, 0x36, 0xe1, 0xf4, 0x2c, - 0x75, 0x96, 0x94, 0x33, 0x23, 0xfc, 0xa8, 0xe5, 0xe0, 0x82, 0x49, 0xa5, 0x1d, 0x1c, 0xd8, 0xd3, - 0xb5, 0x39, 0x0b, 0x56, 0xb2, 0x3c, 0xd8, 0x36, 0xf7, 0xe2, 0x9d, 0x1b, 0xb7, 0xee, 0x8b, 0xc1, - 0x50, 0x18, 0xdb, 0xbc, 0x8b, 0x77, 0x17, 0x1b, 0xa6, 0x00, 0x6d, 0x44, 0xd2, 0x8b, 0x6b, 0x5e, - 0x72, 0x80, 0x8e, 0x50, 0x6b, 0xbb, 0x7b, 0x4c, 0xd6, 0x5d, 0x8e, 0x78, 0x75, 0xef, 0xff, 0xe4, - 0xf3, 0x30, 0xea, 0x07, 0x65, 0xf7, 0x0d, 0xc5, 0x5b, 0xb7, 0x55, 0xe8, 0x64, 0x8c, 0xe2, 0x9a, - 0x47, 0x92, 0xf3, 0x4d, 0x8c, 0x42, 0xae, 0xfa, 0xc5, 0x66, 0xb0, 0xcf, 0xdc, 0x24, 0x2f, 0xef, - 0xdf, 0xe3, 0x7f, 0xad, 0xe4, 0x84, 0xae, 0x54, 0xd1, 0xae, 0x64, 0xed, 0xbf, 0xca, 0xe8, 0x3d, - 0x4c, 0x66, 0x18, 0x4d, 0x67, 0x18, 0x7d, 0xcd, 0x30, 0x7a, 0x9d, 0xe3, 0x68, 0x3a, 0xc7, 0xd1, - 0xc7, 0x1c, 0x47, 0xf7, 0xd7, 0x52, 0xd9, 0xc7, 0x21, 0x27, 0x29, 0xe4, 0x0b, 0xaf, 0x76, 0xc6, - 0xb8, 0x59, 0x1a, 0x8f, 0xba, 0x57, 0xf4, 0xe9, 0xb7, 0x7d, 0x9a, 0x29, 0xa1, 0xad, 0x7f, 0x27, - 0x57, 0x34, 0xaf, 0xb9, 0xcf, 0xe5, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3f, 0x19, 0x6c, 0x13, - 0x44, 0x02, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xcf, 0x4a, 0x03, 0x31, + 0x10, 0xc6, 0x37, 0xa2, 0x3d, 0xac, 0xa8, 0xb0, 0x78, 0x90, 0x52, 0xa2, 0x14, 0x91, 0xfa, 0xa7, + 0x09, 0xad, 0x3e, 0x41, 0xf1, 0x01, 0xb4, 0x78, 0xf2, 0x20, 0x64, 0x97, 0x10, 0x03, 0xdd, 0xcc, + 0x36, 0xc9, 0x16, 0xbd, 0xfa, 0x04, 0x42, 0xcf, 0xbe, 0x4f, 0x8f, 0x05, 0x2f, 0x9e, 0x44, 0x5a, + 0x1f, 0x44, 0x36, 0x49, 0xa5, 0x88, 0x94, 0x9e, 0x76, 0x76, 0xe6, 0xfb, 0x7d, 0xcc, 0x7c, 0x89, + 0x5b, 0x60, 0x72, 0x30, 0xd2, 0x50, 0x99, 0x66, 0x9a, 0x59, 0x3e, 0x90, 0xb9, 0xb4, 0x74, 0xd4, + 0x49, 0xb9, 0x65, 0x1d, 0x3a, 0x2c, 0xb9, 0x7e, 0x26, 0x85, 0x06, 0x0b, 0x49, 0x23, 0x28, 0xc9, + 0xb2, 0x92, 0x04, 0x65, 0xfd, 0x2c, 0x73, 0x63, 0x9a, 0x32, 0xc3, 0x3d, 0xf6, 0x6b, 0x52, 0x30, + 0x21, 0x15, 0xb3, 0x12, 0x94, 0x77, 0xaa, 0xef, 0x0b, 0x10, 0xe0, 0x4a, 0x5a, 0x55, 0xa1, 0xdb, + 0x10, 0x00, 0x62, 0xc0, 0x29, 0x2b, 0x24, 0x65, 0x4a, 0x81, 0x75, 0x88, 0x09, 0xd3, 0xd3, 0x95, + 0x7b, 0x16, 0x4c, 0xb3, 0x3c, 0x48, 0x9b, 0x7b, 0xf1, 0xce, 0x8d, 0xfb, 0xef, 0xf3, 0x61, 0xc9, + 0x8d, 0x6d, 0xde, 0xc5, 0xbb, 0x8b, 0x86, 0x29, 0x40, 0x19, 0x9e, 0xf4, 0xe2, 0x9a, 0x47, 0x0e, + 0xd0, 0x11, 0x6a, 0x6d, 0x77, 0x8f, 0xc9, 0xaa, 0xe3, 0x88, 0xa7, 0x7b, 0x9b, 0x93, 0xcf, 0xc3, + 0xa8, 0x1f, 0xc8, 0xee, 0x1b, 0x8a, 0xb7, 0x6e, 0xab, 0x43, 0x93, 0x31, 0x8a, 0x6b, 0x5e, 0x92, + 0x9c, 0xaf, 0x63, 0x14, 0xf6, 0xaa, 0x5f, 0xac, 0x27, 0xf6, 0x3b, 0x37, 0xc9, 0xcb, 0xfb, 0xf7, + 0x78, 0xa3, 0x95, 0x9c, 0xd0, 0xa5, 0x28, 0xda, 0x15, 0xd6, 0xfe, 0x2f, 0x8c, 0xde, 0xc3, 0x64, + 0x86, 0xd1, 0x74, 0x86, 0xd1, 0xd7, 0x0c, 0xa3, 0xd7, 0x39, 0x8e, 0xa6, 0x73, 0x1c, 0x7d, 0xcc, + 0x71, 0x74, 0x7f, 0x2d, 0xa4, 0x7d, 0x2c, 0x53, 0x92, 0x41, 0x4e, 0x15, 0x2f, 0xad, 0x06, 0xd5, + 0x06, 0x2d, 0x16, 0x35, 0x1d, 0x5d, 0xd1, 0xa7, 0xbf, 0xe6, 0xd9, 0x40, 0x72, 0x65, 0xfd, 0xcb, + 0xba, 0x98, 0xd3, 0x9a, 0xfb, 0x5c, 0xfe, 0x04, 0x00, 0x00, 0xff, 0xff, 0x46, 0x34, 0xa0, 0x69, + 0x42, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/ibc-rate-limit/types/codec.go b/x/ibc-rate-limit/types/codec.go new file mode 100644 index 000000000..4398b10e5 --- /dev/null +++ b/x/ibc-rate-limit/types/codec.go @@ -0,0 +1,25 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" +) + +func RegisterCodec(cdc *codec.LegacyAmino) { + cdc.RegisterConcrete(&MsgUpdateParams{}, "osmosis/ibc-rate-limit/update-params", nil) +} + +func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { + registry.RegisterImplementations( + (*sdk.Msg)(nil), + &MsgUpdateParams{}, + ) + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) +} + +var ( + Amino = codec.NewLegacyAmino() + ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) +) diff --git a/x/ibc-rate-limit/types/genesis.pb.go b/x/ibc-rate-limit/types/genesis.pb.go index e6c8183ef..0d9a5780b 100644 --- a/x/ibc-rate-limit/types/genesis.pb.go +++ b/x/ibc-rate-limit/types/genesis.pb.go @@ -80,23 +80,23 @@ func init() { } var fileDescriptor_37b7c83ed1422177 = []byte{ - // 248 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0xca, 0x2f, 0xce, 0xcd, - 0x2f, 0xce, 0x2c, 0xd6, 0xcf, 0x4c, 0x4a, 0x2e, 0x4a, 0x2c, 0x49, 0xcd, 0xc9, 0xcc, 0xcd, 0x2c, - 0xd1, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, - 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x81, 0xaa, 0xd5, 0x43, 0x56, 0xab, 0x07, 0x55, - 0x2b, 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x56, 0xa8, 0x0f, 0x62, 0x41, 0xf4, 0x48, 0x49, 0x26, - 0x83, 0x35, 0xc5, 0x43, 0x24, 0x20, 0x1c, 0x98, 0x54, 0x7a, 0x7e, 0x7e, 0x7a, 0x4e, 0xaa, 0x3e, - 0x98, 0x97, 0x54, 0x9a, 0xa6, 0x9f, 0x98, 0x57, 0x09, 0x95, 0xd2, 0xc4, 0xeb, 0xaa, 0x82, 0xc4, - 0xa2, 0xc4, 0x5c, 0xa8, 0x29, 0x4a, 0x41, 0x5c, 0x3c, 0xee, 0x10, 0x57, 0x06, 0x97, 0x24, 0x96, - 0xa4, 0x0a, 0x39, 0x71, 0xb1, 0x41, 0xe4, 0x25, 0x18, 0x15, 0x18, 0x35, 0xb8, 0x8d, 0x54, 0xf4, - 0xf0, 0xb9, 0x5a, 0x2f, 0x00, 0xac, 0xd6, 0x89, 0xe5, 0xc4, 0x3d, 0x79, 0x86, 0x20, 0xa8, 0x4e, - 0xa7, 0x90, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, - 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0xb2, 0x4a, 0xcf, 0x2c, - 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x87, 0x9a, 0xab, 0x9b, 0x93, 0x98, 0x54, 0x0c, - 0xe3, 0xe8, 0x97, 0x19, 0x99, 0xe9, 0x57, 0x80, 0x9c, 0xad, 0x0b, 0xb2, 0x4b, 0x17, 0xe2, 0xf0, - 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0xb0, 0x83, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, - 0xd1, 0x8a, 0xb8, 0xa8, 0x73, 0x01, 0x00, 0x00, + // 251 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x8e, 0xb1, 0x4e, 0xc3, 0x30, + 0x10, 0x86, 0x63, 0x09, 0x75, 0x28, 0x4c, 0x15, 0x03, 0xad, 0x90, 0x41, 0x88, 0x01, 0x90, 0xe2, + 0x53, 0x81, 0x81, 0x39, 0x0b, 0x2b, 0x0a, 0x1b, 0x0b, 0xb2, 0x23, 0x63, 0x2c, 0x35, 0xb9, 0xc8, + 0xbe, 0x54, 0xf4, 0x2d, 0x78, 0xac, 0x8e, 0x1d, 0x99, 0x10, 0x4a, 0x5e, 0x04, 0xc5, 0x36, 0x12, + 0x53, 0xb7, 0xbb, 0xfb, 0xbf, 0xdf, 0xfe, 0xa6, 0x37, 0xe8, 0x6b, 0xf4, 0xd6, 0x83, 0x55, 0x95, + 0x93, 0xa4, 0x57, 0xb6, 0xb6, 0x04, 0xeb, 0xa5, 0xd2, 0x24, 0x97, 0x60, 0x74, 0xa3, 0xbd, 0xf5, + 0xa2, 0x75, 0x48, 0x38, 0x3b, 0x4d, 0xac, 0xf8, 0xcf, 0x8a, 0xc4, 0x2e, 0xe6, 0x55, 0x88, 0x5f, + 0x03, 0x0b, 0x71, 0x89, 0xc5, 0xc5, 0xb1, 0x41, 0x83, 0xf1, 0x3e, 0x4e, 0xe9, 0x3a, 0x37, 0x88, + 0x66, 0xa5, 0x21, 0x6c, 0xaa, 0x7b, 0x03, 0xd9, 0x6c, 0x52, 0x74, 0xbd, 0xd7, 0xaa, 0x95, 0x4e, + 0xd6, 0xe9, 0xed, 0x8b, 0x72, 0x7a, 0xf4, 0x18, 0x2d, 0x9f, 0x49, 0x92, 0x9e, 0x15, 0xd3, 0x49, + 0xcc, 0x4f, 0xd8, 0x39, 0xbb, 0x3a, 0xbc, 0xbd, 0x14, 0xfb, 0xac, 0xc5, 0x53, 0x60, 0x8b, 0x83, + 0xed, 0xf7, 0x59, 0x56, 0xa6, 0x66, 0x51, 0x6e, 0x7b, 0xce, 0x76, 0x3d, 0x67, 0x3f, 0x3d, 0x67, + 0x9f, 0x03, 0xcf, 0x76, 0x03, 0xcf, 0xbe, 0x06, 0x9e, 0xbd, 0x3c, 0x18, 0x4b, 0xef, 0x9d, 0x12, + 0x15, 0xd6, 0xd0, 0xe8, 0x8e, 0x1c, 0x36, 0x39, 0x3a, 0xf3, 0x37, 0xc3, 0xfa, 0x1e, 0x3e, 0x46, + 0xe9, 0x7c, 0xfc, 0x29, 0x8f, 0xda, 0xb4, 0x69, 0xb5, 0x57, 0x93, 0xa0, 0x7b, 0xf7, 0x1b, 0x00, + 0x00, 0xff, 0xff, 0xd7, 0x02, 0x1d, 0xea, 0x71, 0x01, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/ibc-rate-limit/types/keys.go b/x/ibc-rate-limit/types/keys.go index 8a278c9f5..1ce3db024 100644 --- a/x/ibc-rate-limit/types/keys.go +++ b/x/ibc-rate-limit/types/keys.go @@ -2,11 +2,17 @@ package types import "strings" +const ( + prefixParamsKey = iota + 1 +) + const ( ModuleName = "rate-limited-ibc" // IBC at the end to avoid conflicts with the ibc prefix ) +var ParamsKey = []byte{prefixParamsKey} + // RouterKey is the message route. Can only contain // alphanumeric characters. var RouterKey = strings.ReplaceAll(ModuleName, "-", "") diff --git a/x/ibc-rate-limit/types/params.pb.go b/x/ibc-rate-limit/types/params.pb.go index d0080cac4..65f64051f 100644 --- a/x/ibc-rate-limit/types/params.pb.go +++ b/x/ibc-rate-limit/types/params.pb.go @@ -77,7 +77,7 @@ func init() { } var fileDescriptor_4b7974c8f0f9446a = []byte{ - // 220 bytes of a gzipped FileDescriptorProto + // 222 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0xcc, 0x2f, 0xce, 0xcd, 0x2f, 0xce, 0x2c, 0xd6, 0xcf, 0x4c, 0x4a, 0x2e, 0x4a, 0x2c, 0x49, 0xcd, 0xc9, 0xcc, 0xcd, 0x2c, 0xd1, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x2f, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0xd6, @@ -86,12 +86,12 @@ var fileDescriptor_4b7974c8f0f9446a = []byte{ 0x05, 0x80, 0xcd, 0x10, 0x72, 0xe3, 0x12, 0x48, 0xce, 0xcf, 0x2b, 0x29, 0x4a, 0x4c, 0x2e, 0x89, 0x4f, 0x4c, 0x49, 0x29, 0x4a, 0x2d, 0x2e, 0x96, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x74, 0x92, 0xfe, 0x74, 0x4f, 0x5e, 0xbc, 0x32, 0x31, 0x37, 0xc7, 0x4a, 0x09, 0x5d, 0x85, 0x52, 0x10, 0x3f, 0x4c, - 0xc8, 0x11, 0x22, 0xe2, 0x14, 0x72, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, + 0xc8, 0x11, 0x22, 0xe2, 0x14, 0x74, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0x4e, 0x78, 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, - 0x56, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x50, 0xa7, 0xea, 0xe6, - 0x24, 0x26, 0x15, 0xc3, 0x38, 0xfa, 0x65, 0x46, 0x66, 0xfa, 0x15, 0x20, 0x8f, 0xea, 0x82, 0x9c, - 0xaf, 0x0b, 0xf1, 0x6a, 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, 0xd8, 0xb9, 0xc6, 0x80, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x4d, 0x3f, 0x4f, 0xbc, 0x0f, 0x01, 0x00, 0x00, + 0x16, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x79, 0xa9, 0xa5, 0x25, + 0x45, 0xf9, 0x79, 0xba, 0xf9, 0x45, 0xe9, 0x30, 0xb6, 0x7e, 0x99, 0x89, 0x7e, 0x05, 0xc8, 0x9b, + 0xba, 0x20, 0xc7, 0xeb, 0x42, 0x3c, 0x5a, 0x52, 0x59, 0x90, 0x5a, 0x9c, 0xc4, 0x06, 0x76, 0xac, + 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x9c, 0x9e, 0xa8, 0x62, 0x0d, 0x01, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/ibc-rate-limit/types/tx.go b/x/ibc-rate-limit/types/tx.go new file mode 100644 index 000000000..9e486a522 --- /dev/null +++ b/x/ibc-rate-limit/types/tx.go @@ -0,0 +1,40 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +var _ sdk.Msg = &MsgUpdateParams{} + +func (msg *MsgUpdateParams) Route() string { + return RouterKey +} + +func (msg *MsgUpdateParams) Type() string { + return "update-params" +} + +func (msg *MsgUpdateParams) GetSigners() []sdk.AccAddress { + authority, err := sdk.AccAddressFromBech32(msg.Authority) + if err != nil { // should never happen as valid basic rejects invalid addresses + panic(err.Error()) + } + return []sdk.AccAddress{authority} +} + +func (msg *MsgUpdateParams) GetSignBytes() []byte { + return ModuleCdc.MustMarshalJSON(msg) +} + +func (msg *MsgUpdateParams) Validate() error { + if _, err := sdk.AccAddressFromBech32(msg.Authority); err != nil { + return errorsmod.Wrap(err, "authority is invalid") + } + + if _, err := sdk.AccAddressFromBech32(msg.Params.ContractAddress); err != nil { + return errorsmod.Wrap(err, "contract_address is invalid") + } + + return nil +} diff --git a/x/ibc-rate-limit/types/tx.pb.go b/x/ibc-rate-limit/types/tx.pb.go new file mode 100644 index 000000000..5f2a0146d --- /dev/null +++ b/x/ibc-rate-limit/types/tx.pb.go @@ -0,0 +1,605 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: osmosis/ibcratelimit/v1beta1/tx.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/cosmos-sdk/x/bank/types" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MsgUpdateParams is the MsgUpdateParams request type. +// +// Since: 0.47 +type MsgUpdateParams struct { + // Authority is the address of the governance account. + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // params defines the x/tokenfactory parameters to update. + // + // NOTE: All parameters must be supplied. + Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` +} + +func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } +func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParams) ProtoMessage() {} +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return fileDescriptor_a22cc8a8a128a1ff, []int{0} +} +func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParams.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 *MsgUpdateParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParams.Merge(m, src) +} +func (m *MsgUpdateParams) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParams) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParams.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo + +func (m *MsgUpdateParams) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgUpdateParams) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: 0.47 +type MsgUpdateParamsResponse struct { +} + +func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse{} } +func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParamsResponse) ProtoMessage() {} +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_a22cc8a8a128a1ff, []int{1} +} +func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParamsResponse.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 *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src) +} +func (m *MsgUpdateParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgUpdateParams)(nil), "osmosis.ibcratelimit.v1beta1.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "osmosis.ibcratelimit.v1beta1.MsgUpdateParamsResponse") +} + +func init() { + proto.RegisterFile("osmosis/ibcratelimit/v1beta1/tx.proto", fileDescriptor_a22cc8a8a128a1ff) +} + +var fileDescriptor_a22cc8a8a128a1ff = []byte{ + // 392 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcd, 0x2f, 0xce, 0xcd, + 0x2f, 0xce, 0x2c, 0xd6, 0xcf, 0x4c, 0x4a, 0x2e, 0x4a, 0x2c, 0x49, 0xcd, 0xc9, 0xcc, 0xcd, 0x2c, + 0xd1, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x2f, 0xa9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, + 0xc9, 0x17, 0x92, 0x81, 0x2a, 0xd3, 0x43, 0x56, 0xa6, 0x07, 0x55, 0x26, 0x25, 0x98, 0x98, 0x9b, + 0x99, 0x97, 0xaf, 0x0f, 0x26, 0x21, 0x1a, 0xa4, 0xe4, 0x92, 0xc1, 0x3a, 0xf4, 0x93, 0x12, 0xf3, + 0xb2, 0xe1, 0xc6, 0x81, 0x38, 0x18, 0xf2, 0xc5, 0xa9, 0x70, 0xf9, 0xe4, 0xfc, 0xcc, 0x3c, 0xa8, + 0xbc, 0x38, 0x54, 0x3e, 0xb7, 0x38, 0x5d, 0xbf, 0xcc, 0x10, 0x44, 0x41, 0x25, 0x24, 0x21, 0x12, + 0xf1, 0x60, 0x9e, 0x3e, 0x84, 0x03, 0x95, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x87, 0x88, 0x83, 0x58, + 0x50, 0x51, 0x4d, 0xbc, 0x3e, 0x2c, 0x48, 0x2c, 0x4a, 0xcc, 0x85, 0x1a, 0xa0, 0x74, 0x96, 0x91, + 0x8b, 0xdf, 0xb7, 0x38, 0x3d, 0xb4, 0x20, 0x25, 0xb1, 0x24, 0x35, 0x00, 0x2c, 0x23, 0x64, 0xc6, + 0xc5, 0x99, 0x58, 0x5a, 0x92, 0x91, 0x5f, 0x94, 0x59, 0x52, 0x29, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, + 0xe9, 0x24, 0x71, 0x69, 0x8b, 0xae, 0x08, 0xd4, 0x66, 0xc7, 0x94, 0x94, 0xa2, 0xd4, 0xe2, 0xe2, + 0xe0, 0x92, 0xa2, 0xcc, 0xbc, 0xf4, 0x20, 0x84, 0x52, 0x21, 0x77, 0x2e, 0x36, 0x88, 0xd9, 0x12, + 0x4c, 0x0a, 0x8c, 0x1a, 0xdc, 0x46, 0x2a, 0x7a, 0xf8, 0x82, 0x50, 0x0f, 0x62, 0x9b, 0x13, 0xe7, + 0x89, 0x7b, 0xf2, 0x0c, 0x2b, 0x9e, 0x6f, 0xd0, 0x62, 0x0c, 0x82, 0x6a, 0xb7, 0xb2, 0x6c, 0x7a, + 0xbe, 0x41, 0x0b, 0x61, 0x70, 0xd7, 0xf3, 0x0d, 0x5a, 0x6a, 0x48, 0x5e, 0xd2, 0x05, 0x99, 0xa5, + 0x0b, 0xf1, 0x14, 0x9a, 0xdb, 0x95, 0x24, 0xb9, 0xc4, 0xd1, 0x84, 0x82, 0x52, 0x8b, 0x0b, 0xf2, + 0xf3, 0x8a, 0x53, 0x8d, 0x9a, 0x18, 0xb9, 0x98, 0x7d, 0x8b, 0xd3, 0x85, 0x4a, 0xb8, 0x78, 0x50, + 0xbc, 0xab, 0x8b, 0xdf, 0x99, 0x68, 0xc6, 0x49, 0x99, 0x92, 0xa4, 0x1c, 0x66, 0xbb, 0x14, 0x6b, + 0x03, 0xc8, 0x8b, 0x4e, 0x41, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, + 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, 0x10, 0x65, + 0x91, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x9f, 0x97, 0x5a, 0x5a, 0x52, + 0x94, 0x9f, 0xa7, 0x9b, 0x5f, 0x94, 0x0e, 0x63, 0xeb, 0x97, 0x99, 0xe8, 0x57, 0xa0, 0xfb, 0xbe, + 0xa4, 0xb2, 0x20, 0xb5, 0x38, 0x89, 0x0d, 0x1c, 0x95, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xdb, 0x78, 0x68, 0xc8, 0xd9, 0x02, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, "/osmosis.ibcratelimit.v1beta1.Msg/UpdateParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.ibcratelimit.v1beta1.Msg/UpdateParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "osmosis.ibcratelimit.v1beta1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "osmosis/ibcratelimit/v1beta1/tx.proto", +} + +func (m *MsgUpdateParams) 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 *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateParamsResponse) 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 *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParamsResponse) 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 + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgUpdateParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Params.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateParamsResponse) 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 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgUpdateParams) 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: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", 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.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *MsgUpdateParamsResponse) 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: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: 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 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) From 001725085ac9b9759ce44b7be50e06fd9e570f77 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Wed, 11 Sep 2024 09:32:44 -0300 Subject: [PATCH 064/127] integrate keeper --- app/app.go | 6 ++- x/ibc-rate-limit/ics4_wrapper.go | 38 +++++++---------- x/ibc-rate-limit/keeper/keeper.go | 60 +++++++++++++++++++++++++++ x/ibc-rate-limit/keeper/msg_server.go | 41 ++++++++++++++++++ 4 files changed, 121 insertions(+), 24 deletions(-) create mode 100644 x/ibc-rate-limit/keeper/keeper.go create mode 100644 x/ibc-rate-limit/keeper/msg_server.go diff --git a/app/app.go b/app/app.go index 663976100..3b6b5cf8e 100644 --- a/app/app.go +++ b/app/app.go @@ -133,8 +133,8 @@ import ( ibcconnectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" ibcratelimit "github.com/neutron-org/neutron/v4/x/ibc-rate-limit" + ibcratelimitkeeper "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/keeper" ibcratelimittypes "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" - //nolint:staticcheck ibcporttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" ibchost "github.com/cosmos/ibc-go/v8/modules/core/exported" @@ -1600,7 +1600,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(tokenfactorytypes.StoreKey).WithKeyTable(tokenfactorytypes.ParamKeyTable()) paramsKeeper.Subspace(interchainqueriesmoduletypes.StoreKey).WithKeyTable(interchainqueriesmoduletypes.ParamKeyTable()) paramsKeeper.Subspace(interchaintxstypes.StoreKey).WithKeyTable(interchaintxstypes.ParamKeyTable()) - paramsKeeper.Subspace(ibcratelimittypes.ModuleName) + // paramsKeeper.Subspace(ibcratelimittypes.ModuleName) return paramsKeeper } @@ -1683,6 +1683,7 @@ func (app *App) WireICS20PreWasmKeeper( &wasmHooks, ) + ibcratelimitKeeper := ibcratelimitkeeper.NewKeeper(appCodec, app.keys[ibctransfertypes.StoreKey], authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String()) // ChannelKeeper wrapper for rate limiting SendPacket(). The wasmKeeper needs to be added after it's created rateLimitingICS4Wrapper := ibcratelimit.NewICS4Middleware( app.HooksICS4Wrapper, @@ -1691,6 +1692,7 @@ func (app *App) WireICS20PreWasmKeeper( nil, &app.BankKeeper, app.GetSubspace(ibcratelimittypes.ModuleName), + &ibcratelimitKeeper, ) app.RateLimitingICS4Wrapper = &rateLimitingICS4Wrapper diff --git a/x/ibc-rate-limit/ics4_wrapper.go b/x/ibc-rate-limit/ics4_wrapper.go index a97ce509b..fca1429e8 100644 --- a/x/ibc-rate-limit/ics4_wrapper.go +++ b/x/ibc-rate-limit/ics4_wrapper.go @@ -17,6 +17,7 @@ import ( porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" "github.com/cosmos/ibc-go/v8/modules/core/exported" + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/keeper" "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" ) @@ -26,11 +27,12 @@ var ( ) type ICS4Wrapper struct { - channel porttypes.ICS4Wrapper - accountKeeper *authkeeper.AccountKeeper - bankKeeper *bankkeeper.BaseKeeper - ContractKeeper *wasmkeeper.PermissionedKeeper - paramSpace paramtypes.Subspace + channel porttypes.ICS4Wrapper + accountKeeper *authkeeper.AccountKeeper + bankKeeper *bankkeeper.BaseKeeper + ContractKeeper *wasmkeeper.PermissionedKeeper + paramSpace paramtypes.Subspace + ibcratelimitKeeper *keeper.Keeper } func (i *ICS4Wrapper) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { @@ -40,17 +42,18 @@ func (i *ICS4Wrapper) GetAppVersion(ctx sdk.Context, portID, channelID string) ( func NewICS4Middleware( channel porttypes.ICS4Wrapper, accountKeeper *authkeeper.AccountKeeper, contractKeeper *wasmkeeper.PermissionedKeeper, - bankKeeper *bankkeeper.BaseKeeper, paramSpace paramtypes.Subspace, + bankKeeper *bankkeeper.BaseKeeper, paramSpace paramtypes.Subspace, ibcratelimitkeeper *keeper.Keeper, ) ICS4Wrapper { if !paramSpace.HasKeyTable() { paramSpace = paramSpace.WithKeyTable(types.ParamKeyTable()) } return ICS4Wrapper{ - channel: channel, - accountKeeper: accountKeeper, - ContractKeeper: contractKeeper, - bankKeeper: bankKeeper, - paramSpace: paramSpace, + channel: channel, + accountKeeper: accountKeeper, + ContractKeeper: contractKeeper, + bankKeeper: bankKeeper, + paramSpace: paramSpace, + ibcratelimitKeeper: ibcratelimitkeeper, } } @@ -102,19 +105,10 @@ func (i *ICS4Wrapper) GetContractAddress(ctx sdk.Context) (contract string) { } func (i *ICS4Wrapper) GetParams(ctx sdk.Context) (params types.Params) { - // This was previously done via i.paramSpace.GetParamSet(ctx, ¶ms). That will - // panic if the params don't exist. This is a workaround to avoid that panic. - // Params should be refactored to just use a raw kvstore. - empty := types.Params{} - for _, pair := range params.ParamSetPairs() { - i.paramSpace.GetIfExists(ctx, pair.Key, pair.Value) - } - if params == empty { - return types.DefaultParams() - } + params = i.ibcratelimitKeeper.GetParams(ctx) return params } func (i *ICS4Wrapper) SetParams(ctx sdk.Context, params types.Params) { - i.paramSpace.SetParamSet(ctx, ¶ms) + i.ibcratelimitKeeper.SetParams(ctx, params) } diff --git a/x/ibc-rate-limit/keeper/keeper.go b/x/ibc-rate-limit/keeper/keeper.go new file mode 100644 index 000000000..4909b76f2 --- /dev/null +++ b/x/ibc-rate-limit/keeper/keeper.go @@ -0,0 +1,60 @@ +package keeper + +import ( + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" +) + +// Keeper of the globalfee store +type Keeper struct { + cdc codec.BinaryCodec + storeKey storetypes.StoreKey + + // the address capable of executing a MsgUpdateParams message. Typically, this + // should be the x/gov module account. + authority string +} + +func NewKeeper( + cdc codec.BinaryCodec, + key storetypes.StoreKey, + authority string, +) Keeper { + return Keeper{ + cdc: cdc, + storeKey: key, + authority: authority, + } +} + +// GetAuthority returns the x/ibcratelimit module's authority. +func (k Keeper) GetAuthority() string { + return k.authority +} + +// GetParams returns the total set params. +func (k Keeper) GetParams(ctx sdk.Context) (params types.Params) { + store := ctx.KVStore(k.storeKey) + bz := store.Get(types.ParamsKey) + if bz == nil { + return params + } + + k.cdc.MustUnmarshal(bz, ¶ms) + return params +} + +// SetParams sets the total set of params. +func (k Keeper) SetParams(ctx sdk.Context, params types.Params) error { + store := ctx.KVStore(k.storeKey) + bz, err := k.cdc.Marshal(¶ms) + if err != nil { + return err + } + + store.Set(types.ParamsKey, bz) + return nil +} diff --git a/x/ibc-rate-limit/keeper/msg_server.go b/x/ibc-rate-limit/keeper/msg_server.go new file mode 100644 index 000000000..3c0e1098b --- /dev/null +++ b/x/ibc-rate-limit/keeper/msg_server.go @@ -0,0 +1,41 @@ +package keeper + +import ( + "context" + + "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/neutron-org/neutron/v4/x/ibc-rate-limit/types" +) + +type msgServer struct { + Keeper +} + +// NewMsgServerImpl returns an implementation of the MsgServer interface +// for the provided Keeper. +func NewMsgServerImpl(keeper Keeper) types.MsgServer { + return &msgServer{Keeper: keeper} +} + +var _ types.MsgServer = msgServer{} + +// UpdateParams updates the module parameters +func (k Keeper) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + if err := req.Validate(); err != nil { + return nil, errors.Wrap(err, "failed to validate MsgUpdateParams") + } + authority := k.GetAuthority() + if authority != req.Authority { + return nil, errors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid authority; expected %s, got %s", authority, req.Authority) + } + + ctx := sdk.UnwrapSDKContext(goCtx) + if err := k.SetParams(ctx, req.Params); err != nil { + return nil, err + } + + return &types.MsgUpdateParamsResponse{}, nil +} From 226ed4e94ce7b73443284ab285663632515389ea Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Thu, 12 Sep 2024 10:19:44 -0300 Subject: [PATCH 065/127] wip --- x/ibc-rate-limit/ibc_middleware_test.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/x/ibc-rate-limit/ibc_middleware_test.go b/x/ibc-rate-limit/ibc_middleware_test.go index ee9a27dd7..41989ac52 100644 --- a/x/ibc-rate-limit/ibc_middleware_test.go +++ b/x/ibc-rate-limit/ibc_middleware_test.go @@ -615,11 +615,10 @@ func (suite *MiddlewareTestSuite) InstantiateRLContract(quotas string) sdk.AccAd func (suite *MiddlewareTestSuite) RegisterRateLimitingContract(addr []byte) { addrStr, err := sdk.Bech32ifyAddressBytes("neutron", addr) - require.NoError(suite.ChainA.TB, err) - params, err := types.NewParams(addrStr) + msg := types.MsgUpdateParams{Params: types.Params{ContractAddress: addrStr}} require.NoError(suite.ChainA.TB, err) app := suite.GetNeutronZoneApp(suite.ChainA) - paramSpace, ok := app.ParamsKeeper.GetSubspace(types.ModuleName) + paramSpace, ok := app.HooksICS4Wrapper.GetSubspace(types.ModuleName) require.True(suite.ChainA.TB, ok) paramSpace.SetParamSet(suite.ChainA.GetContext(), ¶ms) } From 270a0a1cd41bfd9152373814462828f1b70a2e76 Mon Sep 17 00:00:00 2001 From: bonedaddy Date: Thu, 12 Sep 2024 10:26:34 -0700 Subject: [PATCH 066/127] rate_limit: use grpc query helper when extracting channel value --- x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs b/x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs index ef81121a5..abe17a1ee 100644 --- a/x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs +++ b/x/ibc-rate-limit/contracts/rate-limiter/src/packet.rs @@ -103,15 +103,7 @@ impl Packet { } pub fn channel_value(&self, deps: Deps, direction: &FlowType) -> Result { - let response: QuerySupplyOfResponse = deps.querier.query(&cosmwasm_std::QueryRequest::Grpc({ - GrpcQuery { - path: "/cosmos.bank.v1beta1.Query/SupplyOf".to_string(), - data: Binary::from_base64( - &to_base64(self.local_denom(direction)) - )? - } - }))?; - Uint256::from_str(&response.amount.unwrap_or_default().amount) + Ok(Uint256::from_uint128(deps.querier.query_supply(self.local_denom(direction))?.amount)) } pub fn get_funds(&self) -> Uint256 { From 008a2f8fb4c8ed1382564dcaf9c7244d1c80fae4 Mon Sep 17 00:00:00 2001 From: bonedaddy Date: Thu, 12 Sep 2024 13:40:20 -0700 Subject: [PATCH 067/127] rate-limit: recompile rate limiter contract --- x/ibc-rate-limit/bytecode/rate_limiter.wasm | Bin 1942300 -> 1938280 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/x/ibc-rate-limit/bytecode/rate_limiter.wasm b/x/ibc-rate-limit/bytecode/rate_limiter.wasm index 319f23a5e2e6ca8bda5f419d87b41787380fdbcf..31e5820bca75858d2f4bdc53a180776b014008fe 100644 GIT binary patch delta 207670 zcmcG%2Vhji_6NK(yPIUQn`Bc+C+vm*2@tyUc9E(e*bzaR2n0~N*w~1m5s-F)0R#z( z^lFgMgrKMqK|oRAJw)^=qI5+?1o?hv=H9!T06yRU`#wu{@7$R)XU?29XU@zn{9x>< zWn*XD72^!xpYgUnVe}aYZ0yDPUH@@><6xXKyAA(F+TCtDV;%>?UmLgKkIl|G9^`*` zrhlT`Zkx>+%^B+2?RL(>!Z>3N?smHMwLDob<)Krb_vUOOPJuIHZ>(lL1m|IVC6xnyOo%$h1LgZK5 z-?g~|HtocA{k)@M;2jn|VBCQIV@40K?P88mV;+6NwwpOej2STUDcgH2eAwWDBm3gr z`z(I&{ z{0sgiKf-Ts+g@way4_L!FaB?SjQ1V;5}U+EzQ9I3I&i@FYBJ3b60kx9mUcdv=oj%6?{7*dOdF`;Gm{mhyc5 zynPP;o&Ciwv1@D!U%=<_m-x$E@X7oFdy!vcukbhcFKjx0oloN%?d$9XyoAr@=b6qw z~rjM?Yr&o+LzdO*-Pw;?X&HB?H}7eu^+bYvwvV3dj!llY9q%|IFP~5O#_>rQa|J5r;~$&0 zfep#zS@OHSD15y4TJgL2wp17$o7?BqN?4xv5I zvW{9r8!wo~@q*KfX~py+(tA$d7+nMW_f_;C7}=LGM>EV$HW7V1F*J}34ik^lMW1-@ zXZo}X9=.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