Decentraland's LAND Marketplace
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).
- 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.
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 query
CREATE USER marketplace;
- Creating the database
You'll need to create a
marketplacedatabase. You can do it running
$ createdb -O marketplace marketplaceon the terminal or by running the query
CREATE DATABASE marketplace OWNER marketplace;. You can create a
marketplace_testdatabase if you want to run tests against it.
- Adding the .env files
.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 like
CONNECTION_STRINGwhich might look something like
- Migrate the database
Once you have your database you can go ahead and run the database migrations. To do it, simply run
npm run migrate up. We use node-pg-migrate behind the scenes and every argument after
migratewill be forwarded to it. You environment will be picked up automatically from the
/src/.envfile, but you can override the
CONNECTION_STRINGby explicitly adding it like this
CONNECTION_STRING='' npm run migrate up
- Running the initialize script
npm 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 use
npm 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 on
http://localhost:8545. You can use Parity, geth, etc.
- Running the server
To run the server, go to the
/srcfolder and run the
server.jsscript like this
- 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
.envfile on the
/webappfolder and fill it following the
.env.examplefile found there. You will need to specify
http://localhost:5000/v1(unless you changed the default server configuration, if so point to the right
REACT_APP_MANA_TOKEN_CONTRACT_ADDRESSto Ropsten's MANAToken address:
- 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
/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 (
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
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.