Coder Social home page Coder Social logo

babywoolball's Introduction

Baby Woolball - A name system for humans


Baby Woolball Mascot

Baby Woolball is a blockchain name system where only humans can have names. It helps people know if they talk with humans or AIs online.

To have a Baby Woolball name people need to submit a zk proof of personhood. With ZK users can keep their privacy while still being able to prove qualitative claims about themselves, such as humanity or proof of age.

Baby Woolball names are of the form neiman#, where the # symbolizes the name belonging to "Baby Woolball".

How to use Baby Woolball

To use Baby Woolball users first register a name and set their private keys to it. The name is disabled at first. Users have 30 days to submit proof of humanity to enable it.

The owner of the Baby Woolball contract sets a Merkle tree root of the trusted entities for creating proof of personhood certificates. The public keys of the entities are the leaves of the Merkle tree.

The user needs to get a proof of personhood certificate from one of those entities. These certificates are created with Safecat. Using this certificate, the users create a zk-certificate stating that they are human. The user then submits the zk-certificate to Baby Woolball to enable the program.

The certificate standard of Baby Woolball also includes a "birthdate" field, enabling in the future to also post proof of age.

Tech stack

Woolball is built using Noir, Rust, and Solidity.

Rust. Rust is used to generate signed certificates for Noir to use. The certificates are hashed using the Poseidon hash function and signed with EdDSA signatures on the Baby Jubjub curve. These cryptographic tools fit well with the current requirements of Noir.

The signatures are done with a CLI cryptographic tool I previously published called "Safecat". I created a special branch of Safecat for the Hackathon with extra functionality needed to generate the certificates for Baby Woolball.

At the first version, the certificates were json strings. This turned out to be problematic with Noir which is both not good with manipulating string and is very slow with it. In the final version, the certificates are an array of BN254 curve elements, a format that integrates perfectly with Noir needs.

Noir. Noir is used to create zk proofs of personhood using the certificates. Noir also generates a Solidity verifier to be used to verify the proofs on-chain. See the Noir program here.

Solidity. The name system is written in Solidity. It is a new code base, not a fork of any existing name system.

zk proof of personhood

A proof of personhood is a digital certificate attesting that someone is a unique human person. Such certificates are officially issued by organizations like Worldcoin or CAceert, but can also be unofficially interpreted by methods of collecting stamps s.a Gitcoin Passport.

However, to use those certificates you need to show them which violates your privacy. ZK proof of personhood is a way to have a program create a new certificate for you, based on the old ones. The new certificate simply states that you are a person (and possibly also a proof of age), but uses ZK to not expose any existing certificates you have.

Related projects

ZkPass is a project generating zk proof of personhood based on stamps. Their protocol could be adjusted to verify Woolball name, though it requires internal work of their team since certificates are issued for a blockchain address, while Woolball requires the issuance of a name and an outside public key.

babywoolball's People

Contributors

eyalron33 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.