Delegating the creation of a transaction 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:


Does this leave open the risk of that person double spending the same bitcoin?
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?)
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..
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.