Starting up a new reputation systems has a lot of fine tuning and deciding for the initial set of trusted counterparts can be tough. If there was a way to use existing provable data without having a need to get them to a contract without using an oracle it would help to make the "reputation system" itself actually trusted.

I wanted to use onchain data like association of an address with a contract with historical significance or simply a contract that to a certain extend proves a skill or knowledge of the person possessing the key as the initial constrain for the reputation system. Like for instance having a trusted initial set of reputable parties based on their participation on TheDAO, having Piper's Devcon2 token, comming to Blockparty/Kickback event, having a MakerDAO CDP open, etc. OR simply beign around for long enough.

What it does

Generates a Merkle proof of having a used address at a certain block hash (proves the address was "out there" at some point of time. Then verifies this fact on-chain (Solidity) and if the verification passes acknowledges the key-pair as an 'OG'. OG-auth a simple authentication solidity contract which can, for instance, be used for DAO voters.

How I built it

Started on a wrong track by setting up an old geth version with EIP1186 not noticing it was already merged into the latest release.

  • Synced a GoerliTestnet node on AWS.
  • Tested stuff with
  • Switched to eth-proof (JS lib)
  • Used Truffle (and dapp template)

Challenges I ran into

  • Syncing ropsten is a pain (switched to Goerli)
  • A lot of the codebase is not merged branches -> lot of rollbacks

Accomplishments that I'm proud of

I learned a lot of stuff!

What I learned

Open source is amazing, I'm learning this again and again. Lot of stuff is out there already and just sits in someones repo waiting to be discovered!


  • EIP1186
  • Merkle proofs
  • GoerliTestnet rocks

What's next for OG-auth

1) Expanding to more focused proofs - facts/states from individual contracts & proving things from other blockchains as well.
2) Proposing adding a global variable to Solidity enabling reading the latest StateRoot hash

Built With

Share this project: