github.com/cosmos/cosmos-sdk@v0.50.10/codec/testutil/codec.go (about)

     1  package testutil
     2  
     3  import (
     4  	"github.com/cosmos/gogoproto/proto"
     5  
     6  	"cosmossdk.io/x/tx/signing"
     7  
     8  	"github.com/cosmos/cosmos-sdk/codec"
     9  	"github.com/cosmos/cosmos-sdk/codec/address"
    10  	codectypes "github.com/cosmos/cosmos-sdk/codec/types"
    11  )
    12  
    13  // CodecOptions are options for creating a test codec.
    14  type CodecOptions struct {
    15  	AccAddressPrefix string
    16  	ValAddressPrefix string
    17  }
    18  
    19  // NewInterfaceRegistry returns a new InterfaceRegistry with the given options.
    20  func (o CodecOptions) NewInterfaceRegistry() codectypes.InterfaceRegistry {
    21  	accAddressPrefix := o.AccAddressPrefix
    22  	if accAddressPrefix == "" {
    23  		accAddressPrefix = "cosmos"
    24  	}
    25  
    26  	valAddressPrefix := o.ValAddressPrefix
    27  	if valAddressPrefix == "" {
    28  		valAddressPrefix = "cosmosvaloper"
    29  	}
    30  
    31  	ir, err := codectypes.NewInterfaceRegistryWithOptions(codectypes.InterfaceRegistryOptions{
    32  		ProtoFiles: proto.HybridResolver,
    33  		SigningOptions: signing.Options{
    34  			AddressCodec:          address.NewBech32Codec(accAddressPrefix),
    35  			ValidatorAddressCodec: address.NewBech32Codec(valAddressPrefix),
    36  		},
    37  	})
    38  	if err != nil {
    39  		panic(err)
    40  	}
    41  	return ir
    42  }
    43  
    44  // NewCodec returns a new codec with the given options.
    45  func (o CodecOptions) NewCodec() *codec.ProtoCodec {
    46  	return codec.NewProtoCodec(o.NewInterfaceRegistry())
    47  }