mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-17 07:25:10 +00:00
[FAB-5303] Further balance-transfer code optimization
- Made it possible to deploy the app (both the client and fabric backend) to a location other than localhost - Made it possible to work with a backend over grpc instead of always assuming grpcs - Made the list of target peers for instantiate and invoke calls to be optional - Enabled target networks to be controlled by an env variable Change-Id: Ie394cf7e8f6ed47d970d4be992f2f6a0394fff7f Signed-off-by: Jim Zhang <jzhang@us.ibm.com>
This commit is contained in:
parent
d9e2d5cc8c
commit
79cb041124
14 changed files with 187 additions and 158 deletions
|
|
@ -117,7 +117,7 @@ curl -s -X POST \
|
|||
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
|
||||
-H "content-type: application/json" \
|
||||
-d '{
|
||||
"peers": ["localhost:7051","localhost:7056"]
|
||||
"peers": ["peer1","peer2"]
|
||||
}'
|
||||
```
|
||||
### Install chaincode
|
||||
|
|
@ -128,7 +128,7 @@ curl -s -X POST \
|
|||
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
|
||||
-H "content-type: application/json" \
|
||||
-d '{
|
||||
"peers": ["localhost:7051","localhost:7056"],
|
||||
"peers": ["peer1","peer2"],
|
||||
"chaincodeName":"mycc",
|
||||
"chaincodePath":"github.com/example_cc",
|
||||
"chaincodeVersion":"v0"
|
||||
|
|
@ -143,10 +143,8 @@ curl -s -X POST \
|
|||
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
|
||||
-H "content-type: application/json" \
|
||||
-d '{
|
||||
"peers": ["localhost:7051"],
|
||||
"chaincodeName":"mycc",
|
||||
"chaincodeVersion":"v0",
|
||||
"fcn":"init",
|
||||
"args":["a","100","b","200"]
|
||||
}'
|
||||
```
|
||||
|
|
@ -159,7 +157,6 @@ curl -s -X POST \
|
|||
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
|
||||
-H "content-type: application/json" \
|
||||
-d '{
|
||||
"peers": ["localhost:7051", "localhost:7056"],
|
||||
"fcn":"move",
|
||||
"args":["a","b","10"]
|
||||
}'
|
||||
|
|
@ -232,7 +229,7 @@ curl -s -X GET \
|
|||
|
||||
### Network configuration considerations
|
||||
|
||||
You have the ability to change configuration parameters by editing the network-config.json file.
|
||||
You have the ability to change configuration parameters by either directly editing the network-config.json file or provide an additional file for an alternative target network. The app uses an optional environment variable "TARGET_NETWORK" to control the configuration files to use. For example, if you deployed the target network on Amazon Web Services EC2, you can add a file "network-config-aws.json", and set the "TARGET_NETWORK" environment to 'aws'. The app will pick up the settings inside the "network-config-aws.json" file.
|
||||
|
||||
#### IP Address** and PORT information
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,10 @@ var expressJWT = require('express-jwt');
|
|||
var jwt = require('jsonwebtoken');
|
||||
var bearerToken = require('express-bearer-token');
|
||||
var cors = require('cors');
|
||||
var config = require('./config.json');
|
||||
|
||||
require('./config.js');
|
||||
var hfc = require('fabric-client');
|
||||
|
||||
var helper = require('./app/helper.js');
|
||||
var channels = require('./app/create-channel.js');
|
||||
var join = require('./app/join-channel.js');
|
||||
|
|
@ -35,8 +38,8 @@ var install = require('./app/install-chaincode.js');
|
|||
var instantiate = require('./app/instantiate-chaincode.js');
|
||||
var invoke = require('./app/invoke-transaction.js');
|
||||
var query = require('./app/query.js');
|
||||
var host = process.env.HOST || config.host;
|
||||
var port = process.env.PORT || config.port;
|
||||
var host = process.env.HOST || hfc.getConfigSetting('host');
|
||||
var port = process.env.PORT || hfc.getConfigSetting('port');
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////// SET CONFIGURATONS ////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -118,7 +121,7 @@ app.post('/users', function(req, res) {
|
|||
return;
|
||||
}
|
||||
var token = jwt.sign({
|
||||
exp: Math.floor(Date.now() / 1000) + parseInt(config.jwt_expiretime),
|
||||
exp: Math.floor(Date.now() / 1000) + parseInt(hfc.getConfigSetting('jwt_expiretime')),
|
||||
username: username,
|
||||
orgName: orgName
|
||||
}, app.get('secret'));
|
||||
|
|
@ -235,10 +238,6 @@ app.post('/channels/:channelName/chaincodes', function(req, res) {
|
|||
res.json(getErrorMessage('\'channelName\''));
|
||||
return;
|
||||
}
|
||||
if (!fcn) {
|
||||
res.json(getErrorMessage('\'fcn\''));
|
||||
return;
|
||||
}
|
||||
if (!args) {
|
||||
res.json(getErrorMessage('\'args\''));
|
||||
return;
|
||||
|
|
@ -260,10 +259,6 @@ app.post('/channels/:channelName/chaincodes/:chaincodeName', function(req, res)
|
|||
logger.debug('chaincodeName : ' + chaincodeName);
|
||||
logger.debug('fcn : ' + fcn);
|
||||
logger.debug('args : ' + args);
|
||||
if (!peers || peers.length == 0) {
|
||||
res.json(getErrorMessage('\'peers\''));
|
||||
return;
|
||||
}
|
||||
if (!chaincodeName) {
|
||||
res.json(getErrorMessage('\'chaincodeName\''));
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -24,10 +24,8 @@ var fs = require('fs-extra');
|
|||
var User = require('fabric-client/lib/User.js');
|
||||
var crypto = require('crypto');
|
||||
var copService = require('fabric-ca-client');
|
||||
var config = require('../config.json');
|
||||
|
||||
var hfc = require('fabric-client');
|
||||
hfc.addConfigFile(path.join(__dirname, 'network-config.json'));
|
||||
hfc.setLogger(logger);
|
||||
var ORGS = hfc.getConfigSetting('network-config');
|
||||
|
||||
|
|
@ -44,7 +42,7 @@ for (let key in ORGS) {
|
|||
cryptoSuite.setCryptoKeyStore(hfc.newCryptoKeyStore({path: getKeyStoreForOrg(ORGS[key].name)}));
|
||||
client.setCryptoSuite(cryptoSuite);
|
||||
|
||||
let channel = client.newChannel(config.channelName);
|
||||
let channel = client.newChannel(hfc.getConfigSetting('channelName'));
|
||||
channel.addOrderer(newOrderer(client));
|
||||
|
||||
clients[key] = client;
|
||||
|
|
@ -58,19 +56,18 @@ for (let key in ORGS) {
|
|||
}
|
||||
|
||||
function setupPeers(channel, org, client) {
|
||||
for (let key in ORGS[org]) {
|
||||
if (key.indexOf('peer') === 0) {
|
||||
let data = fs.readFileSync(path.join(__dirname, ORGS[org][key]['tls_cacerts']));
|
||||
let peer = client.newPeer(
|
||||
ORGS[org][key].requests,
|
||||
{
|
||||
pem: Buffer.from(data).toString(),
|
||||
'ssl-target-name-override': ORGS[org][key]['server-hostname']
|
||||
}
|
||||
);
|
||||
for (let key in ORGS[org].peers) {
|
||||
let data = fs.readFileSync(path.join(__dirname, ORGS[org].peers[key]['tls_cacerts']));
|
||||
let peer = client.newPeer(
|
||||
ORGS[org].peers[key].requests,
|
||||
{
|
||||
pem: Buffer.from(data).toString(),
|
||||
'ssl-target-name-override': ORGS[org].peers[key]['server-hostname']
|
||||
}
|
||||
);
|
||||
peer.setName(key);
|
||||
|
||||
channel.addPeer(peer);
|
||||
}
|
||||
channel.addPeer(peer);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -78,7 +75,7 @@ function newOrderer(client) {
|
|||
var caRootsPath = ORGS.orderer.tls_cacerts;
|
||||
let data = fs.readFileSync(path.join(__dirname, caRootsPath));
|
||||
let caroots = Buffer.from(data).toString();
|
||||
return client.newOrderer(config.orderer, {
|
||||
return client.newOrderer(ORGS.orderer.url, {
|
||||
'pem': caroots,
|
||||
'ssl-target-name-override': ORGS.orderer['server-hostname']
|
||||
});
|
||||
|
|
@ -100,60 +97,36 @@ function getOrgName(org) {
|
|||
}
|
||||
|
||||
function getKeyStoreForOrg(org) {
|
||||
return config.keyValueStore + '_' + org;
|
||||
return hfc.getConfigSetting('keyValueStore') + '_' + org;
|
||||
}
|
||||
|
||||
function newRemotes(urls, forPeers, userOrg) {
|
||||
var targets = [];
|
||||
// find the peer that match the urls
|
||||
outer:
|
||||
for (let index in urls) {
|
||||
let peerUrl = urls[index];
|
||||
function newRemotes(names, forPeers, userOrg) {
|
||||
let client = getClientForOrg(userOrg);
|
||||
|
||||
let found = false;
|
||||
for (let key in ORGS) {
|
||||
if (key.indexOf('org') === 0) {
|
||||
// if looking for event hubs, an app can only connect to
|
||||
// event hubs in its own org
|
||||
if (!forPeers && key !== userOrg) {
|
||||
continue;
|
||||
}
|
||||
let targets = [];
|
||||
// find the peer that match the names
|
||||
for (let idx in names) {
|
||||
let peerName = names[idx];
|
||||
if (ORGS[userOrg].peers[peerName]) {
|
||||
// found a peer matching the name
|
||||
let data = fs.readFileSync(path.join(__dirname, ORGS[userOrg].peers[peerName]['tls_cacerts']));
|
||||
let grpcOpts = {
|
||||
pem: Buffer.from(data).toString(),
|
||||
'ssl-target-name-override': ORGS[userOrg].peers[peerName]['server-hostname']
|
||||
};
|
||||
|
||||
let org = ORGS[key];
|
||||
let client = getClientForOrg(key);
|
||||
|
||||
for (let prop in org) {
|
||||
if (prop.indexOf('peer') === 0) {
|
||||
if (org[prop]['requests'].indexOf(peerUrl) >= 0) {
|
||||
// found a peer matching the subject url
|
||||
if (forPeers) {
|
||||
let data = fs.readFileSync(path.join(__dirname, org[prop]['tls_cacerts']));
|
||||
targets.push(client.newPeer('grpcs://' + peerUrl, {
|
||||
pem: Buffer.from(data).toString(),
|
||||
'ssl-target-name-override': org[prop]['server-hostname']
|
||||
}));
|
||||
|
||||
continue outer;
|
||||
} else {
|
||||
let eh = client.newEventHub();
|
||||
let data = fs.readFileSync(path.join(__dirname, org[prop]['tls_cacerts']));
|
||||
eh.setPeerAddr(org[prop]['events'], {
|
||||
pem: Buffer.from(data).toString(),
|
||||
'ssl-target-name-override': org[prop]['server-hostname']
|
||||
});
|
||||
targets.push(eh);
|
||||
|
||||
continue outer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (forPeers) {
|
||||
targets.push(client.newPeer(ORGS[userOrg].peers[peerName].requests, grpcOpts));
|
||||
} else {
|
||||
let eh = client.newEventHub();
|
||||
eh.setPeerAddr(ORGS[userOrg].peers[peerName].events, grpcOpts);
|
||||
targets.push(eh);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
logger.error(util.format('Failed to find a peer matching the url %s', peerUrl));
|
||||
}
|
||||
if (targets.length === 0) {
|
||||
logger.error(util.format('Failed to find peers matching the names %s', names));
|
||||
}
|
||||
|
||||
return targets;
|
||||
|
|
@ -170,12 +143,12 @@ var getClientForOrg = function(org) {
|
|||
return clients[org];
|
||||
};
|
||||
|
||||
var newPeers = function(urls) {
|
||||
return newRemotes(urls, true);
|
||||
var newPeers = function(names, org) {
|
||||
return newRemotes(names, true, org);
|
||||
};
|
||||
|
||||
var newEventHubs = function(urls, org) {
|
||||
return newRemotes(urls, false, org);
|
||||
var newEventHubs = function(names, org) {
|
||||
return newRemotes(names, false, org);
|
||||
};
|
||||
|
||||
var getMspID = function(org) {
|
||||
|
|
@ -184,7 +157,7 @@ var getMspID = function(org) {
|
|||
};
|
||||
|
||||
var getAdminUser = function(userOrg) {
|
||||
var users = config.users;
|
||||
var users = hfc.getConfigSetting('admins');
|
||||
var username = users[0].username;
|
||||
var password = users[0].secret;
|
||||
var member;
|
||||
|
|
@ -325,7 +298,7 @@ var getOrgAdmin = function(userOrg) {
|
|||
};
|
||||
|
||||
var setupChaincodeDeploy = function() {
|
||||
process.env.GOPATH = path.join(__dirname, config.GOPATH);
|
||||
process.env.GOPATH = path.join(__dirname, hfc.getConfigSetting('CC_SRC_PATH'));
|
||||
};
|
||||
|
||||
var getLogger = function(moduleName) {
|
||||
|
|
@ -334,11 +307,6 @@ var getLogger = function(moduleName) {
|
|||
return logger;
|
||||
};
|
||||
|
||||
var getPeerAddressByName = function(org, peer) {
|
||||
var address = ORGS[org][peer].requests;
|
||||
return address.split('grpcs://')[1];
|
||||
};
|
||||
|
||||
exports.getChannelForOrg = getChannelForOrg;
|
||||
exports.getClientForOrg = getClientForOrg;
|
||||
exports.getLogger = getLogger;
|
||||
|
|
@ -347,6 +315,5 @@ exports.getMspID = getMspID;
|
|||
exports.ORGS = ORGS;
|
||||
exports.newPeers = newPeers;
|
||||
exports.newEventHubs = newEventHubs;
|
||||
exports.getPeerAddressByName = getPeerAddressByName;
|
||||
exports.getRegisteredUsers = getRegisteredUsers;
|
||||
exports.getOrgAdmin = getOrgAdmin;
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ var installChaincode = function(peers, chaincodeName, chaincodePath,
|
|||
|
||||
return helper.getOrgAdmin(org).then((user) => {
|
||||
var request = {
|
||||
targets: helper.newPeers(peers),
|
||||
targets: helper.newPeers(peers, org),
|
||||
chaincodePath: chaincodePath,
|
||||
chaincodeId: chaincodeName,
|
||||
chaincodeVersion: chaincodeVersion
|
||||
|
|
|
|||
|
|
@ -20,10 +20,8 @@ var util = require('util');
|
|||
var hfc = require('fabric-client');
|
||||
var Peer = require('fabric-client/lib/Peer.js');
|
||||
var EventHub = require('fabric-client/lib/EventHub.js');
|
||||
var config = require('../config.json');
|
||||
var helper = require('./helper.js');
|
||||
var logger = helper.getLogger('instantiate-chaincode');
|
||||
hfc.addConfigFile(path.join(__dirname, 'network-config.json'));
|
||||
var ORGS = hfc.getConfigSetting('network-config');
|
||||
var tx_id = null;
|
||||
var eh = null;
|
||||
|
|
@ -49,10 +47,13 @@ var instantiateChaincode = function(channelName, chaincodeName, chaincodeVersion
|
|||
var request = {
|
||||
chaincodeId: chaincodeName,
|
||||
chaincodeVersion: chaincodeVersion,
|
||||
fcn: functionName,
|
||||
args: args,
|
||||
txId: tx_id
|
||||
};
|
||||
|
||||
if (functionName)
|
||||
request.fcn = functionName;
|
||||
|
||||
return channel.sendInstantiateProposal(request);
|
||||
}, (err) => {
|
||||
logger.error('Failed to initialize the channel');
|
||||
|
|
@ -88,12 +89,12 @@ var instantiateChaincode = function(channelName, chaincodeName, chaincodeVersion
|
|||
var deployId = tx_id.getTransactionID();
|
||||
|
||||
eh = client.newEventHub();
|
||||
let data = fs.readFileSync(path.join(__dirname, ORGS[org]['peer1'][
|
||||
let data = fs.readFileSync(path.join(__dirname, ORGS[org].peers['peer1'][
|
||||
'tls_cacerts'
|
||||
]));
|
||||
eh.setPeerAddr(ORGS[org]['peer1']['events'], {
|
||||
eh.setPeerAddr(ORGS[org].peers['peer1']['events'], {
|
||||
pem: Buffer.from(data).toString(),
|
||||
'ssl-target-name-override': ORGS[org]['peer1']['server-hostname']
|
||||
'ssl-target-name-override': ORGS[org].peers['peer1']['server-hostname']
|
||||
});
|
||||
eh.connect();
|
||||
|
||||
|
|
|
|||
|
|
@ -19,18 +19,16 @@ var fs = require('fs');
|
|||
var util = require('util');
|
||||
var hfc = require('fabric-client');
|
||||
var Peer = require('fabric-client/lib/Peer.js');
|
||||
var config = require('../config.json');
|
||||
var helper = require('./helper.js');
|
||||
var logger = helper.getLogger('invoke-chaincode');
|
||||
var EventHub = require('fabric-client/lib/EventHub.js');
|
||||
hfc.addConfigFile(path.join(__dirname, 'network-config.json'));
|
||||
var ORGS = hfc.getConfigSetting('network-config');
|
||||
|
||||
var invokeChaincode = function(peersUrls, channelName, chaincodeName, fcn, args, username, org) {
|
||||
var invokeChaincode = function(peerNames, channelName, chaincodeName, fcn, args, username, org) {
|
||||
logger.debug(util.format('\n============ invoke transaction on organization %s ============\n', org));
|
||||
var client = helper.getClientForOrg(org);
|
||||
var channel = helper.getChannelForOrg(org);
|
||||
var targets = helper.newPeers(peersUrls);
|
||||
var targets = (peerNames) ? helper.newPeers(peerNames, org) : undefined;
|
||||
var tx_id = null;
|
||||
|
||||
return helper.getRegisteredUsers(username, org).then((user) => {
|
||||
|
|
@ -38,13 +36,16 @@ var invokeChaincode = function(peersUrls, channelName, chaincodeName, fcn, args,
|
|||
logger.debug(util.format('Sending transaction "%j"', tx_id));
|
||||
// send proposal to endorser
|
||||
var request = {
|
||||
targets: targets,
|
||||
chaincodeId: chaincodeName,
|
||||
fcn: fcn,
|
||||
args: args,
|
||||
chainId: channelName,
|
||||
txId: tx_id
|
||||
};
|
||||
|
||||
if (targets)
|
||||
request.targets = targets;
|
||||
|
||||
return channel.sendTransactionProposal(request);
|
||||
}, (err) => {
|
||||
logger.error('Failed to enroll user \'' + username + '\'. ' + err);
|
||||
|
|
@ -80,7 +81,13 @@ var invokeChaincode = function(peersUrls, channelName, chaincodeName, fcn, args,
|
|||
var transactionID = tx_id.getTransactionID();
|
||||
var eventPromises = [];
|
||||
|
||||
var eventhubs = helper.newEventHubs(peersUrls, org);
|
||||
if (!peerNames) {
|
||||
peerNames = channel.getPeers().map(function(peer) {
|
||||
return peer.getName();
|
||||
});
|
||||
}
|
||||
|
||||
var eventhubs = helper.newEventHubs(peerNames, org);
|
||||
for (let key in eventhubs) {
|
||||
let eh = eventhubs[key];
|
||||
eh.connect();
|
||||
|
|
|
|||
|
|
@ -67,27 +67,16 @@ var joinChannel = function(channelName, peers, username, org) {
|
|||
}).then((genesis_block) => {
|
||||
tx_id = client.newTransactionID();
|
||||
var request = {
|
||||
targets: helper.newPeers(peers),
|
||||
targets: helper.newPeers(peers, org),
|
||||
txId: tx_id,
|
||||
block: genesis_block
|
||||
};
|
||||
|
||||
for (let key in ORGS[org]) {
|
||||
if (ORGS[org].hasOwnProperty(key)) {
|
||||
if (key.indexOf('peer') === 0) {
|
||||
let data = fs.readFileSync(path.join(__dirname, ORGS[org][key][
|
||||
'tls_cacerts'
|
||||
]));
|
||||
let eh = client.newEventHub();
|
||||
eh.setPeerAddr(ORGS[org][key].events, {
|
||||
pem: Buffer.from(data).toString(),
|
||||
'ssl-target-name-override': ORGS[org][key]['server-hostname']
|
||||
});
|
||||
eh.connect();
|
||||
eventhubs.push(eh);
|
||||
allEventhubs.push(eh);
|
||||
}
|
||||
}
|
||||
eventhubs = helper.newEventHubs(peers, org);
|
||||
for (let key in eventhubs) {
|
||||
let eh = eventhubs[key];
|
||||
eh.connect();
|
||||
allEventhubs.push(eh);
|
||||
}
|
||||
|
||||
var eventPromises = [];
|
||||
|
|
|
|||
55
balance-transfer/app/network-config-aws.json
Normal file
55
balance-transfer/app/network-config-aws.json
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
"network-config": {
|
||||
"orderer": {
|
||||
"url": "grpc://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7050",
|
||||
"server-hostname": "orderer.example.com",
|
||||
"tls_cacerts": "../artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt"
|
||||
},
|
||||
"org1": {
|
||||
"name": "peerOrg1",
|
||||
"mspid": "Org1MSP",
|
||||
"ca": "https://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7054",
|
||||
"peers": {
|
||||
"peer1": {
|
||||
"requests": "grpc://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7051",
|
||||
"events": "grpc://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7053",
|
||||
"server-hostname": "peer0.org1.example.com",
|
||||
"tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt"
|
||||
},
|
||||
"peer2": {
|
||||
"requests": "grpc://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7056",
|
||||
"events": "grpc://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7058",
|
||||
"server-hostname": "peer1.org1.example.com",
|
||||
"tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt"
|
||||
}
|
||||
},
|
||||
"admin": {
|
||||
"key": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore",
|
||||
"cert": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts"
|
||||
}
|
||||
},
|
||||
"org2": {
|
||||
"name": "peerOrg2",
|
||||
"mspid": "Org2MSP",
|
||||
"ca": "https://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:8054",
|
||||
"peers": {
|
||||
"peer1": {
|
||||
"requests": "grpc://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:8051",
|
||||
"events": "grpc://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:8053",
|
||||
"server-hostname": "peer0.org2.example.com",
|
||||
"tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt"
|
||||
},
|
||||
"peer2": {
|
||||
"requests": "grpc://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:8056",
|
||||
"events": "grpc://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:8058",
|
||||
"server-hostname": "peer1.org2.example.com",
|
||||
"tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt"
|
||||
}
|
||||
},
|
||||
"admin": {
|
||||
"key": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore",
|
||||
"cert": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -9,17 +9,19 @@
|
|||
"name": "peerOrg1",
|
||||
"mspid": "Org1MSP",
|
||||
"ca": "https://localhost:7054",
|
||||
"peer1": {
|
||||
"requests": "grpcs://localhost:7051",
|
||||
"events": "grpcs://localhost:7053",
|
||||
"server-hostname": "peer0.org1.example.com",
|
||||
"tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt"
|
||||
},
|
||||
"peer2": {
|
||||
"requests": "grpcs://localhost:7056",
|
||||
"events": "grpcs://localhost:7058",
|
||||
"server-hostname": "peer1.org1.example.com",
|
||||
"tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt"
|
||||
"peers": {
|
||||
"peer1": {
|
||||
"requests": "grpcs://localhost:7051",
|
||||
"events": "grpcs://localhost:7053",
|
||||
"server-hostname": "peer0.org1.example.com",
|
||||
"tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt"
|
||||
},
|
||||
"peer2": {
|
||||
"requests": "grpcs://localhost:7056",
|
||||
"events": "grpcs://localhost:7058",
|
||||
"server-hostname": "peer1.org1.example.com",
|
||||
"tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt"
|
||||
}
|
||||
},
|
||||
"admin": {
|
||||
"key": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore",
|
||||
|
|
@ -30,17 +32,19 @@
|
|||
"name": "peerOrg2",
|
||||
"mspid": "Org2MSP",
|
||||
"ca": "https://localhost:8054",
|
||||
"peer1": {
|
||||
"requests": "grpcs://localhost:8051",
|
||||
"events": "grpcs://localhost:8053",
|
||||
"server-hostname": "peer0.org2.example.com",
|
||||
"tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt"
|
||||
},
|
||||
"peer2": {
|
||||
"requests": "grpcs://localhost:8056",
|
||||
"events": "grpcs://localhost:8058",
|
||||
"server-hostname": "peer1.org2.example.com",
|
||||
"tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt"
|
||||
"peers": {
|
||||
"peer1": {
|
||||
"requests": "grpcs://localhost:8051",
|
||||
"events": "grpcs://localhost:8053",
|
||||
"server-hostname": "peer0.org2.example.com",
|
||||
"tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt"
|
||||
},
|
||||
"peer2": {
|
||||
"requests": "grpcs://localhost:8056",
|
||||
"events": "grpcs://localhost:8058",
|
||||
"server-hostname": "peer1.org2.example.com",
|
||||
"tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt"
|
||||
}
|
||||
},
|
||||
"admin": {
|
||||
"key": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore",
|
||||
|
|
|
|||
|
|
@ -261,7 +261,7 @@ var getChannels = function(peer, username, org) {
|
|||
function buildTarget(peer, org) {
|
||||
var target = null;
|
||||
if (typeof peer !== 'undefined') {
|
||||
let targets = helper.newPeers([helper.getPeerAddressByName(org, peer)]);
|
||||
let targets = helper.newPeers([peer], org);
|
||||
if (targets && targets.length > 0) target = targets[0];
|
||||
}
|
||||
|
||||
|
|
|
|||
14
balance-transfer/config.js
Normal file
14
balance-transfer/config.js
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
var util = require('util');
|
||||
var path = require('path');
|
||||
var hfc = require('fabric-client');
|
||||
|
||||
var file = 'network-config%s.json';
|
||||
|
||||
var env = process.env.TARGET_NETWORK;
|
||||
if (env)
|
||||
file = util.format(file, '-' + env);
|
||||
else
|
||||
file = util.format(file, '');
|
||||
|
||||
hfc.addConfigFile(path.join(__dirname, 'app', file));
|
||||
hfc.addConfigFile(path.join(__dirname, 'config.json'));
|
||||
|
|
@ -3,11 +3,10 @@
|
|||
"port":"4000",
|
||||
"jwt_expiretime": "36000",
|
||||
"channelName":"mychannel",
|
||||
"GOPATH":"../artifacts",
|
||||
"CC_SRC_PATH":"../artifacts",
|
||||
"keyValueStore":"/tmp/fabric-client-kvs",
|
||||
"eventWaitTime":"30000",
|
||||
"orderer":"grpcs://localhost:7050",
|
||||
"users":[
|
||||
"admins":[
|
||||
{
|
||||
"username":"admin",
|
||||
"secret":"adminpw"
|
||||
|
|
|
|||
|
|
@ -2,15 +2,18 @@
|
|||
"name": "balance-transfer",
|
||||
"version": "1.0.0",
|
||||
"description": "A balance-transfer example node program to demonstrate using node.js SDK APIs",
|
||||
"main": "app/app.js",
|
||||
"main": "app.js",
|
||||
"scripts": {
|
||||
"start": "node app.js"
|
||||
},
|
||||
"keywords": [
|
||||
"fabric-client sample app",
|
||||
"balance-transfer node sample",
|
||||
"v1.0 fabric nodesdk sample"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=6.9.5",
|
||||
"npm": ">=3.10.10"
|
||||
"node": ">=6.9.5 <7.0",
|
||||
"npm": ">=3.10.10 <4.0"
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ curl -s -X POST \
|
|||
-H "authorization: Bearer $ORG1_TOKEN" \
|
||||
-H "content-type: application/json" \
|
||||
-d '{
|
||||
"peers": ["localhost:7051","localhost:7056"]
|
||||
"peers": ["peer1","peer2"]
|
||||
}'
|
||||
echo
|
||||
echo
|
||||
|
|
@ -68,7 +68,7 @@ curl -s -X POST \
|
|||
-H "authorization: Bearer $ORG2_TOKEN" \
|
||||
-H "content-type: application/json" \
|
||||
-d '{
|
||||
"peers": ["localhost:8051","localhost:8056"]
|
||||
"peers": ["peer1","peer2"]
|
||||
}'
|
||||
echo
|
||||
echo
|
||||
|
|
@ -80,7 +80,7 @@ curl -s -X POST \
|
|||
-H "authorization: Bearer $ORG1_TOKEN" \
|
||||
-H "content-type: application/json" \
|
||||
-d '{
|
||||
"peers": ["localhost:7051","localhost:7056"],
|
||||
"peers": ["peer1", "peer2"],
|
||||
"chaincodeName":"mycc",
|
||||
"chaincodePath":"github.com/example_cc",
|
||||
"chaincodeVersion":"v0"
|
||||
|
|
@ -96,7 +96,7 @@ curl -s -X POST \
|
|||
-H "authorization: Bearer $ORG2_TOKEN" \
|
||||
-H "content-type: application/json" \
|
||||
-d '{
|
||||
"peers": ["localhost:8051","localhost:8056"],
|
||||
"peers": ["peer1","peer2"],
|
||||
"chaincodeName":"mycc",
|
||||
"chaincodePath":"github.com/example_cc",
|
||||
"chaincodeVersion":"v0"
|
||||
|
|
@ -113,7 +113,6 @@ curl -s -X POST \
|
|||
-d '{
|
||||
"chaincodeName":"mycc",
|
||||
"chaincodeVersion":"v0",
|
||||
"fcn":"init",
|
||||
"args":["a","100","b","200"]
|
||||
}'
|
||||
echo
|
||||
|
|
@ -126,7 +125,6 @@ TRX_ID=$(curl -s -X POST \
|
|||
-H "authorization: Bearer $ORG1_TOKEN" \
|
||||
-H "content-type: application/json" \
|
||||
-d '{
|
||||
"peers": ["localhost:7051", "localhost:8051"],
|
||||
"fcn":"move",
|
||||
"args":["a","b","10"]
|
||||
}')
|
||||
|
|
|
|||
Loading…
Reference in a new issue