addLocalValidators impl
This commit is contained in:
parent
cd22fb63a6
commit
f12b679880
|
@ -1,7 +1,7 @@
|
||||||
import
|
import
|
||||||
os, net,
|
os, net, sequtils,
|
||||||
asyncdispatch2, chronicles, confutils, eth_p2p, eth_keys,
|
asyncdispatch2, chronicles, confutils, eth_p2p, eth_keys,
|
||||||
spec/[beaconstate, datatypes, helpers], conf, time, fork_choice,
|
spec/[beaconstate, datatypes, helpers, crypto], conf, time, fork_choice,
|
||||||
beacon_chain_db, validator_pool, mainchain_monitor,
|
beacon_chain_db, validator_pool, mainchain_monitor,
|
||||||
sync_protocol, gossipsub_protocol, trusted_state_snapshots
|
sync_protocol, gossipsub_protocol, trusted_state_snapshots
|
||||||
|
|
||||||
|
@ -67,16 +67,30 @@ proc sync*(node: BeaconNode): Future[bool] {.async.} =
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
||||||
|
template findIt(s: openarray, predicate: untyped): int =
|
||||||
|
var res = -1
|
||||||
|
for i, it {.inject.} in s:
|
||||||
|
if predicate:
|
||||||
|
res = i
|
||||||
|
break
|
||||||
|
res
|
||||||
|
|
||||||
proc addLocalValidators*(node: BeaconNode) =
|
proc addLocalValidators*(node: BeaconNode) =
|
||||||
for validator in node.config.validatorKeys:
|
for validator in node.config.validatorKeys:
|
||||||
# TODO:
|
|
||||||
# 1. Parse the validator keys
|
# 1. Parse the validator keys
|
||||||
#
|
let privKey = loadPrivKey(validator)
|
||||||
|
let pubKey = privKey.pubKey()
|
||||||
|
|
||||||
# 2. Check whether the validators exist in the beacon state.
|
# 2. Check whether the validators exist in the beacon state.
|
||||||
# (Report a warning otherwise)
|
# (Report a warning otherwise)
|
||||||
#
|
let idx = node.beaconState.validator_registry.findIt(it.pubKey == pubKey)
|
||||||
|
if idx == -1:
|
||||||
|
warn "Validator not in registry", pubKey
|
||||||
|
else:
|
||||||
# 3. Add the validators to node.attachedValidators
|
# 3. Add the validators to node.attachedValidators
|
||||||
discard
|
# TODO: Parse randao secret
|
||||||
|
node.attachedValidators.addLocalValidator(idx, pubKey, privKey, @[])
|
||||||
|
|
||||||
|
|
||||||
proc getAttachedValidator(node: BeaconNode, idx: int): AttachedValidator =
|
proc getAttachedValidator(node: BeaconNode, idx: int): AttachedValidator =
|
||||||
let validatorKey = node.beaconState.validator_registry[idx].pubkey
|
let validatorKey = node.beaconState.validator_registry[idx].pubkey
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import
|
import
|
||||||
confutils/defs
|
confutils/defs, spec/crypto, milagro_crypto
|
||||||
|
|
||||||
type
|
type
|
||||||
ValidatorKeyPath* = distinct string
|
ValidatorKeyPath* = distinct string
|
||||||
|
@ -25,9 +25,14 @@ type
|
||||||
"Nimbus will automatically add the extensions .privkey and .pubkey.",
|
"Nimbus will automatically add the extensions .privkey and .pubkey.",
|
||||||
shorthand: "v".}: seq[ValidatorKeyPath]
|
shorthand: "v".}: seq[ValidatorKeyPath]
|
||||||
|
|
||||||
|
proc loadPrivKey*(p: ValidatorKeyPath): ValidatorPrivKey =
|
||||||
|
initSigKey(cast[seq[byte]](readFile(string(p) & ".privkey")))
|
||||||
|
|
||||||
proc parse*(T: type ValidatorKeyPath, input: TaintedString): T =
|
proc parse*(T: type ValidatorKeyPath, input: TaintedString): T =
|
||||||
|
discard loadPrivKey(ValidatorKeyPath(input))
|
||||||
|
|
||||||
# TODO:
|
# TODO:
|
||||||
# Check that the entered string is a valid base file name and
|
# Check that the entered string is a valid base file name and
|
||||||
# that it has matching .privkey, .pubkey and .randaosecret files
|
# that it has matching .privkey, and .randaosecret files
|
||||||
T(input)
|
T(input)
|
||||||
|
|
||||||
|
|
|
@ -20,3 +20,5 @@ type
|
||||||
template hash*(k: ValidatorPubKey|ValidatorPrivKey): Hash =
|
template hash*(k: ValidatorPubKey|ValidatorPrivKey): Hash =
|
||||||
hash(k.getRaw)
|
hash(k.getRaw)
|
||||||
|
|
||||||
|
proc pubKey*(pk: ValidatorPrivKey): ValidatorPubKey = fromSigKey(pk)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue