示例#1
0
        public static void SignBlockHeader(IServiceProvider testServiceProvider, BeaconState state, BeaconBlockHeader header, byte[] privateKey)
        {
            var signatureDomains    = testServiceProvider.GetService <IOptions <SignatureDomains> >().Value;
            var beaconStateAccessor = testServiceProvider.GetService <BeaconStateAccessor>();

            var domain      = beaconStateAccessor.GetDomain(state, signatureDomains.BeaconProposer, Epoch.None);
            var signingRoot = header.SigningRoot();
            var signature   = TestSecurity.BlsSign(signingRoot, privateKey, domain);

            header.SetSignature(signature);
        }
示例#2
0
        public static BeaconBlock BuildEmptyBlock(IServiceProvider testServiceProvider, BeaconState state, Slot slot, bool signed)
        {
            //if (slot) is none

            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;
            ICryptographyService    cryptographyService     = testServiceProvider.GetService <ICryptographyService>();

            Eth1Data eth1Data = new Eth1Data(state.Eth1DepositIndex, Hash32.Zero);

            BeaconBlockHeader previousBlockHeader = BeaconBlockHeader.Clone(state.LatestBlockHeader);

            if (previousBlockHeader.StateRoot == Hash32.Zero)
            {
                Hash32 stateRoot = cryptographyService.HashTreeRoot(state);
                previousBlockHeader.SetStateRoot(stateRoot);
            }
            Hash32 previousBlockSigningRoot = previousBlockHeader.SigningRoot();

            BeaconBlock emptyBlock = new BeaconBlock(slot,
                                                     previousBlockSigningRoot,
                                                     Hash32.Zero,
                                                     new BeaconBlockBody(
                                                         BlsSignature.Empty,
                                                         eth1Data,
                                                         new Bytes32(),
                                                         Array.Empty <ProposerSlashing>(),
                                                         Array.Empty <AttesterSlashing>(),
                                                         Array.Empty <Attestation>(),
                                                         Array.Empty <Deposit>(),
                                                         Array.Empty <VoluntaryExit>()
                                                         ),
                                                     BlsSignature.Empty);

            if (signed)
            {
                SignBlock(testServiceProvider, state, emptyBlock, ValidatorIndex.None);
            }

            return(emptyBlock);
        }
 public Hash32 SigningRoot(BeaconBlockHeader beaconBlockHeader)
 {
     return beaconBlockHeader.SigningRoot();
 }