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

Update API response object #4994

Merged
merged 27 commits into from
Jan 20, 2023
Merged

Update API response object #4994

merged 27 commits into from
Jan 20, 2023

Conversation

nazarhussain
Copy link
Contributor

Motivation

Make the /eth/v1/node/health compliance with the spec.

Description

Read/Write the http status code for the node health.

Closes #4993

Steps to test or reproduce

Run all tests.

@nazarhussain nazarhussain requested a review from a team as a code owner January 9, 2023 17:06
@github-actions
Copy link
Contributor

github-actions bot commented Jan 9, 2023

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: ab4f5db Previous: 98aa53e Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 1.2934 ms/op 1.1547 ms/op 1.12
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 72.539 us/op 69.090 us/op 1.05
BLS verify - blst-native 2.0498 ms/op 1.8599 ms/op 1.10
BLS verifyMultipleSignatures 3 - blst-native 4.2034 ms/op 3.8096 ms/op 1.10
BLS verifyMultipleSignatures 8 - blst-native 9.1637 ms/op 8.1964 ms/op 1.12
BLS verifyMultipleSignatures 32 - blst-native 32.672 ms/op 29.764 ms/op 1.10
BLS aggregatePubkeys 32 - blst-native 45.006 us/op 39.208 us/op 1.15
BLS aggregatePubkeys 128 - blst-native 172.81 us/op 153.64 us/op 1.12
getAttestationsForBlock 101.72 ms/op 87.622 ms/op 1.16
isKnown best case - 1 super set check 516.00 ns/op 419.00 ns/op 1.23
isKnown normal case - 2 super set checks 495.00 ns/op 419.00 ns/op 1.18
isKnown worse case - 16 super set checks 500.00 ns/op 411.00 ns/op 1.22
CheckpointStateCache - add get delete 9.8130 us/op 8.3370 us/op 1.18
validate gossip signedAggregateAndProof - struct 4.8336 ms/op 4.2557 ms/op 1.14
validate gossip attestation - struct 2.3264 ms/op 2.0144 ms/op 1.15
pickEth1Vote - no votes 2.4921 ms/op 2.2484 ms/op 1.11
pickEth1Vote - max votes 20.322 ms/op 16.250 ms/op 1.25
pickEth1Vote - Eth1Data hashTreeRoot value x2048 13.498 ms/op 12.886 ms/op 1.05
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 25.261 ms/op 22.337 ms/op 1.13
pickEth1Vote - Eth1Data fastSerialize value x2048 1.4247 ms/op 1.2224 ms/op 1.17
pickEth1Vote - Eth1Data fastSerialize tree x2048 11.507 ms/op 9.7010 ms/op 1.19
bytes32 toHexString 1.1510 us/op 1.0580 us/op 1.09
bytes32 Buffer.toString(hex) 655.00 ns/op 600.00 ns/op 1.09
bytes32 Buffer.toString(hex) from Uint8Array 1.0300 us/op 898.00 ns/op 1.15
bytes32 Buffer.toString(hex) + 0x 687.00 ns/op 586.00 ns/op 1.17
Object access 1 prop 0.31300 ns/op 0.28600 ns/op 1.09
Map access 1 prop 0.27600 ns/op 0.25800 ns/op 1.07
Object get x1000 17.128 ns/op 16.494 ns/op 1.04
Map get x1000 1.1180 ns/op 1.0180 ns/op 1.10
Object set x1000 121.38 ns/op 110.84 ns/op 1.10
Map set x1000 78.473 ns/op 68.802 ns/op 1.14
Return object 10000 times 0.40810 ns/op 0.36460 ns/op 1.12
Throw Error 10000 times 7.7470 us/op 7.0011 us/op 1.11
fastMsgIdFn sha256 / 200 bytes 4.8140 us/op 4.2960 us/op 1.12
fastMsgIdFn h32 xxhash / 200 bytes 528.00 ns/op 509.00 ns/op 1.04
fastMsgIdFn h64 xxhash / 200 bytes 724.00 ns/op 742.00 ns/op 0.98
fastMsgIdFn sha256 / 1000 bytes 15.227 us/op 13.551 us/op 1.12
fastMsgIdFn h32 xxhash / 1000 bytes 680.00 ns/op 650.00 ns/op 1.05
fastMsgIdFn h64 xxhash / 1000 bytes 809.00 ns/op 829.00 ns/op 0.98
fastMsgIdFn sha256 / 10000 bytes 127.86 us/op 116.99 us/op 1.09
fastMsgIdFn h32 xxhash / 10000 bytes 2.5810 us/op 2.3620 us/op 1.09
fastMsgIdFn h64 xxhash / 10000 bytes 1.8420 us/op 1.7690 us/op 1.04
enrSubnets - fastDeserialize 64 bits 2.5490 us/op 2.4650 us/op 1.03
enrSubnets - ssz BitVector 64 bits 905.00 ns/op 885.00 ns/op 1.02
enrSubnets - fastDeserialize 4 bits 329.00 ns/op 320.00 ns/op 1.03
enrSubnets - ssz BitVector 4 bits 941.00 ns/op 909.00 ns/op 1.04
prioritizePeers score -10:0 att 32-0.1 sync 2-0 185.56 us/op 175.46 us/op 1.06
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 237.11 us/op 187.74 us/op 1.26
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 355.51 us/op 315.72 us/op 1.13
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 589.52 us/op 533.53 us/op 1.10
prioritizePeers score 0:0 att 64-1 sync 4-1 695.34 us/op 619.87 us/op 1.12
array of 16000 items push then shift 3.0372 us/op 2.7910 us/op 1.09
LinkedList of 16000 items push then shift 18.058 ns/op 17.204 ns/op 1.05
array of 16000 items push then pop 248.29 ns/op 214.38 ns/op 1.16
LinkedList of 16000 items push then pop 18.135 ns/op 16.526 ns/op 1.10
array of 24000 items push then shift 4.5116 us/op 3.9630 us/op 1.14
LinkedList of 24000 items push then shift 21.208 ns/op 20.443 ns/op 1.04
array of 24000 items push then pop 233.21 ns/op 205.81 ns/op 1.13
LinkedList of 24000 items push then pop 19.438 ns/op 17.862 ns/op 1.09
intersect bitArray bitLen 8 31.822 ns/op 29.659 ns/op 1.07
intersect array and set length 8 169.87 ns/op 163.92 ns/op 1.04
intersect bitArray bitLen 128 116.63 ns/op 108.81 ns/op 1.07
intersect array and set length 128 2.4706 us/op 2.2995 us/op 1.07
Buffer.concat 32 items 5.8310 us/op 5.2020 us/op 1.12
Uint8Array.set 32 items 4.4470 us/op 4.1980 us/op 1.06
pass gossip attestations to forkchoice per slot 7.0658 ms/op 6.3183 ms/op 1.12
computeDeltas 7.1746 ms/op 6.4614 ms/op 1.11
computeProposerBoostScoreFromBalances 2.9997 ms/op 2.8394 ms/op 1.06
altair processAttestation - 250000 vs - 7PWei normalcase 4.0627 ms/op 3.6497 ms/op 1.11
altair processAttestation - 250000 vs - 7PWei worstcase 6.4909 ms/op 5.8395 ms/op 1.11
altair processAttestation - setStatus - 1/6 committees join 238.08 us/op 211.05 us/op 1.13
altair processAttestation - setStatus - 1/3 committees join 441.40 us/op 414.59 us/op 1.06
altair processAttestation - setStatus - 1/2 committees join 593.70 us/op 565.45 us/op 1.05
altair processAttestation - setStatus - 2/3 committees join 772.79 us/op 725.97 us/op 1.06
altair processAttestation - setStatus - 4/5 committees join 1.0689 ms/op 1.0031 ms/op 1.07
altair processAttestation - setStatus - 100% committees join 1.3008 ms/op 1.1973 ms/op 1.09
altair processBlock - 250000 vs - 7PWei normalcase 29.350 ms/op 26.983 ms/op 1.09
altair processBlock - 250000 vs - 7PWei normalcase hashState 39.429 ms/op 31.019 ms/op 1.27
altair processBlock - 250000 vs - 7PWei worstcase 97.359 ms/op 77.258 ms/op 1.26
altair processBlock - 250000 vs - 7PWei worstcase hashState 110.72 ms/op 98.447 ms/op 1.12
phase0 processBlock - 250000 vs - 7PWei normalcase 3.8326 ms/op 3.5054 ms/op 1.09
phase0 processBlock - 250000 vs - 7PWei worstcase 52.133 ms/op 45.435 ms/op 1.15
altair processEth1Data - 250000 vs - 7PWei normalcase 830.27 us/op 897.05 us/op 0.93
vc - 250000 eb 1 eth1 1 we 0 wn 0 - smpl 15 16.822 us/op 10.321 us/op 1.63
vc - 250000 eb 0.95 eth1 0.1 we 0.05 wn 0 - smpl 219 39.133 us/op 29.200 us/op 1.34
vc - 250000 eb 0.95 eth1 0.3 we 0.05 wn 0 - smpl 42 20.890 us/op 12.944 us/op 1.61
vc - 250000 eb 0.95 eth1 0.7 we 0.05 wn 0 - smpl 18 15.458 us/op 9.7880 us/op 1.58
vc - 250000 eb 0.1 eth1 0.1 we 0 wn 0 - smpl 1020 136.59 us/op 101.24 us/op 1.35
vc - 250000 eb 0.03 eth1 0.03 we 0 wn 0 - smpl 11777 1.2717 ms/op 1.0189 ms/op 1.25
vc - 250000 eb 0.01 eth1 0.01 we 0 wn 0 - smpl 16384 1.6178 ms/op 1.3631 ms/op 1.19
vc - 250000 eb 0 eth1 0 we 0 wn 0 - smpl 16384 1.6325 ms/op 1.3320 ms/op 1.23
vc - 250000 eb 0 eth1 0 we 0 wn 0 nocache - smpl 16384 4.9522 ms/op 4.3082 ms/op 1.15
vc - 250000 eb 0 eth1 1 we 0 wn 0 - smpl 16384 3.2955 ms/op 2.9529 ms/op 1.12
vc - 250000 eb 0 eth1 1 we 0 wn 0 nocache - smpl 16384 8.2807 ms/op 6.8500 ms/op 1.21
Tree 40 250000 create 740.58 ms/op 653.10 ms/op 1.13
Tree 40 250000 get(125000) 313.96 ns/op 293.38 ns/op 1.07
Tree 40 250000 set(125000) 2.2114 us/op 2.1485 us/op 1.03
Tree 40 250000 toArray() 33.902 ms/op 31.110 ms/op 1.09
Tree 40 250000 iterate all - toArray() + loop 34.397 ms/op 31.071 ms/op 1.11
Tree 40 250000 iterate all - get(i) 118.67 ms/op 104.40 ms/op 1.14
MutableVector 250000 create 17.923 ms/op 17.643 ms/op 1.02
MutableVector 250000 get(125000) 15.224 ns/op 14.006 ns/op 1.09
MutableVector 250000 set(125000) 621.58 ns/op 570.12 ns/op 1.09
MutableVector 250000 toArray() 7.2900 ms/op 6.3899 ms/op 1.14
MutableVector 250000 iterate all - toArray() + loop 7.5133 ms/op 6.7314 ms/op 1.12
MutableVector 250000 iterate all - get(i) 3.7943 ms/op 3.5983 ms/op 1.05
Array 250000 create 7.0341 ms/op 6.2099 ms/op 1.13
Array 250000 clone - spread 3.0056 ms/op 2.6206 ms/op 1.15
Array 250000 get(125000) 1.2750 ns/op 1.1030 ns/op 1.16
Array 250000 set(125000) 1.2950 ns/op 1.1090 ns/op 1.17
Array 250000 iterate all - loop 189.91 us/op 167.68 us/op 1.13
effectiveBalanceIncrements clone Uint8Array 300000 90.901 us/op 71.929 us/op 1.26
effectiveBalanceIncrements clone MutableVector 300000 955.00 ns/op 762.00 ns/op 1.25
effectiveBalanceIncrements rw all Uint8Array 300000 299.56 us/op 252.65 us/op 1.19
effectiveBalanceIncrements rw all MutableVector 300000 210.77 ms/op 183.62 ms/op 1.15
phase0 afterProcessEpoch - 250000 vs - 7PWei 233.25 ms/op 186.82 ms/op 1.25
phase0 beforeProcessEpoch - 250000 vs - 7PWei 100.49 ms/op 97.932 ms/op 1.03
altair processEpoch - mainnet_e81889 632.27 ms/op 569.60 ms/op 1.11
mainnet_e81889 - altair beforeProcessEpoch 166.54 ms/op 152.38 ms/op 1.09
mainnet_e81889 - altair processJustificationAndFinalization 39.960 us/op 22.304 us/op 1.79
mainnet_e81889 - altair processInactivityUpdates 11.625 ms/op 10.657 ms/op 1.09
mainnet_e81889 - altair processRewardsAndPenalties 104.53 ms/op 90.490 ms/op 1.16
mainnet_e81889 - altair processRegistryUpdates 8.2950 us/op 3.3960 us/op 2.44
mainnet_e81889 - altair processSlashings 1.4620 us/op 724.00 ns/op 2.02
mainnet_e81889 - altair processEth1DataReset 1.7690 us/op 753.00 ns/op 2.35
mainnet_e81889 - altair processEffectiveBalanceUpdates 2.7453 ms/op 2.3194 ms/op 1.18
mainnet_e81889 - altair processSlashingsReset 13.275 us/op 8.4450 us/op 1.57
mainnet_e81889 - altair processRandaoMixesReset 13.391 us/op 10.786 us/op 1.24
mainnet_e81889 - altair processHistoricalRootsUpdate 2.4280 us/op 1.6320 us/op 1.49
mainnet_e81889 - altair processParticipationFlagUpdates 8.8330 us/op 6.0570 us/op 1.46
mainnet_e81889 - altair processSyncCommitteeUpdates 1.5100 us/op 1.0760 us/op 1.40
mainnet_e81889 - altair afterProcessEpoch 212.63 ms/op 193.79 ms/op 1.10
phase0 processEpoch - mainnet_e58758 579.36 ms/op 511.68 ms/op 1.13
mainnet_e58758 - phase0 beforeProcessEpoch 255.23 ms/op 225.11 ms/op 1.13
mainnet_e58758 - phase0 processJustificationAndFinalization 43.664 us/op 30.785 us/op 1.42
mainnet_e58758 - phase0 processRewardsAndPenalties 150.87 ms/op 133.05 ms/op 1.13
mainnet_e58758 - phase0 processRegistryUpdates 23.084 us/op 19.724 us/op 1.17
mainnet_e58758 - phase0 processSlashings 1.5060 us/op 811.00 ns/op 1.86
mainnet_e58758 - phase0 processEth1DataReset 1.7990 us/op 909.00 ns/op 1.98
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 2.4221 ms/op 2.0669 ms/op 1.17
mainnet_e58758 - phase0 processSlashingsReset 10.567 us/op 5.3130 us/op 1.99
mainnet_e58758 - phase0 processRandaoMixesReset 15.914 us/op 6.4260 us/op 2.48
mainnet_e58758 - phase0 processHistoricalRootsUpdate 2.1250 us/op 999.00 ns/op 2.13
mainnet_e58758 - phase0 processParticipationRecordUpdates 9.8510 us/op 5.5850 us/op 1.76
mainnet_e58758 - phase0 afterProcessEpoch 180.36 ms/op 159.84 ms/op 1.13
phase0 processEffectiveBalanceUpdates - 250000 normalcase 3.1999 ms/op 2.6657 ms/op 1.20
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 3.5942 ms/op 3.2656 ms/op 1.10
altair processInactivityUpdates - 250000 normalcase 41.107 ms/op 44.281 ms/op 0.93
altair processInactivityUpdates - 250000 worstcase 53.782 ms/op 43.273 ms/op 1.24
phase0 processRegistryUpdates - 250000 normalcase 18.237 us/op 11.149 us/op 1.64
phase0 processRegistryUpdates - 250000 badcase_full_deposits 558.32 us/op 438.19 us/op 1.27
phase0 processRegistryUpdates - 250000 worstcase 0.5 247.14 ms/op 210.84 ms/op 1.17
altair processRewardsAndPenalties - 250000 normalcase 130.20 ms/op 127.86 ms/op 1.02
altair processRewardsAndPenalties - 250000 worstcase 134.93 ms/op 118.20 ms/op 1.14
phase0 getAttestationDeltas - 250000 normalcase 12.559 ms/op 12.646 ms/op 0.99
phase0 getAttestationDeltas - 250000 worstcase 14.250 ms/op 12.303 ms/op 1.16
phase0 processSlashings - 250000 worstcase 6.2513 ms/op 5.6047 ms/op 1.12
altair processSyncCommitteeUpdates - 250000 303.03 ms/op 270.90 ms/op 1.12
BeaconState.hashTreeRoot - No change 493.00 ns/op 445.00 ns/op 1.11
BeaconState.hashTreeRoot - 1 full validator 72.308 us/op 61.248 us/op 1.18
BeaconState.hashTreeRoot - 32 full validator 636.24 us/op 622.98 us/op 1.02
BeaconState.hashTreeRoot - 512 full validator 7.1412 ms/op 6.5700 ms/op 1.09
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 92.130 us/op 78.823 us/op 1.17
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.3948 ms/op 1.1949 ms/op 1.17
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 17.780 ms/op 15.477 ms/op 1.15
BeaconState.hashTreeRoot - 1 balances 63.248 us/op 66.508 us/op 0.95
BeaconState.hashTreeRoot - 32 balances 713.39 us/op 559.07 us/op 1.28
BeaconState.hashTreeRoot - 512 balances 6.0281 ms/op 5.6182 ms/op 1.07
BeaconState.hashTreeRoot - 250000 balances 102.55 ms/op 83.443 ms/op 1.23
aggregationBits - 2048 els - zipIndexesInBitList 33.067 us/op 28.756 us/op 1.15
regular array get 100000 times 76.690 us/op 67.351 us/op 1.14
wrappedArray get 100000 times 74.027 us/op 67.326 us/op 1.10
arrayWithProxy get 100000 times 30.764 ms/op 27.779 ms/op 1.11
ssz.Root.equals 1.1720 us/op 1.0790 us/op 1.09
byteArrayEquals 1.2160 us/op 1.1040 us/op 1.10
shuffle list - 16384 els 12.342 ms/op 12.419 ms/op 0.99
shuffle list - 250000 els 181.91 ms/op 165.81 ms/op 1.10
processSlot - 1 slots 13.805 us/op 11.817 us/op 1.17
processSlot - 32 slots 1.8749 ms/op 1.6742 ms/op 1.12
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 374.75 us/op 332.15 us/op 1.13
getCommitteeAssignments - req 1 vs - 250000 vc 6.5021 ms/op 5.6365 ms/op 1.15
getCommitteeAssignments - req 100 vs - 250000 vc 8.4860 ms/op 7.6112 ms/op 1.11
getCommitteeAssignments - req 1000 vs - 250000 vc 9.2941 ms/op 8.0877 ms/op 1.15
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 10.720 ns/op 9.3300 ns/op 1.15
state getBlockRootAtSlot - 250000 vs - 7PWei 1.3392 us/op 1.1678 us/op 1.15
computeProposers - vc 250000 17.420 ms/op 15.892 ms/op 1.10
computeEpochShuffling - vc 250000 210.98 ms/op 169.80 ms/op 1.24
getNextSyncCommittee - vc 250000 298.89 ms/op 263.70 ms/op 1.13

