suggestion: client is new to seller. client wants a large order, seller wants proof client has the coins. client puts the coins in an automated anonymous escrow, seller knows the coins are there and that those coins will be used to pay him. client naturally holds sole control over the temporary escrow and can either pay full, pay partially untill the escrow is empty, or withdraw. if the escrow is empty, it disappears. as long as the escrow exists, trust might be improved between client and seller. if this is in the protocol instead of a third-party service, i guess people will have trust in it.

Escrow is all about trust. A third party service suffices in this regard, but if you feel a decentralised approach is necessary, I posit that a separate system be developed. The 'guts' of bitcoin need to remain as simple and static as is possible to make the whole thing work (for the security of bitcoin itself!) and adding features to the whole decentralisation is just asking for trouble. One bug. One security hole. That is all it would take to drain many accounts and utterly destroy faith in bitcoin (as well as potentially ruining lives of many foolish bullish investors.

I would remove the "withdraw" option from the client (still available if they both agree on it), and add a timer-based delivery.

Such that if the client dies, and can't "clear" the transfer, the escrow won't keep the money indefinitely while the seller is screwed. The client should also have the option to extend the timer manually.

I would remove the "withdraw" option from the client (still available if they both agree on it), and add a timer-based delivery.

Such that if the client dies, and can't "clear" the transfer, the escrow won't keep the money indefinitely while the seller is screwed. The client should also have the option to extend the timer manually.

Also in my opinion withdraw should be removed. Moreover, the expiration should be fixed to a specific block number. In case of the agreement will not reached, the deposit fund will be added to the block reward (or it would be splited among N blocks, in order to achieve more constant rewards).

So, the payment will be performed in 2 steps:- payment-id = escrow(to-address, expiration-block, amount);- confirm-payment(payment-id);