Beispiel #1
0
        public static void Ize(out UInt256 root, SignedBeaconBlockHeader container)
        {
            Merkleizer merkleizer = new Merkleizer(1);

            merkleizer.Feed(container.Message);
            merkleizer.Feed(container.Signature);
            merkleizer.CalculateRoot(out root);
        }
Beispiel #2
0
 public ProposerSlashing(
     ValidatorIndex proposerIndex,
     SignedBeaconBlockHeader signedHeader1,
     SignedBeaconBlockHeader signedHeader2)
 {
     ProposerIndex = proposerIndex;
     SignedHeader1 = signedHeader1;
     SignedHeader2 = signedHeader2;
 }
        public static void Encode(Span <byte> span, SignedBeaconBlockHeader container)
        {
            if (span.Length != SignedBeaconBlockHeaderLength)
            {
                ThrowTargetLength <SignedBeaconBlockHeader>(span.Length, SignedBeaconBlockHeaderLength);
            }
            int offset = 0;

            Encode(span, container, ref offset);
        }
        public static ProposerSlashing DecodeProposerSlashing(ReadOnlySpan <byte> span)
        {
            if (span.Length != Ssz.ProposerSlashingLength)
            {
                ThrowSourceLength <ProposerSlashing>(span.Length, Ssz.ProposerSlashingLength);
            }
            int                     offset        = 0;
            ValidatorIndex          proposerIndex = DecodeValidatorIndex(span, ref offset);
            SignedBeaconBlockHeader signedHeader1 = DecodeSignedBeaconBlockHeader(span, ref offset);
            SignedBeaconBlockHeader signedHeader2 = DecodeSignedBeaconBlockHeader(span, ref offset);
            ProposerSlashing        container     = new ProposerSlashing(proposerIndex, signedHeader1, signedHeader2);

            return(container);
        }
Beispiel #5
0
        public static ProposerSlashing GetValidProposerSlashing(IServiceProvider testServiceProvider, BeaconState state, bool signed1, bool signed2)
        {
            var timeParameters      = testServiceProvider.GetService <IOptions <TimeParameters> >().Value;
            var beaconStateAccessor = testServiceProvider.GetService <BeaconStateAccessor>();

            var currentEpoch   = beaconStateAccessor.GetCurrentEpoch(state);
            var validatorIndex = beaconStateAccessor.GetActiveValidatorIndices(state, currentEpoch).Last();
            var validator      = state.Validators[(int)(ulong)validatorIndex];
            var privateKey     = TestKeys.PublicKeyToPrivateKey(validator.PublicKey, timeParameters);
            var slot           = state.Slot;

            var header1 = new BeaconBlockHeader(
                slot,
                new Root(Enumerable.Repeat((byte)0x33, 32).ToArray()),
                new Root(Enumerable.Repeat((byte)0x44, 32).ToArray()),
                new Root(Enumerable.Repeat((byte)0x45, 32).ToArray())
                );

            var header2 = new BeaconBlockHeader(
                slot,
                new Root(Enumerable.Repeat((byte)0x99, 32).ToArray()),
                new Root(Enumerable.Repeat((byte)0x44, 32).ToArray()),
                new Root(Enumerable.Repeat((byte)0x45, 32).ToArray())
                );

            SignedBeaconBlockHeader signedHeader1 = new SignedBeaconBlockHeader(header1, BlsSignature.Zero);

            if (signed1)
            {
                signedHeader1 = TestBlockHeader.SignBlockHeader(testServiceProvider, state, header1, privateKey);
            }

            SignedBeaconBlockHeader signedHeader2 = new SignedBeaconBlockHeader(header2, BlsSignature.Zero);

            if (signed2)
            {
                signedHeader2 = TestBlockHeader.SignBlockHeader(testServiceProvider, state, header2, privateKey);
            }

            var proposerSlashing = new ProposerSlashing(validatorIndex, signedHeader1, signedHeader2);

            return(proposerSlashing);
        }
 private static void Encode(Span <byte> span, SignedBeaconBlockHeader container, ref int offset)
 {
     Encode(span, container.Message, ref offset);
     Encode(span, container.Signature, ref offset);
 }
        private static IEnumerable <SszElement> GetValues(SignedBeaconBlockHeader item)
        {
            yield return(item.Message.ToSszContainer());

            yield return(item.Signature.ToSszBasicVector());
        }
 public static SszContainer ToSszContainer(this SignedBeaconBlockHeader item)
 {
     return(new SszContainer(GetValues(item)));
 }
        public static Root HashTreeRoot(this SignedBeaconBlockHeader item)
        {
            var tree = new SszTree(new SszContainer(GetValues(item)));

            return(new Root(tree.HashTreeRoot()));
        }