/ README.md
README.md
1 # Kurate ReadMe 2 3 4 ## Summary 5 6 There are two distinct ways of describing Kurate depending on Player story. One is from the perspective of **Creators**, the other from the perspective of **Curators**. 7 8 **Creators**: Create public content anonymously through online masks called Personas. 9 10 From this perspective, Kurate is an anonymous social media platform where creators remain private, but post publicly through group identities known as Personas. Creators earn reputation (REP) when Curators vote to Promote their posts. 11 12 **Curators**: Communities anonymously curate content together. 13 14 From this perspective, Kurate is a privacy-enabled group curation application, where people vote on whether a post is in the character of their group identity (known as a Persona). Curators earn reputation (REP) when they vote in-line with the majority of their community. 15 16 ## Kurate: How To Play The Game 17 Players will experience what it's like remain private, but "play" as a public group identity we call a Persona. Players speak "through" or "as" a Persona. 18 19 Sometimes a Persona may "look like" a brand. Sometimes a Persona may "look like" an individual. To play as a Persona means to post content one believes is appropriate for the character of the Persona. 20 21 **Create a post** 22 23 A Player looking to submit a post would ask themselves: "What types of things would this Persona share and amplify if they were a real person, with a real identity?" And then post accordingly. Another question might be "What types of content reflect the character of the community speaking through this Persona?" 24 25 **Curate posts** 26 27 Players help curate content that is "appropriate for the Persona" by voting on whether or not to amplify others' posts. If the community deems a post appropriate, it will be amplified to the Persona's main public page. 28 29 **Reputation** 30 31 Players earn reputation by posting and curating. For example, a Player whose posts are deemed appropriate by the community will gain reputation. And a Player who votes on a post in the same direction as the majority of voters will also earn reputation. 32 33 **What Players can do in Kurate**: 34 - Post anonymously as a Persona. 35 - Vote on the appropriateness of a post from another Player. 36 - Stake reputation on a Post — earning reputation if the community votes to amplify it. 37 - Earn reputation through curating community-appropriate posts. 38 - Anonymously Chat 39 - Create a Persona 40 41 ## Privacy with accountability 42 43 Players who post remain anonymous, but the community decides whether or not to amplify their post. This allows privacy for the Player with community accountability. 44 45 Also, curating and creating Players earn reputation (REP) for positive gameplay (acting in-line with the values of a community). The more REP a Player has, the more they may do in Kurate. 46 47 ## Technology 48 We are using ZK-Proof technology and [Waku](https://waku.org/) to ensure privacy, with a hat-tip to [Unirep](https://medium.com/privacy-scaling-explorations/unirep-a-private-and-non-repudiable-reputation-system-7fb5c6478549), and [Semaphore](https://semaphore.appliedzkp.org/). 49 50 ## For Developers 51 52 0. Install all dependencies 53 ```sh 54 pnpm i 55 ``` 56 57 1. Start blockchain and deploy contracts 58 ```sh 59 cd packages/contracts 60 ``` 61 62 ```sh 63 pnpm start:blockchain 64 ``` 65 66 In another terminal window, compile, deploy the contracts 67 ``` 68 pnpm start 69 ``` 70 71 If successfully, the output should say: 72 ``` 73 GlobalAnonymousFeedContract contract has been deployed 74 Don't forget to set the variables for both the UI and relayer 75 76 PUBLIC_GLOBAL_ANONYMOUS_FEED_ADDRESS=0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0 77 PUBLIC_PROVIDER=http://localhost:8545 78 79 Relayer only 80 PRIVATE_KEY=... 81 82 UI only 83 PUBLIC_RELAYER_URL=... 84 ``` 85 86 2. Start relayer 87 ```sh 88 cd packages/contracts 89 ``` 90 Set the environment variables according to the contract deployment (for private key you can use any hardhat key). Should be: 91 ```sh 92 PUBLIC_GLOBAL_ANONYMOUS_FEED_ADDRESS=0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0 93 PUBLIC_PROVIDER=http://localhost:8545 94 PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 95 ``` 96 97 Build and start the relayer 98 ``` 99 pnpm build 100 pnpm start 101 ``` 102 103 3. Start UI 104 ```sh 105 cd packages/ui 106 ``` 107 108 Set the environment variables according to the contract deployment and where the relayer lives: Should be: 109 ```sh 110 PUBLIC_GLOBAL_ANONYMOUS_FEED_ADDRESS=0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0 111 PUBLIC_PROVIDER=http://localhost:8545 112 PUBLIC_RELAYER_URL=http://localhost:3000 113 ``` 114 115 Start the UI with 116 ```sh 117 pnpm dev 118 ``` 119 120 You can now open the app at http://localhost:5173/ . Just make sure you are using either the `zkitter` or the `zkitter-god-node` adapter. You can configure those in `/dev` route (http://localhost:5173/dev) 121 122 **Are you interested in contributing to Kurate?** 123 124 125 126