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 process_eth1_data(state: BeaconState, block: BaseBeaconBlock) -> BeaconState: try: vote_index, original_vote = first( (index, eth1_data_vote) for index, eth1_data_vote in enumerate(state.eth1_data_votes) if block.eth1_data == eth1_data_vote.eth1_data ) except StopIteration: new_vote = Eth1DataVote( eth1_data=block.eth1_data, vote_count=1, ) state = state.copy( eth1_data_votes=state.eth1_data_votes + (new_vote,) ) else: updated_vote = original_vote.copy( vote_count=original_vote.vote_count + 1 ) state = state.copy( eth1_data_votes=update_tuple_item(state.eth1_data_votes, vote_index, updated_vote) ) return state
def test_defaults(sample_eth1_data_vote_params): eth1_data_vote = Eth1DataVote(**sample_eth1_data_vote_params, ) assert eth1_data_vote.eth1_data == sample_eth1_data_vote_params[ 'eth1_data'] assert eth1_data_vote.vote_count == sample_eth1_data_vote_params[ 'vote_count']