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: blob sidecars can be filtered by indices #6337

Merged
merged 8 commits into from
Jan 29, 2024

Conversation

jeluard
Copy link
Contributor

@jeluard jeluard commented Jan 22, 2024

Motivation

Make sure the getBlobSidecars endpoint is implemented as specified.

Description

getBlobSidecars doesn't support indices filtering, as specified. Add support for the missing query parameters and implement the associated logic.

Closes #6185

Copy link

codecov bot commented Jan 22, 2024

Codecov Report

Merging #6337 (65348ec) into unstable (2db7120) will decrease coverage by 16.47%.
Report is 13 commits behind head on unstable.
The diff coverage is n/a.

Additional details and impacted files
@@              Coverage Diff              @@
##           unstable    #6337       +/-   ##
=============================================
- Coverage     76.61%   60.15%   -16.47%     
=============================================
  Files           248      407      +159     
  Lines         25898    46464    +20566     
  Branches       1448     1536       +88     
=============================================
+ Hits          19842    27950     +8108     
- Misses         6026    18484    +12458     
  Partials         30       30               

Copy link
Contributor

github-actions bot commented Jan 22, 2024

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: a088b6c Previous: 01d47b9 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 367.61 us/op 960.45 us/op 0.38
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 50.150 us/op 96.573 us/op 0.52
BLS verify - blst-native 1.1204 ms/op 1.2916 ms/op 0.87
BLS verifyMultipleSignatures 3 - blst-native 2.3924 ms/op 2.7928 ms/op 0.86
BLS verifyMultipleSignatures 8 - blst-native 5.3013 ms/op 6.1495 ms/op 0.86
BLS verifyMultipleSignatures 32 - blst-native 19.523 ms/op 22.561 ms/op 0.87
BLS verifyMultipleSignatures 64 - blst-native 38.614 ms/op 44.156 ms/op 0.87
BLS verifyMultipleSignatures 128 - blst-native 76.619 ms/op 88.476 ms/op 0.87
BLS deserializing 10000 signatures 797.89 ms/op 918.39 ms/op 0.87
BLS deserializing 100000 signatures 8.4115 s/op 9.4698 s/op 0.89
BLS verifyMultipleSignatures - same message - 3 - blst-native 1.1842 ms/op 1.3170 ms/op 0.90
BLS verifyMultipleSignatures - same message - 8 - blst-native 1.2982 ms/op 1.6647 ms/op 0.78
BLS verifyMultipleSignatures - same message - 32 - blst-native 2.5716 ms/op 2.9116 ms/op 0.88
BLS verifyMultipleSignatures - same message - 64 - blst-native 3.1578 ms/op 4.2850 ms/op 0.74
BLS verifyMultipleSignatures - same message - 128 - blst-native 6.6083 ms/op 7.2130 ms/op 0.92
BLS aggregatePubkeys 32 - blst-native 22.260 us/op 26.770 us/op 0.83
BLS aggregatePubkeys 128 - blst-native 89.095 us/op 99.999 us/op 0.89
getAttestationsForBlock 32.345 ms/op 51.779 ms/op 0.62
getSlashingsAndExits - default max 94.535 us/op 163.45 us/op 0.58
getSlashingsAndExits - 2k 476.68 us/op 556.02 us/op 0.86
proposeBlockBody type=full, size=empty 4.0633 ms/op 5.3332 ms/op 0.76
isKnown best case - 1 super set check 889.00 ns/op 482.00 ns/op 1.84
isKnown normal case - 2 super set checks 874.00 ns/op 637.00 ns/op 1.37
isKnown worse case - 16 super set checks 908.00 ns/op 619.00 ns/op 1.47
CheckpointStateCache - add get delete 6.3910 us/op 6.3590 us/op 1.01
validate api signedAggregateAndProof - struct 2.4919 ms/op 2.8511 ms/op 0.87
validate gossip signedAggregateAndProof - struct 2.5411 ms/op 2.8270 ms/op 0.90
validate gossip attestation - vc 640000 1.2584 ms/op 1.3780 ms/op 0.91
batch validate gossip attestation - vc 640000 - chunk 32 146.28 us/op 170.56 us/op 0.86
batch validate gossip attestation - vc 640000 - chunk 64 130.07 us/op 155.24 us/op 0.84
batch validate gossip attestation - vc 640000 - chunk 128 124.70 us/op 153.13 us/op 0.81
batch validate gossip attestation - vc 640000 - chunk 256 122.25 us/op 133.86 us/op 0.91
pickEth1Vote - no votes 873.46 us/op 1.2567 ms/op 0.70
pickEth1Vote - max votes 11.987 ms/op 11.269 ms/op 1.06
pickEth1Vote - Eth1Data hashTreeRoot value x2048 18.844 ms/op 20.268 ms/op 0.93
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 24.421 ms/op 33.232 ms/op 0.73
pickEth1Vote - Eth1Data fastSerialize value x2048 441.28 us/op 686.96 us/op 0.64
pickEth1Vote - Eth1Data fastSerialize tree x2048 5.4295 ms/op 5.9611 ms/op 0.91
bytes32 toHexString 597.00 ns/op 506.00 ns/op 1.18
bytes32 Buffer.toString(hex) 358.00 ns/op 290.00 ns/op 1.23
bytes32 Buffer.toString(hex) from Uint8Array 475.00 ns/op 418.00 ns/op 1.14
bytes32 Buffer.toString(hex) + 0x 360.00 ns/op 298.00 ns/op 1.21
Object access 1 prop 0.22200 ns/op 0.17400 ns/op 1.28
Map access 1 prop 0.21800 ns/op 0.14400 ns/op 1.51
Object get x1000 5.0020 ns/op 6.9590 ns/op 0.72
Map get x1000 0.81200 ns/op 0.82300 ns/op 0.99
Object set x1000 32.337 ns/op 55.484 ns/op 0.58
Map set x1000 19.092 ns/op 45.274 ns/op 0.42
Return object 10000 times 0.22860 ns/op 0.24110 ns/op 0.95
Throw Error 10000 times 2.7675 us/op 3.9333 us/op 0.70
fastMsgIdFn sha256 / 200 bytes 2.1010 us/op 3.3470 us/op 0.63
fastMsgIdFn h32 xxhash / 200 bytes 352.00 ns/op 297.00 ns/op 1.19
fastMsgIdFn h64 xxhash / 200 bytes 393.00 ns/op 337.00 ns/op 1.17
fastMsgIdFn sha256 / 1000 bytes 6.6990 us/op 11.385 us/op 0.59
fastMsgIdFn h32 xxhash / 1000 bytes 463.00 ns/op 429.00 ns/op 1.08
fastMsgIdFn h64 xxhash / 1000 bytes 450.00 ns/op 429.00 ns/op 1.05
fastMsgIdFn sha256 / 10000 bytes 55.524 us/op 101.85 us/op 0.55
fastMsgIdFn h32 xxhash / 10000 bytes 1.9190 us/op 1.9640 us/op 0.98
fastMsgIdFn h64 xxhash / 10000 bytes 1.2880 us/op 1.3250 us/op 0.97
send data - 1000 256B messages 12.772 ms/op 19.422 ms/op 0.66
send data - 1000 512B messages 16.673 ms/op 27.072 ms/op 0.62
send data - 1000 1024B messages 21.689 ms/op 39.409 ms/op 0.55
send data - 1000 1200B messages 32.306 ms/op 37.768 ms/op 0.86
send data - 1000 2048B messages 39.122 ms/op 48.190 ms/op 0.81
send data - 1000 4096B messages 33.596 ms/op 44.479 ms/op 0.76
send data - 1000 16384B messages 90.870 ms/op 119.26 ms/op 0.76
send data - 1000 65536B messages 400.06 ms/op 475.98 ms/op 0.84
enrSubnets - fastDeserialize 64 bits 1.1380 us/op 1.3570 us/op 0.84
enrSubnets - ssz BitVector 64 bits 494.00 ns/op 479.00 ns/op 1.03
enrSubnets - fastDeserialize 4 bits 226.00 ns/op 180.00 ns/op 1.26
enrSubnets - ssz BitVector 4 bits 456.00 ns/op 428.00 ns/op 1.07
prioritizePeers score -10:0 att 32-0.1 sync 2-0 76.195 us/op 107.34 us/op 0.71
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 105.63 us/op 140.20 us/op 0.75
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 156.54 us/op 181.99 us/op 0.86
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 244.67 us/op 324.92 us/op 0.75
prioritizePeers score 0:0 att 64-1 sync 4-1 231.00 us/op 369.87 us/op 0.62
array of 16000 items push then shift 1.3243 us/op 1.6702 us/op 0.79
LinkedList of 16000 items push then shift 5.9980 ns/op 9.2170 ns/op 0.65
array of 16000 items push then pop 106.40 ns/op 106.71 ns/op 1.00
LinkedList of 16000 items push then pop 5.7660 ns/op 8.9860 ns/op 0.64
array of 24000 items push then shift 1.9508 us/op 2.5396 us/op 0.77
LinkedList of 24000 items push then shift 8.2310 ns/op 9.4930 ns/op 0.87
array of 24000 items push then pop 136.31 ns/op 150.21 ns/op 0.91
LinkedList of 24000 items push then pop 5.9740 ns/op 8.7930 ns/op 0.68
intersect bitArray bitLen 8 5.1470 ns/op 6.5150 ns/op 0.79
intersect array and set length 8 50.627 ns/op 70.234 ns/op 0.72
intersect bitArray bitLen 128 27.904 ns/op 35.100 ns/op 0.79
intersect array and set length 128 867.80 ns/op 1.0294 us/op 0.84
bitArray.getTrueBitIndexes() bitLen 128 1.3270 us/op 1.8380 us/op 0.72
bitArray.getTrueBitIndexes() bitLen 248 2.0570 us/op 3.1020 us/op 0.66
bitArray.getTrueBitIndexes() bitLen 512 3.7870 us/op 6.1460 us/op 0.62
Buffer.concat 32 items 877.00 ns/op 1.0280 us/op 0.85
Uint8Array.set 32 items 2.0760 us/op 1.7360 us/op 1.20
Set add up to 64 items then delete first 2.0955 us/op 4.7536 us/op 0.44
OrderedSet add up to 64 items then delete first 3.5462 us/op 5.9412 us/op 0.60
Set add up to 64 items then delete last 2.3046 us/op 5.3983 us/op 0.43
OrderedSet add up to 64 items then delete last 3.5314 us/op 7.1816 us/op 0.49
Set add up to 64 items then delete middle 2.6543 us/op 5.4283 us/op 0.49
OrderedSet add up to 64 items then delete middle 5.4226 us/op 8.4995 us/op 0.64
Set add up to 128 items then delete first 5.1933 us/op 10.958 us/op 0.47
OrderedSet add up to 128 items then delete first 7.9174 us/op 15.039 us/op 0.53
Set add up to 128 items then delete last 5.0229 us/op 10.794 us/op 0.47
OrderedSet add up to 128 items then delete last 7.5390 us/op 13.598 us/op 0.55
Set add up to 128 items then delete middle 4.0355 us/op 10.893 us/op 0.37
OrderedSet add up to 128 items then delete middle 12.803 us/op 19.826 us/op 0.65
Set add up to 256 items then delete first 9.1944 us/op 21.924 us/op 0.42
OrderedSet add up to 256 items then delete first 13.387 us/op 30.261 us/op 0.44
Set add up to 256 items then delete last 8.2400 us/op 21.545 us/op 0.38
OrderedSet add up to 256 items then delete last 12.802 us/op 28.131 us/op 0.46
Set add up to 256 items then delete middle 7.5503 us/op 20.950 us/op 0.36
OrderedSet add up to 256 items then delete middle 35.280 us/op 51.454 us/op 0.69
transfer serialized Status (84 B) 1.5470 us/op 1.7530 us/op 0.88
copy serialized Status (84 B) 1.1730 us/op 1.3820 us/op 0.85
transfer serialized SignedVoluntaryExit (112 B) 1.5890 us/op 1.9560 us/op 0.81
copy serialized SignedVoluntaryExit (112 B) 1.1970 us/op 1.4570 us/op 0.82
transfer serialized ProposerSlashing (416 B) 1.8940 us/op 2.2200 us/op 0.85
copy serialized ProposerSlashing (416 B) 1.7740 us/op 1.9980 us/op 0.89
transfer serialized Attestation (485 B) 2.0970 us/op 2.9840 us/op 0.70
copy serialized Attestation (485 B) 2.1380 us/op 2.6140 us/op 0.82
transfer serialized AttesterSlashing (33232 B) 2.1640 us/op 2.8440 us/op 0.76
copy serialized AttesterSlashing (33232 B) 6.4550 us/op 8.1640 us/op 0.79
transfer serialized Small SignedBeaconBlock (128000 B) 1.9540 us/op 2.8340 us/op 0.69
copy serialized Small SignedBeaconBlock (128000 B) 13.059 us/op 18.223 us/op 0.72
transfer serialized Avg SignedBeaconBlock (200000 B) 2.9070 us/op 3.0190 us/op 0.96
copy serialized Avg SignedBeaconBlock (200000 B) 15.759 us/op 44.175 us/op 0.36
transfer serialized BlobsSidecar (524380 B) 2.2630 us/op 3.9130 us/op 0.58
copy serialized BlobsSidecar (524380 B) 76.552 us/op 101.00 us/op 0.76
transfer serialized Big SignedBeaconBlock (1000000 B) 2.6220 us/op 4.2500 us/op 0.62
copy serialized Big SignedBeaconBlock (1000000 B) 303.83 us/op 216.81 us/op 1.40
pass gossip attestations to forkchoice per slot 2.7707 ms/op 4.4360 ms/op 0.62
forkChoice updateHead vc 100000 bc 64 eq 0 480.55 us/op 700.00 us/op 0.69
forkChoice updateHead vc 600000 bc 64 eq 0 2.5954 ms/op 5.1684 ms/op 0.50
forkChoice updateHead vc 1000000 bc 64 eq 0 4.7846 ms/op 7.6310 ms/op 0.63
forkChoice updateHead vc 600000 bc 320 eq 0 2.8839 ms/op 4.7029 ms/op 0.61
forkChoice updateHead vc 600000 bc 1200 eq 0 3.0095 ms/op 4.4931 ms/op 0.67
forkChoice updateHead vc 600000 bc 7200 eq 0 3.8274 ms/op 5.8451 ms/op 0.65
forkChoice updateHead vc 600000 bc 64 eq 1000 10.108 ms/op 11.549 ms/op 0.88
forkChoice updateHead vc 600000 bc 64 eq 10000 9.8176 ms/op 12.166 ms/op 0.81
forkChoice updateHead vc 600000 bc 64 eq 300000 13.732 ms/op 17.024 ms/op 0.81
computeDeltas 500000 validators 300 proto nodes 3.0594 ms/op 6.9021 ms/op 0.44
computeDeltas 500000 validators 1200 proto nodes 3.0191 ms/op 7.0277 ms/op 0.43
computeDeltas 500000 validators 7200 proto nodes 2.9949 ms/op 6.8015 ms/op 0.44
computeDeltas 750000 validators 300 proto nodes 4.9389 ms/op 9.9399 ms/op 0.50
computeDeltas 750000 validators 1200 proto nodes 4.7972 ms/op 10.432 ms/op 0.46
computeDeltas 750000 validators 7200 proto nodes 4.8654 ms/op 10.728 ms/op 0.45
computeDeltas 1400000 validators 300 proto nodes 8.9891 ms/op 19.559 ms/op 0.46
computeDeltas 1400000 validators 1200 proto nodes 8.8264 ms/op 19.530 ms/op 0.45
computeDeltas 1400000 validators 7200 proto nodes 8.9965 ms/op 20.005 ms/op 0.45
computeDeltas 2100000 validators 300 proto nodes 13.278 ms/op 29.657 ms/op 0.45
computeDeltas 2100000 validators 1200 proto nodes 12.858 ms/op 29.881 ms/op 0.43
computeDeltas 2100000 validators 7200 proto nodes 13.120 ms/op 29.110 ms/op 0.45
altair processAttestation - 250000 vs - 7PWei normalcase 1.6051 ms/op 2.8861 ms/op 0.56
altair processAttestation - 250000 vs - 7PWei worstcase 2.5783 ms/op 4.5748 ms/op 0.56
altair processAttestation - setStatus - 1/6 committees join 79.589 us/op 200.61 us/op 0.40
altair processAttestation - setStatus - 1/3 committees join 181.57 us/op 375.75 us/op 0.48
altair processAttestation - setStatus - 1/2 committees join 221.66 us/op 511.28 us/op 0.43
altair processAttestation - setStatus - 2/3 committees join 280.07 us/op 627.98 us/op 0.45
altair processAttestation - setStatus - 4/5 committees join 413.42 us/op 887.51 us/op 0.47
altair processAttestation - setStatus - 100% committees join 469.72 us/op 1.0120 ms/op 0.46
altair processBlock - 250000 vs - 7PWei normalcase 8.2693 ms/op 12.068 ms/op 0.69
altair processBlock - 250000 vs - 7PWei normalcase hashState 31.408 ms/op 36.816 ms/op 0.85
altair processBlock - 250000 vs - 7PWei worstcase 31.512 ms/op 42.296 ms/op 0.75
altair processBlock - 250000 vs - 7PWei worstcase hashState 69.314 ms/op 99.948 ms/op 0.69
phase0 processBlock - 250000 vs - 7PWei normalcase 2.4956 ms/op 3.0613 ms/op 0.82
phase0 processBlock - 250000 vs - 7PWei worstcase 24.194 ms/op 32.716 ms/op 0.74
altair processEth1Data - 250000 vs - 7PWei normalcase 439.97 us/op 750.32 us/op 0.59
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 12.737 us/op 15.535 us/op 0.82
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 33.775 us/op 77.929 us/op 0.43
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 23.091 us/op 20.724 us/op 1.11
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 11.264 us/op 17.089 us/op 0.66
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 168.81 us/op 217.54 us/op 0.78
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 1.1692 ms/op 1.2436 ms/op 0.94
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.2141 ms/op 1.8556 ms/op 0.65
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.1354 ms/op 2.0764 ms/op 0.55
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 2.0218 ms/op 4.0107 ms/op 0.50
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 1.4826 ms/op 2.7342 ms/op 0.54
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.3098 ms/op 6.1032 ms/op 0.71
Tree 40 250000 create 254.65 ms/op 493.42 ms/op 0.52
Tree 40 250000 get(125000) 127.12 ns/op 215.33 ns/op 0.59
Tree 40 250000 set(125000) 1.0234 us/op 1.4797 us/op 0.69
Tree 40 250000 toArray() 25.392 ms/op 27.327 ms/op 0.93
Tree 40 250000 iterate all - toArray() + loop 28.671 ms/op 23.050 ms/op 1.24
Tree 40 250000 iterate all - get(i) 51.262 ms/op 75.927 ms/op 0.68
MutableVector 250000 create 9.5406 ms/op 15.575 ms/op 0.61
MutableVector 250000 get(125000) 5.8840 ns/op 6.5560 ns/op 0.90
MutableVector 250000 set(125000) 210.78 ns/op 301.65 ns/op 0.70
MutableVector 250000 toArray() 2.8923 ms/op 3.7500 ms/op 0.77
MutableVector 250000 iterate all - toArray() + loop 3.9698 ms/op 4.3030 ms/op 0.92
MutableVector 250000 iterate all - get(i) 1.4148 ms/op 1.5780 ms/op 0.90
Array 250000 create 3.2663 ms/op 3.7275 ms/op 0.88
Array 250000 clone - spread 1.1702 ms/op 1.4524 ms/op 0.81
Array 250000 get(125000) 1.1700 ns/op 1.2760 ns/op 0.92
Array 250000 set(125000) 1.5740 ns/op 5.1220 ns/op 0.31
Array 250000 iterate all - loop 159.94 us/op 175.81 us/op 0.91
effectiveBalanceIncrements clone Uint8Array 300000 24.596 us/op 51.701 us/op 0.48
effectiveBalanceIncrements clone MutableVector 300000 375.00 ns/op 389.00 ns/op 0.96
effectiveBalanceIncrements rw all Uint8Array 300000 199.86 us/op 207.45 us/op 0.96
effectiveBalanceIncrements rw all MutableVector 300000 67.277 ms/op 123.45 ms/op 0.54
phase0 afterProcessEpoch - 250000 vs - 7PWei 75.707 ms/op 118.44 ms/op 0.64
phase0 beforeProcessEpoch - 250000 vs - 7PWei 46.796 ms/op 60.860 ms/op 0.77
altair processEpoch - mainnet_e81889 444.58 ms/op 582.68 ms/op 0.76
mainnet_e81889 - altair beforeProcessEpoch 74.591 ms/op 90.984 ms/op 0.82
mainnet_e81889 - altair processJustificationAndFinalization 11.439 us/op 21.550 us/op 0.53
mainnet_e81889 - altair processInactivityUpdates 6.1364 ms/op 7.1402 ms/op 0.86
mainnet_e81889 - altair processRewardsAndPenalties 55.946 ms/op 67.340 ms/op 0.83
mainnet_e81889 - altair processRegistryUpdates 2.0370 us/op 3.4490 us/op 0.59
mainnet_e81889 - altair processSlashings 540.00 ns/op 704.00 ns/op 0.77
mainnet_e81889 - altair processEth1DataReset 636.00 ns/op 1.0270 us/op 0.62
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.7520 ms/op 1.8008 ms/op 0.97
mainnet_e81889 - altair processSlashingsReset 3.0600 us/op 7.3260 us/op 0.42
mainnet_e81889 - altair processRandaoMixesReset 4.3920 us/op 10.054 us/op 0.44
mainnet_e81889 - altair processHistoricalRootsUpdate 770.00 ns/op 968.00 ns/op 0.80
mainnet_e81889 - altair processParticipationFlagUpdates 1.5480 us/op 2.5910 us/op 0.60
mainnet_e81889 - altair processSyncCommitteeUpdates 979.00 ns/op 911.00 ns/op 1.07
mainnet_e81889 - altair afterProcessEpoch 77.586 ms/op 122.53 ms/op 0.63
capella processEpoch - mainnet_e217614 1.7547 s/op 2.4534 s/op 0.72
mainnet_e217614 - capella beforeProcessEpoch 435.49 ms/op 555.55 ms/op 0.78
mainnet_e217614 - capella processJustificationAndFinalization 12.209 us/op 24.974 us/op 0.49
mainnet_e217614 - capella processInactivityUpdates 14.855 ms/op 22.395 ms/op 0.66
mainnet_e217614 - capella processRewardsAndPenalties 351.66 ms/op 423.22 ms/op 0.83
mainnet_e217614 - capella processRegistryUpdates 19.950 us/op 24.955 us/op 0.80
mainnet_e217614 - capella processSlashings 869.00 ns/op 728.00 ns/op 1.19
mainnet_e217614 - capella processEth1DataReset 633.00 ns/op 727.00 ns/op 0.87
mainnet_e217614 - capella processEffectiveBalanceUpdates 3.5625 ms/op 6.3006 ms/op 0.57
mainnet_e217614 - capella processSlashingsReset 3.6790 us/op 3.6230 us/op 1.02
mainnet_e217614 - capella processRandaoMixesReset 5.4000 us/op 4.3160 us/op 1.25
mainnet_e217614 - capella processHistoricalRootsUpdate 1.0340 us/op 580.00 ns/op 1.78
mainnet_e217614 - capella processParticipationFlagUpdates 2.1360 us/op 2.5190 us/op 0.85
mainnet_e217614 - capella afterProcessEpoch 208.57 ms/op 304.95 ms/op 0.68
phase0 processEpoch - mainnet_e58758 379.97 ms/op 478.50 ms/op 0.79
mainnet_e58758 - phase0 beforeProcessEpoch 109.37 ms/op 150.26 ms/op 0.73
mainnet_e58758 - phase0 processJustificationAndFinalization 13.114 us/op 16.263 us/op 0.81
mainnet_e58758 - phase0 processRewardsAndPenalties 55.813 ms/op 34.023 ms/op 1.64
mainnet_e58758 - phase0 processRegistryUpdates 11.143 us/op 9.5570 us/op 1.17
mainnet_e58758 - phase0 processSlashings 763.00 ns/op 574.00 ns/op 1.33
mainnet_e58758 - phase0 processEth1DataReset 693.00 ns/op 431.00 ns/op 1.61
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.3944 ms/op 1.1351 ms/op 1.23
mainnet_e58758 - phase0 processSlashingsReset 3.1850 us/op 4.9590 us/op 0.64
mainnet_e58758 - phase0 processRandaoMixesReset 3.8030 us/op 5.2070 us/op 0.73
mainnet_e58758 - phase0 processHistoricalRootsUpdate 575.00 ns/op 465.00 ns/op 1.24
mainnet_e58758 - phase0 processParticipationRecordUpdates 4.8540 us/op 5.8960 us/op 0.82
mainnet_e58758 - phase0 afterProcessEpoch 63.125 ms/op 99.458 ms/op 0.63
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.0182 ms/op 1.4318 ms/op 0.71
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.1511 ms/op 1.4463 ms/op 0.80
altair processInactivityUpdates - 250000 normalcase 25.516 ms/op 23.984 ms/op 1.06
altair processInactivityUpdates - 250000 worstcase 22.888 ms/op 29.635 ms/op 0.77
phase0 processRegistryUpdates - 250000 normalcase 10.699 us/op 11.590 us/op 0.92
phase0 processRegistryUpdates - 250000 badcase_full_deposits 370.55 us/op 436.20 us/op 0.85
phase0 processRegistryUpdates - 250000 worstcase 0.5 116.20 ms/op 145.73 ms/op 0.80
altair processRewardsAndPenalties - 250000 normalcase 54.803 ms/op 53.417 ms/op 1.03
altair processRewardsAndPenalties - 250000 worstcase 58.556 ms/op 56.395 ms/op 1.04
phase0 getAttestationDeltas - 250000 normalcase 6.2053 ms/op 11.972 ms/op 0.52
phase0 getAttestationDeltas - 250000 worstcase 7.0448 ms/op 11.926 ms/op 0.59
phase0 processSlashings - 250000 worstcase 84.951 us/op 113.87 us/op 0.75
altair processSyncCommitteeUpdates - 250000 123.51 ms/op 164.85 ms/op 0.75
BeaconState.hashTreeRoot - No change 834.00 ns/op 781.00 ns/op 1.07
BeaconState.hashTreeRoot - 1 full validator 113.42 us/op 130.85 us/op 0.87
BeaconState.hashTreeRoot - 32 full validator 1.2980 ms/op 1.6300 ms/op 0.80
BeaconState.hashTreeRoot - 512 full validator 13.183 ms/op 17.039 ms/op 0.77
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 167.39 us/op 168.59 us/op 0.99
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.8995 ms/op 2.2718 ms/op 0.84
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 24.959 ms/op 27.901 ms/op 0.89
BeaconState.hashTreeRoot - 1 balances 84.142 us/op 136.00 us/op 0.62
BeaconState.hashTreeRoot - 32 balances 756.72 us/op 1.3077 ms/op 0.58
BeaconState.hashTreeRoot - 512 balances 7.4427 ms/op 13.241 ms/op 0.56
BeaconState.hashTreeRoot - 250000 balances 125.30 ms/op 231.17 ms/op 0.54
aggregationBits - 2048 els - zipIndexesInBitList 11.125 us/op 31.787 us/op 0.35
byteArrayEquals 32 67.450 ns/op 78.142 ns/op 0.86
Buffer.compare 32 38.488 ns/op 58.664 ns/op 0.66
byteArrayEquals 1024 1.7741 us/op 2.0908 us/op 0.85
Buffer.compare 1024 48.536 ns/op 72.385 ns/op 0.67
byteArrayEquals 16384 28.677 us/op 33.412 us/op 0.86
Buffer.compare 16384 226.57 ns/op 257.16 ns/op 0.88
byteArrayEquals 123687377 211.14 ms/op 253.88 ms/op 0.83
Buffer.compare 123687377 6.1641 ms/op 8.5507 ms/op 0.72
byteArrayEquals 32 - diff last byte 59.445 ns/op 83.511 ns/op 0.71
Buffer.compare 32 - diff last byte 36.381 ns/op 59.218 ns/op 0.61
byteArrayEquals 1024 - diff last byte 1.6198 us/op 2.1149 us/op 0.77
Buffer.compare 1024 - diff last byte 41.000 ns/op 74.113 ns/op 0.55
byteArrayEquals 16384 - diff last byte 26.870 us/op 33.312 us/op 0.81
Buffer.compare 16384 - diff last byte 219.07 ns/op 250.19 ns/op 0.88
byteArrayEquals 123687377 - diff last byte 205.55 ms/op 252.00 ms/op 0.82
Buffer.compare 123687377 - diff last byte 5.0764 ms/op 8.8716 ms/op 0.57
byteArrayEquals 32 - random bytes 6.1280 ns/op 6.2500 ns/op 0.98
Buffer.compare 32 - random bytes 40.245 ns/op 63.880 ns/op 0.63
byteArrayEquals 1024 - random bytes 4.3810 ns/op 6.4110 ns/op 0.68
Buffer.compare 1024 - random bytes 37.429 ns/op 62.611 ns/op 0.60
byteArrayEquals 16384 - random bytes 4.3790 ns/op 6.1500 ns/op 0.71
Buffer.compare 16384 - random bytes 37.515 ns/op 62.356 ns/op 0.60
byteArrayEquals 123687377 - random bytes 7.7100 ns/op 16.310 ns/op 0.47
Buffer.compare 123687377 - random bytes 40.840 ns/op 75.960 ns/op 0.54
regular array get 100000 times 40.838 us/op 46.334 us/op 0.88
wrappedArray get 100000 times 40.728 us/op 45.841 us/op 0.89
arrayWithProxy get 100000 times 9.8561 ms/op 15.675 ms/op 0.63
ssz.Root.equals 53.998 ns/op 56.383 ns/op 0.96
byteArrayEquals 53.201 ns/op 55.104 ns/op 0.97
Buffer.compare 9.6920 ns/op 12.514 ns/op 0.77
shuffle list - 16384 els 4.5902 ms/op 7.1822 ms/op 0.64
shuffle list - 250000 els 67.509 ms/op 105.57 ms/op 0.64
processSlot - 1 slots 15.172 us/op 21.060 us/op 0.72
processSlot - 32 slots 2.6706 ms/op 3.7649 ms/op 0.71
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 48.934 ms/op 64.088 ms/op 0.76
getCommitteeAssignments - req 1 vs - 250000 vc 2.1419 ms/op 2.5481 ms/op 0.84
getCommitteeAssignments - req 100 vs - 250000 vc 3.2446 ms/op 3.7990 ms/op 0.85
getCommitteeAssignments - req 1000 vs - 250000 vc 3.4659 ms/op 4.1648 ms/op 0.83
findModifiedValidators - 10000 modified validators 433.85 ms/op 538.12 ms/op 0.81
findModifiedValidators - 1000 modified validators 338.36 ms/op 446.52 ms/op 0.76
findModifiedValidators - 100 modified validators 331.30 ms/op 458.10 ms/op 0.72
findModifiedValidators - 10 modified validators 357.46 ms/op 435.36 ms/op 0.82
findModifiedValidators - 1 modified validators 357.10 ms/op 437.02 ms/op 0.82
findModifiedValidators - no difference 406.86 ms/op 411.95 ms/op 0.99
compare ViewDUs 4.8232 s/op 4.5897 s/op 1.05
compare each validator Uint8Array 1.6982 s/op 1.6424 s/op 1.03
compare ViewDU to Uint8Array 977.19 ms/op 1.2928 s/op 0.76
migrate state 1000000 validators, 24 modified, 0 new 658.66 ms/op 812.67 ms/op 0.81
migrate state 1000000 validators, 1700 modified, 1000 new 972.16 ms/op 1.1329 s/op 0.86
migrate state 1000000 validators, 3400 modified, 2000 new 1.1529 s/op 1.3954 s/op 0.83
migrate state 1500000 validators, 24 modified, 0 new 868.08 ms/op 759.83 ms/op 1.14
migrate state 1500000 validators, 1700 modified, 1000 new 1.0452 s/op 1.0692 s/op 0.98
migrate state 1500000 validators, 3400 modified, 2000 new 1.2585 s/op 1.3236 s/op 0.95
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 5.4500 ns/op 4.6800 ns/op 1.16
state getBlockRootAtSlot - 250000 vs - 7PWei 625.05 ns/op 629.81 ns/op 0.99
computeProposers - vc 250000 6.7506 ms/op 8.8791 ms/op 0.76
computeEpochShuffling - vc 250000 72.709 ms/op 101.54 ms/op 0.72
getNextSyncCommittee - vc 250000 108.80 ms/op 152.86 ms/op 0.71
computeSigningRoot for AttestationData 28.191 us/op 27.358 us/op 1.03
hash AttestationData serialized data then Buffer.toString(base64) 1.2799 us/op 2.3154 us/op 0.55
toHexString serialized data 870.49 ns/op 1.0998 us/op 0.79
Buffer.toString(base64) 173.39 ns/op 226.25 ns/op 0.77

