Announcing The Open Savings Initiative on BCH & BTC Networks
This is an open source initiative to offer anyone in the world a secure, time locked and trustless savings account. We coded up this application in the hope that ALL the wallets in the BCH & BTC ecosystems adopt this feature, either by leveraging our code or implementing it themselves. See the website here and join our community: https://opensavings.network/
This application is LIVE today.
Please test it out, report any bugs on Github and help us spread the word!
Link on Github: https://github.com/coinbackup/opensavings
Link to Download: https://opensavings.network/#/download
A Dream Come True
Ever since I joined the bitcoin community in 2012 I’ve seen crypto as the ultimate savings account. One protected from inflation and built on free market & sound money principals.
I dreamed of crypto providing a real alternative to centralized systems such as social security which many rely on for longterm, time locked income, in old age. However before that could happen we needed a way to remove the temptation to spend the crypto funds before a future date.
Thanks to the “nlocktime” parameter and scripts such a “OP_checklocktimeverify” being introduced into Bitcoin and continued on Bitcoin Cash, there is now a straight forward way of securely locking up funds on the blockchain without a custodian, which can only be spent at a future date.
Imagine this is similar to the “Vault” feature on Coinbase where your crypto can’t be withdrawn until a 30 day time delay, which foils an attacker seeking to empty your account. Except now you don’t have to trust Coinbase or anyone. The feature is provided by the protocol.
Or imagine you wanted to make sure your crypto was held for MORE than 365 days so you didn’t incur short term capital gains by accidentally selling before one year has passed. A open savings time locked address would guarantee that happens.
How The Open Savings App Works
Open Savings Initiative lets you set aside cryptocurrency that can only be spent after a certain date. It’s like a certificate of deposit that you can add more money to anytime, but doesn’t require a bank.
If you intend to give cryptocurrency to someone else, you can use Open Savings Initiative to create the crypto equivalent of writing a cheque for a future date. Unlike traditional cheques, the crypto cheque can’t bounce, can’t be cancelled, and is guaranteed to have the funds.
This app doesn’t collect or store any personal data.
For secure offline use, download the offline version of the app.
Open Savings Initiative is an open source project. View the code on GitHub.
I’m a developer. Tell me how this works.
TL;DR — The app uses the
OP_CHECKLOCKTIMEVERIFY opcode to build a pay-to-script-hash (P2SH) address. The coins sent to the P2SH address are only spendable by a newly generated private key, which is given to the user for safe keeping, digitally or printed. This effectively creates a time-locked paper wallet.
1. A transaction is only valid if the current time is greater than the transaction’s nLockTime parameter (
currentTime > nLockTime).
2. When a transaction attempts to spend coins,
OP_CHECKLOCKTIMEVERIFY compares a predetermined timestamp with the nLockTime parameter of the transaction; the transaction is only valid if nLockTime is greater than the timestamp (
nLockTime > timestamp).
#1 and #2 work together to ensure that a transaction is only valid if the current time is greater than the predetermined timestamp (
currentTime > nLockTime > timestamp).
If you’re unfamiliar with how Bitcoin transactions, scripts, and P2SH addresses work, you’ll need to read up on those before continuing. Here are some articles useful in understanding basic transaction and scripts, and P2SH addresses.
About the P2SH script this app uses
The script used to build the P2SH (i.e. the “redeem script”) is:
<timestamp> OP_CHECKLOCKTIMEVERIFY OP_DROP OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
This is a standard pay-to-pubkey-hash (P2PKH) script, but with a time-locking element added to it. The script to spend coins at this P2SH address (i.e. the “scriptSig”) is:
<sig> <pubKey> <redeemScript>
Just as with a common P2PKH transaction, only the owner of a specific address may spend the coins sent to the P2SH address. We’ll call this person the “recipient”.
<timestamp> is a date and time specified by the user when the P2SH address is created—the coins are unspendable until this time.
<pubKeyHash> is the recipient's address.
<sig> is the signature of the transaction, signed with the recipient's private key.
<pubKey> is the recipient's public key.
<redeemScript> is the serialized redeem script.
The recipient’s private key must be used in order to spend the time-locked coins, and typical wallets don’t support spending from nonstandard P2SH address like this one. To get around this problem (and not require the user to export his wallet’s private keys in order to use them in this app), the app generates a fresh private key to use as the recipient. The user must keep this private key safe.
The user is given this new private key, along with the redeem script. This is all that’s needed to spend the coins.