syntax = "proto3";
package kava.precisebank.v1;

import "cosmos_proto/cosmos.proto";
import "gogoproto/gogo.proto";

option go_package = "github.com/0glabs/0g-chain/x/precisebank/types";

// GenesisState defines the precisebank module's genesis state.
message GenesisState {
  // balances is a list of all the balances in the precisebank module.
  repeated FractionalBalance balances = 1 [
    (gogoproto.castrepeated) = "FractionalBalances",
    (gogoproto.nullable) = false
  ];

  // remainder is an internal value of how much extra fractional digits are
  // still backed by the reserve, but not assigned to any account.
  string remainder = 2 [
    (cosmos_proto.scalar) = "cosmos.Int",
    (gogoproto.customtype) = "cosmossdk.io/math.Int",
    (gogoproto.nullable) = false
  ];
}

// FractionalBalance defines the fractional portion of an account balance
message FractionalBalance {
  option (gogoproto.equal) = false;
  option (gogoproto.goproto_getters) = false;

  // address is the address of the balance holder.
  string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];

  // amount indicates amount of only the fractional balance owned by the
  // address. FractionalBalance currently only supports tracking 1 single asset,
  // e.g. fractional balances of ukava.
  string amount = 2 [
    (cosmos_proto.scalar) = "cosmos.Int",
    (gogoproto.customtype) = "cosmossdk.io/math.Int",
    (gogoproto.nullable) = false
  ];
}