Skip to content

Assert equal params with only whitelisted keys - #4062

Merged
wemeetagain merged 6 commits into
masterfrom
dapplion/vc-config-check
May 27, 2022
Merged

Assert equal params with only whitelisted keys#4062
wemeetagain merged 6 commits into
masterfrom
dapplion/vc-config-check

Conversation

@dapplion

@dapplion dapplion commented May 25, 2022

Copy link
Copy Markdown
Contributor

Motivation

Lodestar validator client asserts that the beacon node is connecting to has the same configuration. This check is very important to exit early in case of misconfiguration. However, in the past it has broke interoperability with other clients due to the checks being too strict on params that are not guaranteed to be the same.

Latest consensus release changed SHARDING_FORK_VERSION. We don't know when each client will update this value since it doesn't matter now.

https://github.com/ethereum/consensus-specs/pull/2896/files#diff-fa42a5809dc8042fed427fd9d2d54c2595789c5cad751b03a8d118871285c26fL48

We need a more resilient check that only looks are "relevant" keys, and ignores the ones that are likely to change or not critical for interoperability.

Description

Assert equal params with only whitelisted keys.

So this check only compares a specific list of parameters that are consensus critical, ignoring the rest. Typed config and preset ensure new parameters are leveled critical or ignore, facilitating maintenance of the list

Please @g11tech and @dadepo can you ensure that this PR doesn't break interop with other CL clients?

@dapplion
dapplion requested a review from a team as a code owner May 25, 2022 14:46
@github-actions

github-actions Bot commented May 25, 2022

