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

feat: allow builder only proposal flow for benefit of DVT protocols #5669

Merged
merged 5 commits into from
Jun 19, 2023

Conversation

g11tech
Copy link
Contributor

@g11tech g11tech commented Jun 19, 2023

DVT protocols block proposal may depend on sourcing block for proposal only through relayer so that the distributed validators are signing off on same block for proposal.

This PR allows for the same via --builder.selection=builderonly option

@g11tech g11tech requested a review from a team as a code owner June 19, 2023 11:18
@github-actions
Copy link
Contributor

github-actions bot commented Jun 19, 2023

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: e7b9b8e Previous: c8f94b7 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 848.05 us/op 545.38 us/op 1.55
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 43.552 us/op 48.056 us/op 0.91
BLS verify - blst-native 1.2019 ms/op 1.2243 ms/op 0.98
BLS verifyMultipleSignatures 3 - blst-native 2.4461 ms/op 2.4691 ms/op 0.99
BLS verifyMultipleSignatures 8 - blst-native 5.2566 ms/op 5.2894 ms/op 0.99
BLS verifyMultipleSignatures 32 - blst-native 19.040 ms/op 19.353 ms/op 0.98
BLS aggregatePubkeys 32 - blst-native 25.201 us/op 25.618 us/op 0.98
BLS aggregatePubkeys 128 - blst-native 98.299 us/op 100.60 us/op 0.98
getAttestationsForBlock 52.085 ms/op 52.810 ms/op 0.99
isKnown best case - 1 super set check 243.00 ns/op 268.00 ns/op 0.91
isKnown normal case - 2 super set checks 235.00 ns/op 255.00 ns/op 0.92
isKnown worse case - 16 super set checks 238.00 ns/op 253.00 ns/op 0.94
CheckpointStateCache - add get delete 4.7670 us/op 5.0070 us/op 0.95
validate gossip signedAggregateAndProof - struct 2.6888 ms/op 2.7791 ms/op 0.97
validate gossip attestation - struct 1.2837 ms/op 1.3361 ms/op 0.96
pickEth1Vote - no votes 1.1998 ms/op 1.2668 ms/op 0.95
pickEth1Vote - max votes 10.046 ms/op 9.3767 ms/op 1.07
pickEth1Vote - Eth1Data hashTreeRoot value x2048 8.6500 ms/op 9.4096 ms/op 0.92
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 14.885 ms/op 14.492 ms/op 1.03
pickEth1Vote - Eth1Data fastSerialize value x2048 636.03 us/op 633.04 us/op 1.00
pickEth1Vote - Eth1Data fastSerialize tree x2048 8.0063 ms/op 6.3244 ms/op 1.27
bytes32 toHexString 493.00 ns/op 478.00 ns/op 1.03
bytes32 Buffer.toString(hex) 331.00 ns/op 341.00 ns/op 0.97
bytes32 Buffer.toString(hex) from Uint8Array 542.00 ns/op 535.00 ns/op 1.01
bytes32 Buffer.toString(hex) + 0x 334.00 ns/op 343.00 ns/op 0.97
Object access 1 prop 0.15800 ns/op 0.15600 ns/op 1.01
Map access 1 prop 0.15300 ns/op 0.15200 ns/op 1.01
Object get x1000 6.8140 ns/op 6.3240 ns/op 1.08
Map get x1000 0.60700 ns/op 0.55800 ns/op 1.09
Object set x1000 51.757 ns/op 51.254 ns/op 1.01
Map set x1000 43.226 ns/op 41.531 ns/op 1.04
Return object 10000 times 0.23790 ns/op 0.22330 ns/op 1.07
Throw Error 10000 times 4.1760 us/op 4.0016 us/op 1.04
fastMsgIdFn sha256 / 200 bytes 3.4400 us/op 3.3130 us/op 1.04
fastMsgIdFn h32 xxhash / 200 bytes 279.00 ns/op 267.00 ns/op 1.04
fastMsgIdFn h64 xxhash / 200 bytes 390.00 ns/op 382.00 ns/op 1.02
fastMsgIdFn sha256 / 1000 bytes 11.765 us/op 11.095 us/op 1.06
fastMsgIdFn h32 xxhash / 1000 bytes 402.00 ns/op 389.00 ns/op 1.03
fastMsgIdFn h64 xxhash / 1000 bytes 473.00 ns/op 449.00 ns/op 1.05
fastMsgIdFn sha256 / 10000 bytes 103.94 us/op 102.51 us/op 1.01
fastMsgIdFn h32 xxhash / 10000 bytes 1.9870 us/op 1.8990 us/op 1.05
fastMsgIdFn h64 xxhash / 10000 bytes 1.4040 us/op 1.3220 us/op 1.06
enrSubnets - fastDeserialize 64 bits 1.3040 us/op 1.2750 us/op 1.02
enrSubnets - ssz BitVector 64 bits 526.00 ns/op 483.00 ns/op 1.09
enrSubnets - fastDeserialize 4 bits 177.00 ns/op 170.00 ns/op 1.04
enrSubnets - ssz BitVector 4 bits 509.00 ns/op 477.00 ns/op 1.07
prioritizePeers score -10:0 att 32-0.1 sync 2-0 105.83 us/op 101.37 us/op 1.04
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 137.95 us/op 130.17 us/op 1.06
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 169.13 us/op 165.29 us/op 1.02
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 302.66 us/op 295.73 us/op 1.02
prioritizePeers score 0:0 att 64-1 sync 4-1 381.30 us/op 361.71 us/op 1.05
array of 16000 items push then shift 1.5781 us/op 1.6577 us/op 0.95
LinkedList of 16000 items push then shift 8.6910 ns/op 8.7730 ns/op 0.99
array of 16000 items push then pop 91.674 ns/op 80.909 ns/op 1.13
LinkedList of 16000 items push then pop 8.2060 ns/op 8.5230 ns/op 0.96
array of 24000 items push then shift 2.3087 us/op 2.3948 us/op 0.96
LinkedList of 24000 items push then shift 8.8460 ns/op 8.7040 ns/op 1.02
array of 24000 items push then pop 80.441 ns/op 75.257 ns/op 1.07
LinkedList of 24000 items push then pop 8.6080 ns/op 8.6890 ns/op 0.99
intersect bitArray bitLen 8 13.421 ns/op 13.238 ns/op 1.01
intersect array and set length 8 81.685 ns/op 78.323 ns/op 1.04
intersect bitArray bitLen 128 44.370 ns/op 44.005 ns/op 1.01
intersect array and set length 128 1.0790 us/op 1.0755 us/op 1.00
Buffer.concat 32 items 2.9210 us/op 2.8570 us/op 1.02
Uint8Array.set 32 items 2.4710 us/op 2.6850 us/op 0.92
transfer serialized Status (84 B) 2.0160 us/op 2.0850 us/op 0.97
copy serialized Status (84 B) 1.7600 us/op 1.7250 us/op 1.02
transfer serialized SignedVoluntaryExit (112 B) 2.1880 us/op 2.1250 us/op 1.03
copy serialized SignedVoluntaryExit (112 B) 1.8010 us/op 1.7250 us/op 1.04
transfer serialized ProposerSlashing (416 B) 2.1850 us/op 2.9590 us/op 0.74
copy serialized ProposerSlashing (416 B) 1.9410 us/op 2.6570 us/op 0.73
transfer serialized Attestation (485 B) 3.0550 us/op 2.4130 us/op 1.27
copy serialized Attestation (485 B) 3.0770 us/op 2.6230 us/op 1.17
transfer serialized AttesterSlashing (33232 B) 3.3120 us/op 2.6780 us/op 1.24
copy serialized AttesterSlashing (33232 B) 6.2730 us/op 6.1570 us/op 1.02
transfer serialized Small SignedBeaconBlock (128000 B) 3.1300 us/op 3.1570 us/op 0.99
copy serialized Small SignedBeaconBlock (128000 B) 12.896 us/op 13.198 us/op 0.98
transfer serialized Avg SignedBeaconBlock (200000 B) 3.3730 us/op 3.3350 us/op 1.01
copy serialized Avg SignedBeaconBlock (200000 B) 19.299 us/op 20.604 us/op 0.94
transfer serialized BlobsSidecar (524380 B) 3.3320 us/op 3.2540 us/op 1.02
copy serialized BlobsSidecar (524380 B) 183.25 us/op 115.31 us/op 1.59
transfer serialized Big SignedBeaconBlock (1000000 B) 3.5620 us/op 3.3720 us/op 1.06
copy serialized Big SignedBeaconBlock (1000000 B) 269.00 us/op 277.80 us/op 0.97
pass gossip attestations to forkchoice per slot 2.7209 ms/op 2.5733 ms/op 1.06
forkChoice updateHead vc 100000 bc 64 eq 0 2.1716 ms/op 2.0282 ms/op 1.07
forkChoice updateHead vc 600000 bc 64 eq 0 11.906 ms/op 11.181 ms/op 1.06
forkChoice updateHead vc 1000000 bc 64 eq 0 22.174 ms/op 21.245 ms/op 1.04
forkChoice updateHead vc 600000 bc 320 eq 0 17.066 ms/op 16.341 ms/op 1.04
forkChoice updateHead vc 600000 bc 1200 eq 0 81.557 ms/op 77.759 ms/op 1.05
forkChoice updateHead vc 600000 bc 64 eq 1000 21.031 ms/op 20.382 ms/op 1.03
forkChoice updateHead vc 600000 bc 64 eq 10000 22.393 ms/op 22.266 ms/op 1.01
forkChoice updateHead vc 600000 bc 64 eq 300000 31.581 ms/op 30.552 ms/op 1.03
computeDeltas 3.2873 ms/op 3.8800 ms/op 0.85
computeProposerBoostScoreFromBalances 1.8235 ms/op 1.7835 ms/op 1.02
altair processAttestation - 250000 vs - 7PWei normalcase 2.3386 ms/op 2.1927 ms/op 1.07
altair processAttestation - 250000 vs - 7PWei worstcase 3.4248 ms/op 3.2385 ms/op 1.06
altair processAttestation - setStatus - 1/6 committees join 146.51 us/op 141.81 us/op 1.03
altair processAttestation - setStatus - 1/3 committees join 296.34 us/op 266.65 us/op 1.11
altair processAttestation - setStatus - 1/2 committees join 373.35 us/op 360.17 us/op 1.04
altair processAttestation - setStatus - 2/3 committees join 477.12 us/op 464.54 us/op 1.03
altair processAttestation - setStatus - 4/5 committees join 661.77 us/op 667.58 us/op 0.99
altair processAttestation - setStatus - 100% committees join 789.00 us/op 757.71 us/op 1.04
altair processBlock - 250000 vs - 7PWei normalcase 17.675 ms/op 15.980 ms/op 1.11
altair processBlock - 250000 vs - 7PWei normalcase hashState 25.430 ms/op 25.517 ms/op 1.00
altair processBlock - 250000 vs - 7PWei worstcase 51.840 ms/op 54.899 ms/op 0.94
altair processBlock - 250000 vs - 7PWei worstcase hashState 74.638 ms/op 73.338 ms/op 1.02
phase0 processBlock - 250000 vs - 7PWei normalcase 2.2906 ms/op 2.1388 ms/op 1.07
phase0 processBlock - 250000 vs - 7PWei worstcase 31.939 ms/op 29.219 ms/op 1.09
altair processEth1Data - 250000 vs - 7PWei normalcase 552.26 us/op 530.55 us/op 1.04
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 8.6060 us/op 7.3860 us/op 1.17
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 27.275 us/op 25.341 us/op 1.08
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 12.032 us/op 9.0550 us/op 1.33
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 8.6920 us/op 7.4670 us/op 1.16
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 111.95 us/op 100.98 us/op 1.11
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 678.57 us/op 664.51 us/op 1.02
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 910.13 us/op 984.17 us/op 0.92
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 926.53 us/op 973.49 us/op 0.95
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 2.4275 ms/op 2.9378 ms/op 0.83
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 1.5447 ms/op 1.6723 ms/op 0.92
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.9604 ms/op 3.9855 ms/op 0.99
Tree 40 250000 create 321.64 ms/op 346.12 ms/op 0.93
Tree 40 250000 get(125000) 194.00 ns/op 200.78 ns/op 0.97
Tree 40 250000 set(125000) 1.0472 us/op 981.51 ns/op 1.07
Tree 40 250000 toArray() 21.745 ms/op 20.354 ms/op 1.07
Tree 40 250000 iterate all - toArray() + loop 22.343 ms/op 22.102 ms/op 1.01
Tree 40 250000 iterate all - get(i) 74.355 ms/op 75.177 ms/op 0.99
MutableVector 250000 create 11.413 ms/op 11.531 ms/op 0.99
MutableVector 250000 get(125000) 6.3980 ns/op 6.4700 ns/op 0.99
MutableVector 250000 set(125000) 270.10 ns/op 298.87 ns/op 0.90
MutableVector 250000 toArray() 3.3832 ms/op 3.7376 ms/op 0.91
MutableVector 250000 iterate all - toArray() + loop 3.3297 ms/op 3.8616 ms/op 0.86
MutableVector 250000 iterate all - get(i) 1.5327 ms/op 1.5816 ms/op 0.97
Array 250000 create 2.6886 ms/op 3.9107 ms/op 0.69
Array 250000 clone - spread 1.2476 ms/op 1.1322 ms/op 1.10
Array 250000 get(125000) 0.61200 ns/op 0.57200 ns/op 1.07
Array 250000 set(125000) 0.67700 ns/op 0.69800 ns/op 0.97
Array 250000 iterate all - loop 110.66 us/op 90.801 us/op 1.22
effectiveBalanceIncrements clone Uint8Array 300000 35.284 us/op 38.355 us/op 0.92
effectiveBalanceIncrements clone MutableVector 300000 401.00 ns/op 335.00 ns/op 1.20
effectiveBalanceIncrements rw all Uint8Array 300000 170.04 us/op 179.83 us/op 0.95
effectiveBalanceIncrements rw all MutableVector 300000 86.429 ms/op 85.317 ms/op 1.01
phase0 afterProcessEpoch - 250000 vs - 7PWei 116.00 ms/op 117.40 ms/op 0.99
phase0 beforeProcessEpoch - 250000 vs - 7PWei 42.992 ms/op 43.633 ms/op 0.99
altair processEpoch - mainnet_e81889 335.25 ms/op 346.55 ms/op 0.97
mainnet_e81889 - altair beforeProcessEpoch 74.850 ms/op 72.544 ms/op 1.03
mainnet_e81889 - altair processJustificationAndFinalization 21.161 us/op 21.550 us/op 0.98
mainnet_e81889 - altair processInactivityUpdates 5.5441 ms/op 6.9823 ms/op 0.79
mainnet_e81889 - altair processRewardsAndPenalties 63.627 ms/op 53.115 ms/op 1.20
mainnet_e81889 - altair processRegistryUpdates 2.3950 us/op 3.2140 us/op 0.75
mainnet_e81889 - altair processSlashings 491.00 ns/op 565.00 ns/op 0.87
mainnet_e81889 - altair processEth1DataReset 595.00 ns/op 734.00 ns/op 0.81
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.2833 ms/op 1.2740 ms/op 1.01
mainnet_e81889 - altair processSlashingsReset 4.3030 us/op 4.6830 us/op 0.92
mainnet_e81889 - altair processRandaoMixesReset 8.0950 us/op 5.9880 us/op 1.35
mainnet_e81889 - altair processHistoricalRootsUpdate 701.00 ns/op 1.0770 us/op 0.65
mainnet_e81889 - altair processParticipationFlagUpdates 2.4450 us/op 3.3320 us/op 0.73
mainnet_e81889 - altair processSyncCommitteeUpdates 531.00 ns/op 746.00 ns/op 0.71
mainnet_e81889 - altair afterProcessEpoch 129.10 ms/op 132.72 ms/op 0.97
phase0 processEpoch - mainnet_e58758 354.86 ms/op 382.01 ms/op 0.93
mainnet_e58758 - phase0 beforeProcessEpoch 131.24 ms/op 141.35 ms/op 0.93
mainnet_e58758 - phase0 processJustificationAndFinalization 16.319 us/op 17.789 us/op 0.92
mainnet_e58758 - phase0 processRewardsAndPenalties 63.205 ms/op 59.346 ms/op 1.07
mainnet_e58758 - phase0 processRegistryUpdates 8.3660 us/op 10.038 us/op 0.83
mainnet_e58758 - phase0 processSlashings 637.00 ns/op 481.00 ns/op 1.32
mainnet_e58758 - phase0 processEth1DataReset 623.00 ns/op 621.00 ns/op 1.00
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.0791 ms/op 1.1077 ms/op 0.97
mainnet_e58758 - phase0 processSlashingsReset 4.6800 us/op 4.2280 us/op 1.11
mainnet_e58758 - phase0 processRandaoMixesReset 4.7060 us/op 8.5560 us/op 0.55
mainnet_e58758 - phase0 processHistoricalRootsUpdate 796.00 ns/op 1.3940 us/op 0.57
mainnet_e58758 - phase0 processParticipationRecordUpdates 4.5640 us/op 5.9970 us/op 0.76
mainnet_e58758 - phase0 afterProcessEpoch 102.51 ms/op 101.81 ms/op 1.01
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.3352 ms/op 1.3017 ms/op 1.03
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.6083 ms/op 1.7857 ms/op 0.90
altair processInactivityUpdates - 250000 normalcase 26.595 ms/op 28.006 ms/op 0.95
altair processInactivityUpdates - 250000 worstcase 26.923 ms/op 29.268 ms/op 0.92
phase0 processRegistryUpdates - 250000 normalcase 7.7610 us/op 11.148 us/op 0.70
phase0 processRegistryUpdates - 250000 badcase_full_deposits 246.80 us/op 315.71 us/op 0.78
phase0 processRegistryUpdates - 250000 worstcase 0.5 126.11 ms/op 139.62 ms/op 0.90
altair processRewardsAndPenalties - 250000 normalcase 68.780 ms/op 68.856 ms/op 1.00
altair processRewardsAndPenalties - 250000 worstcase 69.135 ms/op 71.206 ms/op 0.97
phase0 getAttestationDeltas - 250000 normalcase 7.3644 ms/op 7.1100 ms/op 1.04
phase0 getAttestationDeltas - 250000 worstcase 6.9496 ms/op 8.7275 ms/op 0.80
phase0 processSlashings - 250000 worstcase 3.5156 ms/op 3.8174 ms/op 0.92
altair processSyncCommitteeUpdates - 250000 176.65 ms/op 182.33 ms/op 0.97
BeaconState.hashTreeRoot - No change 321.00 ns/op 295.00 ns/op 1.09
BeaconState.hashTreeRoot - 1 full validator 54.799 us/op 52.736 us/op 1.04
BeaconState.hashTreeRoot - 32 full validator 552.99 us/op 572.40 us/op 0.97
BeaconState.hashTreeRoot - 512 full validator 5.1568 ms/op 5.3333 ms/op 0.97
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 67.729 us/op 70.404 us/op 0.96
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 876.40 us/op 937.37 us/op 0.93
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 11.594 ms/op 12.572 ms/op 0.92
BeaconState.hashTreeRoot - 1 balances 50.486 us/op 50.823 us/op 0.99
BeaconState.hashTreeRoot - 32 balances 470.69 us/op 562.82 us/op 0.84
BeaconState.hashTreeRoot - 512 balances 4.4399 ms/op 4.6787 ms/op 0.95
BeaconState.hashTreeRoot - 250000 balances 74.272 ms/op 76.281 ms/op 0.97
aggregationBits - 2048 els - zipIndexesInBitList 15.455 us/op 17.243 us/op 0.90
regular array get 100000 times 32.899 us/op 42.844 us/op 0.77
wrappedArray get 100000 times 33.365 us/op 34.399 us/op 0.97
arrayWithProxy get 100000 times 16.771 ms/op 17.447 ms/op 0.96
ssz.Root.equals 541.00 ns/op 577.00 ns/op 0.94
byteArrayEquals 541.00 ns/op 586.00 ns/op 0.92
shuffle list - 16384 els 6.8442 ms/op 7.1078 ms/op 0.96
shuffle list - 250000 els 101.84 ms/op 104.18 ms/op 0.98
processSlot - 1 slots 8.7970 us/op 8.9990 us/op 0.98
processSlot - 32 slots 1.3558 ms/op 1.4287 ms/op 0.95
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 36.723 ms/op 36.849 ms/op 1.00
getCommitteeAssignments - req 1 vs - 250000 vc 2.9856 ms/op 2.9548 ms/op 1.01
getCommitteeAssignments - req 100 vs - 250000 vc 4.2413 ms/op 4.2166 ms/op 1.01
getCommitteeAssignments - req 1000 vs - 250000 vc 4.5723 ms/op 4.5883 ms/op 1.00
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 4.9200 ns/op 4.9600 ns/op 0.99
state getBlockRootAtSlot - 250000 vs - 7PWei 853.85 ns/op 658.88 ns/op 1.30
computeProposers - vc 250000 10.600 ms/op 11.116 ms/op 0.95
computeEpochShuffling - vc 250000 103.47 ms/op 105.64 ms/op 0.98
getNextSyncCommittee - vc 250000 179.27 ms/op 181.83 ms/op 0.99
computeSigningRoot for AttestationData 13.147 us/op 13.587 us/op 0.97
hash AttestationData serialized data then Buffer.toString(base64) 2.4364 us/op 2.5217 us/op 0.97
toHexString serialized data 1.0698 us/op 1.0979 us/op 0.97
Buffer.toString(base64) 311.20 ns/op 325.23 ns/op 0.96

by benchmarkbot/action

packages/cli/src/cmds/validator/handler.ts Outdated Show resolved Hide resolved
packages/validator/src/services/block.ts Outdated Show resolved Hide resolved
packages/validator/src/services/block.ts Outdated Show resolved Hide resolved
packages/validator/src/services/block.ts Outdated Show resolved Hide resolved
Co-authored-by: Nico Flaig <nflaig@protonmail.com>
@wemeetagain wemeetagain merged commit 7c54a7b into unstable Jun 19, 2023
@wemeetagain wemeetagain deleted the dvt-proposal branch June 19, 2023 15:07
philknows pushed a commit that referenced this pull request Jul 17, 2023
…5669)

* feat: allow builder only proposal flow for benefit of DVT protocols

* fix typo

* apply feedback

* update descp

* add suggestion

Co-authored-by: Nico Flaig <nflaig@protonmail.com>

---------

Co-authored-by: Nico Flaig <nflaig@protonmail.com>
@philknows philknows mentioned this pull request Jul 17, 2023
@wemeetagain
Copy link
Member

🎉 This PR is included in v1.9.2 🎉

@wemeetagain
Copy link
Member

🎉 This PR is included in v1.10.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.

3 participants