Search in sources :

Example 1 with VoteData

use of com.radixdlt.hotstuff.VoteData in project radixdlt by radixdlt.

the class VerifiedVertexStoreStateCreationTest method creating_vertex_store_with_root_not_committed_should_fail.

@Test
public void creating_vertex_store_with_root_not_committed_should_fail() {
    BFTHeader genesisHeader = new BFTHeader(View.of(0), genesisHash, mock(LedgerHeader.class));
    VoteData voteData = new VoteData(genesisHeader, genesisHeader, null);
    QuorumCertificate badRootQC = new QuorumCertificate(voteData, new TimestampedECDSASignatures());
    assertThatThrownBy(() -> VerifiedVertexStoreState.create(HighQC.from(badRootQC), genesisVertex, Optional.empty(), hasher)).isInstanceOf(IllegalStateException.class);
}
Also used : TimestampedECDSASignatures(com.radixdlt.hotstuff.TimestampedECDSASignatures) BFTHeader(com.radixdlt.hotstuff.BFTHeader) LedgerHeader(com.radixdlt.hotstuff.LedgerHeader) QuorumCertificate(com.radixdlt.hotstuff.QuorumCertificate) VoteData(com.radixdlt.hotstuff.VoteData) Test(org.junit.Test)

Example 2 with VoteData

use of com.radixdlt.hotstuff.VoteData in project radixdlt by radixdlt.

the class VerifiedVertexStoreStateCreationTest method creating_vertex_store_with_committed_qc_not_matching_vertex_should_fail.

@Test
public void creating_vertex_store_with_committed_qc_not_matching_vertex_should_fail() {
    BFTHeader genesisHeader = new BFTHeader(View.of(0), genesisHash, mock(LedgerHeader.class));
    BFTHeader otherHeader = new BFTHeader(View.of(0), HashUtils.random256(), mock(LedgerHeader.class));
    VoteData voteData = new VoteData(genesisHeader, genesisHeader, otherHeader);
    QuorumCertificate badRootQC = new QuorumCertificate(voteData, new TimestampedECDSASignatures());
    assertThatThrownBy(() -> VerifiedVertexStoreState.create(HighQC.from(badRootQC), genesisVertex, Optional.empty(), hasher)).isInstanceOf(IllegalStateException.class);
}
Also used : TimestampedECDSASignatures(com.radixdlt.hotstuff.TimestampedECDSASignatures) BFTHeader(com.radixdlt.hotstuff.BFTHeader) LedgerHeader(com.radixdlt.hotstuff.LedgerHeader) QuorumCertificate(com.radixdlt.hotstuff.QuorumCertificate) VoteData(com.radixdlt.hotstuff.VoteData) Test(org.junit.Test)

Example 3 with VoteData

use of com.radixdlt.hotstuff.VoteData in project radixdlt by radixdlt.

the class SafetyRules method createVote.

public Vote createVote(VerifiedVertex proposedVertex, BFTHeader proposedHeader, long timestamp, HighQC highQC) {
    final VoteData voteData = constructVoteData(proposedVertex, proposedHeader);
    final var voteHash = Vote.getHashOfData(hasher, voteData, timestamp);
    // TODO make signing more robust by including author in signed hash
    final ECDSASignature signature = this.signer.sign(voteHash);
    return new Vote(this.self, voteData, timestamp, signature, highQC, Optional.empty());
}
Also used : Vote(com.radixdlt.hotstuff.Vote) ECDSASignature(com.radixdlt.crypto.ECDSASignature) VoteData(com.radixdlt.hotstuff.VoteData)

Example 4 with VoteData

use of com.radixdlt.hotstuff.VoteData in project radixdlt by radixdlt.

the class SafetyRules method constructVoteData.

private static VoteData constructVoteData(VerifiedVertex proposedVertex, BFTHeader proposedHeader) {
    final BFTHeader parent = proposedVertex.getParentHeader();
    // Add a vertex to commit if creating a quorum for the proposed vertex would
    // create three consecutive qcs.
    final BFTHeader toCommit;
    if (proposedVertex.touchesGenesis() || !proposedVertex.hasDirectParent() || !proposedVertex.parentHasDirectParent()) {
        toCommit = null;
    } else {
        toCommit = proposedVertex.getGrandParentHeader();
    }
    return new VoteData(proposedHeader, parent, toCommit);
}
Also used : BFTHeader(com.radixdlt.hotstuff.BFTHeader) VoteData(com.radixdlt.hotstuff.VoteData)

Example 5 with VoteData

use of com.radixdlt.hotstuff.VoteData in project radixdlt by radixdlt.

the class UnverifiedVertexSerializeTest method get.

private static UnverifiedVertex get() {
    View view = View.of(1234567891L);
    LedgerHeader ledgerHeader = LedgerHeaderMock.get();
    BFTHeader header = new BFTHeader(view, HashUtils.random256(), ledgerHeader);
    BFTHeader parent = new BFTHeader(View.of(1234567890L), HashUtils.random256(), ledgerHeader);
    VoteData voteData = new VoteData(header, parent, null);
    QuorumCertificate qc = new QuorumCertificate(voteData, new TimestampedECDSASignatures());
    var txn = Txn.create(new byte[] { 0, 1, 2, 3 });
    return UnverifiedVertex.create(qc, view, List.of(txn), BFTNode.random());
}
Also used : TimestampedECDSASignatures(com.radixdlt.hotstuff.TimestampedECDSASignatures) LedgerHeader(com.radixdlt.hotstuff.LedgerHeader) BFTHeader(com.radixdlt.hotstuff.BFTHeader) QuorumCertificate(com.radixdlt.hotstuff.QuorumCertificate) View(com.radixdlt.hotstuff.bft.View) VoteData(com.radixdlt.hotstuff.VoteData)

Aggregations

VoteData (com.radixdlt.hotstuff.VoteData)12 BFTHeader (com.radixdlt.hotstuff.BFTHeader)10 QuorumCertificate (com.radixdlt.hotstuff.QuorumCertificate)9 TimestampedECDSASignatures (com.radixdlt.hotstuff.TimestampedECDSASignatures)9 LedgerHeader (com.radixdlt.hotstuff.LedgerHeader)7 View (com.radixdlt.hotstuff.bft.View)4 HashCode (com.google.common.hash.HashCode)3 Test (org.junit.Test)3 Vote (com.radixdlt.hotstuff.Vote)2 BFTNode (com.radixdlt.hotstuff.bft.BFTNode)2 ECDSASignature (com.radixdlt.crypto.ECDSASignature)1 EventDispatcher (com.radixdlt.environment.EventDispatcher)1 HighQC (com.radixdlt.hotstuff.HighQC)1 Ledger (com.radixdlt.hotstuff.Ledger)1 Proposal (com.radixdlt.hotstuff.Proposal)1 UnverifiedVertex (com.radixdlt.hotstuff.UnverifiedVertex)1 VerifiedVertex (com.radixdlt.hotstuff.bft.VerifiedVertex)1 AccumulatorState (com.radixdlt.ledger.AccumulatorState)1 AtomicReference (java.util.concurrent.atomic.AtomicReference)1 Before (org.junit.Before)1