mirror of
https://github.com/status-im/nimbus-eth2.git
synced 2025-02-10 13:36:40 +00:00
Merge commit '37967ba03bd652d33d1a06df0f47c35acf28d6c5' into dev/etan/lc-wasm4
This commit is contained in:
commit
d2ef1305af
@ -98,8 +98,6 @@ type
|
|||||||
Eth1BlockTimestamp* = uint64
|
Eth1BlockTimestamp* = uint64
|
||||||
Eth1BlockHeader = engine_api.BlockHeader
|
Eth1BlockHeader = engine_api.BlockHeader
|
||||||
|
|
||||||
GenesisStateRef = ref phase0.BeaconState
|
|
||||||
|
|
||||||
Eth1Block* = ref object
|
Eth1Block* = ref object
|
||||||
hash*: Eth2Digest
|
hash*: Eth2Digest
|
||||||
number*: Eth1BlockNumber
|
number*: Eth1BlockNumber
|
||||||
|
@ -174,10 +174,11 @@ func process_attestation(
|
|||||||
validator_index = validator_index,
|
validator_index = validator_index,
|
||||||
new_vote = shortLog(vote)
|
new_vote = shortLog(vote)
|
||||||
|
|
||||||
func process_attestation_queue(self: var ForkChoice, slot: Slot) =
|
proc process_attestation_queue(self: var ForkChoice, slot: Slot) =
|
||||||
# Spec:
|
# Spec:
|
||||||
# Attestations can only affect the fork choice of subsequent slots.
|
# Attestations can only affect the fork choice of subsequent slots.
|
||||||
# Delay consideration in the fork choice until their slot is in the past.
|
# Delay consideration in the fork choice until their slot is in the past.
|
||||||
|
let startTick = Moment.now()
|
||||||
self.queuedAttestations.keepItIf:
|
self.queuedAttestations.keepItIf:
|
||||||
if it.slot < slot:
|
if it.slot < slot:
|
||||||
for validator_index in it.attesting_indices:
|
for validator_index in it.attesting_indices:
|
||||||
@ -186,6 +187,8 @@ func process_attestation_queue(self: var ForkChoice, slot: Slot) =
|
|||||||
false
|
false
|
||||||
else:
|
else:
|
||||||
true
|
true
|
||||||
|
let endTick = Moment.now()
|
||||||
|
debug "Processed attestation queue", processDur = endTick - startTick
|
||||||
|
|
||||||
func contains*(self: ForkChoiceBackend, block_root: Eth2Digest): bool =
|
func contains*(self: ForkChoiceBackend, block_root: Eth2Digest): bool =
|
||||||
## Returns `true` if a block is known to the fork choice
|
## Returns `true` if a block is known to the fork choice
|
||||||
|
@ -281,6 +281,7 @@ elif const_preset == "mainnet":
|
|||||||
when incbinEnabled:
|
when incbinEnabled:
|
||||||
# Nim is very inefficent at loading large constants from binary files so we
|
# Nim is very inefficent at loading large constants from binary files so we
|
||||||
# use this trick instead which saves significant amounts of compile time
|
# use this trick instead which saves significant amounts of compile time
|
||||||
|
{.push hint[GlobalVar]:off.}
|
||||||
let
|
let
|
||||||
mainnetGenesis* {.importc: "eth2_mainnet_genesis".}: ptr UncheckedArray[byte]
|
mainnetGenesis* {.importc: "eth2_mainnet_genesis".}: ptr UncheckedArray[byte]
|
||||||
mainnetGenesisSize* {.importc: "eth2_mainnet_genesis_size".}: int
|
mainnetGenesisSize* {.importc: "eth2_mainnet_genesis_size".}: int
|
||||||
@ -290,6 +291,7 @@ elif const_preset == "mainnet":
|
|||||||
|
|
||||||
sepoliaGenesis* {.importc: "eth2_sepolia_genesis".}: ptr UncheckedArray[byte]
|
sepoliaGenesis* {.importc: "eth2_sepolia_genesis".}: ptr UncheckedArray[byte]
|
||||||
sepoliaGenesisSize* {.importc: "eth2_sepolia_genesis_size".}: int
|
sepoliaGenesisSize* {.importc: "eth2_sepolia_genesis_size".}: int
|
||||||
|
{.pop.}
|
||||||
|
|
||||||
# let `.incbin` in assembly file find the binary file through search path
|
# let `.incbin` in assembly file find the binary file through search path
|
||||||
{.passc: "-I" & vendorDir.}
|
{.passc: "-I" & vendorDir.}
|
||||||
@ -465,7 +467,8 @@ when const_preset in ["mainnet", "gnosis"]:
|
|||||||
raiseAssert "The baked network metadata should use one of the name above"
|
raiseAssert "The baked network metadata should use one of the name above"
|
||||||
|
|
||||||
func bakedGenesisValidatorsRoot*(metadata: Eth2NetworkMetadata): Opt[Eth2Digest] =
|
func bakedGenesisValidatorsRoot*(metadata: Eth2NetworkMetadata): Opt[Eth2Digest] =
|
||||||
if metadata.genesis.kind == BakedIn:
|
case metadata.genesis.kind
|
||||||
|
of BakedIn:
|
||||||
try:
|
try:
|
||||||
let header = SSZ.decode(
|
let header = SSZ.decode(
|
||||||
toOpenArray(metadata.genesis.bakedBytes, 0, sizeof(BeaconStateHeader) - 1),
|
toOpenArray(metadata.genesis.bakedBytes, 0, sizeof(BeaconStateHeader) - 1),
|
||||||
|
@ -357,6 +357,34 @@ template BeaconBlockType*(fork: static ConsensusFork): auto =
|
|||||||
template BeaconBlockBodyType*(fork: static ConsensusFork): auto =
|
template BeaconBlockBodyType*(fork: static ConsensusFork): auto =
|
||||||
getSymbolFromForkModule(fork, "BeaconBlockBody")
|
getSymbolFromForkModule(fork, "BeaconBlockBody")
|
||||||
|
|
||||||
|
template BeaconState*(kind: static ConsensusFork): auto =
|
||||||
|
when kind == ConsensusFork.Deneb:
|
||||||
|
typedesc[deneb.BeaconState]
|
||||||
|
elif kind == ConsensusFork.Capella:
|
||||||
|
typedesc[capella.BeaconState]
|
||||||
|
elif kind == ConsensusFork.Bellatrix:
|
||||||
|
typedesc[bellatrix.BeaconState]
|
||||||
|
elif kind == ConsensusFork.Altair:
|
||||||
|
typedesc[altair.BeaconState]
|
||||||
|
elif kind == ConsensusFork.Phase0:
|
||||||
|
typedesc[phase0.BeaconState]
|
||||||
|
else:
|
||||||
|
static: raiseAssert "Unreachable"
|
||||||
|
|
||||||
|
template BeaconBlock*(kind: static ConsensusFork): auto =
|
||||||
|
when kind == ConsensusFork.Deneb:
|
||||||
|
typedesc[deneb.BeaconBlock]
|
||||||
|
elif kind == ConsensusFork.Capella:
|
||||||
|
typedesc[capella.BeaconBlock]
|
||||||
|
elif kind == ConsensusFork.Bellatrix:
|
||||||
|
typedesc[bellatrix.BeaconBlock]
|
||||||
|
elif kind == ConsensusFork.Altair:
|
||||||
|
typedesc[altair.BeaconBlock]
|
||||||
|
elif kind == ConsensusFork.Phase0:
|
||||||
|
typedesc[phase0.BeaconBlock]
|
||||||
|
else:
|
||||||
|
static: raiseAssert "Unreachable"
|
||||||
|
|
||||||
template SignedBeaconBlock*(kind: static ConsensusFork): auto =
|
template SignedBeaconBlock*(kind: static ConsensusFork): auto =
|
||||||
when kind == ConsensusFork.Deneb:
|
when kind == ConsensusFork.Deneb:
|
||||||
typedesc[deneb.SignedBeaconBlock]
|
typedesc[deneb.SignedBeaconBlock]
|
||||||
@ -371,6 +399,20 @@ template SignedBeaconBlock*(kind: static ConsensusFork): auto =
|
|||||||
else:
|
else:
|
||||||
static: raiseAssert "Unreachable"
|
static: raiseAssert "Unreachable"
|
||||||
|
|
||||||
|
template TrustedSignedBeaconBlock*(kind: static ConsensusFork): auto =
|
||||||
|
when kind == ConsensusFork.Deneb:
|
||||||
|
typedesc[deneb.TrustedSignedBeaconBlock]
|
||||||
|
elif kind == ConsensusFork.Capella:
|
||||||
|
typedesc[capella.TrustedSignedBeaconBlock]
|
||||||
|
elif kind == ConsensusFork.Bellatrix:
|
||||||
|
typedesc[bellatrix.TrustedSignedBeaconBlock]
|
||||||
|
elif kind == ConsensusFork.Altair:
|
||||||
|
typedesc[altair.TrustedSignedBeaconBlock]
|
||||||
|
elif kind == ConsensusFork.Phase0:
|
||||||
|
typedesc[phase0.TrustedSignedBeaconBlock]
|
||||||
|
else:
|
||||||
|
static: raiseAssert "Unreachable"
|
||||||
|
|
||||||
template ExecutionPayloadForSigning*(kind: static ConsensusFork): auto =
|
template ExecutionPayloadForSigning*(kind: static ConsensusFork): auto =
|
||||||
when kind == ConsensusFork.Deneb:
|
when kind == ConsensusFork.Deneb:
|
||||||
typedesc[deneb.ExecutionPayloadForSigning]
|
typedesc[deneb.ExecutionPayloadForSigning]
|
||||||
|
@ -141,6 +141,7 @@ type
|
|||||||
of BadProposalKind.DatabaseError:
|
of BadProposalKind.DatabaseError:
|
||||||
message*: string
|
message*: string
|
||||||
|
|
||||||
|
{.push warning[ProveField]:off.}
|
||||||
func `==`*(a, b: BadVote): bool =
|
func `==`*(a, b: BadVote): bool =
|
||||||
## Comparison operator.
|
## Comparison operator.
|
||||||
## Used implictily by Result when comparing the
|
## Used implictily by Result when comparing the
|
||||||
@ -167,6 +168,7 @@ func `==`*(a, b: BadVote): bool =
|
|||||||
(a.candidateTarget == b.candidateTarget)
|
(a.candidateTarget == b.candidateTarget)
|
||||||
of BadVoteKind.DatabaseError:
|
of BadVoteKind.DatabaseError:
|
||||||
true
|
true
|
||||||
|
{.pop.}
|
||||||
|
|
||||||
template `==`*(a, b: PubKey0x): bool =
|
template `==`*(a, b: PubKey0x): bool =
|
||||||
PubKeyBytes(a) == PubKeyBytes(b)
|
PubKeyBytes(a) == PubKeyBytes(b)
|
||||||
@ -177,6 +179,7 @@ template `<`*(a, b: PubKey0x): bool =
|
|||||||
template cmp*(a, b: PubKey0x): bool =
|
template cmp*(a, b: PubKey0x): bool =
|
||||||
cmp(PubKeyBytes(a), PubKeyBytes(b))
|
cmp(PubKeyBytes(a), PubKeyBytes(b))
|
||||||
|
|
||||||
|
{.push warning[ProveField]:off.}
|
||||||
func `==`*(a, b: BadProposal): bool =
|
func `==`*(a, b: BadProposal): bool =
|
||||||
## Comparison operator.
|
## Comparison operator.
|
||||||
## Used implictily by Result when comparing the
|
## Used implictily by Result when comparing the
|
||||||
@ -192,6 +195,7 @@ func `==`*(a, b: BadProposal): bool =
|
|||||||
a.candidateSlot == b.candidateSlot
|
a.candidateSlot == b.candidateSlot
|
||||||
else: # Unreachable
|
else: # Unreachable
|
||||||
false
|
false
|
||||||
|
{.pop.}
|
||||||
|
|
||||||
# Serialization
|
# Serialization
|
||||||
# --------------------------------------------
|
# --------------------------------------------
|
||||||
|
@ -314,7 +314,7 @@ proc doppelgangerActivity*(validator: AttachedValidator, epoch: Epoch) =
|
|||||||
validator = shortLog(validator), activity, epoch
|
validator = shortLog(validator), activity, epoch
|
||||||
return
|
return
|
||||||
|
|
||||||
if activity - epoch > 1:
|
if epoch - activity > 1:
|
||||||
# We missed work in some epoch
|
# We missed work in some epoch
|
||||||
debug "Doppelganger stale activity",
|
debug "Doppelganger stale activity",
|
||||||
validator = shortLog(validator), activity, epoch
|
validator = shortLog(validator), activity, epoch
|
||||||
|
@ -13,9 +13,6 @@ import
|
|||||||
taskpools,
|
taskpools,
|
||||||
# Internals
|
# Internals
|
||||||
../../beacon_chain/spec/[helpers, forks, state_transition_block],
|
../../beacon_chain/spec/[helpers, forks, state_transition_block],
|
||||||
../../beacon_chain/spec/datatypes/[
|
|
||||||
base,
|
|
||||||
phase0, altair, bellatrix],
|
|
||||||
../../beacon_chain/fork_choice/[fork_choice, fork_choice_types],
|
../../beacon_chain/fork_choice/[fork_choice, fork_choice_types],
|
||||||
../../beacon_chain/[beacon_chain_db, beacon_clock],
|
../../beacon_chain/[beacon_chain_db, beacon_clock],
|
||||||
../../beacon_chain/consensus_object_pools/[
|
../../beacon_chain/consensus_object_pools/[
|
||||||
@ -70,12 +67,6 @@ type
|
|||||||
of opChecks:
|
of opChecks:
|
||||||
checks: JsonNode
|
checks: JsonNode
|
||||||
|
|
||||||
from ../../beacon_chain/spec/datatypes/capella import
|
|
||||||
BeaconBlock, BeaconState, SignedBeaconBlock
|
|
||||||
|
|
||||||
from ../../beacon_chain/spec/datatypes/deneb import
|
|
||||||
KzgBlob, KzgProof, BeaconBlock, BeaconState, SignedBeaconBlock
|
|
||||||
|
|
||||||
proc initialLoad(
|
proc initialLoad(
|
||||||
path: string, db: BeaconChainDB,
|
path: string, db: BeaconChainDB,
|
||||||
StateType, BlockType: typedesc
|
StateType, BlockType: typedesc
|
||||||
@ -89,37 +80,10 @@ proc initialLoad(
|
|||||||
path/"anchor_block.ssz_snappy",
|
path/"anchor_block.ssz_snappy",
|
||||||
SSZ, BlockType)
|
SSZ, BlockType)
|
||||||
|
|
||||||
when BlockType is deneb.BeaconBlock:
|
signedBlock = ForkedSignedBeaconBlock.init(BlockType.kind.SignedBeaconBlock(
|
||||||
let signedBlock = ForkedSignedBeaconBlock.init(deneb.SignedBeaconBlock(
|
|
||||||
message: blck,
|
message: blck,
|
||||||
# signature: - unused as it's trusted
|
# signature: - unused as it's trusted
|
||||||
root: hash_tree_root(blck)
|
root: hash_tree_root(blck)))
|
||||||
))
|
|
||||||
elif BlockType is capella.BeaconBlock:
|
|
||||||
let signedBlock = ForkedSignedBeaconBlock.init(capella.SignedBeaconBlock(
|
|
||||||
message: blck,
|
|
||||||
# signature: - unused as it's trusted
|
|
||||||
root: hash_tree_root(blck)
|
|
||||||
))
|
|
||||||
elif BlockType is bellatrix.BeaconBlock:
|
|
||||||
let signedBlock = ForkedSignedBeaconBlock.init(bellatrix.SignedBeaconBlock(
|
|
||||||
message: blck,
|
|
||||||
# signature: - unused as it's trusted
|
|
||||||
root: hash_tree_root(blck)
|
|
||||||
))
|
|
||||||
elif BlockType is altair.BeaconBlock:
|
|
||||||
let signedBlock = ForkedSignedBeaconBlock.init(altair.SignedBeaconBlock(
|
|
||||||
message: blck,
|
|
||||||
# signature: - unused as it's trusted
|
|
||||||
root: hash_tree_root(blck)
|
|
||||||
))
|
|
||||||
elif BlockType is phase0.BeaconBlock:
|
|
||||||
let signedBlock = ForkedSignedBeaconBlock.init(phase0.SignedBeaconBlock(
|
|
||||||
message: blck,
|
|
||||||
# signature: - unused as it's trusted
|
|
||||||
root: hash_tree_root(blck)
|
|
||||||
))
|
|
||||||
else: {.error: "Unknown block fork: " & name(BlockType).}
|
|
||||||
|
|
||||||
ChainDAGRef.preInit(db, forkedState[])
|
ChainDAGRef.preInit(db, forkedState[])
|
||||||
|
|
||||||
@ -155,45 +119,14 @@ proc loadOps(path: string, fork: ConsensusFork): seq[Operation] =
|
|||||||
elif step.hasKey"block":
|
elif step.hasKey"block":
|
||||||
let filename = step["block"].getStr()
|
let filename = step["block"].getStr()
|
||||||
doAssert step.hasKey"blobs" == step.hasKey"proofs"
|
doAssert step.hasKey"blobs" == step.hasKey"proofs"
|
||||||
case fork
|
withConsensusFork(fork):
|
||||||
of ConsensusFork.Phase0:
|
|
||||||
let blck = parseTest(
|
|
||||||
path/filename & ".ssz_snappy",
|
|
||||||
SSZ, phase0.SignedBeaconBlock
|
|
||||||
)
|
|
||||||
doAssert not step.hasKey"blobs"
|
|
||||||
result.add Operation(kind: opOnBlock,
|
|
||||||
blck: ForkedSignedBeaconBlock.init(blck))
|
|
||||||
of ConsensusFork.Altair:
|
|
||||||
let blck = parseTest(
|
|
||||||
path/filename & ".ssz_snappy",
|
|
||||||
SSZ, altair.SignedBeaconBlock
|
|
||||||
)
|
|
||||||
doAssert not step.hasKey"blobs"
|
|
||||||
result.add Operation(kind: opOnBlock,
|
|
||||||
blck: ForkedSignedBeaconBlock.init(blck))
|
|
||||||
of ConsensusFork.Bellatrix:
|
|
||||||
let blck = parseTest(
|
|
||||||
path/filename & ".ssz_snappy",
|
|
||||||
SSZ, bellatrix.SignedBeaconBlock
|
|
||||||
)
|
|
||||||
doAssert not step.hasKey"blobs"
|
|
||||||
result.add Operation(kind: opOnBlock,
|
|
||||||
blck: ForkedSignedBeaconBlock.init(blck))
|
|
||||||
of ConsensusFork.Capella:
|
|
||||||
let blck = parseTest(
|
|
||||||
path/filename & ".ssz_snappy",
|
|
||||||
SSZ, capella.SignedBeaconBlock
|
|
||||||
)
|
|
||||||
doAssert not step.hasKey"blobs"
|
|
||||||
result.add Operation(kind: opOnBlock,
|
|
||||||
blck: ForkedSignedBeaconBlock.init(blck))
|
|
||||||
of ConsensusFork.Deneb:
|
|
||||||
let
|
let
|
||||||
blck = parseTest(
|
blck = parseTest(
|
||||||
path/filename & ".ssz_snappy",
|
path/filename & ".ssz_snappy",
|
||||||
SSZ, deneb.SignedBeaconBlock)
|
SSZ, consensusFork.SignedBeaconBlock)
|
||||||
|
|
||||||
blobData =
|
blobData =
|
||||||
|
when consensusFork >= ConsensusFork.Deneb:
|
||||||
if step.hasKey"blobs":
|
if step.hasKey"blobs":
|
||||||
numExtraFields += 2
|
numExtraFields += 2
|
||||||
Opt.some BlobData(
|
Opt.some BlobData(
|
||||||
@ -203,6 +136,10 @@ proc loadOps(path: string, fork: ConsensusFork): seq[Operation] =
|
|||||||
proofs: step["proofs"].mapIt(KzgProof.fromHex(it.getStr())))
|
proofs: step["proofs"].mapIt(KzgProof.fromHex(it.getStr())))
|
||||||
else:
|
else:
|
||||||
Opt.none(BlobData)
|
Opt.none(BlobData)
|
||||||
|
else:
|
||||||
|
doAssert not step.hasKey"blobs"
|
||||||
|
Opt.none(BlobData)
|
||||||
|
|
||||||
result.add Operation(kind: opOnBlock,
|
result.add Operation(kind: opOnBlock,
|
||||||
blck: ForkedSignedBeaconBlock.init(blck),
|
blck: ForkedSignedBeaconBlock.init(blck),
|
||||||
blobData: blobData)
|
blobData: blobData)
|
||||||
@ -264,19 +201,7 @@ proc stepOnBlock(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# 3. Add block to DAG
|
# 3. Add block to DAG
|
||||||
when signedBlock is phase0.SignedBeaconBlock:
|
const consensusFork = typeof(signedBlock).kind
|
||||||
type TrustedBlock = phase0.TrustedSignedBeaconBlock
|
|
||||||
elif signedBlock is altair.SignedBeaconBlock:
|
|
||||||
type TrustedBlock = altair.TrustedSignedBeaconBlock
|
|
||||||
elif signedBlock is bellatrix.SignedBeaconBlock:
|
|
||||||
type TrustedBlock = bellatrix.TrustedSignedBeaconBlock
|
|
||||||
elif signedBlock is capella.SignedBeaconBlock:
|
|
||||||
type TrustedBlock = capella.TrustedSignedBeaconBlock
|
|
||||||
elif signedBlock is deneb.SignedBeaconBlock:
|
|
||||||
type TrustedBlock = deneb.TrustedSignedBeaconBlock
|
|
||||||
else:
|
|
||||||
doAssert false, "Unknown TrustedSignedBeaconBlock fork"
|
|
||||||
|
|
||||||
|
|
||||||
# In normal Nimbus flow, for this (effectively) newPayload-based INVALID, it
|
# In normal Nimbus flow, for this (effectively) newPayload-based INVALID, it
|
||||||
# is checked even before entering the DAG, by the block processor. Currently
|
# is checked even before entering the DAG, by the block processor. Currently
|
||||||
@ -284,9 +209,7 @@ proc stepOnBlock(
|
|||||||
# this wouldn't be part of this check, presumably, their FC test vector step
|
# this wouldn't be part of this check, presumably, their FC test vector step
|
||||||
# would also have `true` validity because it'd not be known they weren't, so
|
# would also have `true` validity because it'd not be known they weren't, so
|
||||||
# adding this mock of the block processor is realistic and sufficient.
|
# adding this mock of the block processor is realistic and sufficient.
|
||||||
when not (
|
when consensusFork >= ConsensusFork.Bellatrix:
|
||||||
signedBlock is phase0.SignedBeaconBlock or
|
|
||||||
signedBlock is altair.SignedBeaconBlock):
|
|
||||||
let executionPayloadHash =
|
let executionPayloadHash =
|
||||||
signedBlock.message.body.execution_payload.block_hash
|
signedBlock.message.body.execution_payload.block_hash
|
||||||
if executionPayloadHash in invalidatedRoots:
|
if executionPayloadHash in invalidatedRoots:
|
||||||
@ -303,7 +226,7 @@ proc stepOnBlock(
|
|||||||
return err VerifierError.Invalid
|
return err VerifierError.Invalid
|
||||||
|
|
||||||
let blockAdded = dag.addHeadBlock(verifier, signedBlock) do (
|
let blockAdded = dag.addHeadBlock(verifier, signedBlock) do (
|
||||||
blckRef: BlockRef, signedBlock: TrustedBlock,
|
blckRef: BlockRef, signedBlock: consensusFork.TrustedSignedBeaconBlock,
|
||||||
epochRef: EpochRef, unrealized: FinalityCheckpoints):
|
epochRef: EpochRef, unrealized: FinalityCheckpoints):
|
||||||
|
|
||||||
# 4. Update fork choice if valid
|
# 4. Update fork choice if valid
|
||||||
@ -370,20 +293,11 @@ proc doRunTest(path: string, fork: ConsensusFork) =
|
|||||||
defer:
|
defer:
|
||||||
db.close()
|
db.close()
|
||||||
|
|
||||||
let stores =
|
|
||||||
case fork
|
|
||||||
of ConsensusFork.Deneb:
|
|
||||||
initialLoad(path, db, deneb.BeaconState, deneb.BeaconBlock)
|
|
||||||
of ConsensusFork.Capella:
|
|
||||||
initialLoad(path, db, capella.BeaconState, capella.BeaconBlock)
|
|
||||||
of ConsensusFork.Bellatrix:
|
|
||||||
initialLoad(path, db, bellatrix.BeaconState, bellatrix.BeaconBlock)
|
|
||||||
of ConsensusFork.Altair:
|
|
||||||
initialLoad(path, db, altair.BeaconState, altair.BeaconBlock)
|
|
||||||
of ConsensusFork.Phase0:
|
|
||||||
initialLoad(path, db, phase0.BeaconState, phase0.BeaconBlock)
|
|
||||||
|
|
||||||
let
|
let
|
||||||
|
stores = withConsensusFork(fork):
|
||||||
|
initialLoad(
|
||||||
|
path, db, consensusFork.BeaconState, consensusFork.BeaconBlock)
|
||||||
|
|
||||||
rng = HmacDrbgContext.new()
|
rng = HmacDrbgContext.new()
|
||||||
taskpool = Taskpool.new()
|
taskpool = Taskpool.new()
|
||||||
var verifier = BatchVerifier.init(rng, taskpool)
|
var verifier = BatchVerifier.init(rng, taskpool)
|
||||||
|
2
vendor/eth2-networks
vendored
2
vendor/eth2-networks
vendored
@ -1 +1 @@
|
|||||||
Subproject commit e930d81f7c9db816c88d1a9336be8cef858f7f4d
|
Subproject commit 063f826a03676c33c95a66306916f18b690d35eb
|
2
vendor/nim-chronicles
vendored
2
vendor/nim-chronicles
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 71556f84af16cd275a8ae4c2390060481c6fedf7
|
Subproject commit fb4fce77ace0b5558df1be21436b331c606de9a2
|
Loading…
x
Reference in New Issue
Block a user