assert() -> doAssert()
This commit is contained in:
parent
562eafe124
commit
de295619be
|
@ -29,7 +29,7 @@ proc combine*(tgt: var Attestation, src: Attestation, flags: UpdateFlags) =
|
||||||
# Combine the signature and participation bitfield, with the assumption that
|
# Combine the signature and participation bitfield, with the assumption that
|
||||||
# the same data is being signed!
|
# the same data is being signed!
|
||||||
|
|
||||||
assert tgt.data == src.data
|
doAssert tgt.data == src.data
|
||||||
|
|
||||||
# TODO:
|
# TODO:
|
||||||
# when BLS signatures are combined, we must ensure that
|
# when BLS signatures are combined, we must ensure that
|
||||||
|
|
|
@ -36,7 +36,7 @@ proc init*(T: type BlockPool, db: BeaconChainDB): BlockPool =
|
||||||
|
|
||||||
for root, _ in db.getAncestors(headRoot):
|
for root, _ in db.getAncestors(headRoot):
|
||||||
if root == tailRef.root:
|
if root == tailRef.root:
|
||||||
assert(not curRef.isNil)
|
doAssert(not curRef.isNil)
|
||||||
link(tailRef, curRef)
|
link(tailRef, curRef)
|
||||||
curRef = curRef.parent
|
curRef = curRef.parent
|
||||||
break
|
break
|
||||||
|
|
|
@ -421,8 +421,8 @@ proc checkAttestation*(
|
||||||
crosslink_data_root = attestation.data.crosslink_data_root)
|
crosslink_data_root = attestation.data.crosslink_data_root)
|
||||||
return
|
return
|
||||||
|
|
||||||
assert allIt(attestation.custody_bitfield, it == 0) #TO BE REMOVED IN PHASE 1
|
doAssert allIt(attestation.custody_bitfield, it == 0) #TO BE REMOVED IN PHASE 1
|
||||||
assert anyIt(attestation.aggregation_bitfield, it != 0)
|
doAssert anyIt(attestation.aggregation_bitfield, it != 0)
|
||||||
|
|
||||||
let crosslink_committee = mapIt(
|
let crosslink_committee = mapIt(
|
||||||
filterIt(get_crosslink_committees_at_slot(state, attestation_data_slot),
|
filterIt(get_crosslink_committees_at_slot(state, attestation_data_slot),
|
||||||
|
@ -431,20 +431,20 @@ proc checkAttestation*(
|
||||||
|
|
||||||
# Extra checks not in specs
|
# Extra checks not in specs
|
||||||
# https://github.com/status-im/nim-beacon-chain/pull/105#issuecomment-462432544
|
# https://github.com/status-im/nim-beacon-chain/pull/105#issuecomment-462432544
|
||||||
assert attestation.aggregation_bitfield.len == (
|
doAssert attestation.aggregation_bitfield.len == (
|
||||||
crosslink_committee.len + 7) div 8, (
|
crosslink_committee.len + 7) div 8, (
|
||||||
"Error: got " & $attestation.aggregation_bitfield.len &
|
"Error: got " & $attestation.aggregation_bitfield.len &
|
||||||
" but expected " & $((crosslink_committee.len + 7) div 8)
|
" but expected " & $((crosslink_committee.len + 7) div 8)
|
||||||
)
|
)
|
||||||
|
|
||||||
assert attestation.custody_bitfield.len == (
|
doAssert attestation.custody_bitfield.len == (
|
||||||
crosslink_committee.len + 7) div 8, (
|
crosslink_committee.len + 7) div 8, (
|
||||||
"Error: got " & $attestation.custody_bitfield.len &
|
"Error: got " & $attestation.custody_bitfield.len &
|
||||||
" but expected " & $((crosslink_committee.len + 7) div 8)
|
" but expected " & $((crosslink_committee.len + 7) div 8)
|
||||||
)
|
)
|
||||||
# End extra checks
|
# End extra checks
|
||||||
|
|
||||||
assert allIt(0 ..< len(crosslink_committee),
|
doAssert allIt(0 ..< len(crosslink_committee),
|
||||||
if get_bitfield_bit(attestation.aggregation_bitfield, it) == 0b0:
|
if get_bitfield_bit(attestation.aggregation_bitfield, it) == 0b0:
|
||||||
# Should always be true in phase 0, because of above assertion
|
# Should always be true in phase 0, because of above assertion
|
||||||
get_bitfield_bit(attestation.custody_bitfield, it) == 0b0
|
get_bitfield_bit(attestation.custody_bitfield, it) == 0b0
|
||||||
|
@ -463,7 +463,7 @@ proc checkAttestation*(
|
||||||
|
|
||||||
if skipValidation notin flags:
|
if skipValidation notin flags:
|
||||||
# Verify that aggregate_signature verifies using the group pubkey.
|
# Verify that aggregate_signature verifies using the group pubkey.
|
||||||
assert bls_verify_multiple(
|
doAssert bls_verify_multiple(
|
||||||
@[
|
@[
|
||||||
bls_aggregate_pubkeys(mapIt(custody_bit_0_participants,
|
bls_aggregate_pubkeys(mapIt(custody_bit_0_participants,
|
||||||
state.validator_registry[it].pubkey)),
|
state.validator_registry[it].pubkey)),
|
||||||
|
|
|
@ -102,7 +102,7 @@ func merkle_root*(values: openArray[Eth2Digest]): Eth2Digest =
|
||||||
|
|
||||||
# These ``o`` indices get filled from ``values``.
|
# These ``o`` indices get filled from ``values``.
|
||||||
let highest_internally_filled_index = (num_values div 2) - 1
|
let highest_internally_filled_index = (num_values div 2) - 1
|
||||||
assert (highest_internally_filled_index + 1) * 2 >= num_values
|
doAssert (highest_internally_filled_index + 1) * 2 >= num_values
|
||||||
|
|
||||||
for i in countdown(num_values-1, highest_internally_filled_index + 1):
|
for i in countdown(num_values-1, highest_internally_filled_index + 1):
|
||||||
hash_buffer[0..31] = values[i*2 - num_values].data
|
hash_buffer[0..31] = values[i*2 - num_values].data
|
||||||
|
@ -110,7 +110,7 @@ func merkle_root*(values: openArray[Eth2Digest]): Eth2Digest =
|
||||||
o[i] = eth2hash(hash_buffer)
|
o[i] = eth2hash(hash_buffer)
|
||||||
|
|
||||||
## These ``o`` indices get filled from other ``o`` indices.
|
## These ``o`` indices get filled from other ``o`` indices.
|
||||||
assert highest_internally_filled_index * 2 + 1 < num_values
|
doAssert highest_internally_filled_index * 2 + 1 < num_values
|
||||||
|
|
||||||
for i in countdown(highest_internally_filled_index, 1):
|
for i in countdown(highest_internally_filled_index, 1):
|
||||||
hash_buffer[0..31] = o[i*2].data
|
hash_buffer[0..31] = o[i*2].data
|
||||||
|
@ -191,8 +191,8 @@ func get_randao_mix*(state: BeaconState,
|
||||||
## Returns the randao mix at a recent ``epoch``.
|
## Returns the randao mix at a recent ``epoch``.
|
||||||
|
|
||||||
# Cannot underflow, since GENESIS_EPOCH > LATEST_RANDAO_MIXES_LENGTH
|
# Cannot underflow, since GENESIS_EPOCH > LATEST_RANDAO_MIXES_LENGTH
|
||||||
assert get_current_epoch(state) - LATEST_RANDAO_MIXES_LENGTH < epoch
|
doAssert get_current_epoch(state) - LATEST_RANDAO_MIXES_LENGTH < epoch
|
||||||
assert epoch <= get_current_epoch(state)
|
doAssert epoch <= get_current_epoch(state)
|
||||||
|
|
||||||
state.latest_randao_mixes[epoch mod LATEST_RANDAO_MIXES_LENGTH]
|
state.latest_randao_mixes[epoch mod LATEST_RANDAO_MIXES_LENGTH]
|
||||||
|
|
||||||
|
@ -209,7 +209,7 @@ func get_active_index_root(state: BeaconState, epoch: Epoch): Eth2Digest =
|
||||||
|
|
||||||
# https://github.com/ethereum/eth2.0-specs/blob/v0.2.0/specs/core/0_beacon-chain.md#bytes_to_int
|
# https://github.com/ethereum/eth2.0-specs/blob/v0.2.0/specs/core/0_beacon-chain.md#bytes_to_int
|
||||||
func bytes_to_int*(data: seq[byte]): uint64 =
|
func bytes_to_int*(data: seq[byte]): uint64 =
|
||||||
assert data.len == 8
|
doAssert data.len == 8
|
||||||
|
|
||||||
# Little-endian data representation
|
# Little-endian data representation
|
||||||
result = 0
|
result = 0
|
||||||
|
@ -227,14 +227,14 @@ func int_to_bytes32*(x: uint64): array[32, byte] =
|
||||||
func int_to_bytes32*(x: Epoch): array[32, byte] {.borrow.}
|
func int_to_bytes32*(x: Epoch): array[32, byte] {.borrow.}
|
||||||
|
|
||||||
func int_to_bytes1*(x: int): array[1, byte] =
|
func int_to_bytes1*(x: int): array[1, byte] =
|
||||||
assert x >= 0
|
doAssert x >= 0
|
||||||
assert x < 256
|
doAssert x < 256
|
||||||
|
|
||||||
result[0] = x.byte
|
result[0] = x.byte
|
||||||
|
|
||||||
func int_to_bytes4*(x: uint64): array[4, byte] =
|
func int_to_bytes4*(x: uint64): array[4, byte] =
|
||||||
assert x >= 0'u64
|
doAssert x >= 0'u64
|
||||||
assert x < 2'u64^32
|
doAssert x < 2'u64^32
|
||||||
|
|
||||||
# Little-endian data representation
|
# Little-endian data representation
|
||||||
result[0] = ((x shr 0) and 0xff).byte
|
result[0] = ((x shr 0) and 0xff).byte
|
||||||
|
|
|
@ -101,7 +101,7 @@ func get_shuffling*(seed: Eth2Digest,
|
||||||
|
|
||||||
# Split the shuffled list into committees_per_epoch pieces
|
# Split the shuffled list into committees_per_epoch pieces
|
||||||
result = split(shuffled_seq, committees_per_epoch)
|
result = split(shuffled_seq, committees_per_epoch)
|
||||||
assert result.len() == committees_per_epoch # what split should do..
|
doAssert result.len() == committees_per_epoch # what split should do..
|
||||||
|
|
||||||
# https://github.com/ethereum/eth2.0-specs/blob/0.4.0/specs/core/0_beacon-chain.md#get_previous_epoch_committee_count
|
# https://github.com/ethereum/eth2.0-specs/blob/0.4.0/specs/core/0_beacon-chain.md#get_previous_epoch_committee_count
|
||||||
func get_previous_epoch_committee_count(state: BeaconState): uint64 =
|
func get_previous_epoch_committee_count(state: BeaconState): uint64 =
|
||||||
|
|
|
@ -335,7 +335,7 @@ func hash_tree_root*(x: enum): array[8, byte] =
|
||||||
## TODO - Warning ⚠️: not part of the spec
|
## TODO - Warning ⚠️: not part of the spec
|
||||||
## as of https://github.com/ethereum/beacon_chain/pull/133/files
|
## as of https://github.com/ethereum/beacon_chain/pull/133/files
|
||||||
## This is a "stub" needed for BeaconBlock hashing
|
## This is a "stub" needed for BeaconBlock hashing
|
||||||
static: assert x.sizeof == 1 # Check that the enum fits in 1 byte
|
static: doAssert x.sizeof == 1 # Check that the enum fits in 1 byte
|
||||||
# TODO We've put enums where the spec uses `uint64` - maybe we should not be
|
# TODO We've put enums where the spec uses `uint64` - maybe we should not be
|
||||||
# using enums?
|
# using enums?
|
||||||
hash_tree_root(uint64(x))
|
hash_tree_root(uint64(x))
|
||||||
|
|
|
@ -34,7 +34,7 @@ func toHeader(b: BeaconBlock): BeaconBlockHeader =
|
||||||
)
|
)
|
||||||
|
|
||||||
proc fromHeaderAndBody(b: var BeaconBlock, h: BeaconBlockHeader, body: BeaconBlockBody) =
|
proc fromHeaderAndBody(b: var BeaconBlock, h: BeaconBlockHeader, body: BeaconBlockBody) =
|
||||||
assert(hash_tree_root_final(body) == h.body)
|
doAssert(hash_tree_root_final(body) == h.body)
|
||||||
b.slot = h.slot.Slot
|
b.slot = h.slot.Slot
|
||||||
b.parent_root = h.parent_root
|
b.parent_root = h.parent_root
|
||||||
b.state_root = h.state_root
|
b.state_root = h.state_root
|
||||||
|
|
|
@ -27,7 +27,7 @@ proc obtainTrustedStateSnapshot*(db: BeaconChainDB): Future[BeaconState] {.async
|
||||||
#
|
#
|
||||||
# 5. Check that the state snapshot hash is correct and save it in the DB.
|
# 5. Check that the state snapshot hash is correct and save it in the DB.
|
||||||
|
|
||||||
assert(false, "Not implemented")
|
doAssert(false, "Not implemented")
|
||||||
|
|
||||||
proc createStateSnapshot*(
|
proc createStateSnapshot*(
|
||||||
validatorDir: string, numValidators, firstValidator, genesisOffset: int,
|
validatorDir: string, numValidators, firstValidator, genesisOffset: int,
|
||||||
|
|
|
@ -58,8 +58,8 @@ func genRandaoReveal*(k: ValidatorPrivKey, state: BeaconState, slot: Slot):
|
||||||
ValidatorSig =
|
ValidatorSig =
|
||||||
# https://github.com/ethereum/eth2.0-specs/blob/v0.2.0/specs/core/0_beacon-chain.md#randao
|
# https://github.com/ethereum/eth2.0-specs/blob/v0.2.0/specs/core/0_beacon-chain.md#randao
|
||||||
|
|
||||||
# Off-by-one? I often get slot == state.slot but the check was "assert slot > state.slot" (Mamy)
|
# Off-by-one? I often get slot == state.slot but the check was "doAssert slot > state.slot" (Mamy)
|
||||||
assert slot >= state.slot, "input slot: " & $humaneSlotNum(slot) & " - beacon state slot: " & $humaneSlotNum(state.slot)
|
doAssert slot >= state.slot, "input slot: " & $humaneSlotNum(slot) & " - beacon state slot: " & $humaneSlotNum(state.slot)
|
||||||
bls_sign(k, hash_tree_root(slot_to_epoch(slot).uint64),
|
bls_sign(k, hash_tree_root(slot_to_epoch(slot).uint64),
|
||||||
get_domain(state.fork, slot_to_epoch(slot), DOMAIN_RANDAO))
|
get_domain(state.fork, slot_to_epoch(slot), DOMAIN_RANDAO))
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ proc appendBigEndianInt(dst: var seq[byte], src: SomeNumber) =
|
||||||
elif size == 8: # int64
|
elif size == 8: # int64
|
||||||
bigEndian64(dst, src)
|
bigEndian64(dst, src)
|
||||||
else:
|
else:
|
||||||
static: assert false, "src must be a int16, int32 or int64 or unsigned int of the same size"
|
static: doAssert false, "src must be a int16, int32 or int64 or unsigned int of the same size"
|
||||||
|
|
||||||
dst.setLen(dst.len + size)
|
dst.setLen(dst.len + size)
|
||||||
bigEndian(dst[dst.len - size].addr, src.unsafeAddr)
|
bigEndian(dst[dst.len - size].addr, src.unsafeAddr)
|
||||||
|
@ -83,7 +83,7 @@ proc serializeETH[T](x: T): seq[byte] =
|
||||||
for chr in schema:
|
for chr in schema:
|
||||||
result.add byte(chr)
|
result.add byte(chr)
|
||||||
|
|
||||||
assert result.len == offset
|
doAssert result.len == offset
|
||||||
|
|
||||||
# Write raw data - this is similar to SimpleSerialize
|
# Write raw data - this is similar to SimpleSerialize
|
||||||
for field in fields(x):
|
for field in fields(x):
|
||||||
|
@ -98,7 +98,7 @@ proc serializeETH[T](x: T): seq[byte] =
|
||||||
else:
|
else:
|
||||||
raise newException(ValueError, "Not implemented")
|
raise newException(ValueError, "Not implemented")
|
||||||
|
|
||||||
assert result.len == offset + sizeof(T)
|
doAssert result.len == offset + sizeof(T)
|
||||||
|
|
||||||
# Compute the hash
|
# Compute the hash
|
||||||
result[metadataStart ..< metadataStart + sizeof(Hash256)] = blake2_256.digest(result[offset ..< result.len]).data
|
result[metadataStart ..< metadataStart + sizeof(Hash256)] = blake2_256.digest(result[offset ..< result.len]).data
|
||||||
|
|
|
@ -13,7 +13,7 @@ func sumCommittees(v: openArray[seq[ValidatorIndex]], reqCommitteeLen: int): int
|
||||||
## This only holds when num_validators is divisible by
|
## This only holds when num_validators is divisible by
|
||||||
## SLOTS_PER_EPOCH * get_committee_count_per_slot(len(validators))
|
## SLOTS_PER_EPOCH * get_committee_count_per_slot(len(validators))
|
||||||
## as, in general, not all committees can be equally sized.
|
## as, in general, not all committees can be equally sized.
|
||||||
assert x.len == reqCommitteeLen
|
doAssert x.len == reqCommitteeLen
|
||||||
inc result, x.len
|
inc result, x.len
|
||||||
|
|
||||||
func checkPermutation(index: int, list_size: uint64,
|
func checkPermutation(index: int, list_size: uint64,
|
||||||
|
|
|
@ -108,7 +108,7 @@ proc addBlock*(
|
||||||
|
|
||||||
let block_ok = updateState(
|
let block_ok = updateState(
|
||||||
state, previous_block_root, new_block, {skipValidation})
|
state, previous_block_root, new_block, {skipValidation})
|
||||||
assert block_ok
|
doAssert block_ok
|
||||||
|
|
||||||
# Ok, we have the new state as it would look with the block applied - now we
|
# Ok, we have the new state as it would look with the block applied - now we
|
||||||
# can set the state root in order to be able to create a valid signature
|
# can set the state root in order to be able to create a valid signature
|
||||||
|
@ -127,7 +127,7 @@ proc addBlock*(
|
||||||
)
|
)
|
||||||
proposal_hash = signed_root(signed_data, "signature")
|
proposal_hash = signed_root(signed_data, "signature")
|
||||||
|
|
||||||
assert proposerPrivkey.pubKey() == proposer.pubkey,
|
doAssert proposerPrivkey.pubKey() == proposer.pubkey,
|
||||||
"signature key should be derived from private key! - wrong privkey?"
|
"signature key should be derived from private key! - wrong privkey?"
|
||||||
|
|
||||||
if skipValidation notin flags:
|
if skipValidation notin flags:
|
||||||
|
@ -136,7 +136,7 @@ proc addBlock*(
|
||||||
bls_sign(proposerPrivkey, proposal_hash,
|
bls_sign(proposerPrivkey, proposal_hash,
|
||||||
get_domain(state.fork, slot_to_epoch(state.slot), DOMAIN_PROPOSAL))
|
get_domain(state.fork, slot_to_epoch(state.slot), DOMAIN_PROPOSAL))
|
||||||
|
|
||||||
assert bls_verify(
|
doAssert bls_verify(
|
||||||
proposer.pubkey,
|
proposer.pubkey,
|
||||||
proposal_hash, new_block.signature,
|
proposal_hash, new_block.signature,
|
||||||
get_domain(state.fork, slot_to_epoch(state.slot), DOMAIN_PROPOSAL)),
|
get_domain(state.fork, slot_to_epoch(state.slot), DOMAIN_PROPOSAL)),
|
||||||
|
@ -170,7 +170,7 @@ proc makeAttestation*(
|
||||||
sac_index = sac.committee.find(validator_index)
|
sac_index = sac.committee.find(validator_index)
|
||||||
data = makeAttestationData(state, sac.shard, beacon_block_root)
|
data = makeAttestationData(state, sac.shard, beacon_block_root)
|
||||||
|
|
||||||
assert sac_index != -1, "find_shard_committe should guarantee this"
|
doAssert sac_index != -1, "find_shard_committe should guarantee this"
|
||||||
|
|
||||||
var
|
var
|
||||||
aggregation_bitfield = repeat(0'u8, ceil_div8(sac.committee.len))
|
aggregation_bitfield = repeat(0'u8, ceil_div8(sac.committee.len))
|
||||||
|
|
Loading…
Reference in New Issue