agora
agora copied to clipboard
📝Agora is an off-chain governance tool for decentralized communities.
Agora
A place for the Decentraland community to vote on important topics
Running the project
The core technologies of the marketplace are:
- React and Redux for the front end
- nodejs, PostgreSQL
- Ethereum nodes and a wallet to use on the browser (Metamask for example).
- TypeScript for static type checking and code transpilation TSLint alongside prettier to lint the code
Once those dependencies are installed you can configure each part of the project.
The backend lives on the /src
folder and the front on the /webapp
folder.
Keep in mind that both sides use dotenv
via decentraland-commons to configure the environment. As such, you'll need to create your own .env
files, following the .env.example
s located on each folder.
First of all, you'll need to run npm install
on both directories. Once that's done, you can move to configuring each part:
Back-end
-
Creating the DB user
Create a PostgreSQL named agora. You can do it running$ createuser agora
on the terminal or by running the queryCREATE USER agora;
-
Creating the database
You'll need to create aagora
database. You can do it running$ createdb -O agora agora
on the terminal or by running the queryCREATE DATABASE agora OWNER agora;
. -
Adding the .env files
Create a.env
file on the/src
folder and fill it following the.env.example
file found there. You can skip most variables as they have a default value. There are some notable exceptions likeCONNECTION_STRING
which might look something likeCONNECTION_STRING="postgres://localhost:5432/agora"
-
Migrate the database
Once you have your database you can go ahead and run the database migrations. To do it, simply runnpm run migrate up
. We use node-pg-migrate behind the scenes and every argument aftermigrate
will be forwarded to it. You environment will be picked up automatically from the/src/.env
file, but you can override theCONNECTION_STRING
by explicitly adding it like thisCONNECTION_STRING='' npm run migrate up
-
Running the initialize script
Just runnpm run init-db
. -
Running an Ethereum node
If you want to be able to get data from the Ethereum blockchain, you'll need to have a node running onhttp://localhost:8545
. You can use Parity, geth, etc. -
Running the server
To run the server just runnpm start
on the repo root directory. -
Run watchers
If you want to keep your database up-to-date with the blockchain, you need to run this watcher:npm run monitor-balances
. Keep in mind that the address you use for each contract will determine the network. For more information in event watching, check here.
Front-end
-
Adding the .env files
Create an.env
file on the/webapp
folder and fill it following the.env.example
file found there. You will need to specifyNODE_PATH
to besrc/
,REACT_APP_API_URL
to behttp://localhost:5000
(unless you changed the default server configuration, if so point to the righthost:port
) andREACT_APP_MANA_TOKEN_CONTRACT_ADDRESS
to Ropsten's MANAToken address:0x2a8fd99c19271f4f04b1b7b9c4f7cf264b626edb
. -
Running the front-end
You will need to first have the server running (see above). After that just jump into the webapp folder$ cd webapp
and start the local development$ npm start
Migrations
To keep your database up to date, you'll need to run npm run migrate up
each time a new migration is introduced. Your database version lives on the pgmigrations
. Check node-pg-migrate for more info.
Seed
If you need some test data to test the marketplace, you can use the seed for quick features. Run npm run seed generate MODEL_NAME -- --amount NUMBER
Translate
You can translate automatically from English to the other locales by running the command npm run translate
, this command will compare all the other locales to en.json
and if it finds any missing translation it will use Google Translate to add it to the corresponding locale.