From 1f70a59fef3232dd84c9d4409652eea431fa37eb Mon Sep 17 00:00:00 2001 From: Michael Edge Date: Tue, 27 Nov 2018 14:54:40 +0800 Subject: [PATCH] initial commit --- README.md | 12 +++++++----- images/AmazonManagedBlockchain.png | Bin 0 -> 47371 bytes ngo-ui/README.md | 6 +++--- ngo-ui/src/app/services/shared/utils.service.ts | 2 +- 4 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 images/AmazonManagedBlockchain.png diff --git a/README.md b/README.md index a64ac7f3..e7486b10 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,10 @@ -# AWS Managed Blockchain Workshop +# Amazon Managed Blockchain Workshop + +![Amazon Managed Blockchain](images/AmazonManagedBlockchain.png "Amazon Managed Blockchain") ## Building a network to track spending by non-profit organizations -This workshop builds an AWS Managed Blockchain Hyperledger Fabric network, a RESTful API and a +This workshop builds an Amazon Managed Blockchain Hyperledger Fabric network, a RESTful API and a User Interface application that tracks donations and spend for non-profit organizations. Donors are able to track the donations they make and how how their donations are being spent. Donations and spending are tracked on a Hyperledger Fabric blockchain network with both donors and non-profits @@ -13,11 +15,11 @@ and spending are tracked on a Hyperledger Fabric blockchain network with both do and invoke chaincode * Fabric Chaincode, written in Node.js, deployed to a Hyperledger Fabric network -This workshop will build an AWS Managed Blockchain Hyperledger Fabric network, deploy the chaincode, +This workshop will build an Amazon Managed Blockchain Hyperledger Fabric network, deploy the chaincode, start the REST API server and finally run a UI application that uses the REST API to interact with the Fabric network. The workshop is divided into four parts: -1. Building an AWS Managed Blockchain Hyperledger Fabric network. Instructions can be found in the folder: [ngo-fabric](ngo-fabric) +1. Building an Amazon Managed Blockchain Hyperledger Fabric network. Instructions can be found in the folder: [ngo-fabric](ngo-fabric) 2. Deploying the chaincode, or smart contract, that provides the donation and spend tracking functionality. Instructions can be found in the folder: [ngo-chaincode](ngo-chaincode) 3. Starting the RESTful API server that exposes the chaincode functions to client applications. Instructions can be found in the folder: [ngo-rest-api](ngo-rest-api) 4. Running the User Interface application. Instructions can be found in the folder: [ngo-ui](ngo-ui) @@ -26,7 +28,7 @@ network. The workshop is divided into four parts: To build the network, deploy the chaincode, start the RESTful API server and run the application, follow the README instructions in parts 1-4, in this order: -* [Part 1:](ngo-fabric/README.md) Start the workshop by building the AWS Managed Blockchain Hyperledger Fabric network. +* [Part 1:](ngo-fabric/README.md) Start the workshop by building the Amazon Managed Blockchain Hyperledger Fabric network. * [Part 2:](ngo-chaincode/README.md) Deploy the NGO chaincode. * [Part 3:](ngo-rest-api/README.md) Run the REST API. * [Part 4:](ngo-ui/README.md) Run the Application. diff --git a/images/AmazonManagedBlockchain.png b/images/AmazonManagedBlockchain.png new file mode 100644 index 0000000000000000000000000000000000000000..3dbd4227512b982583fb15200a5150d10ebf2136 GIT binary patch literal 47371 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 JB{I(f{txw>f*t?> literal 0 HcmV?d00001 diff --git a/ngo-ui/README.md b/ngo-ui/README.md index 75d86c85..1a98e750 100644 --- a/ngo-ui/README.md +++ b/ngo-ui/README.md @@ -104,7 +104,7 @@ will call the Fabric CA and enroll a new user. This user will then be used to in execute queries against the Fabric network. You can register a new user in the UI application. The link is on the login page. You can then login as that user and explore the application. -All of the information you see in the application is stored in the AWS Managed Blockchain Fabric network. +All of the information you see in the application is stored in the Amazon Managed Blockchain Fabric network. You can check this by querying the REST API directly. You can cURL the REST API from the Fabric client node. Examples of the cURL commands used with the REST API can be found in the files that load test data into the network, such as [this one](../ngo-rest-api/ngo-load-workshop.sh) @@ -113,13 +113,13 @@ You could also query the chaincode directly and see the same information. You qu the Fabric client node. An example of how to query the chaincode can be found in [this script](../ngo-chaincode/test-chaincode-aws.sh) ## Step 6 - Pat yourself on the back, you've completed the workshop -You have successfully built a Hyperledger Fabric network using the AWS Managed Blockchain service, deployed +You have successfully built a Hyperledger Fabric network using the Amazon Managed Blockchain service, deployed chaincode to the service, connected a RESTful API to the service and deployed an Angular application that communicates with the RESTful API. The workshop instructions can be found in the README files in parts 1-4: -* [Part 1:](../ngo-fabric/README.md) Start the workshop by building the AWS Managed Blockchain Hyperledger Fabric network. +* [Part 1:](../ngo-fabric/README.md) Start the workshop by building the Amazon Managed Blockchain Hyperledger Fabric network. * [Part 2:](../ngo-chaincode/README.md) Deploy the NGO chaincode. * [Part 3:](../ngo-rest-api/README.md) Run the REST API. * [Part 4:](../ngo-ui/README.md) Run the Application. diff --git a/ngo-ui/src/app/services/shared/utils.service.ts b/ngo-ui/src/app/services/shared/utils.service.ts index 3b7c21c8..cfdffa72 100644 --- a/ngo-ui/src/app/services/shared/utils.service.ts +++ b/ngo-ui/src/app/services/shared/utils.service.ts @@ -50,7 +50,7 @@ export class UtilsService { try { const decimalIndex = floatStr.indexOf('.'); if (decimalIndex > 0 && floatStr.length > decimalIndex + offset) { - return parseFloat(floatStr.substring(floatStr.indexOf('.'), floatStr.indexOf('.') + offset)); + return parseFloat(floatStr.substring(0, decimalIndex + offset)); } return parseFloat(floatStr); } catch (e) {