Decentraland's LAND Marketplace
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).
- Babel to transpile the code and ESLint 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.examples 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:
- Creating the DB user
Create a PostgreSQL named marketplace. You can do it running$ createuser marketplaceon the terminal or by running the queryCREATE USER marketplace; - Creating the database
You'll need to create amarketplacedatabase. You can do it running$ createdb -O marketplace marketplaceon the terminal or by running the queryCREATE DATABASE marketplace OWNER marketplace;. You can create amarketplace_testdatabase if you want to run tests against it. - Adding the .env files
Create a.envfile on the/srcfolder and fill it following the.env.examplefile found there. You can skip most variables as they have a default value. There are some notable exceptions likeCONNECTION_STRINGwhich might look something likeCONNECTION_STRING="postgres://localhost:5432/marketplace" - 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 aftermigratewill be forwarded to it. You environment will be picked up automatically from the/src/.envfile, but you can override theCONNECTION_STRINGby explicitly adding it like thisCONNECTION_STRING='' npm run migrate up - Running the initialize script
Just runnpm run init-db. Once it finishes seeding the database, the script will prompt you to add the latest data from the Blockchain to the database. You'll need to have a Ethereum node for this to work (see below). If you want to run that later, you can usenpm run renew-blockchain-data. - 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, go to the/srcfolder and run theserver.jsscript like thisbabel-node server.js - Run watchers
If you want to keep your database up-to-date with the blockchain, you need to run this watcher:npm run monitor-blockchain. Keep in mind that the address you use for each contract will determine the network. For more information in event watching, check here.
If you don't want to install babel-node globally, you can use npx and install it locally.
- Adding the .env files
Create an.envfile on the/webappfolder and fill it following the.env.examplefile found there. You will need to specifyNODE_PATHto besrc/,REACT_APP_API_URLto behttp://localhost:5000/v1(unless you changed the default server configuration, if so point to the righthost:port) andREACT_APP_MANA_TOKEN_CONTRACT_ADDRESSto 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 webappand start the local development$ npm start
There's a /shared directory where some of the logic shared between backend and frontend lives (i.e. everything related to rendering the map). We have symlinks that point to this directory from the src directories of the server and the UI (src/shared and webapp/src/shared). This symlinks have been versioned in this repo, but if for some reason they don't work (Windows?) you will need to recreate them in order to npm start or npm build this project.
To run the backend tests simply run npm run test or npm run watch:test. You'll need to create your own .env file for the /specs file mimicking the .env.example file that's in there. We do this so you can for example use a dedicated database CONNECTION_STRING="postgres://localhost:5432/marketplace_test".
Remember that if you're using a test database, you'll need to migrate it. You can run CONNECTION_STRING="postgres://localhost:5432/marketplace_test" npm run migrate up to do so.
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.
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, (which will look something like this npm run seed generate Publication -- --amount 2) and follow the prompts
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.
We have documentation for our HTTP API that can be found here.
