def test_ensure_update_eth1_vote_if_exists(genesis_state, config, vote_offsets): # one less than a majority is the majority divided by 2 threshold = config.SLOTS_PER_ETH1_VOTING_PERIOD // 2 data_votes = tuple( concat((Eth1Data.create(block_hash=(i).to_bytes(32, "little")), ) * (threshold + offset) for i, offset in enumerate(vote_offsets))) state = genesis_state for vote in data_votes: state = process_eth1_data( state, BeaconBlock.create(body=BeaconBlockBody.create(eth1_data=vote)), config, ) if not vote_offsets: assert state.eth1_data == genesis_state.eth1_data # we should update the 'latest' entry if we have a majority for offset in vote_offsets: if offset <= 0: assert genesis_state.eth1_data == state.eth1_data else: assert state.eth1_data == data_votes[0]
def test_process_eth1_data(original_votes, block_data, expected_votes, sample_beacon_state_params, sample_beacon_block_params, sample_beacon_block_body_params): eth1_data_votes = tuple( Eth1DataVote(data, vote_count) for data, vote_count in original_votes ) state = BeaconState(**sample_beacon_state_params).copy( eth1_data_votes=eth1_data_votes, ) block_body = BeaconBlockBody(**sample_beacon_block_body_params).copy( eth1_data=block_data, ) block = BeaconBlock(**sample_beacon_block_params).copy( body=block_body, ) updated_state = process_eth1_data(state, block) updated_votes = tuple( (vote.eth1_data, vote.vote_count) for vote in updated_state.eth1_data_votes ) assert updated_votes == expected_votes
def test_process_eth1_data( original_votes, block_data, expected_votes, sample_beacon_state_params, sample_beacon_block_params, sample_beacon_block_body_params, config, ): eth1_data_votes = tuple(mapcat(_expand_eth1_votes, original_votes)) state = BeaconState.create(**sample_beacon_state_params).set( "eth1_data_votes", eth1_data_votes) block_body = BeaconBlockBody.create( **sample_beacon_block_body_params).mset( "eth1_data", Eth1Data.create(block_hash=block_data)) block = BeaconBlock.create(**sample_beacon_block_params).set( "body", block_body) updated_state = process_eth1_data(state, block, config) updated_votes = updated_state.eth1_data_votes expanded_expected_votes = tuple(mapcat(_expand_eth1_votes, expected_votes)) assert tuple(updated_votes) == expanded_expected_votes
def test_process_eth1_data(original_votes, block_data, expected_votes, sample_beacon_state_params, sample_beacon_block_params, sample_beacon_block_body_params, config): eth1_data_votes = tuple(mapcat( _expand_eth1_votes, original_votes, )) state = BeaconState(**sample_beacon_state_params).copy( eth1_data_votes=eth1_data_votes, ) block_body = BeaconBlockBody(**sample_beacon_block_body_params).copy( eth1_data=Eth1Data( block_hash=block_data, ), ) block = BeaconBlock(**sample_beacon_block_params).copy( body=block_body, ) updated_state = process_eth1_data(state, block, config) updated_votes = updated_state.eth1_data_votes expanded_expected_votes = tuple(mapcat( _expand_eth1_votes, expected_votes, )) assert updated_votes == expanded_expected_votes