cosmos-sdk/types/tx/direct_aux.go

72 lines
2.2 KiB
Go

package tx
import (
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
)
// ValidateBasic performs stateless validation of the sign doc.
func (s *SignDocDirectAux) ValidateBasic() error {
if len(s.BodyBytes) == 0 {
return sdkerrors.ErrInvalidRequest.Wrap("body bytes cannot be empty")
}
if s.PublicKey == nil {
return sdkerrors.ErrInvalidPubKey.Wrap("public key cannot be empty")
}
if s.Tip != nil {
if s.Tip.Tipper == "" {
return sdkerrors.ErrInvalidRequest.Wrap("tipper cannot be empty")
}
}
return nil
}
// UnpackInterfaces implements the UnpackInterfaceMessages.UnpackInterfaces method
func (s *SignDocDirectAux) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error {
return unpacker.UnpackAny(s.PublicKey, new(cryptotypes.PubKey))
}
// ValidateBasic performs stateless validation of the auxiliary tx.
func (a *AuxSignerData) ValidateBasic() error {
if a.Address == "" {
return sdkerrors.ErrInvalidRequest.Wrapf("address cannot be empty")
}
if a.Mode != signing.SignMode_SIGN_MODE_DIRECT_AUX && a.Mode != signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON {
return sdkerrors.ErrInvalidRequest.Wrapf("AuxTxBuilder can only sign with %s or %s", signing.SignMode_SIGN_MODE_DIRECT_AUX, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
}
if len(a.Sig) == 0 {
return sdkerrors.ErrNoSignatures.Wrap("signature cannot be empty")
}
return a.GetSignDoc().ValidateBasic()
}
// GetSignaturesV2 gets the SignatureV2 of the aux signer.
func (a *AuxSignerData) GetSignatureV2() (signing.SignatureV2, error) {
pk, ok := a.SignDoc.PublicKey.GetCachedValue().(cryptotypes.PubKey)
if !ok {
return signing.SignatureV2{}, sdkerrors.ErrInvalidType.Wrapf("expected %T, got %T", (cryptotypes.PubKey)(nil), pk)
}
return signing.SignatureV2{
PubKey: pk,
Data: &signing.SingleSignatureData{
SignMode: a.Mode,
Signature: a.Sig,
},
Sequence: a.SignDoc.Sequence,
}, nil
}
// UnpackInterfaces implements the UnpackInterfaceMessages.UnpackInterfaces method
func (a *AuxSignerData) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error {
return a.GetSignDoc().UnpackInterfaces(unpacker)
}