import {BeaconPreset} from "../types.js";

// Minimal preset
// https://github.com/ethereum/consensus-specs/tree/dev/presets/minimal

/* eslint-disable @typescript-eslint/naming-convention */
export const minimalPreset: BeaconPreset = {
  // Misc
  // ---------------------------------------------------------------
  // [customized] Just 4 committees for slot for testing purposes
  MAX_COMMITTEES_PER_SLOT: 4,
  // [customized] unsecure, but fast
  TARGET_COMMITTEE_SIZE: 4,
  // 2**11 (= 2,048)
  MAX_VALIDATORS_PER_COMMITTEE: 2048,
  // [customized] Faster, but unsecure.
  SHUFFLE_ROUND_COUNT: 10,
  // 4
  HYSTERESIS_QUOTIENT: 4,
  // 1 (minus 0.25)
  HYSTERESIS_DOWNWARD_MULTIPLIER: 1,
  // 5 (plus 1.25)
  HYSTERESIS_UPWARD_MULTIPLIER: 5,

  // Gwei values
  // ---------------------------------------------------------------
  // 2**0 * 10**9 (= 1,000,000,000) Gwei
  MIN_DEPOSIT_AMOUNT: 1000000000,
  // 2**5 * 10**9 (= 32,000,000,000) Gwei
  MAX_EFFECTIVE_BALANCE: 32000000000,
  // 2**0 * 10**9 (= 1,000,000,000) Gwei
  EFFECTIVE_BALANCE_INCREMENT: 1000000000,

  // Time parameters
  // ---------------------------------------------------------------
  // 2**0 (= 1) slots 6 seconds
  MIN_ATTESTATION_INCLUSION_DELAY: 1,
  // [customized] fast epochs
  SLOTS_PER_EPOCH: 8,
  // 2**0 (= 1) epochs
  MIN_SEED_LOOKAHEAD: 1,
  // 2**2 (= 4) epochs
  MAX_SEED_LOOKAHEAD: 4,
  // [customized] higher frequency new deposits from eth1 for testing
  EPOCHS_PER_ETH1_VOTING_PERIOD: 4,
  // [customized] smaller state
  SLOTS_PER_HISTORICAL_ROOT: 64,
  // 2**2 (= 4) epochs
  MIN_EPOCHS_TO_INACTIVITY_PENALTY: 4,

  // State vector lengths
  // ---------------------------------------------------------------
  // [customized] smaller state
  EPOCHS_PER_HISTORICAL_VECTOR: 64,
  // [customized] smaller state
  EPOCHS_PER_SLASHINGS_VECTOR: 64,
  // 2**24 (= 16,777,216) historical roots
  HISTORICAL_ROOTS_LIMIT: 16777216,
  // 2**40 (= 1,099,511,627,776) validator spots
  VALIDATOR_REGISTRY_LIMIT: 1099511627776,

  // Reward and penalty quotients
  // ---------------------------------------------------------------
  // 2**6 (= 64)
  BASE_REWARD_FACTOR: 64,
  // 2**9 (= 512)
  WHISTLEBLOWER_REWARD_QUOTIENT: 512,
  // 2**3 (= 8)
  PROPOSER_REWARD_QUOTIENT: 8,
  // [customized] 2**25 (= 33,554,432)
  INACTIVITY_PENALTY_QUOTIENT: 33554432,
  // [customized] 2**6 (= 64)
  MIN_SLASHING_PENALTY_QUOTIENT: 64,
  // [customized] 2 (lower safety margin than Phase 0 genesis but different than mainnet config for testing)
  PROPORTIONAL_SLASHING_MULTIPLIER: 2,

  // Max operations per block
  // ---------------------------------------------------------------
  // 2**4 (= 16)
  MAX_PROPOSER_SLASHINGS: 16,
  // 2**1 (= 2)
  MAX_ATTESTER_SLASHINGS: 2,
  // 2**7 (= 128)
  MAX_ATTESTATIONS: 128,
  // 2**4 (= 16)
  MAX_DEPOSITS: 16,
  // 2**4 (= 16)
  MAX_VOLUNTARY_EXITS: 16,

  // ALTAIR
  /////////
  SYNC_COMMITTEE_SIZE: 32,
  EPOCHS_PER_SYNC_COMMITTEE_PERIOD: 8,
  INACTIVITY_PENALTY_QUOTIENT_ALTAIR: 50331648,
  MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR: 64,
  PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR: 2,
  MIN_SYNC_COMMITTEE_PARTICIPANTS: 1,
  UPDATE_TIMEOUT: 64,

  // BELLATRIX
  ////////////
  INACTIVITY_PENALTY_QUOTIENT_BELLATRIX: 16777216,
  MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX: 32,
  PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX: 3,
  MAX_BYTES_PER_TRANSACTION: 1073741824,
  MAX_TRANSACTIONS_PER_PAYLOAD: 1048576,
  BYTES_PER_LOGS_BLOOM: 256,
  MAX_EXTRA_DATA_BYTES: 32,

  // CAPELLA
  //////////
  MAX_BLS_TO_EXECUTION_CHANGES: 16,
  MAX_WITHDRAWALS_PER_PAYLOAD: 4,
  MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP: 16,

  // DENEB
  ///////////
  FIELD_ELEMENTS_PER_BLOB: 4096,
  MAX_BLOB_COMMITMENTS_PER_BLOCK: 16,
  MAX_BLOBS_PER_BLOCK: 6,
  KZG_COMMITMENT_INCLUSION_PROOF_DEPTH: 9,

  // ELECTRA
  MAX_DEPOSIT_REQUESTS_PER_PAYLOAD: 4,
  MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD: 2,
  MAX_ATTESTER_SLASHINGS_ELECTRA: 1,
  MAX_ATTESTATIONS_ELECTRA: 8,
  MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP: 1,
  // 2**11 * 10**9 (= 2,048,000,000,000) Gwei
  MAX_EFFECTIVE_BALANCE_ELECTRA: 2048000000000,
  // 2**16 (= 65536)
  MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA: 4096,
  MIN_ACTIVATION_BALANCE: 32000000000,
  PENDING_BALANCE_DEPOSITS_LIMIT: 134217728,
  PENDING_PARTIAL_WITHDRAWALS_LIMIT: 64,
  PENDING_CONSOLIDATIONS_LIMIT: 64,
  MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD: 1,
  WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA: 4096,
};
