Is this now possible with OP_CHECKLOCKTIMEVERIFY?
It was always possible, but yeah, now the sender can do it in a way that they can prove that they can't cheat.
The previous protocol was
- Ask the recipient to create a receiving wallet (W)
- Having them send you and address for the wallet (W_address)
- Create a private key (b)
- Generate the address for B, B_address
- Send the money to B_address (TX-AB)
- broadcast TX-AB
- Create a transaction (TX-BW) which sends the money from B_address to W_address with a locktime 6 years in the future
- Print the transaction 10 times
- Wait for TX-AB to confirm (worth waiting a day)
- Store the transaction in 10 different places
- Check that the transaction is definitely OK and did in fact confirm
- delete the private key B
At this point, the only way to spend the output from TX-AB is to use TX-BW. You don't even need to keep TX-BW secure. Just give it to recipient. They will broadcast it when the locktime expires.
This method isn't secure, if the recipient doesn't trust you to have deleted the private key.
You can now use P2SH and CLTV to make it work. It will be mined by all miners. Once is it confirmed in the blockchain, there is no way to spend it early.
The standard script is:
HASH160 <hash160(sub_script)> EQUAL
The sub-script is
<expiry date> CLVT DROP <public key> CHECKSIG
It can be spent with
None of the clients will be able to understand it though, since they only see hash160(sub_script). The client would have to have a list of addresses to watch for. This would be a change of the wallet format and that is very risky.