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: allow POST requests without body / content-type header #6881

Merged
merged 1 commit into from
Jun 13, 2024

Conversation

nflaig
Copy link
Member

@nflaig nflaig commented Jun 13, 2024

Motivation

Noticed the request validation is too strict for some routes, e.g. getAttestationsRewards allows that the request body can be omitted as per spec.

apis/beacon/rewards/attestations.yaml#L15-L17

# ...
  requestBody:
    description: "An array of either hex encoded public key (any bytes48 with 0x prefix) or validator index"
    required: false

We don't allow this right now as we enforce that the content-type header is set if it's a POST request with a defined body schema but I think we can make it more lax. If both the content-type header and the body is omitted, we can just default to json parser as body parsing it not relevant, and other params such as headers, query, etc. are parsed the same way in the json vs. ssz parser.

For most routes, this request will fail before the handler is even called as schema validation enforces body to be an object.

Description

Allow POST requests without body / content-type header

E.g. the request below should be allowed without passing -H "content-type: application/json" -d "[]"

curl -X POST http://localhost:9596/eth/v1/beacon/rewards/attestations/1

This is not possible for most routes as request will fail schema validation
Copy link

codecov bot commented Jun 13, 2024

Codecov Report

Attention: Patch coverage is 28.57143% with 10 lines in your changes missing coverage. Please review.

Project coverage is 62.75%. Comparing base (53d75e4) to head (39aac01).
Report is 1 commits behind head on unstable.

Additional details and impacted files
@@             Coverage Diff              @@
##           unstable    #6881      +/-   ##
============================================
- Coverage     62.76%   62.75%   -0.01%     
============================================
  Files           578      578              
  Lines         61273    61280       +7     
  Branches       2115     2113       -2     
============================================
+ Hits          38456    38458       +2     
- Misses        22779    22784       +5     
  Partials         38       38              

