Overall the fit seems very good for SAFE but I have some questions.
In video 2 at 6m14 they say “it turns out that the safe design of cryptocurrencies only require solving a problem with consensus number one. And this is very intuitive because if I have an account and I want to perform a transaction from the account I only need to agree with myself … I am the only one who is supposed to decide where the money from my account goes and for this I only need to agree with myself, and that’s why we have consensus number one.”
- What about multisig transactions? Does this definition of consensus number then mean it would be a higher consensus number? I think by this definition then yes it must be.
- It seems to conflate consensus of signing the transaction with consensus of the order of the transactions from that account as known by the system. Have I misunderstood something with this?
- They say elsewhere that bitcoin has consensus number infinity but that seems to refer to consensus of the order of transactions. To merely sign and broadcast a transaction in bitcoin is only consensus number one. So I’m a little unclear about consensus number; if there’s any good explanation of that concept I’d be keen to hear about it.
Regarding the gossip aspect for probabilistic AT2. My summary of this idea (please correct if wrong) seems to be that the sender of a transaction broadcasts their transaction to some nodes, then those nodes gossip it to others, and they gossip it further etc, spreading the transaction exactly the same way as bitcoin transaction relay happens. The recipient can then sample some random nodes in the network to see if they have a consistent agreement on that transaction. If they do, the transaction is very probably agreed. The more nodes the recipient samples the more likely it is the transaction is agreed and not in conflict or attempted at double spend.
- Why does bitcoin need blocks and not depend on transaction relay alone? Why does AT2 not need blocks and seem to only need transaction relay and sampling? I guess blocks are needed when there are conflicts in transaction order, the blocks resolve the order.
- There was previously a first-seen relay rule in bitcoin where nodes would not relay an apparently ‘double spend’ transaction. Does AT2 have something similar? What happens with AT2 to resolve conflicts for relayed/gossiped transactions? What happens with this race condition situation, which would be trivial for a sender to initiate?
- From a recipient perspective: presumably sampling by the recipient would show two simultaneous transactions so the recipient would not accept the transaction. For example, if I’m a bad guy trying to buy my lunch and I send two transactions simultaneously (one to the cafe and another conflicting one to myself), what does that look like to the cashier and how long would it be until they can let them walk away with their lunch (or not)?
- From a network perspective: are both transations rejected by the network? Or is one chosen and the other discarded, and how long would that choosing take?
I guess my general question here is how does AT2 deal with conflicts? I’m still not too clear on that aspect.
What is the flow of data for a transaction in SAFE? My guess is
- client signs and announces their transaction to a random node on the network
- the transaction is routed to the section responsible for the wallet of those funds via normal SAFE routing
- the section responsible for that wallet does AT2 to deduct the funds, gossiping only within that section
- when that section confirms there’s no conflict or error with deducting, the transaction is routed by that section to the recipient section using normal SAFE routing
- the section responsible for the recipient wallet does AT2 to credit the funds, gossiping only within that section
- the recipient polls their wallet for the change in balance applied in the step above (ie the recipient does not do AT2 sampling, only the section responsible for their wallet does the sampling)…?
Does that sound right? In a general sense, is AT2 only applied at the section level, not the global network level?