New Ethereum talks, every Monday. The week's conference uploads by event, in your inbox.

Loading player…

cabal: anonymous internet clubs, Applied ZK - Day 1

Ethereum DEV NLSun, Oct 9, 2022, 12:00 AM

We're presenting cabal.xyz, a way to gate discord servers with ETH information while hiding your identity. Speaker(s): Lakshman Sankar, Uma Roy Hosted at Devconnect Amsterdam, 2022 Visit the website: https://devconnect.org/ Or follow @EFDevconnect on Twitter

Transcript

[Music] so uh hey everyone we're presenting cabal um excellent so uh brief agenda uh i'll talk quickly in pros about what it is um and then we'll give a demo we'll talk about uh actually the why is app so um we'll give a demo talk about how it works and then we'll talk about why and the bigger picture and sort of like what's next so in in brief cabal is just a collab land which is uh eth activity-gated discord channels but maintaining user privacy was their knowledge proofs and rather than rather than talking too much about what that means i'll let uma give the demo but the key the key thing is we're sort of like figuring out the last mile of actual zk apps um a lot of our contribution was getting things working with metamask snaps which is this metamask plugin system um so uh it should actually be usable today and part of what we're showing today is uh an actual running cabal instance for people who attended like private anonymous or private private chat for people who attended devcon one through five um so uh if you want to join and chat with other people from old devcons um come see us later i'll just do this um cool yeah so here's the demo so as uh as lakshman mentioned cabal is basically we set up this def connect anon edition discord server so people from previous dev connects sorry devcons can chat anonymously and we configured it so we invited the cabal bot to the server which kind of manages the roles and we to use the cabal bot you just type configure if you're the admin and you put in i don't know if you guys can see super well but you put in the merkle root and the corresponding role you want and then it'll register that and then if you're a user you go to the cabal verify channel you just type slash verify with the merkle root that you want to verify for and it generates a link uh so i already did that for the we have a i haven't actually been to any devcon so i made a route with just me and lakshman as like a demo and i generated a link for that and so it gives you a link and then you go to our website and the website basically helps you generate the zk proof that you submit to cabal and then cabal will give you the corresponding discord rule so here you can see i'm going to connect to metamask and then i'm going to get my merkle proof in the front end because i need to pass that in for the zk proof and then i'll click generate proof um and you can see that it'll it's starting to run the snap and so if you go to the settings of this mask um so basically uh snap is kind of a way we'll talk about this later in the architecture but it's this secure enclave and metamask where we can compute stuff on your private key and so the private key is an input into our circuit and we'll also go into the circuit later but it's running and so hopefully it should be generating the proof it takes a bit because the wi-fi here is like a bit slow so while that's running i'll kind of go back and talk about the circuit um so our circuit uh you know at a high level it's a pretty simple circuit using uh xerox parks go back to slasher mode um so xerox park some people at xerox park released a ecdsa circuit to basically verify that you control a private key to a particular ether address so that's one component of our circuit um it's a github so you the input your private input is the private key uh you put it in the circuit and then you get out your ether address and then the other part of the circuit um that template plugs into the merkle tree verifier part of the circuit and you have private inputs that are your merkle path elements and your merkle path indices so the merkle proof and then there's a public input output which is the merkle root and then we also have a nullifier so we take the private key and poseidon hash it and get a public output of the nullifier so that's the circuit and then the architecture is we have this web client that basically you get your merkle roon inner merkle proof from and then you can imagine let's check actually if your proof is done okay so our proof is actually done and so you can see we've generated the proof in browser uh if you look at the network tab you can see that i haven't done anything i haven't sent any requests um and here's the proof and then you can submit the proof it goes to our server it verifies the proof is legit and then you're verified so you will go back to discord and now i'll have like this uh test server role so that's kind of the n10 demo um but yeah so so that was like a pretty smooth experience right where the user doesn't even really need to know what's like going on under the hood um it's super simple because they can just use metamask and basically generate the zk proof and submit it to us uh kind of as a contrast a local proving experience might look something like you get the merkle root and the merkle proof uh and then you have to like get your private key create an input.json you download like the wasm and the z key to run the circuit locally you have to install snark gs you have to run it locally you have to copy the proof back to the web client and then you have to like do this whole thing and we actually have a mode in our app to help people do that in case they don't want to use metamask flask or like you know they want to run the local experience but we think it's really important that it's easy for users to use yeah contrasted with the metamask enclave proving experience using snaps you can see that everything's just done in browser and that was the demo so it's like super super simple for the user and i think to our knowledge we are the first people to actually generate a zk proof in a meta mask snap so that was kind of our like big output and contribution of this project that we want to open source and make it easy for everyone to kind of use because it's such a smoother experience and there's a couple tricks and hacks along the way and there's still some things we're waiting to upstream into metamask and obviously we want metamask flask to which is the development version to be upstream into main metamask um so yeah there is a bunch of tricky engineering things there and we're going to give a snap tutorial at our workshop slash breakout session uh so if people are interested in that um yeah come through cool and i'll talk a little bit more about kind of the why and i think how we're thinking about the bigger context of what we're doing um so at a high level i think we we think that uh gaining conversation on activity that people are doing ethereum is demonstrated to be kind of like an interesting primitive for uh for conversation collab land guild.xyz there are a few other projects that sort of like exist within this uh this context um but obviously and you know as a user of these things docsinger address sucks or you know even showing that like one statement about you is linked to other statements about you sucks um so we wanted to kind of explore like is it possible to do it in a way where you reveal no information um and then finally like why why did we go through all this work of like uh integrating snaps um well we think that browser wallets are realistically how people integrate with the internet um or interact with the internet rather uh like there's there's a lot of like theoretical ideas about what we can do with your knowledge fruits but we really want to see how do we how do we get it to that last that last step to like all the people who can use stuff today um and so hence hence the uh the obsession with trying to get things working with metamask um so kind of like the bigger picture uh and this is all this is going to be a little kind of like high level and hand wavy but um we sort of think there's this there's this kind of new primitive that or this new way that people will engage online um that is enabled by uh two things basically these like blockchains existing and zero knowledge proofs existing um we call it credible pseudonymity and it's based on kind of these two key observations so one um and uh this is like since since i guess 2018 2019 uh a lot of like interesting identifying information that people care about like just seems to be gathering on these credibly neutral ledgers signed in some way kind of associated with public addresses that are kind of like a testable from private keys but then the other thing is like people don't people don't necessarily only act uh from their sort of like government-issued identity online there's a lot of pseudonymity on twitter for example and various other platforms and it seems to be like a non-trivial driver a future of economic activity just like pseudonymous speech and action um so this is yes i wanted i want to present like two kind of like uh i i think sometimes sometimes when we talk about identity and speech and stuff like we don't think about like what things look like in a very internet native way uh like uh native to like public key cryptography rather than social security numbers so i want to represent two kind of crazy visions that are sort of motivating us for what the future of speech looks like so one is you have all these kind of like ledgers like eth where people are doing stuff and every piece of activity or speech that someone makes they can choose some arbitrary subset of past activity to associate with it so it's like every single piece of activity or speech um so like financial activity uh tweets whatever uh that happens online in terms of how other people perceive you you choose how you identify it with everything you've done in the past so kind of crazy idea not going to go too much more into it but just like as a really pie in the sky thought it's an interesting thought experiment and then the other is like if you really think what is pseudonymity in like the long term like maybe it's just like this big like kind of like hierarchical dag structure where you have like groups of pseudonyms that point to other groups of pseudonyms and maybe at the root there's like some notion of like your actual identity but it's like everyone is just speaking from like multiple of these pseudonyms um and one of the interesting thoughts here is uh why why should this dag not kind of like being able to grow infinitely in some way we're sort of like building the kind of like glue that attack creates these arrows so i'll quickly talk about kind of like what what i meant to convey here but like let's say there's like some canonical identities to start with then maybe people create pseudonyms that say like i am one of or like some predicate identifying something about these but like without revealing all every exactly what you are and then you can have like new pseudonyms that refer to those pseudonyms and etc and like random remixes of that so why can't this dag just grow forever why can't we have tools to just kind of like arbitrarily relate ourselves to other nims that exist online it seems like zkp's plus ethereum can be the thing that helps that happen um so in terms of what's next uh to get a little bit more tactical uh we have a bunch of ideas uh some some people here included like working on the subvex working on uh zk reddit for example a bunch of ideas to ship kind of like around around these primitives for last mile of zk that we've been developing um we think it's pretty important to actually put things out and like study user behavior uh it's it's it's kind of this new thing we're dealing with this credibly sudan in this speech um so uh we don't want to like theorize too much about the ideal protocol we just want to ship stuff and like actually see how people interface and interact in these like weird weird new like uh environments we create um and then we want to like you know kind of like more specifically to cabal we have we plan to generalize it we want to make it so anyone can kind of like with one click create a merkle root for some youth activity and create a discord server with private channels based on that in terms of infra there's also like a bunch of stuff we want to push on yi sun presented a zk tester earlier i don't know if he's here but um which was basically like you create zero knowledge proofs for uh an arbitrary thing in the ethereum state route um so like obviously this is kind of like this could be a perfect version of our backend but there might be a whole spectrum of like things in between like right now we're very um that's the word i'm looking for our our approach is very specific to like it's like kind of static in a way and like it would be nice to have things that are like self-updating so we have a bunch of ideas for how to do that maybe in the future using za tester maybe in between we have some ideas for how we could like have self updating accumulators on chain which are basically indices of like interesting identifying information um we want to look at we have some id early ideas for mobile wallet stuff but it's a little harder than browser wallet but like that that's that's definitely something we're thinking about we want to look at all the plunkish systems of course like as halo 2 tooling gets to the next step like we'll probably want to switch that in because plookup actually radically improves our proof generation we're there are some interesting ideas at zk summit around remote proof delegation that we want to look into and finally a lot of standardization um we're touching new stuff so it's like really important to sort of like make sure we're not repeating work collectively and yeah we'll we'll be doing a breakout session uh from two to four today kind of like just sort of like trying to figure out the future of all this stuff so feel free to come by and we'll chat more and then i just wanted to kind of like leave with one sort of like interesting provocative question i think like uh we see these curves for like interesting proofs in the browser kind of like dropping really rapidly like three years ago it was really it was like unthinkable to do what would the fact that like um actually generated the proof she generated which involved like ecsa operations in a web browser in like not days or something like that it's like absolutely insane um and so i think it's interesting to project forward maybe another three years and it's like what what happens when those proofs take milliseconds to generate like what kind of crazy uh like like what granularity will people be generating zero knowledge proofs with activity they're doing online i think it's like interesting to think about and probably useful for thinking about what to build next and that's it any questions [Applause] [Music] you

Automatic transcript — names and jargon may be misspelled.