Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix attestation compatibility issue in distributed validator cluster #5258

Merged
merged 7 commits into from
Mar 23, 2023

Conversation

nflaig
Copy link
Member

@nflaig nflaig commented Mar 10, 2023

Motivation

Closes #5103 and #4687

Description

  • allow to disable attestation service grouping optimization, attestation tasks will be executed per committee instead of just once for all committees
  • add cli option to disable attestation service grouping optimization (--disableAttestationGrouping)
  • add cli option to run as part of a distributed validator cluster (--distributed), this will also disable attestation grouping

Open tasks

  • add tests for runAttestationTasksPerCommittee
  • remove TODOs

@github-actions
Copy link
Contributor

github-actions bot commented Mar 10, 2023

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: e77b192 Previous: 9cc3980 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 482.73 us/op 650.27 us/op 0.74
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 45.946 us/op 57.062 us/op 0.81
BLS verify - blst-native 1.2388 ms/op 1.3531 ms/op 0.92
BLS verifyMultipleSignatures 3 - blst-native 2.4701 ms/op 2.9414 ms/op 0.84
BLS verifyMultipleSignatures 8 - blst-native 5.3712 ms/op 5.8390 ms/op 0.92
BLS verifyMultipleSignatures 32 - blst-native 20.000 ms/op 20.496 ms/op 0.98
BLS aggregatePubkeys 32 - blst-native 26.899 us/op 28.195 us/op 0.95
BLS aggregatePubkeys 128 - blst-native 103.92 us/op 107.09 us/op 0.97
getAttestationsForBlock 62.946 ms/op 63.688 ms/op 0.99
isKnown best case - 1 super set check 267.00 ns/op 295.00 ns/op 0.91
isKnown normal case - 2 super set checks 259.00 ns/op 291.00 ns/op 0.89
isKnown worse case - 16 super set checks 263.00 ns/op 289.00 ns/op 0.91
CheckpointStateCache - add get delete 5.2500 us/op 6.3440 us/op 0.83
validate gossip signedAggregateAndProof - struct 2.9129 ms/op 2.9288 ms/op 0.99
validate gossip attestation - struct 1.4183 ms/op 1.4354 ms/op 0.99
pickEth1Vote - no votes 1.3461 ms/op 1.4598 ms/op 0.92
pickEth1Vote - max votes 9.4923 ms/op 10.731 ms/op 0.88
pickEth1Vote - Eth1Data hashTreeRoot value x2048 9.0931 ms/op 10.096 ms/op 0.90
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 13.573 ms/op 16.457 ms/op 0.82
pickEth1Vote - Eth1Data fastSerialize value x2048 668.72 us/op 835.51 us/op 0.80
pickEth1Vote - Eth1Data fastSerialize tree x2048 4.8103 ms/op 7.8718 ms/op 0.61
bytes32 toHexString 489.00 ns/op 769.00 ns/op 0.64
bytes32 Buffer.toString(hex) 385.00 ns/op 460.00 ns/op 0.84
bytes32 Buffer.toString(hex) from Uint8Array 606.00 ns/op 678.00 ns/op 0.89
bytes32 Buffer.toString(hex) + 0x 396.00 ns/op 450.00 ns/op 0.88
Object access 1 prop 0.17700 ns/op 0.20300 ns/op 0.87
Map access 1 prop 0.16000 ns/op 0.18700 ns/op 0.86
Object get x1000 7.3780 ns/op 8.1980 ns/op 0.90
Map get x1000 0.67300 ns/op 0.71900 ns/op 0.94
Object set x1000 60.559 ns/op 76.351 ns/op 0.79
Map set x1000 47.668 ns/op 63.039 ns/op 0.76
Return object 10000 times 0.24820 ns/op 0.26840 ns/op 0.92
Throw Error 10000 times 4.3092 us/op 4.8470 us/op 0.89
fastMsgIdFn sha256 / 200 bytes 3.5140 us/op 4.0390 us/op 0.87
fastMsgIdFn h32 xxhash / 200 bytes 311.00 ns/op 348.00 ns/op 0.89
fastMsgIdFn h64 xxhash / 200 bytes 447.00 ns/op 507.00 ns/op 0.88
fastMsgIdFn sha256 / 1000 bytes 12.053 us/op 13.142 us/op 0.92
fastMsgIdFn h32 xxhash / 1000 bytes 441.00 ns/op 500.00 ns/op 0.88
fastMsgIdFn h64 xxhash / 1000 bytes 518.00 ns/op 606.00 ns/op 0.85
fastMsgIdFn sha256 / 10000 bytes 106.39 us/op 118.50 us/op 0.90
fastMsgIdFn h32 xxhash / 10000 bytes 2.0000 us/op 2.1890 us/op 0.91
fastMsgIdFn h64 xxhash / 10000 bytes 1.4290 us/op 1.6440 us/op 0.87
enrSubnets - fastDeserialize 64 bits 1.3490 us/op 1.9460 us/op 0.69
enrSubnets - ssz BitVector 64 bits 574.00 ns/op 670.00 ns/op 0.86
enrSubnets - fastDeserialize 4 bits 183.00 ns/op 228.00 ns/op 0.80
enrSubnets - ssz BitVector 4 bits 503.00 ns/op 672.00 ns/op 0.75
prioritizePeers score -10:0 att 32-0.1 sync 2-0 103.54 us/op 131.22 us/op 0.79
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 149.64 us/op 165.88 us/op 0.90
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 187.81 us/op 220.00 us/op 0.85
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 363.83 us/op 428.93 us/op 0.85
prioritizePeers score 0:0 att 64-1 sync 4-1 437.39 us/op 496.28 us/op 0.88
array of 16000 items push then shift 1.7109 us/op 1.9387 us/op 0.88
LinkedList of 16000 items push then shift 9.2520 ns/op 10.314 ns/op 0.90
array of 16000 items push then pop 117.36 ns/op 129.38 ns/op 0.91
LinkedList of 16000 items push then pop 9.0940 ns/op 9.8750 ns/op 0.92
array of 24000 items push then shift 2.4562 us/op 2.5597 us/op 0.96
LinkedList of 24000 items push then shift 9.3300 ns/op 11.095 ns/op 0.84
array of 24000 items push then pop 89.029 ns/op 114.93 ns/op 0.77
LinkedList of 24000 items push then pop 8.8140 ns/op 10.393 ns/op 0.85
intersect bitArray bitLen 8 13.484 ns/op 15.081 ns/op 0.89
intersect array and set length 8 83.495 ns/op 129.62 ns/op 0.64
intersect bitArray bitLen 128 44.657 ns/op 50.411 ns/op 0.89
intersect array and set length 128 1.1642 us/op 1.5251 us/op 0.76
Buffer.concat 32 items 3.0380 us/op 3.6230 us/op 0.84
Uint8Array.set 32 items 2.7710 us/op 2.8870 us/op 0.96
pass gossip attestations to forkchoice per slot 2.9470 ms/op 3.7976 ms/op 0.78
computeDeltas 2.9699 ms/op 3.5198 ms/op 0.84
computeProposerBoostScoreFromBalances 1.8180 ms/op 2.1497 ms/op 0.85
altair processAttestation - 250000 vs - 7PWei normalcase 2.5233 ms/op 4.3551 ms/op 0.58
altair processAttestation - 250000 vs - 7PWei worstcase 3.6282 ms/op 5.7569 ms/op 0.63
altair processAttestation - setStatus - 1/6 committees join 150.75 us/op 163.16 us/op 0.92
altair processAttestation - setStatus - 1/3 committees join 285.87 us/op 336.79 us/op 0.85
altair processAttestation - setStatus - 1/2 committees join 398.64 us/op 443.84 us/op 0.90
altair processAttestation - setStatus - 2/3 committees join 485.29 us/op 586.50 us/op 0.83
altair processAttestation - setStatus - 4/5 committees join 668.06 us/op 767.78 us/op 0.87
altair processAttestation - setStatus - 100% committees join 790.68 us/op 911.27 us/op 0.87
altair processBlock - 250000 vs - 7PWei normalcase 18.510 ms/op 24.322 ms/op 0.76
altair processBlock - 250000 vs - 7PWei normalcase hashState 23.181 ms/op 35.378 ms/op 0.66
altair processBlock - 250000 vs - 7PWei worstcase 50.472 ms/op 59.826 ms/op 0.84
altair processBlock - 250000 vs - 7PWei worstcase hashState 72.935 ms/op 89.335 ms/op 0.82
phase0 processBlock - 250000 vs - 7PWei normalcase 2.2651 ms/op 3.6053 ms/op 0.63
phase0 processBlock - 250000 vs - 7PWei worstcase 31.294 ms/op 37.373 ms/op 0.84
altair processEth1Data - 250000 vs - 7PWei normalcase 548.02 us/op 774.56 us/op 0.71
vc - 250000 eb 1 eth1 1 we 0 wn 0 - smpl 15 8.7180 us/op 10.680 us/op 0.82
vc - 250000 eb 0.95 eth1 0.1 we 0.05 wn 0 - smpl 219 26.166 us/op 28.783 us/op 0.91
vc - 250000 eb 0.95 eth1 0.3 we 0.05 wn 0 - smpl 42 9.8190 us/op 15.327 us/op 0.64
vc - 250000 eb 0.95 eth1 0.7 we 0.05 wn 0 - smpl 18 7.5220 us/op 15.647 us/op 0.48
vc - 250000 eb 0.1 eth1 0.1 we 0 wn 0 - smpl 1020 107.63 us/op 109.00 us/op 0.99
vc - 250000 eb 0.03 eth1 0.03 we 0 wn 0 - smpl 11777 730.79 us/op 985.52 us/op 0.74
vc - 250000 eb 0.01 eth1 0.01 we 0 wn 0 - smpl 16384 941.07 us/op 1.1403 ms/op 0.83
vc - 250000 eb 0 eth1 0 we 0 wn 0 - smpl 16384 921.84 us/op 1.1090 ms/op 0.83
vc - 250000 eb 0 eth1 0 we 0 wn 0 nocache - smpl 16384 2.7167 ms/op 3.9063 ms/op 0.70
vc - 250000 eb 0 eth1 1 we 0 wn 0 - smpl 16384 1.7266 ms/op 1.8304 ms/op 0.94
vc - 250000 eb 0 eth1 1 we 0 wn 0 nocache - smpl 16384 4.3514 ms/op 6.1937 ms/op 0.70
Tree 40 250000 create 399.11 ms/op 761.93 ms/op 0.52
Tree 40 250000 get(125000) 200.53 ns/op 251.12 ns/op 0.80
Tree 40 250000 set(125000) 1.1841 us/op 2.1161 us/op 0.56
Tree 40 250000 toArray() 24.535 ms/op 31.351 ms/op 0.78
Tree 40 250000 iterate all - toArray() + loop 22.177 ms/op 29.887 ms/op 0.74
Tree 40 250000 iterate all - get(i) 73.268 ms/op 92.122 ms/op 0.80
MutableVector 250000 create 10.019 ms/op 16.490 ms/op 0.61
MutableVector 250000 get(125000) 7.2900 ns/op 8.2400 ns/op 0.88
MutableVector 250000 set(125000) 275.49 ns/op 437.01 ns/op 0.63
MutableVector 250000 toArray() 3.2178 ms/op 4.6218 ms/op 0.70
MutableVector 250000 iterate all - toArray() + loop 3.0769 ms/op 4.8973 ms/op 0.63
MutableVector 250000 iterate all - get(i) 1.5691 ms/op 1.9440 ms/op 0.81
Array 250000 create 3.1978 ms/op 5.2668 ms/op 0.61
Array 250000 clone - spread 1.2262 ms/op 1.6617 ms/op 0.74
Array 250000 get(125000) 0.59600 ns/op 1.2250 ns/op 0.49
Array 250000 set(125000) 0.66800 ns/op 2.1480 ns/op 0.31
Array 250000 iterate all - loop 104.30 us/op 171.72 us/op 0.61
effectiveBalanceIncrements clone Uint8Array 300000 35.981 us/op 79.907 us/op 0.45
effectiveBalanceIncrements clone MutableVector 300000 386.00 ns/op 1.5600 us/op 0.25
effectiveBalanceIncrements rw all Uint8Array 300000 172.14 us/op 229.06 us/op 0.75
effectiveBalanceIncrements rw all MutableVector 300000 102.86 ms/op 212.77 ms/op 0.48
phase0 afterProcessEpoch - 250000 vs - 7PWei 122.70 ms/op 153.96 ms/op 0.80
phase0 beforeProcessEpoch - 250000 vs - 7PWei 41.181 ms/op 81.418 ms/op 0.51
altair processEpoch - mainnet_e81889 370.58 ms/op 452.32 ms/op 0.82
mainnet_e81889 - altair beforeProcessEpoch 70.265 ms/op 104.64 ms/op 0.67
mainnet_e81889 - altair processJustificationAndFinalization 23.604 us/op 37.899 us/op 0.62
mainnet_e81889 - altair processInactivityUpdates 6.4540 ms/op 7.6634 ms/op 0.84
mainnet_e81889 - altair processRewardsAndPenalties 54.085 ms/op 98.497 ms/op 0.55
mainnet_e81889 - altair processRegistryUpdates 3.8310 us/op 8.1240 us/op 0.47
mainnet_e81889 - altair processSlashings 840.00 ns/op 1.5540 us/op 0.54
mainnet_e81889 - altair processEth1DataReset 878.00 ns/op 1.5960 us/op 0.55
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.4896 ms/op 1.6619 ms/op 0.90
mainnet_e81889 - altair processSlashingsReset 6.2530 us/op 10.694 us/op 0.58
mainnet_e81889 - altair processRandaoMixesReset 7.3540 us/op 11.129 us/op 0.66
mainnet_e81889 - altair processHistoricalRootsUpdate 822.00 ns/op 3.0430 us/op 0.27
mainnet_e81889 - altair processParticipationFlagUpdates 5.2360 us/op 7.4590 us/op 0.70
mainnet_e81889 - altair processSyncCommitteeUpdates 1.0940 us/op 1.5450 us/op 0.71
mainnet_e81889 - altair afterProcessEpoch 140.93 ms/op 167.41 ms/op 0.84
phase0 processEpoch - mainnet_e58758 378.67 ms/op 445.49 ms/op 0.85
mainnet_e58758 - phase0 beforeProcessEpoch 138.98 ms/op 154.95 ms/op 0.90
mainnet_e58758 - phase0 processJustificationAndFinalization 16.806 us/op 25.243 us/op 0.67
mainnet_e58758 - phase0 processRewardsAndPenalties 50.434 ms/op 73.666 ms/op 0.68
mainnet_e58758 - phase0 processRegistryUpdates 7.8900 us/op 9.7580 us/op 0.81
mainnet_e58758 - phase0 processSlashings 542.00 ns/op 694.00 ns/op 0.78
mainnet_e58758 - phase0 processEth1DataReset 505.00 ns/op 986.00 ns/op 0.51
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.1185 ms/op 1.1320 ms/op 0.99
mainnet_e58758 - phase0 processSlashingsReset 4.2350 us/op 3.7330 us/op 1.13
mainnet_e58758 - phase0 processRandaoMixesReset 5.5120 us/op 4.4390 us/op 1.24
mainnet_e58758 - phase0 processHistoricalRootsUpdate 1.0520 us/op 568.00 ns/op 1.85
mainnet_e58758 - phase0 processParticipationRecordUpdates 4.2880 us/op 4.1300 us/op 1.04
mainnet_e58758 - phase0 afterProcessEpoch 105.17 ms/op 107.64 ms/op 0.98
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.2996 ms/op 1.3841 ms/op 0.94
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.5909 ms/op 1.7378 ms/op 0.92
altair processInactivityUpdates - 250000 normalcase 21.827 ms/op 29.033 ms/op 0.75
altair processInactivityUpdates - 250000 worstcase 24.115 ms/op 28.693 ms/op 0.84
phase0 processRegistryUpdates - 250000 normalcase 6.9750 us/op 7.8120 us/op 0.89
phase0 processRegistryUpdates - 250000 badcase_full_deposits 269.99 us/op 288.44 us/op 0.94
phase0 processRegistryUpdates - 250000 worstcase 0.5 119.46 ms/op 149.37 ms/op 0.80
altair processRewardsAndPenalties - 250000 normalcase 63.517 ms/op 70.023 ms/op 0.91
altair processRewardsAndPenalties - 250000 worstcase 61.862 ms/op 70.200 ms/op 0.88
phase0 getAttestationDeltas - 250000 normalcase 7.2436 ms/op 8.4452 ms/op 0.86
phase0 getAttestationDeltas - 250000 worstcase 8.7283 ms/op 7.4100 ms/op 1.18
phase0 processSlashings - 250000 worstcase 3.8806 ms/op 3.9786 ms/op 0.98
altair processSyncCommitteeUpdates - 250000 191.48 ms/op 197.13 ms/op 0.97
BeaconState.hashTreeRoot - No change 288.00 ns/op 371.00 ns/op 0.78
BeaconState.hashTreeRoot - 1 full validator 55.295 us/op 61.495 us/op 0.90
BeaconState.hashTreeRoot - 32 full validator 571.33 us/op 616.41 us/op 0.93
BeaconState.hashTreeRoot - 512 full validator 5.7845 ms/op 6.8100 ms/op 0.85
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 69.386 us/op 73.702 us/op 0.94
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 948.69 us/op 1.0160 ms/op 0.93
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 13.142 ms/op 13.232 ms/op 0.99
BeaconState.hashTreeRoot - 1 balances 53.626 us/op 55.526 us/op 0.97
BeaconState.hashTreeRoot - 32 balances 480.38 us/op 515.91 us/op 0.93
BeaconState.hashTreeRoot - 512 balances 4.8370 ms/op 4.9651 ms/op 0.97
BeaconState.hashTreeRoot - 250000 balances 81.122 ms/op 79.353 ms/op 1.02
aggregationBits - 2048 els - zipIndexesInBitList 32.018 us/op 18.127 us/op 1.77
regular array get 100000 times 47.582 us/op 36.571 us/op 1.30
wrappedArray get 100000 times 34.427 us/op 36.429 us/op 0.95
arrayWithProxy get 100000 times 16.534 ms/op 17.999 ms/op 0.92
ssz.Root.equals 611.00 ns/op 663.00 ns/op 0.92
byteArrayEquals 600.00 ns/op 630.00 ns/op 0.95
shuffle list - 16384 els 7.2028 ms/op 7.7083 ms/op 0.93
shuffle list - 250000 els 106.05 ms/op 112.40 ms/op 0.94
processSlot - 1 slots 9.6390 us/op 10.706 us/op 0.90
processSlot - 32 slots 1.4649 ms/op 1.5493 ms/op 0.95
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 34.303 ms/op 47.180 ms/op 0.73
getCommitteeAssignments - req 1 vs - 250000 vc 3.0069 ms/op 3.6963 ms/op 0.81
getCommitteeAssignments - req 100 vs - 250000 vc 4.2685 ms/op 5.0917 ms/op 0.84
getCommitteeAssignments - req 1000 vs - 250000 vc 4.7164 ms/op 5.3836 ms/op 0.88
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 5.3800 ns/op 6.1300 ns/op 0.88
state getBlockRootAtSlot - 250000 vs - 7PWei 958.58 ns/op 1.3566 us/op 0.71
computeProposers - vc 250000 11.539 ms/op 12.778 ms/op 0.90
computeEpochShuffling - vc 250000 112.04 ms/op 119.79 ms/op 0.94
getNextSyncCommittee - vc 250000 189.80 ms/op 198.03 ms/op 0.96

