use of com.radixdlt.hotstuff.BFTHeader in project radixdlt by radixdlt.
the class VoteDataSerializeTest method get.
private static VoteData get() {
View view = View.of(1234567890L);
LedgerHeader ledgerHeader = LedgerHeaderMock.get();
BFTHeader committed = new BFTHeader(view, HashUtils.random256(), ledgerHeader);
BFTHeader parent = new BFTHeader(view.next(), HashUtils.random256(), ledgerHeader);
BFTHeader proposed = new BFTHeader(view.next().next(), HashUtils.random256(), ledgerHeader);
return new VoteData(proposed, parent, committed);
}
use of com.radixdlt.hotstuff.BFTHeader in project radixdlt by radixdlt.
the class VoteSerializeTest method get.
private static Vote get() {
View view = View.of(1234567891L);
HashCode id = HashUtils.random256();
LedgerHeader ledgerHeader = LedgerHeaderMock.get();
BFTHeader header = new BFTHeader(view, id, ledgerHeader);
BFTHeader parent = new BFTHeader(View.of(1234567890L), HashUtils.random256(), ledgerHeader);
VoteData voteData = new VoteData(header, parent, null);
BFTNode author = BFTNode.create(ECKeyPair.generateNew().getPublicKey());
QuorumCertificate qc = new QuorumCertificate(voteData, new TimestampedECDSASignatures());
HighQC highQC = HighQC.from(qc, qc, Optional.empty());
return new Vote(author, voteData, 123456L, ECDSASignature.zeroSignature(), highQC, Optional.empty());
}
use of com.radixdlt.hotstuff.BFTHeader in project radixdlt by radixdlt.
the class ProposalSerializeTest method get.
private static Proposal get() {
View view = View.of(1234567891L);
HashCode id = HashUtils.random256();
LedgerHeader ledgerHeader = LedgerHeaderMock.get();
BFTHeader header = new BFTHeader(view, id, 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 });
// add a particle to ensure atom is valid and has at least one shard
BFTNode author = BFTNode.create(ECKeyPair.generateNew().getPublicKey());
UnverifiedVertex vertex = UnverifiedVertex.create(qc, view, List.of(txn), author);
return new Proposal(vertex, qc, ECDSASignature.zeroSignature(), Optional.empty());
}
use of com.radixdlt.hotstuff.BFTHeader in project radixdlt by radixdlt.
the class ConsensusModuleTest method createNextVertex.
private Pair<QuorumCertificate, VerifiedVertex> createNextVertex(QuorumCertificate parent, ECKeyPair proposerKeyPair, Txn txn) {
final var proposerBftNode = BFTNode.create(proposerKeyPair.getPublicKey());
var unverifiedVertex = UnverifiedVertex.create(parent, View.of(1), List.of(txn), proposerBftNode);
var hash = hasher.hash(unverifiedVertex);
var verifiedVertex = new VerifiedVertex(unverifiedVertex, hash);
var next = new BFTHeader(View.of(1), verifiedVertex.getId(), LedgerHeader.create(1, View.of(1), new AccumulatorState(1, HashUtils.zero256()), 1));
final var voteData = new VoteData(next, parent.getProposed(), parent.getParent());
final var timestamp = 1;
final var voteDataHash = Vote.getHashOfData(hasher, voteData, timestamp);
final var qcSignature = proposerKeyPair.sign(voteDataHash);
var unsyncedQC = new QuorumCertificate(voteData, new TimestampedECDSASignatures(Map.of(proposerBftNode, TimestampedECDSASignature.from(timestamp, qcSignature))));
return Pair.of(unsyncedQC, verifiedVertex);
}
use of com.radixdlt.hotstuff.BFTHeader in project radixdlt by radixdlt.
the class VertexStoreTest method setUp.
@Before
public void setUp() {
// No type check issues with mocking generic here
Ledger ssc = mock(Ledger.class);
this.ledger = ssc;
// TODO: replace mock with the real thing
doAnswer(invocation -> {
VerifiedVertex verifiedVertex = invocation.getArgument(1);
return Optional.of(new PreparedVertex(verifiedVertex, MOCKED_HEADER, ImmutableList.of(), ImmutableMap.of(), 1L));
}).when(ledger).prepare(any(), any());
this.bftUpdateSender = rmock(EventDispatcher.class);
this.rebuildUpdateEventDispatcher = rmock(EventDispatcher.class);
this.bftHighQCUpdateEventDispatcher = rmock(EventDispatcher.class);
this.committedSender = rmock(EventDispatcher.class);
this.genesisHash = HashUtils.zero256();
this.genesisVertex = new VerifiedVertex(UnverifiedVertex.createGenesis(MOCKED_HEADER), genesisHash);
this.rootQC = QuorumCertificate.ofGenesis(genesisVertex, MOCKED_HEADER);
this.sut = VertexStore.create(VerifiedVertexStoreState.create(HighQC.from(rootQC), genesisVertex, Optional.empty(), hasher), ledger, hasher, bftUpdateSender, rebuildUpdateEventDispatcher, bftHighQCUpdateEventDispatcher, committedSender);
AtomicReference<BFTHeader> lastParentHeader = new AtomicReference<>(new BFTHeader(View.genesis(), genesisHash, MOCKED_HEADER));
AtomicReference<BFTHeader> lastGrandParentHeader = new AtomicReference<>(new BFTHeader(View.genesis(), genesisHash, MOCKED_HEADER));
AtomicReference<BFTHeader> lastGreatGrandParentHeader = new AtomicReference<>(new BFTHeader(View.genesis(), genesisHash, MOCKED_HEADER));
this.nextSkippableVertex = (skipOne) -> {
BFTHeader parentHeader = lastParentHeader.get();
BFTHeader grandParentHeader = lastGrandParentHeader.get();
BFTHeader greatGrandParentHeader = lastGreatGrandParentHeader.get();
final QuorumCertificate qc;
if (!parentHeader.getView().equals(View.genesis())) {
VoteData data = new VoteData(parentHeader, grandParentHeader, skipOne ? null : greatGrandParentHeader);
qc = new QuorumCertificate(data, new TimestampedECDSASignatures());
} else {
qc = rootQC;
}
View view = parentHeader.getView().next();
if (skipOne) {
view = view.next();
}
var rawVertex = UnverifiedVertex.create(qc, view, List.of(Txn.create(new byte[0])), BFTNode.random());
HashCode hash = hasher.hash(rawVertex);
VerifiedVertex vertex = new VerifiedVertex(rawVertex, hash);
lastParentHeader.set(new BFTHeader(view, hash, MOCKED_HEADER));
lastGrandParentHeader.set(parentHeader);
lastGreatGrandParentHeader.set(grandParentHeader);
return vertex;
};
this.nextVertex = () -> nextSkippableVertex.apply(false);
}
Aggregations