All Projects → IBM → global-citizen

IBM / global-citizen

Licence: Apache-2.0 license
WARNING: This repository is no longer maintained ⚠️ This repository, which contains assets to run a Hyperledger Composer application, is not being actively maintained due to a shift to focus on Hyperledger Fabric. This repository will not be updated. The repository will be kept available in read-only mode.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to global-citizen

visualize-data-with-python
A Jupyter notebook using some standard techniques for data science and data engineering to analyze data for the 2017 flooding in Houston, TX.
Stars: ✭ 60 (+11.11%)
Mutual labels:  ibmcode, call-for-code
banking-digitalization-using-hybrid-cloud-with-mainframes
The following journey will introduce the available Banking APIs published on IBM Cloud with logical business programs running on the IBM Z Mainframe through a simulated retail bank called MPLbank.
Stars: ✭ 21 (-61.11%)
Mutual labels:  ibmcode, call-for-code
watson-vehicle-damage-analyzer
A server and mobile app to send pictures of vehicle damage to IBM Watson Visual Recognition for classification
Stars: ✭ 62 (+14.81%)
Mutual labels:  ibmcode, call-for-code
predictive-model-on-watson-ml
Create and deploy a predictive model using Watson Studio and Watson Machine Learning
Stars: ✭ 51 (-5.56%)
Mutual labels:  ibmcode, call-for-code
crud-using-nodejs-and-db2
Create CRUD application using Node.js and IBM Db2 Database on Cloud
Stars: ✭ 15 (-72.22%)
Mutual labels:  ibmcode, ibmcloud
watson-discovery-ui
Develop a fully featured Node.js web app built on the Watson Discovery Service
Stars: ✭ 63 (+16.67%)
Mutual labels:  ibmcode, call-for-code
powerai-vision-object-detection
Use deep learning to create a model and a REST endpoint to allow your app to detect, locate and count your product on store shelves
Stars: ✭ 93 (+72.22%)
Mutual labels:  ibmcode, call-for-code
box-Staff-Manager
Employee App is used for initialize transactions, user management, authorise flow so that enteripise digital assets can be managed by stakeholders and partners.
Stars: ✭ 26 (-51.85%)
Mutual labels:  blockchain-service
alexa-skill-watson-assistant
Alexa Skill using IBM Watson Assistant and IBM Cloud Functions
Stars: ✭ 72 (+33.33%)
Mutual labels:  ibmcode
dnn-object-detection
Analyze real-time CCTV images with Convolutional Neural Networks
Stars: ✭ 93 (+72.22%)
Mutual labels:  ibmcode
open-api
api.openfuture.io
Stars: ✭ 41 (-24.07%)
Mutual labels:  blockchain-service
watson-discovery-news
A Node.js web app that uses the Watson Discovery News service to query and view the latest trending news items.
Stars: ✭ 39 (-27.78%)
Mutual labels:  ibmcode
Solution-Starter-Kit-Cooperation-2020
Materials for the Call for Code 2020 solution starter kit for community collaboration in the context of COVID-19.
Stars: ✭ 25 (-53.7%)
Mutual labels:  call-for-code
Prometeo-Pyrrha
Former repository for Prometeo, winner of the Call for Code 2019 Global Challenge, open sourced as Pyrrha (see links within this repo). It measures toxin exposure in real time and analyzes trends over time.
Stars: ✭ 27 (-50%)
Mutual labels:  call-for-code
personal-wealth-portfolio-mgt-bot
WARNING: This repository is no longer maintained ⚠️ This repository will not be updated. This repository will be kept available in read-only mode.
Stars: ✭ 43 (-20.37%)
Mutual labels:  ibmcode
gdpr-fingerprint-pii
Use Watson Natural Language Understanding and Watson Knowledge Studio to fingerprint personal data from unstructured documents
Stars: ✭ 49 (-9.26%)
Mutual labels:  ibmcode
watson-stock-advisor
Create a web app for monitoring sentiment, price, and news for individual listed stocks, using IBM Watson Discovery and CloudantDB as well as Nodejs and Alpha Vantage.
Stars: ✭ 89 (+64.81%)
Mutual labels:  ibmcode
sms-analysis-with-wks
Analyzing SMS offers for domain specific entities using Watson Knowledge Studio and Watson's Natural Language Understanding
Stars: ✭ 17 (-68.52%)
Mutual labels:  ibmcode
Project-Catalog
This repository links to projects created as part of Call for Code activities, including those that are not officially hosted by The Linux Foundation.
Stars: ✭ 29 (-46.3%)
Mutual labels:  call-for-code
watson-document-co-relation
Correlate text content across documents using Watson NLU, Python NLTK and Watson Studio.
Stars: ✭ 28 (-48.15%)
Mutual labels:  ibmcode

Read this in other languages: 한국어, 日本語.

WARNING: This repository is no longer maintained ⚠️

