github.com/Finschia/finschia-sdk@v0.48.1/x/auth/tx/direct.go (about)

     1  package tx
     2  
     3  import (
     4  	"fmt"
     5  
     6  	signingtypes "github.com/Finschia/finschia-sdk/types/tx/signing"
     7  
     8  	sdk "github.com/Finschia/finschia-sdk/types"
     9  	types "github.com/Finschia/finschia-sdk/types/tx"
    10  	"github.com/Finschia/finschia-sdk/x/auth/signing"
    11  )
    12  
    13  // signModeDirectHandler defines the SIGN_MODE_DIRECT SignModeHandler
    14  type signModeDirectHandler struct{}
    15  
    16  var _ signing.SignModeHandler = signModeDirectHandler{}
    17  
    18  // DefaultMode implements SignModeHandler.DefaultMode
    19  func (signModeDirectHandler) DefaultMode() signingtypes.SignMode {
    20  	return signingtypes.SignMode_SIGN_MODE_DIRECT
    21  }
    22  
    23  // Modes implements SignModeHandler.Modes
    24  func (signModeDirectHandler) Modes() []signingtypes.SignMode {
    25  	return []signingtypes.SignMode{signingtypes.SignMode_SIGN_MODE_DIRECT}
    26  }
    27  
    28  // GetSignBytes implements SignModeHandler.GetSignBytes
    29  func (signModeDirectHandler) GetSignBytes(mode signingtypes.SignMode, data signing.SignerData, tx sdk.Tx) ([]byte, error) {
    30  	if mode != signingtypes.SignMode_SIGN_MODE_DIRECT {
    31  		return nil, fmt.Errorf("expected %s, got %s", signingtypes.SignMode_SIGN_MODE_DIRECT, mode)
    32  	}
    33  
    34  	protoTx, ok := tx.(*wrapper)
    35  	if !ok {
    36  		return nil, fmt.Errorf("can only handle a protobuf Tx, got %T", tx)
    37  	}
    38  
    39  	bodyBz := protoTx.getBodyBytes()
    40  	authInfoBz := protoTx.getAuthInfoBytes()
    41  
    42  	return DirectSignBytes(bodyBz, authInfoBz, data.ChainID, data.AccountNumber)
    43  }
    44  
    45  // DirectSignBytes returns the SIGN_MODE_DIRECT sign bytes for the provided TxBody bytes, AuthInfo bytes, chain ID,
    46  // account number.
    47  func DirectSignBytes(bodyBytes, authInfoBytes []byte, chainID string, accnum uint64) ([]byte, error) {
    48  	signDoc := types.SignDoc{
    49  		BodyBytes:     bodyBytes,
    50  		AuthInfoBytes: authInfoBytes,
    51  		ChainId:       chainID,
    52  		AccountNumber: accnum,
    53  	}
    54  	return signDoc.Marshal()
    55  }