I’m happy to announce my collaboration with Proofivy, a tool to share verifiable hypotheses and data, while keeping them undisclosed. The concept is to use hashed data in combination with blockchain technology to create timestamped untamperable data. An easy way to prove the you proposed a hypothesis at the time you did, without making it public at that time.
The complex explanation is below, but in practice it works like this:
I’m going to submit my hypothesis to the blockchain.
Hypothesis: Follicular Dendritic Cells can harbor multiple antigens simultaneously.
I added a random number from wolframalpha (vYTDgSzCxkriNcujzzwQUThHgMGyzUA1) to the hypothesis because it is short and “could be brute-forced”. Now I go to www.proofivy.com/member, enter my guild name (gc_lab) and post my hypothesis, which calculates a CID (hash) from text.
I get this hash (CID):
This hash I can commit to the blockchain. I paid for the transaction with matic and now for ever anyone can check that I posted this hypothesis October 8th 2022 at 12.23 UTC In this example we calculated the hash of plain text, but it’s also possible to calculate the hash of any file on your computer and commit it to Proofivy.
How to check?
Now that the hypothesis is submitted we want to prove we commited it when we said we did. The quickest way is to check the Proofivy contract on polygonscan. Polygonscan indexes the Polygon blockchain. Click on the transaction you did to see details. You can see I indeed submitted on October 8th 2022 at 12.23 UTC And that gc_lab submitted QmYXWP3GwRr7irszj1xgXzJhXQZbkDZdiUW5JGF6DkxKiZ at that time!
Below you can find other ways to query the blockchain.
When I’m ready to share my hypothesis with the world, I publish the original data. Everyone can verify the hash by calculating it from the data, and see when I committed it to Proofivy.
In depth explainer and tools
Proofivy stores hashes and messages as state data on Polygon. This data is stored using public variables, so callable by other smart contracts. Any commited data can never be changed or removed. Every commit or message also emits an event for convenience.
All commits and messages are enumerated, for guilds numbering is per guild. Guild members are stored with a mapping table from guild strings to addresses.
For an example of how to query the blockchain data using Python, check out this Jupyter notebook.