Created
August 24, 2020 01:52
-
-
Save kctam/79c6c33584afc3522513bf81d2f7f87c to your computer and use it in GitHub Desktop.
Rewrite a sample implementation of API Server on Hyperledger Fabric v2.2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const express = require('express'); | |
const bodyParser = require('body-parser'); | |
const app = express(); | |
app.use(bodyParser.json()); | |
// Setting for Hyperledger Fabric | |
const { Wallets, Gateway } = require('fabric-network'); | |
const fs = require('fs'); | |
const path = require('path'); | |
const ccpPath = path.resolve(__dirname, '.', 'connection-org1.json'); | |
app.get('/api/queryallcars', async function (req, res) { | |
try { | |
let ccp = JSON.parse(fs.readFileSync(ccpPath, 'utf8')); | |
// Create a new file system based wallet for managing identities. | |
const walletPath = path.join(process.cwd(), 'wallet'); | |
const wallet = await Wallets.newFileSystemWallet(walletPath); | |
console.log(`Wallet path: ${walletPath}`); | |
// Check to see if we've already enrolled the user. | |
const identity = await wallet.get('appUser'); | |
if (!identity) { | |
console.log('An identity for the user "appUser" does not exist in the wallet'); | |
console.log('Run the registerUser.js application before retrying'); | |
return; | |
} | |
// Create a new gateway for connecting to our peer node. | |
const gateway = new Gateway(); | |
await gateway.connect(ccp, { wallet, identity: 'appUser', discovery: { enabled: true, asLocalhost: false } }); | |
// Get the network (channel) our contract is deployed to. | |
const network = await gateway.getNetwork('mychannel'); | |
// Get the contract from the network. | |
const contract = network.getContract('fabcar'); | |
// Evaluate the specified transaction. | |
// queryCar transaction - requires 1 argument, ex: ('queryCar', 'CAR4') | |
// queryAllCars transaction - requires no arguments, ex: ('queryAllCars') | |
const result = await contract.evaluateTransaction('queryAllCars'); | |
console.log(`Transaction has been evaluated, result is: ${result.toString()}`); | |
res.status(200).json({response: result.toString()}); | |
// Disconnect from the gateway. | |
await gateway.disconnect(); | |
} catch (error) { | |
console.error(`Failed to evaluate transaction: ${error}`); | |
res.status(500).json({error: error}); | |
process.exit(1); | |
} | |
}); | |
app.get('/api/query/:car_index', async function (req, res) { | |
try { | |
let ccp = JSON.parse(fs.readFileSync(ccpPath, 'utf8')); | |
// Create a new file system based wallet for managing identities. | |
const walletPath = path.join(process.cwd(), 'wallet'); | |
const wallet = await Wallets.newFileSystemWallet(walletPath); | |
console.log(`Wallet path: ${walletPath}`); | |
// Check to see if we've already enrolled the user. | |
const identity = await wallet.get('appUser'); | |
if (!identity) { | |
console.log('An identity for the user "appUser" does not exist in the wallet'); | |
console.log('Run the registerUser.js application before retrying'); | |
return; | |
} | |
// Create a new gateway for connecting to our peer node. | |
const gateway = new Gateway(); | |
await gateway.connect(ccp, { wallet, identity: 'appUser', discovery: { enabled: true, asLocalhost: false } }); | |
// Get the network (channel) our contract is deployed to. | |
const network = await gateway.getNetwork('mychannel'); | |
// Get the contract from the network. | |
const contract = network.getContract('fabcar'); | |
// Evaluate the specified transaction. | |
// queryCar transaction - requires 1 argument, ex: ('queryCar', 'CAR4') | |
// queryAllCars transaction - requires no arguments, ex: ('queryAllCars') | |
const result = await contract.evaluateTransaction('queryCar', req.params.car_index); | |
console.log(`Transaction has been evaluated, result is: ${result.toString()}`); | |
res.status(200).json({response: result.toString()}); | |
// Disconnect from the gateway. | |
await gateway.disconnect(); | |
} catch (error) { | |
console.error(`Failed to evaluate transaction: ${error}`); | |
res.status(500).json({error: error}); | |
process.exit(1); | |
} | |
}); | |
app.post('/api/addcar/', async function (req, res) { | |
try { | |
let ccp = JSON.parse(fs.readFileSync(ccpPath, 'utf8')); | |
// Create a new file system based wallet for managing identities. | |
const walletPath = path.join(process.cwd(), 'wallet'); | |
const wallet = await Wallets.newFileSystemWallet(walletPath); | |
console.log(`Wallet path: ${walletPath}`); | |
// Check to see if we've already enrolled the user. | |
const identity = await wallet.get('appUser'); | |
if (!identity) { | |
console.log('An identity for the user "appUser" does not exist in the wallet'); | |
console.log('Run the registerUser.js application before retrying'); | |
return; | |
} | |
// Create a new gateway for connecting to our peer node. | |
const gateway = new Gateway(); | |
await gateway.connect(ccp, { wallet, identity: 'appUser', discovery: { enabled: true, asLocalhost: false } }); | |
// Get the network (channel) our contract is deployed to. | |
const network = await gateway.getNetwork('mychannel'); | |
// Get the contract from the network. | |
const contract = network.getContract('fabcar'); | |
// Submit the specified transaction. | |
// createCar transaction - requires 5 argument, ex: ('createCar', 'CAR12', 'Honda', 'Accord', 'Black', 'Tom') | |
// changeCarOwner transaction - requires 2 args , ex: ('changeCarOwner', 'CAR10', 'Dave') | |
await contract.submitTransaction('createCar', req.body.carid, req.body.make, req.body.model, req.body.colour, req.body.owner); | |
console.log('Transaction has been submitted'); | |
res.send('Transaction has been submitted'); | |
// Disconnect from the gateway. | |
await gateway.disconnect(); | |
} catch (error) { | |
console.error(`Failed to submit transaction: ${error}`); | |
process.exit(1); | |
} | |
}) | |
app.put('/api/changeowner/:car_index', async function (req, res) { | |
try { | |
let ccp = JSON.parse(fs.readFileSync(ccpPath, 'utf8')); | |
// Create a new file system based wallet for managing identities. | |
const walletPath = path.join(process.cwd(), 'wallet'); | |
const wallet = await Wallets.newFileSystemWallet(walletPath); | |
console.log(`Wallet path: ${walletPath}`); | |
// Check to see if we've already enrolled the user. | |
const identity = await wallet.get('appUser'); | |
if (!identity) { | |
console.log('An identity for the user "appUser" does not exist in the wallet'); | |
console.log('Run the registerUser.js application before retrying'); | |
return; | |
} | |
// Create a new gateway for connecting to our peer node. | |
const gateway = new Gateway(); | |
await gateway.connect(ccp, { wallet, identity: 'appUser', discovery: { enabled: true, asLocalhost: false } }); | |
// Get the network (channel) our contract is deployed to. | |
const network = await gateway.getNetwork('mychannel'); | |
// Get the contract from the network. | |
const contract = network.getContract('fabcar'); | |
// Submit the specified transaction. | |
// createCar transaction - requires 5 argument, ex: ('createCar', 'CAR12', 'Honda', 'Accord', 'Black', 'Tom') | |
// changeCarOwner transaction - requires 2 args , ex: ('changeCarOwner', 'CAR10', 'Dave') | |
await contract.submitTransaction('changeCarOwner', req.params.car_index, req.body.owner); | |
console.log('Transaction has been submitted'); | |
res.send('Transaction has been submitted'); | |
// Disconnect from the gateway. | |
await gateway.disconnect(); | |
} catch (error) { | |
console.error(`Failed to submit transaction: ${error}`); | |
process.exit(1); | |
} | |
}) | |
app.listen(8080); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment