github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/auth/ibc-tx/direct.go (about)

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