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

     1  package signing
     2  
     3  import (
     4  	"fmt"
     5  
     6  	ibctx "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/ibc-adapter"
     7  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/tx/signing"
     8  )
     9  
    10  // SignModeHandlerMap is SignModeHandler that aggregates multiple SignModeHandler's into
    11  // a single handler
    12  type SignModeHandlerMap struct {
    13  	defaultMode      signing.SignMode
    14  	modes            []signing.SignMode
    15  	signModeHandlers map[signing.SignMode]SignModeHandler
    16  }
    17  
    18  var _ SignModeHandler = SignModeHandlerMap{}
    19  
    20  // NewSignModeHandlerMap returns a new SignModeHandlerMap with the provided defaultMode and handlers
    21  func NewSignModeHandlerMap(defaultMode signing.SignMode, handlers []SignModeHandler) SignModeHandlerMap {
    22  	handlerMap := make(map[signing.SignMode]SignModeHandler)
    23  	var modes []signing.SignMode
    24  
    25  	for _, h := range handlers {
    26  		for _, m := range h.Modes() {
    27  			if _, have := handlerMap[m]; have {
    28  				panic(fmt.Errorf("duplicate sign mode handler for mode %s", m))
    29  			}
    30  			handlerMap[m] = h
    31  			modes = append(modes, m)
    32  		}
    33  	}
    34  
    35  	return SignModeHandlerMap{
    36  		defaultMode:      defaultMode,
    37  		modes:            modes,
    38  		signModeHandlers: handlerMap,
    39  	}
    40  }
    41  
    42  // DefaultMode implements SignModeHandler.DefaultMode
    43  func (h SignModeHandlerMap) DefaultMode() signing.SignMode {
    44  	return h.defaultMode
    45  }
    46  
    47  // Modes implements SignModeHandler.Modes
    48  func (h SignModeHandlerMap) Modes() []signing.SignMode {
    49  	return h.modes
    50  }
    51  
    52  // DefaultMode implements SignModeHandler.GetSignBytes
    53  func (h SignModeHandlerMap) GetSignBytes(mode signing.SignMode, data SignerData, tx ibctx.Tx) ([]byte, error) {
    54  	handler, found := h.signModeHandlers[mode]
    55  	if !found {
    56  		return nil, fmt.Errorf("can't verify sign mode %s", mode.String())
    57  	}
    58  	return handler.GetSignBytes(mode, data, tx)
    59  }