I heard that the recommended waiting confirmation time for a bitcoin transaction is 6 blocks/ 1 hour. So a shop which lets its customer to pay in bitcoin without any waiting for confirmation would risk double spending from the side of the customer. Is this a big hindrance for bitcoin (cryptocurrency) real-life usage? If yes are there any solutions, improvements? Thank you.
I heard that the recommended waiting confirmation time for a bitcoin transaction is 6 blocks/ 1 hour.
This is the recommendation to be extremely sure that a payment is included in the longest valid chain. This question has more information about that recommendation.
Note that even in a non-malicious setting, sometimes two miners will find a block at the same height, at ~the same time. So if your transaction is confirmed in a block, but another miner has found a block at the same time (that doesn't include your transaction), it is possible that the block which includes your transaction will eventually be dropped from the chain. The dropped block is sometimes referred to as a stale block, they are rare but normal occurrences on the network.
If you take a look at the top answer of this question, you'll see that it is exceedingly rare for a chain longer than 1-2 blocks to go stale.
So a shop which lets its customer to pay in bitcoin without any waiting for confirmation would risk double spending from the side of the customer. Is this a big hindrance for bitcoin (cryptocurrency) real-life usage?
It is hard to broadly characterize this, there are big differences between, for example, an online shop selling digital goods, a coffee shop, a cryptocurrency exchange, or a luxury car dealership. The entity accepting payment must consider what their risk tolerance is, and set their policy accordingly.
For low value/risk payments (for example, a low priced coffee, paid for in-person), perhaps accepting an unconfirmed transaction would be an acceptable risk for the merchant.
For high value/risk payments, such as deposit to a large online cryptocurrency trading platform, the platform operator might decide to require several confirmations, in order to be sure they are safe against potential double spend attacks.
If yes are there any solutions, improvements? Thank you.
Yes, all of the above is just in relation to on-chain transactions. The bitcoin network can also play host to many higher level transactions, which allow users to interact and transfer value, without actually publishing transactions to the blockchain. For example:
- The lightning network allows ~instant and extremely cheap payments to be sent between users (some additional security assumptions, but still no trusted third parties)
- Side-chains allow unbounded functionality (different security assumptions, federated models seem to be popular)
- Some custodial services (such as cryptocurrency exchanges) can allow users of their service to transact between one-another off-chain (requires trusting the service entirely)
- Hardware devices such as the OpenDime allow a sort of 'proof of being the only copy of a private key'. The address derived from that privkey can be loaded with BTC and then the device can be physically traded between people.
Similar to the individualized consideration of risk/value for on-chain payments mentioned above, a user will have to consider the risks/benefits/etc of each of these methods of transacting.
TL;DR: it is indeed possible to transact using bitcoin, without having to worry about how long it will be until the next block is found.
In Bitcoin, it is recommended that big amount of transactions wait for 6 confirmations and smaller amounts wait for 3 confirmations. When a seller uses bitcoins to sell he must never deliver the product with an unconfirmed tx, because since it is in the mempool it can be modified. Once a new confirmation arrives the safer it will be to deliver the product.
If you want to improve it and for example accept unconfirmed txs without fear of the double spent, you should do like what Bitpay does, have your own application to generate wallets and a transaction link only understandable by your wallet software so you can use memopool transactions.
I do not recommend you to do that, I would wait those 3 confs at least to make sure.