Without total order that’s pretty hard to do. You get into the realms of the usual consensus approach quickly.
(good chat, so keep going)
In total order network folk are allowed to try and doublespend as much as they want and the network blocks it.
So
- Safe for innocent mistakes
- Safe for attempted black hat hackers to keep trying and not suffer any loss in doing so
That’s basically the trade off. Order everything and block doublespend (attempts) where the attempt is not just an attempt any more it’s a full doublespend (world has been ordered to say so) .
Or
Separate attempts from doublespend (force the parent to be checked when the child is trying to spend) and look for folk trying this.
/-> Begin distraction
It’s very much like bitcoin cannot refund and folk said, of irreversible transactions are hell, folk will lose everything, but I don’t see that happening too much. We need to take into account many things. Basically for a buyer (B) and seller (S) then the process goes kinda
IRL →
→ S can I buy X from you B
Then it’s either pay up front or on delivery
S → delivers goods
B → Pays
Now if S does not receive the cash it’s easy to say, hey B you need to prove you paid me and I need to be able to access the funds
or
If B does not receive the goods, it’s mostly the same, you need to prove I have the goods etc.
So anyway in real life the transaction between 2 parties really depends on goods/service ↔ payment and most of that is “out of band” of any crypto currency (you can use smart contracts etc. but it ends up the same thing, payment and delivery need to be provable and it’s out of band or via an oracle (out of band))
/ OK distraction over
So it’s down to innocent users and mistakes, but this is also in the realms of loosing your password/key in a decentralised network (there are options via BLS that will work well). So there is a price for freedom, I suppose.
OK that was more distraction Sorry
Back to SAFE
The approach here is do not require total order so we have a much faster parallelisable network. To do that we split a couple of things and that makes us different form the rest:
Transaction → Parent transaction PLUS Child transaction (a pair)
Finality in blockhains we all understand, but here → When the Child is spent
So we split up the transaction to require the Parent and require the parent is unique. The biggest and worst hack is a doublespend (try and spend the same thing more than once). That is prevented by basically stopping the world (waiting on block height or supermajority of nodes to agree on a ledger) or for Safe we say
- Write the parent tot the network and we check it’s parent is OK
Now the doublespend attacker will try and write 1 Parent with output X to some nodes and the same Parent with output Y to others. He hopes that he can cash out X and Y before anyone notices.
So this is where our multiple sources of the Parent come in. ANY node seeing X and Y as outputs of PARENT can broadcast that to the world. IF X or Y are not owned by the attacker (he is trying to pay you and also me or something) then either of us in our transaction ask the network for PARENT (but there are 2 PARENTS) and if we see the wrong one, we also broadcast (and as above contact B and tell them they have not yet paid).
So the basis is global visibility of doublespend attempts and quickly, but also stopping the spend of ANY outputs of a doublespend PARENT.
This is why X or Y can spend but only whilst the other does not exist anywhere an honest node sees it. As soon as the doublspend attempt happens, any honest node can stop it. Otherwise, we need to order everything and tick blocks one at a time.