The Arbor Protocol, or more simply called Arbor, is a schelling game where the objective is to publicly co-create songs worthy of purchase by NFT collectors.
LIVE DEMO: https://arbor.audio
This application is run on the Polygon Mainnet network. All contracts are deployed at the following addresses:
Contract | Address |
---|---|
ArborAudioCollections | 0xf6c55e9fAeeaa214f4B23c92e0C88953D19e3dD0 |
StemQueue | 0x222bF026aCd1Aece8DB92172F161D63AaC369Bba |
Verifier20 | 0x410c16A302d7672a9bEEBE6aF0E4c37122244E13 |
PoseidonT3 | 0x5616971539C1d6aCb632A997436f66eA35f66CBC |
IncrementalMerkleTree | 0x55D5452Ba831D0aa0Dd0fc8D304D3bcAE8220385 |
Arbor uses zero knowledge technologies to incorporate anonymous voting on stems that are within a Project's Stem Queue. It accomplishes this by using a series of zkSNARKs and relying on some of the packages to incorporate these into the dApp.
Library | Use Case |
---|---|
@semaphore-protocol/group | To create the on-chain Semaphore voting group for a given Project |
@zk-kit/identity | To create the anonymous identity for the voter |
@zk-kit/protocols | To generate the off-chain proof and witness to submit to the on-chain verifier that a voter is a member of the Project's voting group |
The workflow for the zkSNARK use with Semaphore groups within the dApp are as follows:
First, clone this repository to your local machine:
git clone https://github.com/arbor-protocol/ui.git
There is some local setup that needs to happen to fully run this client application locally.
Dependencies:
You can download the latest version of Node.js here. You can check that you are running NPM and Node with the following commands:
node -v
# v16.14.0
npm -v
# 8.3.1
Install the client dependencies with the following command:
yarn install
# or
npm install
Next, set up local environment variables by copying over the values from .env
to a .env.local
file. Run the following command:
# Unix
cp .env .env.local
# windows
xcopy .env .env.local
NOTE: Please reach out to the core team for a set of values to fill in your local env file.
Finally, you can run the development server using the following command:
yarn dev
# or
npm run dev
Open http://localhost:3000 with your browser to see the result.
This client application is using the built-in Next.js API routes that read and write to a local Mongo database. Here are our recommended steps for getting up and running with a local MongoDB environment:
We recommend using MongoDB Community Edition, because it is free and has all the necessary features.
This will set up a host to run in the background on the machine. You can then connect to it via a number of methods when it is up.
There are many ways to interact with a MongoDB host. My recommendation is to use a GUI, as it makes for viewing the data easily, and MongoDB Compass is free and easy to use. Install it using the documentation here.
Once MongoDB Compass is installed and you have a MongoDB host running in the background, you can now connect the client to the host and set up this new connection. Open up Compass and click "New Connection" in the top left of the GUI, or in the menubar. Paste in the local connection string; it should look similar to this on Mac:
mongodb://localhost:27017/?readPreference=primary&appname=MongoDB%20Compass&ssl=false
Create a new database for Arbor. Title it arbor-protocol
or whatever suits your fancy. It may prompt you to add a collection to it as well. Please add a users
collection.
The important bit is to update your local environment variables in the client app. Update the following in .env.local
to your new connection string:
MONGODB_URI=mongodb://localhost/arbor-protocol
This will now allow the client app to work with the local MongoDB instance, and you can now interact with it through Compass as a GUI.
NOTE: You can always shut down the background mongo
daemon that's running after using it. For Mac and Homebrew users, you can check that it's running with brew services list
, and then you can shut it down with brew services stop mongodb-community
. For Windows users, it would be net stop MongoDB
, which is the default service name from the installer.
We encourage the open-source atmosphere. If you find any bugs or issues with this repository, don't hesitate to file an issue for it. We will work to continually engage with these issues and encourage you to contribute.