syntax = "proto3";
package zgc.evmutil.v1beta1;

import "cosmos_proto/cosmos.proto";
import "gogoproto/gogo.proto";
import "zgc/evmutil/v1beta1/conversion_pair.proto";

option go_package = "github.com/0glabs/0g-chain/x/evmutil/types";
option (gogoproto.equal_all) = true;
option (gogoproto.verbose_equal_all) = true;

// GenesisState defines the evmutil module's genesis state.
message GenesisState {
  option (gogoproto.goproto_getters) = false;

  repeated Account accounts = 1 [(gogoproto.nullable) = false];

  // params defines all the parameters of the module.
  Params params = 2 [(gogoproto.nullable) = false];
}

// BalanceAccount defines an account in the evmutil module.
message Account {
  option (gogoproto.goproto_getters) = false;

  bytes address = 1 [
    (cosmos_proto.scalar) = "cosmos.AddressBytes",
    (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"
  ];

  // balance indicates the amount of neuron owned by the address.
  string balance = 2 [
    (cosmos_proto.scalar) = "cosmos.Int",
    (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int",
    (gogoproto.nullable) = false
  ];
}

// Params defines the evmutil module params
message Params {
  // enabled_conversion_pairs defines the list of conversion pairs allowed to be
  // converted between 0gChain ERC20 and sdk.Coin
  repeated ConversionPair enabled_conversion_pairs = 4 [
    (gogoproto.nullable) = false,
    (gogoproto.castrepeated) = "ConversionPairs"
  ];

  // allowed_cosmos_denoms is a list of denom & erc20 token metadata pairs.
  // if a denom is in the list, it is allowed to be converted to an erc20 in the evm.
  repeated AllowedCosmosCoinERC20Token allowed_cosmos_denoms = 1 [
    (gogoproto.nullable) = false,
    (gogoproto.castrepeated) = "AllowedCosmosCoinERC20Tokens"
  ];
}