A key application of Blockchain being currently explored is a Decentralized Energy network. The idea stems from a neighborhood where certain Residents are producing energy through Solar panels or other means, and can sell excess energy to Residents needing energy. The transactions would be based on coins in each Resident's account. As per a pre-determined contract and rate, the coins would be debited from the consumer and credited to the producer, for a certain billing period. Each transaction would need to be atomic and added to a Blockchain ledger for trust and verification. The network can include Banks to transact coins for Fiat currency (USD). The network can have Utility Company who can buy or provide energy through the network.
In this developer journey, we will create such a Blockchain application using Hyperledger Composer. The network consists of Residents, Banks and Utility Companies. Residents can exchange coins for energy among each other. The application assumes a pre-paid system where transactions occur after the energy is consumed and the values are updated. The Resident can exchange coins for Fiat money (USD) with Banks on the network. The Residents can also transact coins for energy with a Utility company on the network.
- The administrator interacts with Decentralized Energy UI comprising of Angular framework
- The application processes user requests to the network through a REST API.
- Implements requests to the Blockchain state database on Hyperledger Fabric v1
- The REST API is used to retrieve the state of the database
- The Angular framework gets the data through GET calls to the REST API
- Hyperledger Composer
- Angular Framework
- Loopback
Follow these steps to setup and run this developer journey. The steps are described in detail below.
- Docker (Version 17.03 or higher)
- npm (v3.x or v5.x)
- Node (version 6.x - note version 7 is not supported)
- to install Node v6.x you can use nvm
- Hyperledger Composer
- to install composer cli
npm install -g composer-cli
- to install composer-rest-server
npm install -g composer-rest-server
- to install generator-hyperledger-composer
npm install -g generator-hyperledger-composer
- to install composer cli
- Clone the repo
- Setup Fabric
- Generate the Business Network Archive
- Deploy to Fabric
- Run Application
- Create Participants
- Execute Transactions
Clone the Decentralized-Energy-Composer code
locally. In a terminal, run:
git clone https://github.com/IBM/Decentralized-Energy-Composer
These commands will kill and remove all running containers, and should remove all previously created Hyperledger Fabric chaincode images:
docker kill $(docker ps -q)
docker rm $(docker ps -aq)
docker rmi $(docker images dev-* -q)
Set Hyperledger Fabric version to v1.0-beta:
export FABRIC_VERSION=hlfv1
All the scripts will be in the directory /fabric-tools
. Start fabric and create profile:
cd fabric-tools/
./downloadFabric.sh
./startFabric.sh
./createComposerProfile.sh
Next generate the Business Network Archive (BNA) file from the root directory:
cd ../
npm install
composer archive create -a dist/decentralized-energy-network.bna --sourceType dir --sourceName .
The composer archive create
command has created a file called decentralized-energy-network.bna
in the dist
folder.
Now, we are ready to deploy the BNA file to Hyperledger Fabric:
cd dist
composer network deploy -a decentralized-energy-network.bna -p hlfv1 -i PeerAdmin -s randomString
You can verify that the network has been deployed by typing:
composer network ping -n decentralized-energy-network -p hlfv1 -i admin -s adminpw
First, go into the angular-app
folder and install the dependency:
cd ../angular-app/
npm install
To start the application:
npm start
The application should now be running at:
http://localhost:4200
The REST server to communicate with network is available here:
http://localhost:3000/explorer/
Once the application opens, create participants and fill in dummy data. Create Residents, Banks and Utility Companies.
Execute transactions manually between Residents, Resident and Bank, and Resident and Utility Company. After executing transactions, ensure the participants account values are updated.
At the end of your session, stop fabric:
cd ~/fabric-tools
./stopFabric.sh
./teardownFabric.sh
This application demonstrates a basic idea of a decentralized energy network using Blockchain and can be expanded in several ways:
- Adding specific permissions and participant access
- Setting up real time transactions among participants
- Integrating with IoT to read from power meter and distribute energy