by benchmarkbot/action

@dapplion
Copy link
Contributor

dapplion commented Jan 10, 2023

This API is very strange, there must be another way such that routes do not have to expose the status code

  publishBlock(block: allForks.SignedBeaconBlock): Promise<HttpStatusCode>;

@nazarhussain nazarhussain marked this pull request as draft January 13, 2023 08:57
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.

the approach generally looks good to me.
looking for more discussion about the ErrorAsResponse feature


/**
* REST HTTP client for lightclient routes
*/
export function getClient(_config: IChainForkConfig, httpClient: IHttpClient): Api {
export function getClient<ErrorAsResponse extends boolean = false>(
Copy link
Member

Choose a reason for hiding this comment

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

Can you document the behavior of ErrorAsResponse somewhere?

Seems that depending on the option passed, you can make errors either throw or return.

Do we need both behaviors? Might be simpler to pick a convention (ie always return) and stick with it.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@wemeetagain My preference is to use always return case. But to avoid backward compatibility, I made it optional for now. If we all agree to one approach we can stick to it.

@nazarhussain nazarhussain changed the title Node health API client is not compliance with the spec API client implementation does not fully compliance with the specs Jan 17, 2023
@nazarhussain nazarhussain marked this pull request as ready for review January 18, 2023 11:44
@@ -11,8 +11,10 @@ Typescript REST client for the [Ethereum Consensus API spec](https://github.com/

## Usage

We use more typesafe approach for the API client, where all the errors are returned not thrown. This approach is more easy to document and better to handle all possible error cases.
Copy link
Member

Choose a reason for hiding this comment

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

Maybe also reference the similarity to the Response type.

// For `getState()` generate request serializer
const fetchOptsSerializers = getFetchOptsSerializers<Api, ReqTypes>(routesData, reqSerializers);

return {
...client,

// TODO: Debug the type issue
Copy link
Member

Choose a reason for hiding this comment

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

Can you also think about how we would be able to incorporate this? ethereum/beacon-APIs#250

Copy link
Contributor Author

Choose a reason for hiding this comment

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

We already have support for SZZ encoding for few endpoints, similarly we can support for others when required.

https://github.com/ethereum/beacon-APIs/blob/6669d981486b7034fc9911fdf7be157343b6ea5e/apis/debug/state.v2.yaml#L40-L42

Copy link
Member

@wemeetagain wemeetagain Jan 19, 2023

Choose a reason for hiding this comment

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

This beacon-apis PR is about systematically supporting SSZ for all endpoints, not just supporting one-by-one.

Edit: I'm not suggesting to tackle this in this PR, just more an FYI of possible improvement that will be desired.

* Hypertext Transfer Protocol (HTTP) response status codes.
* @see {@link https://www.rfc-editor.org/rfc/rfc7231#section-6}
*/
export enum HttpStatusCode {
Copy link
Contributor

Choose a reason for hiding this comment

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

Who is using all these protocols? What's the point of declaring this?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

To create types for the API which is completely matching the specification.

Copy link
Contributor

Choose a reason for hiding this comment

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

I mean just declare the codes actually used, not every single code out there

Copy link
Contributor

@dapplion dapplion left a comment

Choose a reason for hiding this comment

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

Please note this will introduce a breaking change where we don't want to just have to bump the version of the monorepo to 2.0.0 for this.

@wemeetagain
Copy link
Member

wemeetagain commented Jan 19, 2023

Please note this will introduce a breaking change where we don't want to just have to bump the version of the monorepo to 2.0.0 for this.

Do we need to change the monorepo to 2.0 for this?
We've been doing breaking changes (eg: to the types) and not cutting a major release.

We should consider:

  • either just not calling this a breaking release
  • or doing independent versioning so we can do a breaking release of only this single package
  • or just being ok doing a monorepo-wide breaking release.

@nazarhussain
Copy link
Contributor Author

@dapplion @wemeetagain I think we consider from a product mindset. This is not a breaking change for the Lodestar users. Where as it concerns for @lodestar/api as library, either we should be ok with such changes or have an independant versions for those reusable libraries.

@wemeetagain wemeetagain changed the title API client implementation does not fully compliance with the specs Update API response object Jan 19, 2023
@wemeetagain wemeetagain merged commit 460ba59 into unstable Jan 20, 2023
@wemeetagain wemeetagain deleted the nh/4993-node-health branch January 20, 2023 15:26
@dapplion dapplion mentioned this pull request Mar 8, 2023
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.

API client implementation does not fully compliance with the specs
3 participants