public static void AddAttestationsToState(IServiceProvider testServiceProvider, BeaconState state, IEnumerable <Attestation> attestations, Slot slot) { var beaconStateTransition = testServiceProvider.GetService <BeaconStateTransition>(); var block = TestBlock.BuildEmptyBlockForNextSlot(testServiceProvider, state, false); block.SetSlot(slot); foreach (var attestation in attestations) { block.Body.AddAttestations(attestation); } beaconStateTransition.ProcessSlots(state, block.Slot); TestBlock.SignBlock(testServiceProvider, state, block, ValidatorIndex.None); beaconStateTransition.StateTransition(state, block, validateStateRoot: false); }
/// <summary> /// State transition via the provided ``block`` /// then package the block with the state root and signature. /// </summary> public static void StateTransitionAndSignBlock(IServiceProvider testServiceProvider, BeaconState state, BeaconBlock block) { MiscellaneousParameters miscellaneousParameters = testServiceProvider.GetService <IOptions <MiscellaneousParameters> >().Value; TimeParameters timeParameters = testServiceProvider.GetService <IOptions <TimeParameters> >().Value; StateListLengths stateListLengths = testServiceProvider.GetService <IOptions <StateListLengths> >().Value; MaxOperationsPerBlock maxOperationsPerBlock = testServiceProvider.GetService <IOptions <MaxOperationsPerBlock> >().Value; BeaconStateTransition beaconStateTransition = testServiceProvider.GetService <BeaconStateTransition>(); beaconStateTransition.StateTransition(state, block, validateStateRoot: false); Hash32 stateRoot = state.HashTreeRoot(miscellaneousParameters, timeParameters, stateListLengths, maxOperationsPerBlock); block.SetStateRoot(stateRoot); TestBlock.SignBlock(testServiceProvider, state, block, ValidatorIndex.None); }