by benchmarkbot/action

@jeluard jeluard marked this pull request as ready for review January 22, 2024 16:50
@jeluard jeluard requested a review from a team as a code owner January 22, 2024 16:50
packages/api/src/beacon/routes/beacon/block.ts Outdated Show resolved Hide resolved
packages/api/src/beacon/routes/beacon/block.ts Outdated Show resolved Hide resolved
packages/api/src/beacon/routes/beacon/block.ts Outdated Show resolved Hide resolved
packages/beacon-node/src/api/impl/beacon/blocks/index.ts Outdated Show resolved Hide resolved
@jeluard
Copy link
Contributor Author

jeluard commented Jan 25, 2024

I could validate on a local node the expected behavior using the following command:

curl -X 'GET' 'http://localhost:9596/eth/v1/beacon/blob_sidecars/7428159?indices=0,1'  -H 'accept: application/json'

jeluard and others added 2 commits January 25, 2024 07:02
@jeluard jeluard force-pushed the jeluard/blob-sidecars-indices branch from 2695885 to e2365f5 Compare January 25, 2024 15:44
Copy link
Contributor

@g11tech g11tech 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, if all tests pass (or are irrelevant because of their own stablity issues)

Copy link
Contributor

@ensi321 ensi321 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 merged commit cbf349c into unstable Jan 29, 2024
12 of 15 checks passed
@nflaig nflaig deleted the jeluard/blob-sidecars-indices branch January 29, 2024 08:53
nflaig added a commit that referenced this pull request Jan 30, 2024
@wemeetagain
Copy link
Member

