From 0ccec02bc28041e5118ff9b634f0ea69593d0188 Mon Sep 17 00:00:00 2001 From: Sijo Cherian Date: Sun, 12 Jul 2020 18:01:43 -0400 Subject: [PATCH] Tested with latest chaincode, Improved comments Signed-off-by: Sijo Cherian --- .../application-javascript/app.js | 53 ++++++++++--------- .../application-javascript/enrollAdmin.js | 5 +- .../application-javascript/registerUser.js | 7 ++- 3 files changed, 32 insertions(+), 33 deletions(-) diff --git a/asset-transfer-basic/application-javascript/app.js b/asset-transfer-basic/application-javascript/app.js index f95e99d9..d6eeaa83 100644 --- a/asset-transfer-basic/application-javascript/app.js +++ b/asset-transfer-basic/application-javascript/app.js @@ -9,8 +9,8 @@ const { Gateway, Wallets } = require('fabric-network'); const path = require('path'); const fs = require('fs'); -const registerUser = require('./registerUser'); -const enrollAdmin = require('./enrollAdmin'); +const registerUser = require('./registerUser'); +const enrollAdmin = require('./enrollAdmin'); const myChannel = 'mychannel'; const myChaincodeName = 'basic'; @@ -19,8 +19,9 @@ function prettyJSONString(inputString) { return JSON.stringify(JSON.parse(inputString),null,2); } -//pre-requisite: fabric-sample test-network setup with two peers and an ordering service, -// the companion chaincode is deployed, approved and committed on the channel mychannel +// pre-requisites: +// fabric-sample test-network setup with two peers and an ordering service, +// the companion chaincode is deployed, approved and committed on the channel mychannel async function main() { try { // load the network configuration @@ -37,14 +38,15 @@ async function main() { console.log(`Wallet path: ${walletPath}`); - //Steps - //1. register & enroll admin user + // Steps: + // Note: Steps 1 & 2 need to done only once in an app-server per blockchain network + // 1. register & enroll admin user with CA, stores admin identity in local wallet enrollAdmin.EnrollAdminUser(); - //2. register & enroll application user, which is used as client identify to make chaincode calls + // 2. register & enroll application user with CA, which is used as client identify to make chaincode calls, stores app user identity in local wallet registerUser.RegisterAppUser(); - - // Check to see if enrolled the app user. + + // Check to see if app user exist in wallet. const identity = await wallet.get(registerUser.ApplicationUserId); if (!identity) { console.log('An identity for the user does not exist in the wallet: '+ registerUser.ApplicationUserId); @@ -63,22 +65,22 @@ async function main() { const contract = network.getContract(myChaincodeName); //4. Init a set of asset data on the channel using chaincode 'InitLedger' - console.log('Submit Transaction: initLedger creates the initial set of assets on the ledger.'); + console.log('Submit Transaction: InitLedger creates the initial set of assets on the ledger.'); await contract.submitTransaction('InitLedger'); - + //5. *** Some example transactions are listed below *** // GetAllAssets returns all the current assets on the ledger let result = await contract.evaluateTransaction('GetAllAssets'); console.log('Evaluate Transaction: GetAllAssets, result: ' + prettyJSONString(result.toString()) ); - + console.log('\n***********************'); console.log('Submit Transaction: CreateAsset asset13'); - //CreateAsset creates an asset with ID asset13, color yellow, owner Tom, size 5 and appraizedValue of 1300 + //CreateAsset creates an asset with ID asset13, color yellow, owner Tom, size 5 and appraizedValue of 1300 await contract.submitTransaction('CreateAsset', 'asset13', 'yellow', 5, 'Tom', 1300); - + console.log('Evaluate Transaction: ReadAsset asset13'); - // ReadAsset returns an asset with given assetID + // ReadAsset returns an asset with given assetID result = await contract.evaluateTransaction('ReadAsset', 'asset13'); console.log(' result: ' + prettyJSONString(result.toString()) ); @@ -89,33 +91,32 @@ async function main() { console.log(' result: ' + prettyJSONString(result.toString()) ); console.log('Submit Transaction: UpdateAsset asset1, new AppraisedValue : 350'); - // UpdateAsset updates an existing asset with new properties. Same args as CreateAsset + // UpdateAsset updates an existing asset with new properties. Same args as CreateAsset await contract.submitTransaction('UpdateAsset', 'asset1', 'blue', 5, 'Tomoko', 350); - + + console.log('Evaluate Transaction: ReadAsset asset1'); + result = await contract.evaluateTransaction('ReadAsset', 'asset1'); + console.log(' result: ' + prettyJSONString(result.toString()) ); + try { console.log('\nSubmit Transaction: UpdateAsset asset70'); - //Non existing asset asset70 should throw Error + //Non existing asset asset70 should throw Error await contract.submitTransaction('UpdateAsset', 'asset70', 'blue', 5, 'Tomoko', 300); } catch (error) { let errMsg = 'Expected an error on UpdateAsset of non-existing Asset. '; console.log(errMsg + error); } - - console.log('Evaluate Transaction: ReadAsset asset1'); - result = await contract.evaluateTransaction('ReadAsset', 'asset1'); - console.log(' result: ' + prettyJSONString(result.toString()) ); - console.log('\n***********************'); - + console.log('Submit Transaction: TransferAsset asset1 from owner Tomoko > owner Tom'); - // TransferAsset transfers an asset with given ID to new owner Tom + // TransferAsset transfers an asset with given ID to new owner Tom await contract.submitTransaction('TransferAsset', 'asset1', 'Tom'); console.log('Evaluate Transaction: ReadAsset asset1'); result = await contract.evaluateTransaction('ReadAsset', 'asset1'); console.log(' result: ' + prettyJSONString(result.toString()) ); - + } finally { // Disconnect from the gateway peer when all work for this client identity is complete gateway.disconnect(); diff --git a/asset-transfer-basic/application-javascript/enrollAdmin.js b/asset-transfer-basic/application-javascript/enrollAdmin.js index 5909b190..79a794e6 100644 --- a/asset-transfer-basic/application-javascript/enrollAdmin.js +++ b/asset-transfer-basic/application-javascript/enrollAdmin.js @@ -12,6 +12,7 @@ const fs = require('fs'); const path = require('path'); const adminUserId = 'admin'; const adminUserPasswd = 'adminpw'; +const walletPath = path.join(__dirname, 'wallet'); async function enrollAdminUser() { try { @@ -28,10 +29,8 @@ async function enrollAdminUser() { const caTLSCACerts = caInfo.tlsCACerts.pem; const ca = new FabricCAServices(caInfo.url, { trustedRoots: caTLSCACerts, verify: false }, caInfo.caName); - // Create a new file system based wallet for managing identities. - const walletPath = path.join(__dirname, 'wallet'); + // Create a new wallet : Note that wallet can be resfor managing identities. const wallet = await Wallets.newFileSystemWallet(walletPath); - console.log(`Wallet path: ${walletPath}`); // Check to see if we've already enrolled the admin user. const identity = await wallet.get(adminUserId); diff --git a/asset-transfer-basic/application-javascript/registerUser.js b/asset-transfer-basic/application-javascript/registerUser.js index 5ede7e04..16c14535 100644 --- a/asset-transfer-basic/application-javascript/registerUser.js +++ b/asset-transfer-basic/application-javascript/registerUser.js @@ -13,6 +13,7 @@ const path = require('path'); const enrollAdmin = require('./enrollAdmin'); const caChaincodeUserRole = 'client'; const applicationUserId = 'appUser'; +const walletPath = path.join(__dirname, 'wallet'); async function registerAppUser() { try { @@ -28,10 +29,8 @@ async function registerAppUser() { const caURL = ccp.certificateAuthorities['ca.org1.example.com'].url; const ca = new FabricCAServices(caURL); - // Create a new file system based wallet for managing identities. - const walletPath = path.join(__dirname, 'wallet'); + // Create a new file system based wallet for managing identities. ; const wallet = await Wallets.newFileSystemWallet(walletPath); - console.log(`Wallet path: ${walletPath}`); // Check to see if we've already enrolled the user. const userIdentity = await wallet.get(applicationUserId); @@ -72,7 +71,7 @@ async function registerAppUser() { type: 'X.509', }; await wallet.put(applicationUserId, x509Identity); - console.log('Successfully registered and enrolled user '+applicationUserId +'" and imported it into the wallet'); + console.log('Successfully registered and enrolled user '+applicationUserId +' and imported it into the wallet'); } catch (error) { console.error(`Failed to register user : ${error}`);