by benchmarkbot/action

@nflaig nflaig force-pushed the nflaig/dvt-compatibility-issues branch 2 times, most recently from deacc45 to 2c323b6 Compare March 10, 2023 19:52
@dapplion
Copy link
Contributor

Is this solution really simpler than just branching on the original class?

@nflaig
Copy link
Member Author

nflaig commented Mar 11, 2023

@dapplion I need to further refactor this so get a better picture, the 4 options I see are

  1. implement subclass which overrides runAttestationTasks method
  2. add if-else branch to runAttestationTasks
  3. add 2nd method runDistributedAttestationTasks
  4. remove the optimization implemented in Do single call to produce attestation #3917

IMO our attestation service is really easy to reason about at the moment and I really want to keep it like that. Completely isolating the logic seems like the best idea.

Copy link
Contributor

@dapplion dapplion left a comment

Choose a reason for hiding this comment

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

IMO it's much more simple to have branching logic, see full implementation here https://github.com/ChainSafe/lodestar/compare/dapplion/attestation-service-no-grouping?expand=1

@nflaig nflaig force-pushed the nflaig/dvt-compatibility-issues branch 2 times, most recently from fe962d9 to 090104f Compare March 13, 2023 15:23
@nflaig
Copy link
Member Author

nflaig commented Mar 13, 2023

