diff --git a/beacon_chain/attestation_pool.nim b/beacon_chain/attestation_pool.nim index d8e18d0fc..078890667 100644 --- a/beacon_chain/attestation_pool.nim +++ b/beacon_chain/attestation_pool.nim @@ -11,7 +11,7 @@ import deques, sequtils, tables, options, chronicles, stew/[byteutils], json_serialization/std/sets, ./spec/[beaconstate, datatypes, crypto, digest, helpers, validator], - ./extras, ./block_pool, ./beacon_node_types + ./extras, ./block_pool, ./block_pools/candidate_chains, ./beacon_node_types logScope: topics = "attpool" @@ -149,9 +149,9 @@ func updateLatestVotes( pool.latestAttestations[pubKey] = blck func get_attesting_indices_seq(state: BeaconState, - attestation_data: AttestationData, - bits: CommitteeValidatorsBits): seq[ValidatorIndex] = - var cache = get_empty_per_epoch_cache() + attestation_data: AttestationData, + bits: CommitteeValidatorsBits, + cache: var StateCache): seq[ValidatorIndex] = toSeq(items(get_attesting_indices( state, attestation_data, bits, cache))) @@ -191,6 +191,7 @@ proc addResolved(pool: var AttestationPool, blck: BlockRef, attestation: Attesta # TODO inefficient data structures.. + var cache = getEpochCache(blck, state) let attestationSlot = attestation.data.slot idx = pool.slotIndex(state, attestationSlot) @@ -199,7 +200,7 @@ proc addResolved(pool: var AttestationPool, blck: BlockRef, attestation: Attesta aggregation_bits: attestation.aggregation_bits, aggregate_signature: attestation.signature) participants = get_attesting_indices_seq( - state, attestation.data, validation.aggregation_bits) + state, attestation.data, validation.aggregation_bits, cache) var found = false for a in slotData.attestations.mitems(): @@ -214,7 +215,7 @@ proc addResolved(pool: var AttestationPool, blck: BlockRef, attestation: Attesta # and therefore being useful after all? trace "Ignoring subset attestation", existingParticipants = get_attesting_indices_seq( - state, a.data, v.aggregation_bits), + state, a.data, v.aggregation_bits, cache), newParticipants = participants, cat = "filtering" found = true @@ -228,7 +229,7 @@ proc addResolved(pool: var AttestationPool, blck: BlockRef, attestation: Attesta existingParticipants = a.validations.filterIt( it.aggregation_bits.isSubsetOf(validation.aggregation_bits) ).mapIt(get_attesting_indices_seq( - state, a.data, it.aggregation_bits)), + state, a.data, it.aggregation_bits, cache)), newParticipants = participants, cat = "pruning" diff --git a/beacon_chain/block_pools/clearance.nim b/beacon_chain/block_pools/clearance.nim index 00f17daaf..81c828760 100644 --- a/beacon_chain/block_pools/clearance.nim +++ b/beacon_chain/block_pools/clearance.nim @@ -6,7 +6,7 @@ # at your option. This file may not be copied, modified, or distributed except according to those terms. import - chronicles, tables, + chronicles, sequtils, tables, metrics, stew/results, ../ssz/merkleization, ../state_transition, ../extras, ../spec/[crypto, datatypes, digest, helpers], @@ -46,8 +46,8 @@ proc addResolvedBlock( doAssert state.slot == signedBlock.message.slot, "state must match block" let blockRef = BlockRef.init(blockRoot, signedBlock.message) - parent.epochsInfo = - @[populateEpochCache(state, state.slot.compute_epoch_at_slot)] + blockRef.epochsInfo = filterIt(parent.epochsInfo, + it.epoch + 1 >= state.slot.compute_epoch_at_slot) link(parent, blockRef) dag.blocks[blockRoot] = blockRef diff --git a/research/block_sim.nim b/research/block_sim.nim index 0b92fa7c8..51219c5f8 100644 --- a/research/block_sim.nim +++ b/research/block_sim.nim @@ -39,7 +39,7 @@ type Timers = enum # TODO confutils is an impenetrable black box. how can a help text be added here? cli do(slots = SLOTS_PER_EPOCH * 6, - validators = SLOTS_PER_EPOCH * 100, # One per shard is minimum + validators = SLOTS_PER_EPOCH * 130, # One per shard is minimum attesterRatio {.desc: "ratio of validators that attest in each round"} = 0.73, blockRatio {.desc: "ratio of slots with blocks"} = 1.0, replay = true): diff --git a/tests/test_block_pool.nim b/tests/test_block_pool.nim index 41a11b462..18cd986b7 100644 --- a/tests/test_block_pool.nim +++ b/tests/test_block_pool.nim @@ -10,7 +10,7 @@ import options, sequtils, unittest, ./testutil, ./testblockutil, - ../beacon_chain/spec/[datatypes, digest, helpers, validator], + ../beacon_chain/spec/[datatypes, digest, validator], ../beacon_chain/[beacon_node_types, block_pool, state_transition, ssz] suiteReport "BlockRef and helpers" & preset(): @@ -278,7 +278,7 @@ suiteReport "Block pool processing" & preset(): tmpState.data.data.slot == bs1.parent.slot when const_preset == "minimal": # These require some minutes in mainnet - import ../beacon_chain/spec/validator + import ../beacon_chain/spec/helpers suiteReport "BlockPool finalization tests" & preset(): setup: