/**
* This file was automatically generated by @cosmwasm/ts-codegen@0.35.3.
* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
* and run the @cosmwasm/ts-codegen generate command to regenerate this file.
*/

export interface InstantiateMsg {
  group_addr: string;
  mix_denom: string;
  multisig_addr: string;
  time_configuration?: TimeConfiguration | null;
}
export interface TimeConfiguration {
  dealing_exchange_time_secs: number;
  in_progress_time_secs: number;
  public_key_submission_time_secs: number;
  verification_key_finalization_time_secs: number;
  verification_key_submission_time_secs: number;
  verification_key_validation_time_secs: number;
}
export type ExecuteMsg = {
  register_dealer: {
    announce_address: string;
    bte_key_with_proof: string;
    resharing: boolean;
  };
} | {
  commit_dealing: {
    dealing_bytes: ContractSafeBytes;
    resharing: boolean;
  };
} | {
  commit_verification_key_share: {
    resharing: boolean;
    share: string;
  };
} | {
  verify_verification_key_share: {
    owner: Addr;
    resharing: boolean;
  };
} | {
  surpassed_threshold: {};
} | {
  advance_epoch_state: {};
};
export type ContractSafeBytes = number[];
export type Addr = string;
export type QueryMsg = {
  get_current_epoch_state: {};
} | {
  get_current_epoch_threshold: {};
} | {
  get_initial_dealers: {};
} | {
  get_dealer_details: {
    dealer_address: string;
  };
} | {
  get_current_dealers: {
    limit?: number | null;
    start_after?: string | null;
  };
} | {
  get_past_dealers: {
    limit?: number | null;
    start_after?: string | null;
  };
} | {
  get_dealing: {
    idx: number;
    limit?: number | null;
    start_after?: string | null;
  };
} | {
  get_verification_keys: {
    epoch_id: number;
    limit?: number | null;
    start_after?: string | null;
  };
};
export interface MigrateMsg {}
export interface PagedDealerResponse {
  dealers: DealerDetails[];
  per_page: number;
  start_next_after?: Addr | null;
}
export interface DealerDetails {
  address: Addr;
  announce_address: string;
  assigned_index: number;
  bte_public_key_with_proof: string;
}
export type Timestamp = Uint64;
export type Uint64 = number;
export type EpochState = "in_progress" | {
  public_key_submission: {
    resharing: boolean;
  };
} | {
  dealing_exchange: {
    resharing: boolean;
  };
} | {
  verification_key_submission: {
    resharing: boolean;
  };
} | {
  verification_key_validation: {
    resharing: boolean;
  };
} | {
  verification_key_finalization: {
    resharing: boolean;
  };
};
export interface Epoch {
  epoch_id: number;
  finish_timestamp: Timestamp;
  state: EpochState;
  time_configuration: TimeConfiguration;
}
export type DealerType = "current" | "past" | "unknown";
export interface DealerDetailsResponse {
  dealer_type: DealerType;
  details?: DealerDetails | null;
}
export interface PagedDealingsResponse {
  dealings: ContractDealing[];
  per_page: number;
  start_next_after?: Addr | null;
}
export interface ContractDealing {
  dealer: Addr;
  dealing: ContractSafeBytes;
}
export type NullableInitialReplacementData = InitialReplacementData | null;
export interface InitialReplacementData {
  initial_dealers: Addr[];
  initial_height: number;
}
export interface PagedVKSharesResponse {
  per_page: number;
  shares: ContractVKShare[];
  start_next_after?: Addr | null;
}
export interface ContractVKShare {
  announce_address: string;
  epoch_id: number;
  node_index: number;
  owner: Addr;
  share: string;
  verified: boolean;
}