Skip to content
Open
Changes from 13 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
219 changes: 219 additions & 0 deletions MD/md-n/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,219 @@
# MD-116: Dongmen (Postconfirmations) Standards

- **Description**: Provides a set of liveness and correctness requirements for Postconfirmations protocols.
- **Authors**: [Liam Monninger](mailto:liam@movementlabs.xyz)
- **Approval**:
- **Etymology**: These standards were originally drafted in the Dongmen neighborhood of Taipei.

## Overview

As identified in [MD-3](https://github.com/movementlabsxyz/MIP/tree/main/MD/md-3), [MD-4](https://github.com/movementlabsxyz/MIP/tree/main/MD/md-4), [MD-5](https://github.com/movementlabsxyz/MIP/tree/main/MD/md-5), [MIP-34](https://github.com/movementlabsxyz/MIP/pulls?page=2&q=is%3Apr+is%3Aopen), and [MIP-37](https://github.com/movementlabsxyz/MIP/pull/37), naive interpretations--such as MCR--of the Postconfirmations protocol fall short of modern BFT expectations.

We summarize the shortcomings relevant to these standards as follows:

1. **Asynchronicity**: per [FLP](https://groups.csail.mit.edu/tds/papers/Lynch/jacm85.pdf), asynchronous voting protocols cannot achieve consensus in the presence of one or more faulty processes. Thus, Asynchronous Postconfirmations protocols, i.e., those not defining a Global Stabilization Times, are **not in fact BFT consensus protocols.** MCR, for example--if implemented with a single vote per slot and without any bound on when the slot moves to a new committee--may remain in permanent disagreement.
2. **Liveness**: failure to come to consensus presents a liveness shortcoming. Permanent disagreement means that the network will never progress to the next accepted state. Further, we assert indefinite disagreement is unnecessary in the context of Postconfirmations.

@apenzk apenzk Apr 4, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it MUST be explained how disagreements could occur with only honest participants (this seemed to be your core argument). if nodes can arrive at a wrong state but think they are honest, this requires they are accounted for in the byzantine set even in pbft

Consider what it would mean in pBFT protocol if honest nodes change their opinion

  1. N_A = f+1 of honest nodes N = 2f+1 calculate S_A and vote for it.
  2. N_B = f of honest nodes vote for S_B
  3. N_C = f dishonest nodes vote for S_B.

S2 has more votes. Now permit that honest nodes can change their opinion.

  1. One node of N_A changes to S_B. Supermajority Sup_B reached.

  2. Two nodes of N_C change to S_A. Supermajority Sup_A reached.

  3. C partitions the network: forward Sup_B to half of network, submit Sup_A to other part. Safety is violated.

PBFT is not safe under the error you assume. I.e. the nodes that vote for the wrong fork MUST be accounted for in the malicious node set.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if you indeed acknowledge this in MD-116 plz refer to the specific section.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if nodes can arrive at a wrong state but think they are honest, this requires they are accounted for in the byzantine set even in pbft

This is the not the what the quoted text is referring to. It's more briefly stating that...

  1. An asynchronous protocol is not a (reliable) consensus protocol. It will sometimes show agreement, but one fault ruins it. That's FLP.
  2. Because we are trying to design a consensus protocol, this unreliability actually means unliveness. Or, a non-consensus protocol is an unlive consensus protocol.


For more detailed information on these properties, see [BFT Synchronicity and Liveness](#a1-bft-synchronicity-and-liveness).

In response to these shortcomings, we request a protocol which is **fully-synchronous**, **fork-transferable**, **fork-perfect**, and **minority-aware**. The last three of these terms are introduced and defined in this MD.

Because the Dongmen Postconfirmations Standards request a **fully-synchronous** protocol, we assert said protocol can no longer be traditionally-BFT. That is, non-supermajority forks may exist under these standards. For a traditional BFT standard, see the [Ximen Postconfirmations Standards]().

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Throughout the document the "forking even" (fork) is mixed without distinction with a "branch created from a fork event" (also fork). This makes several descriptions and definitions hard to understand as one has to guess which one of the two you mean. I would define the difference of "branch" and the "fork" itself at the beginning of the document and then follow through with it

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So, we should propose a glossary universally because I am used to using "fork" to refer to everything, i.e., the fork-point, the tip of the fork branch, and the entire branch. Insofar as your notion of branch includes all of the vertices along the way, this is also everything.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

used to using "fork" to refer to everything

I think we can just stick to typical mathematical descriptions

https://mathworld.wolfram.com/Branch.html
https://mathworld.wolfram.com/Fork.html
https://mathworld.wolfram.com/TreeLeaf.html

Insofar as your notion of branch includes all of the vertices along the way, this is also everything

a branch does not include the entire fork set. So it is rather different. A fork event is the set of disagreeing states. Each of these events creates a branch. E.g. a fork event is the set of competing states s_1, ..., s_n for the same height h. Whereas a branch b_1 is s_1 and all its children. So a branch is a subset of the tree created from a fork. Specifically the set of b_1, .., b_n created at height h creates what we can describe as the branch (sub) tree. Its rather straight forward when considering a tree in nature


## Definitions

- **Fully-synchronous**: Describes a synchronous model. A network and protocol assumption in which message transmission and processing are guaranteed to complete within known, fixed bounds. Messages destined to be handled within a certain bound may arrive outside of these bounds, however, they are then ignored. A protocol that assumes this model must commit or reject decisions by a deterministically computable time.

- **Global Stabilization Time (GST)**: The unknown point in time after which a partially synchronous network behaves synchronously. This term is critical in distinguishing traditional BFT protocols from fully-synchronous ones, which assume GST has already occurred or is always satisfied.

- **Fork-transferable**: A property of a consensus protocol that allows consumers to transfer application state from a forked chain of consensus rounds while preserving verifiability and auditability, even in the presence of honest partitions or temporary disagreement.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what is an honest partition? this should be defined. the partition is either due to faults or due to byzantine. whether it is honest does not seem to matter here.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm introducing this term to describe behavior that is honest w.r.t. to some subset of participants in the original network. An "honest partition," is what would create a long-lived fork.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this needs to be defined in text. only mentioning it is not an introduction


- **Fork-perfect**: A refinement of PBFT’s intersection safety. A fork is fork-perfect if every round of consensus along the fork intersects with at least one unit of honest voting power *relative to the fork*. This ensures local safety guarantees on a per-fork basis, even in the presence of multiple non-merging branches.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A fork is fork-perfect if every round of consensus along the fork intersects with at least one unit of honest voting power relative to the fork.

This sentence is not clear. what do you mean with "along the fork". In your description a fork seems a particular event (which makes sense), so do you mean "after the fork"? Or do you mean "along a branch".

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can use fork or branch. The "fork-point" is IMO the more common term to refer to the actual place in the tree that contains more than one child.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll refer to wolfram for the difference between fork and branch. I do acknowledge that software development has lost its way with the terminology of branch and fork :) . But here we are more concerned with the mathematical behavior and hence should stick to the mathematical definitions.

https://mathworld.wolfram.com/Fork.html
https://mathworld.wolfram.com/Branch.html


- **Perfect Expert**: A theoretical construct (adapted from [expert learning models](https://people.csail.mit.edu/ronitt/COURSE/S16/notes7.pdf)) which assumes the existence of a strategy (or sequence of decisions) that would have been globally optimal or correct. In consensus, identifying this expert is analogous to identifying a perfect fork. Fork-perfectness aims to localize this ideal to a given fork in the presence of asynchrony or faults.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

link broken.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In consensus, identifying this expert is analogous to identifying a perfect fork.<

why?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is just redundant and confusing to be honest. If you know the expert, then you know the values of the "perfect fork." But, that statement kind distracts what is actually important in this setting, i.e., the ability to produce that perfectness via PBFT.


- **Minority-aware**: A protocol property requiring formal understanding and bounded valuation of consensus decisions made by a Byzantine minority. This property mandates a clear risk model quantifying the probability and cost of such decisions under full synchrony when liveness demands finality at fixed times.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

define Byzantine minority

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If $n = \frac{|V|}{3}$ where $V$ is the set of participants, the Byzantine minority $V_b$ is some set of nodes s.t. $|V_b| &lt; n$.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks but i meant in text.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unclear what you are trying to say with that first sentence.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Which first sentence. There's an appendix describing this in detail.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

link to the appendix missing


## Desiderata

### D1: Fully-synchronous

**User journey**: Consumers of Dongmen Postconfirmations consensus can rely on agreement to be achieved by a know Global Stabilization Time w.r.t. to the confirming ledger.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. I think this requirement is too strong. PCP is currently implemented such that it does not require that consensus is reached within certain times. Indeed the synchronization can be moved forward by any 1/N but this synchronization event (the rollover) is not determined by a clock, but rather by a trigger of rollover.

Infact the exact same thing can be done in MCR, where any party can trigger the rollover.

  1. synchronous protocols do not rely on GST, instead messages are delivered within fixed times Delta.

@l-monninger l-monninger Apr 4, 2025

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a matter of agreeing on a definition. But, for me fully-synchronous still has GST, it is the fixed time you describe. That is, partially-synchronous makes guarantees about $GST + \Delta$ where $GST$ is not known. Fully-synchronous assumes that $GST = t$ where $t$ is some known point in time and then there is some $\Delta$.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this requirement is too strong. PCP is currently implemented such that it does not require that consensus is reached within certain times.

That is deferred to Ximen...

Because the Dongmen Postconfirmations Standards request a fully-synchronous protocol, we assert said protocol can no longer be traditionally-BFT. That is, non-supermajority forks may exist under these standards. For a traditional BFT standard, see the Ximen Postconfirmations Standards.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The definition of GST is specific to partial synchronous. It is not related to synchronous model. this is not a matter of personal definition but what is the definition in academia.

when you say there is a known bound for synchronization you mean Delta. But this is not the global stabilization time. In fact since we know Delta , GST = 0, see

In other words, GST is a point in time after which all network messages are delivered with a delay of at most Δ

in https://blog.trailofbits.com/2021/11/11/motivating-global-stabilization/

Further literature
https://decentralizedthoughts.github.io/2019-06-01-2019-5-31-models/
or the original paper
https://groups.csail.mit.edu/tds/papers/Lynch/jacm88.pdf


**Justification**: A fully-synchronous protocol is a consensus protocol under FLP. It also renders predictable points in time by which consensus will be achieved, offering qualitatively optimal liveness.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i dont understand why it says "under FLP". FLP is specifically for asynchronous protocols and thus it is not related to synchronous protocols, no?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FLP alludes to the possibility of consensus of synchronous protocols by its comments on the impossibility of asynchronous consensus. Some parts of the PBFT paper or another Lamport paper might be better here.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i agree, the correct term is probably "under BFT assumptions"


### D2: Fork-transferable

**User journey**: Consumers of Dongmen Postconfirmations consensus can safely transfer state from the ledger by following a set of standards.

**Justification**: The transfer of value from a BFT system to other systems is critical in the modern DLT landscape. How to do this safely is critical to both application and general ledger usage.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should define this more cleary. It is not clear what you want to achieve with this. Maybe an example would help.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AH, yeah, I was going to provide an example with long-lived forks. I forgot to add the appendix.


### D3: Fork-perfect

**User journey**: Consumers of Dongmen Postconfirmations consensus can rely on consensus to identify the assumed perfect expert w.r.t. a given fork.

**Justification**: We assert the perfectness of PBFT argued for in [PBFT and Perfectness](#a2-pbft-and-perfectness) is an essentially quality of modern BFT networks.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
**Justification**: We assert the perfectness of PBFT argued for in [PBFT and Perfectness](#a2-pbft-and-perfectness) is an essentially quality of modern BFT networks.
**Justification**: We assert the perfectness of PBFT argued for in [PBFT and Perfectness](#a2-pbft-and-perfectness) is an essential quality of modern BFT networks.


### D4: Minority-aware

**User journey**: Consumers of Dongmen Postconfirmations consensus can rely on a formalized understanding of the expected value of Byzantine consensus attack w.r.t. the value of the state and intrinsic rewards. This may additionally consider [fork-transferrable](#d2-fork-transferable) stipulations.

**Justification**: We assert that the [**full-synchronicity**](#d1-fully-synchronous) of Dongmen Protocols complicates BFT assumptions. These complications must be well understood for a given protocol.

## Appendix

### A1: BFT Synchronicity and Liveness

| Model | Network Delays Known? | Bounded? | Known Bound? |
|------------------|------------------------|----------|----------------|
| Synchronous | Yes | Yes | Yes |
| Asynchronous | No | No | No |
| Partially Synchronous | No | Yes, after GST | No |


| Feature | Asynchronous | Partially Synchronous | Fully Synchronous |
|-----------------------|---------------------|-------------------------|--------------------------|
| **Message delay** | Unbounded forever | Unbounded until GST | Bounded always |
| **Knowledge of bounds** | None | Exist post-GST (unknown) | Known and fixed |
| **Liveness possible?** | No | Yes, eventually | Yes, by bounds |

| Feature | Fully Synchronous | Partially Synchronous |
|-------------------------------|-----------------------------------|----------------------------------------|
| **Timing Assumption** | Fixed known bounds | Unknown bounds before GST |
| **Liveness Guarantee** | Always (if bounds hold) | Only eventually (after GST) |
| **Safety Guarantee** | Depends on strict timing, traditional Byzantine assumption violated | Holds even under asynchrony |
| **Fault Tolerance** | Assumptions must be modified to allow a non-supermajority fork to exist, hence not traditionally BFT | Designed to tolerate Byzantine faults |
| **Performance** | High under tight control | Adaptive but may have delays |

### A2: PBFT and Perfectness

[PBFT](https://pmg.csail.mit.edu/papers/osdi99.pdf) introduced a protocol which ensures consecutive rounds of consensus intersect in at least one unit of honest voting power via the Generalized Pigeon Hole Principle. The transitivity of this property ensures that a chain of consensus rounds must intersect in at least one unit of honest voting power.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

consecutive rounds of consensus intersect in at least one unit of honest voting power

given what assumptions?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Under Byzantine assumptions. This is one of the core results of the PBFT paper.


Under an [experts model](https://people.csail.mit.edu/ghaffari/AA19/AAscript.pdf?utm_source=chatgpt.com) understanding of PBFT systems, we can make an assumption that there is a perfect expert and thus that this perfect expert is identified by consensus. This, in turn, renders PBFT a lossless approximate algorithm.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

define lossless approximate algorithm

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's supposed to be a bit of an oxymoron. The interesting property of PBFT if you make the perfect expert assumption is that you will always find a chain of rounds containing that perfect expert--so you have no loss to your experts model.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is all quite interesting, but hard to access. i suggest to explain this a bit more in text


If we consider allowing forks, however, it is initially unclear how perfectness translates. Naively, our assumption that there is globally one perfect expert means that there is one **perfect** fork.

We can, however, apply a reduced criterion and state that a each **fork** be comprised of a chain of consensus rounds each of which intersect in one unit of honest voting power w.r.t. to the fork itself. We call this **fork-perfectness**.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
We can, however, apply a reduced criterion and state that a each **fork** be comprised of a chain of consensus rounds each of which intersect in one unit of honest voting power w.r.t. to the fork itself. We call this **fork-perfectness**.
We can, however, apply a reduced criterion and state that each **fork** be comprised of a chain of consensus rounds each of which intersect in one unit of honest voting power w.r.t. to the fork itself. We call this **fork-perfectness**.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also not clear. can you

  • provide an example or explain in the text. For example why is this not in conflict with PBFT, which supports only one honest fork
  • why can we apply such reduced criterion

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This to say if traced any fork back to its root, we would always find its messages are those of at least one perfect expert. We can apply such a reduced criterion because we are not PBFT--we are saying we admit forks but we still want each of these forks to have that core "perfectness" that PBFT provides.


Preserving **fork-perfectness** reduces to ensuring the fraction of stake which decided the original fork maintains a supermajority. If this does not occur, then it is impossible to have the guaranteed intersection.

### A3: Awareness of Minority Decisions

The requirement of **full-synchronicity** means that if a supermajority decision is not made by Global Stabilization Time, some form of minority decision must effectively be made. This does not inherently mean that a Byzantine fraction of voting power may decide the global state. For example, if long-lived forks are preserved, there are multiple global states and eventual supermajority consistency can be achieved via a reconstitution of supermajority stake on an honest fork. In other words, while a **partially-synchronous** system renders eventual liveness and guaranteed safety, a **full-synchronous** system can render guaranteed liveness and eventual safety.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fully-synchronous should not describe a partial synchronous model if i am correct. GST is unknown in Partial sync model. What we have here is a synchronous model, as we set a bound Delta and then make some minority decision. Note that Delta =/= GST - this is the major differenct between synchronous and partial sync

@l-monninger l-monninger Apr 4, 2025

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think it actually says this in "Consensus in the Presence of Partial Synchrony", so if you want to remove the notion of GST from our definition of fully-synchronous models, I think we should propose it as a glossary term.

For me, it's nice to refer to $GST = t$ and fully-synchronous protocols still have a $GST + \Delta$ in the because it reminds me that the stabilization of fully-synchronous networks is simply enforced or assumed by coordination on a global clock--not any kind of actual state of the network.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will argue that per definition of GST, the GST = 0 . see my response in one of the previous comments. This is not my definition but rather a result of after GST there is a fixed bound Delta within which stuff is resolved. In synchronous there is just Delta.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there are multiple global states and eventual supermajority consistency can be achieved via a reconstitution of supermajority stake on an honest fork

this process is unclear and should be exemplified.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll add another appendix.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For example, if long-lived forks are preserved, there are multiple global states and eventual supermajority consistency can be achieved via a reconstitution of supermajority stake on an honest fork.

You are just describing a system that favors liveness over safety. in the system you describe there is never any finality. Which makes any quasi-synchronous decission void. you may as well not take a decission at point Delta.


Regardless, Dongmen Postconfirmation protocols are required to provide a formal model of the expected value of consensus on a Byzantine minority w.r.t. the value of the state and intrinsic rewards. In other words, they must explain the nature of eventual safety that abides by Byzantine assumptions or else describe the non-BFT nature of the protocol at full-synchronous decision points.

### A4: Example Minority-Aware Protocol
Consider the following fully-synchronous protocol:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it is not clear how the voting would work. i take it that within a given duration $d$ you can only vote once for a given height? You should explicitly state such requirements.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left this as sketch because the important thing for the MD is not the algorithm, but the way it outlines how Dongmen Protocols should describe their BFT qualities.


Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it is not clear until later what your height refers to. You should explicitly say that you mean slot height

1. Votes $v \in V_h$ are cast for states $s \in S_h$ at height $h \in H$.
2. A decision in made on a vote $s, h$ by time $t \in T$.
1. If $V_{h}(s) > \frac{2*|V|}{3}$, accept $s, h$

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
1. If $V_{h}(s) > \frac{2*|V|}{3}$, accept $s, h$
1. If $S_{h}(s) > \frac{2*|V_h|}{3}$, accept $(s, h)$, where $S_h(s)$ is the sum of votes for $s$ at height $h$.

2. Otherwise, begin **Play Foward** algorithm.

The **Play Forward** algorithm is as follows:

Given a duration $d: (t + d) \in T$, and a slot duration $l: (d/l) \in T$, for each slot $l'$ in the duration $t, t + l, ... t + d$ $h' = h + (l'/l)$.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are a few errors in that line

  • $l$ is not a slot duration but a resolution of the duration $d$, wheras $d/l$ seems the slot duration
  • the end of the sentence is not very readable, define h' not within the equation.
  • its confusing to define l' as duration, whereas you define l as a resolution factor. Use the same type of units (i.e. time) for them. indeed it doesnt seem necessary to define a resolution.
  • also something seems wrong about the end of the sentence
  • generally this sentence is hard to read, we are not only targeting math people

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Given a duration $d: (t + d) \in T$, and a slot duration $l: (d/l) \in T$, for each slot $l'$ in the duration $t, t + l, ... t + d$ $h' = h + (l'/l)$.
Assume durations $d$ , and a slot duration $l$, where $l<d$. Assume the protocol progresses in steps of slot duration $l$, i.e. the following time steps exist: $t, t+l , t+2l, .. , t+l' \in T$ , where $l` = \delta h \cdot l$ and $h' = h + \delta h$


If $l' > d$, accept the root $s, h$ of the heaviest remaining subtree by weight.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • more consistency. use (s,h) not s,h
  • you have not defined what means heaviest subtree, or how this results in a weighted tree ( i am aware how this would works, but it should be written explicitly)


Otherwise, for each tuple $(s, h') \in V_{h'}$

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • V_h is not set of tuples
  • the "otherwise ... 1)" should come before the above, as it is the primary check, no?


1. If $V_{h'}(s) > \frac{2*|V|}{3}$, accept $s, h$, i.e., the original commitment at the root of the subtree.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
1. If $V_{h'}(s) > \frac{2*|V|}{3}$, accept $s, h$, i.e., the original commitment at the root of the subtree.
1. If $V_{h'}(s) > \frac{2*|V|}{3}$, accept $(s, h)$, i.e., the original commitment at the root of the subtree.

2. If $V_{h'}(s) = \text{argmin} V_{h'}(s)$, remove all tuples $s, h \leq V_{h'}(s)$ and their descendants from the entire tree.

At any given round, the number of ways the Byzantine fraction $\frac{|V|}{3} - 1$ can be eliminated is $n' = (incomplete)$ out of the total number of combinations $n$.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • first time of mention of round. it is not defined
  • it is not N/3 -1 : the assumption is f/(3f+1), N = 3f+1 , therefore f = (N-1)/3


Thus, the probability of that the Byzantine fraction makes it to the final acceptance is $p =(incomplete)$.

All other subtrees are considered honest partitions. Accepting any of these is considered **perfect**.

Thus, our protocol now admits a $p$ probability of Byzantine attack. The expected value of Byzantine consensus attack is $p(Val(s) + Val(Rewards(h)))$.

This is **fully-synchronous** because a decision will be cast on $h$ by $t + d$.

### A6: Examples Minority-Selecting Protocols

Consider the following synchronous protocol:

Voters, where $N$ is the number of voters, cast their votes $v \in V_h$, for states $s \in S_h$ at slot height $h \in H$. The first recorded vote on height $h$ determines the timestamp $t_h$ of that slot. Let $\sigma_h(s_h)$ be the number of votes for state $s_h$ at slot height $h$. A voter can cast at most one vote per state per slot height.

Slots are handled sequentially, i.e. if slot height $h^+$ has not been processed, then slot height $h^++1$ is not processed.

The basic protocol looks as follows:

1. Vote and potential vote propagation (described in next subsections)
1. For each undecided height $h^+ < h$
1. If $\sigma_{h^+}(s_h^+) > \frac{2}{3}N$ AND $t \leq t_h^+ + \Delta$, accept the tuple $(s_h^+, h^+)$. Continue processing slot $h^++1$.
2. Else If $t > t_h^+ + \Delta$, select the branch with the highest weight. Continue processing slot $h^++1$.
3. Else Return

Note that 2.ii) is where the **synchronous nature** of the protocol is used.

> :warning: Since nodes could set the timestamp arbitrarily into the future for a given slot height, we MUST require that nodes cannot vote for heights that are too far away from accepted heights. This is important for the synchronous model.

We assume that the nodes can become faulty or byzantine, vote for a branch with state $s^x_h$ and may acknowledge they voted for the wrong branch.

We suggest that these nodes should be permitted to support a different branch (with state $s_h$) that they deem correct (and that is in conflict with their previous vote). In order to vote for $s_h$ they MUST be permitted to cast an additional vote (**revote**) for $s_h$ at height $h$.

Since a the choice for a new branch would mean that all previous votes are invalid (from the point of view of the voter itself), this raises the question of how to handle revotes, and in particular the ancestor votes that depend on this.

A combination of the following two properties can be used to achieve the desired protocol:

- Revoting
1. Revoting is not allowed. (Voter can cast one vote per slot height only)
1. Revoting is allowed.
- Counting of votes
1. Double counting, i.e., all votes count, including votes before revoting.
1. Only the last vote counts.
- Propagation of votes
1. Votes are cast for a branch, not a state. (less transactions but per transaction more computation)
1. Votes are cast for a state, not a branch. (more transactions but per transaction less computation)

Lets explore sone of the options:

#### A6.1: Revotes, double counting, no propagation

Step 1 of the above algorithm becomes

1. Given a vote for state $s_h$ at slot height $h$, update
$\sigma_h(s_h) \leftarrow \sigma_h(s_h) + 1$.

**What can go wrong?**

- If no branch is finalized at $t_h^+ + \Delta$, the protocol will select the branch with the highest weight, this may not be secure against a Byzantine minority.
- Since votes of a node can double count, it is possible that eventually the wrong branch wins, since a byzantine actor plus the initial wrong "honest" votes can outvote the correct branch.

#### A6.2: No Revotes, single-counting, with propagation

Here we would like to entertain that nodes can resubmit their vote for a different branch, but existing votes cannot be changed. We also would like to propagate votes a long a branch to ensure that this branch is maximally supported.

Step 1 of the above algorithm becomes

1. Given a vote for state $s_h$ at slot height $h$, update
1. $\sigma_h(s_h) \leftarrow \sigma_h(s_h) + 1$.
2. For each ancestor state $s_{h-k}$, $k>0$ of $s_h$ in the tree that is not yet voted on, $\sigma_{h-k}(s_{h-k}) \leftarrow \sigma_{h-k}(s_{h-k}) + 1$.

We note this is marginally different to the previous example. It differs only in that a voter can batch votes for a branch not a state. This is not a meaningful solution but it is the precursor to the next example.

**What can go wrong?**
1. Same problem as previous example.

#### A6.3: Revotes, single-counting, with propagation

Assume the previous protocol, but votes are removed from branches that are not supported any longer. This means we override previous votes.

Step 1 of the above algorithm becomes

1. Given a vote for state $s_h$ at slot height $h$, update
$\sigma_h(s_h) \leftarrow \sigma_h(s_h) + 1$.
2. For each ancestor state $s_{h-k}$ of $s_h$ in the tree that is not finalized and for which the vote has not already been cast, $\sigma_{h-k}(s_{h-k}) \leftarrow \sigma_{h-k}(s_{h-k}) + 1$.
3. For each height $h^+< h$, remove all votes for $s_{h^+}$ from a branch that is not an ancestor of $s_h$.

> :bulb: This has infact similar behavior and properties to [Tangle 2.0 Leaderless Nakamoto Consensus on the Heaviest DAG](https://ieeexplore.ieee.org/document/9907014). However, here we have a tree and an L1 to synchronize and remove problems with partitions, which makes the challenges much easier.

**What can go wrong?**

- If no branch is finalized at $t_h^+ + \Delta$, the protocol will select the branch with the highest weight, this may not be secure against a Byzantine minority.

## Changelog