refactor!: change GetSigners return type to []sdk.AccAddress (#9915)
<!-- The default pull request template is for types feat, fix, or refactor. For other templates, add one of the following parameters to the url: - template=docs.md - template=other.md --> ## Description Changes the `sdk.Msg` interface method `GetSigners() []string` to `GetSigners() []sdk.AccAddress` Closes: #9885 +change GetSigner return type +defer address checking to each msg's `ValidateBasic` method +clean up consistency/redundancy issues in validate basic --- ### Author Checklist *All items are required. Please add a note to the item if the item is not applicable and please add links to any relevant follow up issues.* I have... - [ ] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] added `!` to the type prefix if API or client breaking change - [ ] targeted the correct branch (see [PR Targeting](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] provided a link to the relevant issue or specification - [ ] followed the guidelines for [building modules](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules) - [ ] included the necessary unit and integration [tests](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#testing) - [ ] added a changelog entry to `CHANGELOG.md` - [ ] included comments for [documenting Go code](https://blog.golang.org/godoc) - [ ] updated the relevant documentation or specification - [ ] reviewed "Files changed" and left comments if necessary - [ ] confirmed all CI checks have passed ### Reviewers Checklist *All items are required. Please add a note if the item is not applicable and please add your handle next to the items reviewed if you only reviewed selected items.* I have... - [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] confirmed `!` in the type prefix if API or client breaking change - [ ] confirmed all author checklist items have been addressed - [ ] reviewed state machine logic - [ ] reviewed API design and naming - [ ] reviewed documentation is accurate - [ ] reviewed tests and test coverage - [ ] manually tested (if applicable)
This commit is contained in:
parent
6a0eb507dc
commit
1dba673573
|
@ -59,7 +59,6 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
|||
* [\#9519](https://github.com/cosmos/cosmos-sdk/pull/9519) `DeleteDeposits` renamed to `DeleteAndBurnDeposits`, `RefundDeposits` renamed to `RefundAndDeleteDeposits`
|
||||
* (codec) [\#9521](https://github.com/cosmos/cosmos-sdk/pull/9521) Removed deprecated `clientCtx.JSONCodec` from `client.Context`.
|
||||
* (codec) [\#9521](https://github.com/cosmos/cosmos-sdk/pull/9521) Rename `EncodingConfig.Marshaler` to `Codec`.
|
||||
* [\#9418](https://github.com/cosmos/cosmos-sdk/pull/9418) `sdk.Msg`'s `GetSigners()` method updated to return `[]string`.
|
||||
* [\#9594](https://github.com/cosmos/cosmos-sdk/pull/9594) `RESTHandlerFn` argument is removed from the `gov/NewProposalHandler`.
|
||||
* [\#9594](https://github.com/cosmos/cosmos-sdk/pull/9594) `types/rest` package moved to `testutil/rest`.
|
||||
* [\#9432](https://github.com/cosmos/cosmos-sdk/pull/9432) `ConsensusParamsKeyTable` moved from `params/keeper` to `params/types`
|
||||
|
|
|
@ -19,7 +19,6 @@ import (
|
|||
"github.com/cosmos/cosmos-sdk/store/rootmulti"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
sdktx "github.com/cosmos/cosmos-sdk/types/tx"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/migrations/legacytx"
|
||||
)
|
||||
|
||||
|
@ -511,7 +510,7 @@ func validateBasicTxMsgs(msgs []sdk.Msg) error {
|
|||
}
|
||||
|
||||
for _, msg := range msgs {
|
||||
err := sdktx.ValidateMsg(msg)
|
||||
err := msg.ValidateBasic()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -720,7 +720,7 @@ func (msg msgCounter) ProtoMessage() {}
|
|||
func (msg msgCounter) Route() string { return routeMsgCounter }
|
||||
func (msg msgCounter) Type() string { return "counter1" }
|
||||
func (msg msgCounter) GetSignBytes() []byte { return nil }
|
||||
func (msg msgCounter) GetSigners() []string { return nil }
|
||||
func (msg msgCounter) GetSigners() []sdk.AccAddress { return nil }
|
||||
func (msg msgCounter) ValidateBasic() error {
|
||||
if msg.Counter >= 0 {
|
||||
return nil
|
||||
|
@ -765,7 +765,7 @@ func (msg msgCounter2) ProtoMessage() {}
|
|||
func (msg msgCounter2) Route() string { return routeMsgCounter2 }
|
||||
func (msg msgCounter2) Type() string { return "counter2" }
|
||||
func (msg msgCounter2) GetSignBytes() []byte { return nil }
|
||||
func (msg msgCounter2) GetSigners() []string { return nil }
|
||||
func (msg msgCounter2) GetSigners() []sdk.AccAddress { return nil }
|
||||
func (msg msgCounter2) ValidateBasic() error {
|
||||
if msg.Counter >= 0 {
|
||||
return nil
|
||||
|
@ -785,7 +785,7 @@ func (msg msgKeyValue) ProtoMessage() {}
|
|||
func (msg msgKeyValue) Route() string { return routeMsgKeyValue }
|
||||
func (msg msgKeyValue) Type() string { return "keyValue" }
|
||||
func (msg msgKeyValue) GetSignBytes() []byte { return nil }
|
||||
func (msg msgKeyValue) GetSigners() []string { return nil }
|
||||
func (msg msgKeyValue) GetSigners() []sdk.AccAddress { return nil }
|
||||
func (msg msgKeyValue) ValidateBasic() error {
|
||||
if msg.Key == nil {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "key cannot be nil")
|
||||
|
|
|
@ -35,7 +35,7 @@ func GenerateOrBroadcastTxWithFactory(clientCtx client.Context, txf Factory, msg
|
|||
// Right now, we're factorizing that call inside this function.
|
||||
// ref: https://github.com/cosmos/cosmos-sdk/pull/9236#discussion_r623803504
|
||||
for _, msg := range msgs {
|
||||
if err := tx.ValidateMsg(msg); err != nil {
|
||||
if err := msg.ValidateBasic(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ func (tx kvstoreTx) ValidateBasic() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (tx kvstoreTx) GetSigners() []string {
|
||||
func (tx kvstoreTx) GetSigners() []sdk.AccAddress {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -254,7 +254,7 @@ func (c converter) Ops(status string, msg sdk.Msg) ([]*rosettatypes.Operation, e
|
|||
op := &rosettatypes.Operation{
|
||||
Type: opName,
|
||||
Status: &status,
|
||||
Account: &rosettatypes.AccountIdentifier{Address: signer},
|
||||
Account: &rosettatypes.AccountIdentifier{Address: signer.String()},
|
||||
Metadata: meta,
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ package testdata
|
|||
|
||||
import (
|
||||
"encoding/json"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
|
@ -62,12 +63,24 @@ func (msg *TestMsg) GetSignBytes() []byte {
|
|||
}
|
||||
return sdk.MustSortJSON(bz)
|
||||
}
|
||||
func (msg *TestMsg) GetSigners() []string {
|
||||
return msg.Signers
|
||||
func (msg *TestMsg) GetSigners() []sdk.AccAddress {
|
||||
signers := make([]sdk.AccAddress, 0, len(msg.Signers))
|
||||
for _, addr := range msg.Signers {
|
||||
a, _ := sdk.AccAddressFromBech32(addr)
|
||||
signers = append(signers, a)
|
||||
}
|
||||
return signers
|
||||
}
|
||||
func (msg *TestMsg) ValidateBasic() error {
|
||||
for _, addr := range msg.Signers {
|
||||
if _, err := sdk.AccAddressFromBech32(addr); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid signer address: %s", err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (msg *TestMsg) ValidateBasic() error { return nil }
|
||||
|
||||
var _ sdk.Msg = &MsgCreateDog{}
|
||||
|
||||
func (msg *MsgCreateDog) GetSigners() []string { return []string{} }
|
||||
func (msg *MsgCreateDog) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{} }
|
||||
func (msg *MsgCreateDog) ValidateBasic() error { return nil }
|
||||
|
|
|
@ -97,14 +97,9 @@ func (t *Tx) GetSigners() []sdk.AccAddress {
|
|||
|
||||
for _, msg := range t.GetMsgs() {
|
||||
for _, addr := range msg.GetSigners() {
|
||||
if !seen[addr] {
|
||||
signer, err := sdk.AccAddressFromBech32(addr)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
signers = append(signers, signer)
|
||||
seen[addr] = true
|
||||
if !seen[addr.String()] {
|
||||
signers = append(signers, addr)
|
||||
seen[addr.String()] = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -195,22 +190,3 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) {
|
|||
registry.RegisterInterface("cosmos.tx.v1beta1.Tx", (*sdk.Tx)(nil))
|
||||
registry.RegisterImplementations((*sdk.Tx)(nil), &Tx{})
|
||||
}
|
||||
|
||||
// ValidateMsg calls the `sdk.Msg.ValidateBasic()`
|
||||
// also validates all the signers are valid bech32 addresses.
|
||||
func ValidateMsg(msg sdk.Msg) error {
|
||||
err := msg.ValidateBasic()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
signers := msg.GetSigners()
|
||||
for _, signer := range signers {
|
||||
_, err = sdk.AccAddressFromBech32(signer)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -1,43 +0,0 @@
|
|||
package tx_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
||||
"github.com/cosmos/cosmos-sdk/types/tx"
|
||||
"github.com/stretchr/testify/suite"
|
||||
)
|
||||
|
||||
type testMsgSuite struct {
|
||||
suite.Suite
|
||||
}
|
||||
|
||||
func TestValidateMsg(t *testing.T) {
|
||||
suite.Run(t, new(testMsgSuite))
|
||||
}
|
||||
|
||||
func (s *testMsgSuite) TestMsg() {
|
||||
cases := []struct {
|
||||
signer []byte
|
||||
expErr bool
|
||||
}{
|
||||
{
|
||||
[]byte(""),
|
||||
true,
|
||||
},
|
||||
{
|
||||
[]byte("validAddress"),
|
||||
false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, c := range cases {
|
||||
msg := testdata.NewTestMsg(c.signer)
|
||||
err := tx.ValidateMsg(msg)
|
||||
if c.expErr {
|
||||
s.Require().Error(err)
|
||||
} else {
|
||||
s.Require().NoError(err)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -15,10 +15,10 @@ type (
|
|||
// doesn't require access to any other information.
|
||||
ValidateBasic() error
|
||||
|
||||
// Signers returns the bech32-encoded addrs of signers that must sign.
|
||||
// Signers returns the addrs of signers that must sign.
|
||||
// CONTRACT: All signatures must be present to be valid.
|
||||
// CONTRACT: Returns addrs in some deterministic order.
|
||||
GetSigners() []string
|
||||
GetSigners() []AccAddress
|
||||
}
|
||||
|
||||
// Fee defines an interface for an application application-defined concrete
|
||||
|
|
|
@ -23,7 +23,7 @@ func (s *testMsgSuite) TestMsg() {
|
|||
|
||||
msg := testdata.NewTestMsg(accAddr)
|
||||
s.Require().NotNil(msg)
|
||||
s.Require().Equal([]string{accAddr.String()}, msg.GetSigners())
|
||||
s.Require().True(accAddr.Equals(msg.GetSigners()[0]))
|
||||
s.Require().Equal("TestMsg", msg.Route())
|
||||
s.Require().Equal("Test message", msg.Type())
|
||||
s.Require().Nil(msg.ValidateBasic())
|
||||
|
|
|
@ -11,7 +11,7 @@ import (
|
|||
authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing"
|
||||
)
|
||||
|
||||
// ValidateBasicDecorator will call tx.ValidateBasic, ValidateMsg(for each msg inside tx)
|
||||
// ValidateBasicDecorator will call tx.ValidateBasic, msg.ValidateBasic(for each msg inside tx)
|
||||
// and return any non-nil error.
|
||||
// If ValidateBasic passes, decorator calls next AnteHandler in chain. Note,
|
||||
// ValidateBasicDecorator decorator will not get executed on ReCheckTx since it
|
||||
|
|
|
@ -143,13 +143,9 @@ func (tx StdTx) GetSigners() []sdk.AccAddress {
|
|||
|
||||
for _, msg := range tx.GetMsgs() {
|
||||
for _, addr := range msg.GetSigners() {
|
||||
if !seen[addr] {
|
||||
signer, err := sdk.AccAddressFromBech32(addr)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
signers = append(signers, signer)
|
||||
seen[addr] = true
|
||||
if !seen[addr.String()] {
|
||||
signers = append(signers, addr)
|
||||
seen[addr.String()] = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,20 +30,11 @@ func (msg MsgCreateVestingAccount) Type() string { return TypeMsgCreateVestingAc
|
|||
|
||||
// ValidateBasic Implements Msg.
|
||||
func (msg MsgCreateVestingAccount) ValidateBasic() error {
|
||||
from, err := sdk.AccAddressFromBech32(msg.FromAddress)
|
||||
if err != nil {
|
||||
return err
|
||||
if _, err := sdk.AccAddressFromBech32(msg.FromAddress); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid 'from' address: %s", err)
|
||||
}
|
||||
to, err := sdk.AccAddressFromBech32(msg.ToAddress)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := sdk.VerifyAddressFormat(from); err != nil {
|
||||
return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid sender address: %s", err)
|
||||
}
|
||||
|
||||
if err := sdk.VerifyAddressFormat(to); err != nil {
|
||||
return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid recipient address: %s", err)
|
||||
if _, err := sdk.AccAddressFromBech32(msg.ToAddress); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid 'to' address: %s", err)
|
||||
}
|
||||
|
||||
if !msg.Amount.IsValid() {
|
||||
|
@ -68,6 +59,7 @@ func (msg MsgCreateVestingAccount) GetSignBytes() []byte {
|
|||
}
|
||||
|
||||
// GetSigners returns the expected signers for a MsgCreateVestingAccount.
|
||||
func (msg MsgCreateVestingAccount) GetSigners() []string {
|
||||
return []string{msg.FromAddress}
|
||||
func (msg MsgCreateVestingAccount) GetSigners() []sdk.AccAddress {
|
||||
addr, _ := sdk.AccAddressFromBech32(msg.FromAddress)
|
||||
return []sdk.AccAddress{addr}
|
||||
}
|
||||
|
|
|
@ -79,10 +79,8 @@ func (k Keeper) DispatchActions(ctx sdk.Context, grantee sdk.AccAddress, msgs []
|
|||
if len(signers) != 1 {
|
||||
return nil, sdkerrors.ErrInvalidRequest.Wrap("authorization can be given to msg with only one signer")
|
||||
}
|
||||
granter, err := sdk.AccAddressFromBech32(signers[0])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
granter := signers[0]
|
||||
|
||||
// if granter != grantee then check authorization.Accept, otherwise we implicitly accept.
|
||||
if !granter.Equals(grantee) {
|
||||
authorization, _ := k.GetCleanAuthorization(ctx, grantee, granter, sdk.MsgTypeURL(msg))
|
||||
|
|
|
@ -42,19 +42,20 @@ func NewMsgGrant(granter sdk.AccAddress, grantee sdk.AccAddress, a Authorization
|
|||
}
|
||||
|
||||
// GetSigners implements Msg
|
||||
func (msg MsgGrant) GetSigners() []string {
|
||||
return []string{msg.Granter}
|
||||
func (msg MsgGrant) GetSigners() []sdk.AccAddress {
|
||||
granter, _ := sdk.AccAddressFromBech32(msg.Granter)
|
||||
return []sdk.AccAddress{granter}
|
||||
}
|
||||
|
||||
// ValidateBasic implements Msg
|
||||
func (msg MsgGrant) ValidateBasic() error {
|
||||
granter, err := sdk.AccAddressFromBech32(msg.Granter)
|
||||
if err != nil {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "invalid granter address")
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid granter address: %s", err)
|
||||
}
|
||||
grantee, err := sdk.AccAddressFromBech32(msg.Grantee)
|
||||
if err != nil {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "invalid granter address")
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid grantee address: %s", err)
|
||||
}
|
||||
|
||||
if granter.Equals(grantee) {
|
||||
|
@ -126,19 +127,20 @@ func NewMsgRevoke(granter sdk.AccAddress, grantee sdk.AccAddress, msgTypeURL str
|
|||
}
|
||||
|
||||
// GetSigners implements Msg
|
||||
func (msg MsgRevoke) GetSigners() []string {
|
||||
return []string{msg.Granter}
|
||||
func (msg MsgRevoke) GetSigners() []sdk.AccAddress {
|
||||
granter, _ := sdk.AccAddressFromBech32(msg.Granter)
|
||||
return []sdk.AccAddress{granter}
|
||||
}
|
||||
|
||||
// ValidateBasic implements MsgRequest.ValidateBasic
|
||||
func (msg MsgRevoke) ValidateBasic() error {
|
||||
granter, err := sdk.AccAddressFromBech32(msg.Granter)
|
||||
if err != nil {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "invalid granter address")
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid granter address: %s", err)
|
||||
}
|
||||
grantee, err := sdk.AccAddressFromBech32(msg.Grantee)
|
||||
if err != nil {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "invalid grantee address")
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid grantee address: %s", err)
|
||||
}
|
||||
|
||||
if granter.Equals(grantee) {
|
||||
|
@ -201,15 +203,15 @@ func (msg MsgExec) GetMessages() ([]sdk.Msg, error) {
|
|||
}
|
||||
|
||||
// GetSigners implements Msg
|
||||
func (msg MsgExec) GetSigners() []string {
|
||||
return []string{msg.Grantee}
|
||||
func (msg MsgExec) GetSigners() []sdk.AccAddress {
|
||||
grantee, _ := sdk.AccAddressFromBech32(msg.Grantee)
|
||||
return []sdk.AccAddress{grantee}
|
||||
}
|
||||
|
||||
// ValidateBasic implements Msg
|
||||
func (msg MsgExec) ValidateBasic() error {
|
||||
_, err := sdk.AccAddressFromBech32(msg.Grantee)
|
||||
if err != nil {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "invalid grantee address")
|
||||
if _, err := sdk.AccAddressFromBech32(msg.Grantee); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid grantee address: %s", err)
|
||||
}
|
||||
|
||||
if len(msg.Msgs) == 0 {
|
||||
|
|
|
@ -27,14 +27,12 @@ func (msg MsgSend) Type() string { return TypeMsgSend }
|
|||
|
||||
// ValidateBasic Implements Msg.
|
||||
func (msg MsgSend) ValidateBasic() error {
|
||||
_, err := sdk.AccAddressFromBech32(msg.FromAddress)
|
||||
if err != nil {
|
||||
return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid sender address (%s)", err)
|
||||
if _, err := sdk.AccAddressFromBech32(msg.FromAddress); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid from address: %s", err)
|
||||
}
|
||||
|
||||
_, err = sdk.AccAddressFromBech32(msg.ToAddress)
|
||||
if err != nil {
|
||||
return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid recipient address (%s)", err)
|
||||
if _, err := sdk.AccAddressFromBech32(msg.ToAddress); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid to address: %s", err)
|
||||
}
|
||||
|
||||
if !msg.Amount.IsValid() {
|
||||
|
@ -54,8 +52,9 @@ func (msg MsgSend) GetSignBytes() []byte {
|
|||
}
|
||||
|
||||
// GetSigners Implements Msg.
|
||||
func (msg MsgSend) GetSigners() []string {
|
||||
return []string{msg.FromAddress}
|
||||
func (msg MsgSend) GetSigners() []sdk.AccAddress {
|
||||
fromAddress, _ := sdk.AccAddressFromBech32(msg.FromAddress)
|
||||
return []sdk.AccAddress{fromAddress}
|
||||
}
|
||||
|
||||
var _ sdk.Msg = &MsgMultiSend{}
|
||||
|
@ -92,10 +91,11 @@ func (msg MsgMultiSend) GetSignBytes() []byte {
|
|||
}
|
||||
|
||||
// GetSigners Implements Msg.
|
||||
func (msg MsgMultiSend) GetSigners() []string {
|
||||
addrs := make([]string, len(msg.Inputs))
|
||||
func (msg MsgMultiSend) GetSigners() []sdk.AccAddress {
|
||||
addrs := make([]sdk.AccAddress, len(msg.Inputs))
|
||||
for i, in := range msg.Inputs {
|
||||
addrs[i] = in.Address
|
||||
inAddr, _ := sdk.AccAddressFromBech32(in.Address)
|
||||
addrs[i] = inAddr
|
||||
}
|
||||
|
||||
return addrs
|
||||
|
@ -103,9 +103,8 @@ func (msg MsgMultiSend) GetSigners() []string {
|
|||
|
||||
// ValidateBasic - validate transaction input
|
||||
func (in Input) ValidateBasic() error {
|
||||
_, err := sdk.AccAddressFromBech32(in.Address)
|
||||
if err != nil {
|
||||
return err
|
||||
if _, err := sdk.AccAddressFromBech32(in.Address); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid input address: %s", err)
|
||||
}
|
||||
|
||||
if !in.Coins.IsValid() {
|
||||
|
@ -130,9 +129,8 @@ func NewInput(addr sdk.AccAddress, coins sdk.Coins) Input {
|
|||
|
||||
// ValidateBasic - validate transaction output
|
||||
func (out Output) ValidateBasic() error {
|
||||
_, err := sdk.AccAddressFromBech32(out.Address)
|
||||
if err != nil {
|
||||
return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid output address (%s)", err)
|
||||
if _, err := sdk.AccAddressFromBech32(out.Address); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid output address: %s", err)
|
||||
}
|
||||
|
||||
if !out.Coins.IsValid() {
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package types
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
@ -40,8 +39,8 @@ func TestMsgSendValidation(t *testing.T) {
|
|||
{"", NewMsgSend(addr1, addrLong, atom123)}, // valid send with long addr recipient
|
||||
{": invalid coins", NewMsgSend(addr1, addr2, atom0)}, // non positive coin
|
||||
{"123atom,0eth: invalid coins", NewMsgSend(addr1, addr2, atom123eth0)}, // non positive coin in multicoins
|
||||
{"Invalid sender address (empty address string is not allowed): invalid address", NewMsgSend(addrEmpty, addr2, atom123)},
|
||||
{"Invalid recipient address (empty address string is not allowed): invalid address", NewMsgSend(addr1, addrEmpty, atom123)},
|
||||
{"invalid from address: empty address string is not allowed: invalid address", NewMsgSend(addrEmpty, addr2, atom123)},
|
||||
{"invalid to address: empty address string is not allowed: invalid address", NewMsgSend(addr1, addrEmpty, atom123)},
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
|
@ -104,7 +103,7 @@ func TestInputValidation(t *testing.T) {
|
|||
{"", NewInput(addr2, multiCoins)},
|
||||
{"", NewInput(addrLong, someCoins)},
|
||||
|
||||
{"empty address string is not allowed", NewInput(addrEmpty, someCoins)},
|
||||
{"invalid input address: empty address string is not allowed: invalid address", NewInput(addrEmpty, someCoins)},
|
||||
{": invalid coins", NewInput(addr1, emptyCoins)}, // invalid coins
|
||||
{": invalid coins", NewInput(addr1, emptyCoins2)}, // invalid coins
|
||||
{"10eth,0atom: invalid coins", NewInput(addr1, someEmptyCoins)}, // invalid coins
|
||||
|
@ -145,7 +144,7 @@ func TestOutputValidation(t *testing.T) {
|
|||
{"", NewOutput(addr2, multiCoins)},
|
||||
{"", NewOutput(addrLong, someCoins)},
|
||||
|
||||
{"Invalid output address (empty address string is not allowed): invalid address", NewOutput(addrEmpty, someCoins)},
|
||||
{"invalid output address: empty address string is not allowed: invalid address", NewOutput(addrEmpty, someCoins)},
|
||||
{": invalid coins", NewOutput(addr1, emptyCoins)}, // invalid coins
|
||||
{": invalid coins", NewOutput(addr1, emptyCoins2)}, // invalid coins
|
||||
{"10eth,0atom: invalid coins", NewOutput(addr1, someEmptyCoins)}, // invalid coins
|
||||
|
@ -241,12 +240,15 @@ func TestMsgMultiSendGetSigners(t *testing.T) {
|
|||
var msg = NewMsgMultiSend(inputs, nil)
|
||||
|
||||
res := msg.GetSigners()
|
||||
require.Equal(t, fmt.Sprintf("%v", addrs), fmt.Sprintf("%v", res))
|
||||
for i, signer := range res {
|
||||
require.Equal(t, signer.String(), addrs[i])
|
||||
}
|
||||
}
|
||||
|
||||
func TestMsgSendGetSigners(t *testing.T) {
|
||||
from := sdk.AccAddress([]byte("input111111111111111"))
|
||||
msg := NewMsgSend(from, sdk.AccAddress{}, sdk.NewCoins())
|
||||
res := msg.GetSigners()
|
||||
require.Equal(t, fmt.Sprintf("%v", res), fmt.Sprintf("%v", []string{from.String()}))
|
||||
require.Equal(t, 1, len(res))
|
||||
require.True(t, from.Equals(res[0]))
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package types
|
|||
|
||||
import (
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
)
|
||||
|
||||
// ensure Msg interface compliance at compile time
|
||||
|
@ -21,8 +22,9 @@ func (msg MsgVerifyInvariant) Route() string { return ModuleName }
|
|||
func (msg MsgVerifyInvariant) Type() string { return "verify_invariant" }
|
||||
|
||||
// get the bytes for the message signer to sign on
|
||||
func (msg MsgVerifyInvariant) GetSigners() []string {
|
||||
return []string{msg.Sender}
|
||||
func (msg MsgVerifyInvariant) GetSigners() []sdk.AccAddress {
|
||||
sender, _ := sdk.AccAddressFromBech32(msg.Sender)
|
||||
return []sdk.AccAddress{sender}
|
||||
}
|
||||
|
||||
// GetSignBytes gets the sign bytes for the msg MsgVerifyInvariant
|
||||
|
@ -33,8 +35,8 @@ func (msg MsgVerifyInvariant) GetSignBytes() []byte {
|
|||
|
||||
// quick validity check
|
||||
func (msg MsgVerifyInvariant) ValidateBasic() error {
|
||||
if msg.Sender == "" {
|
||||
return ErrNoSender
|
||||
if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid sender address: %s", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -27,8 +27,9 @@ func (msg MsgSetWithdrawAddress) Route() string { return ModuleName }
|
|||
func (msg MsgSetWithdrawAddress) Type() string { return TypeMsgSetWithdrawAddress }
|
||||
|
||||
// Return address that must sign over msg.GetSignBytes()
|
||||
func (msg MsgSetWithdrawAddress) GetSigners() []string {
|
||||
return []string{msg.DelegatorAddress}
|
||||
func (msg MsgSetWithdrawAddress) GetSigners() []sdk.AccAddress {
|
||||
delegator, _ := sdk.AccAddressFromBech32(msg.DelegatorAddress)
|
||||
return []sdk.AccAddress{delegator}
|
||||
}
|
||||
|
||||
// get the bytes for the message signer to sign on
|
||||
|
@ -39,11 +40,11 @@ func (msg MsgSetWithdrawAddress) GetSignBytes() []byte {
|
|||
|
||||
// quick validity check
|
||||
func (msg MsgSetWithdrawAddress) ValidateBasic() error {
|
||||
if msg.DelegatorAddress == "" {
|
||||
return ErrEmptyDelegatorAddr
|
||||
if _, err := sdk.AccAddressFromBech32(msg.DelegatorAddress); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid delegator address: %s", err)
|
||||
}
|
||||
if msg.WithdrawAddress == "" {
|
||||
return ErrEmptyWithdrawAddr
|
||||
if _, err := sdk.AccAddressFromBech32(msg.WithdrawAddress); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid withdraw address: %s", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
@ -60,8 +61,9 @@ func (msg MsgWithdrawDelegatorReward) Route() string { return ModuleName }
|
|||
func (msg MsgWithdrawDelegatorReward) Type() string { return TypeMsgWithdrawDelegatorReward }
|
||||
|
||||
// Return address that must sign over msg.GetSignBytes()
|
||||
func (msg MsgWithdrawDelegatorReward) GetSigners() []string {
|
||||
return []string{msg.DelegatorAddress}
|
||||
func (msg MsgWithdrawDelegatorReward) GetSigners() []sdk.AccAddress {
|
||||
delegator, _ := sdk.AccAddressFromBech32(msg.DelegatorAddress)
|
||||
return []sdk.AccAddress{delegator}
|
||||
}
|
||||
|
||||
// get the bytes for the message signer to sign on
|
||||
|
@ -72,11 +74,11 @@ func (msg MsgWithdrawDelegatorReward) GetSignBytes() []byte {
|
|||
|
||||
// quick validity check
|
||||
func (msg MsgWithdrawDelegatorReward) ValidateBasic() error {
|
||||
if msg.DelegatorAddress == "" {
|
||||
return ErrEmptyDelegatorAddr
|
||||
if _, err := sdk.AccAddressFromBech32(msg.DelegatorAddress); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid delegator address: %s", err)
|
||||
}
|
||||
if msg.ValidatorAddress == "" {
|
||||
return ErrEmptyValidatorAddr
|
||||
if _, err := sdk.ValAddressFromBech32(msg.ValidatorAddress); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -91,12 +93,9 @@ func (msg MsgWithdrawValidatorCommission) Route() string { return ModuleName }
|
|||
func (msg MsgWithdrawValidatorCommission) Type() string { return TypeMsgWithdrawValidatorCommission }
|
||||
|
||||
// Return address that must sign over msg.GetSignBytes()
|
||||
func (msg MsgWithdrawValidatorCommission) GetSigners() []string {
|
||||
valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return []string{sdk.AccAddress(valAddr).String()}
|
||||
func (msg MsgWithdrawValidatorCommission) GetSigners() []sdk.AccAddress {
|
||||
valAddr, _ := sdk.ValAddressFromBech32(msg.ValidatorAddress)
|
||||
return []sdk.AccAddress{sdk.AccAddress(valAddr)}
|
||||
}
|
||||
|
||||
// get the bytes for the message signer to sign on
|
||||
|
@ -107,8 +106,8 @@ func (msg MsgWithdrawValidatorCommission) GetSignBytes() []byte {
|
|||
|
||||
// quick validity check
|
||||
func (msg MsgWithdrawValidatorCommission) ValidateBasic() error {
|
||||
if msg.ValidatorAddress == "" {
|
||||
return ErrEmptyValidatorAddr
|
||||
if _, err := sdk.ValAddressFromBech32(msg.ValidatorAddress); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -130,8 +129,9 @@ func (msg MsgFundCommunityPool) Type() string { return TypeMsgFundCommunityPool
|
|||
|
||||
// GetSigners returns the signer addresses that are expected to sign the result
|
||||
// of GetSignBytes.
|
||||
func (msg MsgFundCommunityPool) GetSigners() []string {
|
||||
return []string{msg.Depositor}
|
||||
func (msg MsgFundCommunityPool) GetSigners() []sdk.AccAddress {
|
||||
depositor, _ := sdk.AccAddressFromBech32(msg.Depositor)
|
||||
return []sdk.AccAddress{depositor}
|
||||
}
|
||||
|
||||
// GetSignBytes returns the raw bytes for a MsgFundCommunityPool message that
|
||||
|
@ -146,9 +146,8 @@ func (msg MsgFundCommunityPool) ValidateBasic() error {
|
|||
if !msg.Amount.IsValid() {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, msg.Amount.String())
|
||||
}
|
||||
if msg.Depositor == "" {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, msg.Depositor)
|
||||
if _, err := sdk.AccAddressFromBech32(msg.Depositor); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid depositor address: %s", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -44,8 +44,8 @@ func (m MsgSubmitEvidence) Type() string { return TypeMsgSubmitEvidence }
|
|||
|
||||
// ValidateBasic performs basic (non-state-dependant) validation on a MsgSubmitEvidence.
|
||||
func (m MsgSubmitEvidence) ValidateBasic() error {
|
||||
if m.Submitter == "" {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, m.Submitter)
|
||||
if _, err := sdk.AccAddressFromBech32(m.Submitter); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid submitter address: %s", err)
|
||||
}
|
||||
|
||||
evi := m.GetEvidence()
|
||||
|
@ -66,8 +66,9 @@ func (m MsgSubmitEvidence) GetSignBytes() []byte {
|
|||
}
|
||||
|
||||
// GetSigners returns the single expected signer for a MsgSubmitEvidence.
|
||||
func (m MsgSubmitEvidence) GetSigners() []string {
|
||||
return []string{m.Submitter}
|
||||
func (m MsgSubmitEvidence) GetSigners() []sdk.AccAddress {
|
||||
submitter, _ := sdk.AccAddressFromBech32(m.Submitter)
|
||||
return []sdk.AccAddress{submitter}
|
||||
}
|
||||
|
||||
func (m MsgSubmitEvidence) GetEvidence() exported.Evidence {
|
||||
|
|
|
@ -54,7 +54,7 @@ func TestMsgSubmitEvidence(t *testing.T) {
|
|||
require.Equal(t, tc.expectErr, tc.msg.ValidateBasic() != nil, "unexpected result for tc #%d", i)
|
||||
|
||||
if !tc.expectErr {
|
||||
require.Equal(t, tc.msg.GetSigners(), []string{tc.submitter.String()}, "unexpected result for tc #%d", i)
|
||||
require.Equal(t, tc.msg.GetSigners(), []sdk.AccAddress{tc.submitter}, "unexpected result for tc #%d", i)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,16 +38,15 @@ func NewMsgGrantAllowance(feeAllowance FeeAllowanceI, granter, grantee sdk.AccAd
|
|||
|
||||
// ValidateBasic implements the sdk.Msg interface.
|
||||
func (msg MsgGrantAllowance) ValidateBasic() error {
|
||||
if msg.Granter == "" {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "missing granter address")
|
||||
if _, err := sdk.AccAddressFromBech32(msg.Granter); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid granter address: %s", err)
|
||||
}
|
||||
if msg.Grantee == "" {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "missing grantee address")
|
||||
if _, err := sdk.AccAddressFromBech32(msg.Grantee); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid grantee address: %s", err)
|
||||
}
|
||||
if msg.Grantee == msg.Granter {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "cannot self-grant fee authorization")
|
||||
}
|
||||
|
||||
allowance, err := msg.GetFeeAllowanceI()
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -57,8 +56,9 @@ func (msg MsgGrantAllowance) ValidateBasic() error {
|
|||
}
|
||||
|
||||
// GetSigners gets the granter account associated with an allowance
|
||||
func (msg MsgGrantAllowance) GetSigners() []string {
|
||||
return []string{msg.Granter}
|
||||
func (msg MsgGrantAllowance) GetSigners() []sdk.AccAddress {
|
||||
granter, _ := sdk.AccAddressFromBech32(msg.Granter)
|
||||
return []sdk.AccAddress{granter}
|
||||
}
|
||||
|
||||
// Type implements the LegacyMsg.Type method.
|
||||
|
@ -101,11 +101,11 @@ func NewMsgRevokeAllowance(granter sdk.AccAddress, grantee sdk.AccAddress) MsgRe
|
|||
|
||||
// ValidateBasic implements the sdk.Msg interface.
|
||||
func (msg MsgRevokeAllowance) ValidateBasic() error {
|
||||
if msg.Granter == "" {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "missing granter address")
|
||||
if _, err := sdk.AccAddressFromBech32(msg.Granter); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid granter address: %s", err)
|
||||
}
|
||||
if msg.Grantee == "" {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "missing grantee address")
|
||||
if _, err := sdk.AccAddressFromBech32(msg.Grantee); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid grantee address: %s", err)
|
||||
}
|
||||
if msg.Grantee == msg.Granter {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "addresses must be different")
|
||||
|
@ -116,8 +116,9 @@ func (msg MsgRevokeAllowance) ValidateBasic() error {
|
|||
|
||||
// GetSigners gets the granter address associated with an Allowance
|
||||
// to revoke.
|
||||
func (msg MsgRevokeAllowance) GetSigners() []string {
|
||||
return []string{msg.Granter}
|
||||
func (msg MsgRevokeAllowance) GetSigners() []sdk.AccAddress {
|
||||
granter, _ := sdk.AccAddressFromBech32(msg.Granter)
|
||||
return []sdk.AccAddress{granter}
|
||||
}
|
||||
|
||||
// Type implements the LegacyMsg.Type method.
|
||||
|
|
|
@ -64,7 +64,7 @@ func TestMsgGrantAllowance(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
|
||||
addrSlice := msg.GetSigners()
|
||||
require.Equal(t, tc.granter.String(), addrSlice[0])
|
||||
require.True(t, tc.granter.Equals(addrSlice[0]))
|
||||
|
||||
allowance, err := msg.GetFeeAllowanceI()
|
||||
require.NoError(t, err)
|
||||
|
@ -126,7 +126,7 @@ func TestMsgRevokeAllowance(t *testing.T) {
|
|||
if tc.valid {
|
||||
require.NoError(t, err)
|
||||
addrSlice := msg.GetSigners()
|
||||
require.Equal(t, tc.granter.String(), addrSlice[0])
|
||||
require.True(t, tc.granter.Equals(addrSlice[0]))
|
||||
} else {
|
||||
require.Error(t, err)
|
||||
}
|
||||
|
|
|
@ -88,7 +88,7 @@ func (s *IntegrationTestSuite) TestGenTxCmd() {
|
|||
s.Require().Len(msgs, 1)
|
||||
|
||||
s.Require().Equal(sdk.MsgTypeURL(&types.MsgCreateValidator{}), sdk.MsgTypeURL(msgs[0]))
|
||||
s.Require().Equal([]string{val.Address.String()}, msgs[0].GetSigners())
|
||||
s.Require().True(val.Address.Equals(msgs[0].GetSigners()[0]))
|
||||
s.Require().Equal(amount, msgs[0].(*types.MsgCreateValidator).Value)
|
||||
s.Require().NoError(tx.ValidateBasic())
|
||||
}
|
||||
|
|
|
@ -83,8 +83,8 @@ func (m MsgSubmitProposal) Type() string { return TypeMsgSubmitProposal }
|
|||
|
||||
// ValidateBasic implements Msg
|
||||
func (m MsgSubmitProposal) ValidateBasic() error {
|
||||
if m.Proposer == "" {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, m.Proposer)
|
||||
if _, err := sdk.AccAddressFromBech32(m.Proposer); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid proposer address: %s", err)
|
||||
}
|
||||
if !m.InitialDeposit.IsValid() {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, m.InitialDeposit.String())
|
||||
|
@ -114,8 +114,9 @@ func (m MsgSubmitProposal) GetSignBytes() []byte {
|
|||
}
|
||||
|
||||
// GetSigners implements Msg
|
||||
func (m MsgSubmitProposal) GetSigners() []string {
|
||||
return []string{m.Proposer}
|
||||
func (m MsgSubmitProposal) GetSigners() []sdk.AccAddress {
|
||||
proposer, _ := sdk.AccAddressFromBech32(m.Proposer)
|
||||
return []sdk.AccAddress{proposer}
|
||||
}
|
||||
|
||||
// String implements the Stringer interface
|
||||
|
@ -144,8 +145,8 @@ func (msg MsgDeposit) Type() string { return TypeMsgDeposit }
|
|||
|
||||
// ValidateBasic implements Msg
|
||||
func (msg MsgDeposit) ValidateBasic() error {
|
||||
if msg.Depositor == "" {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, msg.Depositor)
|
||||
if _, err := sdk.AccAddressFromBech32(msg.Depositor); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid depositor address: %s", err)
|
||||
}
|
||||
if !msg.Amount.IsValid() {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, msg.Amount.String())
|
||||
|
@ -170,8 +171,9 @@ func (msg MsgDeposit) GetSignBytes() []byte {
|
|||
}
|
||||
|
||||
// GetSigners implements Msg
|
||||
func (msg MsgDeposit) GetSigners() []string {
|
||||
return []string{msg.Depositor}
|
||||
func (msg MsgDeposit) GetSigners() []sdk.AccAddress {
|
||||
depositor, _ := sdk.AccAddressFromBech32(msg.Depositor)
|
||||
return []sdk.AccAddress{depositor}
|
||||
}
|
||||
|
||||
// NewMsgVote creates a message to cast a vote on an active proposal
|
||||
|
@ -188,10 +190,9 @@ func (msg MsgVote) Type() string { return TypeMsgVote }
|
|||
|
||||
// ValidateBasic implements Msg
|
||||
func (msg MsgVote) ValidateBasic() error {
|
||||
if msg.Voter == "" {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, msg.Voter)
|
||||
if _, err := sdk.AccAddressFromBech32(msg.Voter); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid voter address: %s", err)
|
||||
}
|
||||
|
||||
if !ValidVoteOption(msg.Option) {
|
||||
return sdkerrors.Wrap(ErrInvalidVote, msg.Option.String())
|
||||
}
|
||||
|
@ -212,8 +213,9 @@ func (msg MsgVote) GetSignBytes() []byte {
|
|||
}
|
||||
|
||||
// GetSigners implements Msg
|
||||
func (msg MsgVote) GetSigners() []string {
|
||||
return []string{msg.Voter}
|
||||
func (msg MsgVote) GetSigners() []sdk.AccAddress {
|
||||
voter, _ := sdk.AccAddressFromBech32(msg.Voter)
|
||||
return []sdk.AccAddress{voter}
|
||||
}
|
||||
|
||||
// NewMsgVoteWeighted creates a message to cast a vote on an active proposal
|
||||
|
@ -230,10 +232,9 @@ func (msg MsgVoteWeighted) Type() string { return TypeMsgVoteWeighted }
|
|||
|
||||
// ValidateBasic implements Msg
|
||||
func (msg MsgVoteWeighted) ValidateBasic() error {
|
||||
if msg.Voter == "" {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, msg.Voter)
|
||||
if _, err := sdk.AccAddressFromBech32(msg.Voter); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid voter address: %s", err)
|
||||
}
|
||||
|
||||
if len(msg.Options) == 0 {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, WeightedVoteOptions(msg.Options).String())
|
||||
}
|
||||
|
@ -275,6 +276,7 @@ func (msg MsgVoteWeighted) GetSignBytes() []byte {
|
|||
}
|
||||
|
||||
// GetSigners implements Msg
|
||||
func (msg MsgVoteWeighted) GetSigners() []string {
|
||||
return []string{msg.Voter}
|
||||
func (msg MsgVoteWeighted) GetSigners() []sdk.AccAddress {
|
||||
voter, _ := sdk.AccAddressFromBech32(msg.Voter)
|
||||
return []sdk.AccAddress{voter}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package types
|
|||
|
||||
import (
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
)
|
||||
|
||||
// slashing message types
|
||||
|
@ -22,12 +23,9 @@ func NewMsgUnjail(validatorAddr sdk.ValAddress) *MsgUnjail {
|
|||
|
||||
func (msg MsgUnjail) Route() string { return RouterKey }
|
||||
func (msg MsgUnjail) Type() string { return TypeMsgUnjail }
|
||||
func (msg MsgUnjail) GetSigners() []string {
|
||||
valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddr)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return []string{sdk.AccAddress(valAddr).String()}
|
||||
func (msg MsgUnjail) GetSigners() []sdk.AccAddress {
|
||||
valAddr, _ := sdk.ValAddressFromBech32(msg.ValidatorAddr)
|
||||
return []sdk.AccAddress{sdk.AccAddress(valAddr)}
|
||||
}
|
||||
|
||||
// GetSignBytes gets the bytes for the message signer to sign on
|
||||
|
@ -38,9 +36,8 @@ func (msg MsgUnjail) GetSignBytes() []byte {
|
|||
|
||||
// ValidateBasic validity check for the AnteHandler
|
||||
func (msg MsgUnjail) ValidateBasic() error {
|
||||
if msg.ValidatorAddr == "" {
|
||||
return ErrBadValidatorAddr
|
||||
if _, err := sdk.ValAddressFromBech32(msg.ValidatorAddr); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("validator input address: %s", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -60,16 +60,14 @@ func (msg MsgCreateValidator) Type() string { return TypeMsgCreateValidator }
|
|||
// must sign over msg.GetSignBytes().
|
||||
// If the validator address is not same as delegator's, then the validator must
|
||||
// sign the msg as well.
|
||||
func (msg MsgCreateValidator) GetSigners() []string {
|
||||
func (msg MsgCreateValidator) GetSigners() []sdk.AccAddress {
|
||||
// delegator is first signer so delegator pays fees
|
||||
addrs := []string{msg.DelegatorAddress}
|
||||
valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
delegator, _ := sdk.AccAddressFromBech32(msg.DelegatorAddress)
|
||||
addrs := []sdk.AccAddress{delegator}
|
||||
valAddr, _ := sdk.ValAddressFromBech32(msg.ValidatorAddress)
|
||||
|
||||
valAccAddr := sdk.AccAddress(valAddr).String()
|
||||
if msg.DelegatorAddress != valAccAddr {
|
||||
valAccAddr := sdk.AccAddress(valAddr)
|
||||
if !delegator.Equals(valAccAddr) {
|
||||
addrs = append(addrs, valAccAddr)
|
||||
}
|
||||
|
||||
|
@ -84,22 +82,14 @@ func (msg MsgCreateValidator) GetSignBytes() []byte {
|
|||
|
||||
// ValidateBasic implements the sdk.Msg interface.
|
||||
func (msg MsgCreateValidator) ValidateBasic() error {
|
||||
// note that unmarshaling from bech32 ensures either empty or valid
|
||||
// note that unmarshaling from bech32 ensures both non-empty and valid
|
||||
delAddr, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)
|
||||
if err != nil {
|
||||
return err
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid delegator address: %s", err)
|
||||
}
|
||||
if delAddr.Empty() {
|
||||
return ErrEmptyDelegatorAddr
|
||||
}
|
||||
|
||||
if msg.ValidatorAddress == "" {
|
||||
return ErrEmptyValidatorAddr
|
||||
}
|
||||
|
||||
valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress)
|
||||
if err != nil {
|
||||
return err
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err)
|
||||
}
|
||||
if !sdk.AccAddress(valAddr).Equals(delAddr) {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "validator address is invalid")
|
||||
|
@ -163,12 +153,9 @@ func (msg MsgEditValidator) Route() string { return RouterKey }
|
|||
func (msg MsgEditValidator) Type() string { return TypeMsgEditValidator }
|
||||
|
||||
// GetSigners implements the sdk.Msg interface.
|
||||
func (msg MsgEditValidator) GetSigners() []string {
|
||||
valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return []string{sdk.AccAddress(valAddr).String()}
|
||||
func (msg MsgEditValidator) GetSigners() []sdk.AccAddress {
|
||||
valAddr, _ := sdk.ValAddressFromBech32(msg.ValidatorAddress)
|
||||
return []sdk.AccAddress{sdk.AccAddress(valAddr)}
|
||||
}
|
||||
|
||||
// GetSignBytes implements the sdk.Msg interface.
|
||||
|
@ -179,8 +166,8 @@ func (msg MsgEditValidator) GetSignBytes() []byte {
|
|||
|
||||
// ValidateBasic implements the sdk.Msg interface.
|
||||
func (msg MsgEditValidator) ValidateBasic() error {
|
||||
if msg.ValidatorAddress == "" {
|
||||
return ErrEmptyValidatorAddr
|
||||
if _, err := sdk.ValAddressFromBech32(msg.ValidatorAddress); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err)
|
||||
}
|
||||
|
||||
if msg.Description == (Description{}) {
|
||||
|
@ -220,8 +207,9 @@ func (msg MsgDelegate) Route() string { return RouterKey }
|
|||
func (msg MsgDelegate) Type() string { return TypeMsgDelegate }
|
||||
|
||||
// GetSigners implements the sdk.Msg interface.
|
||||
func (msg MsgDelegate) GetSigners() []string {
|
||||
return []string{msg.DelegatorAddress}
|
||||
func (msg MsgDelegate) GetSigners() []sdk.AccAddress {
|
||||
delegator, _ := sdk.AccAddressFromBech32(msg.DelegatorAddress)
|
||||
return []sdk.AccAddress{delegator}
|
||||
}
|
||||
|
||||
// GetSignBytes implements the sdk.Msg interface.
|
||||
|
@ -232,12 +220,11 @@ func (msg MsgDelegate) GetSignBytes() []byte {
|
|||
|
||||
// ValidateBasic implements the sdk.Msg interface.
|
||||
func (msg MsgDelegate) ValidateBasic() error {
|
||||
if msg.DelegatorAddress == "" {
|
||||
return ErrEmptyDelegatorAddr
|
||||
if _, err := sdk.AccAddressFromBech32(msg.DelegatorAddress); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid delegator address: %s", err)
|
||||
}
|
||||
|
||||
if msg.ValidatorAddress == "" {
|
||||
return ErrEmptyValidatorAddr
|
||||
if _, err := sdk.ValAddressFromBech32(msg.ValidatorAddress); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err)
|
||||
}
|
||||
|
||||
if !msg.Amount.IsValid() || !msg.Amount.Amount.IsPositive() {
|
||||
|
@ -270,8 +257,9 @@ func (msg MsgBeginRedelegate) Route() string { return RouterKey }
|
|||
func (msg MsgBeginRedelegate) Type() string { return TypeMsgBeginRedelegate }
|
||||
|
||||
// GetSigners implements the sdk.Msg interface
|
||||
func (msg MsgBeginRedelegate) GetSigners() []string {
|
||||
return []string{msg.DelegatorAddress}
|
||||
func (msg MsgBeginRedelegate) GetSigners() []sdk.AccAddress {
|
||||
delegator, _ := sdk.AccAddressFromBech32(msg.DelegatorAddress)
|
||||
return []sdk.AccAddress{delegator}
|
||||
}
|
||||
|
||||
// GetSignBytes implements the sdk.Msg interface.
|
||||
|
@ -282,16 +270,14 @@ func (msg MsgBeginRedelegate) GetSignBytes() []byte {
|
|||
|
||||
// ValidateBasic implements the sdk.Msg interface.
|
||||
func (msg MsgBeginRedelegate) ValidateBasic() error {
|
||||
if msg.DelegatorAddress == "" {
|
||||
return ErrEmptyDelegatorAddr
|
||||
if _, err := sdk.AccAddressFromBech32(msg.DelegatorAddress); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid delegator address: %s", err)
|
||||
}
|
||||
|
||||
if msg.ValidatorSrcAddress == "" {
|
||||
return ErrEmptyValidatorAddr
|
||||
if _, err := sdk.ValAddressFromBech32(msg.ValidatorSrcAddress); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid source validator address: %s", err)
|
||||
}
|
||||
|
||||
if msg.ValidatorDstAddress == "" {
|
||||
return ErrEmptyValidatorAddr
|
||||
if _, err := sdk.ValAddressFromBech32(msg.ValidatorDstAddress); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid destination validator address: %s", err)
|
||||
}
|
||||
|
||||
if !msg.Amount.IsValid() || !msg.Amount.Amount.IsPositive() {
|
||||
|
@ -321,8 +307,9 @@ func (msg MsgUndelegate) Route() string { return RouterKey }
|
|||
func (msg MsgUndelegate) Type() string { return TypeMsgUndelegate }
|
||||
|
||||
// GetSigners implements the sdk.Msg interface.
|
||||
func (msg MsgUndelegate) GetSigners() []string {
|
||||
return []string{msg.DelegatorAddress}
|
||||
func (msg MsgUndelegate) GetSigners() []sdk.AccAddress {
|
||||
delegator, _ := sdk.AccAddressFromBech32(msg.DelegatorAddress)
|
||||
return []sdk.AccAddress{delegator}
|
||||
}
|
||||
|
||||
// GetSignBytes implements the sdk.Msg interface.
|
||||
|
@ -333,12 +320,11 @@ func (msg MsgUndelegate) GetSignBytes() []byte {
|
|||
|
||||
// ValidateBasic implements the sdk.Msg interface.
|
||||
func (msg MsgUndelegate) ValidateBasic() error {
|
||||
if msg.DelegatorAddress == "" {
|
||||
return ErrEmptyDelegatorAddr
|
||||
if _, err := sdk.AccAddressFromBech32(msg.DelegatorAddress); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid delegator address: %s", err)
|
||||
}
|
||||
|
||||
if msg.ValidatorAddress == "" {
|
||||
return ErrEmptyValidatorAddr
|
||||
if _, err := sdk.ValAddressFromBech32(msg.ValidatorAddress); err != nil {
|
||||
return sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err)
|
||||
}
|
||||
|
||||
if !msg.Amount.IsValid() || !msg.Amount.Amount.IsPositive() {
|
||||
|
|
Loading…
Reference in New Issue