address some TODOs (#2005)
This commit is contained in:
parent
e035b7d0c9
commit
b9e122a60c
|
@ -90,7 +90,7 @@ proc process_deposit*(preset: RuntimePreset,
|
||||||
|
|
||||||
let
|
let
|
||||||
pubkey = deposit.data.pubkey
|
pubkey = deposit.data.pubkey
|
||||||
pubkey_inited = pubkey.initPubKey # TODO replicate previous PR semantics, check later
|
pubkey_inited = pubkey.initPubKey
|
||||||
amount = deposit.data.amount
|
amount = deposit.data.amount
|
||||||
var index = -1
|
var index = -1
|
||||||
|
|
||||||
|
@ -445,7 +445,6 @@ proc is_valid_indexed_attestation*(
|
||||||
|
|
||||||
# Verify aggregate signature
|
# Verify aggregate signature
|
||||||
if skipBLSValidation notin flags:
|
if skipBLSValidation notin flags:
|
||||||
# TODO: fuse loops with blsFastAggregateVerify
|
|
||||||
let pubkeys = mapIt(
|
let pubkeys = mapIt(
|
||||||
indexed_attestation.attesting_indices, state.validators[it].pubkey)
|
indexed_attestation.attesting_indices, state.validators[it].pubkey)
|
||||||
if not verify_attestation_signature(
|
if not verify_attestation_signature(
|
||||||
|
|
|
@ -151,15 +151,6 @@ proc blsVerify*(
|
||||||
# TODO: chronicles warning
|
# TODO: chronicles warning
|
||||||
return false
|
return false
|
||||||
|
|
||||||
# TODO: remove fully if the comment below is not true anymore and
|
|
||||||
# and we don't need this workaround
|
|
||||||
# # TODO bls_verify_multiple(...) used to have this workaround, and now it
|
|
||||||
# # lives here. No matter the signature, there's also no meaningful way to
|
|
||||||
# # verify it -- it's a kind of vacuous truth. No pubkey/sig pairs. Sans a
|
|
||||||
# # getBytes() or similar mechanism, pubKey == default(ValidatorPubKey) is
|
|
||||||
# # a way to create many false positive matches. This seems odd.
|
|
||||||
# if pubkey.getBytes() == default(ValidatorPubKey).getBytes():
|
|
||||||
# return true
|
|
||||||
realkey.get.blsValue.verify(message, signature.blsValue)
|
realkey.get.blsValue.verify(message, signature.blsValue)
|
||||||
|
|
||||||
func blsSign*(privkey: ValidatorPrivKey, message: openArray[byte]): ValidatorSig =
|
func blsSign*(privkey: ValidatorPrivKey, message: openArray[byte]): ValidatorSig =
|
||||||
|
|
|
@ -444,7 +444,6 @@ type
|
||||||
message*: AggregateAndProof
|
message*: AggregateAndProof
|
||||||
signature*: ValidatorSig
|
signature*: ValidatorSig
|
||||||
|
|
||||||
# TODO to be replaced with some magic hash caching
|
|
||||||
HashedBeaconState* = object
|
HashedBeaconState* = object
|
||||||
data*: BeaconState
|
data*: BeaconState
|
||||||
root*: Eth2Digest # hash_tree_root(data)
|
root*: Eth2Digest # hash_tree_root(data)
|
||||||
|
|
|
@ -225,16 +225,6 @@ proc state_transition*(
|
||||||
|
|
||||||
false
|
false
|
||||||
|
|
||||||
proc state_transition*(
|
|
||||||
preset: RuntimePreset,
|
|
||||||
state: var HashedBeaconState, signedBlock: SomeSignedBeaconBlock,
|
|
||||||
flags: UpdateFlags, rollback: RollbackHashedProc): bool {.nbench.} =
|
|
||||||
# TODO consider moving this to testutils or similar, since non-testing
|
|
||||||
# and fuzzing code should always be coming from block pool which should
|
|
||||||
# always be providing cache or equivalent
|
|
||||||
var cache = StateCache()
|
|
||||||
state_transition(preset, state, signedBlock, cache, flags, rollback)
|
|
||||||
|
|
||||||
# https://github.com/ethereum/eth2.0-specs/blob/v1.0.0/specs/phase0/validator.md#preparing-for-a-beaconblock
|
# https://github.com/ethereum/eth2.0-specs/blob/v1.0.0/specs/phase0/validator.md#preparing-for-a-beaconblock
|
||||||
proc makeBeaconBlock*(
|
proc makeBeaconBlock*(
|
||||||
preset: RuntimePreset,
|
preset: RuntimePreset,
|
||||||
|
|
|
@ -285,9 +285,10 @@ proc process_justification_and_finalization*(state: var BeaconState,
|
||||||
## Spec:
|
## Spec:
|
||||||
## state.justification_bits[1:] = state.justification_bits[:-1]
|
## state.justification_bits[1:] = state.justification_bits[:-1]
|
||||||
## state.justification_bits[0] = 0b0
|
## state.justification_bits[0] = 0b0
|
||||||
# TODO JUSTIFICATION_BITS_LENGTH is a constant in spec, move there or fix
|
|
||||||
# BitVector serialization in SSZ layer
|
# https://github.com/ethereum/eth2.0-specs/blob/v1.0.0/specs/phase0/beacon-chain.md#constants
|
||||||
const JUSTIFICATION_BITS_LENGTH = 4
|
const JUSTIFICATION_BITS_LENGTH = 4
|
||||||
|
|
||||||
state.justification_bits = (state.justification_bits shl 1) and
|
state.justification_bits = (state.justification_bits shl 1) and
|
||||||
cast[uint8]((2^JUSTIFICATION_BITS_LENGTH) - 1)
|
cast[uint8]((2^JUSTIFICATION_BITS_LENGTH) - 1)
|
||||||
|
|
||||||
|
|
|
@ -140,7 +140,7 @@ proc add*(state: var HashedBeaconState, attestation: Attestation, slot: Slot) =
|
||||||
signMockBlock(state.data, signedBlock)
|
signMockBlock(state.data, signedBlock)
|
||||||
|
|
||||||
let success = state_transition(
|
let success = state_transition(
|
||||||
defaultRuntimePreset, state, signedBlock,
|
defaultRuntimePreset, state, signedBlock, cache,
|
||||||
flags = {skipStateRootValidation}, noRollback)
|
flags = {skipStateRootValidation}, noRollback)
|
||||||
|
|
||||||
doAssert success
|
doAssert success
|
||||||
|
|
|
@ -39,6 +39,7 @@ proc runTest(testName, testDir, unitTestName: string) =
|
||||||
preState = newClone(parseTest(testPath/"pre.ssz", SSZ, BeaconState))
|
preState = newClone(parseTest(testPath/"pre.ssz", SSZ, BeaconState))
|
||||||
hashedPreState = (ref HashedBeaconState)(
|
hashedPreState = (ref HashedBeaconState)(
|
||||||
data: preState[], root: hash_tree_root(preState[]))
|
data: preState[], root: hash_tree_root(preState[]))
|
||||||
|
cache = StateCache()
|
||||||
|
|
||||||
# In test cases with more than 10 blocks the first 10 aren't 0-prefixed,
|
# In test cases with more than 10 blocks the first 10 aren't 0-prefixed,
|
||||||
# so purely lexicographic sorting wouldn't sort properly.
|
# so purely lexicographic sorting wouldn't sort properly.
|
||||||
|
@ -48,11 +49,13 @@ proc runTest(testName, testDir, unitTestName: string) =
|
||||||
|
|
||||||
if hasPostState:
|
if hasPostState:
|
||||||
let success = state_transition(
|
let success = state_transition(
|
||||||
defaultRuntimePreset, hashedPreState[], blck, flags = {}, noRollback)
|
defaultRuntimePreset, hashedPreState[], blck, cache, flags = {},
|
||||||
|
noRollback)
|
||||||
doAssert success, "Failure when applying block " & $i
|
doAssert success, "Failure when applying block " & $i
|
||||||
else:
|
else:
|
||||||
let success = state_transition(
|
let success = state_transition(
|
||||||
defaultRuntimePreset, hashedPreState[], blck, flags = {}, noRollback)
|
defaultRuntimePreset, hashedPreState[], blck, cache, flags = {},
|
||||||
|
noRollback)
|
||||||
doAssert (i + 1 < numBlocks) or not success,
|
doAssert (i + 1 < numBlocks) or not success,
|
||||||
"We didn't expect these invalid blocks to be processed"
|
"We didn't expect these invalid blocks to be processed"
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,8 @@ suiteReport "Block processing" & preset():
|
||||||
previous_block_root = genesisBlock.root
|
previous_block_root = genesisBlock.root
|
||||||
new_block = makeTestBlock(state[], previous_block_root, cache)
|
new_block = makeTestBlock(state[], previous_block_root, cache)
|
||||||
|
|
||||||
let block_ok = state_transition(defaultRuntimePreset, state[], new_block, {}, noRollback)
|
let block_ok = state_transition(
|
||||||
|
defaultRuntimePreset, state[], new_block, cache, {}, noRollback)
|
||||||
|
|
||||||
check:
|
check:
|
||||||
block_ok
|
block_ok
|
||||||
|
@ -61,7 +62,8 @@ suiteReport "Block processing" & preset():
|
||||||
for i in 1..SLOTS_PER_EPOCH:
|
for i in 1..SLOTS_PER_EPOCH:
|
||||||
let new_block = makeTestBlock(state[], previous_block_root, cache)
|
let new_block = makeTestBlock(state[], previous_block_root, cache)
|
||||||
|
|
||||||
let block_ok = state_transition(defaultRuntimePreset, state[], new_block, {}, noRollback)
|
let block_ok = state_transition(
|
||||||
|
defaultRuntimePreset, state[], new_block, cache, {}, noRollback)
|
||||||
|
|
||||||
check:
|
check:
|
||||||
block_ok
|
block_ok
|
||||||
|
@ -97,7 +99,8 @@ suiteReport "Block processing" & preset():
|
||||||
new_block = makeTestBlock(state[], previous_block_root, cache,
|
new_block = makeTestBlock(state[], previous_block_root, cache,
|
||||||
attestations = @[attestation]
|
attestations = @[attestation]
|
||||||
)
|
)
|
||||||
check state_transition(defaultRuntimePreset, state[], new_block, {}, noRollback)
|
check state_transition(
|
||||||
|
defaultRuntimePreset, state[], new_block, cache, {}, noRollback)
|
||||||
|
|
||||||
check:
|
check:
|
||||||
# TODO epoch attestations can get multiplied now; clean up paths to
|
# TODO epoch attestations can get multiplied now; clean up paths to
|
||||||
|
|
Loading…
Reference in New Issue