diff --git a/CHANGELOG.md b/CHANGELOG.md index b8b3207a9a0..cbcf16d076b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Breaking Changes + +* [#1889](https://github.com/osmosis-labs/osmosis/pull/1825) Add proto responses to gamm LP messages: + * MsgJoinPoolResponse: share_out_amount and token_in fields + * MsgExitPoolResponse: token_out field * [#1825](https://github.com/osmosis-labs/osmosis/pull/1825) Fixes Interchain Accounts (host side) by adding it to AppModuleBasics * [#1699](https://github.com/osmosis-labs/osmosis/pull/1699) Fixes bug in sig fig rounding on spot price queries for small values diff --git a/go.mod b/go.mod index c2c941e6294..99b414416d5 100644 --- a/go.mod +++ b/go.mod @@ -112,7 +112,7 @@ require ( github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gofrs/flock v0.8.1 // indirect github.com/gogo/gateway v1.1.0 // indirect - github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect + github.com/golang/glog v1.0.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.3 // indirect github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 // indirect diff --git a/go.sum b/go.sum index 931eaad556d..4f0b4409505 100644 --- a/go.sum +++ b/go.sum @@ -487,8 +487,9 @@ github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+wXQnTPR4KqTKDgJukSZ6amVRtWMPEjE6sQoK8= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= diff --git a/proto/osmosis/gamm/v1beta1/tx.proto b/proto/osmosis/gamm/v1beta1/tx.proto index 069b0d9d0ff..950357b920f 100644 --- a/proto/osmosis/gamm/v1beta1/tx.proto +++ b/proto/osmosis/gamm/v1beta1/tx.proto @@ -39,7 +39,17 @@ message MsgJoinPool { ]; } -message MsgJoinPoolResponse {} +message MsgJoinPoolResponse { + string share_out_amount = 1 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.moretags) = "yaml:\"share_out_amount\"", + (gogoproto.nullable) = false + ]; + repeated cosmos.base.v1beta1.Coin token_in = 2 [ + (gogoproto.moretags) = "yaml:\"token_in\"", + (gogoproto.nullable) = false + ]; +} // ===================== MsgExitPool message MsgExitPool { @@ -57,7 +67,12 @@ message MsgExitPool { ]; } -message MsgExitPoolResponse {} +message MsgExitPoolResponse { + repeated cosmos.base.v1beta1.Coin token_out = 1 [ + (gogoproto.moretags) = "yaml:\"token_out\"", + (gogoproto.nullable) = false + ]; +} // ===================== MsgSwapExactAmountIn message SwapAmountInRoute { diff --git a/x/gamm/keeper/gas_test.go b/x/gamm/keeper/gas_test.go index 6e6c11fd585..b5dd575306f 100644 --- a/x/gamm/keeper/gas_test.go +++ b/x/gamm/keeper/gas_test.go @@ -23,7 +23,7 @@ func (suite *KeeperTestSuite) measureJoinPoolGas( shareOutAmountMax sdk.Int, maxCoins sdk.Coins, ) uint64 { alreadySpent := suite.Ctx.GasMeter().GasConsumed() - err := suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, addr, poolID, shareOutAmountMax, maxCoins) + _, _, err := suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, addr, poolID, shareOutAmountMax, maxCoins) suite.Require().NoError(err) newSpent := suite.Ctx.GasMeter().GasConsumed() spentNow := newSpent - alreadySpent @@ -76,7 +76,7 @@ func (suite *KeeperTestSuite) TestJoinPoolGas() { suite.Assert().LessOrEqual(int(firstJoinGas), 100000) for i := 1; i < startAveragingAt; i++ { - err := suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, defaultAddr, poolId, minShareOutAmount, sdk.Coins{}) + _, _, err := suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, defaultAddr, poolId, minShareOutAmount, sdk.Coins{}) suite.Require().NoError(err) } @@ -133,7 +133,7 @@ func (suite *KeeperTestSuite) TestRepeatedJoinPoolDistinctDenom() { firstJoinGas := suite.measureJoinPoolGas(defaultAddr, initialPoolId, minShareOutAmount, defaultCoins) for i := 2; i < denomNumber; i++ { - err := suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, defaultAddr, uint64(i), minShareOutAmount, sdk.Coins{}) + _, _, err := suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, defaultAddr, uint64(i), minShareOutAmount, sdk.Coins{}) suite.Require().NoError(err) } diff --git a/x/gamm/keeper/msg_server.go b/x/gamm/keeper/msg_server.go index 3a856ee8e32..357a4da60aa 100644 --- a/x/gamm/keeper/msg_server.go +++ b/x/gamm/keeper/msg_server.go @@ -108,7 +108,7 @@ func (server msgServer) JoinPool(goCtx context.Context, msg *types.MsgJoinPool) return nil, err } - err = server.keeper.JoinPoolNoSwap(ctx, sender, msg.PoolId, msg.ShareOutAmount, msg.TokenInMaxs) + neededLp, sharesOut, err := server.keeper.JoinPoolNoSwap(ctx, sender, msg.PoolId, msg.ShareOutAmount, msg.TokenInMaxs) if err != nil { return nil, err } @@ -125,7 +125,10 @@ func (server msgServer) JoinPool(goCtx context.Context, msg *types.MsgJoinPool) ), }) - return &types.MsgJoinPoolResponse{}, nil + return &types.MsgJoinPoolResponse{ + ShareOutAmount: sharesOut, + TokenIn: neededLp, + }, nil } func (server msgServer) ExitPool(goCtx context.Context, msg *types.MsgExitPool) (*types.MsgExitPoolResponse, error) { @@ -136,7 +139,7 @@ func (server msgServer) ExitPool(goCtx context.Context, msg *types.MsgExitPool) return nil, err } - _, err = server.keeper.ExitPool(ctx, sender, msg.PoolId, msg.ShareInAmount, msg.TokenOutMins) + exitCoins, err := server.keeper.ExitPool(ctx, sender, msg.PoolId, msg.ShareInAmount, msg.TokenOutMins) if err != nil { return nil, err } @@ -153,7 +156,9 @@ func (server msgServer) ExitPool(goCtx context.Context, msg *types.MsgExitPool) ), }) - return &types.MsgExitPoolResponse{}, nil + return &types.MsgExitPoolResponse{ + TokenOut: exitCoins, + }, nil } func (server msgServer) SwapExactAmountIn(goCtx context.Context, msg *types.MsgSwapExactAmountIn) (*types.MsgSwapExactAmountInResponse, error) { diff --git a/x/gamm/keeper/pool_service.go b/x/gamm/keeper/pool_service.go index 094eea0f4a5..504616c5e81 100644 --- a/x/gamm/keeper/pool_service.go +++ b/x/gamm/keeper/pool_service.go @@ -183,35 +183,35 @@ func (k Keeper) JoinPoolNoSwap( poolId uint64, shareOutAmount sdk.Int, tokenInMaxs sdk.Coins, -) (err error) { +) (tokenIn sdk.Coins, sharesOut sdk.Int, err error) { // all pools handled within this method are pointer references, `JoinPool` directly updates the pools pool, err := k.GetPoolAndPoke(ctx, poolId) if err != nil { - return err + return nil, sdk.ZeroInt(), err } // we do an abstract calculation on the lp liquidity coins needed to have // the designated amount of given shares of the pool without performing swap neededLpLiquidity, err := getMaximalNoSwapLPAmount(ctx, pool, shareOutAmount) if err != nil { - return err + return nil, sdk.ZeroInt(), err } // check that needed lp liquidity does not exceed the given `tokenInMaxs` parameter. Return error if so. // if tokenInMaxs == 0, don't do this check. if tokenInMaxs.Len() != 0 { if !(neededLpLiquidity.DenomsSubsetOf(tokenInMaxs) && tokenInMaxs.IsAllGTE(neededLpLiquidity)) { - return sdkerrors.Wrapf(types.ErrLimitMaxAmount, "TokenInMaxs is less than the needed LP liquidity to this JoinPoolNoSwap,"+ + return nil, sdk.ZeroInt(), sdkerrors.Wrapf(types.ErrLimitMaxAmount, "TokenInMaxs is less than the needed LP liquidity to this JoinPoolNoSwap,"+ " upperbound: %v, needed %v", tokenInMaxs, neededLpLiquidity) } else if !(tokenInMaxs.DenomsSubsetOf(neededLpLiquidity)) { - return sdkerrors.Wrapf(types.ErrDenomNotFoundInPool, "TokenInMaxs includes tokens that are not part of the target pool,"+ + return nil, sdk.ZeroInt(), sdkerrors.Wrapf(types.ErrDenomNotFoundInPool, "TokenInMaxs includes tokens that are not part of the target pool,"+ " input tokens: %v, pool tokens %v", tokenInMaxs, neededLpLiquidity) } } - sharesOut, err := pool.JoinPool(ctx, neededLpLiquidity, pool.GetSwapFee(ctx)) + sharesOut, err = pool.JoinPool(ctx, neededLpLiquidity, pool.GetSwapFee(ctx)) if err != nil { - return err + return nil, sdk.ZeroInt(), err } // sanity check, don't return error as not worth halting the LP. We know its not too much. if sharesOut.LT(shareOutAmount) { @@ -220,7 +220,7 @@ func (k Keeper) JoinPoolNoSwap( } err = k.applyJoinPoolStateChange(ctx, pool, sender, sharesOut, neededLpLiquidity) - return err + return neededLpLiquidity, sharesOut, err } // getMaximalNoSwapLPAmount returns the coins(lp liquidity) needed to get the specified amount of shares in the pool. diff --git a/x/gamm/keeper/pool_service_test.go b/x/gamm/keeper/pool_service_test.go index 850faa886aa..e3929d9c43d 100644 --- a/x/gamm/keeper/pool_service_test.go +++ b/x/gamm/keeper/pool_service_test.go @@ -255,6 +255,7 @@ func (suite *KeeperTestSuite) TestCreateBalancerPool() { // TODO: Add more edge cases around TokenInMaxs not containing every token in pool. func (suite *KeeperTestSuite) TestJoinPoolNoSwap() { + fiveKFooAndBar := sdk.NewCoins(sdk.NewCoin("bar", sdk.NewInt(5000)), sdk.NewCoin("foo", sdk.NewInt(5000))) tests := []struct { fn func(poolId uint64) }{ @@ -262,14 +263,16 @@ func (suite *KeeperTestSuite) TestJoinPoolNoSwap() { fn: func(poolId uint64) { keeper := suite.App.GAMMKeeper balancesBefore := suite.App.BankKeeper.GetAllBalances(suite.Ctx, suite.TestAccs[1]) - err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, types.OneShare.MulRaw(50), sdk.Coins{}) + neededLp, sharesOut, err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, types.OneShare.MulRaw(50), sdk.Coins{}) suite.Require().NoError(err) + suite.Require().Equal(types.OneShare.MulRaw(50).String(), sharesOut.String()) suite.Require().Equal(types.OneShare.MulRaw(50).String(), suite.App.BankKeeper.GetBalance(suite.Ctx, suite.TestAccs[1], "gamm/pool/1").Amount.String()) balancesAfter := suite.App.BankKeeper.GetAllBalances(suite.Ctx, suite.TestAccs[1]) deltaBalances, _ := balancesBefore.SafeSub(balancesAfter) // The pool was created with the 10000foo, 10000bar, and the pool share was minted as 100000000gamm/pool/1. // Thus, to get the 50*OneShare gamm/pool/1, (10000foo, 10000bar) * (1 / 2) balances should be provided. + suite.Require().Equal(deltaBalances.FilterDenoms([]string{"foo", "bar"}).Sort().String(), neededLp.Sort().String()) suite.Require().Equal("5000", deltaBalances.AmountOf("foo").String()) suite.Require().Equal("5000", deltaBalances.AmountOf("bar").String()) @@ -280,14 +283,14 @@ func (suite *KeeperTestSuite) TestJoinPoolNoSwap() { { fn: func(poolId uint64) { keeper := suite.App.GAMMKeeper - err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, sdk.NewInt(0), sdk.Coins{}) + _, _, err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, sdk.NewInt(0), sdk.Coins{}) suite.Require().Error(err, "can't join the pool with requesting 0 share amount") }, }, { fn: func(poolId uint64) { keeper := suite.App.GAMMKeeper - err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, sdk.NewInt(-1), sdk.Coins{}) + _, _, err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, sdk.NewInt(-1), sdk.Coins{}) suite.Require().Error(err, "can't join the pool with requesting negative share amount") }, }, @@ -296,7 +299,7 @@ func (suite *KeeperTestSuite) TestJoinPoolNoSwap() { keeper := suite.App.GAMMKeeper // Test the "tokenInMaxs" // In this case, to get the 50 * OneShare amount of share token, the foo, bar token are expected to be provided as 5000 amounts. - err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, types.OneShare.MulRaw(50), sdk.Coins{ + _, _, err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, types.OneShare.MulRaw(50), sdk.Coins{ sdk.NewCoin("bar", sdk.NewInt(4999)), sdk.NewCoin("foo", sdk.NewInt(4999)), }) suite.Require().Error(err) @@ -307,13 +310,17 @@ func (suite *KeeperTestSuite) TestJoinPoolNoSwap() { keeper := suite.App.GAMMKeeper // Test the "tokenInMaxs" // In this case, to get the 50 * OneShare amount of share token, the foo, bar token are expected to be provided as 5000 amounts. - err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, types.OneShare.MulRaw(50), sdk.Coins{ - sdk.NewCoin("bar", sdk.NewInt(5000)), sdk.NewCoin("foo", sdk.NewInt(5000)), - }) + actualTokenIn, actualSharesOut, err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, types.OneShare.MulRaw(50), sdk.Coins{ + fiveKFooAndBar[0], fiveKFooAndBar[1]}) suite.Require().NoError(err) liquidity := suite.App.GAMMKeeper.GetTotalLiquidity(suite.Ctx) suite.Require().Equal("15000bar,15000foo", liquidity.String()) + // TODO: Add these tests to more cases, as part of improving this test structure. + // 100% add, so actualTokenIn = max provided + suite.Require().Equal(fiveKFooAndBar, actualTokenIn) + // shares out was estimated perfectly + suite.Require().Equal(types.OneShare.MulRaw(50), actualSharesOut) }, }, { @@ -322,7 +329,7 @@ func (suite *KeeperTestSuite) TestJoinPoolNoSwap() { // Test the "tokenInMaxs" with an additional invalid denom // In this case, to get the 50 * OneShare amount of share token, the foo, bar token are expected to be provided as 5000 amounts. // The test input has the correct amount for each, but also includes an incorrect denom that should cause an error - err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, types.OneShare.MulRaw(50), sdk.Coins{ + _, _, err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, types.OneShare.MulRaw(50), sdk.Coins{ sdk.NewCoin("bar", sdk.NewInt(5000)), sdk.NewCoin("foo", sdk.NewInt(5000)), sdk.NewCoin("baz", sdk.NewInt(5000)), }) suite.Require().Error(err) @@ -351,6 +358,7 @@ func (suite *KeeperTestSuite) TestJoinPoolNoSwap() { } func (suite *KeeperTestSuite) TestExitPool() { + fiveKFooAndBar := sdk.NewCoins(sdk.NewCoin("bar", sdk.NewInt(5000)), sdk.NewCoin("foo", sdk.NewInt(5000))) tests := []struct { fn func(poolId uint64) }{ @@ -414,10 +422,11 @@ func (suite *KeeperTestSuite) TestExitPool() { // Test the "tokenOutMins" // In this case, to refund the 50000000 amount of share token, the foo, bar token are expected to be refunded as 5000 amounts. - _, err := keeper.ExitPool(suite.Ctx, suite.TestAccs[0], poolId, types.OneShare.MulRaw(50), sdk.Coins{ + exitedCoins, err := keeper.ExitPool(suite.Ctx, suite.TestAccs[0], poolId, types.OneShare.MulRaw(50), sdk.Coins{ sdk.NewCoin("foo", sdk.NewInt(5000)), }) suite.Require().NoError(err) + suite.Require().Equal(fiveKFooAndBar, exitedCoins) }, }, } @@ -505,7 +514,7 @@ func (suite *KeeperTestSuite) TestJoinPoolExitPool_InverseRelationship() { balanceBeforeJoin := suite.App.BankKeeper.GetAllBalances(suite.Ctx, joinPoolAcc) fmt.Println(balanceBeforeJoin.String()) - err = suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, joinPoolAcc, poolId, tc.joinPoolShareAmt, sdk.Coins{}) + _, _, err = suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, joinPoolAcc, poolId, tc.joinPoolShareAmt, sdk.Coins{}) suite.Require().NoError(err) _, err = suite.App.GAMMKeeper.ExitPool(suite.Ctx, joinPoolAcc, poolId, tc.joinPoolShareAmt, sdk.Coins{}) @@ -547,7 +556,7 @@ func (suite *KeeperTestSuite) TestActiveBalancerPool() { suite.Ctx = suite.Ctx.WithBlockTime(tc.blockTime) // uneffected by start time - err := suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[0], poolId, types.OneShare.MulRaw(50), sdk.Coins{}) + _, _, err := suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[0], poolId, types.OneShare.MulRaw(50), sdk.Coins{}) suite.Require().NoError(err) _, err = suite.App.GAMMKeeper.ExitPool(suite.Ctx, suite.TestAccs[0], poolId, types.InitPoolSharesSupply.QuoRaw(2), sdk.Coins{}) suite.Require().NoError(err) diff --git a/x/gamm/types/tx.pb.go b/x/gamm/types/tx.pb.go index d2391a299b5..75e649d559d 100644 --- a/x/gamm/types/tx.pb.go +++ b/x/gamm/types/tx.pb.go @@ -94,6 +94,8 @@ func (m *MsgJoinPool) GetTokenInMaxs() []types.Coin { } type MsgJoinPoolResponse struct { + ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"share_out_amount"` + TokenIn []types.Coin `protobuf:"bytes,2,rep,name=token_in,json=tokenIn,proto3" json:"token_in" yaml:"token_in"` } func (m *MsgJoinPoolResponse) Reset() { *m = MsgJoinPoolResponse{} } @@ -129,6 +131,13 @@ func (m *MsgJoinPoolResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgJoinPoolResponse proto.InternalMessageInfo +func (m *MsgJoinPoolResponse) GetTokenIn() []types.Coin { + if m != nil { + return m.TokenIn + } + return nil +} + // ===================== MsgExitPool type MsgExitPool struct { Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` @@ -192,6 +201,7 @@ func (m *MsgExitPool) GetTokenOutMins() []types.Coin { } type MsgExitPoolResponse struct { + TokenOut []types.Coin `protobuf:"bytes,1,rep,name=token_out,json=tokenOut,proto3" json:"token_out" yaml:"token_out"` } func (m *MsgExitPoolResponse) Reset() { *m = MsgExitPoolResponse{} } @@ -227,6 +237,13 @@ func (m *MsgExitPoolResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgExitPoolResponse proto.InternalMessageInfo +func (m *MsgExitPoolResponse) GetTokenOut() []types.Coin { + if m != nil { + return m.TokenOut + } + return nil +} + // ===================== MsgSwapExactAmountIn type SwapAmountInRoute struct { PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` @@ -952,77 +969,77 @@ func init() { func init() { proto.RegisterFile("osmosis/gamm/v1beta1/tx.proto", fileDescriptor_cfc8fd3ac7df3247) } var fileDescriptor_cfc8fd3ac7df3247 = []byte{ - // 1108 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x4d, 0x6f, 0x1b, 0x45, - 0x18, 0xce, 0xd8, 0x6e, 0x3e, 0x26, 0x4d, 0xe2, 0x6c, 0x93, 0xc6, 0xd9, 0xb6, 0x76, 0x3a, 0x20, - 0x48, 0xa9, 0xba, 0x4b, 0x53, 0x89, 0x22, 0x2e, 0x80, 0x21, 0x08, 0x23, 0x2c, 0x57, 0xdb, 0x4b, - 0xc5, 0xc5, 0x5a, 0xc7, 0x2b, 0x77, 0xd5, 0x78, 0xc6, 0xf2, 0xcc, 0x06, 0x57, 0x48, 0x20, 0xf1, - 0x71, 0x07, 0x21, 0x3e, 0x7e, 0x01, 0xe2, 0x2f, 0x70, 0x80, 0x03, 0x5c, 0x7a, 0xec, 0x8d, 0x8f, - 0x83, 0x85, 0x92, 0x7f, 0xe0, 0x5f, 0x50, 0xed, 0xce, 0xcc, 0xee, 0x7a, 0xbd, 0x6b, 0x7b, 0x93, - 0xb8, 0x3d, 0xd9, 0xde, 0x79, 0xe7, 0x9d, 0x67, 0x9f, 0xf7, 0x99, 0x67, 0xde, 0x31, 0xbc, 0x46, - 0x68, 0x9b, 0x50, 0x9b, 0xea, 0x2d, 0xb3, 0xdd, 0xd6, 0x8f, 0x6e, 0x37, 0x2c, 0x66, 0xde, 0xd6, - 0x59, 0x4f, 0xeb, 0x74, 0x09, 0x23, 0xca, 0x86, 0x18, 0xd6, 0xdc, 0x61, 0x4d, 0x0c, 0xab, 0x1b, - 0x2d, 0xd2, 0x22, 0x5e, 0x80, 0xee, 0x7e, 0xe3, 0xb1, 0x6a, 0xf1, 0xc0, 0x0b, 0xd6, 0x1b, 0x26, - 0xb5, 0xfc, 0x4c, 0x07, 0xc4, 0xc6, 0x7c, 0x1c, 0xfd, 0x9e, 0x81, 0xcb, 0x55, 0xda, 0xfa, 0x88, - 0xd8, 0xf8, 0x1e, 0x21, 0x87, 0xca, 0x0d, 0x38, 0x4f, 0x2d, 0xdc, 0xb4, 0xba, 0x05, 0xb0, 0x03, - 0x76, 0x97, 0xca, 0xeb, 0x83, 0x7e, 0x69, 0xe5, 0xb1, 0xd9, 0x3e, 0x7c, 0x0b, 0xf1, 0xe7, 0xc8, - 0x10, 0x01, 0xca, 0x4d, 0xb8, 0xd0, 0x21, 0xe4, 0xb0, 0x6e, 0x37, 0x0b, 0x99, 0x1d, 0xb0, 0x9b, - 0x2b, 0x2b, 0x83, 0x7e, 0x69, 0x95, 0xc7, 0x8a, 0x01, 0x64, 0xcc, 0xbb, 0xdf, 0x2a, 0x4d, 0xa5, - 0x0b, 0xf3, 0xf4, 0xa1, 0xd9, 0xb5, 0xea, 0xc4, 0x61, 0x75, 0xb3, 0x4d, 0x1c, 0xcc, 0x0a, 0x59, - 0x6f, 0x85, 0x0f, 0x9f, 0xf4, 0x4b, 0x73, 0xff, 0xf5, 0x4b, 0xaf, 0xb4, 0x6c, 0xf6, 0xd0, 0x69, - 0x68, 0x07, 0xa4, 0xad, 0x0b, 0xd0, 0xfc, 0xe3, 0x16, 0x6d, 0x3e, 0xd2, 0xd9, 0xe3, 0x8e, 0x45, - 0xb5, 0x0a, 0x66, 0x83, 0x7e, 0xe9, 0x72, 0x68, 0x0d, 0x9e, 0xca, 0xcd, 0x8a, 0x8c, 0x55, 0x6f, - 0x85, 0x9a, 0xc3, 0xde, 0xf5, 0x1e, 0x2a, 0x0d, 0xb8, 0xc2, 0xc8, 0x23, 0x0b, 0xd7, 0x6d, 0x5c, - 0x6f, 0x9b, 0x3d, 0x5a, 0xc8, 0xed, 0x64, 0x77, 0x97, 0xf7, 0xb6, 0x35, 0x9e, 0x57, 0x73, 0x39, - 0x91, 0xf4, 0x69, 0xef, 0x11, 0x1b, 0x97, 0x5f, 0x72, 0xb1, 0x0c, 0xfa, 0xa5, 0x2b, 0x7c, 0x85, - 0xf0, 0x6c, 0xb1, 0x12, 0x45, 0xc6, 0xb2, 0xf7, 0xb8, 0x82, 0xab, 0x66, 0x8f, 0xa2, 0x4d, 0x78, - 0x29, 0x44, 0x9f, 0x61, 0xd1, 0x0e, 0xc1, 0xd4, 0x42, 0x7f, 0x70, 0x5a, 0xf7, 0x7b, 0x36, 0x9b, - 0x29, 0xad, 0x1d, 0xb8, 0xc6, 0x69, 0xb5, 0xf1, 0x39, 0xb1, 0x1a, 0x49, 0x87, 0x8c, 0x15, 0xef, - 0x49, 0x05, 0x0b, 0x52, 0x2d, 0xb8, 0xca, 0x69, 0x71, 0x0b, 0xd9, 0xb6, 0xf1, 0x14, 0xac, 0xbe, - 0x2c, 0x58, 0xbd, 0x1a, 0x66, 0x55, 0x4c, 0x0f, 0x68, 0xbd, 0xe8, 0x3d, 0xaf, 0x39, 0xac, 0x6a, - 0x63, 0xc9, 0xab, 0xe4, 0xcf, 0xe7, 0xf5, 0x6b, 0x00, 0xd7, 0xef, 0x7f, 0x6a, 0x76, 0x38, 0x98, - 0x0a, 0x36, 0x88, 0xc3, 0xac, 0x30, 0x65, 0x60, 0x22, 0x65, 0x65, 0xb8, 0x16, 0x20, 0x68, 0x5a, - 0x98, 0xb4, 0x3d, 0x9e, 0x97, 0xca, 0x6a, 0x40, 0x42, 0x24, 0x00, 0x19, 0x2b, 0x12, 0xdc, 0xfb, - 0xde, 0xef, 0xbf, 0x33, 0x70, 0xa3, 0x4a, 0x5b, 0x2e, 0x92, 0xfd, 0x9e, 0x79, 0xc0, 0x24, 0x9c, - 0x34, 0x75, 0xde, 0x87, 0xf3, 0x5d, 0x17, 0x3d, 0x2d, 0x64, 0x3c, 0x02, 0x5f, 0xd5, 0xe2, 0xb6, - 0xb5, 0x36, 0xf2, 0xb6, 0xe5, 0x9c, 0x4b, 0xa7, 0x21, 0x26, 0x2b, 0x55, 0xb8, 0x28, 0x65, 0xea, - 0x95, 0x7e, 0x6c, 0x25, 0xb6, 0x44, 0x25, 0xd6, 0x86, 0xf5, 0x8d, 0x8c, 0x05, 0xa1, 0x69, 0xe5, - 0x73, 0xb8, 0x11, 0x57, 0x9f, 0x42, 0xce, 0x7b, 0x9d, 0x6a, 0x6a, 0x55, 0x5d, 0x49, 0xae, 0x39, - 0x32, 0xd6, 0x43, 0x25, 0xe7, 0xef, 0x88, 0xbe, 0x07, 0xf0, 0x6a, 0x1c, 0xb3, 0x52, 0x01, 0x0a, - 0x85, 0xf9, 0x20, 0x99, 0x00, 0xc7, 0xb9, 0xae, 0xa4, 0x06, 0xb7, 0x15, 0x05, 0x27, 0x81, 0xad, - 0x4a, 0x60, 0x02, 0xd5, 0x57, 0x00, 0x2a, 0x41, 0x21, 0x6a, 0x0e, 0x3b, 0x85, 0xee, 0xde, 0x91, - 0x1b, 0xc7, 0xc6, 0x53, 0xcb, 0xee, 0xa2, 0x28, 0x0b, 0x57, 0xdd, 0xbf, 0x19, 0xb8, 0x39, 0xca, - 0x4d, 0xcd, 0x61, 0x69, 0x64, 0xf7, 0x41, 0x44, 0x76, 0xbb, 0x93, 0x64, 0x27, 0xdf, 0x36, 0xa2, - 0xbb, 0xcf, 0xe0, 0xa5, 0x18, 0x7b, 0x14, 0xee, 0xf3, 0x71, 0xea, 0x52, 0xa8, 0x89, 0x8e, 0x8b, - 0x8c, 0x7c, 0x60, 0xb8, 0xc2, 0x84, 0xee, 0xc1, 0x25, 0x9f, 0x2b, 0x4f, 0x9a, 0x63, 0x55, 0x5f, - 0x10, 0xaa, 0xcf, 0x47, 0x58, 0x46, 0xc6, 0xa2, 0xac, 0x33, 0xfa, 0x0e, 0xc0, 0x6b, 0xb1, 0xdc, - 0xfa, 0xc2, 0xeb, 0x48, 0xdf, 0x08, 0x36, 0x05, 0x38, 0x9b, 0xd5, 0x46, 0xd2, 0x49, 0x97, 0x91, - 0x56, 0x8b, 0xfe, 0xcc, 0xc0, 0x6d, 0x71, 0xb8, 0x70, 0x5c, 0xcc, 0xea, 0xe2, 0xd3, 0x58, 0x4d, - 0xaa, 0x23, 0xe5, 0xfc, 0x0d, 0x25, 0x38, 0xf8, 0xcf, 0xcf, 0x50, 0xe2, 0x72, 0x22, 0x63, 0x5d, - 0x76, 0x00, 0x81, 0xa1, 0xfc, 0x0c, 0xe0, 0xf5, 0x44, 0x12, 0xc3, 0xae, 0x32, 0xd2, 0x9e, 0x9c, - 0xd1, 0x55, 0xa2, 0xf9, 0x46, 0xfa, 0x13, 0xf4, 0x4b, 0x76, 0xa8, 0xbe, 0xf7, 0xdd, 0xd1, 0x53, - 0xed, 0xe9, 0x54, 0xf5, 0x7d, 0x7b, 0xc4, 0x87, 0xf8, 0x9e, 0xdd, 0x1e, 0xf4, 0x4b, 0x9b, 0x11, - 0x61, 0xc6, 0xd9, 0x50, 0x2c, 0x57, 0xb9, 0x19, 0x73, 0x95, 0x64, 0x37, 0x17, 0x9e, 0x87, 0xdd, - 0xa0, 0x1f, 0x86, 0x35, 0x34, 0x5c, 0xa8, 0x17, 0x68, 0x10, 0xbf, 0x66, 0x61, 0x41, 0x74, 0x49, - 0x11, 0x5c, 0x33, 0xf4, 0x87, 0x98, 0xfe, 0x29, 0x9b, 0xb2, 0x7f, 0x8a, 0x6b, 0x5b, 0x73, 0xb3, - 0x6d, 0x5b, 0x93, 0xfa, 0x9a, 0x0b, 0xcf, 0xa9, 0xaf, 0xf9, 0x09, 0xc0, 0x9d, 0xa4, 0x52, 0xbd, - 0xd8, 0xde, 0xe6, 0xaf, 0x0c, 0x54, 0x43, 0xc8, 0xc2, 0x06, 0x39, 0x4b, 0x1b, 0x1a, 0x3a, 0xc2, - 0xb3, 0xe7, 0x70, 0x84, 0xbb, 0x16, 0xe1, 0xab, 0x20, 0x64, 0x11, 0xb9, 0xb3, 0x59, 0x44, 0x4c, - 0x4a, 0x64, 0xe4, 0x85, 0xb8, 0x02, 0x8b, 0xf8, 0x11, 0x40, 0x94, 0xcc, 0x62, 0xd8, 0x23, 0xa2, - 0xc2, 0x07, 0x33, 0x15, 0xfe, 0xde, 0x6f, 0x0b, 0x30, 0x5b, 0xa5, 0x2d, 0xe5, 0x01, 0x5c, 0xf4, - 0x2f, 0xf9, 0xd7, 0xe3, 0x7b, 0xbe, 0xd0, 0x45, 0x56, 0xbd, 0x31, 0x31, 0xc4, 0x7f, 0xa7, 0x07, - 0x70, 0xd1, 0xbf, 0xe7, 0x26, 0x67, 0x96, 0x21, 0x63, 0x32, 0x47, 0x6f, 0x7b, 0x0a, 0xe5, 0x97, - 0xbd, 0xe1, 0x2b, 0xd6, 0x6b, 0x89, 0xf3, 0x47, 0x62, 0xd5, 0xbd, 0xe9, 0x63, 0xfd, 0x45, 0x8f, - 0x78, 0xab, 0x1f, 0xe9, 0xb0, 0x6f, 0x4e, 0x9b, 0xa9, 0xe6, 0x30, 0xf5, 0x4e, 0x8a, 0x60, 0x7f, - 0xdd, 0x2f, 0x01, 0xbc, 0x9c, 0xd0, 0xea, 0xe9, 0x63, 0x8b, 0x31, 0x3a, 0x41, 0xbd, 0x9b, 0x72, - 0x42, 0x2c, 0x88, 0x48, 0x3f, 0x32, 0x19, 0xc4, 0xf0, 0x84, 0x29, 0x40, 0x24, 0x1c, 0xa4, 0xdf, - 0x00, 0xb8, 0x95, 0x64, 0x47, 0xaf, 0x8f, 0x55, 0x4f, 0xcc, 0x0c, 0xf5, 0xcd, 0xb4, 0x33, 0x7c, - 0x1c, 0x5f, 0xc0, 0xcd, 0xf8, 0xa3, 0x55, 0x9b, 0x98, 0x72, 0x28, 0x5e, 0x7d, 0x23, 0x5d, 0xbc, - 0x04, 0x50, 0xae, 0x3c, 0x39, 0x2e, 0x82, 0xa7, 0xc7, 0x45, 0xf0, 0xff, 0x71, 0x11, 0x7c, 0x7b, - 0x52, 0x9c, 0x7b, 0x7a, 0x52, 0x9c, 0xfb, 0xe7, 0xa4, 0x38, 0xf7, 0x89, 0x1e, 0xb2, 0x09, 0x91, - 0xfb, 0xd6, 0xa1, 0xd9, 0xa0, 0xf2, 0x87, 0x7e, 0x74, 0x57, 0xef, 0xf1, 0xbf, 0x0f, 0x3d, 0xcf, - 0x68, 0xcc, 0x7b, 0x7f, 0xf7, 0xdd, 0x79, 0x16, 0x00, 0x00, 0xff, 0xff, 0x5d, 0xdb, 0x47, 0x35, - 0x5b, 0x14, 0x00, 0x00, + // 1119 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x4b, 0x6f, 0x1b, 0x45, + 0x1c, 0xcf, 0xd8, 0x6e, 0x1e, 0x93, 0xe6, 0xb5, 0x4d, 0x1a, 0x67, 0xdb, 0xda, 0xe9, 0x80, 0x20, + 0xa5, 0xea, 0x2e, 0x4d, 0x25, 0x8a, 0xb8, 0x00, 0x86, 0x20, 0x8c, 0xb0, 0x5c, 0x6d, 0x2f, 0x15, + 0x17, 0x6b, 0x1d, 0xaf, 0xdc, 0x55, 0xb3, 0x33, 0x96, 0x67, 0x36, 0xb8, 0x42, 0x02, 0x89, 0xc7, + 0x1d, 0x84, 0x78, 0x7c, 0x02, 0xc4, 0x57, 0xe0, 0x00, 0x07, 0xb8, 0xf4, 0xd8, 0x1b, 0x94, 0x83, + 0x85, 0x92, 0x6f, 0xe0, 0x4f, 0x80, 0x76, 0x67, 0xf6, 0xe9, 0xdd, 0xd8, 0x9b, 0xd8, 0xc9, 0x29, + 0xf1, 0xce, 0xff, 0xfd, 0xff, 0xcd, 0xef, 0xff, 0xdf, 0x85, 0x37, 0x08, 0xb5, 0x08, 0x35, 0xa9, + 0xda, 0xd6, 0x2d, 0x4b, 0x3d, 0xbc, 0xdb, 0x34, 0x98, 0x7e, 0x57, 0x65, 0x3d, 0xa5, 0xd3, 0x25, + 0x8c, 0x48, 0xeb, 0xe2, 0x58, 0x71, 0x8e, 0x15, 0x71, 0x2c, 0xaf, 0xb7, 0x49, 0x9b, 0xb8, 0x02, + 0xaa, 0xf3, 0x1f, 0x97, 0x95, 0x4b, 0xfb, 0xae, 0xb0, 0xda, 0xd4, 0xa9, 0xe1, 0x5b, 0xda, 0x27, + 0x26, 0xe6, 0xe7, 0xe8, 0xf7, 0x1c, 0x5c, 0xac, 0xd1, 0xf6, 0x47, 0xc4, 0xc4, 0x0f, 0x08, 0x39, + 0x90, 0x6e, 0xc1, 0x59, 0x6a, 0xe0, 0x96, 0xd1, 0x2d, 0x82, 0x6d, 0xb0, 0xb3, 0x50, 0x59, 0x1b, + 0xf4, 0xcb, 0x4b, 0x4f, 0x75, 0xeb, 0xe0, 0x2d, 0xc4, 0x9f, 0x23, 0x4d, 0x08, 0x48, 0xb7, 0xe1, + 0x5c, 0x87, 0x90, 0x83, 0x86, 0xd9, 0x2a, 0xe6, 0xb6, 0xc1, 0x4e, 0xa1, 0x22, 0x0d, 0xfa, 0xe5, + 0x65, 0x2e, 0x2b, 0x0e, 0x90, 0x36, 0xeb, 0xfc, 0x57, 0x6d, 0x49, 0x5d, 0xb8, 0x4a, 0x1f, 0xeb, + 0x5d, 0xa3, 0x41, 0x6c, 0xd6, 0xd0, 0x2d, 0x62, 0x63, 0x56, 0xcc, 0xbb, 0x1e, 0x3e, 0x7c, 0xd6, + 0x2f, 0xcf, 0xfc, 0xdb, 0x2f, 0xbf, 0xd2, 0x36, 0xd9, 0x63, 0xbb, 0xa9, 0xec, 0x13, 0x4b, 0x15, + 0x41, 0xf3, 0x3f, 0x77, 0x68, 0xeb, 0x89, 0xca, 0x9e, 0x76, 0x0c, 0xaa, 0x54, 0x31, 0x1b, 0xf4, + 0xcb, 0x57, 0x43, 0x3e, 0xb8, 0x29, 0xc7, 0x2a, 0xd2, 0x96, 0x5d, 0x0f, 0x75, 0x9b, 0xbd, 0xeb, + 0x3e, 0x94, 0x9a, 0x70, 0x89, 0x91, 0x27, 0x06, 0x6e, 0x98, 0xb8, 0x61, 0xe9, 0x3d, 0x5a, 0x2c, + 0x6c, 0xe7, 0x77, 0x16, 0x77, 0xb7, 0x14, 0x6e, 0x57, 0x71, 0x6a, 0xe2, 0x95, 0x4f, 0x79, 0x8f, + 0x98, 0xb8, 0xf2, 0x92, 0x13, 0xcb, 0xa0, 0x5f, 0xbe, 0xc6, 0x3d, 0x84, 0xb5, 0x85, 0x27, 0x8a, + 0xb4, 0x45, 0xf7, 0x71, 0x15, 0xd7, 0xf4, 0x1e, 0x45, 0x2f, 0x00, 0xbc, 0x12, 0xaa, 0x9f, 0x66, + 0xd0, 0x0e, 0xc1, 0xd4, 0x90, 0x68, 0x42, 0xbe, 0xbc, 0xa2, 0xd5, 0xcc, 0xf9, 0x6e, 0x8a, 0xfa, + 0xc7, 0xec, 0x0d, 0x27, 0x5c, 0x83, 0xf3, 0x5e, 0xc8, 0xc5, 0xdc, 0xa8, 0x5c, 0x37, 0x45, 0xae, + 0x2b, 0xd1, 0x5c, 0x91, 0x36, 0x27, 0xf2, 0x43, 0x7f, 0x70, 0x6c, 0xec, 0xf5, 0x4c, 0x36, 0x55, + 0x6c, 0x74, 0xe0, 0x0a, 0xcf, 0xcd, 0xc4, 0x13, 0x82, 0x46, 0xcc, 0x1c, 0xd2, 0x96, 0xdc, 0x27, + 0x55, 0x2c, 0x0a, 0x65, 0xc0, 0x65, 0x9e, 0xaf, 0x53, 0x4d, 0xcb, 0xc4, 0x63, 0x40, 0xe3, 0x65, + 0x51, 0xae, 0xeb, 0xe1, 0x72, 0x09, 0xf5, 0x00, 0x1b, 0x97, 0xdd, 0xe7, 0x75, 0x9b, 0xd5, 0x4c, + 0x4c, 0x51, 0xdb, 0xc5, 0x86, 0x57, 0x3f, 0x1f, 0x1b, 0x0f, 0xe0, 0x82, 0xaf, 0x5e, 0x04, 0xa3, + 0x1c, 0x17, 0x85, 0xe3, 0xd5, 0x98, 0x63, 0xa4, 0xcd, 0x7b, 0xce, 0xd0, 0xd7, 0x00, 0xae, 0x3d, + 0xfc, 0x54, 0xef, 0xf0, 0xf4, 0xaa, 0x58, 0x23, 0x36, 0x33, 0xc2, 0x4d, 0x00, 0x23, 0x9b, 0x50, + 0x81, 0x2b, 0x41, 0x4e, 0x2d, 0x03, 0x13, 0xcb, 0xed, 0xdc, 0x42, 0x45, 0x0e, 0xca, 0x1a, 0x13, + 0x40, 0xda, 0x92, 0x17, 0xc1, 0xfb, 0xee, 0xef, 0xbf, 0x73, 0x70, 0xbd, 0x46, 0xdb, 0x4e, 0x24, + 0x7b, 0x3d, 0x7d, 0x9f, 0x79, 0xe1, 0x64, 0x41, 0xce, 0x1e, 0x9c, 0xed, 0x3a, 0xd1, 0x53, 0x81, + 0xe0, 0x57, 0x95, 0x24, 0xb6, 0x53, 0x86, 0xb2, 0xad, 0x14, 0x9c, 0x3a, 0x69, 0x42, 0x39, 0x72, + 0x15, 0x1c, 0x30, 0x9d, 0xed, 0x2a, 0x48, 0x9f, 0xc3, 0xf5, 0xa4, 0x8e, 0x17, 0x0b, 0x6e, 0x3a, + 0xb5, 0xcc, 0x38, 0xbd, 0x96, 0x8e, 0x22, 0xa4, 0xad, 0x85, 0x40, 0xc4, 0x73, 0x44, 0xdf, 0x03, + 0x78, 0x3d, 0xa9, 0xb2, 0x61, 0xbe, 0x09, 0x8c, 0x4d, 0x86, 0x6f, 0xe2, 0xf6, 0x90, 0xb6, 0xec, + 0x05, 0x26, 0xa2, 0xfa, 0x0a, 0x40, 0x29, 0x68, 0x44, 0xdd, 0x66, 0xa7, 0xc0, 0xdd, 0x3b, 0xde, + 0x55, 0x34, 0xf1, 0xd8, 0xb0, 0xbb, 0x2c, 0xda, 0xc2, 0x51, 0xf7, 0x22, 0x07, 0x37, 0x86, 0x6b, + 0x53, 0xb7, 0x59, 0x16, 0xd8, 0x7d, 0x10, 0x83, 0xdd, 0xce, 0x28, 0xd8, 0x79, 0xd9, 0xc6, 0x70, + 0xf7, 0x19, 0xbc, 0x92, 0x30, 0x35, 0x04, 0x9f, 0x7d, 0x9c, 0xb9, 0x15, 0x72, 0xea, 0x20, 0x42, + 0xda, 0x6a, 0x30, 0x87, 0x04, 0xad, 0x45, 0x88, 0xa5, 0x30, 0x0a, 0xf5, 0xe3, 0x10, 0xcb, 0x77, + 0x00, 0xde, 0x48, 0xac, 0xad, 0x0f, 0xbc, 0x8e, 0xc7, 0x1b, 0xc1, 0xa5, 0x00, 0x67, 0x23, 0xef, + 0x98, 0x39, 0x8f, 0x65, 0x3c, 0xf2, 0x46, 0x7f, 0xe6, 0xe0, 0x96, 0x18, 0xb9, 0x3c, 0x2e, 0x66, + 0x74, 0xf1, 0x69, 0xa8, 0x26, 0xd3, 0x90, 0x9a, 0x3c, 0xa1, 0x04, 0xf3, 0x7c, 0x72, 0x84, 0x92, + 0x64, 0x13, 0x69, 0x6b, 0xde, 0x9e, 0x10, 0x10, 0xca, 0xcf, 0x00, 0xde, 0x4c, 0x2d, 0xe2, 0x85, + 0x6e, 0x31, 0xe8, 0x97, 0x7c, 0xa4, 0xbf, 0x0f, 0x9d, 0xd3, 0x53, 0xdd, 0xe9, 0x4c, 0xfd, 0x7d, + 0x7b, 0x88, 0x87, 0xf8, 0x9d, 0xdd, 0x1a, 0xf4, 0xcb, 0x1b, 0x31, 0x60, 0x26, 0xd1, 0x50, 0x62, + 0xad, 0x0a, 0xd3, 0xde, 0xf8, 0x52, 0xe8, 0xe6, 0xd2, 0x79, 0xd0, 0x0d, 0xfa, 0x21, 0x8a, 0xa1, + 0x68, 0xa3, 0x2e, 0x90, 0x20, 0x7e, 0xcd, 0xc3, 0xa2, 0xd8, 0xbb, 0x62, 0x71, 0x4d, 0x91, 0x1f, + 0x12, 0xf6, 0xa7, 0x7c, 0xc6, 0xfd, 0x29, 0x69, 0x11, 0x2e, 0x4c, 0x77, 0x11, 0x4e, 0xdb, 0x6b, + 0x2e, 0x9d, 0xd3, 0x5e, 0xf3, 0x13, 0x80, 0xdb, 0x69, 0xad, 0xba, 0xd8, 0xdd, 0xe6, 0xaf, 0x1c, + 0x94, 0x43, 0x91, 0x85, 0x09, 0x72, 0x9a, 0x34, 0x14, 0x19, 0xe1, 0xf9, 0x09, 0x8c, 0x70, 0x87, + 0x22, 0x7c, 0x14, 0x84, 0x28, 0xa2, 0x70, 0x36, 0x8a, 0x48, 0x30, 0x89, 0xb4, 0x55, 0x01, 0xae, + 0x80, 0x22, 0x7e, 0x04, 0x10, 0xa5, 0x57, 0x31, 0xcc, 0x11, 0x71, 0xe0, 0x83, 0xa9, 0x02, 0x7f, + 0xf7, 0xb7, 0x39, 0x98, 0xaf, 0xd1, 0xb6, 0xf4, 0x08, 0xce, 0xfb, 0xdf, 0x3e, 0x6e, 0x26, 0xef, + 0x7c, 0xa1, 0xd7, 0x7b, 0xf9, 0xd6, 0x48, 0x11, 0x3f, 0xa7, 0x47, 0x70, 0xde, 0x7f, 0x73, 0x4e, + 0xb7, 0xec, 0x89, 0x9c, 0x60, 0x79, 0xe8, 0xfd, 0x91, 0xf2, 0x97, 0xbd, 0xe8, 0x2b, 0xd6, 0x6b, + 0xa9, 0xfa, 0x43, 0xb2, 0xf2, 0xee, 0xf8, 0xb2, 0xbe, 0xd3, 0x43, 0xbe, 0xea, 0xc7, 0x36, 0xec, + 0xdb, 0xe3, 0x5a, 0xaa, 0xdb, 0x4c, 0xbe, 0x97, 0x41, 0xd8, 0xf7, 0xfb, 0x25, 0x80, 0x57, 0x53, + 0x56, 0x3d, 0xf5, 0xc4, 0x66, 0x0c, 0x2b, 0xc8, 0xf7, 0x33, 0x2a, 0x24, 0x06, 0x11, 0xdb, 0x47, + 0x46, 0x07, 0x11, 0x55, 0x18, 0x23, 0x88, 0x94, 0x41, 0xfa, 0x0d, 0x80, 0x9b, 0x69, 0x74, 0xf4, + 0xfa, 0x89, 0xe8, 0x49, 0xd0, 0x90, 0xdf, 0xcc, 0xaa, 0xe1, 0xc7, 0xf1, 0x05, 0xdc, 0x48, 0x1e, + 0xad, 0xca, 0x48, 0x93, 0x11, 0x79, 0xf9, 0x8d, 0x6c, 0xf2, 0x5e, 0x00, 0x95, 0xea, 0xb3, 0xa3, + 0x12, 0x78, 0x7e, 0x54, 0x02, 0xff, 0x1d, 0x95, 0xc0, 0xb7, 0xc7, 0xa5, 0x99, 0xe7, 0xc7, 0xa5, + 0x99, 0x7f, 0x8e, 0x4b, 0x33, 0x9f, 0xa8, 0x21, 0x9a, 0x10, 0xb6, 0xef, 0x1c, 0xe8, 0x4d, 0xea, + 0xfd, 0x50, 0x0f, 0xef, 0xab, 0x3d, 0xfe, 0x55, 0xd5, 0xe5, 0x8c, 0xe6, 0xac, 0xfb, 0x15, 0xf4, + 0xde, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x67, 0xe6, 0x5e, 0x56, 0x72, 0x15, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1436,6 +1453,30 @@ func (m *MsgJoinPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.TokenIn) > 0 { + for iNdEx := len(m.TokenIn) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TokenIn[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size := m.ShareOutAmount.Size() + i -= size + if _, err := m.ShareOutAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -1518,6 +1559,20 @@ func (m *MsgExitPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.TokenOut) > 0 { + for iNdEx := len(m.TokenOut) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TokenOut[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } return len(dAtA) - i, nil } @@ -2192,6 +2247,14 @@ func (m *MsgJoinPoolResponse) Size() (n int) { } var l int _ = l + l = m.ShareOutAmount.Size() + n += 1 + l + sovTx(uint64(l)) + if len(m.TokenIn) > 0 { + for _, e := range m.TokenIn { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } return n } @@ -2225,6 +2288,12 @@ func (m *MsgExitPoolResponse) Size() (n int) { } var l int _ = l + if len(m.TokenOut) > 0 { + for _, e := range m.TokenOut { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } return n } @@ -2664,6 +2733,74 @@ func (m *MsgJoinPoolResponse) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: MsgJoinPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShareOutAmount", 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 + } + if err := m.ShareOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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.TokenIn = append(m.TokenIn, types.Coin{}) + if err := m.TokenIn[len(m.TokenIn)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -2883,6 +3020,40 @@ func (m *MsgExitPoolResponse) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: MsgExitPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", 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.TokenOut = append(m.TokenOut, types.Coin{}) + if err := m.TokenOut[len(m.TokenOut)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) diff --git a/x/superfluid/keeper/unpool_test.go b/x/superfluid/keeper/unpool_test.go index 0a247960f97..a919f5bc52b 100644 --- a/x/superfluid/keeper/unpool_test.go +++ b/x/superfluid/keeper/unpool_test.go @@ -115,7 +115,7 @@ func (suite *KeeperTestSuite) TestUnpool() { // join pool balanceBeforeJoin := suite.App.BankKeeper.GetAllBalances(suite.Ctx, poolJoinAcc) - err = suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, poolJoinAcc, poolId, gammtypes.OneShare.MulRaw(50), sdk.Coins{}) + _, _, err = suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, poolJoinAcc, poolId, gammtypes.OneShare.MulRaw(50), sdk.Coins{}) suite.Require().NoError(err) balanceAfterJoin := suite.App.BankKeeper.GetAllBalances(suite.Ctx, poolJoinAcc)