Chainpoint

Chainpoint is an open standard for creating a timestamp proof of any data, file, or process.

Anchor an unlimited amount of data to the Bitcoin blockchain. Verify the integrity and existence of data without relying on a trusted third-party.

...plus hundreds of others use Chainpoint.

How does Chainpoint work?

Chainpoint links a hash of your data to a blockchain and returns a timestamp proof. A Chainpoint Node receives hashes which are aggregated together using a Merkle tree. The root of this tree is published in a Bitcoin transaction. The final Chainpoint proof defines a set of operations that cryptographically link your data to the Bitcoin blockchain.

What is a Chainpoint Proof?

A Chainpoint proof contains the information to verify that the hash of some data is anchored to a blockchain. It proves the data existed at time it was anchored. Chainpoint proofs can be verified without reliance on a trusted third party.

Chainpoint Node API

Chainpoint Nodes have an HTTP API. You can interact with Nodes using any programming language that supports HTTP calls. Thousands of Chainpoint Nodes operate as part of a global network.

Chainpoint JS Client

This Chainpoint javascript client can be used in both Browser and Node.js based Javascript applications using callback functions, Promises (using .then, .catch), or Promises (using async/await) functional styles.

ops - an array of operation objects (required under every 'branches' object)

lstring, optional

left concatenate a value. If the value is a hexadecimal string, it will be read as a hexadecimal byte array, otherwise the string will be converted to its byte value assuming UTF-8 encoding.

rstring, optional

right concatenate a value. If the value is a hexadecimal string, it will be read as a hexadecimal byte array, otherwise the string will be converted to its byte value assuming UTF-8 encoding.

opstring, optional

an operation to perform on the current value combined with a previous 'l' or 'r' operation. Current operations: 'sha-224', 'sha-256', 'sha-384', 'sha-512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512', or the special purpose 'sha-256-x2' which applies 'sha-256' twice.

anchors - an array of anchor objects (required under every 'ops' object).

an identifier used to look up embedded anchor data. e.g. a Bitcoin transaction or block ID.

urisarray, optional

an array of special purpose string URI's, each of which can be used to lookup and retrieve the exact hash resource required to validate this anchor. The URI MUST return only a Hexadecimal hash value as a string. The URI MUST also contain the 'anchor_id' value to lookup the URI resource. This strict requirement is to allow automated clients to retrieve and validate intermediate hashes when verifying a proof. The body value returned by the URI MUST be of even length and match the regex [a-fA-F0-9].

Verifying Chainpoint Proofs

Verification confirms that the proof is well formatted, and all proof operations lead to the expected anchor hash on the blockchain. Verification of version 3.x proofs can be performed with the Chainpoint CLI. Verification of older versions can be performed using the chainpoint-validate Javascript package for Node.js.