feat: Move CommunityPool to its own module (#17657)
This commit is contained in:
@@ -458,48 +458,3 @@ func (s *GRPCQueryTestSuite) TestQueryWithdrawAddressGRPC() {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (s *GRPCQueryTestSuite) TestQueryValidatorCommunityPoolGRPC() {
|
||||
val := s.network.Validators[0]
|
||||
baseURL := val.APIAddress
|
||||
|
||||
communityPool, err := sdk.ParseDecCoins("0.4stake")
|
||||
s.Require().NoError(err)
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
url string
|
||||
headers map[string]string
|
||||
expErr bool
|
||||
respType proto.Message
|
||||
expected proto.Message
|
||||
}{
|
||||
{
|
||||
"gRPC request params with wrong validator address",
|
||||
fmt.Sprintf("%s/cosmos/distribution/v1beta1/community_pool", baseURL),
|
||||
map[string]string{
|
||||
grpctypes.GRPCBlockHeightHeader: "2",
|
||||
},
|
||||
false,
|
||||
&types.QueryCommunityPoolResponse{},
|
||||
&types.QueryCommunityPoolResponse{
|
||||
Pool: communityPool,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
tc := tc
|
||||
resp, err := sdktestutil.GetRequestWithHeaders(tc.url, tc.headers)
|
||||
|
||||
s.Run(tc.name, func() {
|
||||
if tc.expErr {
|
||||
s.Require().Error(err)
|
||||
} else {
|
||||
s.Require().NoError(err)
|
||||
s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(resp, tc.respType))
|
||||
s.Require().Equal(tc.expected.String(), tc.respType.String())
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -328,58 +328,3 @@ func (s *E2ETestSuite) TestNewSetWithdrawAddrCmd() {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (s *E2ETestSuite) TestNewFundCommunityPoolCmd() {
|
||||
val := s.network.Validators[0]
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
args []string
|
||||
expectErr bool
|
||||
expectedCode uint32
|
||||
respType proto.Message
|
||||
}{
|
||||
{
|
||||
"invalid funding amount",
|
||||
[]string{
|
||||
"-43foocoin",
|
||||
fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
|
||||
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
|
||||
fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync),
|
||||
fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, math.NewInt(10))).String()),
|
||||
},
|
||||
true, 0, nil,
|
||||
},
|
||||
{
|
||||
"valid transaction",
|
||||
[]string{
|
||||
sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, math.NewInt(5431))).String(),
|
||||
fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
|
||||
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
|
||||
fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync),
|
||||
fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, math.NewInt(10))).String()),
|
||||
},
|
||||
false, 0, &sdk.TxResponse{},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
tc := tc
|
||||
|
||||
s.Run(tc.name, func() {
|
||||
cmd := cli.NewFundCommunityPoolCmd(address.NewBech32Codec("cosmos"))
|
||||
clientCtx := val.ClientCtx
|
||||
|
||||
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
|
||||
if tc.expectErr {
|
||||
s.Require().Error(err)
|
||||
} else {
|
||||
s.Require().NoError(err)
|
||||
s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), tc.respType), out.String())
|
||||
|
||||
txResp := tc.respType.(*sdk.TxResponse)
|
||||
s.Require().NoError(clitestutil.CheckTxCode(s.network, clientCtx, txResp.TxHash, tc.expectedCode))
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
+4
-1
@@ -15,6 +15,7 @@ require (
|
||||
cosmossdk.io/x/evidence v0.0.0-20230613133644-0a778132a60f
|
||||
cosmossdk.io/x/feegrant v0.0.0-20230613133644-0a778132a60f
|
||||
cosmossdk.io/x/nft v0.0.0-20230613133644-0a778132a60f // indirect
|
||||
cosmossdk.io/x/protocolpool v0.0.0-20230925135524-a1bc045b3190
|
||||
cosmossdk.io/x/tx v0.10.0
|
||||
cosmossdk.io/x/upgrade v0.0.0-20230613133644-0a778132a60f
|
||||
github.com/cometbft/cometbft v0.38.0
|
||||
@@ -179,7 +180,7 @@ require (
|
||||
google.golang.org/api v0.134.0 // indirect
|
||||
google.golang.org/appengine v1.6.7 // indirect
|
||||
google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 // indirect
|
||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
@@ -193,6 +194,7 @@ require (
|
||||
// replace (
|
||||
// <temporary replace>
|
||||
// )
|
||||
replace cosmossdk.io/api => ../api
|
||||
|
||||
// SimApp on main always tests the latest extracted SDK modules importing the sdk
|
||||
replace (
|
||||
@@ -201,6 +203,7 @@ replace (
|
||||
cosmossdk.io/x/evidence => ../x/evidence
|
||||
cosmossdk.io/x/feegrant => ../x/feegrant
|
||||
cosmossdk.io/x/nft => ../x/nft
|
||||
cosmossdk.io/x/protocolpool => ../x/protocolpool
|
||||
cosmossdk.io/x/upgrade => ../x/upgrade
|
||||
)
|
||||
|
||||
|
||||
+2
-4
@@ -187,8 +187,6 @@ cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xX
|
||||
cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg=
|
||||
cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0=
|
||||
cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M=
|
||||
cosmossdk.io/api v0.7.1 h1:PNQ1xN8+/0hj/sSD0ANqjkgfXFys+bZ5L8Hg7uzoUTU=
|
||||
cosmossdk.io/api v0.7.1/go.mod h1:ure9edhcROIHsngavM6mBLilMGFnfjhV/AaYhEMUkdo=
|
||||
cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s=
|
||||
cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0=
|
||||
cosmossdk.io/core v0.12.0 h1:aFuvkG6eDv0IQC+UDjx86wxNWVAxdCFk7OABJ1Vh4RU=
|
||||
@@ -1596,8 +1594,8 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz
|
||||
google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=
|
||||
google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb h1:XFBgcDwm7irdHTbz4Zk2h7Mh+eis4nfJEFQFYzJzuIA=
|
||||
google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5 h1:nIgk/EEq3/YlnmVVXVnm14rC2oxgs1o0ong4sD/rd44=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 h1:N3bU/SQDCDyD6R528GJ/PwW9KjYcJA3dgyH+MovAkIM=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA=
|
||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
||||
|
||||
@@ -11,6 +11,7 @@ import (
|
||||
"cosmossdk.io/depinject"
|
||||
"cosmossdk.io/log"
|
||||
sdkmath "cosmossdk.io/math"
|
||||
_ "cosmossdk.io/x/protocolpool"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/baseapp"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
@@ -123,6 +124,7 @@ func createTestSuite(t *testing.T, genesisAccounts []authtypes.GenesisAccount) s
|
||||
configurator.BankModule(),
|
||||
configurator.GovModule(),
|
||||
configurator.DistributionModule(),
|
||||
configurator.ProtocolPoolModule(),
|
||||
),
|
||||
depinject.Supply(log.NewNopLogger()),
|
||||
),
|
||||
|
||||
@@ -425,16 +425,12 @@ func TestGRPCCommunityPool(t *testing.T) {
|
||||
t.Parallel()
|
||||
f := initFixture(t)
|
||||
|
||||
assert.NilError(t, f.distrKeeper.FeePool.Set(f.sdkCtx, types.FeePool{
|
||||
CommunityPool: sdk.NewDecCoins(sdk.DecCoin{Denom: sdk.DefaultBondDenom, Amount: math.LegacyNewDec(0)}),
|
||||
}))
|
||||
|
||||
qr := f.app.QueryHelper()
|
||||
queryClient := types.NewQueryClient(qr)
|
||||
|
||||
var (
|
||||
req *types.QueryCommunityPoolRequest
|
||||
expPool *types.QueryCommunityPoolResponse
|
||||
req *types.QueryCommunityPoolRequest //nolint:staticcheck // we're using a deprecated call
|
||||
expPool *types.QueryCommunityPoolResponse //nolint:staticcheck // we're using a deprecated call
|
||||
)
|
||||
|
||||
testCases := []struct {
|
||||
@@ -444,8 +440,8 @@ func TestGRPCCommunityPool(t *testing.T) {
|
||||
{
|
||||
name: "valid request empty community pool",
|
||||
malleate: func() {
|
||||
req = &types.QueryCommunityPoolRequest{}
|
||||
expPool = &types.QueryCommunityPoolResponse{}
|
||||
req = &types.QueryCommunityPoolRequest{} //nolint:staticcheck // we're using a deprecated call
|
||||
expPool = &types.QueryCommunityPoolResponse{} //nolint:staticcheck // we're using a deprecated call
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -455,11 +451,11 @@ func TestGRPCCommunityPool(t *testing.T) {
|
||||
assert.NilError(t, f.bankKeeper.MintCoins(f.sdkCtx, types.ModuleName, amount))
|
||||
assert.NilError(t, f.bankKeeper.SendCoinsFromModuleToAccount(f.sdkCtx, types.ModuleName, f.addr, amount))
|
||||
|
||||
err := f.distrKeeper.FundCommunityPool(f.sdkCtx, amount, f.addr)
|
||||
err := f.poolKeeper.FundCommunityPool(f.sdkCtx, amount, f.addr)
|
||||
assert.Assert(t, err == nil)
|
||||
req = &types.QueryCommunityPoolRequest{}
|
||||
req = &types.QueryCommunityPoolRequest{} //nolint:staticcheck // we're using a deprecated call
|
||||
|
||||
expPool = &types.QueryCommunityPoolResponse{Pool: sdk.NewDecCoinsFromCoins(amount...)}
|
||||
expPool = &types.QueryCommunityPoolResponse{Pool: sdk.NewDecCoinsFromCoins(amount...)} //nolint:staticcheck // we're using a deprecated call
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -469,7 +465,7 @@ func TestGRPCCommunityPool(t *testing.T) {
|
||||
t.Run(fmt.Sprintf("Case %s", tc.name), func(t *testing.T) {
|
||||
testCase.malleate()
|
||||
|
||||
pool, err := queryClient.CommunityPool(f.sdkCtx, req)
|
||||
pool, err := queryClient.CommunityPool(f.sdkCtx, req) //nolint:staticcheck // we're using a deprecated call
|
||||
|
||||
assert.NilError(t, err)
|
||||
assert.DeepEqual(t, expPool, pool)
|
||||
|
||||
@@ -13,6 +13,9 @@ import (
|
||||
"cosmossdk.io/log"
|
||||
"cosmossdk.io/math"
|
||||
storetypes "cosmossdk.io/store/types"
|
||||
"cosmossdk.io/x/protocolpool"
|
||||
poolkeeper "cosmossdk.io/x/protocolpool/keeper"
|
||||
pooltypes "cosmossdk.io/x/protocolpool/types"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
addresscodec "github.com/cosmos/cosmos-sdk/codec/address"
|
||||
@@ -52,19 +55,20 @@ type fixture struct {
|
||||
bankKeeper bankkeeper.Keeper
|
||||
distrKeeper distrkeeper.Keeper
|
||||
stakingKeeper *stakingkeeper.Keeper
|
||||
poolKeeper poolkeeper.Keeper
|
||||
|
||||
addr sdk.AccAddress
|
||||
valAddr sdk.ValAddress
|
||||
}
|
||||
|
||||
func initFixture(tb testing.TB) *fixture {
|
||||
tb.Helper()
|
||||
func initFixture(t *testing.T) *fixture {
|
||||
t.Helper()
|
||||
keys := storetypes.NewKVStoreKeys(
|
||||
authtypes.StoreKey, banktypes.StoreKey, distrtypes.StoreKey, stakingtypes.StoreKey,
|
||||
authtypes.StoreKey, banktypes.StoreKey, distrtypes.StoreKey, pooltypes.StoreKey, stakingtypes.StoreKey,
|
||||
)
|
||||
cdc := moduletestutil.MakeTestEncodingConfig(auth.AppModuleBasic{}, distribution.AppModuleBasic{}).Codec
|
||||
cdc := moduletestutil.MakeTestEncodingConfig(auth.AppModuleBasic{}, distribution.AppModuleBasic{}, protocolpool.AppModuleBasic{}).Codec
|
||||
|
||||
logger := log.NewTestLogger(tb)
|
||||
logger := log.NewTestLogger(t)
|
||||
cms := integration.CreateMultiStore(keys, logger)
|
||||
|
||||
newCtx := sdk.NewContext(cms, true, logger)
|
||||
@@ -72,6 +76,7 @@ func initFixture(tb testing.TB) *fixture {
|
||||
authority := authtypes.NewModuleAddress("gov")
|
||||
|
||||
maccPerms := map[string][]string{
|
||||
pooltypes.ModuleName: {},
|
||||
distrtypes.ModuleName: {authtypes.Minter},
|
||||
stakingtypes.BondedPoolName: {authtypes.Burner, authtypes.Staking},
|
||||
stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking},
|
||||
@@ -100,16 +105,21 @@ func initFixture(tb testing.TB) *fixture {
|
||||
)
|
||||
|
||||
stakingKeeper := stakingkeeper.NewKeeper(cdc, runtime.NewKVStoreService(keys[stakingtypes.StoreKey]), accountKeeper, bankKeeper, authority.String(), addresscodec.NewBech32Codec(sdk.Bech32PrefixValAddr), addresscodec.NewBech32Codec(sdk.Bech32PrefixConsAddr))
|
||||
require.NoError(tb, stakingKeeper.Params.Set(newCtx, stakingtypes.DefaultParams()))
|
||||
require.NoError(t, stakingKeeper.Params.Set(newCtx, stakingtypes.DefaultParams()))
|
||||
|
||||
poolKeeper := poolkeeper.NewKeeper(
|
||||
cdc, runtime.NewKVStoreService(keys[pooltypes.StoreKey]), accountKeeper, bankKeeper, authority.String(),
|
||||
)
|
||||
|
||||
distrKeeper := distrkeeper.NewKeeper(
|
||||
cdc, runtime.NewKVStoreService(keys[distrtypes.StoreKey]), accountKeeper, bankKeeper, stakingKeeper, distrtypes.ModuleName, authority.String(),
|
||||
cdc, runtime.NewKVStoreService(keys[distrtypes.StoreKey]), accountKeeper, bankKeeper, stakingKeeper, poolKeeper, distrtypes.ModuleName, authority.String(),
|
||||
)
|
||||
|
||||
authModule := auth.NewAppModule(cdc, accountKeeper, authsims.RandomGenesisAccounts)
|
||||
bankModule := bank.NewAppModule(cdc, bankKeeper, accountKeeper)
|
||||
stakingModule := staking.NewAppModule(cdc, stakingKeeper, accountKeeper, bankKeeper)
|
||||
distrModule := distribution.NewAppModule(cdc, distrKeeper, accountKeeper, bankKeeper, stakingKeeper)
|
||||
distrModule := distribution.NewAppModule(cdc, distrKeeper, accountKeeper, bankKeeper, stakingKeeper, poolKeeper)
|
||||
poolModule := protocolpool.NewAppModule(cdc, poolKeeper, accountKeeper, bankKeeper)
|
||||
|
||||
addr := sdk.AccAddress(PKS[0].Address())
|
||||
valAddr := sdk.ValAddress(addr)
|
||||
@@ -135,6 +145,7 @@ func initFixture(tb testing.TB) *fixture {
|
||||
banktypes.ModuleName: bankModule,
|
||||
stakingtypes.ModuleName: stakingModule,
|
||||
distrtypes.ModuleName: distrModule,
|
||||
pooltypes.ModuleName: poolModule,
|
||||
})
|
||||
|
||||
sdkCtx := sdk.UnwrapSDKContext(integrationApp.Context())
|
||||
@@ -152,6 +163,7 @@ func initFixture(tb testing.TB) *fixture {
|
||||
bankKeeper: bankKeeper,
|
||||
distrKeeper: distrKeeper,
|
||||
stakingKeeper: stakingKeeper,
|
||||
poolKeeper: poolKeeper,
|
||||
addr: addr,
|
||||
valAddr: valAddr,
|
||||
}
|
||||
@@ -573,33 +585,30 @@ func TestMsgFundCommunityPool(t *testing.T) {
|
||||
t.Parallel()
|
||||
f := initFixture(t)
|
||||
|
||||
// reset fee pool
|
||||
initPool := distrtypes.InitialFeePool()
|
||||
require.NoError(t, f.distrKeeper.FeePool.Set(f.sdkCtx, initPool))
|
||||
|
||||
initTokens := f.stakingKeeper.TokensFromConsensusPower(f.sdkCtx, int64(100))
|
||||
err := f.bankKeeper.MintCoins(f.sdkCtx, distrtypes.ModuleName, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, initTokens)))
|
||||
require.NoError(t, err)
|
||||
|
||||
addr := sdk.AccAddress(PKS[0].Address())
|
||||
addr2 := sdk.AccAddress(PKS[1].Address())
|
||||
amount := sdk.NewCoins(sdk.NewInt64Coin("stake", 100))
|
||||
|
||||
poolAcc := f.accountKeeper.GetModuleAccount(f.sdkCtx, pooltypes.ModuleName)
|
||||
|
||||
// check that the pool account balance is empty
|
||||
assert.Assert(t, f.bankKeeper.GetAllBalances(f.sdkCtx, poolAcc.GetAddress()).Empty())
|
||||
|
||||
// fund the account by minting and sending amount from distribution module to addr
|
||||
err = f.bankKeeper.MintCoins(f.sdkCtx, distrtypes.ModuleName, amount)
|
||||
err := f.bankKeeper.MintCoins(f.sdkCtx, distrtypes.ModuleName, amount)
|
||||
assert.NilError(t, err)
|
||||
err = f.bankKeeper.SendCoinsFromModuleToAccount(f.sdkCtx, distrtypes.ModuleName, addr, amount)
|
||||
assert.NilError(t, err)
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
msg *distrtypes.MsgFundCommunityPool
|
||||
msg *distrtypes.MsgFundCommunityPool //nolint:staticcheck // we're using a deprecated call
|
||||
expErr bool
|
||||
expErrMsg string
|
||||
}{
|
||||
{
|
||||
name: "no depositor address",
|
||||
msg: &distrtypes.MsgFundCommunityPool{
|
||||
msg: &distrtypes.MsgFundCommunityPool{ //nolint:staticcheck // we're using a deprecated call
|
||||
Amount: sdk.NewCoins(sdk.NewCoin("stake", math.NewInt(100))),
|
||||
Depositor: emptyDelAddr.String(),
|
||||
},
|
||||
@@ -608,7 +617,7 @@ func TestMsgFundCommunityPool(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "invalid coin",
|
||||
msg: &distrtypes.MsgFundCommunityPool{
|
||||
msg: &distrtypes.MsgFundCommunityPool{ //nolint:staticcheck // we're using a deprecated call
|
||||
Amount: sdk.Coins{sdk.NewInt64Coin("stake", 10), sdk.NewInt64Coin("stake", 10)},
|
||||
Depositor: addr.String(),
|
||||
},
|
||||
@@ -617,7 +626,7 @@ func TestMsgFundCommunityPool(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "depositor address with no funds",
|
||||
msg: &distrtypes.MsgFundCommunityPool{
|
||||
msg: &distrtypes.MsgFundCommunityPool{ //nolint:staticcheck // we're using a deprecated call
|
||||
Amount: sdk.NewCoins(sdk.NewCoin("stake", math.NewInt(100))),
|
||||
Depositor: addr2.String(),
|
||||
},
|
||||
@@ -626,7 +635,7 @@ func TestMsgFundCommunityPool(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "valid message",
|
||||
msg: &distrtypes.MsgFundCommunityPool{
|
||||
msg: &distrtypes.MsgFundCommunityPool{ //nolint:staticcheck // we're using a deprecated call
|
||||
Amount: sdk.NewCoins(sdk.NewCoin("stake", math.NewInt(100))),
|
||||
Depositor: addr.String(),
|
||||
},
|
||||
@@ -648,14 +657,14 @@ func TestMsgFundCommunityPool(t *testing.T) {
|
||||
assert.Assert(t, res != nil)
|
||||
|
||||
// check the result
|
||||
result := distrtypes.MsgFundCommunityPool{}
|
||||
result := distrtypes.MsgFundCommunityPool{} //nolint:staticcheck // we're using a deprecated call
|
||||
err = f.cdc.Unmarshal(res.Value, &result)
|
||||
assert.NilError(t, err)
|
||||
|
||||
// query the community pool funds
|
||||
feePool, err := f.distrKeeper.FeePool.Get(f.sdkCtx)
|
||||
require.NoError(t, err)
|
||||
assert.DeepEqual(t, initPool.CommunityPool.Add(sdk.NewDecCoinsFromCoins(amount...)...), feePool.CommunityPool)
|
||||
poolBal := f.bankKeeper.GetAllBalances(f.sdkCtx, poolAcc.GetAddress())
|
||||
assert.Assert(t, poolBal.Equal(amount))
|
||||
|
||||
assert.Assert(t, f.bankKeeper.GetAllBalances(f.sdkCtx, addr).Empty())
|
||||
}
|
||||
})
|
||||
@@ -806,27 +815,31 @@ func TestMsgCommunityPoolSpend(t *testing.T) {
|
||||
t.Parallel()
|
||||
f := initFixture(t)
|
||||
|
||||
require.NoError(t, f.distrKeeper.Params.Set(f.sdkCtx, distrtypes.DefaultParams()))
|
||||
initialFeePool := sdk.NewDecCoins(sdk.DecCoin{Denom: "stake", Amount: math.LegacyNewDec(10000)})
|
||||
require.NoError(t, f.distrKeeper.FeePool.Set(f.sdkCtx, distrtypes.FeePool{
|
||||
CommunityPool: initialFeePool,
|
||||
}))
|
||||
|
||||
initTokens := f.stakingKeeper.TokensFromConsensusPower(f.sdkCtx, int64(100))
|
||||
err := f.bankKeeper.MintCoins(f.sdkCtx, distrtypes.ModuleName, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, initTokens)))
|
||||
require.NoError(t, err)
|
||||
|
||||
// fund pool module account
|
||||
amount := sdk.NewCoins(sdk.NewInt64Coin("stake", 100))
|
||||
poolAcc := f.accountKeeper.GetModuleAccount(f.sdkCtx, pooltypes.ModuleName)
|
||||
err = f.bankKeeper.SendCoinsFromModuleToModule(f.sdkCtx, distrtypes.ModuleName, poolAcc.GetName(), amount)
|
||||
require.NoError(t, err)
|
||||
|
||||
// query the community pool to verify it has been updated with balance
|
||||
poolBal := f.bankKeeper.GetAllBalances(f.sdkCtx, poolAcc.GetAddress())
|
||||
assert.Assert(t, poolBal.Equal(amount))
|
||||
|
||||
recipient := sdk.AccAddress([]byte("addr1"))
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
msg *distrtypes.MsgCommunityPoolSpend
|
||||
msg *distrtypes.MsgCommunityPoolSpend //nolint:staticcheck // we're using a deprecated call
|
||||
expErr bool
|
||||
expErrMsg string
|
||||
}{
|
||||
{
|
||||
name: "invalid authority",
|
||||
msg: &distrtypes.MsgCommunityPoolSpend{
|
||||
msg: &distrtypes.MsgCommunityPoolSpend{ //nolint:staticcheck // we're using a deprecated call
|
||||
Authority: "invalid",
|
||||
Recipient: recipient.String(),
|
||||
Amount: sdk.NewCoins(sdk.NewCoin("stake", math.NewInt(100))),
|
||||
@@ -836,7 +849,7 @@ func TestMsgCommunityPoolSpend(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "invalid recipient",
|
||||
msg: &distrtypes.MsgCommunityPoolSpend{
|
||||
msg: &distrtypes.MsgCommunityPoolSpend{ //nolint:staticcheck // we're using a deprecated call
|
||||
Authority: f.distrKeeper.GetAuthority(),
|
||||
Recipient: "invalid",
|
||||
Amount: sdk.NewCoins(sdk.NewCoin("stake", math.NewInt(100))),
|
||||
@@ -846,7 +859,7 @@ func TestMsgCommunityPoolSpend(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "valid message",
|
||||
msg: &distrtypes.MsgCommunityPoolSpend{
|
||||
msg: &distrtypes.MsgCommunityPoolSpend{ //nolint:staticcheck // we're using a deprecated call
|
||||
Authority: f.distrKeeper.GetAuthority(),
|
||||
Recipient: recipient.String(),
|
||||
Amount: sdk.NewCoins(sdk.NewCoin("stake", math.NewInt(100))),
|
||||
@@ -869,16 +882,14 @@ func TestMsgCommunityPoolSpend(t *testing.T) {
|
||||
assert.Assert(t, res != nil)
|
||||
|
||||
// check the result
|
||||
result := distrtypes.MsgCommunityPoolSpend{}
|
||||
result := distrtypes.MsgCommunityPoolSpend{} //nolint:staticcheck // we're using a deprecated call
|
||||
err = f.cdc.Unmarshal(res.Value, &result)
|
||||
assert.NilError(t, err)
|
||||
|
||||
// query the community pool to verify it has been updated
|
||||
communityPool, err := f.distrKeeper.FeePool.Get(f.sdkCtx)
|
||||
require.NoError(t, err)
|
||||
newPool, negative := initialFeePool.SafeSub(sdk.NewDecCoinsFromCoins(tc.msg.Amount...))
|
||||
assert.Assert(t, negative == false)
|
||||
assert.DeepEqual(t, communityPool.CommunityPool, newPool)
|
||||
poolBal := f.bankKeeper.GetAllBalances(f.sdkCtx, poolAcc.GetAddress())
|
||||
assert.Assert(t, poolBal.Empty())
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -24,9 +24,6 @@ import (
|
||||
bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
|
||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||
_ "github.com/cosmos/cosmos-sdk/x/consensus"
|
||||
_ "github.com/cosmos/cosmos-sdk/x/distribution"
|
||||
distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper"
|
||||
disttypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/gov"
|
||||
"github.com/cosmos/cosmos-sdk/x/gov/keeper"
|
||||
"github.com/cosmos/cosmos-sdk/x/gov/types"
|
||||
@@ -41,7 +38,6 @@ type suite struct {
|
||||
app *runtime.App
|
||||
AccountKeeper authkeeper.AccountKeeper
|
||||
BankKeeper bankkeeper.Keeper
|
||||
DistrKeeper distrkeeper.Keeper
|
||||
GovKeeper *keeper.Keeper
|
||||
StakingKeeper *stakingkeeper.Keeper
|
||||
appBuilder *runtime.AppBuilder
|
||||
@@ -52,9 +48,9 @@ var appConfig = configurator.NewAppConfig(
|
||||
configurator.StakingModule(),
|
||||
configurator.BankModule(),
|
||||
configurator.GovModule(),
|
||||
configurator.DistributionModule(),
|
||||
configurator.MintModule(),
|
||||
configurator.ConsensusModule(),
|
||||
configurator.ProtocolPoolModule(),
|
||||
)
|
||||
|
||||
func TestImportExportQueues(t *testing.T) {
|
||||
@@ -67,7 +63,7 @@ func TestImportExportQueues(t *testing.T) {
|
||||
depinject.Supply(log.NewNopLogger()),
|
||||
),
|
||||
simtestutil.DefaultStartUpConfig(),
|
||||
&s1.AccountKeeper, &s1.BankKeeper, &s1.DistrKeeper, &s1.GovKeeper, &s1.StakingKeeper, &s1.cdc, &s1.appBuilder,
|
||||
&s1.AccountKeeper, &s1.BankKeeper, &s1.GovKeeper, &s1.StakingKeeper, &s1.cdc, &s1.appBuilder,
|
||||
)
|
||||
assert.NilError(t, err)
|
||||
|
||||
@@ -105,7 +101,6 @@ func TestImportExportQueues(t *testing.T) {
|
||||
authGenState := s1.AccountKeeper.ExportGenesis(ctx)
|
||||
bankGenState := s1.BankKeeper.ExportGenesis(ctx)
|
||||
stakingGenState := s1.StakingKeeper.ExportGenesis(ctx)
|
||||
distributionGenState := s1.DistrKeeper.ExportGenesis(ctx)
|
||||
|
||||
// export the state and import it into a new app
|
||||
govGenState, _ := gov.ExportGenesis(ctx, s1.GovKeeper)
|
||||
@@ -115,7 +110,6 @@ func TestImportExportQueues(t *testing.T) {
|
||||
genesisState[banktypes.ModuleName] = s1.cdc.MustMarshalJSON(bankGenState)
|
||||
genesisState[types.ModuleName] = s1.cdc.MustMarshalJSON(govGenState)
|
||||
genesisState[stakingtypes.ModuleName] = s1.cdc.MustMarshalJSON(stakingGenState)
|
||||
genesisState[disttypes.ModuleName] = s1.cdc.MustMarshalJSON(distributionGenState)
|
||||
|
||||
stateBytes, err := json.MarshalIndent(genesisState, "", " ")
|
||||
assert.NilError(t, err)
|
||||
@@ -130,7 +124,7 @@ func TestImportExportQueues(t *testing.T) {
|
||||
depinject.Supply(log.NewNopLogger()),
|
||||
),
|
||||
conf2,
|
||||
&s2.AccountKeeper, &s2.BankKeeper, &s2.DistrKeeper, &s2.GovKeeper, &s2.StakingKeeper, &s2.cdc, &s2.appBuilder,
|
||||
&s2.AccountKeeper, &s2.BankKeeper, &s2.GovKeeper, &s2.StakingKeeper, &s2.cdc, &s2.appBuilder,
|
||||
)
|
||||
assert.NilError(t, err)
|
||||
|
||||
|
||||
@@ -8,6 +8,8 @@ import (
|
||||
"cosmossdk.io/core/appmodule"
|
||||
"cosmossdk.io/log"
|
||||
storetypes "cosmossdk.io/store/types"
|
||||
poolkeeper "cosmossdk.io/x/protocolpool/keeper"
|
||||
pooltypes "cosmossdk.io/x/protocolpool/types"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/baseapp"
|
||||
addresscodec "github.com/cosmos/cosmos-sdk/codec/address"
|
||||
@@ -22,9 +24,6 @@ import (
|
||||
"github.com/cosmos/cosmos-sdk/x/bank"
|
||||
bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
|
||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/distribution"
|
||||
distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper"
|
||||
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/gov"
|
||||
"github.com/cosmos/cosmos-sdk/x/gov/keeper"
|
||||
"github.com/cosmos/cosmos-sdk/x/gov/types"
|
||||
@@ -50,7 +49,7 @@ type fixture struct {
|
||||
func initFixture(tb testing.TB) *fixture {
|
||||
tb.Helper()
|
||||
keys := storetypes.NewKVStoreKeys(
|
||||
authtypes.StoreKey, banktypes.StoreKey, distrtypes.StoreKey, stakingtypes.StoreKey, types.StoreKey,
|
||||
authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey, pooltypes.StoreKey, types.StoreKey,
|
||||
)
|
||||
cdc := moduletestutil.MakeTestEncodingConfig(auth.AppModuleBasic{}, bank.AppModuleBasic{}, gov.AppModuleBasic{}).Codec
|
||||
|
||||
@@ -62,7 +61,7 @@ func initFixture(tb testing.TB) *fixture {
|
||||
authority := authtypes.NewModuleAddress(types.ModuleName)
|
||||
|
||||
maccPerms := map[string][]string{
|
||||
distrtypes.ModuleName: nil,
|
||||
pooltypes.ModuleName: {},
|
||||
minttypes.ModuleName: {authtypes.Minter},
|
||||
stakingtypes.BondedPoolName: {authtypes.Burner, authtypes.Staking},
|
||||
stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking},
|
||||
@@ -93,12 +92,11 @@ func initFixture(tb testing.TB) *fixture {
|
||||
|
||||
stakingKeeper := stakingkeeper.NewKeeper(cdc, runtime.NewKVStoreService(keys[stakingtypes.StoreKey]), accountKeeper, bankKeeper, authority.String(), addresscodec.NewBech32Codec(sdk.Bech32PrefixValAddr), addresscodec.NewBech32Codec(sdk.Bech32PrefixConsAddr))
|
||||
|
||||
poolKeeper := poolkeeper.NewKeeper(cdc, runtime.NewKVStoreService(keys[pooltypes.StoreKey]), accountKeeper, bankKeeper, authority.String())
|
||||
|
||||
// set default staking params
|
||||
err := stakingKeeper.Params.Set(newCtx, stakingtypes.DefaultParams())
|
||||
assert.NilError(tb, err)
|
||||
distrKeeper := distrkeeper.NewKeeper(
|
||||
cdc, runtime.NewKVStoreService(keys[distrtypes.StoreKey]), accountKeeper, bankKeeper, stakingKeeper, distrtypes.ModuleName, authority.String(),
|
||||
)
|
||||
|
||||
// Create MsgServiceRouter, but don't populate it before creating the gov
|
||||
// keeper.
|
||||
@@ -111,7 +109,7 @@ func initFixture(tb testing.TB) *fixture {
|
||||
accountKeeper,
|
||||
bankKeeper,
|
||||
stakingKeeper,
|
||||
distrKeeper,
|
||||
poolKeeper,
|
||||
router,
|
||||
types.DefaultConfig(),
|
||||
authority.String(),
|
||||
@@ -126,13 +124,11 @@ func initFixture(tb testing.TB) *fixture {
|
||||
authModule := auth.NewAppModule(cdc, accountKeeper, authsims.RandomGenesisAccounts)
|
||||
bankModule := bank.NewAppModule(cdc, bankKeeper, accountKeeper)
|
||||
stakingModule := staking.NewAppModule(cdc, stakingKeeper, accountKeeper, bankKeeper)
|
||||
distrModule := distribution.NewAppModule(cdc, distrKeeper, accountKeeper, bankKeeper, stakingKeeper)
|
||||
govModule := gov.NewAppModule(cdc, govKeeper, accountKeeper, bankKeeper)
|
||||
govModule := gov.NewAppModule(cdc, govKeeper, accountKeeper, bankKeeper, poolKeeper)
|
||||
|
||||
integrationApp := integration.NewIntegrationApp(newCtx, logger, keys, cdc, map[string]appmodule.AppModule{
|
||||
authtypes.ModuleName: authModule,
|
||||
banktypes.ModuleName: bankModule,
|
||||
distrtypes.ModuleName: distrModule,
|
||||
stakingtypes.ModuleName: stakingModule,
|
||||
types.ModuleName: govModule,
|
||||
})
|
||||
|
||||
@@ -7,12 +7,12 @@ import (
|
||||
|
||||
"cosmossdk.io/depinject"
|
||||
"cosmossdk.io/log"
|
||||
_ "cosmossdk.io/x/protocolpool"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/testutil/configurator"
|
||||
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
|
||||
authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
|
||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||
_ "github.com/cosmos/cosmos-sdk/x/distribution"
|
||||
"github.com/cosmos/cosmos-sdk/x/gov/types"
|
||||
_ "github.com/cosmos/cosmos-sdk/x/mint"
|
||||
)
|
||||
@@ -26,8 +26,8 @@ func TestItCreatesModuleAccountOnInitBlock(t *testing.T) {
|
||||
configurator.StakingModule(),
|
||||
configurator.BankModule(),
|
||||
configurator.GovModule(),
|
||||
configurator.DistributionModule(),
|
||||
configurator.ConsensusModule(),
|
||||
configurator.ProtocolPoolModule(),
|
||||
),
|
||||
depinject.Supply(log.NewNopLogger()),
|
||||
),
|
||||
|
||||
@@ -127,9 +127,7 @@ var (
|
||||
GenType(&disttypes.MsgWithdrawDelegatorReward{}, &distapi.MsgWithdrawDelegatorReward{}, GenOpts),
|
||||
GenType(&disttypes.MsgWithdrawValidatorCommission{}, &distapi.MsgWithdrawValidatorCommission{}, GenOpts),
|
||||
GenType(&disttypes.MsgSetWithdrawAddress{}, &distapi.MsgSetWithdrawAddress{}, GenOpts),
|
||||
GenType(&disttypes.MsgFundCommunityPool{}, &distapi.MsgFundCommunityPool{}, GenOpts),
|
||||
GenType(&disttypes.MsgUpdateParams{}, &distapi.MsgUpdateParams{}, GenOpts.WithDisallowNil()),
|
||||
GenType(&disttypes.MsgCommunityPoolSpend{}, &distapi.MsgCommunityPoolSpend{}, GenOpts),
|
||||
GenType(&disttypes.MsgDepositValidatorRewardsPool{}, &distapi.MsgDepositValidatorRewardsPool{}, GenOpts),
|
||||
|
||||
// evidence
|
||||
|
||||
@@ -267,10 +267,6 @@ func TestAminoJSON_LegacyParity(t *testing.T) {
|
||||
gogo: &disttypes.DelegationDelegatorReward{},
|
||||
pulsar: &distapi.DelegationDelegatorReward{},
|
||||
},
|
||||
"distribution/community_pool_spend_proposal_with_deposit": {
|
||||
gogo: &disttypes.CommunityPoolSpendProposalWithDeposit{},
|
||||
pulsar: &distapi.CommunityPoolSpendProposalWithDeposit{},
|
||||
},
|
||||
"distribution/msg_withdraw_delegator_reward": {
|
||||
gogo: &disttypes.MsgWithdrawDelegatorReward{DelegatorAddress: "foo"},
|
||||
pulsar: &distapi.MsgWithdrawDelegatorReward{DelegatorAddress: "foo"},
|
||||
|
||||
@@ -18,9 +18,12 @@ replace (
|
||||
cosmossdk.io/x/evidence => ../../../x/evidence
|
||||
cosmossdk.io/x/feegrant => ../../../x/feegrant
|
||||
cosmossdk.io/x/nft => ../../../x/nft
|
||||
cosmossdk.io/x/protocolpool => ../../../x/protocolpool
|
||||
cosmossdk.io/x/upgrade => ../../../x/upgrade
|
||||
)
|
||||
|
||||
replace cosmossdk.io/api => ../../../api
|
||||
|
||||
require (
|
||||
cosmossdk.io/log v1.2.1
|
||||
cosmossdk.io/math v1.1.3-rc.1
|
||||
@@ -49,6 +52,7 @@ require (
|
||||
cosmossdk.io/x/evidence v0.0.0-20230613133644-0a778132a60f // indirect
|
||||
cosmossdk.io/x/feegrant v0.0.0-20230613133644-0a778132a60f // indirect
|
||||
cosmossdk.io/x/nft v0.0.0-20230613133644-0a778132a60f // indirect
|
||||
cosmossdk.io/x/protocolpool v0.0.0-20230925135524-a1bc045b3190 // indirect
|
||||
cosmossdk.io/x/tx v0.10.0 // indirect
|
||||
cosmossdk.io/x/upgrade v0.0.0-20230613133644-0a778132a60f // indirect
|
||||
filippo.io/edwards25519 v1.0.0 // indirect
|
||||
@@ -198,7 +202,7 @@ require (
|
||||
google.golang.org/api v0.134.0 // indirect
|
||||
google.golang.org/appengine v1.6.7 // indirect
|
||||
google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 // indirect
|
||||
google.golang.org/protobuf v1.31.0 // indirect
|
||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||
|
||||
@@ -187,8 +187,6 @@ cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xX
|
||||
cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg=
|
||||
cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0=
|
||||
cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M=
|
||||
cosmossdk.io/api v0.7.1 h1:PNQ1xN8+/0hj/sSD0ANqjkgfXFys+bZ5L8Hg7uzoUTU=
|
||||
cosmossdk.io/api v0.7.1/go.mod h1:ure9edhcROIHsngavM6mBLilMGFnfjhV/AaYhEMUkdo=
|
||||
cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s=
|
||||
cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0=
|
||||
cosmossdk.io/core v0.12.0 h1:aFuvkG6eDv0IQC+UDjx86wxNWVAxdCFk7OABJ1Vh4RU=
|
||||
@@ -1591,8 +1589,8 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz
|
||||
google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=
|
||||
google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb h1:XFBgcDwm7irdHTbz4Zk2h7Mh+eis4nfJEFQFYzJzuIA=
|
||||
google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5 h1:nIgk/EEq3/YlnmVVXVnm14rC2oxgs1o0ong4sD/rd44=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 h1:N3bU/SQDCDyD6R528GJ/PwW9KjYcJA3dgyH+MovAkIM=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA=
|
||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
||||
|
||||
Reference in New Issue
Block a user