Giter Site home page Giter Site logo

bonedaddy / proveit Goto Github PK

View Code? Open in Web Editor NEW

This project forked from noahzinsmeister/proveit

0.0 1.0 0.0 636 KB

Implements proof of historical data possession on the Ethereum blockchain

License: GNU General Public License v3.0

Python 8.06% JavaScript 35.14% Solidity 56.80%

proveit's Introduction

ProveIt

At long last, we have the technology. You can finally prove to your friends that you liked that band before they were cool! 👌

To Interact with ProveIt

Visit the shiny and highly functional ProveIt website!

Some Semi-Technical Background

ProveIt implements proof of historical data possession on the Ethereum blockchain. What this means in practice is that any Ethereum address can submit a 32-byte cryptographic hash to ProveIt's ledger and gain the ability to prove that the owner(s) of this address wrote/possessed the text/data that resolves to the hash at a particular time. The ledger also allows addresses to stake arbitrary amounts of Ether alongside their entries, lending credibility.

Hypothetical Use Cases

  • Alice is a rabid Elon Musk fan, and wants to make a prediction about Musk's glorious future endeavors. Using her Ethereum address AddressAlice, Alice could submit By 2030, a company founded or owned in part by Elon Musk will have delivered a human to the surface of Mars. to the ProveIt ledger at time T. At any point from now until 2030, Alice could submit evidence of her ownership of AddressAlice in standard ways (i.e. by signing a credible message via something like the Etherscan verifySig tool), thereby proving that she made this statement at time T. This makes her seem prescient, and more importantly, affirms her Musk fanhood. One could imagine, however, that a rival Musk supporter Bob might submit many such messages, varying the year, and revealing only the one that makes him appear most credible. To combat this issue, Alice can lock up an arbitrary amount of ether, x, alongside her statement. This amount cannot be recovered without destroying the associated ledger entry. If we assume that Bob must submit 20 different entries to have a high probability of ending up with at least one very close prediction, he’s forced to lock up 20*x ether to guarantee that his revealed entry will have the same amount of credibility as Alice's, dissuading him from attacking.
  • Alice also moonlights as an amateur paparazza, and manages to snap an incredibly compromising flattering photograph of Elon at time T. She’s desperately worried that the photo will be stolen and published by Bob at T+1, depriving her of all potential proceeds. If Alice wants to be able to prove that she possessed this photo at T she could simply make a (cryptographically secure) 32-byte hash of this photograph, and store the hash in ProveIt. The data that produced this hash will of course be unknown at T, but upon Bob's release of the photo at T+1, Alice could prove her prior possession by letting anyone see that the photo hashes to the entry that she made in ProveIt at time T.
  • Alice's day job is as a professional economist. She runs a lot of randomized controlled trials (RCTs), and in the spirit of value-free scientific inquiry, she often wants to publicly commit herself to a particular statistical hypothesis H0 before running an RCT to prevent ex-post p-hacking. She could of course use the American Economic Association's RCT Registry, but centralized solutions are so 2017. A better idea would be to formulate an appropriate H0, store its hash in ProveIt, and reveal it after the RCT has concluded. In addition to the commitment mechanism, this method has the benefit of not revealing H0 to rival economists (looking at you Bob) who might steal her idea. Of course, nothing prevents Alice from submitting many H0 s, and only revealing the most favorable one ex-post. To combat this, verifiers should only trust Alice if she submits her hash to ProveIt, publicizes it along with her name, and associates it with her current project, all before running the RCT. This reputationally commits her to a single H0.

Technical Notes

  • While building ProveIt, I realized that having set functionality would be helpful, so I implemented it in contracts/Sets.sol. It's quite efficient, with O(1) insertion, removal, and existence checks.
  • Contracts of interest are deployed at:
Contract Address Link Network
Prover.sol 0x117ca39dffc4da6fb3af6145dfff246830637fe2
0x286e1143ab350d0238be4494da6dab9ca3662517
0x286e1143ab350d0238be4494da6dab9ca3662517
verified on Etherscan
Etherscan
Etherscan
Mainnet
Rinkeby
Ropsten
Hash.sol 0xca260ffffb0270ee07ec6892fa9d44f040454e4d
0x125bbe680d2c6665151ad8c9c89727a64683fdcb
0x125bbe680d2c6665151ad8c9c89727a64683fdcb
verified on Etherscan
Etherscan
Etherscan
Mainnet
Rinkeby
Ropsten
Sets.sol 0x48d904b3bf1cfcd7e1ce2dbcf7dcaecf0b0575c6
0x2aacb774a7214075372b52e24ff7391a4e3ea883
0x2aacb774a7214075372b52e24ff7391a4e3ea883
verified on Etherscan
Etherscan
Etherscan
Mainnet
Rinkeby
Ropsten

Tips

Accepted, not required! ETH: 0x8688a84fcFD84d8F78020d0fc0b35987cC58911f

proveit's People

Contributors

noahzinsmeister avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.