Get started with a minimal MachineFi architecture including an MQTT broker, Postgres database, Hasura engine and a basic Layer-2 service to implement the data logic based on data received from devices and blockchain smart contracts that manage the authorization and tokenomics part. A simple data simulator script is also included to facilitate prototyping.
Note:
A full tutorial is available at https://developers.iotex.io/posts/deploy-a-machinefi-dapp.
Please stay tuned on next releases of the IoTeX MachineFi architecture.
- NodeJS: tested using version 14
- Python 3
- Npm
- Docker and docker-compose
Open a terminal on the directory where you have cloned this repository.
Install npm packages:
npm installSetup your environment variables. This can be done using an .env file. Copy the provided template to run use the defaults:
cp .env.template .envLaunch the services using docker-compose:
docker-compose upCreate the database:
./create-db.shDeploy the contracts:
cd blockchain
npm install
echo IOTEX_PRIVATE_KEY=<YOUR_PRIVATE_KEY> > .env
npx hardhat run scripts/deploy.js --network <NETWORK>Edit src/projects/app/project.yaml and change startHeight and DataSourceRegistry to match your contract details.
Register a device:
cd blockchain
npm install
npx hardhat registerDevice --deviceaddress <DEVICE_ADDRESS> --contractaddress <CONTRACT_ADDRESS> --network <NETWORK>Run the simulator:
cd simulator
python3 simulator.pyBuild the data layer app and initialize the database:
npm run build
npm run initdbStart the data layer app:
npm run appYou can monitor other contracts just by adding them to src/projects/app/project.yaml. For each contract, you should define your event handlers based on your application.
Edit handlers.ts to add additional handlers for contract events and MQTT data received events.
You can add more tables to the database by modifying the files inside src/project/app/models.
Open the folder in VS Code and use the provided launch configuration to launch the app in debug mode.