@lodestar/state-transition 1.41.0-dev.b847afb846 → 1.41.0-dev.b90dff673d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/block/externalData.js +4 -2
- package/lib/block/externalData.js.map +1 -1
- package/lib/block/index.d.ts +3 -3
- package/lib/block/index.js.map +1 -1
- package/lib/block/initiateValidatorExit.js.map +1 -1
- package/lib/block/isValidIndexedAttestation.js.map +1 -1
- package/lib/block/isValidIndexedPayloadAttestation.js.map +1 -1
- package/lib/block/processAttestationPhase0.js.map +1 -1
- package/lib/block/processAttestations.js.map +1 -1
- package/lib/block/processAttestationsAltair.js.map +1 -1
- package/lib/block/processAttesterSlashing.js.map +1 -1
- package/lib/block/processBlobKzgCommitments.js.map +1 -1
- package/lib/block/processBlockHeader.js.map +1 -1
- package/lib/block/processBlsToExecutionChange.js.map +1 -1
- package/lib/block/processConsolidationRequest.js.map +1 -1
- package/lib/block/processDeposit.js.map +1 -1
- package/lib/block/processDepositRequest.js.map +1 -1
- package/lib/block/processEth1Data.js.map +1 -1
- package/lib/block/processExecutionPayload.js.map +1 -1
- package/lib/block/processExecutionPayloadBid.d.ts +1 -1
- package/lib/block/processExecutionPayloadBid.js.map +1 -1
- package/lib/block/processExecutionPayloadEnvelope.d.ts +5 -2
- package/lib/block/processExecutionPayloadEnvelope.d.ts.map +1 -1
- package/lib/block/processExecutionPayloadEnvelope.js +20 -14
- package/lib/block/processExecutionPayloadEnvelope.js.map +1 -1
- package/lib/block/processOperations.js.map +1 -1
- package/lib/block/processPayloadAttestation.d.ts +1 -1
- package/lib/block/processPayloadAttestation.js.map +1 -1
- package/lib/block/processProposerSlashing.js.map +1 -1
- package/lib/block/processRandao.js.map +1 -1
- package/lib/block/processSyncCommittee.js.map +1 -1
- package/lib/block/processVoluntaryExit.js +2 -1
- package/lib/block/processVoluntaryExit.js.map +1 -1
- package/lib/block/processWithdrawalRequest.js.map +1 -1
- package/lib/block/processWithdrawals.js.map +1 -1
- package/lib/block/slashValidator.js.map +1 -1
- package/lib/block/types.js +2 -1
- package/lib/block/types.js.map +1 -1
- package/lib/cache/effectiveBalanceIncrements.js.map +1 -1
- package/lib/cache/epochCache.d.ts.map +1 -1
- package/lib/cache/epochCache.js +2 -1
- package/lib/cache/epochCache.js.map +1 -1
- package/lib/cache/epochTransitionCache.js.map +1 -1
- package/lib/cache/pubkeyCache.js.map +1 -1
- package/lib/cache/rewardCache.js.map +1 -1
- package/lib/cache/stateCache.js.map +1 -1
- package/lib/cache/syncCommitteeCache.js.map +1 -1
- package/lib/epoch/computeUnrealizedCheckpoints.js.map +1 -1
- package/lib/epoch/getAttestationDeltas.js.map +1 -1
- package/lib/epoch/getRewardsAndPenalties.js.map +1 -1
- package/lib/epoch/index.d.ts +1 -1
- package/lib/epoch/index.js +2 -1
- package/lib/epoch/index.js.map +1 -1
- package/lib/epoch/processBuilderPendingPayments.d.ts +1 -1
- package/lib/epoch/processBuilderPendingPayments.js.map +1 -1
- package/lib/epoch/processEffectiveBalanceUpdates.js.map +1 -1
- package/lib/epoch/processEth1DataReset.js.map +1 -1
- package/lib/epoch/processHistoricalRootsUpdate.js.map +1 -1
- package/lib/epoch/processHistoricalSummariesUpdate.js.map +1 -1
- package/lib/epoch/processInactivityUpdates.js.map +1 -1
- package/lib/epoch/processJustificationAndFinalization.js.map +1 -1
- package/lib/epoch/processParticipationFlagUpdates.js.map +1 -1
- package/lib/epoch/processParticipationRecordUpdates.js.map +1 -1
- package/lib/epoch/processPendingAttestations.js.map +1 -1
- package/lib/epoch/processPendingConsolidations.js.map +1 -1
- package/lib/epoch/processPendingDeposits.js.map +1 -1
- package/lib/epoch/processProposerLookahead.js.map +1 -1
- package/lib/epoch/processRandaoMixesReset.js.map +1 -1
- package/lib/epoch/processRegistryUpdates.js.map +1 -1
- package/lib/epoch/processRewardsAndPenalties.js.map +1 -1
- package/lib/epoch/processSlashings.js.map +1 -1
- package/lib/epoch/processSlashingsReset.js.map +1 -1
- package/lib/epoch/processSyncCommitteeUpdates.js.map +1 -1
- package/lib/lightClient/proofs.js.map +1 -1
- package/lib/metrics.d.ts.map +1 -1
- package/lib/metrics.js.map +1 -1
- package/lib/rewards/attestationsRewards.js.map +1 -1
- package/lib/rewards/blockRewards.js.map +1 -1
- package/lib/rewards/syncCommitteeRewards.js.map +1 -1
- package/lib/signatureSets/attesterSlashings.js.map +1 -1
- package/lib/signatureSets/blsToExecutionChange.js.map +1 -1
- package/lib/signatureSets/executionPayloadBid.js.map +1 -1
- package/lib/signatureSets/executionPayloadEnvelope.js.map +1 -1
- package/lib/signatureSets/index.js.map +1 -1
- package/lib/signatureSets/indexedAttestation.js.map +1 -1
- package/lib/signatureSets/indexedPayloadAttestation.js.map +1 -1
- package/lib/signatureSets/proposer.js.map +1 -1
- package/lib/signatureSets/proposerSlashings.js.map +1 -1
- package/lib/signatureSets/randao.js.map +1 -1
- package/lib/signatureSets/voluntaryExits.js.map +1 -1
- package/lib/slot/index.js.map +1 -1
- package/lib/slot/upgradeStateToAltair.js.map +1 -1
- package/lib/slot/upgradeStateToBellatrix.js.map +1 -1
- package/lib/slot/upgradeStateToCapella.js.map +1 -1
- package/lib/slot/upgradeStateToDeneb.js.map +1 -1
- package/lib/slot/upgradeStateToElectra.js.map +1 -1
- package/lib/slot/upgradeStateToFulu.js.map +1 -1
- package/lib/slot/upgradeStateToGloas.js.map +1 -1
- package/lib/stateTransition.js +4 -2
- package/lib/stateTransition.js.map +1 -1
- package/lib/stateView/beaconStateView.d.ts +18 -2
- package/lib/stateView/beaconStateView.d.ts.map +1 -1
- package/lib/stateView/beaconStateView.js +60 -3
- package/lib/stateView/beaconStateView.js.map +1 -1
- package/lib/stateView/interface.d.ts +19 -2
- package/lib/stateView/interface.d.ts.map +1 -1
- package/lib/testUtils/cache.d.ts +2 -0
- package/lib/testUtils/cache.d.ts.map +1 -0
- package/lib/testUtils/cache.js +7 -0
- package/lib/testUtils/cache.js.map +1 -0
- package/lib/testUtils/index.d.ts +6 -0
- package/lib/testUtils/index.d.ts.map +1 -0
- package/lib/testUtils/index.js +6 -0
- package/lib/testUtils/index.js.map +1 -0
- package/lib/testUtils/infura.d.ts +3 -0
- package/lib/testUtils/infura.d.ts.map +1 -0
- package/lib/testUtils/infura.js +8 -0
- package/lib/testUtils/infura.js.map +1 -0
- package/lib/testUtils/interop.d.ts +2 -0
- package/lib/testUtils/interop.d.ts.map +1 -0
- package/lib/testUtils/interop.js +24 -0
- package/lib/testUtils/interop.js.map +1 -0
- package/lib/testUtils/params.d.ts +18 -0
- package/lib/testUtils/params.d.ts.map +1 -0
- package/lib/testUtils/params.js +20 -0
- package/lib/testUtils/params.js.map +1 -0
- package/lib/testUtils/state.d.ts +20 -0
- package/lib/testUtils/state.d.ts.map +1 -0
- package/lib/testUtils/state.js +78 -0
- package/lib/testUtils/state.js.map +1 -0
- package/lib/testUtils/testFileCache.d.ts +17 -0
- package/lib/testUtils/testFileCache.d.ts.map +1 -0
- package/lib/testUtils/testFileCache.js +96 -0
- package/lib/testUtils/testFileCache.js.map +1 -0
- package/lib/testUtils/util.d.ts +50 -0
- package/lib/testUtils/util.d.ts.map +1 -0
- package/lib/testUtils/util.js +329 -0
- package/lib/testUtils/util.js.map +1 -0
- package/lib/util/aggregator.js.map +1 -1
- package/lib/util/altair.js.map +1 -1
- package/lib/util/array.js.map +1 -1
- package/lib/util/attestation.js.map +1 -1
- package/lib/util/attesterStatus.js.map +1 -1
- package/lib/util/balance.js.map +1 -1
- package/lib/util/blindedBlock.js.map +1 -1
- package/lib/util/blockRoot.js.map +1 -1
- package/lib/util/capella.js.map +1 -1
- package/lib/util/computeAnchorCheckpoint.js.map +1 -1
- package/lib/util/deposit.js.map +1 -1
- package/lib/util/domain.js.map +1 -1
- package/lib/util/electra.js.map +1 -1
- package/lib/util/epoch.js.map +1 -1
- package/lib/util/epochShuffling.js.map +1 -1
- package/lib/util/execution.js.map +1 -1
- package/lib/util/finality.js.map +1 -1
- package/lib/util/fulu.js.map +1 -1
- package/lib/util/genesis.js.map +1 -1
- package/lib/util/gloas.js.map +1 -1
- package/lib/util/interop.js.map +1 -1
- package/lib/util/loadState/findModifiedInactivityScores.js.map +1 -1
- package/lib/util/loadState/findModifiedValidators.js.map +1 -1
- package/lib/util/loadState/loadState.js.map +1 -1
- package/lib/util/loadState/loadValidator.js.map +1 -1
- package/lib/util/rootCache.d.ts.map +1 -1
- package/lib/util/rootCache.js.map +1 -1
- package/lib/util/seed.d.ts +0 -8
- package/lib/util/seed.d.ts.map +1 -1
- package/lib/util/seed.js +0 -64
- package/lib/util/seed.js.map +1 -1
- package/lib/util/shuffling.js +2 -1
- package/lib/util/shuffling.js.map +1 -1
- package/lib/util/signatureSets.js +2 -1
- package/lib/util/signatureSets.js.map +1 -1
- package/lib/util/signingRoot.js.map +1 -1
- package/lib/util/slot.js.map +1 -1
- package/lib/util/sszBytes.js.map +1 -1
- package/lib/util/syncCommittee.js.map +1 -1
- package/lib/util/targetUnslashedBalance.js.map +1 -1
- package/lib/util/validator.js.map +1 -1
- package/lib/util/weakSubjectivity.js.map +1 -1
- package/package.json +14 -9
- package/src/block/index.ts +3 -3
- package/src/block/isValidIndexedPayloadAttestation.ts +2 -2
- package/src/block/processAttestationsAltair.ts +1 -1
- package/src/block/processExecutionPayloadBid.ts +4 -4
- package/src/block/processExecutionPayloadEnvelope.ts +35 -21
- package/src/block/processOperations.ts +1 -1
- package/src/block/processPayloadAttestation.ts +2 -2
- package/src/block/processWithdrawals.ts +1 -1
- package/src/epoch/index.ts +1 -1
- package/src/epoch/processBuilderPendingPayments.ts +2 -2
- package/src/stateView/beaconStateView.ts +72 -7
- package/src/stateView/interface.ts +19 -2
- package/src/testUtils/cache.ts +8 -0
- package/src/testUtils/index.ts +5 -0
- package/src/testUtils/infura.ts +10 -0
- package/src/testUtils/interop.ts +29 -0
- package/src/testUtils/params.ts +23 -0
- package/src/testUtils/state.ts +110 -0
- package/src/testUtils/testFileCache.ts +127 -0
- package/src/testUtils/util.ts +429 -0
- package/src/util/seed.ts +0 -71
package/src/util/seed.ts
CHANGED
|
@@ -417,8 +417,6 @@ export function naiveComputePayloadTimelinessCommitteeIndices(
|
|
|
417
417
|
* https://link.springer.com/content/pdf/10.1007%2F978-3-642-32009-5_1.pdf
|
|
418
418
|
*
|
|
419
419
|
* See the 'generalized domain' algorithm on page 3.
|
|
420
|
-
* This is the naive implementation just to make sure lodestar follows the spec, this is not for production.
|
|
421
|
-
* The optimized version is in `getComputeShuffledIndexFn`.
|
|
422
420
|
*/
|
|
423
421
|
export function computeShuffledIndex(index: number, indexCount: number, seed: Bytes32): number {
|
|
424
422
|
let permuted = index;
|
|
@@ -439,75 +437,6 @@ export function computeShuffledIndex(index: number, indexCount: number, seed: By
|
|
|
439
437
|
return permuted;
|
|
440
438
|
}
|
|
441
439
|
|
|
442
|
-
type ComputeShuffledIndexFn = (index: number) => number;
|
|
443
|
-
|
|
444
|
-
/**
|
|
445
|
-
* An optimized version of `computeShuffledIndex`, this is for production.
|
|
446
|
-
*/
|
|
447
|
-
export function getComputeShuffledIndexFn(indexCount: number, seed: Bytes32): ComputeShuffledIndexFn {
|
|
448
|
-
// there are possibly SHUFFLE_ROUND_COUNT (90 for mainnet) values for this cache
|
|
449
|
-
// this cache will always hit after the 1st call
|
|
450
|
-
const pivotByIndex: Map<number, number> = new Map();
|
|
451
|
-
// given 2M active validators, there are 2 M / 256 = 8k possible positionDiv
|
|
452
|
-
// it means there are at most 8k different sources for each round
|
|
453
|
-
const sourceByPositionDivByIndex: Map<number, Map<number, Uint8Array>> = new Map();
|
|
454
|
-
// 32 bytes seed + 1 byte i
|
|
455
|
-
const pivotBuffer = Buffer.alloc(32 + 1);
|
|
456
|
-
pivotBuffer.set(seed, 0);
|
|
457
|
-
// 32 bytes seed + 1 byte i + 4 bytes positionDiv
|
|
458
|
-
const sourceBuffer = Buffer.alloc(32 + 1 + 4);
|
|
459
|
-
sourceBuffer.set(seed, 0);
|
|
460
|
-
|
|
461
|
-
return (index): number => {
|
|
462
|
-
assert.lt(index, indexCount, "indexCount must be less than index");
|
|
463
|
-
assert.lte(indexCount, 2 ** 40, "indexCount too big");
|
|
464
|
-
let permuted = index;
|
|
465
|
-
// const _seed = seed;
|
|
466
|
-
for (let i = 0; i < SHUFFLE_ROUND_COUNT; i++) {
|
|
467
|
-
// optimized version of the below naive code
|
|
468
|
-
// const pivot = Number(
|
|
469
|
-
// bytesToBigInt(digest(Buffer.concat([_seed, intToBytes(i, 1)])).slice(0, 8)) % BigInt(indexCount)
|
|
470
|
-
// );
|
|
471
|
-
|
|
472
|
-
let pivot = pivotByIndex.get(i);
|
|
473
|
-
if (pivot == null) {
|
|
474
|
-
// naive version always creates a new buffer, we can reuse the buffer
|
|
475
|
-
// pivot = Number(
|
|
476
|
-
// bytesToBigInt(digest(Buffer.concat([_seed, intToBytes(i, 1)])).slice(0, 8)) % BigInt(indexCount)
|
|
477
|
-
// );
|
|
478
|
-
pivotBuffer[32] = i % 256;
|
|
479
|
-
pivot = Number(bytesToBigInt(digest(pivotBuffer).subarray(0, 8)) % BigInt(indexCount));
|
|
480
|
-
pivotByIndex.set(i, pivot);
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
const flip = (pivot + indexCount - permuted) % indexCount;
|
|
484
|
-
const position = Math.max(permuted, flip);
|
|
485
|
-
|
|
486
|
-
// optimized version of the below naive code
|
|
487
|
-
// const source = digest(Buffer.concat([_seed, intToBytes(i, 1), intToBytes(Math.floor(position / 256), 4)]));
|
|
488
|
-
let sourceByPositionDiv = sourceByPositionDivByIndex.get(i);
|
|
489
|
-
if (sourceByPositionDiv == null) {
|
|
490
|
-
sourceByPositionDiv = new Map<number, Uint8Array>();
|
|
491
|
-
sourceByPositionDivByIndex.set(i, sourceByPositionDiv);
|
|
492
|
-
}
|
|
493
|
-
const positionDiv256 = Math.floor(position / 256);
|
|
494
|
-
let source = sourceByPositionDiv.get(positionDiv256);
|
|
495
|
-
if (source == null) {
|
|
496
|
-
// naive version always creates a new buffer, we can reuse the buffer
|
|
497
|
-
// don't want to go through intToBytes() to avoid BigInt
|
|
498
|
-
sourceBuffer[32] = i % 256;
|
|
499
|
-
sourceBuffer.writeUint32LE(positionDiv256, 33);
|
|
500
|
-
source = digest(sourceBuffer);
|
|
501
|
-
sourceByPositionDiv.set(positionDiv256, source);
|
|
502
|
-
}
|
|
503
|
-
const byte = source[Math.floor((position % 256) / 8)];
|
|
504
|
-
const bit = (byte >> (position % 8)) % 2;
|
|
505
|
-
permuted = bit ? flip : permuted;
|
|
506
|
-
}
|
|
507
|
-
return permuted;
|
|
508
|
-
};
|
|
509
|
-
}
|
|
510
|
-
|
|
511
440
|
/**
|
|
512
441
|
* Return the randao mix at a recent [[epoch]].
|
|
513
442
|
*/
|