I'm a huge fan of OpenTimestamps. If you haven't seen it before, its a utility to timestamp a file/document/blob-of-data and anchor that timestamp to the bitcoin blockchain. I use it to timestamp files and documents that I work on, and I also use it to timestamp git commits.
Basically you can do pip3 install opentimestamps-client to install the client, and then use ots stamp to stamp a file, and ots verify to verify a timestamp (when you stamp a file, it returns a .ots file that contains the timestamp proofs). The verification requires you're able to talk to a bitcoin node. What I've done for a long time is run a pruned bitcoind on my laptop to (among other things) verify ots timestamps.
But recently I figured out how to use a remote node (like on an umbrel or some other bitcoind you have on your network). If you create a bitcoin.conf file in the normal bitcoin data directory (~/.bitcoin on linux, ~/Library/Application Support/Bitcoin/ on macos), and put:
[rpc] rpcuser=YOUR_BITCOIND_RPC_USERNAME rpcpassword=YOUR_BITCOIND_RPC_PASSWORD rpcconnect=YOUR_BITCOIND_IP port=8332
then opentimestamps (and other software that tried to connect to bitcoind over RPC!) will use your node. Works great and now I dont need pruned nodes just for opentimestamps.
Do you use opentimestamps? If so, I'd love to hear about your usecase. It's a super handy tool.
Just tried it out for the first time. Cool tool, and surprisingly simple to use!
I noticed that this was a free service, but presumably some small fee is incurred by getting the hash onto the blockchain. What's up with that?
What is the most useful application of this, in your opinion? I know that it can be used to prove that a document existed at block N, but I lack the imagination to come up with compelling use cases for that.
reply
By default, OTS sends your hash to three calendar servers. These servers aggregate hashes into a merkle tree over several hours and then commit the root of that tree in a single transaction. So every few hours they make a transaction that commits thousands of timestamps to that block. So the incremental per-timestamp cost is basically zero. If you visit any of the calendar servers, there is a donation address to fund that servers wallet, but the operating cost for these things is really low. I get a ton of utility out of OTS, so I threw $5 worth of bitcoin at a calendar server to chip in. I think that should pay for my use for the next couple years :)
In terms of usecases, I use it to timestamp git commits. One day I’ll have to revoke my gpg key. It’ll be nice to be able to prove which commits were mine before my key got revoked. I also stamp log files and documents so that in the future I can tell if they’ve been tampered with after some date.
Peter Todd commented on twitter that there’s a group using it to timestamp photos being taken in Ukraine to establish “these are at least as old as X” evidence.
reply
Thanks for the comprehensive reply!
reply
Do you use opentimestamps?
Yes I do. One of my use was when I need a notary, online notary with opentimestamps is exactly the same as a normal notary. What is a notary actually? A service that prove the existence in a certain time of a document. Doesn't matter what is written in that document. Important is its existence in time.
reply
Oh man, put this in a guide, please. Cheers
reply
I wish there was a way to "save" posts like this one!
reply
You can also specify --bitcoin-node option to ots in command line. Also, Bitcoin node is only required for verifying, not stamping.
I timestamp all my signed git commits. Also I timestamp daily db backups in some (non-Bitcoin) projects. Allows you to be sure that data is not modified in historical backups later.
reply
I originally had a shell alias set up to pass the --bitcoin-node option :)
reply