5

This question might seem quite strange. but I am wondering if its possible to delegate the creation of a transaction to a third party, without having to trust them with your private key?

In the same way that with credit cards you can preauthorise a transaction, i'm wondering if its mathematically possible to do the same with bit coins. What I'm thinking of is having the client create the transaction, from the private key, and then forward the transaction to, and only to the authorising body. That way they would then hold a cryptographically secure transaction which at a later time if appropriate they could distribute to the rest of the bitcoin network.

so specifically:

  1. Does this leave open the risk of that person double spending the same bitcoin?
  2. Is there a mathematical window between the point when the private key is no longer required, and when the distribution process has begun. (e.g. adding it the current block?)
  3. Has anyone solved this already?

Edit for clarity:

The key aspect is the ability for someone other than the person sending the bitcoin to 'hold the transaction' and at a later date to either forget the transaction (so it never left the original wallet) or to distribute the transaction, so it is accepted by the bitchain as having been transferred.

It would be required that the only trust that the sender needs to have is that the transaction holding place is trusted to either distribute or drop the transaction fairly. In particular that they do not obtain access to transfer additional money later, or different amounts etc..

2

Yes this is possible, and there are a couple of clients that let you do this out of the box. Electrum is popular for this.

The purpose of the private key is that you are able to "sign" the transaction. Once the transaction has been created and signed actually anybody can broadcast it to the network.

I understand that it is even technically feasible not to use the bitcoin client but recreate a transaction, sign it and broadcast it as a string.

Edit to answer third point also in an edit from the OP: If you are suggesting that you can possibly drop off signed transactions everywhere using the same bitcoins to create a double-spend, you would also have to prevent any one of the recipients from broadcasting. As soon as the transaction is broadcast you can consider that those coins are spent, because a later transaction would be rejected. It is not therefore in the interest of the recipient to hold a transaction for you. The answer is in another function of the original code which allows escrow payments.

Localbitcoins.com operate an escrow process, I couldn't say for sure if they use the original functionality in the bitcoin code or have written it themselves, but essentially it is the same idea. Coins from your unspent balance are set aside and only released when certain conditions are met. This prevents the double-spend because once the coins are in the escrow they cannot be used in another transaction.

I think you ought to have a look at how transactions are actually constructed, as it is not as simple as saying that "I have a balance of n bitcoins and I spend x bitcoins". There is the notion inputs and outputs, spent coins and unspent coins.

  • sofar, this is the more complete answer as it answers 2 out of 3 of the questions. can anyone answer about the double spending? – Michael Shaw Aug 27 '13 at 22:27
  • thanks. I was doing a kind of thought experiment about how to solve the transactional certainty issue for spending bitcoins thats needed in physical shops. The idea was that by scanning a QR code at the till, your phone could then ask for authorisation to send the payment request to a central server in the form of a valid, but undistributed transaction. Likewise, the merchant would also send their payment request (and payment for the immediate processing) to the central server. If both are received then both transactions get distributed and the merchant has the transaction confirmed – Michael Shaw Aug 28 '13 at 19:27
  • The beauty of this is that it creates a non reversible payment, unlike all card payments, and could be viable at a very low transaction cost per transaction. – Michael Shaw Aug 28 '13 at 19:30
  • I think you are over-thinking the issue - these problems are already dealt with in the standard client. The merchant would only need to be online and check their own version of the block chain (which should be up to date) to confirm the transaction is not using spent coins. – T9b Sep 2 '13 at 12:58
2

This is actually built in to the system. One can have a third party create a transaction but before posting it to the blockchain, you would still have to sign it in order for it to be valid. (Not entirely on-topic, but there's information concerning rebroadcasting raw transactions here that might appeal to you.)

To answer your questions specifically

  1. Yes, but only if you're blindly signing transactions before sending them out. Anyone can create any number of transactions that use your bitcoin, but only the ones you sign will be valid and accepted into the blockchain.

  2. No, the source of the bitcoins and the destinations are defined at the same time. There is no period in which coins are freely floating around that can be accessed without a private key.

  3. I don't know of any major commercial operations doing this, but you can create raw unsigned transactions as well as sign them with brainwallet.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.