github.com/onflow/flow-go@v0.35.7-crescendo-preview.23-atree-inlining/fvm/errors/txVerifier.go (about)

     1  package errors
     2  
     3  import (
     4  	"github.com/onflow/flow-go/model/flow"
     5  )
     6  
     7  // NewInvalidProposalSignatureError constructs a new CodedError which indicates
     8  // that no valid signature is provided for the proposal key.
     9  func NewInvalidProposalSignatureError(
    10  	proposal flow.ProposalKey,
    11  	err error,
    12  ) CodedError {
    13  	return WrapCodedError(
    14  		ErrCodeInvalidProposalSignatureError,
    15  		err,
    16  		"invalid proposal key: public key %d on account %s does not have a "+
    17  			"valid signature",
    18  		proposal.KeyIndex,
    19  		proposal.Address)
    20  }
    21  
    22  // InvalidProposalSeqNumberError indicates that proposal key sequence number does not match the on-chain value.
    23  type InvalidProposalSeqNumberError struct {
    24  	currentSeqNumber  uint64
    25  	providedSeqNumber uint64
    26  
    27  	CodedError
    28  }
    29  
    30  // NewInvalidProposalSeqNumberError constructs a new InvalidProposalSeqNumberError
    31  func NewInvalidProposalSeqNumberError(
    32  	proposal flow.ProposalKey,
    33  	currentSeqNumber uint64,
    34  ) CodedError {
    35  	return InvalidProposalSeqNumberError{
    36  		currentSeqNumber:  currentSeqNumber,
    37  		providedSeqNumber: proposal.SequenceNumber,
    38  		CodedError: NewCodedError(
    39  			ErrCodeInvalidProposalSeqNumberError,
    40  			"invalid proposal key: public key %d on account %s has sequence "+
    41  				"number %d, but given %d",
    42  			proposal.KeyIndex,
    43  			proposal.Address,
    44  			currentSeqNumber,
    45  			proposal.SequenceNumber),
    46  	}
    47  }
    48  
    49  // CurrentSeqNumber returns the current sequence number
    50  func (e InvalidProposalSeqNumberError) CurrentSeqNumber() uint64 {
    51  	return e.currentSeqNumber
    52  }
    53  
    54  // ProvidedSeqNumber returns the provided sequence number
    55  func (e InvalidProposalSeqNumberError) ProvidedSeqNumber() uint64 {
    56  	return e.providedSeqNumber
    57  }
    58  
    59  // NewInvalidPayloadSignatureError constructs a new CodedError which indicates
    60  // that signature verification for a key in this transaction has failed. This
    61  // error is the result of failure in any of the following conditions:
    62  // - provided hashing method is not supported
    63  // - signature size or format is invalid
    64  // - signature verification failed
    65  func NewInvalidPayloadSignatureError(
    66  	txnSig flow.TransactionSignature,
    67  	err error,
    68  ) CodedError {
    69  	return WrapCodedError(
    70  		ErrCodeInvalidPayloadSignatureError,
    71  		err,
    72  		"invalid payload signature: public key %d on account %s does not have"+
    73  			" a valid signature",
    74  		txnSig.KeyIndex,
    75  		txnSig.Address)
    76  }
    77  
    78  func IsInvalidPayloadSignatureError(err error) bool {
    79  	return HasErrorCode(err, ErrCodeInvalidPayloadSignatureError)
    80  }
    81  
    82  // NewInvalidEnvelopeSignatureError constructs a new CodedError which indicates
    83  // that signature verification for a envelope key in this transaction has
    84  // failed. Tthis error is the result of failure in any of the following
    85  // conditions:
    86  // - provided hashing method is not supported
    87  // - signature size or format is invalid
    88  // - signature verification failed
    89  func NewInvalidEnvelopeSignatureError(
    90  	txnSig flow.TransactionSignature,
    91  	err error,
    92  ) CodedError {
    93  	return WrapCodedError(
    94  		ErrCodeInvalidEnvelopeSignatureError,
    95  		err,
    96  		"invalid envelope key: public key %d on account %s does not have a "+
    97  			"valid signature",
    98  		txnSig.KeyIndex,
    99  		txnSig.Address)
   100  }
   101  
   102  func IsInvalidEnvelopeSignatureError(err error) bool {
   103  	return HasErrorCode(err, ErrCodeInvalidEnvelopeSignatureError)
   104  }