github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/rpc/eth/v1/beacon/config_test.go (about) 1 package beacon 2 3 import ( 4 "context" 5 "testing" 6 7 types "github.com/prysmaticlabs/eth2-types" 8 "github.com/prysmaticlabs/prysm/shared/params" 9 "github.com/prysmaticlabs/prysm/shared/testutil/assert" 10 "github.com/prysmaticlabs/prysm/shared/testutil/require" 11 "google.golang.org/protobuf/types/known/emptypb" 12 ) 13 14 func TestGetSpec(t *testing.T) { 15 params.SetupTestConfigCleanup(t) 16 config := params.BeaconConfig() 17 18 config.ConfigName = "ConfigName" 19 config.MaxCommitteesPerSlot = 1 20 config.TargetCommitteeSize = 2 21 config.MaxValidatorsPerCommittee = 3 22 config.MinPerEpochChurnLimit = 4 23 config.ChurnLimitQuotient = 5 24 config.ShuffleRoundCount = 6 25 config.MinGenesisActiveValidatorCount = 7 26 config.MinGenesisTime = 8 27 config.HysteresisQuotient = 9 28 config.HysteresisDownwardMultiplier = 10 29 config.HysteresisUpwardMultiplier = 11 30 config.SafeSlotsToUpdateJustified = 12 31 config.Eth1FollowDistance = 13 32 config.TargetAggregatorsPerCommittee = 14 33 config.RandomSubnetsPerValidator = 15 34 config.EpochsPerRandomSubnetSubscription = 16 35 config.SecondsPerETH1Block = 17 36 config.DepositChainID = 18 37 config.DepositNetworkID = 19 38 config.DepositContractAddress = "DepositContractAddress" 39 config.MinDepositAmount = 20 40 config.MaxEffectiveBalance = 21 41 config.EjectionBalance = 22 42 config.EffectiveBalanceIncrement = 23 43 config.GenesisForkVersion = []byte("GenesisForkVersion") 44 config.BLSWithdrawalPrefixByte = byte('b') 45 config.GenesisDelay = 24 46 config.SecondsPerSlot = 25 47 config.MinAttestationInclusionDelay = 26 48 config.SlotsPerEpoch = 27 49 config.MinSeedLookahead = 28 50 config.MaxSeedLookahead = 29 51 config.EpochsPerEth1VotingPeriod = 30 52 config.SlotsPerHistoricalRoot = 31 53 config.MinValidatorWithdrawabilityDelay = 32 54 config.ShardCommitteePeriod = 33 55 config.MinEpochsToInactivityPenalty = 34 56 config.EpochsPerHistoricalVector = 35 57 config.EpochsPerSlashingsVector = 36 58 config.HistoricalRootsLimit = 37 59 config.ValidatorRegistryLimit = 38 60 config.BaseRewardFactor = 39 61 config.WhistleBlowerRewardQuotient = 40 62 config.ProposerRewardQuotient = 41 63 config.InactivityPenaltyQuotient = 42 64 config.MinSlashingPenaltyQuotient = 43 65 config.ProportionalSlashingMultiplier = 44 66 config.MaxProposerSlashings = 45 67 config.MaxAttesterSlashings = 46 68 config.MaxAttestations = 47 69 config.MaxDeposits = 48 70 config.MaxVoluntaryExits = 49 71 72 var dbp [4]byte 73 copy(dbp[:], []byte{'0', '0', '0', '1'}) 74 config.DomainBeaconProposer = dbp 75 var dba [4]byte 76 copy(dba[:], []byte{'0', '0', '0', '2'}) 77 config.DomainBeaconAttester = dba 78 var dr [4]byte 79 copy(dr[:], []byte{'0', '0', '0', '3'}) 80 config.DomainRandao = dr 81 var dd [4]byte 82 copy(dd[:], []byte{'0', '0', '0', '4'}) 83 config.DomainDeposit = dd 84 var dve [4]byte 85 copy(dve[:], []byte{'0', '0', '0', '5'}) 86 config.DomainVoluntaryExit = dve 87 var dsp [4]byte 88 copy(dsp[:], []byte{'0', '0', '0', '6'}) 89 config.DomainSelectionProof = dsp 90 var daap [4]byte 91 copy(daap[:], []byte{'0', '0', '0', '7'}) 92 config.DomainAggregateAndProof = daap 93 94 params.OverrideBeaconConfig(config) 95 96 server := &Server{} 97 resp, err := server.GetSpec(context.Background(), &emptypb.Empty{}) 98 require.NoError(t, err) 99 100 assert.Equal(t, 60, len(resp.Data)) 101 for k, v := range resp.Data { 102 switch k { 103 case "CONFIG_NAME": 104 assert.Equal(t, "ConfigName", v) 105 case "MAX_COMMITTEES_PER_SLOT": 106 assert.Equal(t, "1", v) 107 case "TARGET_COMMITTEE_SIZE": 108 assert.Equal(t, "2", v) 109 case "MAX_VALIDATORS_PER_COMMITTEE": 110 assert.Equal(t, "3", v) 111 case "MIN_PER_EPOCH_CHURN_LIMIT": 112 assert.Equal(t, "4", v) 113 case "CHURN_LIMIT_QUOTIENT": 114 assert.Equal(t, "5", v) 115 case "SHUFFLE_ROUND_COUNT": 116 assert.Equal(t, "6", v) 117 case "MIN_GENESIS_ACTIVE_VALIDATOR_COUNT": 118 assert.Equal(t, "7", v) 119 case "MIN_GENESIS_TIME": 120 assert.Equal(t, "8", v) 121 case "HYSTERESIS_QUOTIENT": 122 assert.Equal(t, "9", v) 123 case "HYSTERESIS_DOWNWARD_MULTIPLIER": 124 assert.Equal(t, "10", v) 125 case "HYSTERESIS_UPWARD_MULTIPLIER": 126 assert.Equal(t, "11", v) 127 case "SAFE_SLOTS_TO_UPDATE_JUSTIFIED": 128 assert.Equal(t, "12", v) 129 case "ETH1_FOLLOW_DISTANCE": 130 assert.Equal(t, "13", v) 131 case "TARGET_AGGREGATORS_PER_COMMITTEE": 132 assert.Equal(t, "14", v) 133 case "RANDOM_SUBNETS_PER_VALIDATOR": 134 assert.Equal(t, "15", v) 135 case "EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION": 136 assert.Equal(t, "16", v) 137 case "SECONDS_PER_ETH1_BLOCK": 138 assert.Equal(t, "17", v) 139 case "DEPOSIT_CHAIN_ID": 140 assert.Equal(t, "18", v) 141 case "DEPOSIT_NETWORK_ID": 142 assert.Equal(t, "19", v) 143 case "DEPOSIT_CONTRACT_ADDRESS": 144 assert.Equal(t, "DepositContractAddress", v) 145 case "MIN_DEPOSIT_AMOUNT": 146 assert.Equal(t, "20", v) 147 case "MAX_EFFECTIVE_BALANCE": 148 assert.Equal(t, "21", v) 149 case "EJECTION_BALANCE": 150 assert.Equal(t, "22", v) 151 case "EFFECTIVE_BALANCE_INCREMENT": 152 assert.Equal(t, "23", v) 153 case "GENESIS_FORK_VERSION": 154 assert.Equal(t, "0x47656e65736973466f726b56657273696f6e", v) 155 case "BLS_WITHDRAWAL_PREFIX": 156 assert.Equal(t, "0x62", v) 157 case "GENESIS_DELAY": 158 assert.Equal(t, "24", v) 159 case "SECONDS_PER_SLOT": 160 assert.Equal(t, "25", v) 161 case "MIN_ATTESTATION_INCLUSION_DELAY": 162 assert.Equal(t, "26", v) 163 case "SLOTS_PER_EPOCH": 164 assert.Equal(t, "27", v) 165 case "MIN_SEED_LOOKAHEAD": 166 assert.Equal(t, "28", v) 167 case "MAX_SEED_LOOKAHEAD": 168 assert.Equal(t, "29", v) 169 case "EPOCHS_PER_ETH1_VOTING_PERIOD": 170 assert.Equal(t, "30", v) 171 case "SLOTS_PER_HISTORICAL_ROOT": 172 assert.Equal(t, "31", v) 173 case "MIN_VALIDATOR_WITHDRAWABILITY_DELAY": 174 assert.Equal(t, "32", v) 175 case "SHARD_COMMITTEE_PERIOD": 176 assert.Equal(t, "33", v) 177 case "MIN_EPOCHS_TO_INACTIVITY_PENALTY": 178 assert.Equal(t, "34", v) 179 case "EPOCHS_PER_HISTORICAL_VECTOR": 180 assert.Equal(t, "35", v) 181 case "EPOCHS_PER_SLASHINGS_VECTOR": 182 assert.Equal(t, "36", v) 183 case "HISTORICAL_ROOTS_LIMIT": 184 assert.Equal(t, "37", v) 185 case "VALIDATOR_REGISTRY_LIMIT": 186 assert.Equal(t, "38", v) 187 case "BASE_REWARD_FACTOR": 188 assert.Equal(t, "39", v) 189 case "WHISTLEBLOWER_REWARD_QUOTIENT": 190 assert.Equal(t, "40", v) 191 case "PROPOSER_REWARD_QUOTIENT": 192 assert.Equal(t, "41", v) 193 case "INACTIVITY_PENALTY_QUOTIENT": 194 assert.Equal(t, "42", v) 195 case "MIN_SLASHING_PENALTY_QUOTIENT": 196 assert.Equal(t, "43", v) 197 case "PROPORTIONAL_SLASHING_MULTIPLIER": 198 assert.Equal(t, "44", v) 199 case "MAX_PROPOSER_SLASHINGS": 200 assert.Equal(t, "45", v) 201 case "MAX_ATTESTER_SLASHINGS": 202 assert.Equal(t, "46", v) 203 case "MAX_ATTESTATIONS": 204 assert.Equal(t, "47", v) 205 case "MAX_DEPOSITS": 206 assert.Equal(t, "48", v) 207 case "MAX_VOLUNTARY_EXITS": 208 assert.Equal(t, "49", v) 209 case "DOMAIN_BEACON_PROPOSER": 210 assert.Equal(t, "0x30303031", v) 211 case "DOMAIN_BEACON_ATTESTER": 212 assert.Equal(t, "0x30303032", v) 213 case "DOMAIN_RANDAO": 214 assert.Equal(t, "0x30303033", v) 215 case "DOMAIN_DEPOSIT": 216 assert.Equal(t, "0x30303034", v) 217 case "DOMAIN_VOLUNTARY_EXIT": 218 assert.Equal(t, "0x30303035", v) 219 case "DOMAIN_SELECTION_PROOF": 220 assert.Equal(t, "0x30303036", v) 221 case "DOMAIN_AGGREGATE_AND_PROOF": 222 assert.Equal(t, "0x30303037", v) 223 default: 224 t.Errorf("Incorrect key: %s", k) 225 } 226 } 227 } 228 229 func TestGetDepositContract(t *testing.T) { 230 const chainId = 99 231 const address = "0x0000000000000000000000000000000000000009" 232 params.SetupTestConfigCleanup(t) 233 config := params.BeaconConfig() 234 config.DepositChainID = chainId 235 config.DepositContractAddress = address 236 params.OverrideBeaconConfig(config) 237 238 s := Server{} 239 resp, err := s.GetDepositContract(context.Background(), &emptypb.Empty{}) 240 require.NoError(t, err) 241 assert.Equal(t, uint64(chainId), resp.Data.ChainId) 242 assert.Equal(t, address, resp.Data.Address) 243 } 244 245 func TestForkSchedule_Ok(t *testing.T) { 246 genesisForkVersion := []byte("Genesis") 247 firstForkVersion, firstForkEpoch := []byte("First"), types.Epoch(100) 248 secondForkVersion, secondForkEpoch := []byte("Second"), types.Epoch(200) 249 thirdForkVersion, thirdForkEpoch := []byte("Third"), types.Epoch(300) 250 251 params.SetupTestConfigCleanup(t) 252 config := params.BeaconConfig() 253 config.GenesisForkVersion = genesisForkVersion 254 // Create fork schedule adding keys in non-sorted order. 255 schedule := make(map[types.Epoch][]byte, 3) 256 schedule[secondForkEpoch] = secondForkVersion 257 schedule[firstForkEpoch] = firstForkVersion 258 schedule[thirdForkEpoch] = thirdForkVersion 259 config.ForkVersionSchedule = schedule 260 params.OverrideBeaconConfig(config) 261 262 s := &Server{} 263 resp, err := s.GetForkSchedule(context.Background(), &emptypb.Empty{}) 264 require.NoError(t, err) 265 require.Equal(t, 3, len(resp.Data)) 266 fork := resp.Data[0] 267 assert.DeepEqual(t, genesisForkVersion, fork.PreviousVersion) 268 assert.DeepEqual(t, firstForkVersion, fork.CurrentVersion) 269 assert.Equal(t, firstForkEpoch, fork.Epoch) 270 fork = resp.Data[1] 271 assert.DeepEqual(t, firstForkVersion, fork.PreviousVersion) 272 assert.DeepEqual(t, secondForkVersion, fork.CurrentVersion) 273 assert.Equal(t, secondForkEpoch, fork.Epoch) 274 fork = resp.Data[2] 275 assert.DeepEqual(t, secondForkVersion, fork.PreviousVersion) 276 assert.DeepEqual(t, thirdForkVersion, fork.CurrentVersion) 277 assert.Equal(t, thirdForkEpoch, fork.Epoch) 278 } 279 280 func TestForkSchedule_NoForks(t *testing.T) { 281 s := &Server{} 282 resp, err := s.GetForkSchedule(context.Background(), &emptypb.Empty{}) 283 require.NoError(t, err) 284 assert.Equal(t, 0, len(resp.Data)) 285 }