IMO it's much more simple to have branching logic, see full implementation here

@dapplion thanks for the input, after further refactoring and reviewing I think you are right, I also like the branching solution more

Updated the code based on your initial implementation

@nflaig nflaig force-pushed the nflaig/dvt-compatibility-issues branch from 090104f to ef86934 Compare March 13, 2023 20:28
@nflaig nflaig requested a review from dapplion March 13, 2023 20:29
@nflaig nflaig force-pushed the nflaig/dvt-compatibility-issues branch from ef86934 to ccdf9f9 Compare March 14, 2023 13:21
@nflaig nflaig marked this pull request as ready for review March 14, 2023 13:25
@nflaig nflaig requested a review from a team as a code owner March 14, 2023 13:25
Copy link
Contributor

@dapplion dapplion left a comment

Choose a reason for hiding this comment

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

Looks good to merge! Just a few nits

packages/cli/src/cmds/validator/options.ts Outdated Show resolved Hide resolved
packages/validator/src/services/attestation.ts Outdated Show resolved Hide resolved
packages/validator/src/services/attestation.ts Outdated Show resolved Hide resolved
@nflaig nflaig force-pushed the nflaig/dvt-compatibility-issues branch from 617b089 to 0bea203 Compare March 15, 2023 14:43
dapplion
dapplion previously approved these changes Mar 15, 2023
twoeths
twoeths previously approved these changes Mar 16, 2023
Copy link
Contributor