Copy link
Copy Markdown
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 8753acd Previous: 18c504c Ratio
BeaconState.hashTreeRoot - No change 430.00 ns/op 499.00 ns/op 0.86
BeaconState.hashTreeRoot - 1 full validator 55.300 us/op 66.754 us/op 0.83
BeaconState.hashTreeRoot - 32 full validator 543.69 us/op 656.25 us/op 0.83
BeaconState.hashTreeRoot - 512 full validator 6.1278 ms/op 6.9925 ms/op 0.88
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 69.778 us/op 84.127 us/op 0.83
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 956.21 us/op 1.1235 ms/op 0.85
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 13.547 ms/op 15.013 ms/op 0.90
BeaconState.hashTreeRoot - 1 balances 55.222 us/op 63.961 us/op 0.86
BeaconState.hashTreeRoot - 32 balances 465.83 us/op 572.34 us/op 0.81
BeaconState.hashTreeRoot - 512 balances 4.8389 ms/op 5.4313 ms/op 0.89
BeaconState.hashTreeRoot - 250000 balances 106.60 ms/op 110.03 ms/op 0.97
processSlot - 1 slots 11.350 us/op 11.751 us/op 0.97
processSlot - 32 slots 1.6633 ms/op 1.8479 ms/op 0.90
getCommitteeAssignments - req 1 vs - 250000 vc 5.3089 ms/op 5.4382 ms/op 0.98
getCommitteeAssignments - req 100 vs - 250000 vc 7.3937 ms/op 7.9791 ms/op 0.93
getCommitteeAssignments - req 1000 vs - 250000 vc 7.9337 ms/op 8.5888 ms/op 0.92
computeProposers - vc 250000 16.982 ms/op 16.780 ms/op 1.01
computeEpochShuffling - vc 250000 166.88 ms/op 173.67 ms/op 0.96
getNextSyncCommittee - vc 250000 286.06 ms/op 279.55 ms/op 1.02
altair processAttestation - 250000 vs - 7PWei normalcase 4.6472 ms/op 3.3053 ms/op 1.41
altair processAttestation - 250000 vs - 7PWei worstcase 6.2634 ms/op 4.8136 ms/op 1.30
altair processAttestation - setStatus - 1/6 committees join 198.00 us/op 166.79 us/op 1.19
altair processAttestation - setStatus - 1/3 committees join 380.89 us/op 327.97 us/op 1.16
altair processAttestation - setStatus - 1/2 committees join 529.33 us/op 465.96 us/op 1.14
altair processAttestation - setStatus - 2/3 committees join 676.09 us/op 622.44 us/op 1.09
altair processAttestation - setStatus - 4/5 committees join 956.73 us/op 845.98 us/op 1.13
altair processAttestation - setStatus - 100% committees join 1.1216 ms/op 1.0283 ms/op 1.09
altair processBlock - 250000 vs - 7PWei normalcase 30.411 ms/op 21.538 ms/op 1.41
altair processBlock - 250000 vs - 7PWei normalcase hashState 39.537 ms/op 35.086 ms/op 1.13
altair processBlock - 250000 vs - 7PWei worstcase 76.424 ms/op 80.786 ms/op 0.95
altair processBlock - 250000 vs - 7PWei worstcase hashState 114.25 ms/op 101.75 ms/op 1.12
altair processEth1Data - 250000 vs - 7PWei normalcase 862.54 us/op 746.73 us/op 1.16
altair processEpoch - mainnet_e81889 574.46 ms/op 504.33 ms/op 1.14
mainnet_e81889 - altair beforeProcessEpoch 108.91 ms/op 102.91 ms/op 1.06
mainnet_e81889 - altair processJustificationAndFinalization 21.132 us/op 18.362 us/op 1.15
mainnet_e81889 - altair processInactivityUpdates 12.367 ms/op 8.7209 ms/op 1.42
mainnet_e81889 - altair processRewardsAndPenalties 163.72 ms/op 109.18 ms/op 1.50
mainnet_e81889 - altair processRegistryUpdates 2.9840 us/op 2.6470 us/op 1.13
mainnet_e81889 - altair processSlashings 709.00 ns/op 581.00 ns/op 1.22
mainnet_e81889 - altair processEth1DataReset 651.00 ns/op 660.00 ns/op 0.99
mainnet_e81889 - altair processEffectiveBalanceUpdates 2.9309 ms/op 2.2027 ms/op 1.33
mainnet_e81889 - altair processSlashingsReset 4.4480 us/op 3.4120 us/op 1.30
mainnet_e81889 - altair processRandaoMixesReset 6.2730 us/op 4.2660 us/op 1.47
mainnet_e81889 - altair processHistoricalRootsUpdate 868.00 ns/op 711.00 ns/op 1.22
mainnet_e81889 - altair processParticipationFlagUpdates 2.5420 us/op 1.9660 us/op 1.29
mainnet_e81889 - altair processSyncCommitteeUpdates 646.00 ns/op 646.00 ns/op 1.00
mainnet_e81889 - altair afterProcessEpoch 192.24 ms/op 199.67 ms/op 0.96
altair processInactivityUpdates - 250000 normalcase 35.188 ms/op 30.869 ms/op 1.14
altair processInactivityUpdates - 250000 worstcase 29.090 ms/op 22.295 ms/op 1.30
altair processRewardsAndPenalties - 250000 normalcase 136.82 ms/op 89.419 ms/op 1.53
altair processRewardsAndPenalties - 250000 worstcase 82.491 ms/op 83.370 ms/op 0.99
altair processSyncCommitteeUpdates - 250000 284.38 ms/op 299.74 ms/op 0.95
Tree 40 250000 create 982.60 ms/op 703.16 ms/op 1.40
Tree 40 250000 get(125000) 299.86 ns/op 244.39 ns/op 1.23
Tree 40 250000 set(125000) 3.0813 us/op 2.0290 us/op 1.52
Tree 40 250000 toArray() 34.978 ms/op 27.075 ms/op 1.29
Tree 40 250000 iterate all - toArray() + loop 35.819 ms/op 26.864 ms/op 1.33
Tree 40 250000 iterate all - get(i) 117.24 ms/op 111.05 ms/op 1.06
MutableVector 250000 create 19.800 ms/op 12.704 ms/op 1.56
MutableVector 250000 get(125000) 13.140 ns/op 11.011 ns/op 1.19
MutableVector 250000 set(125000) 891.88 ns/op 533.35 ns/op 1.67
MutableVector 250000 toArray() 8.4380 ms/op 5.3981 ms/op 1.56
MutableVector 250000 iterate all - toArray() + loop 8.5536 ms/op 5.7445 ms/op 1.49
MutableVector 250000 iterate all - get(i) 3.3004 ms/op 2.7792 ms/op 1.19
Array 250000 create 7.7915 ms/op 5.0642 ms/op 1.54
Array 250000 clone - spread 4.6365 ms/op 2.6830 ms/op 1.73
Array 250000 get(125000) 1.9790 ns/op 1.3240 ns/op 1.49
Array 250000 set(125000) 1.9220 ns/op 1.3300 ns/op 1.45
Array 250000 iterate all - loop 169.93 us/op 153.70 us/op 1.11
effectiveBalanceIncrements clone Uint8Array 300000 119.20 us/op 43.126 us/op 2.76
effectiveBalanceIncrements clone MutableVector 300000 1.4230 us/op 894.00 ns/op 1.59
effectiveBalanceIncrements rw all Uint8Array 300000 252.53 us/op 247.63 us/op 1.02
effectiveBalanceIncrements rw all MutableVector 300000 299.31 ms/op 169.65 ms/op 1.76
aggregationBits - 2048 els - zipIndexesInBitList 47.378 us/op 26.474 us/op 1.79
regular array get 100000 times 67.400 us/op 62.479 us/op 1.08
wrappedArray get 100000 times 67.405 us/op 60.561 us/op 1.11
arrayWithProxy get 100000 times 29.582 ms/op 29.077 ms/op 1.02
ssz.Root.equals 570.00 ns/op 511.00 ns/op 1.12
byteArrayEquals 568.00 ns/op 491.00 ns/op 1.16
phase0 processBlock - 250000 vs - 7PWei normalcase 4.4859 ms/op 3.4236 ms/op 1.31
phase0 processBlock - 250000 vs - 7PWei worstcase 48.519 ms/op 51.427 ms/op 0.94
phase0 afterProcessEpoch - 250000 vs - 7PWei 192.19 ms/op 191.05 ms/op 1.01
phase0 beforeProcessEpoch - 250000 vs - 7PWei 79.277 ms/op 67.959 ms/op 1.17
phase0 processEpoch - mainnet_e58758 543.03 ms/op 479.95 ms/op 1.13
mainnet_e58758 - phase0 beforeProcessEpoch 253.39 ms/op 174.25 ms/op 1.45
mainnet_e58758 - phase0 processJustificationAndFinalization 22.628 us/op 17.159 us/op 1.32
mainnet_e58758 - phase0 processRewardsAndPenalties 137.00 ms/op 100.83 ms/op 1.36
mainnet_e58758 - phase0 processRegistryUpdates 9.8620 us/op 7.6450 us/op 1.29
mainnet_e58758 - phase0 processSlashings 689.00 ns/op 604.00 ns/op 1.14
mainnet_e58758 - phase0 processEth1DataReset 754.00 ns/op 652.00 ns/op 1.16
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 2.1319 ms/op 1.6515 ms/op 1.29
mainnet_e58758 - phase0 processSlashingsReset 4.7520 us/op 3.5150 us/op 1.35
mainnet_e58758 - phase0 processRandaoMixesReset 5.7910 us/op 4.1000 us/op 1.41
mainnet_e58758 - phase0 processHistoricalRootsUpdate 849.00 ns/op 761.00 ns/op 1.12
mainnet_e58758 - phase0 processParticipationRecordUpdates 5.5530 us/op 3.7400 us/op 1.48
mainnet_e58758 - phase0 afterProcessEpoch 160.44 ms/op 164.81 ms/op 0.97
phase0 processEffectiveBalanceUpdates - 250000 normalcase 2.9102 ms/op 1.9818 ms/op 1.47
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 3.1787 ms/op 2.3192 ms/op 1.37
phase0 processRegistryUpdates - 250000 normalcase 8.1880 us/op 6.3770 us/op 1.28
phase0 processRegistryUpdates - 250000 badcase_full_deposits 410.44 us/op 363.85 us/op 1.13
phase0 processRegistryUpdates - 250000 worstcase 0.5 234.15 ms/op 171.93 ms/op 1.36
phase0 getAttestationDeltas - 250000 normalcase 16.323 ms/op 12.497 ms/op 1.31
phase0 getAttestationDeltas - 250000 worstcase 16.668 ms/op 12.859 ms/op 1.30
phase0 processSlashings - 250000 worstcase 5.9990 ms/op 5.2090 ms/op 1.15
shuffle list - 16384 els 10.949 ms/op 11.409 ms/op 0.96
shuffle list - 250000 els 161.56 ms/op 169.79 ms/op 0.95
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 375.96 us/op 370.91 us/op 1.01
pass gossip attestations to forkchoice per slot 3.3317 ms/op 2.9870 ms/op 1.12
computeDeltas 3.6998 ms/op 3.2895 ms/op 1.12
computeProposerBoostScoreFromBalances 907.56 us/op 803.98 us/op 1.13
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 2.7015 ms/op 1.7930 ms/op 1.51
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 87.730 us/op 63.634 us/op 1.38
BLS verify - blst-native 1.8584 ms/op 2.1744 ms/op 0.85
BLS verifyMultipleSignatures 3 - blst-native 3.8104 ms/op 4.4810 ms/op 0.85
BLS verifyMultipleSignatures 8 - blst-native 8.2207 ms/op 9.6728 ms/op 0.85
BLS verifyMultipleSignatures 32 - blst-native 29.763 ms/op 35.146 ms/op 0.85
BLS aggregatePubkeys 32 - blst-native 39.783 us/op 46.770 us/op 0.85
BLS aggregatePubkeys 128 - blst-native 153.91 us/op 182.79 us/op 0.84
getAttestationsForBlock 71.351 ms/op 53.359 ms/op 1.34
isKnown best case - 1 super set check 433.00 ns/op 495.00 ns/op 0.87
isKnown normal case - 2 super set checks 424.00 ns/op 481.00 ns/op 0.88
isKnown worse case - 16 super set checks 427.00 ns/op 485.00 ns/op 0.88
CheckpointStateCache - add get delete 11.531 us/op 10.607 us/op 1.09
validate gossip signedAggregateAndProof - struct 4.2684 ms/op 5.0141 ms/op 0.85
validate gossip attestation - struct 2.0243 ms/op 2.3685 ms/op 0.85
altair verifyImport mainnet_s3766816:31 6.2154 s/op 6.8422 s/op 0.91
pickEth1Vote - no votes 2.1515 ms/op 2.0973 ms/op 1.03
pickEth1Vote - max votes 28.889 ms/op 20.541 ms/op 1.41
pickEth1Vote - Eth1Data hashTreeRoot value x2048 11.950 ms/op 12.534 ms/op 0.95
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 24.453 ms/op 21.987 ms/op 1.11
pickEth1Vote - Eth1Data fastSerialize value x2048 1.5496 ms/op 1.4625 ms/op 1.06
pickEth1Vote - Eth1Data fastSerialize tree x2048 19.270 ms/op 11.466 ms/op 1.68
bytes32 toHexString 1.0430 us/op 893.00 ns/op 1.17
bytes32 Buffer.toString(hex) 694.00 ns/op 734.00 ns/op 0.95
bytes32 Buffer.toString(hex) from Uint8Array 957.00 ns/op 955.00 ns/op 1.00
bytes32 Buffer.toString(hex) + 0x 705.00 ns/op 746.00 ns/op 0.95
Object access 1 prop 0.34200 ns/op 0.32900 ns/op 1.04
Map access 1 prop 0.29500 ns/op 0.30800 ns/op 0.96
Object get x1000 17.835 ns/op 11.212 ns/op 1.59
Map get x1000 0.98400 ns/op 0.97500 ns/op 1.01
Object set x1000 114.07 ns/op 67.385 ns/op 1.69
Map set x1000 69.628 ns/op 43.920 ns/op 1.59
Return object 10000 times 0.37350 ns/op 0.43250 ns/op 0.86
Throw Error 10000 times 5.8913 us/op 6.2503 us/op 0.94
enrSubnets - fastDeserialize 64 bits 2.7190 us/op 2.4480 us/op 1.11
enrSubnets - ssz BitVector 64 bits 732.00 ns/op 777.00 ns/op 0.94
enrSubnets - fastDeserialize 4 bits 376.00 ns/op 353.00 ns/op 1.07
enrSubnets - ssz BitVector 4 bits 738.00 ns/op 810.00 ns/op 0.91
prioritizePeers score -10:0 att 32-0.1 sync 2-0 95.131 us/op 78.415 us/op 1.21
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 124.95 us/op 120.60 us/op 1.04
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 210.06 us/op 190.12 us/op 1.10
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 460.88 us/op 368.78 us/op 1.25
prioritizePeers score 0:0 att 64-1 sync 4-1 460.38 us/op 435.12 us/op 1.06
RateTracker 1000000 limit, 1 obj count per request 187.66 ns/op 193.23 ns/op 0.97
RateTracker 1000000 limit, 2 obj count per request 138.43 ns/op 140.49 ns/op 0.99
RateTracker 1000000 limit, 4 obj count per request 113.51 ns/op 114.45 ns/op 0.99
RateTracker 1000000 limit, 8 obj count per request 103.04 ns/op 100.77 ns/op 1.02
RateTracker with prune 4.2230 us/op 3.4490 us/op 1.22
array of 16000 items push then shift 3.1933 us/op 51.568 us/op 0.06
LinkedList of 16000 items push then shift 26.457 ns/op 15.467 ns/op 1.71
array of 16000 items push then pop 245.19 ns/op 171.14 ns/op 1.43
LinkedList of 16000 items push then pop 22.068 ns/op 13.866 ns/op 1.59
array of 24000 items push then shift 4.5628 us/op 77.322 us/op 0.06
LinkedList of 24000 items push then shift 26.785 ns/op 18.249 ns/op 1.47
array of 24000 items push then pop 191.15 ns/op 167.38 ns/op 1.14
LinkedList of 24000 items push then pop 22.536 ns/op 15.433 ns/op 1.46
intersect bitArray bitLen 8 11.747 ns/op 10.729 ns/op 1.09
intersect array and set length 8 162.02 ns/op 127.92 ns/op 1.27
intersect bitArray bitLen 128 62.015 ns/op 57.629 ns/op 1.08
intersect array and set length 128 2.2808 us/op 1.6648 us/op 1.37