This repository, which contains assets to run a Hyperledger Composer application, is not being actively maintained due to a shift to focus on Hyperledger Fabric. This repository will not be updated. The repository will be kept available in read-only mode.

Global-citizen

The goal here is to build a 3-member blockchain application using the IBM Blockchain Platform, consisting of the following entities: an organization representing a government entity, an organization representing an NGO focused on the provision of aid, and an organization representing Global Citizen.

Audience level : Intermediate Developers

Prerequisites

  1. Free IBM Cloud account

  2. NPM and Node installed (node version 8.10.0)

  3. If you have used other versions of composer-cli, or have deployed a .bna file before, run these commands

npm uninstall -g composer-cli
npm uninstall -g composer-rest-server
rm -rf ~/.composer
rm *.card
rm -rf credentials/
  1. Install composer-cli
npm install -g [email protected]

Steps

  1. Generate the Business Network Archive (BNA)

  2. Create Blockchain Service

  3. Get the secret

  4. Use secret to get certificates from the certificate authority

  5. Use admin-pub.pem file to add certificates to the peers

  6. Create admin business network card

  7. Install runtime and start the network

  8. Create a new business network card

  9. Interact with the business network

1. Generate the Business Network Archive (BNA)

A business network is made up of assets, participants, transactions, access control rules, and optionally events and queries. In this skeleton business network, there is a model (.cto) file which will contain the class definitions for all assets, participants, and transactions in the business network. The skeleton business network also contains an access control (permissions.acl) document with basic access control rules, a script (logic.js) file containing transaction processor functions, and a package.json file containing business network metadata.

First we need to clone a repo that contains the three components that are needed to make a BNA file: a logic file(.js) , a model file(.cto), and an access control(.acl) file.

git clone https://github.com/IBM/global-citizen.git

To check that the structure of the files is valid, you can now generate a Business Network Archive (BNA) file for your business network definition. The BNA file is the deployable unit -- a file that can be deployed to the Composer runtime for execution. Use the following command to generate the network archive:

cd global-citizen
npm install

You should see the following output:

Creating Business Network Archive


Looking for package.json of Business Network Definition
	Input directory: /Users/ishan/Documents/proj/global-citizens/global-citizens-network/global-citizen

Found:
	Description: This pattern should be able to Construct a 3-member blockchain application using the IBM Blockchain Platform, consisting of the following entities: an organization representing a government entity, an organization representing an NGO focused on the provision of aid, and an organization representing Global Citizen.
	Name: global-citizens-network
	Identifier: [email protected]

Written Business Network Definition Archive file to
Output file: [email protected]

Command succeeded

Now you should have a BNA file, (global-citizens-network.bna), that is in your global-citizens/dist directory.

2. Create Blockchain Service

  1. In your browser go to your shiny new IBM Cloud account

  2. Create a blockchain service:

3. Get the secret

  1. Launch your blockchain service, and click on connection profile, and view as raw JSON

  2. Scroll all the way down until you see registrar and then under enrollId will be enrollSecret. Copy this secret, we will need it for the next step for creating the a business network card for the certificate authority (CA)

4. Use secret to get certificates from the certificate authority

  1. Download the connection profile

  2. Rename the downloaded JSON file to connection-profile.json

  3. Move the connection-profile.json file to the global-citizen directory

  4. Using the enrollSecret from the previous step issue this command to create a business network card for the certificate authority (CA)

composer card create -f ca.card -p connection-profile.json -u admin -s <enrollSecret>
  1. Import the card in your local system wallet with this command
composer card import -f ca.card -c ca
  1. Finally, we request certificates from the CA using the card we imported that contains our enrollSecret. The certificates are stored in the credentials directory that is created after the completion of this command.
composer identity request --card ca --path ./credentials

5. Use admin-pub.pem file to add certificates to the peers

  1. Back in the blockchain service, click on the members tab, then add certificate. Go to your global-citizen/credentials directory, and copy and paste the contents of the admin-pub.pem file in the certificate box. Submit the certificate and restart the peers.

Note: restarting the peers takes a minute.

  1. Next, we need to synchronize the certificates of the channel. From our blockchain service, under my network click on Channels and then the three-dot button. Then click Sync Certificate.

6. Create admin business network card

  1. Now that we have synced certificates with our peers, we can install the Hyperledger Composer runtime and start the network by creating an admin card. Create the admin card with the channel admin and peer admin roles with the following command:
composer card create -f adminCard.card -p connection-profile.json -u admin -c ./credentials/admin-pub.pem -k ./credentials/admin-priv.pem --role PeerAdmin --role ChannelAdmin
  1. Import the card created from the previous command:
composer card import -f adminCard.card -c adminCard

7. Install runtime and start the network

  1. Now we will use the admin card to install the network with the following command:
composer network install --card adminCard --archiveFile [email protected]

Note: If you get an error at this point, wait a minute and try again.

  1. Start the business network by providing the admin card, the path to the .bna file, and the credentials received from the CA. This command will issue a card which we will remove, called ‘delete_me.card’.
