github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/ammswap/genesis.go (about)

     1  package ammswap
     2  
     3  import (
     4  	"fmt"
     5  
     6  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     7  	"github.com/fibonacci-chain/fbc/x/ammswap/types"
     8  	tokentypes "github.com/fibonacci-chain/fbc/x/token/types"
     9  )
    10  
    11  // GenesisState stores genesis data, all slashing state that must be provided at genesis
    12  type GenesisState struct {
    13  	Params               Params          `json:"params"`
    14  	SwapTokenPairRecords []SwapTokenPair `json:"swap_token_pair_records"`
    15  }
    16  
    17  // nolint
    18  func NewGenesisState(swapTokenPairRecords []SwapTokenPair) GenesisState {
    19  	return GenesisState{SwapTokenPairRecords: nil}
    20  }
    21  
    22  // ValidateGenesis validates the format of the specified genesisState
    23  func ValidateGenesis(data GenesisState) error {
    24  	for _, record := range data.SwapTokenPairRecords {
    25  		if !record.QuotePooledCoin.IsValid() {
    26  			return fmt.Errorf("invalid SwapTokenPairRecord: QuotePooledCoin: %s", record.QuotePooledCoin.String())
    27  		}
    28  		if !record.BasePooledCoin.IsValid() {
    29  			return fmt.Errorf("invalid SwapTokenPairRecord: BasePooledCoin: %s", record.BasePooledCoin)
    30  		}
    31  		if !tokentypes.NotAllowedOriginSymbol(record.PoolTokenName) {
    32  			return fmt.Errorf("invalid SwapTokenPairRecord: PoolToken: %s. Error: invalid PoolToken", record.PoolTokenName)
    33  		}
    34  	}
    35  	return nil
    36  }
    37  
    38  // nolint
    39  func DefaultGenesisState() GenesisState {
    40  	return GenesisState{
    41  		Params:               types.DefaultParams(),
    42  		SwapTokenPairRecords: nil,
    43  	}
    44  }
    45  
    46  // InitGenesis init genesis data to keeper
    47  func InitGenesis(ctx sdk.Context, keeper Keeper, data GenesisState) {
    48  	keeper.SetParams(ctx, data.Params)
    49  	for _, record := range data.SwapTokenPairRecords {
    50  		keeper.SetSwapTokenPair(ctx, record.TokenPairName(), record)
    51  	}
    52  }
    53  
    54  // ExportGenesis exports genesis from keeper
    55  func ExportGenesis(ctx sdk.Context, k Keeper) GenesisState {
    56  	var records []SwapTokenPair
    57  	iterator := k.GetSwapTokenPairsIterator(ctx)
    58  	for ; iterator.Valid(); iterator.Next() {
    59  		tokenPair := SwapTokenPair{}
    60  		types.ModuleCdc.MustUnmarshalBinaryLengthPrefixed(iterator.Value(), &tokenPair)
    61  		records = append(records, tokenPair)
    62  
    63  	}
    64  	params := k.GetParams(ctx)
    65  	return GenesisState{SwapTokenPairRecords: records, Params: params}
    66  }