A fossilizer takes arbitrary data and provides an externally-verifiable proof of existence for that data. It also provides a relative ordering of the events that produced fossilized data.
For example, a naive Bitcoin fossilizer could hash the given data and include it in a Bitcoin transaction. Since the Bitcoin blockchain is immutable, it provides a record that the data existed at block N.
See the Go documentation here.
We offer several implementations using different kinds of proofs. You can directly use them as a library or use one of our docker images.
This implementation uses the Bitcoin blockchain to store merkle roots.
It collects data in a merkle tree during a configurable
interval, after which
it computes a merkle root and sends that value to the Bitcoin blockchain.
It produces a proof containing the transaction ID and a merkle path.
Note: you need to provide a WIF with enough satoshis to send transactions to the blockchain.
This implementation simply creates a timestamp of the request. It doesn't offer any kind of cryptographic proof and should only be used when prototyping.
This implementation batches incoming requests in a merkle tree and asynchronously creates a timestamp for the tree root. It doesn't offer any kind of cryptographic proof and should only be used when prototyping with batch systems.