composer network start --networkName global-citizens-network --networkVersion 0.0.1 -c adminCard -A admin -C ./credentials/admin-pub.pem -f delete_me.card

Note: If you get an error at this point, wait a minute and try again.

  1. Next, let’s delete delete_me.card :
rm delete_me.card

8. Create a new business network card

  1. After we have installed the runtime and started the network, we need to create a card which we will deploy to the Starter Plan. Use the following command to create adminCard.card:
composer card create -n global-citizens-network -p connection-profile.json -u admin -c ./credentials/admin-pub.pem -k ./credentials/admin-priv.pem
  1. Import the business network card:
composer card import -f [email protected]
  1. Test the business network card:
composer network ping -c admin@global-citizens-network

9. Interact with the business network

You can either use composer-playground or composer-rest-server to interact with the business network.

Use the links to get more information about composer-playground and composer-rest-server.

a. Interact using Composer-Playground

  1. Install Composer-Playground:
npm install -g [email protected]
  1. Now, let’s start up the server. Make sure you are in the same directory as your connection-profile.json
composer-playground
  1. In your browser, go to http://localhost:8080/test to perform operations in business network.

Admin card for global-citizen business network is created in Composer Playground.

Click on Connect now button present on admin@global-citizens-network card to connect to global-citizen business network

To test your Business Network Definition, first click on the Test tab:

In the AidOrg participant registry, create a new participant. Make sure you click on the AidOrg tab on the far left-hand side first and click on Create New Participant button

Fill the details for AidOrg participant and click on Create New

New AidOrg participant created in participant registry. Similarly create the other participants for the network.

Connection profiles contain the information necessary to connect to a fabric. Business network cards combine a connection profile, identity, and certificates to allow a connection to a business network in Hyperledger Composer Playground.

Now we are ready to add Network Cards for the participants in network. Do this by first clicking on the admin tab and select ID Registry to issue new ids to the participants and add the ids to the wallet. Please follow the instructions as shown in the images below:

Click on Use Now to select the AidOrg participant registry to perform transactions on network.

Submit CreateProjectPledge transaction.

{
  "$class": "org.global.citizens.net.CreateProjectPledge",
  "pledgeId": "p1",
  "name": "child care",
  "decription": "child care fund",
  "fundsRequired": 100000,
  "aidOrg": "resource:org.global.citizens.net.AidOrg#aid"
}

New project pledge is created in Asset Registry.

Submit SendPledgeToGlobalCitizen transaction to send the pledge to global citizen to get the funds for the project.

{
  "$class": "org.global.citizens.net.SendPledgeToGlobalCitizen",
  "citizenId": "resource:org.global.citizens.net.GlobalCitizen#gc",
  "pledgeId": "resource:org.global.citizens.net.ProjectPledge#p1"
}

Global Citizen participant registry gets update with the new pledge request.

Global Citizen reviews the pledge. After successful verification it submits aSendPledgeToGovOrg transaction to get funds for the project pledge from government organizations.

{
  "$class": "org.global.citizens.net.SendPledgeToGovOrg",
  "govOrg": ["resource:org.global.citizens.net.GovOrg#gov"],
  "pledgeId": "resource:org.global.citizens.net.ProjectPledge#p1"
}

Government organizations reviews the pledge. After reviewing if they decide to fund the project then they submit a UpdatePledge transaction to update the project pledge asset.

{
  "$class": "org.global.citizens.net.UpdatePledge",
  "govOrgId": "resource:org.global.citizens.net.GovOrg#gov",
  "pledgeId": "resource:org.global.citizens.net.ProjectPledge#p1",
  "fundingType": "WEEKLY",
  "approvedFunding": 100000,
  "fundsPerInstallment": 1000
}

Government organizations periodically sends the funds to project by submitting TransferFunds transaction.

{
  "$class": "org.global.citizens.net.TransferFunds",
  "govOrgId": "resource:org.global.citizens.net.GovOrg#gov",
  "pledgeId": "resource:org.global.citizens.net.ProjectPledge#p1"
}

b. Interact using composer-rest-server

  1. Install the composer-rest-server:
npm install -g [email protected]
  1. Now, let’s start up the server. Make sure you are in the same directory as your connection-profile.json
composer-rest-server -c admin@global-citizens-network -n never -w true
  1. In your browser, go to http://localhost:3000/explorer

  2. Now you can use the swagger api to perform operations in business network as shown in Interact using Composer-Playground

Extending Pattern

  1. Add Network Permissions
  2. Implement Dashboards
  3. Implement logic for tracking payments default
  4. Implement Notification logic
  5. Improve transfer fund logic

Additional Resources

License

This code pattern is licensed under the Apache Software License, Version 2. Separate third party code objects invoked within this code pattern are licensed by their respective providers pursuant to their own separate licenses. Contributions are subject to the Developer Certificate of Origin, Version 1.1 (DCO) and the Apache Software License, Version 2.

Apache Software License (ASL) FAQ

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].