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); }
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); }
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())); }