https://github.com/UkoeHB/Mechanics-of-MobileCoin/blob/maste... << Page 81 is where you want to go.
Imagine I have a private key to an address with 10 coins. Imagine I spend the same amount of money (10 coins) on Mars and Earth at the same time. There is a 10-lightminute gap between Mars and Earth. Assume Mars and Earth have a similar number of Stellar nodes. What happens in Stellar Consensus?
1) Creating a backup of their wallet on disk.
2) Sending their coins somewhere, but not broadcasting the transaction to the network, instead storing it in a file.
3) Restoring from the backup
4) Sending the coins to a different address = double spending them.
5) Broadcasting the transactions in a very close timespan to conduct the double-spend.
The network needs to prevent this by storing, in an non-forge-able fashion such as PoW, which transaction happened first.
How does your system guarantee that?
https://github.com/mobilecoinfoundation/mobilecoin/tree/mast...
How does this solve network splits or honest disagreements?
In a Zcash-style spend circuit, the bottleneck is typically the Merkle inclusion proof, which takes say 32 hashes (assuming a limit of 2^32 note commitments). If we're comfortable with using one of the newer arithmetic hashes like Poseidon, that's about 10k constraints. Any of the modern argument systems (Groth16, Plonk, STARKs, etc.) can give proof times well under a second with a circuit of that size. If we want to optimize further, we can get proof times down to around 10-20ms (single-threaded) by using an arithmetization that's carefully tailored to our circuit's bottlenecks.
If we stick with traditional primitives like SHA-256, the circuit becomes substantially larger, but with modern techniques we can at least get proof times under a second. Happy to talk through the options if it would be useful.