How it works
Hashing is a mathematical technique that has been used for decades. You can hash almost anything: a character, text, document, or webpage. The same input (aka, the same file) always leads to the same output, and if you change 1 single bit in the original input, then the hash changes completely (not slightly).
Although the input can be big or small, an outputted hash always has the same length. Moreover, the operation is one way: it’s easy to go from an input to the hash, but it’s hardly impossible to go from a hash to the input.
Given this short introduction, we can now say that, given a file
FileName.ext, and given an hash function, you can always generate the hash of
FileName.ext, and that hash is always the same, as long as the file
FileName.extdoes not change, even for a single bit.
Hash is typically represented in hexadecimal format, something like:
File to hash process
An hash is a very short representation of the file. It has lost the meaning of its content, but it's uniquely connected to the original file. Using an hashing function such as SHA-256, the probability of having two files generating the same hash is so small, that we can ignore it.
When you publish something on a blockchain, such as Ethereum, the data published are included in a block and immutably stored. A block is minted at a given time, stored in the blockchain too, and it's verified by a large number of validators.
When you publish an hash, you're saying that the file existed prior to the block in which the hash is registered.
If in the future someone challenges you saying you created a specific file after a certain date, you can easily prove he's wrong by showing the hash stored on blockchain.
A Non-Fungible Token (NFT) is a representation of something that cannot be divided. In tProof, each hash published on blockchain is represented by an NFT, with the following core metadata:
- the hash representing the file
- a name (optional), to easily identify it
- a description (optional) to better understand it's content
- a file URL (optional) to view the file that generated the hash
Being a standard ERC-721 token, the NFT can be transferred, sold and even burned.
As you'll be able to see in the next section of this guide (Certify your first file), using our Web App you can easily store the hash of a single file on Ethereum, and receive an NFT representing the given hash.
These are the steps a user has to follow
- Visiting our Web App on app.tproof.io
- Connect wallet. The wallet must have a minimum amount of native token balance (ETH or MATIC) to send the transaction
- Select the file(s) to certify
- Decide whether to publicly publish the file or not (see later for details)
- Click on "Certify" and sign the Ethereum transaction
- Once the transaction has been approved, an NFT representing the hash will be available in the wallet
In case the user would like to publish the file, so matching the hash with a public file URL,the cost of the operation is a little bit higher due to the process required to certify that the provided file matches the published hash. As we're a decentralized solution, to achieve this we use ChainLink oracles, and a more detail explanation can be found in the technical section.
When you publish the hash on chain, you can then decide whether to combine the file URL with the hash, or just keep the hash.
We understand not all the files can be made public, and not publishing the file does not affect the validity of the hash. With a public file, though, anyone can both see the file connected to it, and always certify it's the one matching the given hash, without asking you for it.
For true immutability of published files, we use Arweave network as primary storage layer. If you certify a file using our UI, and you decide to publish it, we'll take care of uploading it on Arweave network for you, with no extra costs for you.
As mentioned above, to certify the match between a file URL and its hash, and to then include the URL inside the NFT, we'll use the power of ChainLink Oracles, that will certify the hash of a given file , available at a given URL, matches the one published on chain.
If you have more than one file to certify, you have two options:
- certify files separately, producing one NFT for each file
- produce a combined .zip file and certify it
The result is exactly the same, as long as the ZIP file respects the current size limitations we've put in place (see Current Known Limitations). With one large ZIP file, you'll pay just one verification fee, but you cannot treat them separately. Just remember to not edit (add/remove files) from the ZIP you have certified, as this operation changes the file, along with its hash.
As always, the solution depends on your needs. What matters is that, either way fully certify your files!
As of now, we've set a small amount of limitations to avoid network ingestion. If you are working on a custom project and would like to raise them, please contact us!
- Max file size is 100MB. Higher size won't pass the ChainLink Oracle verification. If you're not planning to make the file public, then you don't have any size limitation, as long as you're able to compute the hash
- You cannot create more than 100 NFTs with a single call, thus verify more than 100 files with a single operation