by benchmarkbot/action

Comment thread packages/validator/src/util/params.ts
Comment thread packages/validator/src/util/params.ts
* So this check only compares a specific list of parameters that are consensus critical, ignoring the rest. Typed
* config and preset ensure new parameters are leveled critical or ignore, faciliating manteinance of the list.
*/
export function assertEqualParams(localConfig: IChainConfig, externalSpecJson: Record<string, string>): void {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it would also be nice to update the tests for this logic with this new requirement

Comment thread packages/validator/src/util/params.ts Outdated
@g11tech

g11tech commented May 25, 2022

Copy link
Copy Markdown
Contributor

got this (lighthouse BN):
./lodestar validator --network kiln --interopIndexes "0..5" --server http://167.172.234.224:4000

May-25 18:11:16.064[]                 info: Genesis available
  Error: Not equal BeaconParams
INACTIVITY_PENALTY_QUOTIENT_BELLATRIX not defined in external config
INACTIVITY_PENALTY_QUOTIENT_BELLATRIX different value: 16777216 != undefined
MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX not defined in external config
MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX different value: 32 != undefined
PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX not defined in external config
PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX different value: 3 != undefined
MAX_BYTES_PER_TRANSACTION not defined in external config
MAX_BYTES_PER_TRANSACTION different value: 1073741824 != undefined
MAX_TRANSACTIONS_PER_PAYLOAD not defined in external config
MAX_TRANSACTIONS_PER_PAYLOAD different value: 1048576 != undefined
BYTES_PER_LOGS_BLOOM not defined in external config
BYTES_PER_LOGS_BLOOM different value: 256 != undefined
MAX_EXTRA_DATA_BYTES not defined in external config
MAX_EXTRA_DATA_BYTES different value: 32 != undefined
    at assertEqualParams (file:///usr/app/packages/validator/src/util/params.ts:65:11)
    at Function.initializeFromBeaconNode (file:///usr/app/packages/validator/src/validator.ts:161:5)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)

@g11tech

g11tech commented May 25, 2022

Copy link
Copy Markdown
Contributor

prsym:
./lodestar validator --network kiln --interopIndexes "0..5" --server http://164.92.130.39:4000

May-25 18:16:39.480[]                 info: Lodestar network=kiln, version=v0.37.0/c165a5c, commit=c165a5cf7f56b34d37492942db9b094d6ee3c0b5
May-25 18:16:39.571[]                 info: Decrypted 6 local keystores
May-25 18:16:39.571[]                 info: 0xb8720175cf41e0a67313224e85f86ad6f2ee0f775717646b21fb373eafeb015cdf88721387a989bfe71676405f01552c
May-25 18:16:39.571[]                 info: 0x93a8b44b4a6cee4611cf2b3efc689cf7ca9a6be3638fefe8ecf10da98b9f03e2bef867bf3a7d3ae77cd86a31c8d83cf5
May-25 18:16:39.572[]                 info: 0xb76d52873e0e1ebd2746af664a1ca015e5ff6c02287bf010b550123b752c31659c5207c70670ee34b07a7bb25b564529
May-25 18:16:39.572[]                 info: 0xa1da06aff8e369e5c871c4b63e930e8b5359f05591e6f336684f1e9ee8e952ed7541f082d9482f01d934501f3de58c1e
May-25 18:16:39.572[]                 info: 0xa3c9b8d51584e7f37c3bef871c9339eeb0ac805705a7aaf151becde5322edded237198ea798791d68b84444eb6dc0e24
May-25 18:16:39.572[]                 info: 0xb2fd9f2f484781147238cc0bc1cc80c0f4f05d28efd8813dcae7a5f8cde0ee2074dbca69fac9b25f9c4d87705732fd37
May-25 18:16:40.022[]                 info: Genesis available
  Error: Not equal BeaconParams
MAX_BYTES_PER_TRANSACTION not defined in external config
MAX_BYTES_PER_TRANSACTION different value: 1073741824 != undefined
MAX_TRANSACTIONS_PER_PAYLOAD not defined in external config
MAX_TRANSACTIONS_PER_PAYLOAD different value: 1048576 != undefined
BYTES_PER_LOGS_BLOOM not defined in external config
BYTES_PER_LOGS_BLOOM different value: 256 != undefined
MAX_EXTRA_DATA_BYTES not defined in external config
MAX_EXTRA_DATA_BYTES different value: 32 != undefined
    at assertEqualParams (file:///usr/app/packages/validator/src/util/params.ts:65:11)
    at Function.initializeFromBeaconNode (file:///usr/app/packages/validator/src/validator.ts:161:5)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at Object.validatorHandler [as handler] (file:///usr/app/packages/cli/src/cmds/validator/handler.ts:122:21)

@dapplion

Copy link
Copy Markdown
Contributor Author

@g11tech thanks for checking! Makes sense, all of those params are for future forks so I will ignore them conditionally.

@dapplion

Copy link
Copy Markdown
Contributor Author

Not that easy lol, checked Lighthouse source and they manually declare which parameters to expose. The list is a bit random and can be updated at any point without notice. What should we do?

https://github.com/sigp/lighthouse/blob/bac7c3fa544495a257722aaad9cd8f72fee2f2b4/consensus/types/src/chain_spec.rs#L941

@dapplion

dapplion commented May 26, 2022

Copy link
Copy Markdown
Contributor Author

Changed code to only consider keys that are:

  • manually specified relevant i.e. won't change AND are critical
  • are declared locally
  • are declared in the remote spec

// The config/spec endpoint is poorly specified, so in practice each client returns a custom selection of keys.
// For example Lighthouse returns a manually selected list of keys that may be updated at any time.
// https://github.com/sigp/lighthouse/blob/bac7c3fa544495a257722aaad9cd8f72fee2f2b4/consensus/types/src/chain_spec.rs#L941
//
// So if we assert that spec critical keys are present in the spec we may break interoperability unexpectedly.
// So it's best to ignore keys are not defined in both specs and trust that the ones defined are sufficient
// to detect spec discrepancies in all cases.
externalSpecJson[key] === undefined

@g11tech tests work

./lodestar validator --network kiln --interopIndexes "0..5" --server http://167.172.234.224:4000
./lodestar validator --network kiln --interopIndexes "0..5" --server http://164.92.130.39:4000

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants