Repository navigation
Add an overview - #51
yuval-block wants to merge 1 commit into
Conversation
arminsabouri
left a comment
There was a problem hiding this comment.
This walks a thin line between describing the solutions and the techincal "how" (as well as what the problems). My comments are mostly regarding continuitity / flow of ideas.
|
|
||
| ### Communication models | ||
|
|
||
| There are three communication models traditionally described in distributed systems: asynchrony, partial synchrony and synchrony. Each model demands a different approach to fault tolerance. |
There was a problem hiding this comment.
nit: We either need a leading sentence that connects this section with the one before or just remove it or condense it into 2 sentences into the last section. e.g the interactive tx construction protocols may operate in these communication models blah blah it matters bc X.
There was a problem hiding this comment.
Edit: now that I see how the rest of the document builds these terms, I think its approriate to define them here. But a connector sentence would still cause less "whip lash" .
|
|
||
| ## Net settlement | ||
|
|
||
| Net settlement interactively combines several payments into one transaction. Individual payment amounts need not appear on chain, and payments may form cycles. |
There was a problem hiding this comment.
Same comment about a connector sentence for this as well.
2f2a706 to
327b453
Compare
8f2ce4c to
76631c2
Compare
arminsabouri
left a comment
There was a problem hiding this comment.
just noticed this. Have not read the rest of this
9508302 to
f9a0ded
Compare
arminsabouri
left a comment
There was a problem hiding this comment.
This reads well! I need to re-read the cordial miners / consitency section again. There is a lot of information packed in there that I am mainly not familiar with. But I think it gets the why across which is the important bit for this document.
|
about the links, we can:
i'm leaning towards the latter, and after we're done with the backlog we can add a nix flake check that ensures there are no broken links... wdyt @bc1cindy ? |
range-diff for force push f9a0ded9d9 → 36dbec85c3
|
range-diff for force push 36dbec85c3 → c3a0f8d3da
|
agreed, merge with broken links and #54 tracks adding the check once the backlog lands non-blocking, but since the chapters move into |
|
range-diff for force push c278fa2252 → e341018a9c
|
range-diff for force push e341018a9c → fd3cc4b9ad
|
range-diff for force push fd3cc4b9ad → dc99513d04
|
xstoicunicornx
left a comment
There was a problem hiding this comment.
Overall its ACK from me.
Highlighted the remaining feedback that I think was missed.
The one thing I feel strongly about is that the 3 settings have the same heading pattern (leading with the setting name) and should be grouped together to make it intuitive to the reader that these are the 3 different settings in which fungi operates under.
|
|
||
| Partial synchrony lies in between. Like the synchronous model, it assumes message delivery is timely, but unlike the synchronous model, the bound on the delay either isn't known or may not always apply, so simply waiting for a timeout duration will not suffice to obtain liveness. Typically this requires acknowledgement from some threshold fraction of participants in order for progress to be made. | ||
|
|
||
| ## Transaction construction in the semi-honest setting |
There was a problem hiding this comment.
I think old title of "The semi-honest setting: adding privacy-preserving communication" was better. Transaction construction is kinda a given for entire fungi protocol, and "adding privacy-preserving communication" does a good job highlighting the the main difference between honest and semi-honest setting.
If you'd rather not use the old title it should at least match format of "Byzantine fault tolerant transaction construction" (ie Semi-honest setting transaction construction).
|
|
||
| Only valid transactions have consequences for the owners of the inputs, because invalid transaction cannot actually spend any coins, even if fully signed. The sense in which the fragments themselves must be valid according to the proofs is that when combined they would result in a valid transaction if it were fully signed. Taken together with the incentive compatibility assumption, the lack of obstruction removes any reason for honest participants to withhold their signatures: by following the protocol their funds will be sent to the destination they intended, and since this applies to all participants, this removes any valid reason for honest participants to withhold their input signatures. | ||
|
|
||
| A widely circulated misconception is that validity proofs in such protocols, due to the use of zero knowledge somehow themselves are a source of privacy. This is false. All they can do is enforce validity, and if done correctly, they can enforce this without requiring privacy to be destroyed. |
There was a problem hiding this comment.
I still think my version reads better:
| A widely circulated misconception is that validity proofs in such protocols, due to the use of zero knowledge somehow themselves are a source of privacy. This is false. All they can do is enforce validity, and if done correctly, they can enforce this without requiring privacy to be destroyed. | |
| While validity proofs restore the possibility of completion without sacrificing privacy, they do not contribute to privacy themselves. All they do is enforce validity, and if done correctly, they can enforce validity without destroying privacy. |
There was a problem hiding this comment.
i'll concede that it reads better but I do think this needs to address the fact that this is responding to a misconception
the rift is that anyone who understands how validity proofs actually work should know this already, and yet in bitcoin privacy discussions the incorrect statement is often repeated and seldom questioned
|
|
||
| As a result, liveness is inherently brittle. Consistency is a liveness requirement, not a safety requirement, and all of the mechanisms described here are primarily concerned with enhancing liveness without breaking the privacy assurances made to honest participants. | ||
|
|
||
| ## Interactive transaction construction in the honest setting |
There was a problem hiding this comment.
"Honest setting transaction construction" is more consistent with BFT heading. I think putting the "transaction construction" in the front buries the lede (especially since thats the redundant-ish part that all settings relate too).
There was a problem hiding this comment.
"byzantine setting transaction construction" would be but that sounds a bit weird to me
i think i'm kind of aesthetically averse to mechanical repetition of sentence structure, i can't make a strong argument other than so far the way i wrote it sounds the best to me when i say it out loud (same re other heading)
There was a problem hiding this comment.
No I would leave BFT heading as is... "setting" word is honestly unnecessary for for honest/semi-honest. I was saying change only honest/semi-honest headings. BFT heading is the one that I think reads well.
There was a problem hiding this comment.
No I would leave BFT heading as is... "setting" word is honestly unnecessary for for honest/semi-honest.
Hmm, "(semi-)honest transaction construction" seems a bit vague to me, i think it "the honest setting" makes it clear that it's a specific setting described in that section, no?
There was a problem hiding this comment.
Yes, my main point is that I think that "transaction construction" should be in latter half of heading for all 3 settings.
There was a problem hiding this comment.
hmm that sounds a bit forced to me. "semi-honest setting" is a noun phrase, "byzantine fault tolerant" is an adjective phrase... noun phrases can be forced into becoming adjectives phrases, but for my brain it's much easier to parse these as prepositions via in, kinda gives crash blossom vibes
|
|
||
| In lieu of agreement about a transaction, agreement on the available evidence can still support liveness by allowing recovery from a fault. This boils down identifying inputs for which signatures have not yet been received. A missing signature may still eventually arrive, completing the transaction, but to avoid waiting indefinitely, participants can negotiate another transaction construction attempt while continuing to listen for progress in the original one. | ||
|
|
||
| Under synchrony or partial synchrony (specifically the eventual synchrony variant), if a sufficient threshold of peers can all agree it has been too long, then they can initiate such a recovery session. A threshold of peers agreeing implies a majority of honest peers agreeing. Note that agreement by a majority of honest participants requires a supermajority threshold. A quorum is a set of peers meeting the required agreement threshold. Given $n = 3f+1$ where at most $f$ are faulty, a quorum of $2f+1$ peers will include at least $f+1$ honest peers, a majority within any such quorum. |
There was a problem hiding this comment.
Where are these equations pulled from?
There was a problem hiding this comment.
https://www.cs.huji.ac.il/~dolev/pubs/the-byz-generals-combined.pdf but with the more modern conventions of labeling the number of faulty nodes
|
|
||
| ### Cordial miners inspired invariants | ||
|
|
||
| Cordial miners[^cordial-miners] is one of a family of so-called block DAG consensus protocols.[^dag-rider] In these protocols, a fixed set of participants, usually called validators, produce blocks that, similarly to BEC, refer to other validators' blocks, and the consensus protocol involves defining a deterministic function that produces a consistent priority order when blocks conflict, that all honest validators will agree on. The cordiality requirement is that for $n = 3f + 1$ validators, every block at height $h$ will have $t = n - f$ parent blocks with height $h - 1$. In addition to setting up the required thresholds for Byzantine fault-tolerant consistency, this also serves as a flood protection mechanism. |
There was a problem hiding this comment.
The cordiality requirement is that for
$n = 3f + 1$ validators, every block at height$h$ will have$t = n - f$ parent blocks with height$h - 1$ .
I guess I don't understand how height and parent blocks tie together? They seem to not have a relationship in the given equations?
There was a problem hiding this comment.
in cordial miners each of
the two quantities aren't related by any equation but the constraint is related in that if a block with height
this condition ensures that every block witnesses an honest majority of blocks from the previous generation which is required for their tau function that defines what the consensus state is, and it also ensures that no honest validator can run ahead of the honest majority
|
For all the references/context you provided for my dumb questions I would just say that it would probably be good to have that context in the document itself imo. |
The LSP paper that introduces byzantine generals problem is in the footnotes. Based on other feedback, maybe it's best to move the communication models and fault tolerance to the DAG spec stuff (#67) but the unanimity requirement is so fundamental to coinjoins i wanted to address it in the overview... Still unsure about this |
oakagent
left a comment
There was a problem hiding this comment.
Typos in what this pull request adds:
docs/overview.md
- l.107 - "even if if signatures" → "even if signatures"
- l.119 - "are are accounted" → "are accounted"
- l.121 - "invalid transaction cannot" → "an invalid transaction cannot"
- l.193 - "acknwoledgement" → "acknowledgement"
- l.195 - "to the the hardware" → "to the hardware"
- l.197 - "it improve liveness" → "it improves liveness"
- l.197 - "linveness" → "liveness"
oak · automated
range-diff for force push dc99513d04 → f22253b13c
|
range-diff for force push f22253b13c → 6bc209f822
|
This includes a high level description of the various components of the protocol suite, focusing on the transaction construction. Unlike the strawman ladder it replaced (previously described as an overview, and now somewhat out of date at any rate) it is scoped to only discuss actual things not strawman constructions which only benefit exposition, to avoid confusion about what is actually being implemented. Closes #21
range-diff for force push 6bc209f822 → e442a6cc15
|
|
@yuval-block
|
|
|
||
| Net settlement adds both safety and liveness considerations. Before signing, a participant must know that its funds reach the intended destinations. It can check outputs returning funds to itself directly; for a payment, it needs the payee to confirm that the transaction satisfies their agreement. This can add sequential dependencies between peers. Within each payment cycle at least one party will receive as much as it sends or more, and can therefore safely initiate a cascade of confirmations. See the [concurrent PSBT specification](./psbt-concurrent.md#confirmation-of-successful-payment-prior-to-signing) for additional details. |


This includes a high level description of the various components of the
protocol suite, focusing on the transaction construction.
Unlike the strawman ladder it replaced (previously described as an
overview, and now somewhat out of date at any rate) it is scoped to only
discuss actual things not strawman constructions which only benefit
exposition, to avoid confusion about what is actually being implemented.
Closes #21