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: correct slot and index in getEpochCommittees response #5634

Merged
merged 5 commits into from
Jun 14, 2023

Conversation

nflaig
Copy link
Member

@nflaig nflaig commented Jun 13, 2023

Motivation

Closes #5632

Description

  • correct slot and committee index in getEpochCommittees response
  • fix filtering by slot and index

@github-actions
Copy link
Contributor

github-actions bot commented Jun 13, 2023

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: b892ccb Previous: 82914a1 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 824.56 us/op 668.44 us/op 1.23
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 48.985 us/op 61.841 us/op 0.79
BLS verify - blst-native 1.2563 ms/op 1.3794 ms/op 0.91
BLS verifyMultipleSignatures 3 - blst-native 2.5351 ms/op 2.8968 ms/op 0.88
BLS verifyMultipleSignatures 8 - blst-native 5.4706 ms/op 6.2019 ms/op 0.88
BLS verifyMultipleSignatures 32 - blst-native 19.398 ms/op 24.090 ms/op 0.81
BLS aggregatePubkeys 32 - blst-native 26.236 us/op 31.740 us/op 0.83
BLS aggregatePubkeys 128 - blst-native 101.36 us/op 127.03 us/op 0.80
getAttestationsForBlock 65.763 ms/op 88.330 ms/op 0.74
isKnown best case - 1 super set check 267.00 ns/op 312.00 ns/op 0.86
isKnown normal case - 2 super set checks 260.00 ns/op 287.00 ns/op 0.91
isKnown worse case - 16 super set checks 254.00 ns/op 288.00 ns/op 0.88
CheckpointStateCache - add get delete 5.8170 us/op 6.8270 us/op 0.85
validate gossip signedAggregateAndProof - struct 2.8690 ms/op 3.1738 ms/op 0.90
validate gossip attestation - struct 1.3512 ms/op 1.5300 ms/op 0.88
pickEth1Vote - no votes 1.4153 ms/op 1.5053 ms/op 0.94
pickEth1Vote - max votes 12.298 ms/op 11.564 ms/op 1.06
pickEth1Vote - Eth1Data hashTreeRoot value x2048 9.2381 ms/op 11.251 ms/op 0.82
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 16.037 ms/op 20.044 ms/op 0.80
pickEth1Vote - Eth1Data fastSerialize value x2048 735.95 us/op 877.09 us/op 0.84
pickEth1Vote - Eth1Data fastSerialize tree x2048 5.4646 ms/op 6.3443 ms/op 0.86
bytes32 toHexString 662.00 ns/op 735.00 ns/op 0.90
bytes32 Buffer.toString(hex) 470.00 ns/op 468.00 ns/op 1.00
bytes32 Buffer.toString(hex) from Uint8Array 669.00 ns/op 685.00 ns/op 0.98
bytes32 Buffer.toString(hex) + 0x 479.00 ns/op 466.00 ns/op 1.03
Object access 1 prop 0.20400 ns/op 0.21000 ns/op 0.97
Map access 1 prop 0.17800 ns/op 0.18400 ns/op 0.97
Object get x1000 7.5000 ns/op 8.1190 ns/op 0.92
Map get x1000 0.60100 ns/op 0.70800 ns/op 0.85
Object set x1000 71.370 ns/op 71.542 ns/op 1.00
Map set x1000 53.061 ns/op 57.076 ns/op 0.93
Return object 10000 times 0.25340 ns/op 0.28070 ns/op 0.90
Throw Error 10000 times 4.3488 us/op 4.9226 us/op 0.88
fastMsgIdFn sha256 / 200 bytes 3.6870 us/op 3.8890 us/op 0.95
fastMsgIdFn h32 xxhash / 200 bytes 307.00 ns/op 339.00 ns/op 0.91
fastMsgIdFn h64 xxhash / 200 bytes 485.00 ns/op 510.00 ns/op 0.95
fastMsgIdFn sha256 / 1000 bytes 12.059 us/op 12.940 us/op 0.93
fastMsgIdFn h32 xxhash / 1000 bytes 440.00 ns/op 504.00 ns/op 0.87
fastMsgIdFn h64 xxhash / 1000 bytes 608.00 ns/op 597.00 ns/op 1.02
fastMsgIdFn sha256 / 10000 bytes 109.39 us/op 117.28 us/op 0.93
fastMsgIdFn h32 xxhash / 10000 bytes 2.0780 us/op 2.1620 us/op 0.96
fastMsgIdFn h64 xxhash / 10000 bytes 1.5350 us/op 1.5870 us/op 0.97
enrSubnets - fastDeserialize 64 bits 1.7380 us/op 1.5590 us/op 1.11
enrSubnets - ssz BitVector 64 bits 661.00 ns/op 617.00 ns/op 1.07
enrSubnets - fastDeserialize 4 bits 225.00 ns/op 205.00 ns/op 1.10
enrSubnets - ssz BitVector 4 bits 658.00 ns/op 629.00 ns/op 1.05
prioritizePeers score -10:0 att 32-0.1 sync 2-0 161.27 us/op 131.14 us/op 1.23
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 202.19 us/op 168.92 us/op 1.20
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 221.18 us/op 214.00 us/op 1.03
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 447.48 us/op 385.70 us/op 1.16
prioritizePeers score 0:0 att 64-1 sync 4-1 434.87 us/op 470.36 us/op 0.92
array of 16000 items push then shift 1.7333 us/op 1.7601 us/op 0.98
LinkedList of 16000 items push then shift 9.6170 ns/op 9.9270 ns/op 0.97
array of 16000 items push then pop 108.39 ns/op 117.94 ns/op 0.92
LinkedList of 16000 items push then pop 9.0880 ns/op 9.7300 ns/op 0.93
array of 24000 items push then shift 2.5552 us/op 2.5580 us/op 1.00
LinkedList of 24000 items push then shift 9.7200 ns/op 9.9320 ns/op 0.98
array of 24000 items push then pop 87.953 ns/op 89.670 ns/op 0.98
LinkedList of 24000 items push then pop 8.8800 ns/op 10.705 ns/op 0.83
intersect bitArray bitLen 8 14.249 ns/op 14.888 ns/op 0.96
intersect array and set length 8 93.766 ns/op 96.818 ns/op 0.97
intersect bitArray bitLen 128 46.124 ns/op 48.122 ns/op 0.96
intersect array and set length 128 1.2878 us/op 1.3161 us/op 0.98
Buffer.concat 32 items 2.8620 us/op 3.2510 us/op 0.88
Uint8Array.set 32 items 2.2860 us/op 2.8670 us/op 0.80
transfer serialized Status (84 B) 2.2010 us/op 2.2290 us/op 0.99
copy serialized Status (84 B) 1.7980 us/op 2.1390 us/op 0.84
transfer serialized SignedVoluntaryExit (112 B) 2.2390 us/op 2.5630 us/op 0.87
copy serialized SignedVoluntaryExit (112 B) 1.9700 us/op 2.1050 us/op 0.94
transfer serialized ProposerSlashing (416 B) 3.0320 us/op 3.3540 us/op 0.90
copy serialized ProposerSlashing (416 B) 3.7510 us/op 3.0290 us/op 1.24
transfer serialized Attestation (485 B) 3.4290 us/op 2.8700 us/op 1.19
copy serialized Attestation (485 B) 3.6680 us/op 2.9530 us/op 1.24
transfer serialized AttesterSlashing (33232 B) 3.2610 us/op 3.0110 us/op 1.08
copy serialized AttesterSlashing (33232 B) 8.6450 us/op 6.6740 us/op 1.30
transfer serialized Small SignedBeaconBlock (128000 B) 3.3450 us/op 3.3440 us/op 1.00
copy serialized Small SignedBeaconBlock (128000 B) 20.359 us/op 20.565 us/op 0.99
transfer serialized Avg SignedBeaconBlock (200000 B) 3.7640 us/op 4.1520 us/op 0.91
copy serialized Avg SignedBeaconBlock (200000 B) 31.733 us/op 78.756 us/op 0.40
transfer serialized BlobsSidecar (524380 B) 3.7890 us/op 4.2550 us/op 0.89
copy serialized BlobsSidecar (524380 B) 205.45 us/op 188.50 us/op 1.09
transfer serialized Big SignedBeaconBlock (1000000 B) 3.8390 us/op 4.1630 us/op 0.92
copy serialized Big SignedBeaconBlock (1000000 B) 350.94 us/op 362.47 us/op 0.97
pass gossip attestations to forkchoice per slot 2.7172 ms/op 3.1304 ms/op 0.87
forkChoice updateHead vc 100000 bc 64 eq 0 2.2970 ms/op 2.3956 ms/op 0.96
forkChoice updateHead vc 600000 bc 64 eq 0 17.532 ms/op 14.513 ms/op 1.21
forkChoice updateHead vc 1000000 bc 64 eq 0 24.701 ms/op 23.742 ms/op 1.04
forkChoice updateHead vc 600000 bc 320 eq 0 21.256 ms/op 18.064 ms/op 1.18
forkChoice updateHead vc 600000 bc 1200 eq 0 111.07 ms/op 94.085 ms/op 1.18
forkChoice updateHead vc 600000 bc 64 eq 1000 24.941 ms/op 22.400 ms/op 1.11
forkChoice updateHead vc 600000 bc 64 eq 10000 27.115 ms/op 23.962 ms/op 1.13
forkChoice updateHead vc 600000 bc 64 eq 300000 51.285 ms/op 40.610 ms/op 1.26
computeDeltas 3.3720 ms/op 3.2851 ms/op 1.03
computeProposerBoostScoreFromBalances 1.8727 ms/op 1.8840 ms/op 0.99
altair processAttestation - 250000 vs - 7PWei normalcase 3.3383 ms/op 2.4885 ms/op 1.34
altair processAttestation - 250000 vs - 7PWei worstcase 4.5730 ms/op 3.8569 ms/op 1.19
altair processAttestation - setStatus - 1/6 committees join 155.44 us/op 148.43 us/op 1.05
altair processAttestation - setStatus - 1/3 committees join 281.92 us/op 290.44 us/op 0.97
altair processAttestation - setStatus - 1/2 committees join 377.87 us/op 391.08 us/op 0.97
altair processAttestation - setStatus - 2/3 committees join 472.28 us/op 500.11 us/op 0.94
altair processAttestation - setStatus - 4/5 committees join 665.50 us/op 692.60 us/op 0.96
altair processAttestation - setStatus - 100% committees join 792.54 us/op 808.02 us/op 0.98
altair processBlock - 250000 vs - 7PWei normalcase 18.685 ms/op 19.134 ms/op 0.98
altair processBlock - 250000 vs - 7PWei normalcase hashState 28.959 ms/op 27.415 ms/op 1.06
altair processBlock - 250000 vs - 7PWei worstcase 50.706 ms/op 59.940 ms/op 0.85
altair processBlock - 250000 vs - 7PWei worstcase hashState 71.910 ms/op 82.632 ms/op 0.87
phase0 processBlock - 250000 vs - 7PWei normalcase 2.3221 ms/op 2.6271 ms/op 0.88
phase0 processBlock - 250000 vs - 7PWei worstcase 35.612 ms/op 34.363 ms/op 1.04
altair processEth1Data - 250000 vs - 7PWei normalcase 641.36 us/op 552.87 us/op 1.16
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 11.513 us/op 7.3970 us/op 1.56
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 31.969 us/op 24.954 us/op 1.28
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 10.641 us/op 9.6840 us/op 1.10
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 8.8710 us/op 7.6500 us/op 1.16
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 102.40 us/op 95.587 us/op 1.07
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 661.47 us/op 857.99 us/op 0.77
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 924.67 us/op 1.1651 ms/op 0.79
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 922.31 us/op 1.1274 ms/op 0.82
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 2.3774 ms/op 2.8426 ms/op 0.84
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 1.5632 ms/op 1.7593 ms/op 0.89
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.9451 ms/op 4.1515 ms/op 0.95
Tree 40 250000 create 329.33 ms/op 469.48 ms/op 0.70
Tree 40 250000 get(125000) 194.69 ns/op 212.36 ns/op 0.92
Tree 40 250000 set(125000) 1.0156 us/op 1.1452 us/op 0.89
Tree 40 250000 toArray() 19.804 ms/op 22.176 ms/op 0.89
Tree 40 250000 iterate all - toArray() + loop 19.706 ms/op 22.170 ms/op 0.89
Tree 40 250000 iterate all - get(i) 69.231 ms/op 80.291 ms/op 0.86
MutableVector 250000 create 10.386 ms/op 15.148 ms/op 0.69
MutableVector 250000 get(125000) 6.5080 ns/op 6.9410 ns/op 0.94
MutableVector 250000 set(125000) 270.88 ns/op 283.21 ns/op 0.96
MutableVector 250000 toArray() 3.4066 ms/op 3.7184 ms/op 0.92
MutableVector 250000 iterate all - toArray() + loop 3.3099 ms/op 4.1345 ms/op 0.80
MutableVector 250000 iterate all - get(i) 1.5362 ms/op 1.6934 ms/op 0.91
Array 250000 create 2.4761 ms/op 3.7395 ms/op 0.66
Array 250000 clone - spread 1.1509 ms/op 1.2129 ms/op 0.95
Array 250000 get(125000) 0.59300 ns/op 0.62900 ns/op 0.94
Array 250000 set(125000) 0.64700 ns/op 0.86600 ns/op 0.75
Array 250000 iterate all - loop 83.545 us/op 95.167 us/op 0.88
effectiveBalanceIncrements clone Uint8Array 300000 29.168 us/op 44.836 us/op 0.65
effectiveBalanceIncrements clone MutableVector 300000 376.00 ns/op 384.00 ns/op 0.98
effectiveBalanceIncrements rw all Uint8Array 300000 169.72 us/op 179.97 us/op 0.94
effectiveBalanceIncrements rw all MutableVector 300000 82.680 ms/op 97.208 ms/op 0.85
phase0 afterProcessEpoch - 250000 vs - 7PWei 112.68 ms/op 124.11 ms/op 0.91
phase0 beforeProcessEpoch - 250000 vs - 7PWei 32.823 ms/op 50.172 ms/op 0.65
altair processEpoch - mainnet_e81889 338.47 ms/op 363.62 ms/op 0.93
mainnet_e81889 - altair beforeProcessEpoch 66.829 ms/op 54.628 ms/op 1.22
mainnet_e81889 - altair processJustificationAndFinalization 22.968 us/op 17.345 us/op 1.32
mainnet_e81889 - altair processInactivityUpdates 6.1453 ms/op 6.1147 ms/op 1.01
mainnet_e81889 - altair processRewardsAndPenalties 48.608 ms/op 78.502 ms/op 0.62
mainnet_e81889 - altair processRegistryUpdates 2.7040 us/op 3.6060 us/op 0.75
mainnet_e81889 - altair processSlashings 558.00 ns/op 520.00 ns/op 1.07
mainnet_e81889 - altair processEth1DataReset 621.00 ns/op 512.00 ns/op 1.21
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.4427 ms/op 1.5829 ms/op 0.91
mainnet_e81889 - altair processSlashingsReset 5.5980 us/op 6.1110 us/op 0.92
mainnet_e81889 - altair processRandaoMixesReset 5.7310 us/op 9.5290 us/op 0.60
mainnet_e81889 - altair processHistoricalRootsUpdate 1.3730 us/op 1.1750 us/op 1.17
mainnet_e81889 - altair processParticipationFlagUpdates 3.2880 us/op 4.5630 us/op 0.72
mainnet_e81889 - altair processSyncCommitteeUpdates 903.00 ns/op 522.00 ns/op 1.73
mainnet_e81889 - altair afterProcessEpoch 142.42 ms/op 136.50 ms/op 1.04
phase0 processEpoch - mainnet_e58758 391.96 ms/op 394.54 ms/op 0.99
mainnet_e58758 - phase0 beforeProcessEpoch 156.11 ms/op 148.68 ms/op 1.05
mainnet_e58758 - phase0 processJustificationAndFinalization 21.759 us/op 21.761 us/op 1.00
mainnet_e58758 - phase0 processRewardsAndPenalties 68.676 ms/op 63.457 ms/op 1.08
mainnet_e58758 - phase0 processRegistryUpdates 9.5520 us/op 10.698 us/op 0.89
mainnet_e58758 - phase0 processSlashings 667.00 ns/op 1.0650 us/op 0.63
mainnet_e58758 - phase0 processEth1DataReset 768.00 ns/op 944.00 ns/op 0.81
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 2.1798 ms/op 1.3394 ms/op 1.63
mainnet_e58758 - phase0 processSlashingsReset 4.0360 us/op 5.2430 us/op 0.77
mainnet_e58758 - phase0 processRandaoMixesReset 7.9700 us/op 13.310 us/op 0.60
mainnet_e58758 - phase0 processHistoricalRootsUpdate 914.00 ns/op 1.3230 us/op 0.69
mainnet_e58758 - phase0 processParticipationRecordUpdates 4.4530 us/op 5.7300 us/op 0.78
mainnet_e58758 - phase0 afterProcessEpoch 99.712 ms/op 102.89 ms/op 0.97
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.2948 ms/op 1.2893 ms/op 1.00
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.6607 ms/op 1.4921 ms/op 1.11
altair processInactivityUpdates - 250000 normalcase 27.965 ms/op 28.691 ms/op 0.97
altair processInactivityUpdates - 250000 worstcase 25.620 ms/op 30.953 ms/op 0.83
phase0 processRegistryUpdates - 250000 normalcase 13.586 us/op 8.8190 us/op 1.54
phase0 processRegistryUpdates - 250000 badcase_full_deposits 390.08 us/op 337.41 us/op 1.16
phase0 processRegistryUpdates - 250000 worstcase 0.5 177.86 ms/op 144.82 ms/op 1.23
altair processRewardsAndPenalties - 250000 normalcase 71.726 ms/op 73.014 ms/op 0.98
altair processRewardsAndPenalties - 250000 worstcase 86.366 ms/op 76.494 ms/op 1.13
phase0 getAttestationDeltas - 250000 normalcase 9.7254 ms/op 7.3731 ms/op 1.32
phase0 getAttestationDeltas - 250000 worstcase 13.805 ms/op 7.1049 ms/op 1.94
phase0 processSlashings - 250000 worstcase 5.8092 ms/op 3.5518 ms/op 1.64
altair processSyncCommitteeUpdates - 250000 214.18 ms/op 193.21 ms/op 1.11
BeaconState.hashTreeRoot - No change 355.00 ns/op 313.00 ns/op 1.13
BeaconState.hashTreeRoot - 1 full validator 63.908 us/op 58.026 us/op 1.10
BeaconState.hashTreeRoot - 32 full validator 736.28 us/op 664.83 us/op 1.11
BeaconState.hashTreeRoot - 512 full validator 10.170 ms/op 6.2728 ms/op 1.62
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 79.288 us/op 68.092 us/op 1.16
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.1482 ms/op 1.0018 ms/op 1.15
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 16.267 ms/op 12.816 ms/op 1.27
BeaconState.hashTreeRoot - 1 balances 61.456 us/op 54.312 us/op 1.13
BeaconState.hashTreeRoot - 32 balances 657.75 us/op 575.95 us/op 1.14
BeaconState.hashTreeRoot - 512 balances 6.4835 ms/op 5.2774 ms/op 1.23
BeaconState.hashTreeRoot - 250000 balances 90.878 ms/op 84.945 ms/op 1.07
aggregationBits - 2048 els - zipIndexesInBitList 32.589 us/op 18.963 us/op 1.72
regular array get 100000 times 55.767 us/op 35.210 us/op 1.58
wrappedArray get 100000 times 43.500 us/op 34.918 us/op 1.25
arrayWithProxy get 100000 times 18.104 ms/op 17.622 ms/op 1.03
ssz.Root.equals 655.00 ns/op 643.00 ns/op 1.02
byteArrayEquals 661.00 ns/op 594.00 ns/op 1.11
shuffle list - 16384 els 8.0094 ms/op 7.1995 ms/op 1.11
shuffle list - 250000 els 122.83 ms/op 106.50 ms/op 1.15
processSlot - 1 slots 12.507 us/op 10.990 us/op 1.14
processSlot - 32 slots 1.6289 ms/op 1.5626 ms/op 1.04
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 47.449 ms/op 40.115 ms/op 1.18
getCommitteeAssignments - req 1 vs - 250000 vc 3.7138 ms/op 3.1105 ms/op 1.19
getCommitteeAssignments - req 100 vs - 250000 vc 5.1157 ms/op 4.4354 ms/op 1.15
getCommitteeAssignments - req 1000 vs - 250000 vc 5.4031 ms/op 4.8935 ms/op 1.10
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 5.9200 ns/op 5.3200 ns/op 1.11
state getBlockRootAtSlot - 250000 vs - 7PWei 886.25 ns/op 746.17 ns/op 1.19
computeProposers - vc 250000 13.390 ms/op 11.391 ms/op 1.18
computeEpochShuffling - vc 250000 116.01 ms/op 110.65 ms/op 1.05
getNextSyncCommittee - vc 250000 195.80 ms/op 191.49 ms/op 1.02
computeSigningRoot for AttestationData 17.515 us/op 14.575 us/op 1.20
hash AttestationData serialized data then Buffer.toString(base64) 2.8100 us/op 2.6649 us/op 1.05
toHexString serialized data 2.1002 us/op 1.2179 us/op 1.72
Buffer.toString(base64) 450.87 ns/op 355.24 ns/op 1.27

by benchmarkbot/action

@nflaig nflaig force-pushed the nflaig/fix-getEpochCommittees-endpoint branch from c95dbd0 to 94a61f3 Compare June 14, 2023 08:44
@nflaig nflaig marked this pull request as ready for review June 14, 2023 08:46
@nflaig nflaig requested a review from a team as a code owner June 14, 2023 08:46
nazarhussain
nazarhussain previously approved these changes Jun 14, 2023
@nflaig nflaig requested a review from nazarhussain June 14, 2023 12:45
@nflaig nflaig merged commit 2485944 into unstable Jun 14, 2023
@nflaig nflaig deleted the nflaig/fix-getEpochCommittees-endpoint branch June 14, 2023 16:43
@wemeetagain
Copy link
Member

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

/eth/v1/beacon/states/head/committees returns incorrect information
4 participants