how secure and time efficient is offline bitcoin transactions or payments through bluetooth or NFC? The scenario of paying through your mobile (offline) and the receiver checks the transaction.

And how can I confirm my payments (sender), as I am only offline device. And the online is the receiver.


If you're paying through your mobile phone, it's most likely that your app creates and signs a transaction based on unspent inputs available to your address. This is then passed on to the receiver who posts it to the blockchain. This transaction cannot be modified, it can only be posted to the network in order to prove payment. So, from your standpoint, payment through Bluetooth, NFC, or even by sharing the transaction through a QR code is secure.

Unfortunately, as bitcoin is network based, unless you can connect to the network [through the internet] you can confirm nothing, but as the sender of the transaction, you don't really need to. You can/should just assume that the input are spent, because once that transaction is created it can be posted at any time as valid (provided that it's inputs aren't already spent).

You can still check the blockchain at any point in the future when you do have internet access to confirm that your inputs are spent. And if they are not, you can go ahead and spend them in another transaction. When the original transaction enters the blockchain after this new one, it is rejected because it's inputs have already been spent. So, it's actually in the interest of the receiver to post the blockchain and confirm payment as soon as possible. This doesn't really matter for the sender.


If the receiver is online, it is as good as fully online transactions. The receiver can check for validity and double-spends just as with any other transaction. In fact, if the sender is known to be offline, they are even faster and more secure as the sender cannot double-spend simultaneously.

As a sender your client software should be able to confirm that you've sent a sending transaction. However, without being online you do not know if the transaction propagated successfully. The receiver could try to trick you into believing the payment was never received, while secretly collecting the funds.

If the receiver is also offline it gets more complicated. It can work if both parties were previously online and set up a payment channel between them. Alternatively, if the coins are sufficiently old, the receiver was online previously and believes the sender will not go to great lengths to double-spend, he can receive the coins offline.


Only the sender can sign a valid transaction for his own funds, so for the sender an offline transaction is completely secure. The sender, as he is offline, cannot confirm whether the payment has been validated. Since it is very hard to input an incorrect valid address you can be sure that the address you sent it to was the correct one.

The recipient is online, so he can immediately check whether your transaction is valid, i.e. whether you were in control of the funds that you sent him and if the amount is correct, even before the transaction is confirmed by the network. Since he specified the recipient address he only has to scan the unconfirmed transactions for a single recipient address to do so.

From my experience this works so: Amount is agreed upon, shop clerk puts shows you the bitcoin qr code, you send the amount, shop clerk confirms that the transaction has been posted, you are good to go.


I understand your question a bit another way: Do you possibly ask how to tell the network, that you've sent money?
You can createrawtransaction in your phone, send it via Bluetooth to the receiver, and the receiver will send it to the network (sendrawtransaction). Of course those are bitcoin(d)/(-Qt) commands, but maybe you have used them.
He can also provide some kind of tunnel you <-> (receiver) <-> internet to allow you to send your transaction by yourself.

Your Answer