Copy link
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: baf5604 Previous: 53d75e4 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 646.33 us/op 490.42 us/op 1.32
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 46.219 us/op 53.012 us/op 0.87
BLS verify - blst-native 1.2111 ms/op 1.2351 ms/op 0.98
BLS verifyMultipleSignatures 3 - blst-native 2.5825 ms/op 2.5962 ms/op 0.99
BLS verifyMultipleSignatures 8 - blst-native 5.6657 ms/op 5.7779 ms/op 0.98
BLS verifyMultipleSignatures 32 - blst-native 20.817 ms/op 21.404 ms/op 0.97
BLS verifyMultipleSignatures 64 - blst-native 41.247 ms/op 41.273 ms/op 1.00
BLS verifyMultipleSignatures 128 - blst-native 82.051 ms/op 82.040 ms/op 1.00
BLS deserializing 10000 signatures 866.67 ms/op 853.74 ms/op 1.02
BLS deserializing 100000 signatures 8.6731 s/op 8.5789 s/op 1.01
BLS verifyMultipleSignatures - same message - 3 - blst-native 1.2411 ms/op 1.2437 ms/op 1.00
BLS verifyMultipleSignatures - same message - 8 - blst-native 1.4151 ms/op 1.4104 ms/op 1.00
BLS verifyMultipleSignatures - same message - 32 - blst-native 2.2659 ms/op 2.3935 ms/op 0.95
BLS verifyMultipleSignatures - same message - 64 - blst-native 3.2905 ms/op 3.3140 ms/op 0.99
BLS verifyMultipleSignatures - same message - 128 - blst-native 5.4750 ms/op 5.6531 ms/op 0.97
BLS aggregatePubkeys 32 - blst-native 25.089 us/op 25.748 us/op 0.97
BLS aggregatePubkeys 128 - blst-native 98.440 us/op 97.959 us/op 1.00
notSeenSlots=1 numMissedVotes=1 numBadVotes=10 55.792 ms/op 63.192 ms/op 0.88
notSeenSlots=1 numMissedVotes=0 numBadVotes=4 48.931 ms/op 50.540 ms/op 0.97
notSeenSlots=2 numMissedVotes=1 numBadVotes=10 32.223 ms/op 33.524 ms/op 0.96
getSlashingsAndExits - default max 88.567 us/op 117.17 us/op 0.76
getSlashingsAndExits - 2k 294.41 us/op 316.43 us/op 0.93
proposeBlockBody type=full, size=empty 5.7595 ms/op 6.1566 ms/op 0.94
isKnown best case - 1 super set check 323.00 ns/op 427.00 ns/op 0.76
isKnown normal case - 2 super set checks 306.00 ns/op 369.00 ns/op 0.83
isKnown worse case - 16 super set checks 281.00 ns/op 325.00 ns/op 0.86
InMemoryCheckpointStateCache - add get delete 5.6140 us/op 5.3210 us/op 1.06
validate api signedAggregateAndProof - struct 2.6623 ms/op 2.6727 ms/op 1.00
validate gossip signedAggregateAndProof - struct 2.6608 ms/op 2.6741 ms/op 1.00
validate gossip attestation - vc 640000 1.2959 ms/op 1.3327 ms/op 0.97
batch validate gossip attestation - vc 640000 - chunk 32 160.31 us/op 173.09 us/op 0.93
batch validate gossip attestation - vc 640000 - chunk 64 143.06 us/op 153.62 us/op 0.93
batch validate gossip attestation - vc 640000 - chunk 128 133.66 us/op 153.30 us/op 0.87
batch validate gossip attestation - vc 640000 - chunk 256 129.05 us/op 154.40 us/op 0.84
pickEth1Vote - no votes 1.2394 ms/op 1.2720 ms/op 0.97
pickEth1Vote - max votes 9.2147 ms/op 13.347 ms/op 0.69
pickEth1Vote - Eth1Data hashTreeRoot value x2048 15.136 ms/op 20.128 ms/op 0.75
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 20.113 ms/op 32.675 ms/op 0.62
pickEth1Vote - Eth1Data fastSerialize value x2048 573.95 us/op 716.91 us/op 0.80
pickEth1Vote - Eth1Data fastSerialize tree x2048 4.2652 ms/op 6.8055 ms/op 0.63
bytes32 toHexString 512.00 ns/op 890.00 ns/op 0.58
bytes32 Buffer.toString(hex) 252.00 ns/op 319.00 ns/op 0.79
bytes32 Buffer.toString(hex) from Uint8Array 451.00 ns/op 542.00 ns/op 0.83
bytes32 Buffer.toString(hex) + 0x 255.00 ns/op 312.00 ns/op 0.82
Object access 1 prop 0.15300 ns/op 0.29000 ns/op 0.53
Map access 1 prop 0.13700 ns/op 0.17300 ns/op 0.79
Object get x1000 6.3670 ns/op 9.7330 ns/op 0.65
Map get x1000 7.0120 ns/op 9.7220 ns/op 0.72
Object set x1000 36.832 ns/op 81.625 ns/op 0.45
Map set x1000 24.939 ns/op 50.162 ns/op 0.50
Return object 10000 times 0.29530 ns/op 0.38100 ns/op 0.78
Throw Error 10000 times 3.4456 us/op 3.9312 us/op 0.88
fastMsgIdFn sha256 / 200 bytes 2.2950 us/op 2.7310 us/op 0.84
fastMsgIdFn h32 xxhash / 200 bytes 249.00 ns/op 342.00 ns/op 0.73
fastMsgIdFn h64 xxhash / 200 bytes 268.00 ns/op 349.00 ns/op 0.77
fastMsgIdFn sha256 / 1000 bytes 7.3340 us/op 8.5090 us/op 0.86
fastMsgIdFn h32 xxhash / 1000 bytes 379.00 ns/op 485.00 ns/op 0.78
fastMsgIdFn h64 xxhash / 1000 bytes 345.00 ns/op 492.00 ns/op 0.70
fastMsgIdFn sha256 / 10000 bytes 65.036 us/op 79.230 us/op 0.82
fastMsgIdFn h32 xxhash / 10000 bytes 1.9280 us/op 2.0850 us/op 0.92
fastMsgIdFn h64 xxhash / 10000 bytes 1.2480 us/op 1.4720 us/op 0.85
send data - 1000 256B messages 12.883 ms/op 19.159 ms/op 0.67
send data - 1000 512B messages 18.234 ms/op 22.289 ms/op 0.82
send data - 1000 1024B messages 26.096 ms/op 34.253 ms/op 0.76
send data - 1000 1200B messages 24.708 ms/op 32.151 ms/op 0.77
send data - 1000 2048B messages 31.965 ms/op 49.480 ms/op 0.65
send data - 1000 4096B messages 30.455 ms/op 46.753 ms/op 0.65
send data - 1000 16384B messages 71.480 ms/op 184.39 ms/op 0.39
send data - 1000 65536B messages 215.53 ms/op 401.33 ms/op 0.54
enrSubnets - fastDeserialize 64 bits 1.0560 us/op 1.8300 us/op 0.58
enrSubnets - ssz BitVector 64 bits 340.00 ns/op 516.00 ns/op 0.66
enrSubnets - fastDeserialize 4 bits 139.00 ns/op 245.00 ns/op 0.57
enrSubnets - ssz BitVector 4 bits 348.00 ns/op 758.00 ns/op 0.46
prioritizePeers score -10:0 att 32-0.1 sync 2-0 142.04 us/op 284.86 us/op 0.50
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 160.23 us/op 371.70 us/op 0.43
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 260.40 us/op 607.08 us/op 0.43
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 416.22 us/op 889.09 us/op 0.47
prioritizePeers score 0:0 att 64-1 sync 4-1 580.52 us/op 1.0813 ms/op 0.54
array of 16000 items push then shift 1.6077 us/op 2.0635 us/op 0.78
LinkedList of 16000 items push then shift 7.0370 ns/op 12.265 ns/op 0.57
array of 16000 items push then pop 109.78 ns/op 168.75 ns/op 0.65
LinkedList of 16000 items push then pop 6.9000 ns/op 10.844 ns/op 0.64
array of 24000 items push then shift 2.3715 us/op 3.3512 us/op 0.71
LinkedList of 24000 items push then shift 6.8790 ns/op 12.622 ns/op 0.55
array of 24000 items push then pop 127.56 ns/op 201.61 ns/op 0.63
LinkedList of 24000 items push then pop 6.8620 ns/op 9.2880 ns/op 0.74
intersect bitArray bitLen 8 6.2640 ns/op 8.5530 ns/op 0.73
intersect array and set length 8 44.690 ns/op 77.021 ns/op 0.58
intersect bitArray bitLen 128 28.681 ns/op 40.545 ns/op 0.71
intersect array and set length 128 647.07 ns/op 978.83 ns/op 0.66
bitArray.getTrueBitIndexes() bitLen 128 1.7350 us/op 2.9450 us/op 0.59
bitArray.getTrueBitIndexes() bitLen 248 3.1850 us/op 4.3500 us/op 0.73
bitArray.getTrueBitIndexes() bitLen 512 6.0120 us/op 9.9560 us/op 0.60
Buffer.concat 32 items 924.00 ns/op 1.1590 us/op 0.80
Uint8Array.set 32 items 1.4860 us/op 1.9390 us/op 0.77
Buffer.copy 1.7780 us/op 2.4050 us/op 0.74
Uint8Array.set - with subarray 2.7240 us/op 3.7180 us/op 0.73
Uint8Array.set - without subarray 1.4810 us/op 1.9170 us/op 0.77
Set add up to 64 items then delete first 2.1975 us/op 3.2874 us/op 0.67
OrderedSet add up to 64 items then delete first 3.2521 us/op 5.0084 us/op 0.65
Set add up to 64 items then delete last 2.4680 us/op 3.5349 us/op 0.70
OrderedSet add up to 64 items then delete last 3.8671 us/op 5.2486 us/op 0.74
Set add up to 64 items then delete middle 2.5461 us/op 3.5024 us/op 0.73
OrderedSet add up to 64 items then delete middle 5.3949 us/op 7.0915 us/op 0.76
Set add up to 128 items then delete first 5.0000 us/op 7.3419 us/op 0.68
OrderedSet add up to 128 items then delete first 7.3351 us/op 11.016 us/op 0.67
Set add up to 128 items then delete last 4.8828 us/op 7.1996 us/op 0.68
OrderedSet add up to 128 items then delete last 7.6755 us/op 11.305 us/op 0.68
Set add up to 128 items then delete middle 4.7550 us/op 7.3338 us/op 0.65
OrderedSet add up to 128 items then delete middle 14.412 us/op 19.118 us/op 0.75
Set add up to 256 items then delete first 9.8006 us/op 14.850 us/op 0.66
OrderedSet add up to 256 items then delete first 14.831 us/op 25.454 us/op 0.58
Set add up to 256 items then delete last 9.9781 us/op 13.061 us/op 0.76
OrderedSet add up to 256 items then delete last 15.653 us/op 21.587 us/op 0.73
Set add up to 256 items then delete middle 9.9717 us/op 13.499 us/op 0.74
OrderedSet add up to 256 items then delete middle 40.647 us/op 47.375 us/op 0.86
transfer serialized Status (84 B) 1.3090 us/op 1.5910 us/op 0.82
copy serialized Status (84 B) 1.1320 us/op 1.4370 us/op 0.79
transfer serialized SignedVoluntaryExit (112 B) 1.5990 us/op 1.6920 us/op 0.95
copy serialized SignedVoluntaryExit (112 B) 1.2220 us/op 1.4150 us/op 0.86
transfer serialized ProposerSlashing (416 B) 2.3990 us/op 2.4280 us/op 0.99
copy serialized ProposerSlashing (416 B) 1.7600 us/op 2.3570 us/op 0.75
transfer serialized Attestation (485 B) 1.6030 us/op 2.0400 us/op 0.79
copy serialized Attestation (485 B) 2.3170 us/op 2.4250 us/op 0.96
transfer serialized AttesterSlashing (33232 B) 2.4270 us/op 2.1190 us/op 1.15
copy serialized AttesterSlashing (33232 B) 5.8000 us/op 7.6770 us/op 0.76
transfer serialized Small SignedBeaconBlock (128000 B) 3.0250 us/op 2.6800 us/op 1.13
copy serialized Small SignedBeaconBlock (128000 B) 14.834 us/op 21.022 us/op 0.71
transfer serialized Avg SignedBeaconBlock (200000 B) 3.4760 us/op 3.6200 us/op 0.96
copy serialized Avg SignedBeaconBlock (200000 B) 22.523 us/op 34.737 us/op 0.65
transfer serialized BlobsSidecar (524380 B) 3.4080 us/op 3.8940 us/op 0.88
copy serialized BlobsSidecar (524380 B) 126.39 us/op 83.104 us/op 1.52
transfer serialized Big SignedBeaconBlock (1000000 B) 2.8380 us/op 3.6830 us/op 0.77
copy serialized Big SignedBeaconBlock (1000000 B) 168.89 us/op 186.77 us/op 0.90
pass gossip attestations to forkchoice per slot 3.0373 ms/op 3.2340 ms/op 0.94
forkChoice updateHead vc 100000 bc 64 eq 0 490.74 us/op 536.79 us/op 0.91
forkChoice updateHead vc 600000 bc 64 eq 0 2.9382 ms/op 3.3024 ms/op 0.89
forkChoice updateHead vc 1000000 bc 64 eq 0 5.4687 ms/op 5.8867 ms/op 0.93
forkChoice updateHead vc 600000 bc 320 eq 0 3.4381 ms/op 3.4026 ms/op 1.01
forkChoice updateHead vc 600000 bc 1200 eq 0 3.0063 ms/op 3.4218 ms/op 0.88
forkChoice updateHead vc 600000 bc 7200 eq 0 3.9143 ms/op 4.0515 ms/op 0.97
forkChoice updateHead vc 600000 bc 64 eq 1000 10.522 ms/op 11.286 ms/op 0.93
forkChoice updateHead vc 600000 bc 64 eq 10000 10.577 ms/op 11.433 ms/op 0.93
forkChoice updateHead vc 600000 bc 64 eq 300000 14.354 ms/op 15.737 ms/op 0.91
computeDeltas 500000 validators 300 proto nodes 3.4245 ms/op 3.8669 ms/op 0.89
computeDeltas 500000 validators 1200 proto nodes 3.5580 ms/op 3.8350 ms/op 0.93
computeDeltas 500000 validators 7200 proto nodes 3.6795 ms/op 4.0001 ms/op 0.92
computeDeltas 750000 validators 300 proto nodes 5.3126 ms/op 6.1354 ms/op 0.87
computeDeltas 750000 validators 1200 proto nodes 5.1358 ms/op 5.9087 ms/op 0.87
computeDeltas 750000 validators 7200 proto nodes 5.0922 ms/op 5.7488 ms/op 0.89
computeDeltas 1400000 validators 300 proto nodes 9.4689 ms/op 10.722 ms/op 0.88
computeDeltas 1400000 validators 1200 proto nodes 9.5724 ms/op 11.148 ms/op 0.86
computeDeltas 1400000 validators 7200 proto nodes 9.7125 ms/op 10.794 ms/op 0.90
computeDeltas 2100000 validators 300 proto nodes 15.185 ms/op 16.773 ms/op 0.91
computeDeltas 2100000 validators 1200 proto nodes 16.265 ms/op 19.779 ms/op 0.82
computeDeltas 2100000 validators 7200 proto nodes 19.844 ms/op 21.262 ms/op 0.93
altair processAttestation - 250000 vs - 7PWei normalcase 3.0898 ms/op 3.1809 ms/op 0.97
altair processAttestation - 250000 vs - 7PWei worstcase 3.8184 ms/op 4.3511 ms/op 0.88
altair processAttestation - setStatus - 1/6 committees join 101.14 us/op 139.12 us/op 0.73
altair processAttestation - setStatus - 1/3 committees join 182.81 us/op 235.54 us/op 0.78
altair processAttestation - setStatus - 1/2 committees join 277.82 us/op 333.10 us/op 0.83
altair processAttestation - setStatus - 2/3 committees join 346.27 us/op 413.70 us/op 0.84
altair processAttestation - setStatus - 4/5 committees join 512.74 us/op 584.35 us/op 0.88
altair processAttestation - setStatus - 100% committees join 601.84 us/op 747.04 us/op 0.81
altair processBlock - 250000 vs - 7PWei normalcase 4.4845 ms/op 6.9374 ms/op 0.65
altair processBlock - 250000 vs - 7PWei normalcase hashState 27.291 ms/op 34.154 ms/op 0.80
altair processBlock - 250000 vs - 7PWei worstcase 40.830 ms/op 51.269 ms/op 0.80
altair processBlock - 250000 vs - 7PWei worstcase hashState 83.308 ms/op 113.62 ms/op 0.73
phase0 processBlock - 250000 vs - 7PWei normalcase 1.9790 ms/op 3.4265 ms/op 0.58
phase0 processBlock - 250000 vs - 7PWei worstcase 26.672 ms/op 35.839 ms/op 0.74
altair processEth1Data - 250000 vs - 7PWei normalcase 312.13 us/op 428.91 us/op 0.73
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 5.2210 us/op 8.6360 us/op 0.60
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 25.904 us/op 32.680 us/op 0.79
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 9.4970 us/op 11.891 us/op 0.80
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 5.9310 us/op 8.7360 us/op 0.68
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 101.32 us/op 128.61 us/op 0.79
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 779.46 us/op 780.20 us/op 1.00
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 900.28 us/op 950.56 us/op 0.95
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 924.66 us/op 927.25 us/op 1.00
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 2.7255 ms/op 2.6779 ms/op 1.02
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 1.6814 ms/op 1.6437 ms/op 1.02
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.9087 ms/op 4.1824 ms/op 0.93
Tree 40 250000 create 221.42 ms/op 311.83 ms/op 0.71
Tree 40 250000 get(125000) 140.71 ns/op 164.15 ns/op 0.86
Tree 40 250000 set(125000) 647.92 ns/op 710.99 ns/op 0.91
Tree 40 250000 toArray() 17.089 ms/op 24.636 ms/op 0.69
Tree 40 250000 iterate all - toArray() + loop 17.318 ms/op 23.144 ms/op 0.75
Tree 40 250000 iterate all - get(i) 55.048 ms/op 60.900 ms/op 0.90
MutableVector 250000 create 13.004 ms/op 13.958 ms/op 0.93
MutableVector 250000 get(125000) 10.210 ns/op 7.8850 ns/op 1.29
MutableVector 250000 set(125000) 207.47 ns/op 250.44 ns/op 0.83
MutableVector 250000 toArray() 3.5712 ms/op 5.6036 ms/op 0.64
MutableVector 250000 iterate all - toArray() + loop 3.9642 ms/op 5.6329 ms/op 0.70
MutableVector 250000 iterate all - get(i) 1.5667 ms/op 1.7915 ms/op 0.87
Array 250000 create 3.6124 ms/op 4.3919 ms/op 0.82
Array 250000 clone - spread 1.5063 ms/op 1.7345 ms/op 0.87
Array 250000 get(125000) 0.40000 ns/op 0.46100 ns/op 0.87
Array 250000 set(125000) 0.43000 ns/op 0.48500 ns/op 0.89
Array 250000 iterate all - loop 108.95 us/op 93.516 us/op 1.17
effectiveBalanceIncrements clone Uint8Array 300000 72.224 us/op 65.774 us/op 1.10
effectiveBalanceIncrements clone MutableVector 300000 184.00 ns/op 135.00 ns/op 1.36
effectiveBalanceIncrements rw all Uint8Array 300000 212.02 us/op 212.84 us/op 1.00
effectiveBalanceIncrements rw all MutableVector 300000 204.78 ms/op 125.33 ms/op 1.63
phase0 afterProcessEpoch - 250000 vs - 7PWei 121.79 ms/op 94.698 ms/op 1.29
phase0 beforeProcessEpoch - 250000 vs - 7PWei 83.127 ms/op 64.304 ms/op 1.29
altair processEpoch - mainnet_e81889 379.84 ms/op 460.17 ms/op 0.83
mainnet_e81889 - altair beforeProcessEpoch 63.534 ms/op 79.920 ms/op 0.79
mainnet_e81889 - altair processJustificationAndFinalization 12.254 us/op 20.959 us/op 0.58
mainnet_e81889 - altair processInactivityUpdates 5.7207 ms/op 11.700 ms/op 0.49
mainnet_e81889 - altair processRewardsAndPenalties 44.740 ms/op 55.331 ms/op 0.81
mainnet_e81889 - altair processRegistryUpdates 1.7510 us/op 5.1590 us/op 0.34
mainnet_e81889 - altair processSlashings 368.00 ns/op 926.00 ns/op 0.40
mainnet_e81889 - altair processEth1DataReset 330.00 ns/op 649.00 ns/op 0.51
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.0882 ms/op 1.2071 ms/op 0.90
mainnet_e81889 - altair processSlashingsReset 2.8620 us/op 4.2720 us/op 0.67
mainnet_e81889 - altair processRandaoMixesReset 3.3050 us/op 5.4070 us/op 0.61
mainnet_e81889 - altair processHistoricalRootsUpdate 304.00 ns/op 753.00 ns/op 0.40
mainnet_e81889 - altair processParticipationFlagUpdates 1.6110 us/op 2.6000 us/op 0.62
mainnet_e81889 - altair processSyncCommitteeUpdates 542.00 ns/op 500.00 ns/op 1.08
mainnet_e81889 - altair afterProcessEpoch 91.554 ms/op 95.134 ms/op 0.96
capella processEpoch - mainnet_e217614 1.2758 s/op 1.5030 s/op 0.85
mainnet_e217614 - capella beforeProcessEpoch 242.25 ms/op 328.81 ms/op 0.74
mainnet_e217614 - capella processJustificationAndFinalization 13.193 us/op 29.077 us/op 0.45
mainnet_e217614 - capella processInactivityUpdates 17.359 ms/op 30.239 ms/op 0.57
mainnet_e217614 - capella processRewardsAndPenalties 228.99 ms/op 390.15 ms/op 0.59
mainnet_e217614 - capella processRegistryUpdates 12.740 us/op 29.935 us/op 0.43
mainnet_e217614 - capella processSlashings 377.00 ns/op 1.5750 us/op 0.24
mainnet_e217614 - capella processEth1DataReset 296.00 ns/op 1.2160 us/op 0.24
mainnet_e217614 - capella processEffectiveBalanceUpdates 11.043 ms/op 16.943 ms/op 0.65
mainnet_e217614 - capella processSlashingsReset 2.8330 us/op 4.5730 us/op 0.62
mainnet_e217614 - capella processRandaoMixesReset 3.8440 us/op 11.744 us/op 0.33
mainnet_e217614 - capella processHistoricalRootsUpdate 400.00 ns/op 1.2130 us/op 0.33
mainnet_e217614 - capella processParticipationFlagUpdates 3.1720 us/op 4.0540 us/op 0.78
mainnet_e217614 - capella afterProcessEpoch 230.38 ms/op 296.60 ms/op 0.78
phase0 processEpoch - mainnet_e58758 359.47 ms/op 419.52 ms/op 0.86
mainnet_e58758 - phase0 beforeProcessEpoch 107.47 ms/op 135.30 ms/op 0.79
mainnet_e58758 - phase0 processJustificationAndFinalization 13.866 us/op 19.477 us/op 0.71
mainnet_e58758 - phase0 processRewardsAndPenalties 22.163 ms/op 32.239 ms/op 0.69
mainnet_e58758 - phase0 processRegistryUpdates 7.6910 us/op 12.517 us/op 0.61
mainnet_e58758 - phase0 processSlashings 365.00 ns/op 615.00 ns/op 0.59
mainnet_e58758 - phase0 processEth1DataReset 376.00 ns/op 727.00 ns/op 0.52
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 949.22 us/op 1.0197 ms/op 0.93
mainnet_e58758 - phase0 processSlashingsReset 2.8700 us/op 7.7860 us/op 0.37
mainnet_e58758 - phase0 processRandaoMixesReset 3.8470 us/op 4.9340 us/op 0.78
mainnet_e58758 - phase0 processHistoricalRootsUpdate 395.00 ns/op 562.00 ns/op 0.70
mainnet_e58758 - phase0 processParticipationRecordUpdates 2.8360 us/op 6.3470 us/op 0.45
mainnet_e58758 - phase0 afterProcessEpoch 75.158 ms/op 80.319 ms/op 0.94
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.1577 ms/op 1.2439 ms/op 0.93
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.9378 ms/op 2.4975 ms/op 0.78
altair processInactivityUpdates - 250000 normalcase 16.267 ms/op 18.669 ms/op 0.87
altair processInactivityUpdates - 250000 worstcase 15.911 ms/op 17.436 ms/op 0.91
phase0 processRegistryUpdates - 250000 normalcase 6.3110 us/op 7.2910 us/op 0.87
phase0 processRegistryUpdates - 250000 badcase_full_deposits 229.31 us/op 302.87 us/op 0.76
phase0 processRegistryUpdates - 250000 worstcase 0.5 104.05 ms/op 144.45 ms/op 0.72
altair processRewardsAndPenalties - 250000 normalcase 37.914 ms/op 44.035 ms/op 0.86
altair processRewardsAndPenalties - 250000 worstcase 37.693 ms/op 43.546 ms/op 0.87
phase0 getAttestationDeltas - 250000 normalcase 6.9375 ms/op 9.6722 ms/op 0.72
phase0 getAttestationDeltas - 250000 worstcase 7.1177 ms/op 9.6665 ms/op 0.74
phase0 processSlashings - 250000 worstcase 77.435 us/op 124.30 us/op 0.62
altair processSyncCommitteeUpdates - 250000 122.86 ms/op 138.05 ms/op 0.89
BeaconState.hashTreeRoot - No change 265.00 ns/op 406.00 ns/op 0.65
BeaconState.hashTreeRoot - 1 full validator 140.83 us/op 126.57 us/op 1.11
BeaconState.hashTreeRoot - 32 full validator 1.3637 ms/op 1.4856 ms/op 0.92
BeaconState.hashTreeRoot - 512 full validator 14.639 ms/op 13.145 ms/op 1.11
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 145.53 us/op 214.53 us/op 0.68
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.7628 ms/op 2.5191 ms/op 0.70
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 24.131 ms/op 41.689 ms/op 0.58
BeaconState.hashTreeRoot - 1 balances 108.03 us/op 203.91 us/op 0.53
BeaconState.hashTreeRoot - 32 balances 918.28 us/op 1.9640 ms/op 0.47
BeaconState.hashTreeRoot - 512 balances 9.9551 ms/op 17.381 ms/op 0.57
BeaconState.hashTreeRoot - 250000 balances 184.49 ms/op 251.75 ms/op 0.73
aggregationBits - 2048 els - zipIndexesInBitList 23.618 us/op 46.045 us/op 0.51
byteArrayEquals 32 53.897 ns/op 62.711 ns/op 0.86
Buffer.compare 32 45.898 ns/op 51.424 ns/op 0.89
byteArrayEquals 1024 1.5943 us/op 1.7712 us/op 0.90
Buffer.compare 1024 53.579 ns/op 57.063 ns/op 0.94
byteArrayEquals 16384 25.293 us/op 27.822 us/op 0.91
Buffer.compare 16384 242.00 ns/op 330.51 ns/op 0.73
byteArrayEquals 123687377 188.56 ms/op 210.79 ms/op 0.89
Buffer.compare 123687377 6.4092 ms/op 12.011 ms/op 0.53
byteArrayEquals 32 - diff last byte 52.167 ns/op 54.621 ns/op 0.96
Buffer.compare 32 - diff last byte 45.736 ns/op 49.012 ns/op 0.93
byteArrayEquals 1024 - diff last byte 1.5706 us/op 1.6462 us/op 0.95
Buffer.compare 1024 - diff last byte 56.269 ns/op 61.346 ns/op 0.92
byteArrayEquals 16384 - diff last byte 25.029 us/op 26.273 us/op 0.95
Buffer.compare 16384 - diff last byte 215.77 ns/op 239.59 ns/op 0.90
byteArrayEquals 123687377 - diff last byte 187.17 ms/op 241.76 ms/op 0.77
Buffer.compare 123687377 - diff last byte 6.2886 ms/op 8.8736 ms/op 0.71
byteArrayEquals 32 - random bytes 5.1020 ns/op 5.4750 ns/op 0.93
Buffer.compare 32 - random bytes 48.233 ns/op 49.063 ns/op 0.98
byteArrayEquals 1024 - random bytes 5.5720 ns/op 5.2960 ns/op 1.05
Buffer.compare 1024 - random bytes 45.950 ns/op 47.352 ns/op 0.97
byteArrayEquals 16384 - random bytes 5.1490 ns/op 5.2930 ns/op 0.97
Buffer.compare 16384 - random bytes 45.782 ns/op 47.048 ns/op 0.97
byteArrayEquals 123687377 - random bytes 6.5000 ns/op 6.6600 ns/op 0.98
Buffer.compare 123687377 - random bytes 46.590 ns/op 48.730 ns/op 0.96
regular array get 100000 times 42.460 us/op 33.542 us/op 1.27
wrappedArray get 100000 times 32.477 us/op 33.675 us/op 0.96
arrayWithProxy get 100000 times 12.764 ms/op 13.221 ms/op 0.97
ssz.Root.equals 45.309 ns/op 47.507 ns/op 0.95
byteArrayEquals 44.915 ns/op 46.394 ns/op 0.97
Buffer.compare 10.261 ns/op 10.942 ns/op 0.94
shuffle list - 16384 els 6.3029 ms/op 6.6307 ms/op 0.95
shuffle list - 250000 els 91.385 ms/op 94.521 ms/op 0.97
processSlot - 1 slots 14.278 us/op 11.711 us/op 1.22
processSlot - 32 slots 2.8057 ms/op 2.2827 ms/op 1.23
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 35.807 ms/op 36.966 ms/op 0.97
getCommitteeAssignments - req 1 vs - 250000 vc 2.1644 ms/op 2.1859 ms/op 0.99
getCommitteeAssignments - req 100 vs - 250000 vc 4.1472 ms/op 4.2152 ms/op 0.98
getCommitteeAssignments - req 1000 vs - 250000 vc 4.4665 ms/op 4.5444 ms/op 0.98
findModifiedValidators - 10000 modified validators 243.44 ms/op 309.25 ms/op 0.79
findModifiedValidators - 1000 modified validators 174.73 ms/op 272.88 ms/op 0.64
findModifiedValidators - 100 modified validators 187.29 ms/op 258.10 ms/op 0.73
findModifiedValidators - 10 modified validators 168.27 ms/op 270.78 ms/op 0.62
findModifiedValidators - 1 modified validators 186.53 ms/op 241.08 ms/op 0.77
findModifiedValidators - no difference 181.97 ms/op 212.75 ms/op 0.86
compare ViewDUs 3.0051 s/op 3.2819 s/op 0.92
compare each validator Uint8Array 1.2898 s/op 1.7415 s/op 0.74
compare ViewDU to Uint8Array 1.0985 s/op 1.4206 s/op 0.77
migrate state 1000000 validators, 24 modified, 0 new 593.43 ms/op 702.14 ms/op 0.85
migrate state 1000000 validators, 1700 modified, 1000 new 797.94 ms/op 998.54 ms/op 0.80
migrate state 1000000 validators, 3400 modified, 2000 new 1.0046 s/op 1.4547 s/op 0.69
migrate state 1500000 validators, 24 modified, 0 new 589.41 ms/op 781.76 ms/op 0.75
migrate state 1500000 validators, 1700 modified, 1000 new 804.35 ms/op 953.90 ms/op 0.84
migrate state 1500000 validators, 3400 modified, 2000 new 1.0721 s/op 1.0483 s/op 1.02
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 4.6600 ns/op 4.4300 ns/op 1.05
state getBlockRootAtSlot - 250000 vs - 7PWei 860.23 ns/op 574.51 ns/op 1.50
computeProposers - vc 250000 7.3674 ms/op 7.7954 ms/op 0.95
computeEpochShuffling - vc 250000 95.681 ms/op 93.088 ms/op 1.03
getNextSyncCommittee - vc 250000 123.96 ms/op 138.13 ms/op 0.90
computeSigningRoot for AttestationData 19.982 us/op 18.883 us/op 1.06
hash AttestationData serialized data then Buffer.toString(base64) 1.5589 us/op 1.5039 us/op 1.04
toHexString serialized data 901.22 ns/op 887.46 ns/op 1.02
Buffer.toString(base64) 179.53 ns/op 164.22 ns/op 1.09

by benchmarkbot/action

Copy link
Member

@wemeetagain wemeetagain left a comment

Choose a reason for hiding this comment

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

LGTM

@wemeetagain wemeetagain merged commit 225e67a into unstable Jun 13, 2024
20 checks passed
@wemeetagain wemeetagain deleted the nflaig/allow-empty-body branch June 13, 2024 13:28
@wemeetagain
Copy link
Member

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

2 participants