aboutsummaryrefslogtreecommitdiff
path: root/include/hotstuff
diff options
context:
space:
mode:
Diffstat (limited to 'include/hotstuff')
-rw-r--r--include/hotstuff/consensus.h3
-rw-r--r--include/hotstuff/liveness.h18
2 files changed, 14 insertions, 7 deletions
diff --git a/include/hotstuff/consensus.h b/include/hotstuff/consensus.h
index d27f8c5..65ffff2 100644
--- a/include/hotstuff/consensus.h
+++ b/include/hotstuff/consensus.h
@@ -139,7 +139,8 @@ class HotStuffCore {
promise_t async_bqc_update();
/* Other useful functions */
- block_t get_genesis() { return b0; }
+ const block_t &get_genesis() { return b0; }
+ const block_t &get_bqc() { return bqc; }
const ReplicaConfig &get_config() { return config; }
ReplicaID get_id() const { return id; }
const std::set<block_t, BlockHeightCmp> get_tails() const { return tails; }
diff --git a/include/hotstuff/liveness.h b/include/hotstuff/liveness.h
index 6396fe3..59306ab 100644
--- a/include/hotstuff/liveness.h
+++ b/include/hotstuff/liveness.h
@@ -46,13 +46,14 @@ class PMAllParents: public virtual PaceMaker {
void reg_bqc_update() {
hsc->async_bqc_update().then([this](const block_t &bqc) {
+ const auto &pref = bqc->get_qc_ref();
for (const auto &blk: hsc->get_tails())
{
block_t b;
for (b = blk;
- b->get_height() > bqc->get_height();
+ b->get_height() > pref->get_height();
b = b->get_parents()[0]);
- if (b == bqc && blk->get_height() > bqc_tail->get_height())
+ if (b == pref && blk->get_height() > bqc_tail->get_height())
bqc_tail = blk;
}
reg_bqc_update();
@@ -61,16 +62,21 @@ class PMAllParents: public virtual PaceMaker {
void reg_proposal() {
hsc->async_wait_proposal().then([this](const Proposal &prop) {
- if (prop.blk->get_parents()[0] == bqc_tail)
- bqc_tail = prop.blk;
+ bqc_tail = prop.blk;
reg_proposal();
});
}
void reg_receive_proposal() {
hsc->async_wait_receive_proposal().then([this](const Proposal &prop) {
- if (prop.blk->get_parents()[0] == bqc_tail)
- bqc_tail = prop.blk;
+ const auto &pref = hsc->get_bqc()->get_qc_ref();
+ const auto &blk = prop.blk;
+ block_t b;
+ for (b = blk;
+ b->get_height() > pref->get_height();
+ b = b->get_parents()[0]);
+ if (b == pref && blk->get_height() > bqc_tail->get_height())
+ bqc_tail = blk;
reg_receive_proposal();
});
}