Make sure you’ve got a recent version of:
- Node.js - We suggest using NVM to handle it
- Docker and Docker-Compose - We use docker to run our database. You can skip it if you have Postgres installed locally.
- Yarn - Fast, Reliable, and secure dependency management.
- Lerna - A tool for managing JavaScript projects with multiple packages.
- ARK Desktop Wallet - ARK Desktop Wallets to see the transactions
To begin, create a root folder to contain the ark core and the ark-taco-shop components.
cd ~
git clone https://github.com/ArkEcosystem/core.git
cd core
git fetch https://github.com/arkecosystem/core 2.5.1:2.5.1
git checkout 2.5.1
yarn setup
yarn docker arkWe will use ARK core's docker files to make it easier to create/manage the database. If you prefer to use postgres directly, skip the section below and create a new database called ark_testnet.
cd ~/core/docker/development/testnet
docker-compose up -d postgresIf you need to remove it, you can run the following:
cd ~/core/docker/development/testnet
docker-compose down -vClone the MLH/localhost-ark repository:
cd ~/core/plugins
git clone https://github.com/MLH/localhost-arkThis repository contains two different plugins:
- ark-taco-shop-api - the server plugin, that provides backend capabilities and integrates with ARK's blockchain
- ark-taco-shop - the client plugin, that provides frontend capabilities and integrates with ark-taco-shop-api
To install the server, copy the ark-taco-shop-api plugin to the ARK core's plugins folder:
cd ~/core/plugins
mv ./localhost-ark/ark-taco-shop-api ./We will be using testnet as a local network to run ARK. To configure it, modify the file core/packages/core/bin/config/testnet/plugins.js and copy the contents of the configuration object from the file localhost-ark/ark-taco-shop-api/src/defaults.ts, and append it to the plugins.js file, like showed below:
{
'@arkecosystem/core-event-emitter': {},
'@arkecosystem/core-config': {},
...
},
'@mlh/ark-taco-shop-api': {
enabled: process.env.ARK_INVENTORY_API_ENABLED || true,
server: {
enabled: process.env.ARK_INVENTORY_API_SERVER_ENABLED || true,
host: process.env.ARK_INVENTORY_API_SERVER_HOST || "0.0.0.0",
port: process.env.ARK_INVENTORY_API_SERVER_PORT || 5000,
},
}
}Make sure to change the database properties to use the database configs you have set up before.
cd ~/core
yarn setupcd ~/core/packages/core
yarn full:testnetThe output may be a bit verbose, but you should see the message ark-taco-shop-api available and listening on http://0.0.0.0:5000 in it.
To test it, make sure the url http://0.0.0.0:5000/api/taco/products returns a valid json, like the one below:
{
"results": [],
"totalCount": 0
}Access http://0.0.0.0:5000/inventory and use the form to submit a csv. It expects the following format:
PRODUCT_CODE1,PRODUCT_NAME1,PRODUCT_DESCRIPTION,PRODUCT_IMAGE_URL,PRODUCT_PRICE_IN_DARK,QUANTITY
PRODUCT_CODE2,PRODUCT_NAME2,PRODUCT_DESCRIPTION,PRODUCT_IMAGE_URL,PRODUCT_PRICE_IN_DARK,QUANTITY
PRODUCT_CODE3,PRODUCT_NAME3,PRODUCT_DESCRIPTION,PRODUCT_IMAGE_URL,PRODUCT_PRICE_IN_DARK,QUANTITY
PRODUCT_CODE4,PRODUCT_NAME4,PRODUCT_DESCRIPTION,PRODUCT_IMAGE_URL,PRODUCT_PRICE_IN_DARK,QUANTITY
PRODUCT_CODE5,PRODUCT_NAME5,PRODUCT_DESCRIPTION,PRODUCT_IMAGE_URL,PRODUCT_PRICE_IN_DARK,QUANTITY
PRODUCT_CODE6,PRODUCT_NAME6,PRODUCT_DESCRIPTION,PRODUCT_IMAGE_URL,PRODUCT_PRICE_IN_DARK,QUANTITYThere is an example file: localhost-ark/ark-taco-shop-api/inventory-file-example.csv
To install the client, copy the ark-taco-shop plugin to the ARK core's plugins folder:
cd ~/core/plugins
mv ./localhost-ark/ark-taco-shop ./We will be using testnet as a local network to run ARK. To configure it, modify the file core/packages/core/lib/config/testnet/plugins.js and copy the configuration object from of the file localhost-ark/ark-taco-shop/src/defaults.ts, and add it like showed below:
{
'@arkecosystem/core-event-emitter': {},
'@arkecosystem/core-config': {},
...
},
'@mlh/ark-taco-shop': {
enabled: process.env.ARK_TACO_SHOP_ENABLED || true,
server: {
enabled: process.env.ARK_TACO_SHOP_SERVER_ENABLED || true,
host: process.env.ARK_TACO_SHOP_SERVER_HOST || "0.0.0.0",
port: process.env.ARK_TACO_SHOP_SERVER_PORT || 3000,
},
inventoryApi: {
sender: process.env.ARK_TACO_SHOP_INVENTORY_SENDER_ADDRESS || "AJjv7WztjJNYHrLAeveG5NgHWp6699ZJwD",
passphrase:
process.env.ARK_TACO_SHOP_INVENTORY_SENDER_PASSPHRASE ||
"decide rhythm oyster lady they merry betray jelly coyote solve episode then",
recipient: process.env.ARK_TACO_SHOP_INVENTORY_RECIPIENT || "ANBkoGqWeTSiaEVgVzSKZd3jS7UWzv9PSo",
uri: process.env.ARK_TACO_SHOP_INVENTORY_API_URL || "http://0.0.0.0:5000/api",
},
}Notes:
- Make sure to change the
inventoryApi.uriproperty to set to the IP address of theserver. - Make sure to configure the
inventoryApi.senderandinventoryApi.passphraseproperly. You can find valid passphrases in the testnet config filecore/packages/core/bin/config/testnet/delegates.json. Use ARK Desktop Wallet to import the passphare and get the wallet's address. - To register the client as a node of the ARK network, change the file
core/packages/core/bin/config/testnet/peers.jsonand add server's ip to the list.
cd ~/core
yarn setupcd ~/core/packages/core
yarn full:testnetThe output may be a bit verbose, but you should see the message ark-taco-shop available and listening on port 3000 in it.
To test it, access the frontend using the link http://0.0.0.0:3000. You should see the homepage.