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.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:
- Creating the DB user
Create a PostgreSQL named marketplace. You can do it running$ createuser marketplace
on the terminal or by running the queryCREATE USER marketplace;
- Creating the database
You'll need to create amarketplace
database. You can do it running$ createdb -O marketplace marketplace
on the terminal or by running the queryCREATE DATABASE marketplace OWNER marketplace;
. You can create amarketplace_test
database if you want to run tests against it. - 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/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 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
. 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/src
folder and run theserver.js
script 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.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/v1
(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
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.