package params import ( "time" "github.com/prysmaticlabs/prysm/shared/bytesutil" ) // MainnetConfig returns the configuration to be used in the main network. func MainnetConfig() *BeaconChainConfig { return mainnetBeaconConfig } // UseMainnetConfig for beacon chain services. func UseMainnetConfig() { beaconConfig = MainnetConfig() } var mainnetNetworkConfig = &NetworkConfig{ GossipMaxSize: 1 << 20, // 1 MiB MaxChunkSize: 1 << 20, // 1 MiB AttestationSubnetCount: 64, AttestationPropagationSlotRange: 32, MaxRequestBlocks: 1 << 10, // 1024 TtfbTimeout: 5 * time.Second, RespTimeout: 10 * time.Second, MaximumGossipClockDisparity: 500 * time.Millisecond, MessageDomainInvalidSnappy: [4]byte{00, 00, 00, 00}, MessageDomainValidSnappy: [4]byte{01, 00, 00, 00}, ETH2Key: "eth2", AttSubnetKey: "attnets", MinimumPeersInSubnet: 4, MinimumPeersInSubnetSearch: 20, ContractDeploymentBlock: 11184524, // Note: contract was deployed in block 11052984 but no transactions were sent until 11184524. BootstrapNodes: []string{ // Teku team's bootnode "enr:-KG4QOtcP9X1FbIMOe17QNMKqDxCpm14jcX5tiOE4_TyMrFqbmhPZHK_ZPG2Gxb1GE2xdtodOfx9-cgvNtxnRyHEmC0ghGV0aDKQ9aX9QgAAAAD__________4JpZIJ2NIJpcIQDE8KdiXNlY3AyNTZrMaEDhpehBDbZjM_L9ek699Y7vhUJ-eAdMyQW_Fil522Y0fODdGNwgiMog3VkcIIjKA", "enr:-KG4QDyytgmE4f7AnvW-ZaUOIi9i79qX4JwjRAiXBZCU65wOfBu-3Nb5I7b_Rmg3KCOcZM_C3y5pg7EBU5XGrcLTduQEhGV0aDKQ9aX9QgAAAAD__________4JpZIJ2NIJpcIQ2_DUbiXNlY3AyNTZrMaEDKnz_-ps3UUOfHWVYaskI5kWYO_vtYMGYCQRAR3gHDouDdGNwgiMog3VkcIIjKA", // Prylab team's bootnodes "enr:-Ku4QImhMc1z8yCiNJ1TyUxdcfNucje3BGwEHzodEZUan8PherEo4sF7pPHPSIB1NNuSg5fZy7qFsjmUKs2ea1Whi0EBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQOVphkDqal4QzPMksc5wnpuC3gvSC8AfbFOnZY_On34wIN1ZHCCIyg", "enr:-Ku4QP2xDnEtUXIjzJ_DhlCRN9SN99RYQPJL92TMlSv7U5C1YnYLjwOQHgZIUXw6c-BvRg2Yc2QsZxxoS_pPRVe0yK8Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQMeFF5GrS7UZpAH2Ly84aLK-TyvH-dRo0JM1i8yygH50YN1ZHCCJxA", "enr:-Ku4QPp9z1W4tAO8Ber_NQierYaOStqhDqQdOPY3bB3jDgkjcbk6YrEnVYIiCBbTxuar3CzS528d2iE7TdJsrL-dEKoBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQMw5fqqkw2hHC4F5HZZDPsNmPdB1Gi8JPQK7pRc9XHh-oN1ZHCCKvg", // Lighthouse team's bootnodes "enr:-IS4QLkKqDMy_ExrpOEWa59NiClemOnor-krjp4qoeZwIw2QduPC-q7Kz4u1IOWf3DDbdxqQIgC4fejavBOuUPy-HE4BgmlkgnY0gmlwhCLzAHqJc2VjcDI1NmsxoQLQSJfEAHZApkm5edTCZ_4qps_1k_ub2CxHFxi-gr2JMIN1ZHCCIyg", "enr:-IS4QDAyibHCzYZmIYZCjXwU9BqpotWmv2BsFlIq1V31BwDDMJPFEbox1ijT5c2Ou3kvieOKejxuaCqIcjxBjJ_3j_cBgmlkgnY0gmlwhAMaHiCJc2VjcDI1NmsxoQJIdpj_foZ02MXz4It8xKD7yUHTBx7lVFn3oeRP21KRV4N1ZHCCIyg", // EF bootnodes "enr:-Ku4QHqVeJ8PPICcWk1vSn_XcSkjOkNiTg6Fmii5j6vUQgvzMc9L1goFnLKgXqBJspJjIsB91LTOleFmyWWrFVATGngBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhAMRHkWJc2VjcDI1NmsxoQKLVXFOhp2uX6jeT0DvvDpPcU8FWMjQdR4wMuORMhpX24N1ZHCCIyg", "enr:-Ku4QG-2_Md3sZIAUebGYT6g0SMskIml77l6yR-M_JXc-UdNHCmHQeOiMLbylPejyJsdAPsTHJyjJB2sYGDLe0dn8uYBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhBLY-NyJc2VjcDI1NmsxoQORcM6e19T1T9gi7jxEZjk_sjVLGFscUNqAY9obgZaxbIN1ZHCCIyg", "enr:-Ku4QPn5eVhcoF1opaFEvg1b6JNFD2rqVkHQ8HApOKK61OIcIXD127bKWgAtbwI7pnxx6cDyk_nI88TrZKQaGMZj0q0Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhDayLMaJc2VjcDI1NmsxoQK2sBOLGcUb4AwuYzFuAVCaNHA-dy24UuEKkeFNgCVCsIN1ZHCCIyg", "enr:-Ku4QEWzdnVtXc2Q0ZVigfCGggOVB2Vc1ZCPEc6j21NIFLODSJbvNaef1g4PxhPwl_3kax86YPheFUSLXPRs98vvYsoBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhDZBrP2Jc2VjcDI1NmsxoQM6jr8Rb1ktLEsVcKAPa08wCsKUmvoQ8khiOl_SLozf9IN1ZHCCIyg", }, } var mainnetBeaconConfig = &BeaconChainConfig{ // Constants (Non-configurable) FarFutureEpoch: 1<<64 - 1, BaseRewardsPerEpoch: 4, DepositContractTreeDepth: 32, GenesisDelay: 604800, // 1 week. // Misc constant. TargetCommitteeSize: 128, MaxValidatorsPerCommittee: 2048, MaxCommitteesPerSlot: 64, MinPerEpochChurnLimit: 4, ChurnLimitQuotient: 1 << 16, ShuffleRoundCount: 90, MinGenesisActiveValidatorCount: 16384, MinGenesisTime: 1606824000, // Dec 1, 2020, 12pm UTC. TargetAggregatorsPerCommittee: 16, HysteresisQuotient: 4, HysteresisDownwardMultiplier: 1, HysteresisUpwardMultiplier: 5, // Gwei value constants. MinDepositAmount: 1 * 1e9, MaxEffectiveBalance: 32 * 1e9, EjectionBalance: 16 * 1e9, EffectiveBalanceIncrement: 1 * 1e9, // Initial value constants. BLSWithdrawalPrefixByte: byte(0), ZeroHash: [32]byte{}, // Time parameter constants. MinAttestationInclusionDelay: 1, SecondsPerSlot: 12, SlotsPerEpoch: 32, MinSeedLookahead: 1, MaxSeedLookahead: 4, EpochsPerEth1VotingPeriod: 64, SlotsPerHistoricalRoot: 8192, MinValidatorWithdrawabilityDelay: 256, ShardCommitteePeriod: 256, MinEpochsToInactivityPenalty: 4, Eth1FollowDistance: 2048, SafeSlotsToUpdateJustified: 8, // Ethereum PoW parameters. DepositChainID: 1, // Chain ID of eth1 mainnet. DepositNetworkID: 1, // Network ID of eth1 mainnet. DepositContractAddress: "0x00000000219ab540356cBB839Cbe05303d7705Fa", // Validator params. RandomSubnetsPerValidator: 1 << 0, EpochsPerRandomSubnetSubscription: 1 << 8, // While eth1 mainnet block times are closer to 13s, we must conform with other clients in // order to vote on the correct eth1 blocks. // // Additional context: https://github.com/ethereum/eth2.0-specs/issues/2132 // Bug prompting this change: https://github.com/prysmaticlabs/prysm/issues/7856 // Future optimization: https://github.com/prysmaticlabs/prysm/issues/7739 SecondsPerETH1Block: 14, // State list length constants. EpochsPerHistoricalVector: 65536, EpochsPerSlashingsVector: 8192, HistoricalRootsLimit: 16777216, ValidatorRegistryLimit: 1099511627776, // Reward and penalty quotients constants. BaseRewardFactor: 64, WhistleBlowerRewardQuotient: 512, ProposerRewardQuotient: 8, InactivityPenaltyQuotient: 67108864, MinSlashingPenaltyQuotient: 128, ProportionalSlashingMultiplier: 1, // Max operations per block constants. MaxProposerSlashings: 16, MaxAttesterSlashings: 2, MaxAttestations: 128, MaxDeposits: 16, MaxVoluntaryExits: 16, // BLS domain values. DomainBeaconProposer: bytesutil.ToBytes4(bytesutil.Bytes4(0)), DomainBeaconAttester: bytesutil.ToBytes4(bytesutil.Bytes4(1)), DomainRandao: bytesutil.ToBytes4(bytesutil.Bytes4(2)), DomainDeposit: bytesutil.ToBytes4(bytesutil.Bytes4(3)), DomainVoluntaryExit: bytesutil.ToBytes4(bytesutil.Bytes4(4)), DomainSelectionProof: bytesutil.ToBytes4(bytesutil.Bytes4(5)), DomainAggregateAndProof: bytesutil.ToBytes4(bytesutil.Bytes4(6)), // Prysm constants. GweiPerEth: 1000000000, BLSSecretKeyLength: 32, BLSPubkeyLength: 48, BLSSignatureLength: 96, DefaultBufferSize: 10000, WithdrawalPrivkeyFileName: "/shardwithdrawalkey", ValidatorPrivkeyFileName: "/validatorprivatekey", RPCSyncCheck: 1, EmptySignature: [96]byte{}, DefaultPageSize: 250, MaxPeersToSync: 15, SlotsPerArchivedPoint: 2048, GenesisCountdownInterval: time.Minute, ConfigName: ConfigNames[Mainnet], BeaconStateFieldCount: 21, // Slasher related values. WeakSubjectivityPeriod: 54000, PruneSlasherStoragePeriod: 10, // Weak subjectivity values. SafetyDecay: 10, // Fork related values. GenesisForkVersion: []byte{0, 0, 0, 0}, NextForkVersion: []byte{0, 0, 0, 0}, // Set to GenesisForkVersion unless there is a scheduled fork NextForkEpoch: 1<<64 - 1, // Set to FarFutureEpoch unless there is a scheduled fork. ForkVersionSchedule: map[uint64][]byte{ // Any further forks must be specified here by their epoch number. }, }