Use case: I'm shopping around for a good or service, and to prove I mean business, I put some BTC in a new wallet and
- prove that I'm the one who funded that wallet
- the balance cannot be spent for X amount of time OR until the good or service is provided to me, as adjudicated by a 3rd party
- we don't who will provide the good or service, so don't know the receiving wallet
- if no one provides the good or service before time X expires, I'm free to spend the balance as I please.
Is it possible to do all of the above with the existing Bitcoin protocol, with the 3rd never being able to run off with my money?
Will we have to know the receiving address first?
Without a receiving address, will we have to wait for some kind of SmartContracts to implement the above?
Thanks.
Due to your requirement of "the balance cannot be spent for X amount of time", I don't think this can be implemented unless nLockTime is supported.
Edit: As I think about it a bit more...
As far as I know, there isn't any way to "lock" an output until a given datetime or blockheight. nLockTime will allow you to lock a transaction so that it can't be used until a given datetime or blockheight, but while waiting for that deadline, a replacement transaction could be broadcast that replaces it.
The only way I can think of to accomplish what you are looking for is if the 3rd party was trusted to have full control of the output. The third party could then hold on to the output until the deadline, and then either forward the balance on to whomever is providing the goods or services. If nobody provides the goods or services by the deadline, then the 3rd party would need to be trusted to send the balance back to you.