diff --git a/.pending/breaking/gaiarest/4049-update-tag b/.pending/breaking/gaiarest/4049-update-tag new file mode 100644 index 000000000000..6a200b715ba4 --- /dev/null +++ b/.pending/breaking/gaiarest/4049-update-tag @@ -0,0 +1 @@ +#4049 update tag MsgWithdrawValidatorCommission to match type \ No newline at end of file diff --git a/.pending/improvements/sdk/3774-add-category-tag b/.pending/improvements/sdk/3774-add-category-tag new file mode 100644 index 000000000000..afeb256f63eb --- /dev/null +++ b/.pending/improvements/sdk/3774-add-category-tag @@ -0,0 +1 @@ +#3774 add category tag to transactions for ease of filtering diff --git a/docs/spec/bank/04_tags.md b/docs/spec/bank/04_tags.md index 103c598390dc..0a7f382c2a26 100644 --- a/docs/spec/bank/04_tags.md +++ b/docs/spec/bank/04_tags.md @@ -6,7 +6,18 @@ The bank module emits the following events/tags: ### MsgSend -| Key | Value | -|-----------|---------------------------| -| sender | {senderAccountAddress} | -| recipient | {recipientAccountAddress} | +| Key | Value | +|-------------|---------------------------| +| `action` | `send` | +| `category` | `bank` | +| `sender` | {senderAccountAddress} | +| `recipient` | {recipientAccountAddress} | + +### MsgMultiSend + +| Key | Value | +|-------------|---------------------------| +| `action` | `multisend` | +| `category` | `bank` | +| `sender` | {senderAccountAddress} | +| `recipient` | {recipientAccountAddress} | diff --git a/docs/spec/crisis/03_tags.md b/docs/spec/crisis/03_tags.md index f3509bbdac6d..a6a4a738cab0 100644 --- a/docs/spec/crisis/03_tags.md +++ b/docs/spec/crisis/03_tags.md @@ -6,8 +6,9 @@ The crisis module emits the following events/tags: ### MsgVerifyInvariance -| Key | Value | -|-----------|---------------------| -| action | verify_invariant | -| sender | {message-sender} | -| invariant | {invariant-route} | +| Key | Value | +|-------------|--------------------| +| `action` | `verify_invariant` | +| `category` | `crisis` | +| `sender` | {message-sender} | +| `invariant` | {invariant-route} | diff --git a/docs/spec/distribution/06_tags.md b/docs/spec/distribution/06_tags.md index c526ae0c27b3..418d662ad8ae 100644 --- a/docs/spec/distribution/06_tags.md +++ b/docs/spec/distribution/06_tags.md @@ -6,25 +6,25 @@ The distribution module emits the following events/tags: ### MsgSetWithdrawAddress -| Key | Value | -|-----------|---------------------------| -| delegator | {delegatorAccountAddress} | - -### MsgWithdrawDelegatorRewardsAll - -| Key | Value | -|-----------|---------------------------| -| delegator | {delegatorAccountAddress} | +| Key | Value | +|-------------|---------------------------| +| `action` | `set_withdraw_address` | +| `category` | `distribution` | +| `delegator` | {delegatorAccountAddress} | ### MsgWithdrawDelegatorReward -| Key | Value | -|------------------|---------------------------| -| delegator | {delegatorAccountAddress} | -| source-validator | {srcOperatorAddress} | +| Key | Value | +|--------------------|-----------------------------| +| `action` | `withdraw_delegator_reward` | +| `category` | `distribution` | +| `delegator` | {delegatorAccountAddress} | +| `source-validator` | {srcOperatorAddress} | -### MsgWithdrawValidatorRewardsAll +### MsgWithdrawValidatorCommission -| Key | Value | -|------------------|----------------------| -| source-validator | {srcOperatorAddress} | +| Key | Value | +|--------------------|---------------------------------| +| `action` | `withdraw_validator_commission` | +| `category` | `distribution` | +| `source-validator` | {srcOperatorAddress} | diff --git a/docs/spec/governance/04_tags.md b/docs/spec/governance/04_tags.md index 6c97a2b49db4..a803e248e3fe 100644 --- a/docs/spec/governance/04_tags.md +++ b/docs/spec/governance/04_tags.md @@ -4,35 +4,38 @@ The governance module emits the following events/tags: ## EndBlocker -| Key | Value | -|-----------------|------------------------------------------------------| -| proposal-result | proposal-passed\|proposal-rejected\|proposal-dropped | +| Key | Value | +|-------------------|------------------------------------------------------------| +| `proposal-result` | `proposal-passed`\|`proposal-rejected`\|`proposal-dropped` | ## Handlers ### MsgSubmitProposal -| Key | Value | -|-------------------------|--------------------------| -| action | proposal-vote | -| proposer | {proposerAccountAddress} | -| proposal-id | {proposalID} | -| voting-period-start [0] | {proposalID} | +| Key | Value | +|---------------------------|--------------------------| +| `action` | `submit_proposal` | +| `category` | `governance` | +| `proposer` | {proposerAccountAddress} | +| `proposal-id` | {proposalID} | +| `voting-period-start` [0] | {proposalID} | * [0] Tag only emitted if the voting period starts during the submission. ### MsgVote -| Key | Value | -|-------------|-----------------------| -| action | proposal-vote | -| voter | {voterAccountAddress} | -| proposal-id | {proposalID} | +| Key | Value | +|---------------|-----------------------| +| `action` | `vote` | +| `category` | `governance` | +| `voter` | {voterAccountAddress} | +| `proposal-id` | {proposalID} | ### MsgDeposit -| Key | Value | -|-------------|---------------------------| -| action | proposal-vote | -| depositor | {depositorAccountAddress} | -| proposal-id | {proposalID} | +| Key | Value | +|---------------|---------------------------| +| `action` | `deposit` | +| `category` | `governance` | +| `depositor` | {depositorAccountAddress} | +| `proposal-id` | {proposalID} | diff --git a/docs/spec/slashing/06_tags.md b/docs/spec/slashing/06_tags.md index a9f2e59d3a8b..cb4d74bbc1bf 100644 --- a/docs/spec/slashing/06_tags.md +++ b/docs/spec/slashing/06_tags.md @@ -6,7 +6,8 @@ The slashing module emits the following events/tags: ### MsgUnjail -| Key | Value | -|-----------|----------------------------| -| action | validator-unjailed | -| validator | {validatorOperatorAddress} | +| Key | Value | +|-------------|----------------------------| +| `action` | `unjail` | +| `category` | `slashing` | +| `validator` | {validatorOperatorAddress} | diff --git a/docs/spec/staking/06_tags.md b/docs/spec/staking/06_tags.md index c2efd3b37747..32f74364d1f2 100644 --- a/docs/spec/staking/06_tags.md +++ b/docs/spec/staking/06_tags.md @@ -4,55 +4,62 @@ The staking module emits the following events/tags: ## EndBlocker -| Key | Value | -|-----------------------|-------------------------------------------| -| action | complete-unbonding\|complete-redelegation | -| delegator | {delegatorAccountAddress} | -| source-validator | {srcOperatorAddress} | -| destination-validator | {dstOperatorAddress} | +| Key | Value | +|-------------------------|-----------------------------------------------| +| `action` | `complete-unbonding`\|`complete-redelegation` | +| `category` | `staking` | +| `delegator` | {delegatorAccountAddress} | +| `source-validator` | {srcOperatorAddress} | +| `destination-validator` | {dstOperatorAddress} | ## Handlers ### MsgCreateValidator -| Key | Value | -|-----------------------|----------------------| -| destination-validator | {dstOperatorAddress} | -| moniker | {validatorMoniker} | -| identity | {validatorIdentity} | +| Key | Value | +|-------------------------|----------------------| +| `action` | `create_validator` | +| `category` | `staking` | +| `destination-validator` | {dstOperatorAddress} | ### MsgEditValidator -| Key | Value | -|-----------------------|----------------------| -| destination-validator | {dstOperatorAddress} | -| moniker | {validatorMoniker} | -| identity | {validatorIdentity} | +| Key | Value | +|-------------------------|----------------------| +| `action` | `edit_validator` | +| `category` | `staking` | +| `destination-validator` | {dstOperatorAddress} | ### MsgDelegate -| Key | Value | -|-----------------------|-------------------------------------------| -| delegator | {delegatorAccountAddress} | -| destination-validator | {dstOperatorAddress} | +| Key | Value | +|-------------------------|---------------------------| +| `action` | `delegate` | +| `category` | `staking` | +| `delegator` | {delegatorAccountAddress} | +| `destination-validator` | {dstOperatorAddress} | ### MsgBeginRedelegate -| Key | Value | -|-----------------------|-------------------------------------------| -| delegator | {delegatorAccountAddress} | -| source-validator | {srcOperatorAddress} | -| destination-validator | {dstOperatorAddress} | -| end-time [0] | {delegationFinishTime} | +| Key | Value | +|-------------------------|---------------------------| +| `action` | `begin_redelegate` | +| `category` | `staking` | +| `delegator` | {delegatorAccountAddress} | +| `source-validator` | {srcOperatorAddress} | +| `destination-validator` | {dstOperatorAddress} | +| `end-time` [0] | {delegationFinishTime} | * [0] Time is formatted in the RFC3339 standard ### MsgUndelegate -| Key | Value | -|------------------|---------------------------| -| delegator | {delegatorAccountAddress} | -| source-validator | {srcOperatorAddress} | -| end-time [0] | {delegationFinishTime} | +| Key | Value | +|--------------------|---------------------------| +| `action` | `begin_unbonding` | +| `category` | `staking` | +| `delegator` | {delegatorAccountAddress} | +| `source-validator` | {srcOperatorAddress} | +| `end-time` [0] | {delegationFinishTime} | * [0] Time is formatted in the RFC3339 standard diff --git a/types/tags.go b/types/tags.go index a6726200e5cd..aa98eddba8a8 100644 --- a/types/tags.go +++ b/types/tags.go @@ -71,6 +71,7 @@ func MakeTag(k string, v string) Tag { // common tags var ( TagAction = "action" + TagCategory = "category" TagSrcValidator = "source-validator" TagDstValidator = "destination-validator" TagDelegator = "delegator" diff --git a/x/bank/handler.go b/x/bank/handler.go index e58738135158..ca8654feb641 100644 --- a/x/bank/handler.go +++ b/x/bank/handler.go @@ -2,6 +2,7 @@ package bank import ( sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/bank/tags" ) // NewHandler returns a handler for "bank" type messages. @@ -24,13 +25,19 @@ func handleMsgSend(ctx sdk.Context, k Keeper, msg MsgSend) sdk.Result { if !k.GetSendEnabled(ctx) { return ErrSendDisabled(k.Codespace()).Result() } - tags, err := k.SendCoins(ctx, msg.FromAddress, msg.ToAddress, msg.Amount) + err := k.SendCoins(ctx, msg.FromAddress, msg.ToAddress, msg.Amount) if err != nil { return err.Result() } + resTags := sdk.NewTags( + tags.Category, tags.TxCategory, + tags.Sender, msg.FromAddress.String(), + tags.Recipient, msg.ToAddress.String(), + ) + return sdk.Result{ - Tags: tags, + Tags: resTags, } } @@ -40,12 +47,13 @@ func handleMsgMultiSend(ctx sdk.Context, k Keeper, msg MsgMultiSend) sdk.Result if !k.GetSendEnabled(ctx) { return ErrSendDisabled(k.Codespace()).Result() } - tags, err := k.InputOutputCoins(ctx, msg.Inputs, msg.Outputs) + resTags, err := k.InputOutputCoins(ctx, msg.Inputs, msg.Outputs) if err != nil { return err.Result() } + resTags = resTags.AppendTag(tags.Category, tags.TxCategory) return sdk.Result{ - Tags: tags, + Tags: resTags, } } diff --git a/x/bank/keeper.go b/x/bank/keeper.go index c5322ec5c73e..05a5b3d6e31d 100644 --- a/x/bank/keeper.go +++ b/x/bank/keeper.go @@ -6,6 +6,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth" + "github.com/cosmos/cosmos-sdk/x/bank/tags" "github.com/cosmos/cosmos-sdk/x/params" ) @@ -17,8 +18,8 @@ type Keeper interface { SendKeeper SetCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) sdk.Error - SubtractCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Tags, sdk.Error) - AddCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Tags, sdk.Error) + SubtractCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Error) + AddCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Error) InputOutputCoins(ctx sdk.Context, inputs []Input, outputs []Output) (sdk.Tags, sdk.Error) DelegateCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Tags, sdk.Error) @@ -60,10 +61,10 @@ func (keeper BaseKeeper) SetCoins( // SubtractCoins subtracts amt from the coins at the addr. func (keeper BaseKeeper) SubtractCoins( ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins, -) (sdk.Coins, sdk.Tags, sdk.Error) { +) (sdk.Coins, sdk.Error) { if !amt.IsValid() { - return nil, nil, sdk.ErrInvalidCoins(amt.String()) + return nil, sdk.ErrInvalidCoins(amt.String()) } return subtractCoins(ctx, keeper.ak, addr, amt) } @@ -71,10 +72,10 @@ func (keeper BaseKeeper) SubtractCoins( // AddCoins adds amt to the coins at the addr. func (keeper BaseKeeper) AddCoins( ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins, -) (sdk.Coins, sdk.Tags, sdk.Error) { +) (sdk.Coins, sdk.Error) { if !amt.IsValid() { - return nil, nil, sdk.ErrInvalidCoins(amt.String()) + return nil, sdk.ErrInvalidCoins(amt.String()) } return addCoins(ctx, keeper.ak, addr, amt) } @@ -119,7 +120,7 @@ func (keeper BaseKeeper) UndelegateCoins( type SendKeeper interface { ViewKeeper - SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) (sdk.Tags, sdk.Error) + SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) sdk.Error GetSendEnabled(ctx sdk.Context) bool SetSendEnabled(ctx sdk.Context, enabled bool) @@ -150,10 +151,10 @@ func NewBaseSendKeeper(ak auth.AccountKeeper, // SendCoins moves coins from one account to another func (keeper BaseSendKeeper) SendCoins( ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins, -) (sdk.Tags, sdk.Error) { +) sdk.Error { if !amt.IsValid() { - return nil, sdk.ErrInvalidCoins(amt.String()) + return sdk.ErrInvalidCoins(amt.String()) } return sendCoins(ctx, keeper.ak, fromAddr, toAddr, amt) } @@ -249,10 +250,10 @@ func setAccount(ctx sdk.Context, ak auth.AccountKeeper, acc auth.Account) { // subtractCoins subtracts amt coins from an account with the given address addr. // // CONTRACT: If the account is a vesting account, the amount has to be spendable. -func subtractCoins(ctx sdk.Context, ak auth.AccountKeeper, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Tags, sdk.Error) { +func subtractCoins(ctx sdk.Context, ak auth.AccountKeeper, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Error) { if !amt.IsValid() { - return nil, nil, sdk.ErrInvalidCoins(amt.String()) + return nil, sdk.ErrInvalidCoins(amt.String()) } oldCoins, spendableCoins := sdk.NewCoins(), sdk.NewCoins() @@ -267,59 +268,57 @@ func subtractCoins(ctx sdk.Context, ak auth.AccountKeeper, addr sdk.AccAddress, // So the check here is sufficient instead of subtracting from oldCoins. _, hasNeg := spendableCoins.SafeSub(amt) if hasNeg { - return amt, nil, sdk.ErrInsufficientCoins( + return amt, sdk.ErrInsufficientCoins( fmt.Sprintf("insufficient account funds; %s < %s", spendableCoins, amt), ) } newCoins := oldCoins.Sub(amt) // should not panic as spendable coins was already checked err := setCoins(ctx, ak, addr, newCoins) - tags := sdk.NewTags(TagKeySender, addr.String()) - return newCoins, tags, err + return newCoins, err } // AddCoins adds amt to the coins at the addr. -func addCoins(ctx sdk.Context, am auth.AccountKeeper, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Tags, sdk.Error) { +func addCoins(ctx sdk.Context, am auth.AccountKeeper, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Error) { if !amt.IsValid() { - return nil, nil, sdk.ErrInvalidCoins(amt.String()) + return nil, sdk.ErrInvalidCoins(amt.String()) } oldCoins := getCoins(ctx, am, addr) newCoins := oldCoins.Add(amt) if newCoins.IsAnyNegative() { - return amt, nil, sdk.ErrInsufficientCoins( + return amt, sdk.ErrInsufficientCoins( fmt.Sprintf("insufficient account funds; %s < %s", oldCoins, amt), ) } err := setCoins(ctx, am, addr, newCoins) - tags := sdk.NewTags(TagKeyRecipient, addr.String()) - return newCoins, tags, err + return newCoins, err } // SendCoins moves coins from one account to another // Returns ErrInvalidCoins if amt is invalid. -func sendCoins(ctx sdk.Context, am auth.AccountKeeper, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) (sdk.Tags, sdk.Error) { +func sendCoins(ctx sdk.Context, am auth.AccountKeeper, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) sdk.Error { // Safety check ensuring that when sending coins the keeper must maintain the if !amt.IsValid() { - return nil, sdk.ErrInvalidCoins(amt.String()) + return sdk.ErrInvalidCoins(amt.String()) } - _, subTags, err := subtractCoins(ctx, am, fromAddr, amt) + _, err := subtractCoins(ctx, am, fromAddr, amt) if err != nil { - return nil, err + return err } - _, addTags, err := addCoins(ctx, am, toAddr, amt) + _, err = addCoins(ctx, am, toAddr, amt) if err != nil { - return nil, err + return err } - return subTags.AppendTags(addTags), nil + return nil } // InputOutputCoins handles a list of inputs and outputs @@ -334,19 +333,24 @@ func inputOutputCoins(ctx sdk.Context, am auth.AccountKeeper, inputs []Input, ou allTags := sdk.EmptyTags() for _, in := range inputs { - _, tags, err := subtractCoins(ctx, am, in.Address, in.Coins) + _, err := subtractCoins(ctx, am, in.Address, in.Coins) if err != nil { return nil, err } - allTags = allTags.AppendTags(tags) + + allTags = allTags.AppendTag( + tags.Sender, in.Address.String(), + ) } for _, out := range outputs { - _, tags, err := addCoins(ctx, am, out.Address, out.Coins) + _, err := addCoins(ctx, am, out.Address, out.Coins) if err != nil { return nil, err } - allTags = allTags.AppendTags(tags) + allTags = allTags.AppendTag( + tags.Recipient, out.Address.String(), + ) } return allTags, nil @@ -381,8 +385,8 @@ func delegateCoins( setAccount(ctx, ak, acc) return sdk.NewTags( - sdk.TagAction, TagActionDelegateCoins, - sdk.TagDelegator, []byte(addr.String()), + sdk.TagAction, tags.ActionDelegateCoins, + sdk.TagDelegator, addr.String(), ), nil } @@ -406,8 +410,8 @@ func undelegateCoins( setAccount(ctx, ak, acc) return sdk.NewTags( - sdk.TagAction, TagActionUndelegateCoins, - sdk.TagDelegator, []byte(addr.String()), + sdk.TagAction, tags.ActionUndelegateCoins, + sdk.TagDelegator, addr.String(), ), nil } diff --git a/x/bank/keeper_test.go b/x/bank/keeper_test.go index ee8e7e65568a..28db4a3dcc52 100644 --- a/x/bank/keeper_test.go +++ b/x/bank/keeper_test.go @@ -101,7 +101,7 @@ func TestKeeper(t *testing.T) { require.True(t, bankKeeper.GetCoins(ctx, addr).IsEqual(sdk.NewCoins(sdk.NewInt64Coin("foocoin", 10)))) require.True(t, bankKeeper.GetCoins(ctx, addr2).IsEqual(sdk.NewCoins(sdk.NewInt64Coin("foocoin", 5)))) - _, err2 := bankKeeper.SendCoins(ctx, addr, addr2, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 50))) + err2 := bankKeeper.SendCoins(ctx, addr, addr2, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 50))) require.Implements(t, (*sdk.Error)(nil), err2) require.True(t, bankKeeper.GetCoins(ctx, addr).IsEqual(sdk.NewCoins(sdk.NewInt64Coin("foocoin", 10)))) require.True(t, bankKeeper.GetCoins(ctx, addr2).IsEqual(sdk.NewCoins(sdk.NewInt64Coin("foocoin", 5)))) @@ -165,7 +165,7 @@ func TestSendKeeper(t *testing.T) { require.True(t, sendKeeper.GetCoins(ctx, addr).IsEqual(sdk.NewCoins(sdk.NewInt64Coin("foocoin", 10)))) require.True(t, sendKeeper.GetCoins(ctx, addr2).IsEqual(sdk.NewCoins(sdk.NewInt64Coin("foocoin", 5)))) - _, err := sendKeeper.SendCoins(ctx, addr, addr2, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 50))) + err := sendKeeper.SendCoins(ctx, addr, addr2, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 50))) require.Implements(t, (*sdk.Error)(nil), err) require.True(t, sendKeeper.GetCoins(ctx, addr).IsEqual(sdk.NewCoins(sdk.NewInt64Coin("foocoin", 10)))) require.True(t, sendKeeper.GetCoins(ctx, addr2).IsEqual(sdk.NewCoins(sdk.NewInt64Coin("foocoin", 5)))) @@ -178,7 +178,7 @@ func TestSendKeeper(t *testing.T) { // validate coins with invalid denoms or negative values cannot be sent // NOTE: We must use the Coin literal as the constructor does not allow // negative values. - _, err = sendKeeper.SendCoins(ctx, addr, addr2, sdk.Coins{sdk.Coin{"FOOCOIN", sdk.NewInt(-5)}}) + err = sendKeeper.SendCoins(ctx, addr, addr2, sdk.Coins{sdk.Coin{"FOOCOIN", sdk.NewInt(-5)}}) require.Error(t, err) } @@ -226,7 +226,7 @@ func TestVestingAccountSend(t *testing.T) { input.ak.SetAccount(ctx, vacc) // require that no coins be sendable at the beginning of the vesting schedule - _, err := bankKeeper.SendCoins(ctx, addr1, addr2, sendCoins) + err := bankKeeper.SendCoins(ctx, addr1, addr2, sendCoins) require.Error(t, err) // receive some coins @@ -235,7 +235,7 @@ func TestVestingAccountSend(t *testing.T) { // require that all vested coins are spendable plus any received ctx = ctx.WithBlockTime(now.Add(12 * time.Hour)) - _, err = bankKeeper.SendCoins(ctx, addr1, addr2, sendCoins) + err = bankKeeper.SendCoins(ctx, addr1, addr2, sendCoins) vacc = input.ak.GetAccount(ctx, addr1).(*auth.ContinuousVestingAccount) require.NoError(t, err) require.Equal(t, origCoins, vacc.GetCoins()) diff --git a/x/bank/tags.go b/x/bank/tags.go deleted file mode 100644 index 264d8930971d..000000000000 --- a/x/bank/tags.go +++ /dev/null @@ -1,10 +0,0 @@ -package bank - -// Tag keys and values -var ( - TagActionUndelegateCoins = []byte("undelegateCoins") - TagActionDelegateCoins = []byte("delegateCoins") - - TagKeyRecipient = "recipient" - TagKeySender = "sender" -) diff --git a/x/bank/tags/tags.go b/x/bank/tags/tags.go new file mode 100644 index 000000000000..b4586818335c --- /dev/null +++ b/x/bank/tags/tags.go @@ -0,0 +1,17 @@ +package tags + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// Tag keys and values +var ( + ActionUndelegateCoins = "undelegateCoins" + ActionDelegateCoins = "delegateCoins" + TxCategory = "bank" + + Action = sdk.TagAction + Category = sdk.TagCategory + Recipient = "recipient" + Sender = "sender" +) diff --git a/x/crisis/expected_keepers.go b/x/crisis/expected_keepers.go index e620bdd3aa49..9e505ca4c78f 100644 --- a/x/crisis/expected_keepers.go +++ b/x/crisis/expected_keepers.go @@ -16,5 +16,5 @@ type FeeCollectionKeeper interface { // expected bank keeper type BankKeeper interface { - SubtractCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Tags, sdk.Error) + SubtractCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Error) } diff --git a/x/crisis/handler.go b/x/crisis/handler.go index ae753804d1bd..0f69dbc27b72 100644 --- a/x/crisis/handler.go +++ b/x/crisis/handler.go @@ -26,7 +26,7 @@ func handleMsgVerifyInvariant(ctx sdk.Context, msg MsgVerifyInvariant, k Keeper) // remove the constant fee constantFee := sdk.NewCoins(k.GetConstantFee(ctx)) - _, _, err := k.bankKeeper.SubtractCoins(ctx, msg.Sender, constantFee) + _, err := k.bankKeeper.SubtractCoins(ctx, msg.Sender, constantFee) if err != nil { return err.Result() } diff --git a/x/distribution/handler.go b/x/distribution/handler.go index 081baa869f96..782aa0277381 100644 --- a/x/distribution/handler.go +++ b/x/distribution/handler.go @@ -32,11 +32,12 @@ func handleMsgModifyWithdrawAddress(ctx sdk.Context, msg types.MsgSetWithdrawAdd return err.Result() } - tags := sdk.NewTags( - tags.Delegator, []byte(msg.DelegatorAddress.String()), + resTags := sdk.NewTags( + tags.Category, tags.TxCategory, + tags.Delegator, msg.DelegatorAddress.String(), ) return sdk.Result{ - Tags: tags, + Tags: resTags, } } @@ -47,12 +48,13 @@ func handleMsgWithdrawDelegatorReward(ctx sdk.Context, msg types.MsgWithdrawDele return err.Result() } - tags := sdk.NewTags( - tags.Delegator, []byte(msg.DelegatorAddress.String()), - tags.Validator, []byte(msg.ValidatorAddress.String()), + resTags := sdk.NewTags( + tags.Category, tags.TxCategory, + tags.Delegator, msg.DelegatorAddress.String(), + tags.Validator, msg.ValidatorAddress.String(), ) return sdk.Result{ - Tags: tags, + Tags: resTags, } } @@ -63,10 +65,11 @@ func handleMsgWithdrawValidatorCommission(ctx sdk.Context, msg types.MsgWithdraw return err.Result() } - tags := sdk.NewTags( - tags.Validator, []byte(msg.ValidatorAddress.String()), + resTags := sdk.NewTags( + tags.Category, tags.TxCategory, + tags.Validator, msg.ValidatorAddress.String(), ) return sdk.Result{ - Tags: tags, + Tags: resTags, } } diff --git a/x/distribution/keeper/delegation.go b/x/distribution/keeper/delegation.go index f6d9bdc280a3..0bbe091519fd 100644 --- a/x/distribution/keeper/delegation.go +++ b/x/distribution/keeper/delegation.go @@ -140,7 +140,7 @@ func (k Keeper) withdrawDelegationRewards(ctx sdk.Context, val sdk.Validator, de // add coins to user account if !coins.IsZero() { withdrawAddr := k.GetDelegatorWithdrawAddr(ctx, del.GetDelegatorAddr()) - if _, _, err := k.bankKeeper.AddCoins(ctx, withdrawAddr, coins); err != nil { + if _, err := k.bankKeeper.AddCoins(ctx, withdrawAddr, coins); err != nil { return err } } diff --git a/x/distribution/keeper/fee_pool.go b/x/distribution/keeper/fee_pool.go index d8e6998db5e4..779a58d1393f 100644 --- a/x/distribution/keeper/fee_pool.go +++ b/x/distribution/keeper/fee_pool.go @@ -15,7 +15,7 @@ func (k Keeper) DistributeFeePool(ctx sdk.Context, amount sdk.Coins, receiveAddr } feePool.CommunityPool.Sub(sdk.NewDecCoins(amount)) - _, _, err := k.bankKeeper.AddCoins(ctx, receiveAddr, amount) + _, err := k.bankKeeper.AddCoins(ctx, receiveAddr, amount) if err != nil { return err } diff --git a/x/distribution/keeper/hooks.go b/x/distribution/keeper/hooks.go index 1ce7a1fd63dc..022c8d943ce1 100644 --- a/x/distribution/keeper/hooks.go +++ b/x/distribution/keeper/hooks.go @@ -46,7 +46,7 @@ func (h Hooks) AfterValidatorRemoved(ctx sdk.Context, _ sdk.ConsAddress, valAddr accAddr := sdk.AccAddress(valAddr) withdrawAddr := h.k.GetDelegatorWithdrawAddr(ctx, accAddr) - if _, _, err := h.k.bankKeeper.AddCoins(ctx, withdrawAddr, coins); err != nil { + if _, err := h.k.bankKeeper.AddCoins(ctx, withdrawAddr, coins); err != nil { panic(err) } } diff --git a/x/distribution/keeper/keeper.go b/x/distribution/keeper/keeper.go index 5741893aa323..2d1439dca0f8 100644 --- a/x/distribution/keeper/keeper.go +++ b/x/distribution/keeper/keeper.go @@ -89,7 +89,7 @@ func (k Keeper) WithdrawValidatorCommission(ctx sdk.Context, valAddr sdk.ValAddr accAddr := sdk.AccAddress(valAddr) withdrawAddr := k.GetDelegatorWithdrawAddr(ctx, accAddr) - if _, _, err := k.bankKeeper.AddCoins(ctx, withdrawAddr, coins); err != nil { + if _, err := k.bankKeeper.AddCoins(ctx, withdrawAddr, coins); err != nil { return err } } diff --git a/x/distribution/keeper/test_common.go b/x/distribution/keeper/test_common.go index 032cd3dfa33b..c21d6a8d2c6a 100644 --- a/x/distribution/keeper/test_common.go +++ b/x/distribution/keeper/test_common.go @@ -123,7 +123,7 @@ func CreateTestInputAdvanced(t *testing.T, isCheckTx bool, initPower int64, // fill all the addresses with some coins, set the loose pool tokens simultaneously for _, addr := range TestAddrs { pool := sk.GetPool(ctx) - _, _, err := bankKeeper.AddCoins(ctx, addr, sdk.Coins{ + _, err := bankKeeper.AddCoins(ctx, addr, sdk.Coins{ sdk.NewCoin(sk.GetParams(ctx).BondDenom, initCoins), }) require.Nil(t, err) diff --git a/x/distribution/tags/tags.go b/x/distribution/tags/tags.go index 21628daedb49..5d9fc070d2f6 100644 --- a/x/distribution/tags/tags.go +++ b/x/distribution/tags/tags.go @@ -1,4 +1,3 @@ -// nolint package tags import ( @@ -6,6 +5,9 @@ import ( ) var ( + TxCategory = "distribution" + Validator = sdk.TagSrcValidator Delegator = sdk.TagDelegator + Category = sdk.TagCategory ) diff --git a/x/distribution/types/expected_keepers.go b/x/distribution/types/expected_keepers.go index 4c09613290be..9d2c6a4e53c4 100644 --- a/x/distribution/types/expected_keepers.go +++ b/x/distribution/types/expected_keepers.go @@ -20,7 +20,7 @@ type StakingKeeper interface { // expected coin keeper type BankKeeper interface { - AddCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Tags, sdk.Error) + AddCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Error) } // expected fee collection keeper diff --git a/x/distribution/types/msg.go b/x/distribution/types/msg.go index 2f773d4732a4..4e39aaedb2d7 100644 --- a/x/distribution/types/msg.go +++ b/x/distribution/types/msg.go @@ -96,7 +96,7 @@ func NewMsgWithdrawValidatorCommission(valAddr sdk.ValAddress) MsgWithdrawValida } func (msg MsgWithdrawValidatorCommission) Route() string { return ModuleName } -func (msg MsgWithdrawValidatorCommission) Type() string { return "withdraw_validator_rewards_all" } +func (msg MsgWithdrawValidatorCommission) Type() string { return "withdraw_validator_commission" } // Return address that must sign over msg.GetSignBytes() func (msg MsgWithdrawValidatorCommission) GetSigners() []sdk.AccAddress { diff --git a/x/gov/expected_keepers.go b/x/gov/expected_keepers.go index 513c08ca07ea..bc80bcedcba1 100644 --- a/x/gov/expected_keepers.go +++ b/x/gov/expected_keepers.go @@ -7,6 +7,6 @@ type BankKeeper interface { GetCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins // TODO remove once governance doesn't require use of accounts - SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) (sdk.Tags, sdk.Error) + SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) sdk.Error SetSendEnabled(ctx sdk.Context, enabled bool) } diff --git a/x/gov/handler.go b/x/gov/handler.go index e51f1189513e..81592ba38eb6 100644 --- a/x/gov/handler.go +++ b/x/gov/handler.go @@ -47,8 +47,9 @@ func handleMsgSubmitProposal(ctx sdk.Context, keeper Keeper, msg MsgSubmitPropos } resTags := sdk.NewTags( - tags.Proposer, []byte(msg.Proposer.String()), tags.ProposalID, proposalIDStr, + tags.Category, tags.TxCategory, + tags.Proposer, msg.Proposer.String(), ) if votingStarted { @@ -68,9 +69,11 @@ func handleMsgDeposit(ctx sdk.Context, keeper Keeper, msg MsgDeposit) sdk.Result } proposalIDStr := fmt.Sprintf("%d", msg.ProposalID) + resTags := sdk.NewTags( - tags.Depositor, []byte(msg.Depositor.String()), tags.ProposalID, proposalIDStr, + tags.Category, tags.TxCategory, + tags.Depositor, msg.Depositor.String(), ) if votingStarted { @@ -88,10 +91,13 @@ func handleMsgVote(ctx sdk.Context, keeper Keeper, msg MsgVote) sdk.Result { return err.Result() } + proposalIDStr := fmt.Sprintf("%d", msg.ProposalID) + return sdk.Result{ Tags: sdk.NewTags( + tags.ProposalID, proposalIDStr, + tags.Category, tags.TxCategory, tags.Voter, msg.Voter.String(), - tags.ProposalID, fmt.Sprintf("%d", msg.ProposalID), ), } } diff --git a/x/gov/keeper.go b/x/gov/keeper.go index 46085cf2d986..a2216698bd64 100644 --- a/x/gov/keeper.go +++ b/x/gov/keeper.go @@ -382,7 +382,7 @@ func (keeper Keeper) AddDeposit(ctx sdk.Context, proposalID uint64, depositorAdd // Send coins from depositor's account to DepositedCoinsAccAddr account // TODO: Don't use an account for this purpose; it's clumsy and prone to misuse. - _, err := keeper.ck.SendCoins(ctx, depositorAddr, DepositedCoinsAccAddr, depositAmount) + err := keeper.ck.SendCoins(ctx, depositorAddr, DepositedCoinsAccAddr, depositAmount) if err != nil { return err, false } @@ -426,7 +426,7 @@ func (keeper Keeper) RefundDeposits(ctx sdk.Context, proposalID uint64) { deposit := &Deposit{} keeper.cdc.MustUnmarshalBinaryLengthPrefixed(depositsIterator.Value(), deposit) - _, err := keeper.ck.SendCoins(ctx, DepositedCoinsAccAddr, deposit.Depositor, deposit.Amount) + err := keeper.ck.SendCoins(ctx, DepositedCoinsAccAddr, deposit.Depositor, deposit.Amount) if err != nil { panic("should not happen") } @@ -445,7 +445,7 @@ func (keeper Keeper) DeleteDeposits(ctx sdk.Context, proposalID uint64) { keeper.cdc.MustUnmarshalBinaryLengthPrefixed(depositsIterator.Value(), deposit) // TODO: Find a way to do this without using accounts. - _, err := keeper.ck.SendCoins(ctx, DepositedCoinsAccAddr, BurnedDepositCoinsAccAddr, deposit.Amount) + err := keeper.ck.SendCoins(ctx, DepositedCoinsAccAddr, BurnedDepositCoinsAccAddr, deposit.Amount) if err != nil { panic("should not happen") } diff --git a/x/gov/tags/tags.go b/x/gov/tags/tags.go index 6f18b2596b49..15e94de7fbfd 100644 --- a/x/gov/tags/tags.go +++ b/x/gov/tags/tags.go @@ -9,8 +9,10 @@ var ( ActionProposalDropped = "proposal-dropped" ActionProposalPassed = "proposal-passed" ActionProposalRejected = "proposal-rejected" + TxCategory = "governance" Action = sdk.TagAction + Category = sdk.TagCategory Proposer = "proposer" ProposalID = "proposal-id" VotingPeriodStart = "voting-period-start" diff --git a/x/ibc/expected_keepers.go b/x/ibc/expected_keepers.go index f2b65f162471..54b70b4dd8ef 100644 --- a/x/ibc/expected_keepers.go +++ b/x/ibc/expected_keepers.go @@ -4,6 +4,6 @@ import sdk "github.com/cosmos/cosmos-sdk/types" // expected bank keeper type BankKeeper interface { - AddCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Tags, sdk.Error) - SubtractCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Tags, sdk.Error) + AddCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Error) + SubtractCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Error) } diff --git a/x/ibc/handler.go b/x/ibc/handler.go index 7d7bda5759cc..bdb871ada52f 100644 --- a/x/ibc/handler.go +++ b/x/ibc/handler.go @@ -22,7 +22,7 @@ func NewHandler(ibcm Mapper, ck BankKeeper) sdk.Handler { func handleIBCTransferMsg(ctx sdk.Context, ibcm Mapper, ck BankKeeper, msg MsgIBCTransfer) sdk.Result { packet := msg.IBCPacket - _, _, err := ck.SubtractCoins(ctx, packet.SrcAddr, packet.Coins) + _, err := ck.SubtractCoins(ctx, packet.SrcAddr, packet.Coins) if err != nil { return err.Result() } @@ -45,7 +45,7 @@ func handleIBCReceiveMsg(ctx sdk.Context, ibcm Mapper, ck BankKeeper, msg MsgIBC } // XXX Check that packet.Coins is valid and positive (nonzero) - _, _, err := ck.AddCoins(ctx, packet.DestAddr, packet.Coins) + _, err := ck.AddCoins(ctx, packet.DestAddr, packet.Coins) if err != nil { return err.Result() } diff --git a/x/ibc/ibc_test.go b/x/ibc/ibc_test.go index b796b9c63deb..286da66fd9c1 100644 --- a/x/ibc/ibc_test.go +++ b/x/ibc/ibc_test.go @@ -83,7 +83,7 @@ func newAddress() sdk.AccAddress { func getCoins(ck bank.Keeper, ctx sdk.Context, addr sdk.AccAddress) (sdk.Coins, sdk.Error) { zero := sdk.Coins(nil) - coins, _, err := ck.AddCoins(ctx, addr, zero) + coins, err := ck.AddCoins(ctx, addr, zero) return coins, err } @@ -97,7 +97,7 @@ func TestIBC(t *testing.T) { zero := sdk.Coins(nil) mycoins := sdk.Coins{sdk.NewInt64Coin("mycoin", 10)} - coins, _, err := input.bk.AddCoins(ctx, src, mycoins) + coins, err := input.bk.AddCoins(ctx, src, mycoins) require.Nil(t, err) require.Equal(t, mycoins, coins) diff --git a/x/slashing/handler.go b/x/slashing/handler.go index b623ac9b4e9d..7a04829f75a7 100644 --- a/x/slashing/handler.go +++ b/x/slashing/handler.go @@ -61,6 +61,7 @@ func handleMsgUnjail(ctx sdk.Context, msg MsgUnjail, k Keeper) sdk.Result { k.validatorSet.Unjail(ctx, consAddr) tags := sdk.NewTags( + tags.Category, tags.TxCategory, tags.Validator, msg.ValidatorAddr.String(), ) diff --git a/x/slashing/tags/tags.go b/x/slashing/tags/tags.go index cb92e3cd662f..328324be03bb 100644 --- a/x/slashing/tags/tags.go +++ b/x/slashing/tags/tags.go @@ -1,6 +1,13 @@ package tags +import ( + sdk "github.com/cosmos/cosmos-sdk/types" +) + // Slashing tags var ( + TxCategory = "slashing" + + Category = sdk.TagCategory Validator = "validator" ) diff --git a/x/slashing/test_common.go b/x/slashing/test_common.go index 13279d614e2a..19286d23efb8 100644 --- a/x/slashing/test_common.go +++ b/x/slashing/test_common.go @@ -81,7 +81,7 @@ func createTestInput(t *testing.T, defaults Params) (sdk.Context, bank.Keeper, s require.Nil(t, err) for _, addr := range addrs { - _, _, err = ck.AddCoins(ctx, sdk.AccAddress(addr), sdk.Coins{ + _, err = ck.AddCoins(ctx, sdk.AccAddress(addr), sdk.Coins{ {sk.GetParams(ctx).BondDenom, initCoins}, }) } diff --git a/x/staking/handler.go b/x/staking/handler.go index 6512ac1ba0f6..fd8408e27b20 100644 --- a/x/staking/handler.go +++ b/x/staking/handler.go @@ -77,6 +77,7 @@ func EndBlocker(ctx sdk.Context, k keeper.Keeper) ([]abci.ValidatorUpdate, sdk.T resTags.AppendTags(sdk.NewTags( tags.Action, tags.ActionCompleteRedelegation, + tags.Category, tags.TxCategory, tags.Delegator, dvvTriplet.DelegatorAddress.String(), tags.SrcValidator, dvvTriplet.ValidatorSrcAddress.String(), tags.DstValidator, dvvTriplet.ValidatorDstAddress.String(), @@ -142,13 +143,14 @@ func handleMsgCreateValidator(ctx sdk.Context, msg types.MsgCreateValidator, k k return err.Result() } - tags := sdk.NewTags( + resTags := sdk.NewTags( + tags.Category, tags.TxCategory, tags.DstValidator, msg.ValidatorAddress.String(), tags.Delegator, msg.DelegatorAddress.String(), ) return sdk.Result{ - Tags: tags, + Tags: resTags, } } @@ -216,6 +218,7 @@ func handleMsgDelegate(ctx sdk.Context, msg types.MsgDelegate, k keeper.Keeper) } resTags := sdk.NewTags( + tags.Category, tags.TxCategory, tags.Delegator, msg.DelegatorAddress.String(), tags.DstValidator, msg.ValidatorAddress.String(), ) @@ -240,6 +243,7 @@ func handleMsgUndelegate(ctx sdk.Context, msg types.MsgUndelegate, k keeper.Keep finishTime := types.MsgCdc.MustMarshalBinaryLengthPrefixed(completionTime) resTags := sdk.NewTags( + tags.Category, tags.TxCategory, tags.Delegator, msg.DelegatorAddress.String(), tags.SrcValidator, msg.ValidatorAddress.String(), tags.EndTime, completionTime.Format(time.RFC3339), @@ -265,6 +269,7 @@ func handleMsgBeginRedelegate(ctx sdk.Context, msg types.MsgBeginRedelegate, k k finishTime := types.MsgCdc.MustMarshalBinaryLengthPrefixed(completionTime) resTags := sdk.NewTags( + tags.Category, tags.TxCategory, tags.Delegator, msg.DelegatorAddress.String(), tags.SrcValidator, msg.ValidatorSrcAddress.String(), tags.DstValidator, msg.ValidatorDstAddress.String(), diff --git a/x/staking/keeper/test_common.go b/x/staking/keeper/test_common.go index 8edbe8e36714..9b5c442f1201 100644 --- a/x/staking/keeper/test_common.go +++ b/x/staking/keeper/test_common.go @@ -131,7 +131,7 @@ func CreateTestInput(t *testing.T, isCheckTx bool, initPower int64) (sdk.Context pool := keeper.GetPool(ctx) err := error(nil) if !initCoins.IsZero() { - _, _, err = ck.AddCoins(ctx, addr, sdk.Coins{ + _, err = ck.AddCoins(ctx, addr, sdk.Coins{ {keeper.BondDenom(ctx), initCoins}, }) } diff --git a/x/staking/tags/tags.go b/x/staking/tags/tags.go index 55be61848e77..442a84ecf55d 100644 --- a/x/staking/tags/tags.go +++ b/x/staking/tags/tags.go @@ -8,8 +8,10 @@ import ( var ( ActionCompleteUnbonding = "complete-unbonding" ActionCompleteRedelegation = "complete-redelegation" + TxCategory = "staking" Action = sdk.TagAction + Category = sdk.TagCategory SrcValidator = sdk.TagSrcValidator DstValidator = sdk.TagDstValidator Delegator = sdk.TagDelegator