check that process_slots() succeeds

This commit is contained in:
Dustin Brody 2020-05-19 17:46:29 +02:00 committed by tersec
parent 6c941b1ff7
commit f4d38611ef
8 changed files with 36 additions and 24 deletions

View File

@ -168,7 +168,8 @@ proc runProcessSlots*(dir, preState: string, numSlots: uint64) =
)
state.root = hash_tree_root(state.data)
process_slots(state[], state.data.slot + numSlots)
# Shouldn't necessarily assert, because nbench can run test suite
discard process_slots(state[], state.data.slot + numSlots)
template processEpochScenarioImpl(
dir, preState: string,

View File

@ -127,7 +127,7 @@ proc add*(state: var HashedBeaconState, attestation: Attestation, slot: Slot) =
var signedBlock = mockBlockForNextSlot(state.data)
signedBlock.message.slot = slot
signedBlock.message.body.attestations.add attestation
discard process_slots(state, slot)
doAssert process_slots(state, slot)
signMockBlock(state.data, signedBlock)
doAssert state_transition(

View File

@ -18,8 +18,8 @@ proc nextEpoch*(state: var HashedBeaconState) =
## Transition to the start of the next epoch
let slot =
state.data.slot + SLOTS_PER_EPOCH - (state.data.slot mod SLOTS_PER_EPOCH)
discard process_slots(state, slot)
doAssert process_slots(state, slot)
proc nextSlot*(state: var HashedBeaconState) =
## Transition to the next slot
discard process_slots(state, state.data.slot + 1)
doAssert process_slots(state, state.data.slot + 1)

View File

@ -37,10 +37,11 @@ proc runTest(identifier: string) =
data: preState[], root: hash_tree_root(preState[]))
let postState = newClone(parseTest(testDir/"post.ssz", SSZ, BeaconState))
discard process_slots(
hashedPreState, hashedPreState.data.slot + num_slots)
check:
process_slots(
hashedPreState, hashedPreState.data.slot + num_slots)
check: hashedPreState.root == postState[].hash_tree_root()
hashedPreState.root == postState[].hash_tree_root()
let newPreState = newClone(hashedPreState.data)
reportDiff(newPreState, postState)

View File

@ -26,7 +26,8 @@ suiteReport "Attestation pool processing" & preset():
pool = AttestationPool.init(blockPool)
state = newClone(loadTailState(blockPool))
# Slot 0 is a finalized slot - won't be making attestations for it..
discard process_slots(state.data, state.data.data.slot + 1)
check:
process_slots(state.data, state.data.data.slot + 1)
timedTest "Can add and retrieve simple attestation" & preset():
var cache = get_empty_per_epoch_cache()
@ -39,7 +40,8 @@ suiteReport "Attestation pool processing" & preset():
pool.add(attestation)
discard process_slots(state.data, MIN_ATTESTATION_INCLUSION_DELAY.Slot + 1)
check:
process_slots(state.data, MIN_ATTESTATION_INCLUSION_DELAY.Slot + 1)
let attestations = pool.getAttestationsForBlock(state.data.data)
@ -55,7 +57,8 @@ suiteReport "Attestation pool processing" & preset():
attestation0 = makeAttestation(
state.data.data, state.blck.root, bc0[0], cache)
discard process_slots(state.data, state.data.data.slot + 1)
check:
process_slots(state.data, state.data.data.slot + 1)
let
bc1 = get_beacon_committee(state.data.data,
@ -88,7 +91,8 @@ suiteReport "Attestation pool processing" & preset():
pool.add(attestation0)
pool.add(attestation1)
discard process_slots(state.data, MIN_ATTESTATION_INCLUSION_DELAY.Slot + 1)
check:
process_slots(state.data, MIN_ATTESTATION_INCLUSION_DELAY.Slot + 1)
let attestations = pool.getAttestationsForBlock(state.data.data)
@ -112,7 +116,8 @@ suiteReport "Attestation pool processing" & preset():
pool.add(attestation0)
pool.add(attestation1)
discard process_slots(state.data, MIN_ATTESTATION_INCLUSION_DELAY.Slot + 1)
check:
process_slots(state.data, MIN_ATTESTATION_INCLUSION_DELAY.Slot + 1)
let attestations = pool.getAttestationsForBlock(state.data.data)
@ -135,7 +140,8 @@ suiteReport "Attestation pool processing" & preset():
pool.add(attestation1)
pool.add(attestation0)
discard process_slots(state.data, MIN_ATTESTATION_INCLUSION_DELAY.Slot + 1)
check:
process_slots(state.data, MIN_ATTESTATION_INCLUSION_DELAY.Slot + 1)
let attestations = pool.getAttestationsForBlock(state.data.data)

View File

@ -132,7 +132,8 @@ suiteReport "Block pool processing" & preset():
pool.heads[0].blck == b2Add
# Skip one slot to get a gap
discard process_slots(stateData.data, stateData.data.data.slot + 1)
check:
process_slots(stateData.data, stateData.data.data.slot + 1)
let
b4 = addTestBlock(stateData.data.data, b2Root)
@ -345,8 +346,9 @@ when const_preset == "minimal": # These require some minutes in mainnet
pool.updateHead(added)
# Advance past epoch so that the epoch transition is gapped
discard process_slots(
pool.headState.data, Slot(SLOTS_PER_EPOCH * 6 + 2) )
check:
process_slots(
pool.headState.data, Slot(SLOTS_PER_EPOCH * 6 + 2) )
var blck = makeTestBlock(
pool.headState.data.data, pool.head.blck.root,

View File

@ -29,8 +29,8 @@ suiteReport "Block processing" & preset():
var state = newClone(genesisState)
timedTest "Passes from genesis state, no block" & preset():
discard process_slots(state[], state.data.slot + 1)
check:
process_slots(state[], state.data.slot + 1)
state.data.slot == genesisState.data.slot + 1
timedTest "Passes from genesis state, empty block" & preset():
@ -46,9 +46,8 @@ suiteReport "Block processing" & preset():
state.data.slot == genesisState.data.slot + 1
timedTest "Passes through epoch update, no block" & preset():
discard process_slots(state[], Slot(SLOTS_PER_EPOCH))
check:
process_slots(state[], Slot(SLOTS_PER_EPOCH))
state.data.slot == genesisState.data.slot + SLOTS_PER_EPOCH
timedTest "Passes through epoch update, empty block" & preset():
@ -74,7 +73,8 @@ suiteReport "Block processing" & preset():
cache = get_empty_per_epoch_cache()
# Slot 0 is a finalized slot - won't be making attestations for it..
discard process_slots(state[], state.data.slot + 1)
check:
process_slots(state[], state.data.slot + 1)
let
# Create an attestation for slot 1 signed by the only attester we have!
@ -85,8 +85,9 @@ suiteReport "Block processing" & preset():
# Some time needs to pass before attestations are included - this is
# to let the attestation propagate properly to interested participants
discard process_slots(
state[], GENESIS_SLOT + MIN_ATTESTATION_INCLUSION_DELAY + 1)
check:
process_slots(
state[], GENESIS_SLOT + MIN_ATTESTATION_INCLUSION_DELAY + 1)
let
new_block = makeTestBlock(state.data, previous_block_root,
@ -101,7 +102,8 @@ suiteReport "Block processing" & preset():
when const_preset=="minimal":
# Can take several minutes with mainnet settings
discard process_slots(state[], Slot(191))
check:
process_slots(state[], Slot(191))
# Would need to process more epochs for the attestation to be removed from
# the state! (per above bug)

View File

@ -97,7 +97,7 @@ proc addTestBlock*(
# TODO workaround, disable when this works directly
var hashedState = HashedBeaconState(data: state, root: hash_tree_root(state))
discard process_slots(hashedState, hashedState.data.slot + 1)
doAssert process_slots(hashedState, hashedState.data.slot + 1)
state = hashedState.data
var cache = get_empty_per_epoch_cache()