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  }