🎉 This PR is included in v1.16.0 🎉

wemeetagain added a commit that referenced this pull request Jun 10, 2024
* Add config route definitions

* Add debug route definitions

* Add events route description

* Add lightclient route definitions

* Flatten function params

* Type safety for optional params in write / parse req

* Method args are optional if only optional props

* Fix genesisValidatorsRoot type issue

* Revert requiring all params in write / parse req

* Update http client errors

* Add lodestar route definitions

* Add node route definitions

* Add proof route definitions

* Add builder route definitions

* Add validator route definitions

* Application method response can be void

* Generic options can be passed to application methods

* Default endpoint request type has body property

* Improve types of transform methods

* Export server types from index (to be removed)

* Update config api impl

* Update lightclient api impl

* Update events api impl

* Update lodestar api impl

* Update proof api impl

* Update node api impl

* Update debug api impl

* Update state api impl

* Update pool api impl

* Update blocks api impl

* Partially update validator api impl

* Update beacon routes export

* Align submitPoolBlsToExecutionChange method args

* Filters are always a object

* Update errors messages

* Add beacon client methods

* Add missing routeId label to stream time metric

* Fix json casing in codecs

* Apply remaining changes from #6227

* Produce block apis only have version meta

* Add block values meta to all produce block apis

* Apply changes from #6337

