From: William Casarin Date: 2019-06-07 Subject: OpenTimestamps OpenTimestamps is a protocol for time-stamping data into blockchains (mainly Bitcoin, but it's built to be blockchain agnostic). This post is a quick overview of the OTS proof file format, to get an idea of how it works. Here's what an open timestamp looks like: $ otsprint timestamp.ots version 1 file_hash sha256 7ff0c7d02a0dcaef63105b9f5d99c93adc2f501f4f204dcd5918c4a0acd10b55 append 5065d9a0de5a108dcbd4714467709574 sha256 | \--> append 755b5dd0fa86ec516ddc26d0e765835a | sha256 | append fd8f1b61b316d80b79de2607d9207c2a | sha256 | prepend 5bf9ca01 | append 8cb3e5188471af08 | | | \--> attestation calendar https://finney.calendar.eternitywall.com | sha256 | append a6cc7120ab7d7a607a9e24221aa15fb7558444364205acd6ab61ad370839b3fe | sha256 | prepend 1b16150ba8327ea18cc82ba6781814ef28fec0abf8b423eb2bf385c1bad5d1ea | sha256 | [..] | append a8c1513167c876dd119c3f33b705c2aecd6ea28f893e54b4c7d491ab7b528938 | sha256 | sha256 | append ab90169d97f24b64b726f894277754d09c8ca027a0b1f6054c2525a1ddfcce91 | sha256 | sha256 | attestation bitcoin height 551387 | \--> append 7c7730e6fb81c3ed44d6d672a88d5b42 | sha256 | prepend 5bf9ca00 | append 727477c1c5d31991 | attestation calendar https://alice.btc.calendar.opentimestamps.org | \--> append 8e1e19d95e45043c6972dc717880fc23 | sha256 | prepend 5bf9ca01 | append e1c083a949c95ece | attestation calendar https://bob.btc.calendar.opentimestamps.org append aa0d7770962773c4970da6bdc8210dd5 sha256 prepend 5bf9ca01 append ca471b3db3ecc5b2 attestation calendar https://btc.calendar.catallaxy.com As we can see, it's a merkle tree of various operations such as appending, prepending, and hashing data. These are mainly used when combining other merkle trees together. This is the role of a calendar server, allowing you to timestamp millions or more documents together into a single tree. The merkle root eventually makes it's way into a Bitcoin transaction. The OTS proof is a merkle path to this root. With a fully upgraded OTS proof, you can verify the existence of some document before a point in time. This can be done completely independently by downloading the blockchain and checking it yourself with the command `ots verify`