public void Beacon_block_body_there_and_back() { Eth1Data eth1Data = new Eth1Data( Sha256.RootOfAnEmptyString, 1, Sha256.Bytes32OfAnEmptyString); Deposit zeroDeposit = new Deposit(Enumerable.Repeat(Bytes32.Zero, Ssz.DepositContractTreeDepth + 1), DepositData.Zero); BeaconBlockBody container = new BeaconBlockBody( TestSig1, eth1Data, new Bytes32(new byte[32]), Enumerable.Repeat(ProposerSlashing.Zero, 2).ToArray(), Enumerable.Repeat(AttesterSlashing.Zero, 3).ToArray(), Enumerable.Repeat(Attestation.Zero, 4).ToArray(), Enumerable.Repeat(zeroDeposit, 5).ToArray(), Enumerable.Repeat(SignedVoluntaryExit.Zero, 6).ToArray() ); Span <byte> encoded = new byte[Ssz.BeaconBlockBodyLength(container)]; Ssz.Encode(encoded, container); BeaconBlockBody decoded = Ssz.DecodeBeaconBlockBody(encoded); AssertBeaconBlockBodyEqual(container, decoded); Merkle.Ize(out UInt256 root, container); }
public void Beacon_block_body_there_and_back() { Eth1Data eth1Data = new Eth1Data( Sha256.OfAnEmptyString, 1, Sha256.OfAnEmptyString); BeaconBlockBody container = new BeaconBlockBody( SszTest.TestSig1, eth1Data, new Bytes32(new byte[32]), new ProposerSlashing[2], new AttesterSlashing[3], new Attestation[4], new Deposit[5], new VoluntaryExit[6] ); Span <byte> encoded = new byte[Ssz.BeaconBlockBodyLength(container)]; Ssz.Encode(encoded, container); BeaconBlockBody decoded = Ssz.DecodeBeaconBlockBody(encoded); AssertBeaconBlockBodyEqual(container, decoded); Merkle.Ize(out UInt256 root, container); }
public void EmptyBeaconBlockBodyEncode() { // Arrange Eth1Data eth1Data = new Eth1Data( new Root(Enumerable.Repeat((byte)0x12, 32).ToArray()), 64, new Bytes32(Enumerable.Repeat((byte)0x34, 32).ToArray())); BeaconBlockBody beaconBlockBody = new BeaconBlockBody( new BlsSignature(Enumerable.Repeat((byte)0x56, 96).ToArray()), eth1Data, new Bytes32(Enumerable.Repeat((byte)0x78, 32).ToArray()), new ProposerSlashing[0], new AttesterSlashing [0], new Attestation[0], new Deposit[0], new SignedVoluntaryExit[0] ); // Act Span <byte> encoded = new byte[Ssz.BeaconBlockBodyLength(beaconBlockBody)]; Ssz.Encode(encoded, beaconBlockBody); // Assert string expectedHex = // static "565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656" + "1212121212121212121212121212121212121212121212121212121212121212" + "4000000000000000" + "3434343434343434343434343434343434343434343434343434343434343434" + "7878787878787878787878787878787878787878787878787878787878787878" + "dc000000" + // proposer dynamic offset 96+(32+8+32)+32 + 5*4 = 220 = 0xdc "dc000000" + // attester slashings & all remaining offsets are the same, as they are empty "dc000000" + "dc000000" + "dc000000"; // dynamic part is empty encoded.ToHexString().ShouldBe(expectedHex); }
public SszBeaconBlockBodyBenchmark() { AttestationData data = new AttestationData( new Slot(1), new CommitteeIndex(4), Sha256.RootOfAnEmptyString, new Checkpoint(new Epoch(2), Sha256.RootOfAnEmptyString), new Checkpoint(new Epoch(3), Sha256.RootOfAnEmptyString)); Attestation attestation = new Attestation( new BitArray(new byte[5]), data, TestSig1 ); DepositData depositData = new DepositData( TestKey1, Sha256.Bytes32OfAnEmptyString, new Gwei(7), TestSig1); Deposit deposit = new Deposit( new Bytes32[Ssz.DepositContractTreeDepth + 1], depositData); IndexedAttestation indexedAttestation1 = new IndexedAttestation( new ValidatorIndex[8], data, TestSig1); IndexedAttestation indexedAttestation2 = new IndexedAttestation( new ValidatorIndex[8], data, TestSig1); AttesterSlashing slashing = new AttesterSlashing(indexedAttestation1, indexedAttestation2); Eth1Data eth1Data = new Eth1Data( Sha256.RootOfAnEmptyString, 9, Sha256.Bytes32OfAnEmptyString); Attestation[] attestations = new Attestation[3]; attestations[1] = attestation; Deposit[] deposits = new Deposit[3]; deposits[2] = deposit; Bytes32 graffiti = new Bytes32(new byte[32]); AttesterSlashing[] attesterSlashings = new AttesterSlashing[3]; attesterSlashings[0] = slashing; ProposerSlashing[] proposerSlashings = new ProposerSlashing[10]; BlsSignature randaoReveal = TestSig1; SignedVoluntaryExit[] signedVoluntaryExits = new SignedVoluntaryExit[11]; _body = new BeaconBlockBody(randaoReveal, eth1Data, graffiti, proposerSlashings, attesterSlashings, attestations, deposits, signedVoluntaryExits); _encoded = new byte[Ssz.BeaconBlockBodyLength(_body)]; }
public void Beacon_block_body_more_detailed() { AttestationData data = new AttestationData( new Slot(1), new CommitteeIndex(4), Sha256.RootOfAnEmptyString, new Checkpoint(new Epoch(2), Sha256.RootOfAnEmptyString), new Checkpoint(new Epoch(3), Sha256.RootOfAnEmptyString)); Attestation attestation = new Attestation( new BitArray(new byte[5]), data, TestSig1); DepositData depositData = new DepositData( TestKey1, Sha256.Bytes32OfAnEmptyString, new Gwei(7), TestSig1); Deposit deposit = new Deposit(Enumerable.Repeat(Bytes32.Zero, Ssz.DepositContractTreeDepth + 1), depositData); IndexedAttestation indexedAttestation1 = new IndexedAttestation( new ValidatorIndex[8], data, TestSig1); IndexedAttestation indexedAttestation2 = new IndexedAttestation( new ValidatorIndex[8], data, TestSig1); AttesterSlashing slashing = new AttesterSlashing(indexedAttestation1, indexedAttestation2); Eth1Data eth1Data = new Eth1Data( Sha256.RootOfAnEmptyString, 9, Sha256.Bytes32OfAnEmptyString); Attestation[] attestations = Enumerable.Repeat(Attestation.Zero, 3).ToArray(); attestations[1] = attestation; Deposit zeroDeposit = new Deposit(Enumerable.Repeat(Bytes32.Zero, Ssz.DepositContractTreeDepth + 1), DepositData.Zero); Deposit[] deposits = Enumerable.Repeat(zeroDeposit, 3).ToArray(); deposits[2] = deposit; Bytes32 graffiti = new Bytes32(new byte[32]); AttesterSlashing[] attesterSlashings = Enumerable.Repeat(AttesterSlashing.Zero, 3).ToArray(); attesterSlashings[0] = slashing; ProposerSlashing[] proposerSlashings = Enumerable.Repeat(ProposerSlashing.Zero, 10).ToArray(); SignedVoluntaryExit[] signedVoluntaryExits = Enumerable.Repeat(SignedVoluntaryExit.Zero, 11).ToArray(); BeaconBlockBody body = new BeaconBlockBody( TestSig1, eth1Data, graffiti, proposerSlashings, attesterSlashings, attestations, deposits, signedVoluntaryExits ); byte[] encoded = new byte[Ssz.BeaconBlockBodyLength(body)]; Ssz.Encode(encoded, body); }
public void Beacon_block_body_more_detailed() { AttestationData data = new AttestationData( new Slot(1), new CommitteeIndex(4), Sha256.OfAnEmptyString, new Checkpoint(new Epoch(2), Sha256.OfAnEmptyString), new Checkpoint(new Epoch(3), Sha256.OfAnEmptyString)); Attestation attestation = new Attestation( new BitArray(new byte[5]), data, SszTest.TestSig1); DepositData depositData = new DepositData( SszTest.TestKey1, Sha256.OfAnEmptyString, new Gwei(7), SszTest.TestSig1); Deposit deposit = new Deposit(new Hash32[Ssz.DepositContractTreeDepth + 1], depositData); IndexedAttestation indexedAttestation1 = new IndexedAttestation( new ValidatorIndex[8], data, SszTest.TestSig1); IndexedAttestation indexedAttestation2 = new IndexedAttestation( new ValidatorIndex[8], data, SszTest.TestSig1); AttesterSlashing slashing = new AttesterSlashing(indexedAttestation1, indexedAttestation2); Eth1Data eth1Data = new Eth1Data( Sha256.OfAnEmptyString, 9, Sha256.OfAnEmptyString); Attestation[] attestations = new Attestation[3]; attestations[1] = attestation; Deposit[] deposits = new Deposit[3]; deposits[2] = deposit; Bytes32 graffiti = new Bytes32(new byte[32]); AttesterSlashing[] attesterSlashings = new AttesterSlashing[3]; attesterSlashings[0] = slashing; ProposerSlashing[] proposerSlashings = new ProposerSlashing[10]; VoluntaryExit[] voluntaryExits = new VoluntaryExit[11]; BeaconBlockBody body = new BeaconBlockBody( SszTest.TestSig1, eth1Data, graffiti, proposerSlashings, attesterSlashings, attestations, deposits, voluntaryExits ); byte[] encoded = new byte[Ssz.BeaconBlockBodyLength(body)]; Ssz.Encode(encoded, body); }