* Handle unsafe version in WithMeta and WithVersion

* Restore server api error

* Update fastify route types

* Update server routes / handlers

* Remove unnecessary type cast

* Restore per route clients

* Fix beacon route types

* Remove option to patch fetch from http client

* Update eventstream client, remove fetch override

Fallback does not work like this, see #6180 for proper solution

* Use StringType for validator status until #6059

* Remove empty fetch.ts file

* Add a few todos

* Update builder client and server routes

* Update beacon exports

* Update api index exports

* Update builder index imports

* Improve type safety of schema definitions

* Add headers to fastify schema

* Fix schema definition type

* Add missing schemas to route definitions

* Fix response codec type

* Remove response codec type casts

* Fix casing in json only codec

* Reuse EmptyResponseCodec

* Update base rest api server

* Update keymanager routes, client and server

* Reuse data types in keymanager impl

* Do not await setting headers, not a promise

* Improve type safety of empty codecs

* Only require to implement supported req methods

* Handle requests that only support one format

* Handle responses that only support one format

* Add json / ssz only req codecs

* Update only support errors

* Fix assertion

* Set correct accept header if only supports one format

* Fix eslint / prettier issues

* More formatting fixes

* Fix fallback request retries in case of http errors

* Formatting of res.error

* Add add retry functionality to http client (from #6387)

* Update rewards routes and server (#6178 and #6260)

* Allow to omit body in ssz req if not defined

* Always set metadata headers in response

* Cache wire format in api response

* Only call raw body for json meta

* Update api package tests (wip)

* Test json and ssz format in generic server tests

* Add a bunch of todos

* Fix a few broken route definitions

* Fix partial config test

* Another todo note

* Stringify body of json requests

* Override default response json method

* Validate external consensus version headers in request

* Add error handling todo

* Skip body schema validation for ssz request bodies

* Clean up generic server tests

* Pass node, proof, events generic tests

* Use enum for media types

* Fix a bunch of route definitions

* Add justified to blockid type

* Properly handle booleans, remove block values codec

* Create Uint8Array test data without allocating Buffer

* Let fastify handle Buffer conversion

* Convert Buffer to Uint8Array in content type parser

* Fix build issues

* Fix fork type in builder routes

* Add some notes

* Properly parse request headers

* Fix incorrect type assumptions in transform

* Generic server tests are passing (except lightclient)

* Correctly handle APIs with empty responses

* Update getHeader return type to reflect no bid responses

* Do not append '?' to URL if query string is empty

* Let server handler set status code for parsing errors

* Remove unused import

* Rename function, request specific

* Completely drop ssz support from getSpec

* Spec tests are passing against latest releases

* Drop unused fastify route config

* Drop ssz request from builder routes, not yet supported

* Remove import

* Apply change from #6695

* Update execution optimistic meta

* Apply changes from #6645

* Add workaround to fix epoch committees type issue

* Add todo to fix inefficient state conversion

* Convert committee to normal array

* Apply changes from #6655

* Align args of validators endpoints

* Convert indices to str in rewards apis

* Update api spec version of README badges

* Revert table formatting changes

* Make this accessible for class-basd API implementations

* Throw err if metadata is accessed for failed response

* Add assertOk to api response

* Tweak api error message

* Update operationIds match spec value

* Add missing version to blob sidecars metadata

* Test headers and ssz bodies against spec

* Minor reordering of code in spec parsing

* submitBlindedBlock throws err if fork is not execution

* responseOk might be undefined

* Remove statusOk from route definition

* Remove stale comment

* Less build errors in beacon-node

* getBlobSidecars return version from server impl

* Update validator produce block impl

* More expressive pool method args

* Application methods might be undefined in mock implementations

* Adress open TODOs in server handler

* Api response methods are synchronous now

* Fix all remaining build issues

* Use more performant from/toHex in server api impls

* Clean up some TODOs

* Fix ApiError type

* Errors related to parsing return a 400 status code

* Simplify method binding

* Forward api context to application methods

* There is no easy way to make generic opts typesafe

* Better separation of server / client code

* Fix comment about missing builder bid

* Remove todo, not worth the change / extra indentation

* Rename route definitions functions

* Return 400 if data passed to keymanager is invalid

* Properly handle response metadata headers

* Fix lint issues

* Add header jsdoc

* Move metadata related code into separate file

* Remove ssz from POST requests without body

* Only set content-type header if body exists

* Fix headers extra

* POST requests without body are handled similar to GET requests

* Fix http client options tests

* Improve validation and type safety of JSON metadata

* Add type guard for request without body

* Differentiate based on body instead of GET vs POST

* More renaming

* Simplify RequestCode type

* Review routes, improve validation

* Remaining local diff

* Fix accept header handling if only support one wire format

* Update 406 error to more closely match spec example

* Enforce version header via custom check instead of schema

* Use ssz as default request wire format

* Log failure to receive head event to verbose

* Do not set default value for context

* Update getClient return type to better align with method name

* Consistent pattern to get route definitions

* Dedupe api client type for builder and keymanager

* Fix fallback logic if server returns http error

* Update head event error logging

* Retry 415 errors with JSON and cache SSZ not supported

* Use fetch spy to assert call times

* Update comment

* Update getLightClientUpdatesByRange endpoint meta

* Do not forward ssz bytes of blinded block to publishBlock

* Fix lightclient e2e tests

* Version header in publishBlock api is optional

* Reduce type duplication

* Add option to override request init in route definition

* Add JsonOnlyResp codec

* Validate boolean str value from headers

* Document default wire formats

* Simplify merging of inits in http client

* Remove type hacks from fetchBeaconHealth

* Reduce call stack in http client

* Add .ssz() equivalent method for json to api response

* More http client tests

* Ensure topics query is provided to eventstream api

* Validate request content type in handler

Fastify does not cover all edge cases

* Review routes, fix param docs, no empty comments

* Fix typo

* Add note about builder spec not supporting ssz

* Consistently move keymanager jsdoc to routes

* Sanitize user provided init values before merging

* Remove unused ssz only codec

* Allow passing wire formats as string literals

* chore: review proof routes (#6843)

Review proof routes

* chore: review lightclient routes (#6842)

Review lightclient routes

* chore: review node routes (#6844)

Review node routes

* feat: add cli flags to configure http wire format (#6840)

* Review PR, mostly cosmetic changes

* Fix event stream error handling

---------

Co-authored-by: Cayman <caymannava@gmail.com>
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.

Support blob download API example from recent beacon API test suite
5 participants