Very uncertain. The current network actually suppresses transmission of the double-spend.
That is why the vending machine paper had 2 sets of connections. Once you send a transaction to a node, you will never hear about a double spend from that node.
The send on the outgoing connections and then listen on the receiving ones.
So the intention is to allow a higher-fee version of a transaction to be relayed?
Right, the assumption is that the miner is greedy.
A second level is the child pays for parent patch. This means that high fee transactions can "share" their fees with parents.
TX-0: pay merchant 0.99BTC, fee 0.01BTC
TX-1: pay customer 0.98BTC, fee 0.02BTC (replace by fee double spend)
TX-2: from TX-0 pay 0, fee 0.99 ("scorched earth" transaction)
A miner who includes TX-2 gets 0.99 BTC as a fee. However, it can only be included if TX-0 is included. Transactions are around 250 bytes.
TX-0, TX-2 = 1BTC total fee for 500 bytes
TX-1 = 0.02BTC for 250 bytes
The TX-0/TX-2 pair has a much higher fee per byte, so replace by fee + child pays for parent miners will mine that pair.
This means that the customer is prevented from getting the refund, but the merchant also loses.
If a merchant has a reputation for reacting that way, then few customers will try to double spend against him.
Peter Todd's observations means that merchants need to verify that transactions they receive are acceptable to as many nodes as possible.
For "instant" transactions, they should require the transaction is one of the standard transactions at minimum.
Even then, Eligius apparently has a black list of addresses, so merchants would need to know them too.
In theory, a merchant could be define the change address.
Client has private key kpriv and computes public key (Kpub = kpriv * G).
Client sends Kpub to the merchant
Merchant responds with a random number r.
The transaction is defined to be of the form
- All inputs must be the simple standard script
- Only 2 outputs and also standard payment script
- Pays the merchant's key
- Pays [r * Kpub] (change address)
The private key for the change address is kpriv * r (due to EC maths).
This produces a change address that only the client knows the private key for, while guaranteeing that it is random (so unlikely to be blacklisted).
That should consistently produce transactions that are acceptable to almost all "honest" pools.
Hidden pools are still the problem. If 10% of the pools don't forward transactions they receive, then you have a 10% chance of successfully double spending.