Blockchain Application Demo
Making blockchain applications are way way too confusing.
Lets try to cut through some of this complex stuff and take some notes to make it easier for others.
Build out plan:
- Hyperledger
- AWS EC2
- Hyperledger Composer
WTF is all of this?
Briefly, we want to use Blockchain for a few reasons. It works as a storage solution just like a database. However Blockchain has some built in advantages. These advantages come out of its unique design and theoretical concept. These concepts are not particularly important for a Blockchain Application Developer, but understanding how to use these advantages is of the upmost importance.
https://hyperledger.github.io/composer/latest
Programmy Setup
# Not working anymore
# curl -O https://hyperledger.github.io/composer/prereqs-ubuntu.sh
curl -O https://raw.githubusercontent.com/hyperledger/composer/master/packages/composer-website/jekylldocs/prereqs-ubuntu.sh
chmod u+x prereqs-ubuntu.sh
./prereqs-ubuntu.sh
logout out of the ssh session with the terminal shortcut
CTRL + D
then ssh back into the machine
npm install -g composer-cli
npm install -g composer-rest-server
npm install -g generator-hyperledger-composer
npm install -g yo
npm install -g composer-playground
now we have all the tools ready we need to actually install and start a hyperledger chain!
thats easy too — we just download and unzip the provided scripts from Hyperledger and create a default PeerAdminCard to issue IDs to other users.
Cards are very important and we will be tackling them later.
mkdir ~/fabric-tools && cd ~/fabric-tools
sudo apt-get install unzip
curl -O https://raw.githubusercontent.com/hyperledger/composer-tools/master/packages/fabric-dev-servers/fabric-dev-servers.zip
unzip fabric-dev-servers.zip
./downloadFabric.sh
./startFabric.sh
./createPeerAdminCard.sh
Now you have a running Hyperledger blockchain on an EC2 instance. If you don’t believe me try running:
docker ps
Now we can see all the containers started! They’re named accordingly.
Okay big woop — who cares we need to add some functionality and colors and buttons and stuff.
Access UI
Okay okay, now we wants to get as far away from this terminal and get our hands on some of those tools we installed (awesome tool kit).
Heres what were going to interact with
- Hyperledger Composer Web App
- Hyperledger API test page
- REST endpoints for Network
To do this we just need to start the right programs and open the correct ports — also we probably should start a small Business Network to play with!
tmux
composer-playground
CTRL + B + D
Now we open the port 8080 on the security group in AWS
now… we should be able to see the Composer Web App at your instances Public-Ip:8080 in my case its http://18.144.27.159:8080
Awesome!!
and you can even see out PeerAdmin as the first card — this card isn't associated with any Business Network; we just think of them as the the Chain admin — only using them to start new chains and add other admin like cards.
Quick Check:
- We’ve started an AWS instance
- We’ve installed Hyperledger
- We’ve installed tools to make dealing with Hyperledger manageable
- We’ve created a local Network Admin role for deploying chains
- We’ve played around with the demo cases a bit
- We’re killing it
Now were going to add a small app to the chain.
Our App is called Promise
Promise, is a simple application that is built on Blockchain technologies and hopefully will have an iOS UI so people can see how simple using Blockchain can be!
Promise ©
Idea: We often find ourselves making commitments, contracts, agreements or promises with other people.
This app allows a Person to make a promise and another person to agree. If both users agree the promise had been completed they can communicate this to the “Promise contract” on the Blockchain, and when both users agrees its been complete it will return as done.
This idea is to be extended with a penalty for the promise maker if they do not complete and expected competition dates. Also people who keep promises will be rewarded reputation points in future builds.
“make Promises that don’t break on the Blockchain, make a promise without trust”
Model psudeo code
Partipant:
- PersonAsset:
- PromiseTransaction:
- Complete
Model actual code:
asset Promise identified by titleId {
o String titleId
→ Person maker
→ Person taker
o String information
o Boolean makerComplete optional
o Boolean takerComplete optional
o Boolean isComplete optional
}
participant Person identified by personId {
o String personId
o String firstName
o String lastName
o Double reputation
}
transaction CompleteTask {
→ Promise myPromise
}
Okay lets get out own network over to this machine — we’ll use the command scp to achieve this.
scp -i ~/Downloads/hyper-ledger-app-key.pem /Users/davidholtz/2018/Projects/pinky/pinky\@0.0.1.bna ubuntu@ec2-18-144-27-159.us-west-1.compute.amazonaws.com:/home/ubuntu
Now pinky\@0.0.1.bna is sitting in our root directory of this EC2 instance. We can deploy this network on our chain using that PeerAdmin identity we created earlier.
composer network deploy -a pinky\@0.0.1.bna -A admin -S adminpw -c PeerAdmin@hlfv1 -f networkadmin.card
This is the part that is the most tricky for me — and seems to hold a huge amount of the power/potential: Cards.
We just created a new card when we deployed that network with a user called admin. We wrote this identity to a card networkadmin.card and now we want to make sure that card is added to composers knowledge. We check and import the card by running the following:
composer card import --file networkadmin.card
By checking before and after the command we see that we added admin@pinky who is called admin on the pink network to the Connection Profile of our Blockchain. Yes I know this bit is confusing (but is important)
okay, checking the UI everything looks good here too!
Interacting outside of UI
We are doing great, we have a custom Blockchain App deployed and now we want to make it accessible outside of this useful Hyperledger Composer UI.
Good thing this process has been automated too. We are going to use a program called Loopback to generate out REST endpoints. Thanks to things like Swagger this process was automated by the hyperledger team. We just run a few commands to get this REST engine up and running.
tmux
composer-rest-server -c admin@pinky
CTRL + B + D
Cool, now thats running in the background on port 3000. Once again we’ll visit the AWS security groups and add 3000 as an accessible port so we can access it outside of the instance.
Save, and navigate to 18.144.27.159:3000. We are returned a landing page describing what endpoints we have and how to interact with them.
Any developer familiar with REST, can figure out how to build an app from here!
Further Topics
- Coving multiuser sign in
- Covering OAuth2 auth for users.
- Adding custom UI for our App
- Testing functionality
- Key management with OAuth2 and Hyperledger Idenities
Please clap if you liked this article! 😊Any questions please drop a comment 😊