@twoeths twoeths left a comment

Choose a reason for hiding this comment

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

lgtm

@nflaig nflaig dismissed stale reviews from twoeths and dapplion via 69827ad March 16, 2023 13:52
@nflaig nflaig force-pushed the nflaig/dvt-compatibility-issues branch from 59f3fd7 to 69827ad Compare March 16, 2023 13:52
@nflaig nflaig added the status-do-not-merge Merging this issue will break the build. Do not merge! label Mar 17, 2023
@nflaig
Copy link
Member Author

nflaig commented Mar 17, 2023

This should not be merged yet, waiting for confirmation from Obol that this actually fixes the DVT compatibility issues.

@philknows philknows self-requested a review March 17, 2023 16:48
philknows
philknows previously approved these changes Mar 17, 2023
@nflaig nflaig force-pushed the nflaig/dvt-compatibility-issues branch from ebf265d to 7a5e0c9 Compare March 22, 2023 15:03
@nflaig nflaig marked this pull request as draft March 22, 2023 19:33
@nflaig nflaig force-pushed the nflaig/dvt-compatibility-issues branch from 602c0fc to 9ab6aad Compare March 23, 2023 09:07
@nflaig nflaig removed the status-do-not-merge Merging this issue will break the build. Do not merge! label Mar 23, 2023
@nflaig nflaig marked this pull request as ready for review March 23, 2023 09:23
@nflaig nflaig requested a review from dapplion March 23, 2023 09:24
@nflaig
Copy link
Member Author

nflaig commented Mar 23, 2023

This should not be merged yet, waiting for confirmation from Obol that this actually fixes the DVT compatibility issues.

Testing was successful 👍

@nflaig nflaig merged commit ac77c6f into unstable Mar 23, 2023
@nflaig nflaig deleted the nflaig/dvt-compatibility-issues branch March 23, 2023 11:51
@wemeetagain
Copy link
Member

🎉 This PR is included in v1.7.0 🎉

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.

Add CLI option to change validator behavior in distributed cluster (DVT)
5 participants