72 lines
2.2 KiB
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)
|
|
}
|