// package: ocap
// file: state.proto

import * as google_protobuf_any_pb from "google-protobuf/google/protobuf/any_pb";
import * as google_protobuf_timestamp_pb from "google-protobuf/google/protobuf/timestamp_pb";
import * as type_pb from "./type_pb";
import * as tx_pb from "./tx_pb";

export type TAccountState = {
  balance?: type_pb.TBigUint,
  nonce: string,
  numTxs: string,
  address: string,
  pk: Uint8Array | string,
  type?: type_pb.TWalletType,
  moniker: string,
  context?: type_pb.TStateContext,
  issuer: string,
  gasBalance?: type_pb.TBigUint,
  migratedTo: Array<string>,
  migratedFrom: Array<string>,
  numAssets: string,
  tokens: Array<type_pb.TIndexedTokenInput>,
  data?: google_protobuf_any_pb.Any,
}

export type TAssetState = {
  address: string,
  owner: string,
  moniker: string,
  readonly: boolean,
  transferrable: boolean,
  ttl: number,
  consumedTime?: google_protobuf_timestamp_pb.Timestamp,
  issuer: string,
  parent: string,
  endpoint?: type_pb.TNFTEndpoint,
  display?: type_pb.TNFTDisplay,
  tags: Array<string>,
  context?: type_pb.TStateContext,
  data?: google_protobuf_any_pb.Any,
}

export type TForgeState = {
  address: string,
  consensus?: type_pb.TConsensusParams,
  tasksMap: Array<[number, type_pb.TUpgradeTasks]>,
  version: string,
  token?: type_pb.TForgeToken,
  txConfig?: type_pb.TTransactionConfig,
  upgradeInfo?: type_pb.TUpgradeInfo,
  accountConfig: Array<type_pb.TAccountConfig>,
  vaults?: type_pb.TVaultConfig,
  reservedSymbols: Array<string>,
  data?: google_protobuf_any_pb.Any,
}

export type TRootState = {
  address: string,
  account: Uint8Array | string,
  asset: Uint8Array | string,
  receipt: Uint8Array | string,
  protocol: Uint8Array | string,
  governance: Uint8Array | string,
  custom: Uint8Array | string,
}

export type TDelegateOpState = {
  rule: string,
  numTxs: number,
  numTxsDelta: number,
  balance?: type_pb.TBigUint,
  balanceDelta?: type_pb.TBigUint,
  limit?: type_pb.TDelegateLimit,
}

export type TDelegateState = {
  address: string,
  opsMap: Array<[string, TDelegateOpState]>,
  from: string,
  to: string,
  deny: Array<string>,
  validUntil: number,
  context?: type_pb.TStateContext,
  data?: google_protobuf_any_pb.Any,
}

export type TTokenState = {
  address: string,
  issuer: string,
  name: string,
  description: string,
  symbol: string,
  unit: string,
  decimal: number,
  icon: string,
  totalSupply: string,
  foreignToken?: type_pb.TForeignToken,
  tokenFactoryAddress: string,
  initialSupply: string,
  maxTotalSupply: string,
  metadata?: google_protobuf_any_pb.Any,
  context?: type_pb.TStateContext,
  website: string,
  spenders: Array<string>,
  minters: Array<string>,
  type: string,
  data?: google_protobuf_any_pb.Any,
}

export type TAssetFactoryState = {
  address: string,
  owner: string,
  name: string,
  description: string,
  settlement: string,
  limit: number,
  trustedIssuers: Array<string>,
  input?: type_pb.TIndexedFactoryInput,
  output?: tx_pb.TCreateAssetTx,
  hooks: Array<type_pb.TAssetFactoryHook>,
  data?: google_protobuf_any_pb.Any,
  context?: type_pb.TStateContext,
  balance?: type_pb.TBigUint,
  tokens: Array<type_pb.TIndexedTokenInput>,
  numMinted: number,
  display?: type_pb.TNFTDisplay,
  lastSettlement?: google_protobuf_timestamp_pb.Timestamp,
}

export type TStakeState = {
  address: string,
  sender: string,
  receiver: string,
  tokens: Array<type_pb.TIndexedTokenInput>,
  assets: Array<string>,
  revocable: boolean,
  message: string,
  revokeWaitingPeriod: number,
  revokedTokens: Array<type_pb.TIndexedTokenInput>,
  revokedAssets: Array<string>,
  slashers: Array<string>,
  nonce: string,
  context?: type_pb.TStateContext,
  data?: google_protobuf_any_pb.Any,
}

export type TRollupState = {
  address: string,
  tokenAddress: string,
  vaultAddress: string,
  contractAddress: string,
  seedValidators: Array<type_pb.TRollupValidator>,
  validators: Array<type_pb.TRollupValidator>,
  minStakeAmount: string,
  maxStakeAmount: string,
  minSignerCount: number,
  maxSignerCount: number,
  minBlockSize: number,
  maxBlockSize: number,
  minBlockInterval: number,
  minBlockConfirmation: number,
  issuer: string,
  depositFeeRate: number,
  withdrawFeeRate: number,
  proposerFeeShare: number,
  publisherFeeShare: number,
  minDepositAmount: string,
  minWithdrawAmount: string,
  blockHeight: number,
  blockHash: string,
  tokenInfo?: type_pb.TIndexedTokenInput,
  totalDepositAmount: string,
  totalWithdrawAmount: string,
  maxDepositAmount: string,
  maxWithdrawAmount: string,
  minDepositFee: string,
  maxDepositFee: string,
  minWithdrawFee: string,
  maxWithdrawFee: string,
  paused: boolean,
  foreignToken?: type_pb.TForeignToken,
  leaveWaitingPeriod: number,
  publishWaitingPeriod: number,
  publishSlashRate: number,
  migrateHistory: Array<string>,
  closed: boolean,
  vaultHistory: Array<string>,
  context?: type_pb.TStateContext,
  data?: google_protobuf_any_pb.Any,
}

export type TRollupBlock = {
  hash: string,
  height: number,
  merkleRoot: string,
  previousHash: string,
  txsHash: string,
  txs: Array<string>,
  proposer: string,
  signatures: Array<type_pb.TMultisig>,
  rollup: string,
  mintedAmount: string,
  burnedAmount: string,
  rewardAmount: string,
  minReward: string,
  governance: boolean,
  context?: type_pb.TStateContext,
  data?: google_protobuf_any_pb.Any,
}

export type TEvidenceState = {
  hash: string,
  data: string,
  context?: type_pb.TStateContext,
}

export type TTokenFactoryState = {
  address: string,
  owner: string,
  tokenAddress: string,
  reserveAddress: string,
  curve?: type_pb.TCurveConfig,
  currentSupply: string,
  reserveBalance: string,
  feeRate: number,
  status: string,
  token?: TTokenState,
  reserveToken?: TTokenState,
  context?: type_pb.TStateContext,
  data?: google_protobuf_any_pb.Any,
}
