diff --git a/examples/balance-transfer/README.md b/examples/balance-transfer/README.md
index 6a8ca0347c..3c0e411ace 100644
--- a/examples/balance-transfer/README.md
+++ b/examples/balance-transfer/README.md
@@ -1,13 +1,13 @@
## Balance transfer
-A sample node-based app to demonstrate **__fabric-client__** & **__fabric-ca-client__** Node SDK APIs
+A sample Node.js app to demonstrate **__fabric-client__** & **__fabric-ca-client__** Node.js SDK APIs
### Prerequisites and setup:
* [Docker](https://www.docker.com/products/overview) - v1.12 or higher
* [Docker Compose](https://docs.docker.com/compose/overview/) - v1.8 or higher
* [Git client](https://git-scm.com/downloads) - needed for clone commands
-* **Nodejs** v6.2.0 - 6.10.0 ( __Node v7+ is not supported__ )
+* **Node.js** v6.2.0 - 6.10.0 ( __Node v7+ is not supported__ )
* Download docker images
```
@@ -18,17 +18,15 @@ docker-compose -f artifacts/docker-compose.yaml pull
Once you have completed the above setup, you will be provisioned a local network with following configuration:
* 2 CAs
-* A kafka orderer
+* A SOLO orderer
* 4 peers (2 peers per Org)
#### Artifacts
-* Crypto material has been generated using the **cryptogen** tool from fabric and mounted to all peers, the orderering node and CA org containers. More details regarding the cryptogen tool are available [here](http://hyperledger-fabric.readthedocs.io/en/latest/getting_started.html#using-the-cryptogen-tool).
-* An Orderer genesis block (orderer.block) and channel configuration transaction (mychannel.tx) has been pre generated using the **configtxgen** tool and placed within the artifacts folder.
- More details regarding the configtxgen tool are available [here](http://hyperledger-fabric.readthedocs.io/en/latest/getting_started.html#using-the-configtxgen-tool).
+* Crypto material has been generated using the **cryptogen** tool from fabric and mounted to all peers, the orderering node and CA containers. More details regarding the cryptogen tool are available [here](http://hyperledger-fabric.readthedocs.io/en/latest/getting_started.html#using-the-cryptogen-tool).
+* An Orderer genesis block (genesis.block) and channel configuration transaction (mychannel.tx) has been pre generated using the **configtxgen** tool and placed within the artifacts folder. More details regarding the configtxgen tool are available [here](http://hyperledger-fabric.readthedocs.io/en/latest/getting_started.html#using-the-configtxgen-tool).
## Running the sample program
-
There are two options available for running the balance-transfer sample
### Option 1:
@@ -81,7 +79,7 @@ cd fabric-sdk-node/examples/balance-transfer
* Register and enroll new users in Organization - **Org1**:
-`curl -s -X POST http://localhost:4000/users -H "cache-control: no-cache" -H "content-type: application/x-www-form-urlencoded" -d 'username=Jim&orgName=org1'`
+`curl -s -X POST http://localhost:4000/users -H "content-type: application/x-www-form-urlencoded" -d 'username=Jim&orgName=org1'`
**OUTPUT:**
@@ -102,16 +100,14 @@ The response contains the success/failure status, an **enrollment Secret** and a
curl -s -X POST \
http://localhost:4000/channels \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
- -H "cache-control: no-cache" \
-H "content-type: application/json" \
- -H "x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
-d '{
"channelName":"mychannel",
"channelConfigPath":"../artifacts/channel/mychannel.tx"
}'
```
-Please note that the Headers **x-access-token** and **authorization** must contain the JWT
+Please note that the Header **authorization** must contain the JWT returned from the `POST /users` call
### Join Channel request
@@ -119,9 +115,7 @@ Please note that the Headers **x-access-token** and **authorization** must conta
curl -s -X POST \
http://localhost:4000/channels/mychannel/peers \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
- -H "cache-control: no-cache" \
-H "content-type: application/json" \
- -H "x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
-d '{
"peers": ["localhost:7051","localhost:7056"]
}'
@@ -132,9 +126,7 @@ curl -s -X POST \
curl -s -X POST \
http://localhost:4000/chaincodes \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
- -H "cache-control: no-cache" \
-H "content-type: application/json" \
- -H "x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
-d '{
"peers": ["localhost:7051","localhost:7056"],
"chaincodeName":"mycc",
@@ -149,13 +141,10 @@ curl -s -X POST \
curl -s -X POST \
http://localhost:4000/channels/mychannel/chaincodes \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
- -H "cache-control: no-cache" \
-H "content-type: application/json" \
- -H "x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
-d '{
"peers": ["localhost:7051"],
"chaincodeName":"mycc",
- "chaincodePath":"github.com/example_cc",
"chaincodeVersion":"v0",
"functionName":"init",
"args":["a","100","b","200"]
@@ -168,27 +157,22 @@ curl -s -X POST \
curl -s -X POST \
http://localhost:4000/channels/mychannel/chaincodes/mycc \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
- -H "cache-control: no-cache" \
-H "content-type: application/json" \
- -H "x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
-d '{
"peers": ["localhost:7051", "localhost:7056"],
- "chaincodeVersion":"v0",
- "functionName":"invoke",
+ "fcn":"invoke",
"args":["move","a","b","10"]
}'
```
-**NOTE:** Ensure that you save the Transaction ID in order to pass this string in the subsequent query transactions.
+**NOTE:** Ensure that you save the Transaction ID from the response in order to pass this string in the subsequent query transactions.
### Chaincode Query
```
curl -s -X GET \
- "http://localhost:4000/channels/mychannel/chaincodes/mycc?peer=peer1&args=%5B%22query%22%2C%22a%22%5D&chaincodeVersion=v0" \
+ "http://localhost:4000/channels/mychannel/chaincodes/mycc?peer=peer1&args=%5B%22query%22%2C%22a%22%5D" \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
- -H "cache-control: no-cache" \
- -H "content-type: application/json" \
- -H "x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI"
+ -H "content-type: application/json"
```
### Query Block by BlockNumber
@@ -197,9 +181,7 @@ curl -s -X GET \
curl -s -X GET \
"http://localhost:4000/channels/mychannel/blocks/1?peer=peer1" \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
- -H "cache-control: no-cache" \
- -H "content-type: application/json" \
- -H "x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI"
+ -H "content-type: application/json"
```
### Query Transaction by TransactionID
@@ -207,9 +189,7 @@ curl -s -X GET \
```
curl -s -X GET http://localhost:4000/channels/mychannel/transactions/TRX_ID?peer=peer1 \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
- -H "cache-control: no-cache" \
- -H "content-type: application/json" \
- -H "x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI"
+ -H "content-type: application/json"
```
**NOTE**: Here the TRX_ID can be from any previous invoke transaction
@@ -220,9 +200,7 @@ curl -s -X GET http://localhost:4000/channels/mychannel/transactions/TRX_ID?peer
curl -s -X GET \
"http://localhost:4000/channels/mychannel?peer=peer1" \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
- -H "cache-control: no-cache" \
- -H "content-type: application/json" \
- -H "x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI"
+ -H "content-type: application/json"
```
### Query Installed chaincodes
@@ -231,9 +209,7 @@ curl -s -X GET \
curl -s -X GET \
"http://localhost:4000/chaincodes?peer=peer1&type=installed" \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
- -H "cache-control: no-cache" \
- -H "content-type: application/json" \
- -H "x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI"
+ -H "content-type: application/json"
```
### Query Instantiated chaincodes
@@ -242,9 +218,7 @@ curl -s -X GET \
curl -s -X GET \
"http://localhost:4000/chaincodes?peer=peer1&type=instantiated" \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
- -H "cache-control: no-cache" \
- -H "content-type: application/json" \
- -H "x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI"
+ -H "content-type: application/json"
```
### Query Channels
@@ -253,9 +227,7 @@ curl -s -X GET \
curl -s -X GET \
"http://localhost:4000/channels?peer=peer1" \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \
- -H "cache-control: no-cache" \
- -H "content-type: application/json" \
- -H "x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI"
+ -H "content-type: application/json"
```
### Network configuration considerations
@@ -304,12 +276,10 @@ If you choose to customize your docker-compose yaml file by hardcoding IP Addres
To retrieve the IP Address for one of your network entities, issue the following command:
-
-
```
# this will return the IP Address for peer0
docker inspect peer0 | grep IPAddress
```
This work is licensed under a Creative Commons Attribution 4.0 International License.
-s
+
diff --git a/examples/balance-transfer/app.js b/examples/balance-transfer/app.js
index e544d83d62..a2fb0f4882 100644
--- a/examples/balance-transfer/app.js
+++ b/examples/balance-transfer/app.js
@@ -21,9 +21,11 @@ var session = require('express-session');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var http = require('http');
+var util = require('util');
var app = express();
var expressJWT = require('express-jwt');
var jwt = require('jsonwebtoken');
+var bearerToken = require('express-bearer-token');
var cors = require('cors');
var config = require('./config.json');
var helper = require('./app/helper.js');
@@ -53,6 +55,33 @@ app.use(expressJWT({
}).unless({
path: ['/users']
}));
+app.use(bearerToken());
+app.use(function(req, res, next) {
+ if (req.originalUrl.indexOf('/users') >= 0) {
+ return next();
+ }
+
+ var token = req.token;
+ jwt.verify(token, app.get('secret'), function(err, decoded) {
+ if (err) {
+ res.send({
+ success: false,
+ message: 'Failed to authenticate token. Make sure to include the ' +
+ 'token returned from /users call in the authorization header ' +
+ ' as a Bearer token'
+ });
+ return;
+ } else {
+ // add the decoded user name and org name to the request object
+ // for the downstream code to use
+ req.username = decoded.username;
+ req.orgname = decoded.orgName;
+ logger.debug(util.format('Decoded from JWT token: username - %s, orgname - %s', decoded.username, decoded.orgName));
+ return next();
+ }
+ });
+});
+
///////////////////////////////////////////////////////////////////////////////
//////////////////////////////// START SERVER /////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
@@ -69,6 +98,7 @@ function getErrorMessage(field) {
};
return response;
}
+
///////////////////////////////////////////////////////////////////////////////
///////////////////////// REST ENDPOINTS START HERE ///////////////////////////
///////////////////////////////////////////////////////////////////////////////
@@ -120,22 +150,10 @@ app.post('/channels', function(req, res) {
res.json(getErrorMessage('\'channelConfigPath\''));
return;
}
- var token = req.body.token || req.query.token || req.headers[
- 'x-access-token'];
- jwt.verify(token, app.get('secret'), function(err, decoded) {
- if (err) {
- res.send({
- success: false,
- message: 'Failed to authenticate token.'
- });
- } else {
- logger.debug('User name : ' + decoded.username);
- logger.debug('Org name : ' + decoded.orgName);
- channels.createChannel(channelName, channelConfigPath, decoded.username, decoded.orgName)
- .then(function(message) {
- res.send(message);
- });
- }
+
+ channels.createChannel(channelName, channelConfigPath, req.username, req.orgname)
+ .then(function(message) {
+ res.send(message);
});
});
// Join Channel
@@ -153,23 +171,10 @@ app.post('/channels/:channelName/peers', function(req, res) {
res.json(getErrorMessage('\'peers\''));
return;
}
- var token = req.body.token || req.query.token || req.headers[
- 'x-access-token'];
- jwt.verify(token, app.get('secret'), function(err, decoded) {
- if (err) {
- res.send({
- success: false,
- message: 'Failed to authenticate token.'
- });
- } else {
- //res.send(d);
- logger.debug('User name : ' + decoded.username);
- logger.debug('Org name : ' + decoded.orgName);
- join.joinChannel(channelName, peers, decoded.username, decoded.orgName).then(
- function(message) {
- res.send(message);
- });
- }
+
+ join.joinChannel(channelName, peers, req.username, req.orgname)
+ .then(function(message) {
+ res.send(message);
});
});
// Install chaincode on target peers
@@ -199,54 +204,29 @@ app.post('/chaincodes', function(req, res) {
res.json(getErrorMessage('\'chaincodeVersion\''));
return;
}
- var token = req.body.token || req.query.token || req.headers[
- 'x-access-token'];
- jwt.verify(token, app.get('secret'), function(err, decoded) {
- if (err) {
- res.send({
- success: false,
- message: 'Failed to authenticate token.'
- });
- } else {
- //res.send(d);
- logger.debug('User name : ' + decoded.username);
- logger.debug('Org name : ' + decoded.orgName);
- install.installChaincode(peers, chaincodeName, chaincodePath, chaincodeVersion, decoded.username, decoded.orgName)
- .then(function(message) {
- res.send(message);
- });
- }
+
+ install.installChaincode(peers, chaincodeName, chaincodePath, chaincodeVersion, req.username, req.orgname)
+ .then(function(message) {
+ res.send(message);
});
});
// Instantiate chaincode on target peers
app.post('/channels/:channelName/chaincodes', function(req, res) {
logger.debug('==================== INSTANTIATE CHAINCODE ==================');
- var peers = req.body.peers;
var chaincodeName = req.body.chaincodeName;
- var chaincodePath = req.body.chaincodePath;
var chaincodeVersion = req.body.chaincodeVersion;
var channelName = req.params.channelName;
var functionName = req.body.functionName;
var args = req.body.args;
logger.debug('channelName : ' + channelName);
- logger.debug('peers : ' + peers); // target peers list
logger.debug('chaincodeName : ' + chaincodeName);
- logger.debug('chaincodePath : ' + chaincodePath);
logger.debug('chaincodeVersion : ' + chaincodeVersion);
logger.debug('functionName : ' + functionName);
logger.debug('args : ' + args);
- if (!peers || peers.length == 0) {
- res.json(getErrorMessage('\'peers\''));
- return;
- }
if (!chaincodeName) {
res.json(getErrorMessage('\'chaincodeName\''));
return;
}
- if (!chaincodePath) {
- res.json(getErrorMessage('\'chaincodePath\''));
- return;
- }
if (!chaincodeVersion) {
res.json(getErrorMessage('\'chaincodeVersion\''));
return;
@@ -263,24 +243,9 @@ app.post('/channels/:channelName/chaincodes', function(req, res) {
res.json(getErrorMessage('\'args\''));
return;
}
- var token = req.body.token || req.query.token || req.headers[
- 'x-access-token'];
- jwt.verify(token, app.get('secret'), function(err, decoded) {
- if (err) {
- res.send({
- success: false,
- message: 'Failed to authenticate token.'
- });
- } else {
- //res.send(d);
- logger.debug('User name : ' + decoded.username);
- logger.debug('Org name : ' + decoded.orgName);
- instantiate.instantiateChaincode(peers, channelName, chaincodeName, chaincodePath,
- chaincodeVersion, functionName, args, decoded.username, decoded.orgName)
- .then(function(message) {
- res.send(message);
- });
- }
+ instantiate.instantiateChaincode(channelName, chaincodeName, chaincodeVersion, functionName, args, req.username, req.orgname)
+ .then(function(message) {
+ res.send(message);
});
});
// Invoke transaction on chaincode on target peers
@@ -288,13 +253,12 @@ app.post('/channels/:channelName/chaincodes/:chaincodeName', function(req, res)
logger.debug('==================== INVOKE ON CHAINCODE ==================');
var peers = req.body.peers;
var chaincodeName = req.params.chaincodeName;
- var chaincodeVersion = req.body.chaincodeVersion;
var channelName = req.params.channelName;
+ var fcn = req.body.fcn;
var args = req.body.args;
logger.debug('channelName : ' + channelName);
- logger.debug('peers : ' + peers); // target peers list
logger.debug('chaincodeName : ' + chaincodeName);
- logger.debug('chaincodeVersion : ' + chaincodeVersion);
+ logger.debug('fcn : ' + fcn);
logger.debug('args : ' + args);
if (!peers || peers.length == 0) {
res.json(getErrorMessage('\'peers\''));
@@ -304,63 +268,40 @@ app.post('/channels/:channelName/chaincodes/:chaincodeName', function(req, res)
res.json(getErrorMessage('\'chaincodeName\''));
return;
}
- if (!chaincodeVersion) {
- res.json(getErrorMessage('\'chaincodeVersion\''));
- return;
- }
if (!channelName) {
res.json(getErrorMessage('\'channelName\''));
return;
}
+ if (!fcn) {
+ res.json(getErrorMessage('\'fcn\''));
+ return;
+ }
if (!args) {
res.json(getErrorMessage('\'args\''));
return;
}
- var token = req.body.token || req.query.token || req.headers[
- 'x-access-token'];
- jwt.verify(token, app.get('secret'), function(err, decoded) {
- if (err) {
- res.send({
- success: false,
- message: 'Failed to authenticate token.'
- });
- } else {
- //res.send(d);
- logger.debug('User name : ' + decoded.username);
- logger.debug('Org name : ' + decoded.orgName);
- let promise = invoke.invokeChaincode(peers, channelName, chaincodeName,
- chaincodeVersion, args, decoded.username, decoded.orgName);
- promise.then(function(message) {
- res.send(message);
- });
- }
+
+ invoke.invokeChaincode(peers, channelName, chaincodeName, fcn, args, req.username, req.orgname)
+ .then(function(message) {
+ res.send(message);
});
});
// Query on chaincode on target peers
app.get('/channels/:channelName/chaincodes/:chaincodeName', function(req, res) {
- logger.debug('==================== QUERY ON CHAINCODE ==================');
+ logger.debug('==================== QUERY BY CHAINCODE ==================');
var channelName = req.params.channelName;
var chaincodeName = req.params.chaincodeName;
- let peer = req.query.peer;
let args = req.query.args;
- let chaincodeVersion = req.query.chaincodeVersion;
+ let peer = req.query.peer;
+
logger.debug('channelName : ' + channelName);
logger.debug('chaincodeName : ' + chaincodeName);
- logger.debug('peer : ' + peer);
logger.debug('args : ' + args);
- logger.debug('chaincodeVersion : ' + chaincodeVersion);
- if (!peer) {
- res.json(getErrorMessage('\'peer\''));
- return;
- }
+
if (!chaincodeName) {
res.json(getErrorMessage('\'chaincodeName\''));
return;
}
- if (!chaincodeVersion) {
- res.json(getErrorMessage('\'chaincodeVersion\''));
- return;
- }
if (!channelName) {
res.json(getErrorMessage('\'channelName\''));
return;
@@ -372,30 +313,15 @@ app.get('/channels/:channelName/chaincodes/:chaincodeName', function(req, res) {
args = args.replace(/'/g, '"');
args = JSON.parse(args);
logger.debug(args);
- var token = req.body.token || req.query.token || req.headers[
- 'x-access-token'];
- jwt.verify(token, app.get('secret'), function(err, decoded) {
- if (err) {
- res.send({
- success: false,
- message: 'Failed to authenticate token.'
- });
- } else {
- //res.send(d);
- logger.debug('User name : ' + decoded.username);
- logger.debug('Org name : ' + decoded.orgName);
- query.queryChaincode(peer, channelName, chaincodeName, chaincodeVersion,
- args, decoded.username, decoded.orgName)
- .then(function(message) {
- res.send(message);
- });
- }
+
+ query.queryChaincode(peer, channelName, chaincodeName, args, req.username, req.orgname)
+ .then(function(message) {
+ res.send(message);
});
});
// Query Get Block by BlockNumber
app.get('/channels/:channelName/blocks/:blockId', function(req, res) {
logger.debug('==================== GET BLOCK BY NUMBER ==================');
- //logger.debug('peers : '+req.body.peers);// target peers list
let blockId = req.params.blockId;
let peer = req.query.peer;
logger.debug('channelName : ' + req.params.channelName);
@@ -405,27 +331,11 @@ app.get('/channels/:channelName/blocks/:blockId', function(req, res) {
res.json(getErrorMessage('\'blockId\''));
return;
}
- if (!peer) {
- res.json(getErrorMessage('\'peer\''));
- return;
- }
- var token = req.body.token || req.query.token || req.headers[
- 'x-access-token'];
- jwt.verify(token, app.get('secret'), function(err, decoded) {
- if (err) {
- res.send({
- success: false,
- message: 'Failed to authenticate token.'
- });
- } else {
- logger.debug('User name : ' + decoded.username);
- logger.debug('Org name : ' + decoded.orgName);
- query.getBlockByNumber(peer, blockId, decoded.username, decoded.orgName)
- .then(function(message) {
- res.send(message);
- });
- }
- });
+
+ query.getBlockByNumber(peer, blockId, req.username, req.orgname)
+ .then(function(message) {
+ res.send(message);
+ });
});
// Query Get Transaction by Transaction ID
app.get('/channels/:channelName/transactions/:trxnId', function(req, res) {
@@ -439,32 +349,15 @@ app.get('/channels/:channelName/transactions/:trxnId', function(req, res) {
res.json(getErrorMessage('\'trxnId\''));
return;
}
- if (!peer) {
- res.json(getErrorMessage('\'peer\''));
- return;
- }
- var token = req.body.token || req.query.token || req.headers[
- 'x-access-token'];
- jwt.verify(token, app.get('secret'), function(err, decoded) {
- if (err) {
- res.send({
- success: false,
- message: 'Failed to authenticate token.'
- });
- } else {
- logger.debug('User name : ' + decoded.username);
- logger.debug('Org name : ' + decoded.orgName);
- query.getTransactionByID(peer, trxnId, decoded.username, decoded.orgName)
- .then(function(message) {
- res.send(message);
- });
- }
- });
+
+ query.getTransactionByID(peer, trxnId, req.username, req.orgname)
+ .then(function(message) {
+ res.send(message);
+ });
});
// Query Get Block by Hash
app.get('/channels/:channelName/blocks', function(req, res) {
logger.debug('================ GET BLOCK BY HASH ======================');
- //logger.debug('peers : '+req.body.peers);// target peers list
logger.debug('channelName : ' + req.params.channelName);
let hash = req.query.hash;
let peer = req.query.peer;
@@ -472,56 +365,23 @@ app.get('/channels/:channelName/blocks', function(req, res) {
res.json(getErrorMessage('\'hash\''));
return;
}
- if (!peer) {
- res.json(getErrorMessage('\'peer\''));
- return;
- }
- var token = req.body.token || req.query.token || req.headers[
- 'x-access-token'];
- jwt.verify(token, app.get('secret'), function(err, decoded) {
- if (err) {
- res.send({
- success: false,
- message: 'Failed to authenticate token.'
- });
- } else {
- logger.debug('User name : ' + decoded.username);
- logger.debug('Org name : ' + decoded.orgName);
- query.getBlockByHash(peer, hash, decoded.username, decoded.orgName).then(
- function(message) {
- res.send(message);
- });
- }
- });
+
+ query.getBlockByHash(peer, hash, req.username, req.orgname).then(
+ function(message) {
+ res.send(message);
+ });
});
//Query for Channel Information
app.get('/channels/:channelName', function(req, res) {
logger.debug(
'================ GET CHANNEL INFORMATION ======================');
- //logger.debug('peers : '+req.body.peers);// target peers list
logger.debug('channelName : ' + req.params.channelName);
let peer = req.query.peer;
- if (!peer) {
- res.json(getErrorMessage('\'peer\''));
- return;
- }
- var token = req.body.token || req.query.token || req.headers[
- 'x-access-token'];
- jwt.verify(token, app.get('secret'), function(err, decoded) {
- if (err) {
- res.send({
- success: false,
- message: 'Failed to authenticate token.'
- });
- } else {
- logger.debug('User name : ' + decoded.username);
- logger.debug('Org name : ' + decoded.orgName);
- query.getChainInfo(peer, decoded.username, decoded.orgName).then(
- function(message) {
- res.send(message);
- });
- }
- });
+
+ query.getChainInfo(peer, req.username, req.orgname).then(
+ function(message) {
+ res.send(message);
+ });
});
// Query to fetch all Installed/instantiated chaincodes
app.get('/chaincodes', function(req, res) {
@@ -535,55 +395,25 @@ app.get('/chaincodes', function(req, res) {
logger.debug(
'================ GET INSTANTIATED CHAINCODES ======================');
}
- logger.debug('peer: ' + req.query.peer);
- if (!peer) {
- res.json(getErrorMessage('\'peer\''));
- return;
- }
- var token = req.body.token || req.query.token || req.headers[
- 'x-access-token'];
- jwt.verify(token, app.get('secret'), function(err, decoded) {
- if (err) {
- res.send({
- success: false,
- message: 'Failed to authenticate token.'
- });
- } else {
- logger.debug('User name : ' + decoded.username);
- logger.debug('Org name : ' + decoded.orgName);
- query.getInstalledChaincodes(peer, installType, decoded.username, decoded.orgName)
- .then(function(message) {
- res.send(message);
- });
- }
+
+ query.getInstalledChaincodes(peer, installType, req.username, req.orgname)
+ .then(function(message) {
+ res.send(message);
});
});
// Query to fetch channels
app.get('/channels', function(req, res) {
logger.debug('================ GET CHANNELS ======================');
- logger.debug('End point : /channels');
- //logger.debug('peers : '+req.body.peers);// target peers list
logger.debug('peer: ' + req.query.peer);
var peer = req.query.peer;
if (!peer) {
res.json(getErrorMessage('\'peer\''));
return;
}
- var token = req.body.token || req.query.token || req.headers[
- 'x-access-token'];
- jwt.verify(token, app.get('secret'), function(err, decoded) {
- if (err) {
- res.send({
- success: false,
- message: 'Failed to authenticate token.'
- });
- } else {
- logger.debug('User name : ' + decoded.username);
- logger.debug('Org name : ' + decoded.orgName);
- query.getChannels(peer, decoded.username, decoded.orgName).then(function(
- message) {
- res.send(message);
- });
- }
+
+ query.getChannels(peer, req.username, req.orgname)
+ .then(function(
+ message) {
+ res.send(message);
});
});
diff --git a/examples/balance-transfer/app/create-channel.js b/examples/balance-transfer/app/create-channel.js
index 8b66855788..ca8680c738 100644
--- a/examples/balance-transfer/app/create-channel.js
+++ b/examples/balance-transfer/app/create-channel.js
@@ -22,17 +22,31 @@ var logger = helper.getLogger('Create-Channel');
//Attempt to send a request to the orderer with the sendCreateChain method
var createChannel = function(channelName, channelConfigPath, username, orgName) {
logger.debug('\n====== Creating Channel \'' + channelName + '\' ======\n');
- helper.setupOrderer();
- var chain = helper.getChainForOrg(orgName);
+ var client = helper.getClientForOrg(orgName);
+ var channel = helper.getChannelForOrg(orgName);
+
+ // read in the envelope for the channel config raw bytes
+ var envelope = fs.readFileSync(path.join(__dirname, channelConfigPath));
+ // extract the channel config bytes from the envelope to be signed
+ var channelConfig = client.extractChannelConfig(envelope);
+
//Acting as a client in the given organization provided with "orgName" param
- return helper.getRegisteredUsers(username, orgName).then((member) => {
- logger.debug('Successfully enrolled user \''+username+'\'');
- // readin the envelope to send to the orderer
- var request = {
- envelope: fs.readFileSync(path.join(__dirname, channelConfigPath))
+ return helper.getOrgAdmin(orgName).then((admin) => {
+ logger.debug(util.format('Successfully acquired admin user for the organization "%s"', orgName));
+ // sign the channel config bytes as "endorsement", this is required by
+ // the orderer's channel creation policy
+ let signature = client.signChannelConfig(channelConfig);
+
+ let request = {
+ config: channelConfig,
+ signatures: [signature],
+ name: channelName,
+ orderer: channel.getOrderers()[0],
+ txId: client.newTransactionID()
};
+
// send to orderer
- return chain.createChannel(request);
+ return client.createChannel(request);
}, (err) => {
logger.error('Failed to enroll user \''+username+'\'. Error: ' + err);
throw new Error('Failed to enroll user \''+username+'\'' + err);
diff --git a/examples/balance-transfer/app/helper.js b/examples/balance-transfer/app/helper.js
index 06c4720e5a..8f2f2d6ad0 100644
--- a/examples/balance-transfer/app/helper.js
+++ b/examples/balance-transfer/app/helper.js
@@ -16,152 +16,201 @@
'use strict';
var log4js = require('log4js');
var logger = log4js.getLogger('Helper');
+logger.setLevel('DEBUG');
+
var path = require('path');
var util = require('util');
-var fs = require('fs');
+var fs = require('fs-extra');
var User = require('fabric-client/lib/User.js');
var crypto = require('crypto');
-var Orderer = require('fabric-client/lib/Orderer.js');
-var Peer = require('fabric-client/lib/Peer.js');
-var copService = require('fabric-ca-client/lib/FabricCAClientImpl.js');
-var FabricCAClient = copService.FabricCAClient;
+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');
-logger.setLevel('DEBUG');
-var client1 = new hfc();
-var chain1 = client1.newChain(config.channelName);
-var client2 = new hfc();
-var chain2 = client2.newChain(config.channelName);
-exports.client1 = client1;
-exports.client1 = client2;
-exports.chain1 = chain1;
-exports.chain2 = chain2;
-// need to enroll it with CA server
-var caClient;
-var setupOrderer = function() {
- let chains = [chain1, chain2];
- chains.forEach(function(chain) {
- if (chain.getOrderers().length === 0) {
- chain.addOrderer(getOrderer());
- } else {
- var ordererList = chain.getOrderers();
- let found = false;
- for (let key in ordererList) {
- if (ordererList[key]._url === config.orderer) {
- found = true;
- }
- }
- if (!found) {
- chain.addOrderer(getOrderer());
- }
- }
- });
-};
-var getTarget = function(targets, peer) {
- for (let key in targets) {
- if (targets[key]._endpoint.addr === peer) {
- return targets[key];
- }
+
+var clients = {};
+var channels = {};
+var caClients = {};
+
+// set up the client and channel objects for each org
+for (let key in ORGS) {
+ if (key.indexOf('org') === 0) {
+ let client = new hfc();
+
+ let cryptoSuite = hfc.newCryptoSuite();
+ cryptoSuite.setCryptoKeyStore(hfc.newCryptoKeyStore({path: getKeyStoreForOrg(ORGS[key].name)}));
+ client.setCryptoSuite(cryptoSuite);
+
+ let channel = client.newChannel(config.channelName);
+ channel.addOrderer(newOrderer(client));
+
+ clients[key] = client;
+ channels[key] = channel;
+
+ setupPeers(channel, key, client);
+
+ let caUrl = ORGS[key].ca;
+ caClients[key] = new copService(caUrl, null /*defautl TLS opts*/, '' /* default CA */, cryptoSuite);
}
-};
-var setupPeers = function(chain, peers, targets) {
- if (chain.getPeers().length === 0) {
- for (let index in targets) {
- chain.addPeer(targets[index]);
- }
- } else {
- var peersList = chain.getPeers();
- for (let index in peers) {
- let found = false;
- for (let key in peersList) {
- if (peersList[key]._endpoint.addr === peers[index]) {
- found = true;
+}
+
+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']
}
- }
- if (!found) {
- let target = getTarget(targets, peers[index]);
- chain.addPeer(target);
- }
+ );
+
+ channel.addPeer(peer);
}
}
-};
-var getChainForOrg = function(orgName) {
- if (orgName === config.orgsList[0]) {
- return chain1;
- } else if (orgName === config.orgsList[1]) {
- return chain2;
- }
-};
-var clientForOrg = function(orgName) {
- if (orgName === config.orgsList[0]) {
- return client1;
- } else if (orgName === config.orgsList[1]) {
- return client2;
- }
-};
-var getTargets = function(peers, org) {
+}
+
+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, {
+ 'pem': caroots,
+ 'ssl-target-name-override': ORGS.orderer['server-hostname']
+ });
+}
+
+function readAllFiles(dir) {
+ var files = fs.readdirSync(dir);
+ var certs = [];
+ files.forEach((file_name) => {
+ let file_path = path.join(dir,file_name);
+ let data = fs.readFileSync(file_path);
+ certs.push(data);
+ });
+ return certs;
+}
+
+function getOrgName(org) {
+ return ORGS[org].name;
+}
+
+function getKeyStoreForOrg(org) {
+ return config.keyValueStore + '_' + org;
+}
+
+function newRemotes(urls, forPeers, userOrg) {
var targets = [];
- for (let index in peers) {
- for (let key in ORGS[org]) {
- if (ORGS[org].hasOwnProperty(key)) {
- //FIXME: Can we think a better solution here ?
- if (key.indexOf('peer') === 0 && ORGS[org][key]['requests'] === 'grpcs://' +
- peers[index]) {
- let data = fs.readFileSync(path.join(__dirname, ORGS[org][key][
- 'tls_cacerts'
- ]));
- targets.push(new Peer('grpcs://' + peers[index], {
- pem: Buffer.from(data).toString(),
- 'ssl-target-name-override': ORGS[org][key]['server-hostname']
- }));
+ // find the peer that match the urls
+ outer:
+ for (let index in urls) {
+ let peerUrl = urls[index];
+
+ 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 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 (!found) {
+ logger.error(util.format('Failed to find a peer matching the url %s', peerUrl));
+ }
}
+
return targets;
+}
+
+//-------------------------------------//
+// APIs
+//-------------------------------------//
+var getChannelForOrg = function(org) {
+ return channels[org];
+};
+
+var getClientForOrg = function(org) {
+ return clients[org];
};
-var getMspID = function(orgName) {
- logger.debug('Msp ID : ' + ORGS[orgName].mspid);
- return ORGS[orgName].mspid;
+
+var newPeers = function(urls) {
+ return newRemotes(urls, true);
};
-var setCaClient = function(userOrg) {
- var caUrl = ORGS[userOrg].ca;
- caClient = new copService(caUrl);
+
+var newEventHubs = function(urls, org) {
+ return newRemotes(urls, false, org);
};
-var tlsOptions = {
- trustedRoots: [],
- verify: false
+
+var getMspID = function(org) {
+ logger.debug('Msp ID : ' + ORGS[org].mspid);
+ return ORGS[org].mspid;
};
+
var getAdminUser = function(userOrg) {
var users = config.users;
var username = users[0].username;
var password = users[0].secret;
var member;
- var client = clientForOrg(userOrg);
+ var client = getClientForOrg(userOrg);
+
return hfc.newDefaultKeyValueStore({
path: getKeyStoreForOrg(getOrgName(userOrg))
}).then((store) => {
client.setStateStore(store);
- //NOTE: This workaround is required to be able to switch user context
- // in the client instance
+ // clearing the user context before switching
client._userContext = null;
- return client.getUserContext(username).then((user) => {
+ return client.getUserContext(username, true).then((user) => {
if (user && user.isEnrolled()) {
logger.info('Successfully loaded member from persistence');
return user;
} else {
- setCaClient(userOrg);
+ let caClient = caClients[userOrg];
// need to enroll it with CA server
return caClient.enroll({
enrollmentID: username,
enrollmentSecret: password
}).then((enrollment) => {
logger.info('Successfully enrolled user \'' + username + '\'');
- member = new User(username, client);
- return member.setEnrollment(enrollment.key, enrollment.certificate,
- getMspID(userOrg));
+ member = new User(username);
+ member.setCryptoSuite(client.getCryptoSuite());
+ return member.setEnrollment(enrollment.key, enrollment.certificate, getMspID(userOrg));
}).then(() => {
return client.setUserContext(member);
}).then(() => {
@@ -175,36 +224,33 @@ var getAdminUser = function(userOrg) {
});
});
};
+
var getRegisteredUsers = function(username, userOrg, isJson) {
var member;
- var client = clientForOrg(userOrg);
- var cop = new copService(ORGS[userOrg].ca, tlsOptions, {
- keysize: 256,
- hash: 'SHA2'
- });
+ var client = getClientForOrg(userOrg);
var enrollmentSecret = null;
return hfc.newDefaultKeyValueStore({
path: getKeyStoreForOrg(getOrgName(userOrg))
}).then((store) => {
client.setStateStore(store);
- //NOTE: Temporary workaround, as of alpha this is not fixed in node
+ // clearing the user context before switching
client._userContext = null;
- return client.getUserContext(username).then((user) => {
+ return client.getUserContext(username, true).then((user) => {
if (user && user.isEnrolled()) {
logger.info('Successfully loaded member from persistence');
return user;
} else {
- setCaClient(userOrg);
+ let caClient = caClients[userOrg];
return getAdminUser(userOrg).then(function(adminUserObj) {
member = adminUserObj;
- return cop.register({
+ return caClient.register({
enrollmentID: username,
affiliation: userOrg + '.department1'
}, member);
}).then((secret) => {
enrollmentSecret = secret;
logger.debug(username + ' registered successfully');
- return cop.enroll({
+ return caClient.enroll({
enrollmentID: username,
enrollmentSecret: secret
});
@@ -219,16 +265,15 @@ var getRegisteredUsers = function(username, userOrg, isJson) {
return message;
}
logger.debug(username + ' enrolled successfully');
- client.setUserContext(member);
- member = new User(username, client);
+
+ member = new User(username);
member._enrollmentSecret = enrollmentSecret;
- return member.setEnrollment(message.key, message.certificate, ORGS[
- userOrg].mspid);
+ return member.setEnrollment(message.key, message.certificate, getMspID(userOrg));
}).then(() => {
client.setUserContext(member);
return member;
}, (err) => {
- logger.error(username + ' enroll failed');
+ logger.error(util.format('%s enroll failed: %s', username, err.stack ? err.stack : err));
return '' + err;
});;
}
@@ -244,64 +289,64 @@ var getRegisteredUsers = function(username, userOrg, isJson) {
}
return user;
}, (err) => {
- logger.error(username + ' enroll failed');
+ logger.error(util.format('Failed to get registered user: %s, error: %s', username, err.stack ? err.stack : err));
return '' + err;
});
};
+
+var getOrgAdmin = function(userOrg) {
+ var admin = ORGS[userOrg].admin;
+ var keyPath = path.join(__dirname, util.format('../artifacts/crypto-config/peerOrganizations/%s.example.com/users/Admin@%s.example.com/msp/keystore', userOrg, userOrg));
+ var keyPEM = Buffer.from(readAllFiles(keyPath)[0]).toString();
+ var certPath = path.join(__dirname, util.format('../artifacts/crypto-config/peerOrganizations/%s.example.com/users/Admin@%s.example.com/msp//signcerts', userOrg, userOrg));
+ var certPEM = readAllFiles(certPath)[0].toString();
+
+ var client = getClientForOrg(userOrg);
+ var cryptoSuite = hfc.newCryptoSuite();
+ if (userOrg) {
+ cryptoSuite.setCryptoKeyStore(hfc.newCryptoKeyStore({path: getKeyStoreForOrg(getOrgName(userOrg))}));
+ client.setCryptoSuite(cryptoSuite);
+ }
+
+ return hfc.newDefaultKeyValueStore({
+ path: getKeyStoreForOrg(getOrgName(userOrg))
+ }).then((store) => {
+ client.setStateStore(store);
+
+ return client.createUser({
+ username: 'peer'+userOrg+'Admin',
+ mspid: getMspID(userOrg),
+ cryptoContent: {
+ privateKeyPEM: keyPEM,
+ signedCertPEM: certPEM
+ }
+ });
+ });
+};
+
var setupChaincodeDeploy = function() {
process.env.GOPATH = path.join(__dirname, config.GOPATH);
};
+
var getLogger = function(moduleName) {
var logger = log4js.getLogger(moduleName);
logger.setLevel('DEBUG');
return logger;
};
-var getOrgName = function(org) {
- //logger.debug('Org name : ' + ORGS[org].name);
- return ORGS[org].name;
-};
-var getOrderer = function() {
- var caRootsPath = ORGS.orderer.tls_cacerts;
- let data = fs.readFileSync(path.join(__dirname, caRootsPath));
- let caroots = Buffer.from(data).toString();
- return new Orderer(config.orderer, {
- 'pem': caroots,
- 'ssl-target-name-override': ORGS.orderer['server-hostname']
- });
-};
-var getKeyStoreForOrg = function(org) {
- return config.keyValueStore + '_' + org;
-};
-var getArgs = function(chaincodeArgs) {
- var args = [];
- for (var i = 0; i < chaincodeArgs.length; i++) {
- args.push(chaincodeArgs[i]);
- }
- return args;
-};
+
var getPeerAddressByName = function(org, peer) {
- var peerList = [];
var address = ORGS[org][peer].requests;
return address.split('grpcs://')[1];
};
-var getNonce = function() {
- var length = hfc.getConfigSetting('nonce-size');
- var value = crypto.randomBytes(length);
- return value;
-};
-exports.getRegisteredUsers = getRegisteredUsers;
-exports.getArgs = getArgs;
-exports.getKeyStoreForOrg = getKeyStoreForOrg;
-exports.getOrgName = getOrgName;
+
+exports.getChannelForOrg = getChannelForOrg;
+exports.getClientForOrg = getClientForOrg;
exports.getLogger = getLogger;
exports.setupChaincodeDeploy = setupChaincodeDeploy;
exports.getMspID = getMspID;
exports.ORGS = ORGS;
-exports.setupOrderer = setupOrderer;
-exports.getTargets = getTargets;
-exports.getChainForOrg = getChainForOrg;
-exports.clientForOrg = clientForOrg;
-exports.setupPeers = setupPeers;
+exports.newPeers = newPeers;
+exports.newEventHubs = newEventHubs;
exports.getPeerAddressByName = getPeerAddressByName;
exports.getRegisteredUsers = getRegisteredUsers;
-exports.getNonce = getNonce;
+exports.getOrgAdmin = getOrgAdmin;
diff --git a/examples/balance-transfer/app/install-chaincode.js b/examples/balance-transfer/app/install-chaincode.js
index 07e78f1418..360b0b884a 100644
--- a/examples/balance-transfer/app/install-chaincode.js
+++ b/examples/balance-transfer/app/install-chaincode.js
@@ -21,33 +21,23 @@ var config = require('../config.json');
var helper = require('./helper.js');
var logger = helper.getLogger('install-chaincode');
var tx_id = null;
-var nonce = null;
-var member = null;
//function installChaincode(org) {
var installChaincode = function(peers, chaincodeName, chaincodePath,
chaincodeVersion, username, org) {
logger.debug(
'\n============ Install chaincode on organizations ============\n');
helper.setupChaincodeDeploy();
- var chain = helper.getChainForOrg(org);
- helper.setupOrderer();
- var targets = helper.getTargets(peers, org);
- helper.setupPeers(chain, peers, targets);
+ var channel = helper.getChannelForOrg(org);
+ var client = helper.getClientForOrg(org);
- return helper.getRegisteredUsers(username, org).then((user) => {
- member = user;
- nonce = helper.getNonce();
- tx_id = chain.buildTransactionID(nonce, member);
- // send proposal to endorser
+ return helper.getOrgAdmin(org).then((user) => {
var request = {
- targets: targets,
+ targets: helper.newPeers(peers),
chaincodePath: chaincodePath,
chaincodeId: chaincodeName,
- chaincodeVersion: chaincodeVersion,
- txId: tx_id,
- nonce: nonce
+ chaincodeVersion: chaincodeVersion
};
- return chain.sendInstallProposal(request);
+ return client.installChaincode(request);
}, (err) => {
logger.error('Failed to enroll user \'' + username + '\'. ' + err);
throw new Error('Failed to enroll user \'' + username + '\'. ' + err);
diff --git a/examples/balance-transfer/app/instantiate-chaincode.js b/examples/balance-transfer/app/instantiate-chaincode.js
index 54d7ac94d5..92e3c5a479 100644
--- a/examples/balance-transfer/app/instantiate-chaincode.js
+++ b/examples/balance-transfer/app/instantiate-chaincode.js
@@ -26,69 +26,37 @@ 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 nonce = null;
-var member = null;
-var eventhubs = [];
-var allEventhubs = [];
-var isSuccess = null;
-var instantiateChaincode = function(peers, channelName, chaincodeName,
- chaincodePath, chaincodeVersion, functionName, args, username, org) {
- var closeConnections = function(isSuccess) {
- for (var key in allEventhubs) {
- var eventhub = allEventhubs[key];
- if (eventhub && eventhub.isconnected()) {
- //logger.debug('Disconnecting the event hub');
- eventhub.disconnect();
- }
- }
- };
+var eh = null;
+
+var instantiateChaincode = function(channelName, chaincodeName, chaincodeVersion, functionName, args, username, org) {
logger.debug('\n============ Instantiate chaincode on organization ' + org +
' ============\n');
- helper.setupChaincodeDeploy();
- var chain = helper.getChainForOrg(org);
- helper.setupOrderer();
- var targets = helper.getTargets(peers, org);
- helper.setupPeers(chain, peers, targets);
- //FIXME: chanfe this to read peer dynamically
- let eh = new EventHub();
- let data = fs.readFileSync(path.join(__dirname, ORGS[org]['peer1'][
- 'tls_cacerts'
- ]));
- eh.setPeerAddr(ORGS[org]['peer1']['events'], {
- pem: Buffer.from(data).toString(),
- 'ssl-target-name-override': ORGS[org]['peer1']['server-hostname']
- });
- eh.connect();
- eventhubs.push(eh);
- allEventhubs.push(eh);
- return helper.getRegisteredUsers(username, org).then((user) => {
- member = user;
- // read the config block from the orderer for the chain
+
+ var channel = helper.getChannelForOrg(org);
+ var client = helper.getClientForOrg(org);
+
+ return helper.getOrgAdmin(org).then((user) => {
+ // read the config block from the orderer for the channel
// and initialize the verify MSPs based on the participating
// organizations
- return chain.initialize();
+ return channel.initialize();
}, (err) => {
logger.error('Failed to enroll user \'' + username + '\'. ' + err);
throw new Error('Failed to enroll user \'' + username + '\'. ' + err);
}).then((success) => {
- nonce = helper.getNonce();
- tx_id = chain.buildTransactionID(nonce, member);
+ tx_id = client.newTransactionID();
// send proposal to endorser
var request = {
- targets: targets,
- chaincodePath: chaincodePath,
chaincodeId: chaincodeName,
chaincodeVersion: chaincodeVersion,
fcn: functionName,
- args: helper.getArgs(args),
- chainId: channelName,
- txId: tx_id,
- nonce: nonce
+ args: args,
+ txId: tx_id
};
- return chain.sendInstantiateProposal(request);
+ return channel.sendInstantiateProposal(request);
}, (err) => {
- logger.error('Failed to initialize the chain');
- throw new Error('Failed to initialize the chain');
+ logger.error('Failed to initialize the channel');
+ throw new Error('Failed to initialize the channel');
}).then((results) => {
var proposalResponses = results[0];
var proposal = results[1];
@@ -119,37 +87,49 @@ var instantiateChaincode = function(peers, channelName, chaincodeName,
// set the transaction listener and set a timeout of 30sec
// if the transaction did not get committed within the timeout period,
// fail the test
- var deployId = tx_id.toString();
- var eventPromises = [];
- eventhubs.forEach((eh) => {
- let txPromise = new Promise((resolve, reject) => {
- let handle = setTimeout(reject, 30000);
- eh.registerTxEvent(deployId.toString(), (tx, code) => {
- logger.info(
- 'The chaincode instantiate transaction has been committed on peer ' +
- eh.ep._endpoint.addr);
- clearTimeout(handle);
- eh.unregisterTxEvent(deployId);
- if (code !== 'VALID') {
- logger.error(
- 'The chaincode instantiate transaction was invalid, code = ' +
- code);
- reject();
- } else {
- logger.info('The chaincode instantiate transaction was valid.');
- resolve();
- }
- });
+ var deployId = tx_id.getTransactionID();
+
+ eh = client.newEventHub();
+ let data = fs.readFileSync(path.join(__dirname, ORGS[org]['peer1'][
+ 'tls_cacerts'
+ ]));
+ eh.setPeerAddr(ORGS[org]['peer1']['events'], {
+ pem: Buffer.from(data).toString(),
+ 'ssl-target-name-override': ORGS[org]['peer1']['server-hostname']
+ });
+ eh.connect();
+
+ let txPromise = new Promise((resolve, reject) => {
+ let handle = setTimeout(() => {
+ eh.disconnect();
+ reject();
+ }, 30000);
+
+ eh.registerTxEvent(deployId, (tx, code) => {
+ logger.info(
+ 'The chaincode instantiate transaction has been committed on peer ' +
+ eh._ep._endpoint.addr);
+ clearTimeout(handle);
+ eh.unregisterTxEvent(deployId);
+ eh.disconnect();
+
+ if (code !== 'VALID') {
+ logger.error('The chaincode instantiate transaction was invalid, code = ' + code);
+ reject();
+ } else {
+ logger.info('The chaincode instantiate transaction was valid.');
+ resolve();
+ }
});
- eventPromises.push(txPromise);
});
- var sendPromise = chain.sendTransaction(request);
- return Promise.all([sendPromise].concat(eventPromises)).then((results) => {
+
+ var sendPromise = channel.sendTransaction(request);
+ return Promise.all([sendPromise].concat([txPromise])).then((results) => {
logger.debug('Event promise all complete and testing complete');
return results[0]; // the first returned value is from the 'sendPromise' which is from the 'sendTransaction()' call
}).catch((err) => {
logger.error(
- 'Failed to send instantiate transaction and get notifications within the timeout period.'
+ util.format('Failed to send instantiate transaction and get notifications within the timeout period. %s', err)
);
return 'Failed to send instantiate transaction and get notifications within the timeout period.';
});
diff --git a/examples/balance-transfer/app/invoke-transaction.js b/examples/balance-transfer/app/invoke-transaction.js
index b78f122cde..60373f6675 100644
--- a/examples/balance-transfer/app/invoke-transaction.js
+++ b/examples/balance-transfer/app/invoke-transaction.js
@@ -25,72 +25,27 @@ 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 tx_id = null;
-var nonce = null;
-var member = null;
-var eventhubs = {};
-function getHostnameByPeerAddress(org, peers) {
- var orgDetails = ORGS[org];
- var result = [];
- for (let index in peers) {
- for (let key in orgDetails) {
- if (orgDetails.hasOwnProperty(key) && key.indexOf('peer') == 0 && orgDetails[
- key].requests.indexOf(peers[index]) >= 0) {
- result.push(key);
- }
- }
- }
- return result;
-};
-var registerEventHub = function(org, peers) {
- var peerHosts = getHostnameByPeerAddress(org, peers);
- for (var index in peerHosts) {
- let eh = new EventHub();
- let data = fs.readFileSync(path.join(__dirname, ORGS[org][peerHosts[index]][
- 'tls_cacerts'
- ]));
- eh.setPeerAddr(ORGS[org][peerHosts[index]]['events'], {
- pem: Buffer.from(data).toString(),
- 'ssl-target-name-override': ORGS[org][peerHosts[index]]['server-hostname']
- });
- eh.connect();
- eventhubs[org + peerHosts[index]] = eh;
- }
-};
-var invokeChaincode = function(peers, channelName, chaincodeName,
- chaincodeVersion, args, username, org) {
- logger.debug('\n============ invoke transaction on organization ' + org +
- ' ============\n');
- var chain = helper.getChainForOrg(org);
- helper.setupOrderer();
- var targets = helper.getTargets(peers, org);
- helper.setupPeers(chain, peers, targets);
- var peerHosts = getHostnameByPeerAddress(org, peers);
- peers.forEach(function(peer) {
- let peerEh = eventhubs[org + peer];
- if (!peerEh) {
- registerEventHub(org, peers);
- }
- });
+var invokeChaincode = function(peersUrls, 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 tx_id = null;
+
return helper.getRegisteredUsers(username, org).then((user) => {
- member = user;
- nonce = helper.getNonce();
- tx_id = chain.buildTransactionID(nonce, member);
- hfc.setConfigSetting('E2E_TX_ID', tx_id);
- logger.info('setConfigSetting("E2E_TX_ID") = %s', tx_id);
- logger.debug(util.format('Sending transaction "%s"', tx_id));
+ tx_id = client.newTransactionID();
+ logger.debug(util.format('Sending transaction "%j"', tx_id));
// send proposal to endorser
var request = {
targets: targets,
chaincodeId: chaincodeName,
fcn: config.invokeQueryFcnName,
- args: helper.getArgs(args),
+ args: args,
chainId: channelName,
- txId: tx_id,
- nonce: nonce
+ txId: tx_id
};
- return chain.sendTransactionProposal(request);
+ return channel.sendTransactionProposal(request);
}, (err) => {
logger.error('Failed to enroll user \'' + username + '\'. ' + err);
throw new Error('Failed to enroll user \'' + username + '\'. ' + err);
@@ -124,15 +79,25 @@ var invokeChaincode = function(peers, channelName, chaincodeName,
// set the transaction listener and set a timeout of 30sec
// if the transaction did not get committed within the timeout period,
// fail the test
- var transactionID = tx_id.toString();
+ var transactionID = tx_id.getTransactionID();
var eventPromises = [];
+
+ var eventhubs = helper.newEventHubs(peersUrls, org);
for (let key in eventhubs) {
let eh = eventhubs[key];
+ eh.connect();
+
let txPromise = new Promise((resolve, reject) => {
- let handle = setTimeout(reject, 30000);
- eh.registerTxEvent(transactionID.toString(), (tx, code) => {
+ let handle = setTimeout(() => {
+ eh.disconnect();
+ reject();
+ }, 30000);
+
+ eh.registerTxEvent(transactionID, (tx, code) => {
clearTimeout(handle);
eh.unregisterTxEvent(transactionID);
+ eh.disconnect();
+
if (code !== 'VALID') {
logger.error(
'The balance transfer transaction was invalid, code = ' + code);
@@ -140,14 +105,14 @@ var invokeChaincode = function(peers, channelName, chaincodeName,
} else {
logger.info(
'The balance transfer transaction has been committed on peer ' +
- eh.ep._endpoint.addr);
+ eh._ep._endpoint.addr);
resolve();
}
});
});
eventPromises.push(txPromise);
};
- var sendPromise = chain.sendTransaction(request);
+ var sendPromise = channel.sendTransaction(request);
return Promise.all([sendPromise].concat(eventPromises)).then((results) => {
logger.debug(' event promise all complete and testing complete');
return results[0]; // the first returned value is from the 'sendPromise' which is from the 'sendTransaction()' call
@@ -171,12 +136,7 @@ var invokeChaincode = function(peers, channelName, chaincodeName,
}).then((response) => {
if (response.status === 'SUCCESS') {
logger.info('Successfully sent transaction to the orderer.');
- logger.debug(
- '******************************************************************');
- logger.debug('E2E_TX_ID=' + '\'' + tx_id + '\'');
- logger.debug(
- '******************************************************************');
- return tx_id;
+ return tx_id.getTransactionID();
} else {
logger.error('Failed to order the transaction. Error code: ' + response.status);
return 'Failed to order the transaction. Error code: ' + response.status;
@@ -188,4 +148,5 @@ var invokeChaincode = function(peers, channelName, chaincodeName,
err;
});
};
+
exports.invokeChaincode = invokeChaincode;
diff --git a/examples/balance-transfer/app/join-channel.js b/examples/balance-transfer/app/join-channel.js
index 0881677b33..cb86a8e4a4 100644
--- a/examples/balance-transfer/app/join-channel.js
+++ b/examples/balance-transfer/app/join-channel.js
@@ -16,10 +16,9 @@
var util = require('util');
var path = require('path');
var fs = require('fs');
-var grpc = require('grpc');
+
var Peer = require('fabric-client/lib/Peer.js');
var EventHub = require('fabric-client/lib/EventHub.js');
-var user = null;
var tx_id = null;
var nonce = null;
var config = require('../config.json');
@@ -28,8 +27,7 @@ var logger = helper.getLogger('Join-Channel');
//helper.hfc.addConfigFile(path.join(__dirname, 'network-config.json'));
var ORGS = helper.ORGS;
var allEventhubs = [];
-var _commonProto = grpc.load(path.join(__dirname,
- '../node_modules/fabric-client/lib/protos/common/common.proto')).common;
+
//
//Attempt to send a request to the orderer with the sendCreateChain method
//
@@ -53,37 +51,45 @@ var joinChannel = function(channelName, peers, username, org) {
//logger.debug('\n============ Join Channel ============\n')
logger.info(util.format(
'Calling peers in organization "%s" to join the channel', org));
- helper.setupOrderer();
- var chain = helper.getChainForOrg(org);
- var targets = helper.getTargets(peers, org);
+
+ var client = helper.getClientForOrg(org);
+ var channel = helper.getChannelForOrg(org);
var eventhubs = [];
- 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 = new EventHub();
- 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);
- }
- }
- }
- return helper.getRegisteredUsers(username, org).then((member) => {
- logger.info('received member object for user : ' + username);
- user = member;
- nonce = helper.getNonce();
- tx_id = chain.buildTransactionID(nonce, user);
+
+ return helper.getOrgAdmin(org).then((admin) => {
+ logger.info(util.format('received member object for admin of the organization "%s": ', org));
+ tx_id = client.newTransactionID();
+ let request = {
+ txId : tx_id
+ };
+
+ return channel.getGenesisBlock(request);
+ }).then((genesis_block) => {
+ tx_id = client.newTransactionID();
var request = {
- targets: targets,
+ targets: helper.newPeers(peers),
txId: tx_id,
- nonce: nonce
+ 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);
+ }
+ }
+ }
+
var eventPromises = [];
eventhubs.forEach((eh) => {
let txPromise = new Promise((resolve, reject) => {
@@ -94,22 +100,19 @@ var joinChannel = function(channelName, peers, username, org) {
// we must check that this block came from the channel we asked the peer to join
if (block.data.data.length === 1) {
// Config block must only contain one transaction
- var envelope = _commonProto.Envelope.decode(block.data.data[0]);
- var payload = _commonProto.Payload.decode(envelope.payload);
- var channel_header = _commonProto.ChannelHeader.decode(payload.header
- .channel_header);
- if (channel_header.channel_id === config.channelName) {
- logger.info('The channel \'' + config.channelName +
- '\' has been successfully joined on peer ' + eh.ep._endpoint.addr
- );
+ var channel_header = block.data.data[0].payload.header.channel_header;
+ if (channel_header.channel_id === channelName) {
resolve();
}
+ else {
+ reject();
+ }
}
});
});
eventPromises.push(txPromise);
});
- let sendPromise = chain.joinChannel(request);
+ let sendPromise = channel.joinChannel(request);
return Promise.all([sendPromise].concat(eventPromises));
}, (err) => {
logger.error('Failed to enroll user \'' + username + '\' due to error: ' +
diff --git a/examples/balance-transfer/app/network-config.json b/examples/balance-transfer/app/network-config.json
index d3c6632c8e..437fa2314e 100644
--- a/examples/balance-transfer/app/network-config.json
+++ b/examples/balance-transfer/app/network-config.json
@@ -2,41 +2,49 @@
"network-config": {
"orderer": {
"url": "grpcs://localhost:7050",
- "server-hostname": "orderer0",
- "tls_cacerts": "../artifacts/tls/orderer/ca-cert.pem"
+ "server-hostname": "orderer.example.com",
+ "tls_cacerts": "../artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt"
},
"org1": {
"name": "peerOrg1",
"mspid": "Org1MSP",
- "ca": "http://localhost:7054",
+ "ca": "https://localhost:7054",
"peer1": {
"requests": "grpcs://localhost:7051",
"events": "grpcs://localhost:7053",
- "server-hostname": "peer0",
- "tls_cacerts": "../artifacts/tls/peers/peer0/ca-cert.pem"
+ "server-hostname": "peer0.org1.example.com",
+ "tls_cacerts": "../artifacts/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",
- "tls_cacerts": "../artifacts/tls/peers/peer1/ca-cert.pem"
+ "server-hostname": "peer1.org1.example.com",
+ "tls_cacerts": "../artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt"
+ },
+ "admin": {
+ "key": "../artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/addb48b97e97992e9e04869a430009f59e615d94453983d177bf067215b3888c_sk",
+ "cert": "../artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem"
}
},
"org2": {
"name": "peerOrg2",
"mspid": "Org2MSP",
- "ca": "http://localhost:8054",
+ "ca": "https://localhost:8054",
"peer1": {
"requests": "grpcs://localhost:8051",
"events": "grpcs://localhost:8053",
- "server-hostname": "peer2",
- "tls_cacerts": "../artifacts/tls/peers/peer2/ca-cert.pem"
+ "server-hostname": "peer0.org2.example.com",
+ "tls_cacerts": "../artifacts/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": "peer3",
- "tls_cacerts": "../artifacts/tls/peers/peer3/ca-cert.pem"
+ "server-hostname": "peer1.org2.example.com",
+ "tls_cacerts": "../artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt"
+ },
+ "admin": {
+ "key": "../artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/5681d5bed252077272137ebbcd141616229862fa4deeedbb9c1cb515e95ed82d_sk",
+ "cert": "../artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem"
}
}
}
diff --git a/examples/balance-transfer/app/query.js b/examples/balance-transfer/app/query.js
index 77335e2a5a..6f64b6a67e 100644
--- a/examples/balance-transfer/app/query.js
+++ b/examples/balance-transfer/app/query.js
@@ -22,32 +22,22 @@ var EventHub = require('fabric-client/lib/EventHub.js');
var config = require('../config.json');
var helper = require('./helper.js');
var logger = helper.getLogger('Query');
-var tx_id = null;
-var nonce = null;
-var member = null;
-var queryChaincode = function(peer, channelName, chaincodeName,
- chaincodeVersion, args, username, org) {
- var peers = [];
- peers.push(helper.getPeerAddressByName(org, peer));
- var chain = helper.getChainForOrg(org);
- var targets = helper.getTargets(peers, org);
- helper.setupPeers(chain, peers, targets);
+
+var queryChaincode = function(peer, channelName, chaincodeName, args, username, org) {
+ var channel = helper.getChannelForOrg(org);
+ var client = helper.getClientForOrg(org);
+ var target = buildTarget(peer, org);
+
return helper.getRegisteredUsers(username, org).then((user) => {
- member = user;
- nonce = helper.getNonce();
- tx_id = chain.buildTransactionID(nonce, member);
+ tx_id = client.newTransactionID();
// send query
var request = {
- targets: targets,
chaincodeId: chaincodeName,
- chaincodeVersion: chaincodeVersion,
- chainId: channelName,
txId: tx_id,
- nonce: nonce,
fcn: config.functionName,
- args: helper.getArgs(args)
+ args: args
};
- return chain.queryByChaincode(request);
+ return channel.queryByChaincode(request, target);
}, (err) => {
logger.info('Failed to get submitter \''+username+'\'');
return 'Failed to get submitter \''+username+'\'. Error: ' + err.stack ? err.stack :
@@ -76,14 +66,11 @@ var queryChaincode = function(peer, channelName, chaincodeName,
});
};
var getBlockByNumber = function(peer, blockNumber, username, org) {
- var peers = [];
- peers.push(helper.getPeerAddressByName(org, peer));
- var chain = helper.getChainForOrg(org);
- var targets = helper.getTargets(peers, org);
- helper.setupPeers(chain, peers, targets);
+ var target = buildTarget(peer, org);
+ var channel = helper.getChannelForOrg(org);
+
return helper.getRegisteredUsers(username, org).then((member) => {
- adminUser = member;
- return chain.queryBlock(parseInt(blockNumber));
+ return channel.queryBlock(parseInt(blockNumber), target);
}, (err) => {
logger.info('Failed to get submitter "' + username + '"');
return 'Failed to get submitter "' + username + '". Error: ' + err.stack ?
@@ -107,14 +94,11 @@ var getBlockByNumber = function(peer, blockNumber, username, org) {
});
};
var getTransactionByID = function(peer, trxnID, username, org) {
- var peers = [];
- peers.push(helper.getPeerAddressByName(org, peer));
- var chain = helper.getChainForOrg(org);
- var targets = helper.getTargets(peers, org);
- helper.setupPeers(chain, peers, targets);
+ var target = buildTarget(peer, org);
+ var channel = helper.getChannelForOrg(org);
+
return helper.getRegisteredUsers(username, org).then((member) => {
- adminUser = member;
- return chain.queryTransaction(trxnID);
+ return channel.queryTransaction(trxnID, target);
}, (err) => {
logger.info('Failed to get submitter "' + username + '"');
return 'Failed to get submitter "' + username + '". Error: ' + err.stack ?
@@ -137,15 +121,11 @@ var getTransactionByID = function(peer, trxnID, username, org) {
});
};
var getBlockByHash = function(peer, hash, username, org) {
- var peers = [];
- peers.push(helper.getPeerAddressByName(org, peer));
- var chain = helper.getChainForOrg(org);
- var targets = helper.getTargets(peers, org);
- helper.setupPeers(chain, peers, targets);
+ var target = buildTarget(peer, org);
+ var channel = helper.getChannelForOrg(org);
+
return helper.getRegisteredUsers(username, org).then((member) => {
- adminUser = member;
- //chain.setPrimaryPeer(targets[0]);
- return chain.queryBlockByHash(Buffer.from(hash));
+ return channel.queryBlockByHash(Buffer.from(hash), target);
}, (err) => {
logger.info('Failed to get submitter "' + username + '"');
return 'Failed to get submitter "' + username + '". Error: ' + err.stack ?
@@ -168,15 +148,11 @@ var getBlockByHash = function(peer, hash, username, org) {
});
};
var getChainInfo = function(peer, username, org) {
- var peers = [];
- peers.push(helper.getPeerAddressByName(org, peer));
- var chain = helper.getChainForOrg(org);
- var targets = helper.getTargets(peers, org);
- helper.setupPeers(chain, peers, targets);
+ var target = buildTarget(peer, org);
+ var channel = helper.getChannelForOrg(org);
+
return helper.getRegisteredUsers(username, org).then((member) => {
- adminUser = member;
- //chain.setPrimaryPeer(targets[0]);
- return chain.queryInfo();
+ return channel.queryInfo(target);
}, (err) => {
logger.info('Failed to get submitter "' + username + '"');
return 'Failed to get submitter "' + username + '". Error: ' + err.stack ?
@@ -203,21 +179,16 @@ var getChainInfo = function(peer, username, org) {
});
};
//getInstalledChaincodes
-var getInstalledChaincodes = function(peer, installed, username, org) {
- var peers = [];
- peers.push(helper.getPeerAddressByName(org, peer));
- var chain = helper.getChainForOrg(org);
- var targets = helper.getTargets(peers, org);
- helper.setupPeers(chain, peers, targets);
- return helper.getRegisteredUsers(username, org).then((member) => {
- peers.push(helper.getPeerAddressByName(org, peer));
- adminUser = member;
- //chain.setPrimaryPeer(targets[0]);
- //TODO: move this to contants
- if (installed === 'installed') {
- return chain.queryInstalledChaincodes(targets[0]);
+var getInstalledChaincodes = function(peer, type, username, org) {
+ var target = buildTarget(peer, org);
+ var channel = helper.getChannelForOrg(org);
+ var client = helper.getClientForOrg(org);
+
+ return helper.getOrgAdmin(org).then((member) => {
+ if (type === 'installed') {
+ return client.queryInstalledChaincodes(target);
} else {
- return chain.queryInstantiatedChaincodes();
+ return channel.queryInstantiatedChaincodes(target);
}
}, (err) => {
logger.info('Failed to get submitter "' + username + '"');
@@ -225,7 +196,7 @@ var getInstalledChaincodes = function(peer, installed, username, org) {
err.stack : err;
}).then((response) => {
if (response) {
- if (installed === 'true') {
+ if (type === 'installed') {
logger.debug('<<< Installed Chaincodes >>>');
} else {
logger.debug('<<< Instantiated Chaincodes >>>');
@@ -254,15 +225,13 @@ var getInstalledChaincodes = function(peer, installed, username, org) {
});
};
var getChannels = function(peer, username, org) {
- var peers = [];
- peers.push(helper.getPeerAddressByName(org, peer));
- var chain = helper.getChainForOrg(org);
- var targets = helper.getTargets(peers, org);
- helper.setupPeers(chain, peers, targets);
+ var target = buildTarget(peer, org);
+ var channel = helper.getChannelForOrg(org);
+ var client = helper.getClientForOrg(org);
+
return helper.getRegisteredUsers(username, org).then((member) => {
- adminUser = member;
- //chain.setPrimaryPeer(targets[0]);
- return chain.queryChannels(targets[0]);
+ //channel.setPrimaryPeer(targets[0]);
+ return client.queryChannels(target);
}, (err) => {
logger.info('Failed to get submitter "' + username + '"');
return 'Failed to get submitter "' + username + '". Error: ' + err.stack ?
@@ -289,6 +258,17 @@ var getChannels = function(peer, username, org) {
return 'Failed to query with error:' + err.stack ? err.stack : err;
});
};
+
+function buildTarget(peer, org) {
+ var target = null;
+ if (typeof peer !== 'undefined') {
+ let targets = helper.newPeers([helper.getPeerAddressByName(org, peer)]);
+ if (targets && targets.length > 0) target = targets[0];
+ }
+
+ return target;
+}
+
exports.queryChaincode = queryChaincode;
exports.getBlockByNumber = getBlockByNumber;
exports.getTransactionByID = getTransactionByID;
diff --git a/examples/balance-transfer/artifacts/base.yaml b/examples/balance-transfer/artifacts/base.yaml
new file mode 100644
index 0000000000..3d15863ab4
--- /dev/null
+++ b/examples/balance-transfer/artifacts/base.yaml
@@ -0,0 +1,30 @@
+# Copyright IBM Corp. All Rights Reserved.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+
+version: '2'
+services:
+ peer-base:
+ image: hyperledger/fabric-peer
+ environment:
+ - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
+ # the following setting starts chaincode containers on the same
+ # bridge network as the peers
+ # https://docs.docker.com/compose/networking/
+ - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=artifacts_default
+ - CORE_LOGGING_LEVEL=DEBUG
+ - CORE_PEER_GOSSIP_USELEADERELECTION=true
+ - CORE_PEER_GOSSIP_ORGLEADER=false
+ # The following setting skips the gossip handshake since we are
+ # are not doing mutual TLS
+ - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
+ - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/crypto/peer/msp
+ - CORE_PEER_TLS_ENABLED=true
+ - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/crypto/peer/tls/server.key
+ - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/crypto/peer/tls/server.crt
+ - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/crypto/peer/tls/ca.crt
+ working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
+ command: peer node start
+ volumes:
+ - /var/run/:/host/var/run/
diff --git a/examples/balance-transfer/artifacts/channel/configtx.yaml b/examples/balance-transfer/artifacts/channel/configtx.yaml
index 8ecaa1f726..28030062e4 100644
--- a/examples/balance-transfer/artifacts/channel/configtx.yaml
+++ b/examples/balance-transfer/artifacts/channel/configtx.yaml
@@ -1,7 +1,7 @@
---
################################################################################
#
-# Profile - meant to be used with docker-2orgs-2peerseach-e2e.yml
+# Profile
#
# - Different configuration profiles may be encoded here to be specified
# as parameters to the configtxgen tool
@@ -9,12 +9,19 @@
################################################################################
Profiles:
- TwoOrgs:
+ TwoOrgsOrdererGenesis:
Orderer:
<<: *OrdererDefaults
Organizations:
- *OrdererOrg
- Application:
+ Consortiums:
+ SampleConsortium:
+ Organizations:
+ - *Org0
+ - *Org1
+ TwoOrgsChannel:
+ Consortium: SampleConsortium
+ Application:
<<: *ApplicationDefaults
Organizations:
- *Org0
@@ -40,12 +47,17 @@ Organizations:
# ID to load the MSP definition as
ID: OrdererMSP
- # MSPDir is the filesystem path which contains the MSP configuration
#########################################################################
# FIXME: this path needs to be fixed to point to the actual location of #
# the project 'fabric-sdk-node' in the file system #
#########################################################################
- MSPDir: /fabric-sdk-node/test/artifacts/channel/crypto-config/ordererOrganizations/ordererOrg1/msp
+ # MSPDir is the filesystem path which contains the MSP configuration
+ MSPDir: /fabric-sdk-node/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/msp
+
+ # AdminPrincipal dictates the type of principal used for an organization's Admins policy
+ # Today, only the values of Role.ADMIN ad Role.MEMBER are accepted, which indicates a principal
+ # of role type ADMIN and role type MEMBER respectively
+ AdminPrincipal: Role.MEMBER
# BCCSP (Blockchain crypto provider): Select which crypto implementation or
# library to use
@@ -54,11 +66,11 @@ Organizations:
SW:
Hash: SHA2
Security: 256
- # Location of Key Store. If this is unset, a location will
+ # Location of Key Store. If this is unset, a location will
# be chosen using 'MSPDir'/keystore
- FileKeyStore:
- KeyStore:
-
+ FileKeyStore:
+ KeyStore:
+
- &Org0
# DefaultOrg defines the organization which is used in the sampleconfig
# of the fabric.git development environment
@@ -67,33 +79,41 @@ Organizations:
# ID to load the MSP definition as
ID: Org1MSP
- # MSPDir is the filesystem path which contains the MSP configuration
#########################################################################
# FIXME: this path needs to be fixed to point to the actual location of #
# the project 'fabric-sdk-node' in the file system #
#########################################################################
- MSPDir: /fabric-sdk-node/test/artifacts/channel/crypto-config/peerOrganizations/peerOrg1/msp/
+ # MSPDir is the filesystem path which contains the MSP configuration
+ MSPDir: /fabric-sdk-node/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/msp
+
+ # AdminPrincipal dictates the type of principal used for an
+ # organization's Admins policy. Today, only the values of Role.ADMIN and
+ # Role.MEMBER are accepted, which indicates a principal of role type
+ # ADMIN and role type MEMBER respectively.
+ AdminPrincipal: Role.ADMIN
# BCCSP (Blockchain crypto provider): Select which crypto implementation or
# library to use
BCCSP:
Default: SW
SW:
+ # TODO: The default Hash and Security level needs refactoring to
+ # be fully configurable. Changing these defaults requires
+ # coordination SHA2 is hardcoded in several places, not only
+ # BCCSP.
Hash: SHA2
Security: 256
- # Location of Key Store. If this is unset, a location will
- # be chosen using 'MSPDir'/keystore
- FileKeyStore:
- KeyStore:
-
+ # Location of key store. If this is unset, a location will be
+ # chosen using: 'MSPDir'/keystore
+ FileKeyStore:
+ KeyStore:
+
AnchorPeers:
- # AnchorPeers defines the location of peers which can be used
- # for cross org gossip communication. Note, this value is only
- # encoded in the genesis block in the Application section context
- - Host: peer0
+ # AnchorPeers defines the location of peers which can be used for
+ # cross-org gossip communication. Note, this value is only encoded
+ # in the genesis block in the Application section context.
+ - Host: peer0.org1.example.com
Port: 7051
- - Host: peer1
- Port: 7056
- &Org1
# DefaultOrg defines the organization which is used in the sampleconfig
@@ -103,12 +123,18 @@ Organizations:
# ID to load the MSP definition as
ID: Org2MSP
- # MSPDir is the filesystem path which contains the MSP configuration
#########################################################################
# FIXME: this path needs to be fixed to point to the actual location of #
# the project 'fabric-sdk-node' in the file system #
#########################################################################
- MSPDir: /fabric-sdk-node/test/artifacts/channel/crypto-config/peerOrganizations/peerOrg2/msp/
+ # MSPDir is the filesystem path which contains the MSP configuration
+ MSPDir: /fabric-sdk-node/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/msp
+
+ # AdminPrincipal dictates the type of principal used for an
+ # organization's Admins policy. Today, only the values of Role.ADMIN and
+ # Role.MEMBER are accepted, which indicates a principal of role type
+ # ADMIN and role type MEMBER respectively.
+ AdminPrincipal: Role.ADMIN
# BCCSP (Blockchain crypto provider): Select which crypto implementation or
# library to use
@@ -117,19 +143,17 @@ Organizations:
SW:
Hash: SHA2
Security: 256
- # Location of Key Store. If this is unset, a location will
+ # Location of Key Store. If this is unset, a location will
# be chosen using 'MSPDir'/keystore
- FileKeyStore:
- KeyStore:
-
+ FileKeyStore:
+ KeyStore:
+
AnchorPeers:
# AnchorPeers defines the location of peers which can be used
# for cross org gossip communication. Note, this value is only
# encoded in the genesis block in the Application section context
- - Host: peer2
- Port: 8051
- - Host: peer3
- Port: 8056
+ - Host: peer0.org2.example.com
+ Port: 7051
################################################################################
#
@@ -143,13 +167,13 @@ Orderer: &OrdererDefaults
# Orderer Type: The orderer implementation to start
# Available types are "solo" and "kafka"
- OrdererType: kafka
+ OrdererType: solo
Addresses:
- - orderer0:7050
+ - orderer.example.com:7050
# Batch Timeout: The amount of time to wait before creating a batch
- BatchTimeout: 10s
+ BatchTimeout: 2s
# Batch Size: Controls the number of messages batched into a block
BatchSize:
@@ -158,7 +182,9 @@ Orderer: &OrdererDefaults
MaxMessageCount: 10
# Absolute Max Bytes: The absolute maximum number of bytes allowed for
- # the serialized messages in a batch.
+ # the serialized messages in a batch. If the "kafka" OrdererType is
+ # selected, set 'message.max.bytes' and 'replica.fetch.max.bytes' on the
+ # Kafka brokers to a value that is equal to or larger than this one.
AbsoluteMaxBytes: 99 MB
# Preferred Max Bytes: The preferred maximum number of bytes allowed for
@@ -166,11 +192,15 @@ Orderer: &OrdererDefaults
# max bytes will result in a batch larger than preferred max bytes.
PreferredMaxBytes: 512 KB
+ # Max Channels is the maximum number of channels to allow on the ordering
+ # network. When set to 0, this implies no maximum number of channels.
+ MaxChannels: 0
+
Kafka:
# Brokers: A list of Kafka brokers to which the orderer connects
# NOTE: Use IP:port notation
Brokers:
- - kafka:9092
+ - 127.0.0.1:9092
# Organizations is the list of orgs which are defined as participants on
# the orderer side of the network
diff --git a/examples/balance-transfer/artifacts/channel/cryptogen.yaml b/examples/balance-transfer/artifacts/channel/cryptogen.yaml
new file mode 100644
index 0000000000..3a0792a4d8
--- /dev/null
+++ b/examples/balance-transfer/artifacts/channel/cryptogen.yaml
@@ -0,0 +1,106 @@
+# ---------------------------------------------------------------------------
+# "OrdererOrgs" - Definition of organizations managing orderer nodes
+# ---------------------------------------------------------------------------
+OrdererOrgs:
+ # ---------------------------------------------------------------------------
+ # Orderer
+ # ---------------------------------------------------------------------------
+ - Name: Orderer
+ Domain: example.com
+
+ # ---------------------------------------------------------------------------
+ # "Specs" - See PeerOrgs below for complete description
+ # ---------------------------------------------------------------------------
+ Specs:
+ - Hostname: orderer
+
+# ---------------------------------------------------------------------------
+# "PeerOrgs" - Definition of organizations managing peer nodes
+# ---------------------------------------------------------------------------
+PeerOrgs:
+ # ---------------------------------------------------------------------------
+ # Org1
+ # ---------------------------------------------------------------------------
+ - Name: Org1
+ Domain: org1.example.com
+
+ # ---------------------------------------------------------------------------
+ # "CA"
+ # ---------------------------------------------------------------------------
+ # Uncomment this section to enable the explicit definition of the CA for this
+ # organization. This entry is a Spec. See "Specs" section below for details.
+ # ---------------------------------------------------------------------------
+ CA:
+ Hostname: ca # implicitly ca.org1.example.com
+
+ # ---------------------------------------------------------------------------
+ # "Specs"
+ # ---------------------------------------------------------------------------
+ # Uncomment this section to enable the explicit definition of hosts in your
+ # configuration. Most users will want to use Template, below
+ #
+ # Specs is an array of Spec entries. Each Spec entry consists of two fields:
+ # - Hostname: (Required) The desired hostname, sans the domain.
+ # - CommonName: (Optional) Specifies the template or explicit override for
+ # the CN. By default, this is the template:
+ #
+ # "{{.Hostname}}.{{.Domain}}"
+ #
+ # which obtains its values from the Spec.Hostname and
+ # Org.Domain, respectively.
+ # - SANS: (Optional) Specifies one or more Subject Alternative Names
+ # the be set in the resulting x509. Accepts template
+ # variables {{.Hostname}}, {{.Domain}}, {{.CommonName}}
+ # NOTE: Two implicit entries are created for you:
+ # - {{ .CommonName }}
+ # - {{ .Hostname }}
+ # ---------------------------------------------------------------------------
+ # Specs:
+ # - Hostname: foo # implicitly "foo.org1.example.com"
+ # CommonName: foo27.org5.example.com # overrides Hostname-based FQDN set above
+ # SANS:
+ # - "bar.{{.Domain}}"
+ # - "altfoo.{{.Domain}}"
+ # - "{{.Hostname}}.org6.net"
+ # - Hostname: bar
+ # - Hostname: baz
+
+ # ---------------------------------------------------------------------------
+ # "Template"
+ # ---------------------------------------------------------------------------
+ # Allows for the definition of 1 or more hosts that are created sequentially
+ # from a template. By default, this looks like "peer%d" from 0 to Count-1.
+ # You may override the number of nodes (Count), the starting index (Start)
+ # or the template used to construct the name (Hostname).
+ #
+ # Note: Template and Specs are not mutually exclusive. You may define both
+ # sections and the aggregate nodes will be created for you. Take care with
+ # name collisions
+ # ---------------------------------------------------------------------------
+ Template:
+ Count: 2
+ # Start: 5
+ # Hostname: {{.Prefix}}{{.Index}} # default
+ # SANS:
+ # - "{{.Hostname}}.alt.{{.Domain}}"
+
+ # ---------------------------------------------------------------------------
+ # "Users"
+ # ---------------------------------------------------------------------------
+ # Count: The number of user accounts _in addition_ to Admin
+ # ---------------------------------------------------------------------------
+ Users:
+ Count: 1
+
+ # ---------------------------------------------------------------------------
+ # Org2: See "Org1" for full specification
+ # ---------------------------------------------------------------------------
+ - Name: Org2
+ Domain: org2.example.com
+ CA:
+ Hostname: ca # implicitly ca.org1.example.com
+
+ Template:
+ Count: 2
+ Users:
+ Count: 1
diff --git a/examples/balance-transfer/artifacts/channel/genesis.block b/examples/balance-transfer/artifacts/channel/genesis.block
new file mode 100644
index 0000000000..aa1b7d8168
Binary files /dev/null and b/examples/balance-transfer/artifacts/channel/genesis.block differ
diff --git a/examples/balance-transfer/artifacts/channel/mychannel.tx b/examples/balance-transfer/artifacts/channel/mychannel.tx
index 9384402e35..cc734886cb 100644
Binary files a/examples/balance-transfer/artifacts/channel/mychannel.tx and b/examples/balance-transfer/artifacts/channel/mychannel.tx differ
diff --git a/examples/balance-transfer/artifacts/channel/twoorgs.orderer.block b/examples/balance-transfer/artifacts/channel/twoorgs.orderer.block
deleted file mode 100644
index c800a059fb..0000000000
Binary files a/examples/balance-transfer/artifacts/channel/twoorgs.orderer.block and /dev/null differ
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem
new file mode 100644
index 0000000000..6480afa0bf
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICOTCCAeCgAwIBAgIRAPZbyMs2/DuILjKzg5xVZhUwCgYIKoZIzj0EAwIwaTEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
+cGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZaMGkxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
+c2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEXMBUGA1UEAxMOY2EuZXhhbXBsZS5j
+b20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARSBmUNQYj0gbyEy2U5ymkYMlBp
+RuQmMlShfafNZGzYbMRSMvQW0JDM437C3m/G0m0R1Kdbb9jNzg2WKJ4CbUMpo2kw
+ZzAOBgNVHQ8BAf8EBAMCAaYwGQYDVR0lBBIwEAYEVR0lAAYIKwYBBQUHAwEwDwYD
+VR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgysvneYDGLlkdNFzHXn7dmruA6mfAVKIA
+AoD7d1auYoYwCgYIKoZIzj0EAwIDRwAwRAIgDuwdc9y6sdQ1kqkH6wtW3HCM1C9Y
+ntaq2YxyNmvcS6kCIEJFBP2vAfaDQ5ju4EIo8ws4lqpdUkxOtAxYVxHLCf0x
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/ca/cacbe77980c62e591d345cc75e7edd9abb80ea67c054a2000280fb7756ae6286_sk b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/ca/cacbe77980c62e591d345cc75e7edd9abb80ea67c054a2000280fb7756ae6286_sk
new file mode 100755
index 0000000000..c352918763
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/ca/cacbe77980c62e591d345cc75e7edd9abb80ea67c054a2000280fb7756ae6286_sk
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgfm23VyWMGKzFoKoO
+qaKmqHYHBUXUyByGY0uwhefj3XihRANCAARSBmUNQYj0gbyEy2U5ymkYMlBpRuQm
+MlShfafNZGzYbMRSMvQW0JDM437C3m/G0m0R1Kdbb9jNzg2WKJ4CbUMp
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/msp/admincerts/Admin@example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/msp/admincerts/Admin@example.com-cert.pem
new file mode 100644
index 0000000000..ddad3e7951
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/msp/admincerts/Admin@example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICHzCCAcWgAwIBAgIQYBXaZQbEvLloNnIVJV53QzAKBggqhkjOPQQDAjBpMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
+bGUuY29tMB4XDTE3MDYwMTE0MTcyNloXDTI3MDUzMDE0MTcyNlowVjELMAkGA1UE
+BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
+Y28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAErdOjFc0cuy5drkU2w9d82VrxvPlK9OBjmTKmgqEVCxy3NmQzHJ6U
+fSwYKnzAlgJdnQBQ5m69sBOexSVdArIFiqNiMGAwDgYDVR0PAQH/BAQDAgWgMBMG
+A1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgysvn
+eYDGLlkdNFzHXn7dmruA6mfAVKIAAoD7d1auYoYwCgYIKoZIzj0EAwIDSAAwRQIh
+APQjJI++iNgVUf3Fy16F7ft3Eckru/2WQ/G7OmHcucfWAiAFzhUHgEW7xd1/npMg
+eID+a43z9ots08PgPpqsvC1ccA==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/msp/cacerts/ca.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/msp/cacerts/ca.example.com-cert.pem
new file mode 100644
index 0000000000..6480afa0bf
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/msp/cacerts/ca.example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICOTCCAeCgAwIBAgIRAPZbyMs2/DuILjKzg5xVZhUwCgYIKoZIzj0EAwIwaTEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
+cGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZaMGkxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
+c2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEXMBUGA1UEAxMOY2EuZXhhbXBsZS5j
+b20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARSBmUNQYj0gbyEy2U5ymkYMlBp
+RuQmMlShfafNZGzYbMRSMvQW0JDM437C3m/G0m0R1Kdbb9jNzg2WKJ4CbUMpo2kw
+ZzAOBgNVHQ8BAf8EBAMCAaYwGQYDVR0lBBIwEAYEVR0lAAYIKwYBBQUHAwEwDwYD
+VR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgysvneYDGLlkdNFzHXn7dmruA6mfAVKIA
+AoD7d1auYoYwCgYIKoZIzj0EAwIDRwAwRAIgDuwdc9y6sdQ1kqkH6wtW3HCM1C9Y
+ntaq2YxyNmvcS6kCIEJFBP2vAfaDQ5ju4EIo8ws4lqpdUkxOtAxYVxHLCf0x
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/msp/signcerts/ca.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/msp/signcerts/ca.example.com-cert.pem
new file mode 100644
index 0000000000..6480afa0bf
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/msp/signcerts/ca.example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICOTCCAeCgAwIBAgIRAPZbyMs2/DuILjKzg5xVZhUwCgYIKoZIzj0EAwIwaTEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
+cGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZaMGkxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
+c2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEXMBUGA1UEAxMOY2EuZXhhbXBsZS5j
+b20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARSBmUNQYj0gbyEy2U5ymkYMlBp
+RuQmMlShfafNZGzYbMRSMvQW0JDM437C3m/G0m0R1Kdbb9jNzg2WKJ4CbUMpo2kw
+ZzAOBgNVHQ8BAf8EBAMCAaYwGQYDVR0lBBIwEAYEVR0lAAYIKwYBBQUHAwEwDwYD
+VR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgysvneYDGLlkdNFzHXn7dmruA6mfAVKIA
+AoD7d1auYoYwCgYIKoZIzj0EAwIDRwAwRAIgDuwdc9y6sdQ1kqkH6wtW3HCM1C9Y
+ntaq2YxyNmvcS6kCIEJFBP2vAfaDQ5ju4EIo8ws4lqpdUkxOtAxYVxHLCf0x
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/admincerts/Admin@example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/admincerts/Admin@example.com-cert.pem
new file mode 100644
index 0000000000..ddad3e7951
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/admincerts/Admin@example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICHzCCAcWgAwIBAgIQYBXaZQbEvLloNnIVJV53QzAKBggqhkjOPQQDAjBpMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
+bGUuY29tMB4XDTE3MDYwMTE0MTcyNloXDTI3MDUzMDE0MTcyNlowVjELMAkGA1UE
+BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
+Y28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAErdOjFc0cuy5drkU2w9d82VrxvPlK9OBjmTKmgqEVCxy3NmQzHJ6U
+fSwYKnzAlgJdnQBQ5m69sBOexSVdArIFiqNiMGAwDgYDVR0PAQH/BAQDAgWgMBMG
+A1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgysvn
+eYDGLlkdNFzHXn7dmruA6mfAVKIAAoD7d1auYoYwCgYIKoZIzj0EAwIDSAAwRQIh
+APQjJI++iNgVUf3Fy16F7ft3Eckru/2WQ/G7OmHcucfWAiAFzhUHgEW7xd1/npMg
+eID+a43z9ots08PgPpqsvC1ccA==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem
new file mode 100644
index 0000000000..6480afa0bf
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICOTCCAeCgAwIBAgIRAPZbyMs2/DuILjKzg5xVZhUwCgYIKoZIzj0EAwIwaTEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
+cGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZaMGkxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
+c2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEXMBUGA1UEAxMOY2EuZXhhbXBsZS5j
+b20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARSBmUNQYj0gbyEy2U5ymkYMlBp
+RuQmMlShfafNZGzYbMRSMvQW0JDM437C3m/G0m0R1Kdbb9jNzg2WKJ4CbUMpo2kw
+ZzAOBgNVHQ8BAf8EBAMCAaYwGQYDVR0lBBIwEAYEVR0lAAYIKwYBBQUHAwEwDwYD
+VR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgysvneYDGLlkdNFzHXn7dmruA6mfAVKIA
+AoD7d1auYoYwCgYIKoZIzj0EAwIDRwAwRAIgDuwdc9y6sdQ1kqkH6wtW3HCM1C9Y
+ntaq2YxyNmvcS6kCIEJFBP2vAfaDQ5ju4EIo8ws4lqpdUkxOtAxYVxHLCf0x
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/ceb42175de3a112ea235d401bfb19e0a0d13711d5babc57a8cdf1235faf4014c_sk b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/ceb42175de3a112ea235d401bfb19e0a0d13711d5babc57a8cdf1235faf4014c_sk
new file mode 100755
index 0000000000..e0148757df
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/ceb42175de3a112ea235d401bfb19e0a0d13711d5babc57a8cdf1235faf4014c_sk
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg40ckaCQun1Db8Bum
+gIVkDkozwMKjhUYIRiKSBcjYgSehRANCAAQ1/dmSkq1fBPL16ti0wIFh55JT/i73
+3rJOTNgAEVGMlQI8ckUsFmNJ/ZFItnx2UQ30WU/pqZe4zLoRKaUmv/l6
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/signcerts/orderer.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/signcerts/orderer.example.com-cert.pem
new file mode 100644
index 0000000000..cb8bb370f5
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/signcerts/orderer.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTTCCAfOgAwIBAgIRAPgOpt3+Nfk+01sMdz6kzN4wCgYIKoZIzj0EAwIwaTEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
+cGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZaMFgxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
+c2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI
+KoZIzj0DAQcDQgAENf3ZkpKtXwTy9erYtMCBYeeSU/4u996yTkzYABFRjJUCPHJF
+LBZjSf2RSLZ8dlEN9FlP6amXuMy6ESmlJr/5eqOBjDCBiTAOBgNVHQ8BAf8EBAMC
+BaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADArBgNVHSMEJDAi
+gCDKy+d5gMYuWR00XMdeft2au4DqZ8BUogACgPt3Vq5ihjAnBgNVHREEIDAeghNv
+cmRlcmVyLmV4YW1wbGUuY29tggdvcmRlcmVyMAoGCCqGSM49BAMCA0gAMEUCIQD6
+5QcBFKKi6z8PTr4aXG+y0f6/xDS1MsG+iObnwGJntwIgROOBaIgOsYWqF4RAsTTk
+3UbaTPHBRgfC9n1ikfF4jHA=
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt
new file mode 100644
index 0000000000..6480afa0bf
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICOTCCAeCgAwIBAgIRAPZbyMs2/DuILjKzg5xVZhUwCgYIKoZIzj0EAwIwaTEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
+cGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZaMGkxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
+c2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEXMBUGA1UEAxMOY2EuZXhhbXBsZS5j
+b20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARSBmUNQYj0gbyEy2U5ymkYMlBp
+RuQmMlShfafNZGzYbMRSMvQW0JDM437C3m/G0m0R1Kdbb9jNzg2WKJ4CbUMpo2kw
+ZzAOBgNVHQ8BAf8EBAMCAaYwGQYDVR0lBBIwEAYEVR0lAAYIKwYBBQUHAwEwDwYD
+VR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgysvneYDGLlkdNFzHXn7dmruA6mfAVKIA
+AoD7d1auYoYwCgYIKoZIzj0EAwIDRwAwRAIgDuwdc9y6sdQ1kqkH6wtW3HCM1C9Y
+ntaq2YxyNmvcS6kCIEJFBP2vAfaDQ5ju4EIo8ws4lqpdUkxOtAxYVxHLCf0x
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt
new file mode 100644
index 0000000000..cb8bb370f5
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTTCCAfOgAwIBAgIRAPgOpt3+Nfk+01sMdz6kzN4wCgYIKoZIzj0EAwIwaTEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
+cGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZaMFgxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
+c2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI
+KoZIzj0DAQcDQgAENf3ZkpKtXwTy9erYtMCBYeeSU/4u996yTkzYABFRjJUCPHJF
+LBZjSf2RSLZ8dlEN9FlP6amXuMy6ESmlJr/5eqOBjDCBiTAOBgNVHQ8BAf8EBAMC
+BaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADArBgNVHSMEJDAi
+gCDKy+d5gMYuWR00XMdeft2au4DqZ8BUogACgPt3Vq5ihjAnBgNVHREEIDAeghNv
+cmRlcmVyLmV4YW1wbGUuY29tggdvcmRlcmVyMAoGCCqGSM49BAMCA0gAMEUCIQD6
+5QcBFKKi6z8PTr4aXG+y0f6/xDS1MsG+iObnwGJntwIgROOBaIgOsYWqF4RAsTTk
+3UbaTPHBRgfC9n1ikfF4jHA=
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.key b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.key
new file mode 100644
index 0000000000..e0148757df
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.key
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg40ckaCQun1Db8Bum
+gIVkDkozwMKjhUYIRiKSBcjYgSehRANCAAQ1/dmSkq1fBPL16ti0wIFh55JT/i73
+3rJOTNgAEVGMlQI8ckUsFmNJ/ZFItnx2UQ30WU/pqZe4zLoRKaUmv/l6
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/admincerts/ca.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/admincerts/ca.example.com-cert.pem
new file mode 100644
index 0000000000..6480afa0bf
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/admincerts/ca.example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICOTCCAeCgAwIBAgIRAPZbyMs2/DuILjKzg5xVZhUwCgYIKoZIzj0EAwIwaTEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
+cGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZaMGkxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
+c2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEXMBUGA1UEAxMOY2EuZXhhbXBsZS5j
+b20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARSBmUNQYj0gbyEy2U5ymkYMlBp
+RuQmMlShfafNZGzYbMRSMvQW0JDM437C3m/G0m0R1Kdbb9jNzg2WKJ4CbUMpo2kw
+ZzAOBgNVHQ8BAf8EBAMCAaYwGQYDVR0lBBIwEAYEVR0lAAYIKwYBBQUHAwEwDwYD
+VR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgysvneYDGLlkdNFzHXn7dmruA6mfAVKIA
+AoD7d1auYoYwCgYIKoZIzj0EAwIDRwAwRAIgDuwdc9y6sdQ1kqkH6wtW3HCM1C9Y
+ntaq2YxyNmvcS6kCIEJFBP2vAfaDQ5ju4EIo8ws4lqpdUkxOtAxYVxHLCf0x
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/cacerts/ca.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/cacerts/ca.example.com-cert.pem
new file mode 100644
index 0000000000..6480afa0bf
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/cacerts/ca.example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICOTCCAeCgAwIBAgIRAPZbyMs2/DuILjKzg5xVZhUwCgYIKoZIzj0EAwIwaTEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
+cGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZaMGkxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
+c2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEXMBUGA1UEAxMOY2EuZXhhbXBsZS5j
+b20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARSBmUNQYj0gbyEy2U5ymkYMlBp
+RuQmMlShfafNZGzYbMRSMvQW0JDM437C3m/G0m0R1Kdbb9jNzg2WKJ4CbUMpo2kw
+ZzAOBgNVHQ8BAf8EBAMCAaYwGQYDVR0lBBIwEAYEVR0lAAYIKwYBBQUHAwEwDwYD
+VR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgysvneYDGLlkdNFzHXn7dmruA6mfAVKIA
+AoD7d1auYoYwCgYIKoZIzj0EAwIDRwAwRAIgDuwdc9y6sdQ1kqkH6wtW3HCM1C9Y
+ntaq2YxyNmvcS6kCIEJFBP2vAfaDQ5ju4EIo8ws4lqpdUkxOtAxYVxHLCf0x
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/4e5e2e945e6ae2dfcbc47e778ef2fd19606b524a959b3ae705a96aabe8471d5a_sk b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/4e5e2e945e6ae2dfcbc47e778ef2fd19606b524a959b3ae705a96aabe8471d5a_sk
new file mode 100755
index 0000000000..f5a1a113e5
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/4e5e2e945e6ae2dfcbc47e778ef2fd19606b524a959b3ae705a96aabe8471d5a_sk
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgC/kJCVzVywCZnq7x
+hF2cgRUWD5iVyKK++8SRGfr9u6ihRANCAASt06MVzRy7Ll2uRTbD13zZWvG8+Ur0
+4GOZMqaCoRULHLc2ZDMcnpR9LBgqfMCWAl2dAFDmbr2wE57FJV0CsgWK
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts/Admin@example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts/Admin@example.com-cert.pem
new file mode 100644
index 0000000000..ddad3e7951
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts/Admin@example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICHzCCAcWgAwIBAgIQYBXaZQbEvLloNnIVJV53QzAKBggqhkjOPQQDAjBpMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
+bGUuY29tMB4XDTE3MDYwMTE0MTcyNloXDTI3MDUzMDE0MTcyNlowVjELMAkGA1UE
+BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
+Y28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAErdOjFc0cuy5drkU2w9d82VrxvPlK9OBjmTKmgqEVCxy3NmQzHJ6U
+fSwYKnzAlgJdnQBQ5m69sBOexSVdArIFiqNiMGAwDgYDVR0PAQH/BAQDAgWgMBMG
+A1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgysvn
+eYDGLlkdNFzHXn7dmruA6mfAVKIAAoD7d1auYoYwCgYIKoZIzj0EAwIDSAAwRQIh
+APQjJI++iNgVUf3Fy16F7ft3Eckru/2WQ/G7OmHcucfWAiAFzhUHgEW7xd1/npMg
+eID+a43z9ots08PgPpqsvC1ccA==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/ca.crt b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/ca.crt
new file mode 100644
index 0000000000..6480afa0bf
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/ca.crt
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICOTCCAeCgAwIBAgIRAPZbyMs2/DuILjKzg5xVZhUwCgYIKoZIzj0EAwIwaTEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
+cGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZaMGkxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
+c2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEXMBUGA1UEAxMOY2EuZXhhbXBsZS5j
+b20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARSBmUNQYj0gbyEy2U5ymkYMlBp
+RuQmMlShfafNZGzYbMRSMvQW0JDM437C3m/G0m0R1Kdbb9jNzg2WKJ4CbUMpo2kw
+ZzAOBgNVHQ8BAf8EBAMCAaYwGQYDVR0lBBIwEAYEVR0lAAYIKwYBBQUHAwEwDwYD
+VR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgysvneYDGLlkdNFzHXn7dmruA6mfAVKIA
+AoD7d1auYoYwCgYIKoZIzj0EAwIDRwAwRAIgDuwdc9y6sdQ1kqkH6wtW3HCM1C9Y
+ntaq2YxyNmvcS6kCIEJFBP2vAfaDQ5ju4EIo8ws4lqpdUkxOtAxYVxHLCf0x
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.crt b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.crt
new file mode 100644
index 0000000000..ddad3e7951
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.crt
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICHzCCAcWgAwIBAgIQYBXaZQbEvLloNnIVJV53QzAKBggqhkjOPQQDAjBpMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
+bGUuY29tMB4XDTE3MDYwMTE0MTcyNloXDTI3MDUzMDE0MTcyNlowVjELMAkGA1UE
+BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
+Y28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAErdOjFc0cuy5drkU2w9d82VrxvPlK9OBjmTKmgqEVCxy3NmQzHJ6U
+fSwYKnzAlgJdnQBQ5m69sBOexSVdArIFiqNiMGAwDgYDVR0PAQH/BAQDAgWgMBMG
+A1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgysvn
+eYDGLlkdNFzHXn7dmruA6mfAVKIAAoD7d1auYoYwCgYIKoZIzj0EAwIDSAAwRQIh
+APQjJI++iNgVUf3Fy16F7ft3Eckru/2WQ/G7OmHcucfWAiAFzhUHgEW7xd1/npMg
+eID+a43z9ots08PgPpqsvC1ccA==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.key b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.key
new file mode 100644
index 0000000000..f5a1a113e5
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.key
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgC/kJCVzVywCZnq7x
+hF2cgRUWD5iVyKK++8SRGfr9u6ihRANCAASt06MVzRy7Ll2uRTbD13zZWvG8+Ur0
+4GOZMqaCoRULHLc2ZDMcnpR9LBgqfMCWAl2dAFDmbr2wE57FJV0CsgWK
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/ca/4d4a772215168b6594c87e82650e438f1f37c303e14b5f9e6f3ee06cc2bb823a_sk b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/ca/4d4a772215168b6594c87e82650e438f1f37c303e14b5f9e6f3ee06cc2bb823a_sk
deleted file mode 100755
index bd7d213dae..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/ca/4d4a772215168b6594c87e82650e438f1f37c303e14b5f9e6f3ee06cc2bb823a_sk
+++ /dev/null
@@ -1,5 +0,0 @@
------BEGIN ECDSA PRIVATE KEY-----
-MHcCAQEEIAMJVFaIpzyJViVo/VLSD84gVidcKAvJsllwGwmQlJ6hoAoGCCqGSM49
-AwEHoUQDQgAETUmk7oKMKf2OF3GOx67Ppt6BP4/Af4yKdx/LYTYWFHZB1+vcDbEQ
-er/7xJR5+gj41B6TQIr218PXSM+192iP1w==
------END ECDSA PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/ca/ordererOrg1-cert.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/ca/ordererOrg1-cert.pem
deleted file mode 100644
index 277eb4c826..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/ca/ordererOrg1-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICKTCCAdCgAwIBAgIRALz4qIofOY8ff94YDATVyGIwCgYIKoZIzj0EAwIwZjEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
-cmFuY2lzY28xFDASBgNVBAoTC29yZGVyZXJPcmcxMRQwEgYDVQQDEwtvcmRlcmVy
-T3JnMTAeFw0xNzAzMDExNzM2NDFaFw0yNzAyMjcxNzM2NDFaMGYxCzAJBgNVBAYT
-AlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv
-MRQwEgYDVQQKEwtvcmRlcmVyT3JnMTEUMBIGA1UEAxMLb3JkZXJlck9yZzEwWTAT
-BgcqhkjOPQIBBggqhkjOPQMBBwNCAARNSaTugowp/Y4XcY7Hrs+m3oE/j8B/jIp3
-H8thNhYUdkHX69wNsRB6v/vElHn6CPjUHpNAivbXw9dIz7X3aI/Xo18wXTAOBgNV
-HQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MCkG
-A1UdDgQiBCBNSnciFRaLZZTIfoJlDkOPHzfDA+FLX55vPuBswruCOjAKBggqhkjO
-PQQDAgNHADBEAiBa6k7Cax+McCHy61Jma1vLuFZswBbnsC6DqbveiKdUoAIgeyAf
-HzWxMoVrLfPFwF75PqCjae7xnYq+RWlsHZlMGFU=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/admincerts/ordererOrg1-cert.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/admincerts/ordererOrg1-cert.pem
deleted file mode 100644
index 277eb4c826..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/admincerts/ordererOrg1-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICKTCCAdCgAwIBAgIRALz4qIofOY8ff94YDATVyGIwCgYIKoZIzj0EAwIwZjEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
-cmFuY2lzY28xFDASBgNVBAoTC29yZGVyZXJPcmcxMRQwEgYDVQQDEwtvcmRlcmVy
-T3JnMTAeFw0xNzAzMDExNzM2NDFaFw0yNzAyMjcxNzM2NDFaMGYxCzAJBgNVBAYT
-AlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv
-MRQwEgYDVQQKEwtvcmRlcmVyT3JnMTEUMBIGA1UEAxMLb3JkZXJlck9yZzEwWTAT
-BgcqhkjOPQIBBggqhkjOPQMBBwNCAARNSaTugowp/Y4XcY7Hrs+m3oE/j8B/jIp3
-H8thNhYUdkHX69wNsRB6v/vElHn6CPjUHpNAivbXw9dIz7X3aI/Xo18wXTAOBgNV
-HQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MCkG
-A1UdDgQiBCBNSnciFRaLZZTIfoJlDkOPHzfDA+FLX55vPuBswruCOjAKBggqhkjO
-PQQDAgNHADBEAiBa6k7Cax+McCHy61Jma1vLuFZswBbnsC6DqbveiKdUoAIgeyAf
-HzWxMoVrLfPFwF75PqCjae7xnYq+RWlsHZlMGFU=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/ordererOrg0.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/ordererOrg0.pem
deleted file mode 100644
index 604c9c35d4..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/ordererOrg0.pem
+++ /dev/null
@@ -1,10 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBcjCCARigAwIBAwICA+gwCgYIKoZIzj0EAwIwFjEUMBIGA1UEAwwLb3JkZXJl
-ck9yZzAwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjAWMRQwEgYDVQQD
-DAtvcmRlcmVyT3JnMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABK8Sv0EA9h06
-fmBkUCO+D/b/2INZ2huy+W/HCxSF22c7WGoJbRzQcWtQmW1KqZowUk86RcxVfFqv
-jEMFVXzV38SjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCVakuvq
-xEcK8pYMf/Hw8hsexRMTMB8GA1UdIwQYMBaAFCVakuvqxEcK8pYMf/Hw8hsexRMT
-MAoGCCqGSM49BAMCA0gAMEUCIQCmXgDSRTyxpSk+PXg0FNlYZ4ijTVwKgLkYVhod
-zZPfngIgO4y0p3Fs/gNsJYrroKaaVDe955KrPp/O55jYDKAD/oY=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/ordererOrg1-cert.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/ordererOrg1-cert.pem
deleted file mode 100644
index 277eb4c826..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/ordererOrg1-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICKTCCAdCgAwIBAgIRALz4qIofOY8ff94YDATVyGIwCgYIKoZIzj0EAwIwZjEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
-cmFuY2lzY28xFDASBgNVBAoTC29yZGVyZXJPcmcxMRQwEgYDVQQDEwtvcmRlcmVy
-T3JnMTAeFw0xNzAzMDExNzM2NDFaFw0yNzAyMjcxNzM2NDFaMGYxCzAJBgNVBAYT
-AlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv
-MRQwEgYDVQQKEwtvcmRlcmVyT3JnMTEUMBIGA1UEAxMLb3JkZXJlck9yZzEwWTAT
-BgcqhkjOPQIBBggqhkjOPQMBBwNCAARNSaTugowp/Y4XcY7Hrs+m3oE/j8B/jIp3
-H8thNhYUdkHX69wNsRB6v/vElHn6CPjUHpNAivbXw9dIz7X3aI/Xo18wXTAOBgNV
-HQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MCkG
-A1UdDgQiBCBNSnciFRaLZZTIfoJlDkOPHzfDA+FLX55vPuBswruCOjAKBggqhkjO
-PQQDAgNHADBEAiBa6k7Cax+McCHy61Jma1vLuFZswBbnsC6DqbveiKdUoAIgeyAf
-HzWxMoVrLfPFwF75PqCjae7xnYq+RWlsHZlMGFU=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg0.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg0.pem
deleted file mode 100644
index ac4f5af8d4..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg0.pem
+++ /dev/null
@@ -1,10 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBbDCCARKgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y
-ZzAwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjATMREwDwYDVQQDDAhw
-ZWVyT3JnMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKJfDc/CcaiHRipTG2AB
-K5fA0LO9SOlbtC9bZcjLo/xsL157p+3QB3UVF3gt7nkwgMs/ul3FhSEFTk2EVNlF
-1QCjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFQzuQR1RZP/Qn/B
-NDtGSa8n4eN/MB8GA1UdIwQYMBaAFFQzuQR1RZP/Qn/BNDtGSa8n4eN/MAoGCCqG
-SM49BAMCA0gAMEUCIAuG+/Fy3x9JXAD1/rFsu3ZpCKbXiXZLGF7P6Gma8is5AiEA
-pSQpRcdukxe4zvcfRmNBjMbNLWCoWlHSQA2jD678QGE=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg1.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg1.pem
deleted file mode 100644
index d02884fa17..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg1.pem
+++ /dev/null
@@ -1,10 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBbDCCARKgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y
-ZzEwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjATMREwDwYDVQQDDAhw
-ZWVyT3JnMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJ2S+UvyFgFZYL6qcrKo
-zy72Nkc/RQVzg1VfwC3X7QcnHEVBuCzba1nxdDVE8XPnhmKBWLKh0adn6GKUZpyf
-mbKjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAQlMVsXlKGMEWPf
-KMMM6QVASnlPMB8GA1UdIwQYMBaAFAQlMVsXlKGMEWPfKMMM6QVASnlPMAoGCCqG
-SM49BAMCA0gAMEUCIHr4AD6Xx3R6zFCsveIMnWao9Us88/0uGHoT4ELmMhA1AiEA
-yzfXU5qHp3xBJ1BrKOGi71UmQZVwWfO26INhxcfpCAg=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg2.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg2.pem
deleted file mode 100644
index 813cbe94ec..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg2.pem
+++ /dev/null
@@ -1,10 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBbDCCARKgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y
-ZzIwHhcNMTcwMjIwMTkwNjExWhcNMTgwMjIwMTkwNjExWjATMREwDwYDVQQDDAhw
-ZWVyT3JnMjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH3IweQK1AJdcV3FF27a
-gNKhy13Nz2OguzsmUbW85/7pReenAWzs89rEApHXoJqUtNzdZfaLkcq32E1Ilk3N
-oN2jVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEhOilIyGA53r9Zo
-O5GQP0RSZcQ1MB8GA1UdIwQYMBaAFEhOilIyGA53r9ZoO5GQP0RSZcQ1MAoGCCqG
-SM49BAMCA0gAMEUCIQD+/5z68ewJarixMgYrg/MwyTMwX7ikCaCgU5TN2MU1PQIg
-Qe+klrq6COxsmrctClV64Wj4zhGTOhaZG1yN24OXukQ=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/signcerts/ordererOrg1-cert.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/signcerts/ordererOrg1-cert.pem
deleted file mode 100644
index 277eb4c826..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/msp/signcerts/ordererOrg1-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICKTCCAdCgAwIBAgIRALz4qIofOY8ff94YDATVyGIwCgYIKoZIzj0EAwIwZjEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
-cmFuY2lzY28xFDASBgNVBAoTC29yZGVyZXJPcmcxMRQwEgYDVQQDEwtvcmRlcmVy
-T3JnMTAeFw0xNzAzMDExNzM2NDFaFw0yNzAyMjcxNzM2NDFaMGYxCzAJBgNVBAYT
-AlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv
-MRQwEgYDVQQKEwtvcmRlcmVyT3JnMTEUMBIGA1UEAxMLb3JkZXJlck9yZzEwWTAT
-BgcqhkjOPQIBBggqhkjOPQMBBwNCAARNSaTugowp/Y4XcY7Hrs+m3oE/j8B/jIp3
-H8thNhYUdkHX69wNsRB6v/vElHn6CPjUHpNAivbXw9dIz7X3aI/Xo18wXTAOBgNV
-HQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MCkG
-A1UdDgQiBCBNSnciFRaLZZTIfoJlDkOPHzfDA+FLX55vPuBswruCOjAKBggqhkjO
-PQQDAgNHADBEAiBa6k7Cax+McCHy61Jma1vLuFZswBbnsC6DqbveiKdUoAIgeyAf
-HzWxMoVrLfPFwF75PqCjae7xnYq+RWlsHZlMGFU=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/orderers/ordererOrg1orderer1/admincerts/ordererOrg1-cert.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/orderers/ordererOrg1orderer1/admincerts/ordererOrg1-cert.pem
deleted file mode 100644
index 277eb4c826..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/orderers/ordererOrg1orderer1/admincerts/ordererOrg1-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICKTCCAdCgAwIBAgIRALz4qIofOY8ff94YDATVyGIwCgYIKoZIzj0EAwIwZjEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
-cmFuY2lzY28xFDASBgNVBAoTC29yZGVyZXJPcmcxMRQwEgYDVQQDEwtvcmRlcmVy
-T3JnMTAeFw0xNzAzMDExNzM2NDFaFw0yNzAyMjcxNzM2NDFaMGYxCzAJBgNVBAYT
-AlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv
-MRQwEgYDVQQKEwtvcmRlcmVyT3JnMTEUMBIGA1UEAxMLb3JkZXJlck9yZzEwWTAT
-BgcqhkjOPQIBBggqhkjOPQMBBwNCAARNSaTugowp/Y4XcY7Hrs+m3oE/j8B/jIp3
-H8thNhYUdkHX69wNsRB6v/vElHn6CPjUHpNAivbXw9dIz7X3aI/Xo18wXTAOBgNV
-HQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MCkG
-A1UdDgQiBCBNSnciFRaLZZTIfoJlDkOPHzfDA+FLX55vPuBswruCOjAKBggqhkjO
-PQQDAgNHADBEAiBa6k7Cax+McCHy61Jma1vLuFZswBbnsC6DqbveiKdUoAIgeyAf
-HzWxMoVrLfPFwF75PqCjae7xnYq+RWlsHZlMGFU=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/orderers/ordererOrg1orderer1/cacerts/ordererOrg1-cert.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/orderers/ordererOrg1orderer1/cacerts/ordererOrg1-cert.pem
deleted file mode 100644
index 277eb4c826..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/orderers/ordererOrg1orderer1/cacerts/ordererOrg1-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICKTCCAdCgAwIBAgIRALz4qIofOY8ff94YDATVyGIwCgYIKoZIzj0EAwIwZjEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
-cmFuY2lzY28xFDASBgNVBAoTC29yZGVyZXJPcmcxMRQwEgYDVQQDEwtvcmRlcmVy
-T3JnMTAeFw0xNzAzMDExNzM2NDFaFw0yNzAyMjcxNzM2NDFaMGYxCzAJBgNVBAYT
-AlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv
-MRQwEgYDVQQKEwtvcmRlcmVyT3JnMTEUMBIGA1UEAxMLb3JkZXJlck9yZzEwWTAT
-BgcqhkjOPQIBBggqhkjOPQMBBwNCAARNSaTugowp/Y4XcY7Hrs+m3oE/j8B/jIp3
-H8thNhYUdkHX69wNsRB6v/vElHn6CPjUHpNAivbXw9dIz7X3aI/Xo18wXTAOBgNV
-HQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MCkG
-A1UdDgQiBCBNSnciFRaLZZTIfoJlDkOPHzfDA+FLX55vPuBswruCOjAKBggqhkjO
-PQQDAgNHADBEAiBa6k7Cax+McCHy61Jma1vLuFZswBbnsC6DqbveiKdUoAIgeyAf
-HzWxMoVrLfPFwF75PqCjae7xnYq+RWlsHZlMGFU=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/orderers/ordererOrg1orderer1/keystore/9707908924f92bbaa5c8a6961c260dc4992ad2fd7043cccf3f3948ffbea989e1_sk b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/orderers/ordererOrg1orderer1/keystore/9707908924f92bbaa5c8a6961c260dc4992ad2fd7043cccf3f3948ffbea989e1_sk
deleted file mode 100755
index ec20877966..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/orderers/ordererOrg1orderer1/keystore/9707908924f92bbaa5c8a6961c260dc4992ad2fd7043cccf3f3948ffbea989e1_sk
+++ /dev/null
@@ -1,5 +0,0 @@
------BEGIN ECDSA PRIVATE KEY-----
-MHcCAQEEIO0ReZyfrYE1gpMCEp6xU+KK2rmA8oxwB+oMOt0H1ewtoAoGCCqGSM49
-AwEHoUQDQgAEqU74c/nK+RcqBb9RRMeBr1RrD7L8EBkmGjDza+CmsdHmIzQfbRYe
-/0erI/KbGx0DvN+sE3QDNbReQUp2aUjaRg==
------END ECDSA PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/orderers/ordererOrg1orderer1/signcerts/ordererOrg1orderer1-cert.pem b/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/orderers/ordererOrg1orderer1/signcerts/ordererOrg1orderer1-cert.pem
deleted file mode 100644
index 1abaa97e83..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/ordererOrganizations/ordererOrg1/orderers/ordererOrg1orderer1/signcerts/ordererOrg1orderer1-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICHTCCAcSgAwIBAgIQZKA22ytt3J3VxFVLHM5UBzAKBggqhkjOPQQDAjBmMQsw
-CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
-YW5jaXNjbzEUMBIGA1UEChMLb3JkZXJlck9yZzExFDASBgNVBAMTC29yZGVyZXJP
-cmcxMB4XDTE3MDMwMTE3MzY0MVoXDTI3MDIyNzE3MzY0MVowWDELMAkGA1UEBhMC
-VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28x
-HDAaBgNVBAMTE29yZGVyZXJPcmcxb3JkZXJlcjEwWTATBgcqhkjOPQIBBggqhkjO
-PQMBBwNCAASpTvhz+cr5FyoFv1FEx4GvVGsPsvwQGSYaMPNr4Kax0eYjNB9tFh7/
-R6sj8psbHQO836wTdAM1tF5BSnZpSNpGo2IwYDAOBgNVHQ8BAf8EBAMCBaAwEwYD
-VR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCBNSnci
-FRaLZZTIfoJlDkOPHzfDA+FLX55vPuBswruCOjAKBggqhkjOPQQDAgNHADBEAiA0
-YjwUHXbfNmEYutDdaCc7tOrSaqMUksGpqkFO3dSi5wIgLCPJKjaDYIL5qtR+uCSP
-ybLGGa4Tg4Oy0QgMDyrzudA=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/ca/b0a5a73ebed2d6e2dbf1d52421bb61432e45a7bf358f12a2b1c983e84134fa43_sk b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/ca/b0a5a73ebed2d6e2dbf1d52421bb61432e45a7bf358f12a2b1c983e84134fa43_sk
new file mode 100755
index 0000000000..d90ecf98ff
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/ca/b0a5a73ebed2d6e2dbf1d52421bb61432e45a7bf358f12a2b1c983e84134fa43_sk
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgJUBZpDq8Ym1yN9iG
+u9m1iZPTGDI/NUdYGsmRFdng6tyhRANCAAQjlKtmv+XABiS6SjlLrxgL87ZTJR7Z
+EiaXetoq5ulGx4vEW45y31rrmOKFYCpetr2Av89MW8UfleqFZZ0gq8K4
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem
new file mode 100644
index 0000000000..c2fffde92e
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTDCCAfOgAwIBAgIQU/waMMxzUNvKt6/ppkhCgjAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+I5SrZr/lwAYkuko5S68YC/O2UyUe2RIml3raKubpRseLxFuOct9a65jihWAqXra9
+gL/PTFvFH5XqhWWdIKvCuKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEILClpz6+
+0tbi2/HVJCG7YUMuRae/NY8SorHJg+hBNPpDMAoGCCqGSM49BAMCA0cAMEQCIFuM
+9+6zeLhS4uikuQvTAzQ+1t3IDsBdyYhO3v2BIETUAiBTkxs/QBrKxJplcOhYiKQl
+995HmEgStshQG9rkMw6v4g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem
new file mode 100644
index 0000000000..98e26d8d1e
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICLjCCAdSgAwIBAgIQBipswz2oQBNhiOahhV/rFzAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw
+EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEB917eaER/0FGNQ+BEy73P2k3Uh2e7ERq
+cIJT8NJxPf4IDjPW+VQNEPxrQLERU1IbUSHrMKUemOKotthelFX2maNiMGAwDgYD
+VR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAw
+KwYDVR0jBCQwIoAgsKWnPr7S1uLb8dUkIbthQy5Fp781jxKiscmD6EE0+kMwCgYI
+KoZIzj0EAwIDSAAwRQIhAOxRWMufN8nl12HXkC26NGjZkCy7snREWuvTkKkeB74p
+AiA4Bk/jkgFp0NWFxTKglvWYL5P8sy3DIlCd7exy5eba5g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem
new file mode 100644
index 0000000000..c2fffde92e
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTDCCAfOgAwIBAgIQU/waMMxzUNvKt6/ppkhCgjAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+I5SrZr/lwAYkuko5S68YC/O2UyUe2RIml3raKubpRseLxFuOct9a65jihWAqXra9
+gL/PTFvFH5XqhWWdIKvCuKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEILClpz6+
+0tbi2/HVJCG7YUMuRae/NY8SorHJg+hBNPpDMAoGCCqGSM49BAMCA0cAMEQCIFuM
+9+6zeLhS4uikuQvTAzQ+1t3IDsBdyYhO3v2BIETUAiBTkxs/QBrKxJplcOhYiKQl
+995HmEgStshQG9rkMw6v4g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/msp/signcerts/ca.org1.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/msp/signcerts/ca.org1.example.com-cert.pem
new file mode 100644
index 0000000000..c2fffde92e
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/msp/signcerts/ca.org1.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTDCCAfOgAwIBAgIQU/waMMxzUNvKt6/ppkhCgjAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+I5SrZr/lwAYkuko5S68YC/O2UyUe2RIml3raKubpRseLxFuOct9a65jihWAqXra9
+gL/PTFvFH5XqhWWdIKvCuKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEILClpz6+
+0tbi2/HVJCG7YUMuRae/NY8SorHJg+hBNPpDMAoGCCqGSM49BAMCA0cAMEQCIFuM
+9+6zeLhS4uikuQvTAzQ+1t3IDsBdyYhO3v2BIETUAiBTkxs/QBrKxJplcOhYiKQl
+995HmEgStshQG9rkMw6v4g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem
new file mode 100644
index 0000000000..98e26d8d1e
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICLjCCAdSgAwIBAgIQBipswz2oQBNhiOahhV/rFzAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw
+EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEB917eaER/0FGNQ+BEy73P2k3Uh2e7ERq
+cIJT8NJxPf4IDjPW+VQNEPxrQLERU1IbUSHrMKUemOKotthelFX2maNiMGAwDgYD
+VR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAw
+KwYDVR0jBCQwIoAgsKWnPr7S1uLb8dUkIbthQy5Fp781jxKiscmD6EE0+kMwCgYI
+KoZIzj0EAwIDSAAwRQIhAOxRWMufN8nl12HXkC26NGjZkCy7snREWuvTkKkeB74p
+AiA4Bk/jkgFp0NWFxTKglvWYL5P8sy3DIlCd7exy5eba5g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem
new file mode 100644
index 0000000000..c2fffde92e
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTDCCAfOgAwIBAgIQU/waMMxzUNvKt6/ppkhCgjAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+I5SrZr/lwAYkuko5S68YC/O2UyUe2RIml3raKubpRseLxFuOct9a65jihWAqXra9
+gL/PTFvFH5XqhWWdIKvCuKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEILClpz6+
+0tbi2/HVJCG7YUMuRae/NY8SorHJg+hBNPpDMAoGCCqGSM49BAMCA0cAMEQCIFuM
+9+6zeLhS4uikuQvTAzQ+1t3IDsBdyYhO3v2BIETUAiBTkxs/QBrKxJplcOhYiKQl
+995HmEgStshQG9rkMw6v4g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/462d96aff76d243c7e75593e99e157a480fa1c6db9842ce86c171bc2bcd10d95_sk b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/462d96aff76d243c7e75593e99e157a480fa1c6db9842ce86c171bc2bcd10d95_sk
new file mode 100755
index 0000000000..ada0f374b7
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/462d96aff76d243c7e75593e99e157a480fa1c6db9842ce86c171bc2bcd10d95_sk
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgELk6r3DQNxLdmthM
+aEP8jiJbsQGObNYNTfZR7MNEZEOhRANCAAT+vJ3t3vzQ+ZiW0AYA/7hSWovuqTQ+
+6bLnKDrkIe6J2Cre2Bmn8VD05XgCHbTNAV1Kb33BvE+tdkHtMDs//lW8
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/signcerts/peer0.org1.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/signcerts/peer0.org1.example.com-cert.pem
new file mode 100644
index 0000000000..f489012a5f
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/signcerts/peer0.org1.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICWjCCAgGgAwIBAgIRAPGLVnARPOpXbAd4X38Sg60wCgYIKoZIzj0EAwIwczEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
+Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2
+WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
+U2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMS5leGFtcGxlLmNvbTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABP68ne3e/ND5mJbQBgD/uFJai+6pND7p
+sucoOuQh7onYKt7YGafxUPTleAIdtM0BXUpvfcG8T612Qe0wOz/+VbyjgY0wgYow
+DgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQC
+MAAwKwYDVR0jBCQwIoAgsKWnPr7S1uLb8dUkIbthQy5Fp781jxKiscmD6EE0+kMw
+KAYDVR0RBCEwH4IWcGVlcjAub3JnMS5leGFtcGxlLmNvbYIFcGVlcjAwCgYIKoZI
+zj0EAwIDRwAwRAIgbQiRzF3Y1NKEHOy809ZHLLj8KS535l4p5W9kWBUjr/0CICYs
+y2MGqiWbH8EV/J3viNR25QL8yniybnfdCGrJKZWy
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
new file mode 100644
index 0000000000..c2fffde92e
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTDCCAfOgAwIBAgIQU/waMMxzUNvKt6/ppkhCgjAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+I5SrZr/lwAYkuko5S68YC/O2UyUe2RIml3raKubpRseLxFuOct9a65jihWAqXra9
+gL/PTFvFH5XqhWWdIKvCuKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEILClpz6+
+0tbi2/HVJCG7YUMuRae/NY8SorHJg+hBNPpDMAoGCCqGSM49BAMCA0cAMEQCIFuM
+9+6zeLhS4uikuQvTAzQ+1t3IDsBdyYhO3v2BIETUAiBTkxs/QBrKxJplcOhYiKQl
+995HmEgStshQG9rkMw6v4g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
new file mode 100644
index 0000000000..f489012a5f
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICWjCCAgGgAwIBAgIRAPGLVnARPOpXbAd4X38Sg60wCgYIKoZIzj0EAwIwczEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
+Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2
+WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
+U2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMS5leGFtcGxlLmNvbTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABP68ne3e/ND5mJbQBgD/uFJai+6pND7p
+sucoOuQh7onYKt7YGafxUPTleAIdtM0BXUpvfcG8T612Qe0wOz/+VbyjgY0wgYow
+DgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQC
+MAAwKwYDVR0jBCQwIoAgsKWnPr7S1uLb8dUkIbthQy5Fp781jxKiscmD6EE0+kMw
+KAYDVR0RBCEwH4IWcGVlcjAub3JnMS5leGFtcGxlLmNvbYIFcGVlcjAwCgYIKoZI
+zj0EAwIDRwAwRAIgbQiRzF3Y1NKEHOy809ZHLLj8KS535l4p5W9kWBUjr/0CICYs
+y2MGqiWbH8EV/J3viNR25QL8yniybnfdCGrJKZWy
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
new file mode 100644
index 0000000000..ada0f374b7
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgELk6r3DQNxLdmthM
+aEP8jiJbsQGObNYNTfZR7MNEZEOhRANCAAT+vJ3t3vzQ+ZiW0AYA/7hSWovuqTQ+
+6bLnKDrkIe6J2Cre2Bmn8VD05XgCHbTNAV1Kb33BvE+tdkHtMDs//lW8
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem
new file mode 100644
index 0000000000..98e26d8d1e
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICLjCCAdSgAwIBAgIQBipswz2oQBNhiOahhV/rFzAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw
+EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEB917eaER/0FGNQ+BEy73P2k3Uh2e7ERq
+cIJT8NJxPf4IDjPW+VQNEPxrQLERU1IbUSHrMKUemOKotthelFX2maNiMGAwDgYD
+VR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAw
+KwYDVR0jBCQwIoAgsKWnPr7S1uLb8dUkIbthQy5Fp781jxKiscmD6EE0+kMwCgYI
+KoZIzj0EAwIDSAAwRQIhAOxRWMufN8nl12HXkC26NGjZkCy7snREWuvTkKkeB74p
+AiA4Bk/jkgFp0NWFxTKglvWYL5P8sy3DIlCd7exy5eba5g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem
new file mode 100644
index 0000000000..c2fffde92e
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTDCCAfOgAwIBAgIQU/waMMxzUNvKt6/ppkhCgjAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+I5SrZr/lwAYkuko5S68YC/O2UyUe2RIml3raKubpRseLxFuOct9a65jihWAqXra9
+gL/PTFvFH5XqhWWdIKvCuKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEILClpz6+
+0tbi2/HVJCG7YUMuRae/NY8SorHJg+hBNPpDMAoGCCqGSM49BAMCA0cAMEQCIFuM
+9+6zeLhS4uikuQvTAzQ+1t3IDsBdyYhO3v2BIETUAiBTkxs/QBrKxJplcOhYiKQl
+995HmEgStshQG9rkMw6v4g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/keystore/9aef137c3e3d95d6e5655f3a3a1451ea2415d366d02bb96c12190c42a4514941_sk b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/keystore/9aef137c3e3d95d6e5655f3a3a1451ea2415d366d02bb96c12190c42a4514941_sk
new file mode 100755
index 0000000000..2c1dfc95ec
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/keystore/9aef137c3e3d95d6e5655f3a3a1451ea2415d366d02bb96c12190c42a4514941_sk
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgoESldVYiJRU3v1LX
+/SWpcAZ9pyuWLFJp4fm5nP1+UoihRANCAATrUDuTzXpRwY8mF7D9Sfa93eqr/8TK
+V+9MOYP8ERU83Q1O/LFbDpohEoTyFOypX97L+54cHKh2qYJcv5+QJ46q
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/signcerts/peer1.org1.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/signcerts/peer1.org1.example.com-cert.pem
new file mode 100644
index 0000000000..08266b5e9a
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/signcerts/peer1.org1.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICWjCCAgGgAwIBAgIRAPxYG1oPao/E8U8Lyvr5U3MwCgYIKoZIzj0EAwIwczEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
+Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2
+WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
+U2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjEub3JnMS5leGFtcGxlLmNvbTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABOtQO5PNelHBjyYXsP1J9r3d6qv/xMpX
+70w5g/wRFTzdDU78sVsOmiEShPIU7Klf3sv7nhwcqHapgly/n5AnjqqjgY0wgYow
+DgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQC
+MAAwKwYDVR0jBCQwIoAgsKWnPr7S1uLb8dUkIbthQy5Fp781jxKiscmD6EE0+kMw
+KAYDVR0RBCEwH4IWcGVlcjEub3JnMS5leGFtcGxlLmNvbYIFcGVlcjEwCgYIKoZI
+zj0EAwIDRwAwRAIgJ0/jdJFdQSHEG/mY1xhefSur0kOqomwT85Ngvxjk2UQCIBBF
+djbzrCMPYOUHxLMJ94gXIpKgE3ReHec1fCBcsty7
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt
new file mode 100644
index 0000000000..c2fffde92e
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTDCCAfOgAwIBAgIQU/waMMxzUNvKt6/ppkhCgjAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+I5SrZr/lwAYkuko5S68YC/O2UyUe2RIml3raKubpRseLxFuOct9a65jihWAqXra9
+gL/PTFvFH5XqhWWdIKvCuKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEILClpz6+
+0tbi2/HVJCG7YUMuRae/NY8SorHJg+hBNPpDMAoGCCqGSM49BAMCA0cAMEQCIFuM
+9+6zeLhS4uikuQvTAzQ+1t3IDsBdyYhO3v2BIETUAiBTkxs/QBrKxJplcOhYiKQl
+995HmEgStshQG9rkMw6v4g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.crt b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.crt
new file mode 100644
index 0000000000..08266b5e9a
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.crt
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICWjCCAgGgAwIBAgIRAPxYG1oPao/E8U8Lyvr5U3MwCgYIKoZIzj0EAwIwczEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
+Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2
+WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
+U2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjEub3JnMS5leGFtcGxlLmNvbTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABOtQO5PNelHBjyYXsP1J9r3d6qv/xMpX
+70w5g/wRFTzdDU78sVsOmiEShPIU7Klf3sv7nhwcqHapgly/n5AnjqqjgY0wgYow
+DgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQC
+MAAwKwYDVR0jBCQwIoAgsKWnPr7S1uLb8dUkIbthQy5Fp781jxKiscmD6EE0+kMw
+KAYDVR0RBCEwH4IWcGVlcjEub3JnMS5leGFtcGxlLmNvbYIFcGVlcjEwCgYIKoZI
+zj0EAwIDRwAwRAIgJ0/jdJFdQSHEG/mY1xhefSur0kOqomwT85Ngvxjk2UQCIBBF
+djbzrCMPYOUHxLMJ94gXIpKgE3ReHec1fCBcsty7
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.key b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.key
new file mode 100644
index 0000000000..2c1dfc95ec
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.key
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgoESldVYiJRU3v1LX
+/SWpcAZ9pyuWLFJp4fm5nP1+UoihRANCAATrUDuTzXpRwY8mF7D9Sfa93eqr/8TK
+V+9MOYP8ERU83Q1O/LFbDpohEoTyFOypX97L+54cHKh2qYJcv5+QJ46q
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/admincerts/ca.org1.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/admincerts/ca.org1.example.com-cert.pem
new file mode 100644
index 0000000000..c2fffde92e
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/admincerts/ca.org1.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTDCCAfOgAwIBAgIQU/waMMxzUNvKt6/ppkhCgjAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+I5SrZr/lwAYkuko5S68YC/O2UyUe2RIml3raKubpRseLxFuOct9a65jihWAqXra9
+gL/PTFvFH5XqhWWdIKvCuKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEILClpz6+
+0tbi2/HVJCG7YUMuRae/NY8SorHJg+hBNPpDMAoGCCqGSM49BAMCA0cAMEQCIFuM
+9+6zeLhS4uikuQvTAzQ+1t3IDsBdyYhO3v2BIETUAiBTkxs/QBrKxJplcOhYiKQl
+995HmEgStshQG9rkMw6v4g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem
new file mode 100644
index 0000000000..c2fffde92e
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTDCCAfOgAwIBAgIQU/waMMxzUNvKt6/ppkhCgjAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+I5SrZr/lwAYkuko5S68YC/O2UyUe2RIml3raKubpRseLxFuOct9a65jihWAqXra9
+gL/PTFvFH5XqhWWdIKvCuKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEILClpz6+
+0tbi2/HVJCG7YUMuRae/NY8SorHJg+hBNPpDMAoGCCqGSM49BAMCA0cAMEQCIFuM
+9+6zeLhS4uikuQvTAzQ+1t3IDsBdyYhO3v2BIETUAiBTkxs/QBrKxJplcOhYiKQl
+995HmEgStshQG9rkMw6v4g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/addb48b97e97992e9e04869a430009f59e615d94453983d177bf067215b3888c_sk b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/addb48b97e97992e9e04869a430009f59e615d94453983d177bf067215b3888c_sk
new file mode 100755
index 0000000000..84be6d3185
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/addb48b97e97992e9e04869a430009f59e615d94453983d177bf067215b3888c_sk
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgIwJd9dFAJbJFVsRB
+6B9t5+Bja4QDcjEJubTTnrMJIzGhRANCAAQH3Xt5oRH/QUY1D4ETLvc/aTdSHZ7s
+RGpwglPw0nE9/ggOM9b5VA0Q/GtAsRFTUhtRIeswpR6Y4qi22F6UVfaZ
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem
new file mode 100644
index 0000000000..98e26d8d1e
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICLjCCAdSgAwIBAgIQBipswz2oQBNhiOahhV/rFzAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw
+EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEB917eaER/0FGNQ+BEy73P2k3Uh2e7ERq
+cIJT8NJxPf4IDjPW+VQNEPxrQLERU1IbUSHrMKUemOKotthelFX2maNiMGAwDgYD
+VR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAw
+KwYDVR0jBCQwIoAgsKWnPr7S1uLb8dUkIbthQy5Fp781jxKiscmD6EE0+kMwCgYI
+KoZIzj0EAwIDSAAwRQIhAOxRWMufN8nl12HXkC26NGjZkCy7snREWuvTkKkeB74p
+AiA4Bk/jkgFp0NWFxTKglvWYL5P8sy3DIlCd7exy5eba5g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/ca.crt b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/ca.crt
new file mode 100644
index 0000000000..c2fffde92e
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/ca.crt
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTDCCAfOgAwIBAgIQU/waMMxzUNvKt6/ppkhCgjAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+I5SrZr/lwAYkuko5S68YC/O2UyUe2RIml3raKubpRseLxFuOct9a65jihWAqXra9
+gL/PTFvFH5XqhWWdIKvCuKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEILClpz6+
+0tbi2/HVJCG7YUMuRae/NY8SorHJg+hBNPpDMAoGCCqGSM49BAMCA0cAMEQCIFuM
+9+6zeLhS4uikuQvTAzQ+1t3IDsBdyYhO3v2BIETUAiBTkxs/QBrKxJplcOhYiKQl
+995HmEgStshQG9rkMw6v4g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.crt b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.crt
new file mode 100644
index 0000000000..98e26d8d1e
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.crt
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICLjCCAdSgAwIBAgIQBipswz2oQBNhiOahhV/rFzAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw
+EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEB917eaER/0FGNQ+BEy73P2k3Uh2e7ERq
+cIJT8NJxPf4IDjPW+VQNEPxrQLERU1IbUSHrMKUemOKotthelFX2maNiMGAwDgYD
+VR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAw
+KwYDVR0jBCQwIoAgsKWnPr7S1uLb8dUkIbthQy5Fp781jxKiscmD6EE0+kMwCgYI
+KoZIzj0EAwIDSAAwRQIhAOxRWMufN8nl12HXkC26NGjZkCy7snREWuvTkKkeB74p
+AiA4Bk/jkgFp0NWFxTKglvWYL5P8sy3DIlCd7exy5eba5g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.key b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.key
new file mode 100644
index 0000000000..84be6d3185
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.key
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgIwJd9dFAJbJFVsRB
+6B9t5+Bja4QDcjEJubTTnrMJIzGhRANCAAQH3Xt5oRH/QUY1D4ETLvc/aTdSHZ7s
+RGpwglPw0nE9/ggOM9b5VA0Q/GtAsRFTUhtRIeswpR6Y4qi22F6UVfaZ
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/admincerts/ca.org1.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/admincerts/ca.org1.example.com-cert.pem
new file mode 100644
index 0000000000..c2fffde92e
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/admincerts/ca.org1.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTDCCAfOgAwIBAgIQU/waMMxzUNvKt6/ppkhCgjAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+I5SrZr/lwAYkuko5S68YC/O2UyUe2RIml3raKubpRseLxFuOct9a65jihWAqXra9
+gL/PTFvFH5XqhWWdIKvCuKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEILClpz6+
+0tbi2/HVJCG7YUMuRae/NY8SorHJg+hBNPpDMAoGCCqGSM49BAMCA0cAMEQCIFuM
+9+6zeLhS4uikuQvTAzQ+1t3IDsBdyYhO3v2BIETUAiBTkxs/QBrKxJplcOhYiKQl
+995HmEgStshQG9rkMw6v4g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem
new file mode 100644
index 0000000000..c2fffde92e
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTDCCAfOgAwIBAgIQU/waMMxzUNvKt6/ppkhCgjAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+I5SrZr/lwAYkuko5S68YC/O2UyUe2RIml3raKubpRseLxFuOct9a65jihWAqXra9
+gL/PTFvFH5XqhWWdIKvCuKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEILClpz6+
+0tbi2/HVJCG7YUMuRae/NY8SorHJg+hBNPpDMAoGCCqGSM49BAMCA0cAMEQCIFuM
+9+6zeLhS4uikuQvTAzQ+1t3IDsBdyYhO3v2BIETUAiBTkxs/QBrKxJplcOhYiKQl
+995HmEgStshQG9rkMw6v4g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/f3408fb5d25878b20bf2f278afd2277f3aadbc8252ad3b870bde0f47cac3f013_sk b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/f3408fb5d25878b20bf2f278afd2277f3aadbc8252ad3b870bde0f47cac3f013_sk
new file mode 100755
index 0000000000..2bcaeaf072
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/f3408fb5d25878b20bf2f278afd2277f3aadbc8252ad3b870bde0f47cac3f013_sk
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgE0WQlF9g49HaDdRS
+JhS3jUBvbC6HHv2EUVY2bh+0fauhRANCAAS+i9en5dpzM7Yq0CvVW4zagw2SoQ54
+aokvWsp/qwUyiZlGPASMIr2jbaZX3dYzeZAGxUiGHb/y+RNxn13m0Z3X
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem
new file mode 100644
index 0000000000..c7988881ef
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICLjCCAdWgAwIBAgIRAM9CjCCBwgRkIP/nSstCAFowCgYIKoZIzj0EAwIwczEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
+Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2
+WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
+U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWVXNlcjFAb3JnMS5leGFtcGxlLmNvbTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABL6L16fl2nMztirQK9VbjNqDDZKhDnhq
+iS9ayn+rBTKJmUY8BIwivaNtplfd1jN5kAbFSIYdv/L5E3GfXebRndejYjBgMA4G
+A1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAA
+MCsGA1UdIwQkMCKAILClpz6+0tbi2/HVJCG7YUMuRae/NY8SorHJg+hBNPpDMAoG
+CCqGSM49BAMCA0cAMEQCIGc7JN4Esepfk+AN7zOEZsrrQgNcAb01V4SaMWlsHQMr
+AiAY3NEbPLuKelBhJ7T8Hjr5DfCVfP9dbBDJ9QmwlK1p/g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/ca.crt b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/ca.crt
new file mode 100644
index 0000000000..c2fffde92e
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/ca.crt
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTDCCAfOgAwIBAgIQU/waMMxzUNvKt6/ppkhCgjAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+I5SrZr/lwAYkuko5S68YC/O2UyUe2RIml3raKubpRseLxFuOct9a65jihWAqXra9
+gL/PTFvFH5XqhWWdIKvCuKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEILClpz6+
+0tbi2/HVJCG7YUMuRae/NY8SorHJg+hBNPpDMAoGCCqGSM49BAMCA0cAMEQCIFuM
+9+6zeLhS4uikuQvTAzQ+1t3IDsBdyYhO3v2BIETUAiBTkxs/QBrKxJplcOhYiKQl
+995HmEgStshQG9rkMw6v4g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.crt b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.crt
new file mode 100644
index 0000000000..c7988881ef
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.crt
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICLjCCAdWgAwIBAgIRAM9CjCCBwgRkIP/nSstCAFowCgYIKoZIzj0EAwIwczEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
+Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2
+WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
+U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWVXNlcjFAb3JnMS5leGFtcGxlLmNvbTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABL6L16fl2nMztirQK9VbjNqDDZKhDnhq
+iS9ayn+rBTKJmUY8BIwivaNtplfd1jN5kAbFSIYdv/L5E3GfXebRndejYjBgMA4G
+A1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAA
+MCsGA1UdIwQkMCKAILClpz6+0tbi2/HVJCG7YUMuRae/NY8SorHJg+hBNPpDMAoG
+CCqGSM49BAMCA0cAMEQCIGc7JN4Esepfk+AN7zOEZsrrQgNcAb01V4SaMWlsHQMr
+AiAY3NEbPLuKelBhJ7T8Hjr5DfCVfP9dbBDJ9QmwlK1p/g==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.key b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.key
new file mode 100644
index 0000000000..2bcaeaf072
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.key
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgE0WQlF9g49HaDdRS
+JhS3jUBvbC6HHv2EUVY2bh+0fauhRANCAAS+i9en5dpzM7Yq0CvVW4zagw2SoQ54
+aokvWsp/qwUyiZlGPASMIr2jbaZX3dYzeZAGxUiGHb/y+RNxn13m0Z3X
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/ca/a6673bbdfa2fc541e4f89faccae0247f37de362bace6c153bdf2881b1b65b51b_sk b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/ca/a6673bbdfa2fc541e4f89faccae0247f37de362bace6c153bdf2881b1b65b51b_sk
new file mode 100755
index 0000000000..3dd0e60283
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/ca/a6673bbdfa2fc541e4f89faccae0247f37de362bace6c153bdf2881b1b65b51b_sk
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgBJxSzg4QT8WDLDgq
+fDh2uG8EtKOI9vJWQx6CdlPZUymhRANCAARZqdA+QakXrM8vis8UilWcPDd8p1ek
+WhluUyE3WmrHHqu6gkCYQWZoAs7vV0hJZGPs3c5RZ3lPxeU+LrSgRkRs
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem
new file mode 100644
index 0000000000..2e99b06b80
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTTCCAfOgAwIBAgIQYs+uQqFLXpXxMCrHV5BsdDAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+WanQPkGpF6zPL4rPFIpVnDw3fKdXpFoZblMhN1pqxx6ruoJAmEFmaALO71dISWRj
+7N3OUWd5T8XlPi60oEZEbKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKZnO736
+L8VB5PifrMrgJH833jYrrObBU73yiBsbZbUbMAoGCCqGSM49BAMCA0gAMEUCIQCL
+0Lc/sUpBrcq/0rEWjXrBAorDpj8WrMBQZi1/qrTzpAIgKKn/uCytHL9hCqrnKt4K
+UM8+5v0o/PPzbdt5LhyzOhM=
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem
new file mode 100644
index 0000000000..f68213b4cb
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICLjCCAdWgAwIBAgIRAKnRrjtHq0BNgy0bn1Up6qgwCgYIKoZIzj0EAwIwczEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
+Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2
+WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
+U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABPWrbBxitWl/77MsBunX9tl/8zAlzOZd
+HuQD8HyeZtLxrfvLCol2/kVSe82PtKDbwiaZIXadKqJIWShEXJw1hzyjYjBgMA4G
+A1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAA
+MCsGA1UdIwQkMCKAIKZnO736L8VB5PifrMrgJH833jYrrObBU73yiBsbZbUbMAoG
+CCqGSM49BAMCA0cAMEQCIFCAjlySowYXodzjSdpFDO4mBL5wK34oZ5zjg6FEydQQ
+AiAcuzvOqa0Tqi5iIF3wSjiL/OmRZifnxYcySMbI/jTAzA==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem
new file mode 100644
index 0000000000..2e99b06b80
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTTCCAfOgAwIBAgIQYs+uQqFLXpXxMCrHV5BsdDAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+WanQPkGpF6zPL4rPFIpVnDw3fKdXpFoZblMhN1pqxx6ruoJAmEFmaALO71dISWRj
+7N3OUWd5T8XlPi60oEZEbKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKZnO736
+L8VB5PifrMrgJH833jYrrObBU73yiBsbZbUbMAoGCCqGSM49BAMCA0gAMEUCIQCL
+0Lc/sUpBrcq/0rEWjXrBAorDpj8WrMBQZi1/qrTzpAIgKKn/uCytHL9hCqrnKt4K
+UM8+5v0o/PPzbdt5LhyzOhM=
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/msp/signcerts/ca.org2.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/msp/signcerts/ca.org2.example.com-cert.pem
new file mode 100644
index 0000000000..2e99b06b80
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/msp/signcerts/ca.org2.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTTCCAfOgAwIBAgIQYs+uQqFLXpXxMCrHV5BsdDAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+WanQPkGpF6zPL4rPFIpVnDw3fKdXpFoZblMhN1pqxx6ruoJAmEFmaALO71dISWRj
+7N3OUWd5T8XlPi60oEZEbKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKZnO736
+L8VB5PifrMrgJH833jYrrObBU73yiBsbZbUbMAoGCCqGSM49BAMCA0gAMEUCIQCL
+0Lc/sUpBrcq/0rEWjXrBAorDpj8WrMBQZi1/qrTzpAIgKKn/uCytHL9hCqrnKt4K
+UM8+5v0o/PPzbdt5LhyzOhM=
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem
new file mode 100644
index 0000000000..f68213b4cb
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICLjCCAdWgAwIBAgIRAKnRrjtHq0BNgy0bn1Up6qgwCgYIKoZIzj0EAwIwczEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
+Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2
+WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
+U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABPWrbBxitWl/77MsBunX9tl/8zAlzOZd
+HuQD8HyeZtLxrfvLCol2/kVSe82PtKDbwiaZIXadKqJIWShEXJw1hzyjYjBgMA4G
+A1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAA
+MCsGA1UdIwQkMCKAIKZnO736L8VB5PifrMrgJH833jYrrObBU73yiBsbZbUbMAoG
+CCqGSM49BAMCA0cAMEQCIFCAjlySowYXodzjSdpFDO4mBL5wK34oZ5zjg6FEydQQ
+AiAcuzvOqa0Tqi5iIF3wSjiL/OmRZifnxYcySMbI/jTAzA==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem
new file mode 100644
index 0000000000..2e99b06b80
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTTCCAfOgAwIBAgIQYs+uQqFLXpXxMCrHV5BsdDAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+WanQPkGpF6zPL4rPFIpVnDw3fKdXpFoZblMhN1pqxx6ruoJAmEFmaALO71dISWRj
+7N3OUWd5T8XlPi60oEZEbKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKZnO736
+L8VB5PifrMrgJH833jYrrObBU73yiBsbZbUbMAoGCCqGSM49BAMCA0gAMEUCIQCL
+0Lc/sUpBrcq/0rEWjXrBAorDpj8WrMBQZi1/qrTzpAIgKKn/uCytHL9hCqrnKt4K
+UM8+5v0o/PPzbdt5LhyzOhM=
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/keystore/a055b1a4d56c37fb3ee216e3559b6e0108842a81068c1c860fdc3a4edd1c78b1_sk b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/keystore/a055b1a4d56c37fb3ee216e3559b6e0108842a81068c1c860fdc3a4edd1c78b1_sk
new file mode 100755
index 0000000000..4f96e72225
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/keystore/a055b1a4d56c37fb3ee216e3559b6e0108842a81068c1c860fdc3a4edd1c78b1_sk
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg1Pi/w2LJjUev1AJE
+COoO2YEohPE6kfBRjlZH7IHty3GhRANCAAQ+ty7SeVuQ+UyOp0HlaYuV71XoOm51
+jyRQcd8Lv/rD3pjHIYZvu0dcDLE4RwD48yUUn77nnPf+uiTFz3ti//tz
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/signcerts/peer0.org2.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/signcerts/peer0.org2.example.com-cert.pem
new file mode 100644
index 0000000000..31d7404ec9
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/signcerts/peer0.org2.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICWzCCAgGgAwIBAgIRAOf7DmhFKr186zyz2aZybPwwCgYIKoZIzj0EAwIwczEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
+Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2
+WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
+U2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMi5leGFtcGxlLmNvbTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABD63LtJ5W5D5TI6nQeVpi5XvVeg6bnWP
+JFBx3wu/+sPemMchhm+7R1wMsThHAPjzJRSfvuec9/66JMXPe2L/+3OjgY0wgYow
+DgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQC
+MAAwKwYDVR0jBCQwIoAgpmc7vfovxUHk+J+syuAkfzfeNius5sFTvfKIGxtltRsw
+KAYDVR0RBCEwH4IWcGVlcjAub3JnMi5leGFtcGxlLmNvbYIFcGVlcjAwCgYIKoZI
+zj0EAwIDSAAwRQIhAO5kw3oftp98jGluAjaPZ3PpyT7ICziUEgWRRAM1hVggAiAI
+p5ADwtJwYYdjj4fjNl3x3C/JDy+AE53+NojkXkS1Pw==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
new file mode 100644
index 0000000000..2e99b06b80
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTTCCAfOgAwIBAgIQYs+uQqFLXpXxMCrHV5BsdDAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+WanQPkGpF6zPL4rPFIpVnDw3fKdXpFoZblMhN1pqxx6ruoJAmEFmaALO71dISWRj
+7N3OUWd5T8XlPi60oEZEbKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKZnO736
+L8VB5PifrMrgJH833jYrrObBU73yiBsbZbUbMAoGCCqGSM49BAMCA0gAMEUCIQCL
+0Lc/sUpBrcq/0rEWjXrBAorDpj8WrMBQZi1/qrTzpAIgKKn/uCytHL9hCqrnKt4K
+UM8+5v0o/PPzbdt5LhyzOhM=
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt
new file mode 100644
index 0000000000..31d7404ec9
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICWzCCAgGgAwIBAgIRAOf7DmhFKr186zyz2aZybPwwCgYIKoZIzj0EAwIwczEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
+Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2
+WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
+U2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMi5leGFtcGxlLmNvbTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABD63LtJ5W5D5TI6nQeVpi5XvVeg6bnWP
+JFBx3wu/+sPemMchhm+7R1wMsThHAPjzJRSfvuec9/66JMXPe2L/+3OjgY0wgYow
+DgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQC
+MAAwKwYDVR0jBCQwIoAgpmc7vfovxUHk+J+syuAkfzfeNius5sFTvfKIGxtltRsw
+KAYDVR0RBCEwH4IWcGVlcjAub3JnMi5leGFtcGxlLmNvbYIFcGVlcjAwCgYIKoZI
+zj0EAwIDSAAwRQIhAO5kw3oftp98jGluAjaPZ3PpyT7ICziUEgWRRAM1hVggAiAI
+p5ADwtJwYYdjj4fjNl3x3C/JDy+AE53+NojkXkS1Pw==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key
new file mode 100644
index 0000000000..4f96e72225
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg1Pi/w2LJjUev1AJE
+COoO2YEohPE6kfBRjlZH7IHty3GhRANCAAQ+ty7SeVuQ+UyOp0HlaYuV71XoOm51
+jyRQcd8Lv/rD3pjHIYZvu0dcDLE4RwD48yUUn77nnPf+uiTFz3ti//tz
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem
new file mode 100644
index 0000000000..f68213b4cb
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICLjCCAdWgAwIBAgIRAKnRrjtHq0BNgy0bn1Up6qgwCgYIKoZIzj0EAwIwczEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
+Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2
+WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
+U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABPWrbBxitWl/77MsBunX9tl/8zAlzOZd
+HuQD8HyeZtLxrfvLCol2/kVSe82PtKDbwiaZIXadKqJIWShEXJw1hzyjYjBgMA4G
+A1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAA
+MCsGA1UdIwQkMCKAIKZnO736L8VB5PifrMrgJH833jYrrObBU73yiBsbZbUbMAoG
+CCqGSM49BAMCA0cAMEQCIFCAjlySowYXodzjSdpFDO4mBL5wK34oZ5zjg6FEydQQ
+AiAcuzvOqa0Tqi5iIF3wSjiL/OmRZifnxYcySMbI/jTAzA==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem
new file mode 100644
index 0000000000..2e99b06b80
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTTCCAfOgAwIBAgIQYs+uQqFLXpXxMCrHV5BsdDAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+WanQPkGpF6zPL4rPFIpVnDw3fKdXpFoZblMhN1pqxx6ruoJAmEFmaALO71dISWRj
+7N3OUWd5T8XlPi60oEZEbKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKZnO736
+L8VB5PifrMrgJH833jYrrObBU73yiBsbZbUbMAoGCCqGSM49BAMCA0gAMEUCIQCL
+0Lc/sUpBrcq/0rEWjXrBAorDpj8WrMBQZi1/qrTzpAIgKKn/uCytHL9hCqrnKt4K
+UM8+5v0o/PPzbdt5LhyzOhM=
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/keystore/2495580978f45ac96069d2095ee8ae359073d64a4af57f2b30b6d8a4246160e0_sk b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/keystore/2495580978f45ac96069d2095ee8ae359073d64a4af57f2b30b6d8a4246160e0_sk
new file mode 100755
index 0000000000..8034b42722
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/keystore/2495580978f45ac96069d2095ee8ae359073d64a4af57f2b30b6d8a4246160e0_sk
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgzozEaz6ULyvmq9KT
+97acyaJxfoG3yERBtC+ECOsgIV2hRANCAATtgOk3yWSDwgdfhSkUH3x/njzVKaFK
+WsZypNn/CHHIZlvaOON3AU9GfEIoA0sumIVNq9WdpMs4ImPTz5ZQ1nLL
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/signcerts/peer1.org2.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/signcerts/peer1.org2.example.com-cert.pem
new file mode 100644
index 0000000000..c3d8216c61
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/signcerts/peer1.org2.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICWzCCAgGgAwIBAgIRAMpRg32fw/UnKwGMfRyCBnwwCgYIKoZIzj0EAwIwczEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
+Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2
+WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
+U2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjEub3JnMi5leGFtcGxlLmNvbTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABO2A6TfJZIPCB1+FKRQffH+ePNUpoUpa
+xnKk2f8IcchmW9o443cBT0Z8QigDSy6YhU2r1Z2kyzgiY9PPllDWcsujgY0wgYow
+DgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQC
+MAAwKwYDVR0jBCQwIoAgpmc7vfovxUHk+J+syuAkfzfeNius5sFTvfKIGxtltRsw
+KAYDVR0RBCEwH4IWcGVlcjEub3JnMi5leGFtcGxlLmNvbYIFcGVlcjEwCgYIKoZI
+zj0EAwIDSAAwRQIhAIQpMd2nlirXPsMLOJc+0n9dTa6XzvQMq5JZxSjiIqsSAiBk
+0xQ9hde893+QaqdbP4DP5h/O5QcvS2v1Jy4XBwVjhg==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt
new file mode 100644
index 0000000000..2e99b06b80
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTTCCAfOgAwIBAgIQYs+uQqFLXpXxMCrHV5BsdDAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+WanQPkGpF6zPL4rPFIpVnDw3fKdXpFoZblMhN1pqxx6ruoJAmEFmaALO71dISWRj
+7N3OUWd5T8XlPi60oEZEbKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKZnO736
+L8VB5PifrMrgJH833jYrrObBU73yiBsbZbUbMAoGCCqGSM49BAMCA0gAMEUCIQCL
+0Lc/sUpBrcq/0rEWjXrBAorDpj8WrMBQZi1/qrTzpAIgKKn/uCytHL9hCqrnKt4K
+UM8+5v0o/PPzbdt5LhyzOhM=
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.crt b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.crt
new file mode 100644
index 0000000000..c3d8216c61
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.crt
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICWzCCAgGgAwIBAgIRAMpRg32fw/UnKwGMfRyCBnwwCgYIKoZIzj0EAwIwczEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
+Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2
+WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
+U2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjEub3JnMi5leGFtcGxlLmNvbTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABO2A6TfJZIPCB1+FKRQffH+ePNUpoUpa
+xnKk2f8IcchmW9o443cBT0Z8QigDSy6YhU2r1Z2kyzgiY9PPllDWcsujgY0wgYow
+DgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQC
+MAAwKwYDVR0jBCQwIoAgpmc7vfovxUHk+J+syuAkfzfeNius5sFTvfKIGxtltRsw
+KAYDVR0RBCEwH4IWcGVlcjEub3JnMi5leGFtcGxlLmNvbYIFcGVlcjEwCgYIKoZI
+zj0EAwIDSAAwRQIhAIQpMd2nlirXPsMLOJc+0n9dTa6XzvQMq5JZxSjiIqsSAiBk
+0xQ9hde893+QaqdbP4DP5h/O5QcvS2v1Jy4XBwVjhg==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.key b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.key
new file mode 100644
index 0000000000..8034b42722
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.key
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgzozEaz6ULyvmq9KT
+97acyaJxfoG3yERBtC+ECOsgIV2hRANCAATtgOk3yWSDwgdfhSkUH3x/njzVKaFK
+WsZypNn/CHHIZlvaOON3AU9GfEIoA0sumIVNq9WdpMs4ImPTz5ZQ1nLL
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/admincerts/ca.org2.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/admincerts/ca.org2.example.com-cert.pem
new file mode 100644
index 0000000000..2e99b06b80
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/admincerts/ca.org2.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTTCCAfOgAwIBAgIQYs+uQqFLXpXxMCrHV5BsdDAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+WanQPkGpF6zPL4rPFIpVnDw3fKdXpFoZblMhN1pqxx6ruoJAmEFmaALO71dISWRj
+7N3OUWd5T8XlPi60oEZEbKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKZnO736
+L8VB5PifrMrgJH833jYrrObBU73yiBsbZbUbMAoGCCqGSM49BAMCA0gAMEUCIQCL
+0Lc/sUpBrcq/0rEWjXrBAorDpj8WrMBQZi1/qrTzpAIgKKn/uCytHL9hCqrnKt4K
+UM8+5v0o/PPzbdt5LhyzOhM=
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem
new file mode 100644
index 0000000000..2e99b06b80
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTTCCAfOgAwIBAgIQYs+uQqFLXpXxMCrHV5BsdDAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+WanQPkGpF6zPL4rPFIpVnDw3fKdXpFoZblMhN1pqxx6ruoJAmEFmaALO71dISWRj
+7N3OUWd5T8XlPi60oEZEbKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKZnO736
+L8VB5PifrMrgJH833jYrrObBU73yiBsbZbUbMAoGCCqGSM49BAMCA0gAMEUCIQCL
+0Lc/sUpBrcq/0rEWjXrBAorDpj8WrMBQZi1/qrTzpAIgKKn/uCytHL9hCqrnKt4K
+UM8+5v0o/PPzbdt5LhyzOhM=
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/5681d5bed252077272137ebbcd141616229862fa4deeedbb9c1cb515e95ed82d_sk b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/5681d5bed252077272137ebbcd141616229862fa4deeedbb9c1cb515e95ed82d_sk
new file mode 100755
index 0000000000..5ee292f2eb
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/5681d5bed252077272137ebbcd141616229862fa4deeedbb9c1cb515e95ed82d_sk
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgXo6bPj7BM0X38Ytq
+JmoXugQ9FEZXQ6gv9ExKy4EsKKWhRANCAAT1q2wcYrVpf++zLAbp1/bZf/MwJczm
+XR7kA/B8nmbS8a37ywqJdv5FUnvNj7Sg28ImmSF2nSqiSFkoRFycNYc8
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem
new file mode 100644
index 0000000000..f68213b4cb
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICLjCCAdWgAwIBAgIRAKnRrjtHq0BNgy0bn1Up6qgwCgYIKoZIzj0EAwIwczEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
+Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2
+WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
+U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABPWrbBxitWl/77MsBunX9tl/8zAlzOZd
+HuQD8HyeZtLxrfvLCol2/kVSe82PtKDbwiaZIXadKqJIWShEXJw1hzyjYjBgMA4G
+A1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAA
+MCsGA1UdIwQkMCKAIKZnO736L8VB5PifrMrgJH833jYrrObBU73yiBsbZbUbMAoG
+CCqGSM49BAMCA0cAMEQCIFCAjlySowYXodzjSdpFDO4mBL5wK34oZ5zjg6FEydQQ
+AiAcuzvOqa0Tqi5iIF3wSjiL/OmRZifnxYcySMbI/jTAzA==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/ca.crt b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/ca.crt
new file mode 100644
index 0000000000..2e99b06b80
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/ca.crt
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTTCCAfOgAwIBAgIQYs+uQqFLXpXxMCrHV5BsdDAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+WanQPkGpF6zPL4rPFIpVnDw3fKdXpFoZblMhN1pqxx6ruoJAmEFmaALO71dISWRj
+7N3OUWd5T8XlPi60oEZEbKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKZnO736
+L8VB5PifrMrgJH833jYrrObBU73yiBsbZbUbMAoGCCqGSM49BAMCA0gAMEUCIQCL
+0Lc/sUpBrcq/0rEWjXrBAorDpj8WrMBQZi1/qrTzpAIgKKn/uCytHL9hCqrnKt4K
+UM8+5v0o/PPzbdt5LhyzOhM=
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.crt b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.crt
new file mode 100644
index 0000000000..f68213b4cb
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.crt
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICLjCCAdWgAwIBAgIRAKnRrjtHq0BNgy0bn1Up6qgwCgYIKoZIzj0EAwIwczEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
+Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjAxMTQxNzI2WhcNMjcwNTMwMTQxNzI2
+WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
+U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABPWrbBxitWl/77MsBunX9tl/8zAlzOZd
+HuQD8HyeZtLxrfvLCol2/kVSe82PtKDbwiaZIXadKqJIWShEXJw1hzyjYjBgMA4G
+A1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAA
+MCsGA1UdIwQkMCKAIKZnO736L8VB5PifrMrgJH833jYrrObBU73yiBsbZbUbMAoG
+CCqGSM49BAMCA0cAMEQCIFCAjlySowYXodzjSdpFDO4mBL5wK34oZ5zjg6FEydQQ
+AiAcuzvOqa0Tqi5iIF3wSjiL/OmRZifnxYcySMbI/jTAzA==
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.key b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.key
new file mode 100644
index 0000000000..5ee292f2eb
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.key
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgXo6bPj7BM0X38Ytq
+JmoXugQ9FEZXQ6gv9ExKy4EsKKWhRANCAAT1q2wcYrVpf++zLAbp1/bZf/MwJczm
+XR7kA/B8nmbS8a37ywqJdv5FUnvNj7Sg28ImmSF2nSqiSFkoRFycNYc8
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/admincerts/ca.org2.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/admincerts/ca.org2.example.com-cert.pem
new file mode 100644
index 0000000000..2e99b06b80
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/admincerts/ca.org2.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTTCCAfOgAwIBAgIQYs+uQqFLXpXxMCrHV5BsdDAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+WanQPkGpF6zPL4rPFIpVnDw3fKdXpFoZblMhN1pqxx6ruoJAmEFmaALO71dISWRj
+7N3OUWd5T8XlPi60oEZEbKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKZnO736
+L8VB5PifrMrgJH833jYrrObBU73yiBsbZbUbMAoGCCqGSM49BAMCA0gAMEUCIQCL
+0Lc/sUpBrcq/0rEWjXrBAorDpj8WrMBQZi1/qrTzpAIgKKn/uCytHL9hCqrnKt4K
+UM8+5v0o/PPzbdt5LhyzOhM=
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem
new file mode 100644
index 0000000000..2e99b06b80
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTTCCAfOgAwIBAgIQYs+uQqFLXpXxMCrHV5BsdDAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+WanQPkGpF6zPL4rPFIpVnDw3fKdXpFoZblMhN1pqxx6ruoJAmEFmaALO71dISWRj
+7N3OUWd5T8XlPi60oEZEbKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKZnO736
+L8VB5PifrMrgJH833jYrrObBU73yiBsbZbUbMAoGCCqGSM49BAMCA0gAMEUCIQCL
+0Lc/sUpBrcq/0rEWjXrBAorDpj8WrMBQZi1/qrTzpAIgKKn/uCytHL9hCqrnKt4K
+UM8+5v0o/PPzbdt5LhyzOhM=
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/keystore/bb4a5ae1894220bd1ad718e87b7079d027c8245fde54860586ae07563a24fe6e_sk b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/keystore/bb4a5ae1894220bd1ad718e87b7079d027c8245fde54860586ae07563a24fe6e_sk
new file mode 100755
index 0000000000..2039e4719b
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/keystore/bb4a5ae1894220bd1ad718e87b7079d027c8245fde54860586ae07563a24fe6e_sk
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgCAP8WrJp6Gmfwyad
+ZkM8QIX37yMFWzEHh9NGtvJ8PrKhRANCAATFGhn9/R1xkz68L8YURXTWbU79XrHY
+GBpJvXnjUwLBY+AnrgHNvw8zhnEcXehPGdsDrLoPmar/R5qs0r7ZDDrO
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/signcerts/User1@org2.example.com-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/signcerts/User1@org2.example.com-cert.pem
new file mode 100644
index 0000000000..3082e1eaf8
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/signcerts/User1@org2.example.com-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICLTCCAdSgAwIBAgIQVIQ1MAcagJKr+nkKORDdKDAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZVc2VyMUBvcmcyLmV4YW1wbGUuY29tMFkw
+EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAExRoZ/f0dcZM+vC/GFEV01m1O/V6x2Bga
+Sb1541MCwWPgJ64Bzb8PM4ZxHF3oTxnbA6y6D5mq/0earNK+2Qw6zqNiMGAwDgYD
+VR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAw
+KwYDVR0jBCQwIoAgpmc7vfovxUHk+J+syuAkfzfeNius5sFTvfKIGxtltRswCgYI
+KoZIzj0EAwIDRwAwRAIgOxLvwvo94PndLnZuquagK7ZAUkjV/KSlK56mLmIVoEUC
+IDeDdN0+fKZ6a7gDHQuOi3o+Xie2JUv0VRwLQ3nXzysB
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/ca.crt b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/ca.crt
new file mode 100644
index 0000000000..2e99b06b80
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/ca.crt
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICTTCCAfOgAwIBAgIQYs+uQqFLXpXxMCrHV5BsdDAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD
+ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
+WanQPkGpF6zPL4rPFIpVnDw3fKdXpFoZblMhN1pqxx6ruoJAmEFmaALO71dISWRj
+7N3OUWd5T8XlPi60oEZEbKNpMGcwDgYDVR0PAQH/BAQDAgGmMBkGA1UdJQQSMBAG
+BFUdJQAGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKZnO736
+L8VB5PifrMrgJH833jYrrObBU73yiBsbZbUbMAoGCCqGSM49BAMCA0gAMEUCIQCL
+0Lc/sUpBrcq/0rEWjXrBAorDpj8WrMBQZi1/qrTzpAIgKKn/uCytHL9hCqrnKt4K
+UM8+5v0o/PPzbdt5LhyzOhM=
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.crt b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.crt
new file mode 100644
index 0000000000..3082e1eaf8
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.crt
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICLTCCAdSgAwIBAgIQVIQ1MAcagJKr+nkKORDdKDAKBggqhkjOPQQDAjBzMQsw
+CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
+YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
+b3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MDExNDE3MjZaFw0yNzA1MzAxNDE3MjZa
+MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
+YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZVc2VyMUBvcmcyLmV4YW1wbGUuY29tMFkw
+EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAExRoZ/f0dcZM+vC/GFEV01m1O/V6x2Bga
+Sb1541MCwWPgJ64Bzb8PM4ZxHF3oTxnbA6y6D5mq/0earNK+2Qw6zqNiMGAwDgYD
+VR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAw
+KwYDVR0jBCQwIoAgpmc7vfovxUHk+J+syuAkfzfeNius5sFTvfKIGxtltRswCgYI
+KoZIzj0EAwIDRwAwRAIgOxLvwvo94PndLnZuquagK7ZAUkjV/KSlK56mLmIVoEUC
+IDeDdN0+fKZ6a7gDHQuOi3o+Xie2JUv0VRwLQ3nXzysB
+-----END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.key b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.key
new file mode 100644
index 0000000000..2039e4719b
--- /dev/null
+++ b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.key
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgCAP8WrJp6Gmfwyad
+ZkM8QIX37yMFWzEHh9NGtvJ8PrKhRANCAATFGhn9/R1xkz68L8YURXTWbU79XrHY
+GBpJvXnjUwLBY+AnrgHNvw8zhnEcXehPGdsDrLoPmar/R5qs0r7ZDDrO
+-----END PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/ca/d8a5b3cac1b821f6e4b487ceaf1fd239cdcfc310894150908b90f05e9179556a_sk b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/ca/d8a5b3cac1b821f6e4b487ceaf1fd239cdcfc310894150908b90f05e9179556a_sk
deleted file mode 100755
index f639deb77f..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/ca/d8a5b3cac1b821f6e4b487ceaf1fd239cdcfc310894150908b90f05e9179556a_sk
+++ /dev/null
@@ -1,5 +0,0 @@
------BEGIN ECDSA PRIVATE KEY-----
-MHcCAQEEIN8gOECqqqNMYdWZVhaQ8OAjuaZdbFqOHJ3zQyzPIl5DoAoGCCqGSM49
-AwEHoUQDQgAE140SbgwoL+7Mr6WTFcXmvhoanwZqX2/dD0QZcmw2TvMKcvUcPUbE
-OPD0VzmA0GC9fUJwWdBhXdVegk6Mw6xxjg==
------END ECDSA PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/ca/peerOrg1-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/ca/peerOrg1-cert.pem
deleted file mode 100644
index 2839d1779d..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/ca/peerOrg1-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICHTCCAcOgAwIBAgIQMnFCpjSdv8WBC9VnEvJ4JTAKBggqhkjOPQQDAjBgMQsw
-CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
-YW5jaXNjbzERMA8GA1UEChMIcGVlck9yZzExETAPBgNVBAMTCHBlZXJPcmcxMB4X
-DTE3MDMwMTE3MzY0MVoXDTI3MDIyNzE3MzY0MVowYDELMAkGA1UEBhMCVVMxEzAR
-BgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xETAPBgNV
-BAoTCHBlZXJPcmcxMREwDwYDVQQDEwhwZWVyT3JnMTBZMBMGByqGSM49AgEGCCqG
-SM49AwEHA0IABNeNEm4MKC/uzK+lkxXF5r4aGp8Gal9v3Q9EGXJsNk7zCnL1HD1G
-xDjw9Fc5gNBgvX1CcFnQYV3VXoJOjMOscY6jXzBdMA4GA1UdDwEB/wQEAwIBpjAP
-BgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEINils8rB
-uCH25LSHzq8f0jnNz8MQiUFQkIuQ8F6ReVVqMAoGCCqGSM49BAMCA0gAMEUCIQC0
-dL7pz5np3hoAaE41n/0c0Tjjs6zVk+zxysz3u9exKwIgBnhrJFK1rV13VUz+W8sp
-8lrz5ZETok8lPoisXwRIe/E=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/msp/admincerts/peerOrg1-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/msp/admincerts/peerOrg1-cert.pem
deleted file mode 100644
index 2839d1779d..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/msp/admincerts/peerOrg1-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICHTCCAcOgAwIBAgIQMnFCpjSdv8WBC9VnEvJ4JTAKBggqhkjOPQQDAjBgMQsw
-CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
-YW5jaXNjbzERMA8GA1UEChMIcGVlck9yZzExETAPBgNVBAMTCHBlZXJPcmcxMB4X
-DTE3MDMwMTE3MzY0MVoXDTI3MDIyNzE3MzY0MVowYDELMAkGA1UEBhMCVVMxEzAR
-BgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xETAPBgNV
-BAoTCHBlZXJPcmcxMREwDwYDVQQDEwhwZWVyT3JnMTBZMBMGByqGSM49AgEGCCqG
-SM49AwEHA0IABNeNEm4MKC/uzK+lkxXF5r4aGp8Gal9v3Q9EGXJsNk7zCnL1HD1G
-xDjw9Fc5gNBgvX1CcFnQYV3VXoJOjMOscY6jXzBdMA4GA1UdDwEB/wQEAwIBpjAP
-BgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEINils8rB
-uCH25LSHzq8f0jnNz8MQiUFQkIuQ8F6ReVVqMAoGCCqGSM49BAMCA0gAMEUCIQC0
-dL7pz5np3hoAaE41n/0c0Tjjs6zVk+zxysz3u9exKwIgBnhrJFK1rV13VUz+W8sp
-8lrz5ZETok8lPoisXwRIe/E=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/msp/cacerts/peerOrg0.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/msp/cacerts/peerOrg0.pem
deleted file mode 100644
index ac4f5af8d4..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/msp/cacerts/peerOrg0.pem
+++ /dev/null
@@ -1,10 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBbDCCARKgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y
-ZzAwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjATMREwDwYDVQQDDAhw
-ZWVyT3JnMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKJfDc/CcaiHRipTG2AB
-K5fA0LO9SOlbtC9bZcjLo/xsL157p+3QB3UVF3gt7nkwgMs/ul3FhSEFTk2EVNlF
-1QCjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFQzuQR1RZP/Qn/B
-NDtGSa8n4eN/MB8GA1UdIwQYMBaAFFQzuQR1RZP/Qn/BNDtGSa8n4eN/MAoGCCqG
-SM49BAMCA0gAMEUCIAuG+/Fy3x9JXAD1/rFsu3ZpCKbXiXZLGF7P6Gma8is5AiEA
-pSQpRcdukxe4zvcfRmNBjMbNLWCoWlHSQA2jD678QGE=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/msp/cacerts/peerOrg1-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/msp/cacerts/peerOrg1-cert.pem
deleted file mode 100644
index 2839d1779d..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/msp/cacerts/peerOrg1-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICHTCCAcOgAwIBAgIQMnFCpjSdv8WBC9VnEvJ4JTAKBggqhkjOPQQDAjBgMQsw
-CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
-YW5jaXNjbzERMA8GA1UEChMIcGVlck9yZzExETAPBgNVBAMTCHBlZXJPcmcxMB4X
-DTE3MDMwMTE3MzY0MVoXDTI3MDIyNzE3MzY0MVowYDELMAkGA1UEBhMCVVMxEzAR
-BgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xETAPBgNV
-BAoTCHBlZXJPcmcxMREwDwYDVQQDEwhwZWVyT3JnMTBZMBMGByqGSM49AgEGCCqG
-SM49AwEHA0IABNeNEm4MKC/uzK+lkxXF5r4aGp8Gal9v3Q9EGXJsNk7zCnL1HD1G
-xDjw9Fc5gNBgvX1CcFnQYV3VXoJOjMOscY6jXzBdMA4GA1UdDwEB/wQEAwIBpjAP
-BgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEINils8rB
-uCH25LSHzq8f0jnNz8MQiUFQkIuQ8F6ReVVqMAoGCCqGSM49BAMCA0gAMEUCIQC0
-dL7pz5np3hoAaE41n/0c0Tjjs6zVk+zxysz3u9exKwIgBnhrJFK1rV13VUz+W8sp
-8lrz5ZETok8lPoisXwRIe/E=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/msp/signcerts/peerOrg1-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/msp/signcerts/peerOrg1-cert.pem
deleted file mode 100644
index 2839d1779d..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/msp/signcerts/peerOrg1-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICHTCCAcOgAwIBAgIQMnFCpjSdv8WBC9VnEvJ4JTAKBggqhkjOPQQDAjBgMQsw
-CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
-YW5jaXNjbzERMA8GA1UEChMIcGVlck9yZzExETAPBgNVBAMTCHBlZXJPcmcxMB4X
-DTE3MDMwMTE3MzY0MVoXDTI3MDIyNzE3MzY0MVowYDELMAkGA1UEBhMCVVMxEzAR
-BgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xETAPBgNV
-BAoTCHBlZXJPcmcxMREwDwYDVQQDEwhwZWVyT3JnMTBZMBMGByqGSM49AgEGCCqG
-SM49AwEHA0IABNeNEm4MKC/uzK+lkxXF5r4aGp8Gal9v3Q9EGXJsNk7zCnL1HD1G
-xDjw9Fc5gNBgvX1CcFnQYV3VXoJOjMOscY6jXzBdMA4GA1UdDwEB/wQEAwIBpjAP
-BgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEINils8rB
-uCH25LSHzq8f0jnNz8MQiUFQkIuQ8F6ReVVqMAoGCCqGSM49BAMCA0gAMEUCIQC0
-dL7pz5np3hoAaE41n/0c0Tjjs6zVk+zxysz3u9exKwIgBnhrJFK1rV13VUz+W8sp
-8lrz5ZETok8lPoisXwRIe/E=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer1/admincerts/peerOrg1-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer1/admincerts/peerOrg1-cert.pem
deleted file mode 100644
index 2839d1779d..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer1/admincerts/peerOrg1-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICHTCCAcOgAwIBAgIQMnFCpjSdv8WBC9VnEvJ4JTAKBggqhkjOPQQDAjBgMQsw
-CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
-YW5jaXNjbzERMA8GA1UEChMIcGVlck9yZzExETAPBgNVBAMTCHBlZXJPcmcxMB4X
-DTE3MDMwMTE3MzY0MVoXDTI3MDIyNzE3MzY0MVowYDELMAkGA1UEBhMCVVMxEzAR
-BgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xETAPBgNV
-BAoTCHBlZXJPcmcxMREwDwYDVQQDEwhwZWVyT3JnMTBZMBMGByqGSM49AgEGCCqG
-SM49AwEHA0IABNeNEm4MKC/uzK+lkxXF5r4aGp8Gal9v3Q9EGXJsNk7zCnL1HD1G
-xDjw9Fc5gNBgvX1CcFnQYV3VXoJOjMOscY6jXzBdMA4GA1UdDwEB/wQEAwIBpjAP
-BgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEINils8rB
-uCH25LSHzq8f0jnNz8MQiUFQkIuQ8F6ReVVqMAoGCCqGSM49BAMCA0gAMEUCIQC0
-dL7pz5np3hoAaE41n/0c0Tjjs6zVk+zxysz3u9exKwIgBnhrJFK1rV13VUz+W8sp
-8lrz5ZETok8lPoisXwRIe/E=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer1/cacerts/peerOrg1-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer1/cacerts/peerOrg1-cert.pem
deleted file mode 100644
index 2839d1779d..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer1/cacerts/peerOrg1-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICHTCCAcOgAwIBAgIQMnFCpjSdv8WBC9VnEvJ4JTAKBggqhkjOPQQDAjBgMQsw
-CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
-YW5jaXNjbzERMA8GA1UEChMIcGVlck9yZzExETAPBgNVBAMTCHBlZXJPcmcxMB4X
-DTE3MDMwMTE3MzY0MVoXDTI3MDIyNzE3MzY0MVowYDELMAkGA1UEBhMCVVMxEzAR
-BgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xETAPBgNV
-BAoTCHBlZXJPcmcxMREwDwYDVQQDEwhwZWVyT3JnMTBZMBMGByqGSM49AgEGCCqG
-SM49AwEHA0IABNeNEm4MKC/uzK+lkxXF5r4aGp8Gal9v3Q9EGXJsNk7zCnL1HD1G
-xDjw9Fc5gNBgvX1CcFnQYV3VXoJOjMOscY6jXzBdMA4GA1UdDwEB/wQEAwIBpjAP
-BgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEINils8rB
-uCH25LSHzq8f0jnNz8MQiUFQkIuQ8F6ReVVqMAoGCCqGSM49BAMCA0gAMEUCIQC0
-dL7pz5np3hoAaE41n/0c0Tjjs6zVk+zxysz3u9exKwIgBnhrJFK1rV13VUz+W8sp
-8lrz5ZETok8lPoisXwRIe/E=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer1/keystore/5e67f35124df6a9124bf3659365b8476af4090f73c82c9b626efc15f12739d5d_sk b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer1/keystore/5e67f35124df6a9124bf3659365b8476af4090f73c82c9b626efc15f12739d5d_sk
deleted file mode 100755
index 35acf8c381..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer1/keystore/5e67f35124df6a9124bf3659365b8476af4090f73c82c9b626efc15f12739d5d_sk
+++ /dev/null
@@ -1,5 +0,0 @@
------BEGIN ECDSA PRIVATE KEY-----
-MHcCAQEEICKPEUyZLQFfJwgXQ9dDNnsLdYDSBSUAAGzc//SuMkyzoAoGCCqGSM49
-AwEHoUQDQgAEtITvAvKYfj4hZGIpHVQCv8wndnJMW+puW0zqueFbVke8G3T7rvXY
-yAk2kTk1Jn3qABxetKJf2f6Xp0fxunIaig==
------END ECDSA PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer1/signcerts/peerOrg1Peer1-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer1/signcerts/peerOrg1Peer1-cert.pem
deleted file mode 100644
index b0e6547a1f..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer1/signcerts/peerOrg1Peer1-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICEjCCAbigAwIBAgIQPjb63mDL4e062MPjtcA1CDAKBggqhkjOPQQDAjBgMQsw
-CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
-YW5jaXNjbzERMA8GA1UEChMIcGVlck9yZzExETAPBgNVBAMTCHBlZXJPcmcxMB4X
-DTE3MDMwMTE3MzY0MVoXDTI3MDIyNzE3MzY0MVowUjELMAkGA1UEBhMCVVMxEzAR
-BgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xFjAUBgNV
-BAMTDXBlZXJPcmcxUGVlcjEwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS0hO8C
-8ph+PiFkYikdVAK/zCd2ckxb6m5bTOq54VtWR7wbdPuu9djICTaROTUmfeoAHF60
-ol/Z/penR/G6chqKo2IwYDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYB
-BQUHAwEwDAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCDYpbPKwbgh9uS0h86vH9I5
-zc/DEIlBUJCLkPBekXlVajAKBggqhkjOPQQDAgNIADBFAiEAmGS3LTaqCkWV+myl
-lhg9ovtLJABuxQLnajMJYQOXURgCIHLVNrDbEF0KpEmFwXIBYMFdsKGRAF0kC43M
-bpq87UJq
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer2/admincerts/peerOrg1-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer2/admincerts/peerOrg1-cert.pem
deleted file mode 100644
index 2839d1779d..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer2/admincerts/peerOrg1-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICHTCCAcOgAwIBAgIQMnFCpjSdv8WBC9VnEvJ4JTAKBggqhkjOPQQDAjBgMQsw
-CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
-YW5jaXNjbzERMA8GA1UEChMIcGVlck9yZzExETAPBgNVBAMTCHBlZXJPcmcxMB4X
-DTE3MDMwMTE3MzY0MVoXDTI3MDIyNzE3MzY0MVowYDELMAkGA1UEBhMCVVMxEzAR
-BgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xETAPBgNV
-BAoTCHBlZXJPcmcxMREwDwYDVQQDEwhwZWVyT3JnMTBZMBMGByqGSM49AgEGCCqG
-SM49AwEHA0IABNeNEm4MKC/uzK+lkxXF5r4aGp8Gal9v3Q9EGXJsNk7zCnL1HD1G
-xDjw9Fc5gNBgvX1CcFnQYV3VXoJOjMOscY6jXzBdMA4GA1UdDwEB/wQEAwIBpjAP
-BgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEINils8rB
-uCH25LSHzq8f0jnNz8MQiUFQkIuQ8F6ReVVqMAoGCCqGSM49BAMCA0gAMEUCIQC0
-dL7pz5np3hoAaE41n/0c0Tjjs6zVk+zxysz3u9exKwIgBnhrJFK1rV13VUz+W8sp
-8lrz5ZETok8lPoisXwRIe/E=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer2/cacerts/peerOrg1-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer2/cacerts/peerOrg1-cert.pem
deleted file mode 100644
index 2839d1779d..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer2/cacerts/peerOrg1-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICHTCCAcOgAwIBAgIQMnFCpjSdv8WBC9VnEvJ4JTAKBggqhkjOPQQDAjBgMQsw
-CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
-YW5jaXNjbzERMA8GA1UEChMIcGVlck9yZzExETAPBgNVBAMTCHBlZXJPcmcxMB4X
-DTE3MDMwMTE3MzY0MVoXDTI3MDIyNzE3MzY0MVowYDELMAkGA1UEBhMCVVMxEzAR
-BgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xETAPBgNV
-BAoTCHBlZXJPcmcxMREwDwYDVQQDEwhwZWVyT3JnMTBZMBMGByqGSM49AgEGCCqG
-SM49AwEHA0IABNeNEm4MKC/uzK+lkxXF5r4aGp8Gal9v3Q9EGXJsNk7zCnL1HD1G
-xDjw9Fc5gNBgvX1CcFnQYV3VXoJOjMOscY6jXzBdMA4GA1UdDwEB/wQEAwIBpjAP
-BgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEINils8rB
-uCH25LSHzq8f0jnNz8MQiUFQkIuQ8F6ReVVqMAoGCCqGSM49BAMCA0gAMEUCIQC0
-dL7pz5np3hoAaE41n/0c0Tjjs6zVk+zxysz3u9exKwIgBnhrJFK1rV13VUz+W8sp
-8lrz5ZETok8lPoisXwRIe/E=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer2/keystore/707c2b3c02ddd36a6c4a17771769b54a3dc9066e05be1e76582cabd65c110e4e_sk b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer2/keystore/707c2b3c02ddd36a6c4a17771769b54a3dc9066e05be1e76582cabd65c110e4e_sk
deleted file mode 100755
index 6659ac490c..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer2/keystore/707c2b3c02ddd36a6c4a17771769b54a3dc9066e05be1e76582cabd65c110e4e_sk
+++ /dev/null
@@ -1,5 +0,0 @@
------BEGIN ECDSA PRIVATE KEY-----
-MHcCAQEEII0oxsh+lV49AVCyYfqXr3QfvQ19rJl7VN/8g6nLCiCroAoGCCqGSM49
-AwEHoUQDQgAEZibYpTur7h/LIkZkV1yr11mP0M4Hts+ARrky3r97WihvF0+TgxUI
-UrFjEe4Yv+SIlz5+IE6BlNemaF67nUeD+Q==
------END ECDSA PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer2/signcerts/peerOrg1Peer2-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer2/signcerts/peerOrg1Peer2-cert.pem
deleted file mode 100644
index 38bb34ca1a..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer2/signcerts/peerOrg1Peer2-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICEjCCAbmgAwIBAgIRANgd5gwHKxNyqxptv40oPEkwCgYIKoZIzj0EAwIwYDEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
-cmFuY2lzY28xETAPBgNVBAoTCHBlZXJPcmcxMREwDwYDVQQDEwhwZWVyT3JnMTAe
-Fw0xNzAzMDExNzM2NDFaFw0yNzAyMjcxNzM2NDFaMFIxCzAJBgNVBAYTAlVTMRMw
-EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRYwFAYD
-VQQDEw1wZWVyT3JnMVBlZXIyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZibY
-pTur7h/LIkZkV1yr11mP0M4Hts+ARrky3r97WihvF0+TgxUIUrFjEe4Yv+SIlz5+
-IE6BlNemaF67nUeD+aNiMGAwDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsG
-AQUFBwMBMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAg2KWzysG4IfbktIfOrx/S
-Oc3PwxCJQVCQi5DwXpF5VWowCgYIKoZIzj0EAwIDRwAwRAIgJ6zmGTYWeAjaa8zV
-I73t3Zop/mF790NwkH2SSlt4SAMCIG9yeH7K8YdD8Ao3kBiARyjI+QpiWqi1K8qS
-b6EWptg2
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/ca/96bdb57f4efbdcf201a269899eb47e2a73fbb728ae14d47d0d5afb75ddea71de_sk b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/ca/96bdb57f4efbdcf201a269899eb47e2a73fbb728ae14d47d0d5afb75ddea71de_sk
deleted file mode 100755
index 41e8a47151..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/ca/96bdb57f4efbdcf201a269899eb47e2a73fbb728ae14d47d0d5afb75ddea71de_sk
+++ /dev/null
@@ -1,5 +0,0 @@
------BEGIN ECDSA PRIVATE KEY-----
-MHcCAQEEIBxAH3LK1l03gaOwzNhPWfxBVZDQvWknmViEyTXSwFMqoAoGCCqGSM49
-AwEHoUQDQgAEK5qTfIT6ai4QxQZcgRjjwNYbT7HK59PdUBKqbt/wT4VR2dCvIC2a
-bxf5A7CtuLgKKL8xMsseh/0WD5dSiIBB1g==
------END ECDSA PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/ca/peerOrg2-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/ca/peerOrg2-cert.pem
deleted file mode 100644
index 3176359102..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/ca/peerOrg2-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICHTCCAcSgAwIBAgIRALakYEdO1ZkArcOQHj85ay8wCgYIKoZIzj0EAwIwYDEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
-cmFuY2lzY28xETAPBgNVBAoTCHBlZXJPcmcyMREwDwYDVQQDEwhwZWVyT3JnMjAe
-Fw0xNzAzMDExNzM2NDFaFw0yNzAyMjcxNzM2NDFaMGAxCzAJBgNVBAYTAlVTMRMw
-EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMREwDwYD
-VQQKEwhwZWVyT3JnMjERMA8GA1UEAxMIcGVlck9yZzIwWTATBgcqhkjOPQIBBggq
-hkjOPQMBBwNCAAQrmpN8hPpqLhDFBlyBGOPA1htPscrn091QEqpu3/BPhVHZ0K8g
-LZpvF/kDsK24uAoovzEyyx6H/RYPl1KIgEHWo18wXTAOBgNVHQ8BAf8EBAMCAaYw
-DwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCCWvbV/
-Tvvc8gGiaYmetH4qc/u3KK4U1H0NWvt13epx3jAKBggqhkjOPQQDAgNHADBEAiAe
-1/wXZht2Gg6KVxf5lPdAOeoBWZzG0/TQN1KxTH7/QwIgMdJoWxbq2EzihNJlA/U0
-3+aFesZjYUGvuvOA0ijYFgA=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/msp/admincerts/peerOrg2-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/msp/admincerts/peerOrg2-cert.pem
deleted file mode 100644
index 3176359102..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/msp/admincerts/peerOrg2-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICHTCCAcSgAwIBAgIRALakYEdO1ZkArcOQHj85ay8wCgYIKoZIzj0EAwIwYDEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
-cmFuY2lzY28xETAPBgNVBAoTCHBlZXJPcmcyMREwDwYDVQQDEwhwZWVyT3JnMjAe
-Fw0xNzAzMDExNzM2NDFaFw0yNzAyMjcxNzM2NDFaMGAxCzAJBgNVBAYTAlVTMRMw
-EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMREwDwYD
-VQQKEwhwZWVyT3JnMjERMA8GA1UEAxMIcGVlck9yZzIwWTATBgcqhkjOPQIBBggq
-hkjOPQMBBwNCAAQrmpN8hPpqLhDFBlyBGOPA1htPscrn091QEqpu3/BPhVHZ0K8g
-LZpvF/kDsK24uAoovzEyyx6H/RYPl1KIgEHWo18wXTAOBgNVHQ8BAf8EBAMCAaYw
-DwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCCWvbV/
-Tvvc8gGiaYmetH4qc/u3KK4U1H0NWvt13epx3jAKBggqhkjOPQQDAgNHADBEAiAe
-1/wXZht2Gg6KVxf5lPdAOeoBWZzG0/TQN1KxTH7/QwIgMdJoWxbq2EzihNJlA/U0
-3+aFesZjYUGvuvOA0ijYFgA=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/msp/cacerts/peerOrg1.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/msp/cacerts/peerOrg1.pem
deleted file mode 100644
index d02884fa17..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/msp/cacerts/peerOrg1.pem
+++ /dev/null
@@ -1,10 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBbDCCARKgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y
-ZzEwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjATMREwDwYDVQQDDAhw
-ZWVyT3JnMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJ2S+UvyFgFZYL6qcrKo
-zy72Nkc/RQVzg1VfwC3X7QcnHEVBuCzba1nxdDVE8XPnhmKBWLKh0adn6GKUZpyf
-mbKjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAQlMVsXlKGMEWPf
-KMMM6QVASnlPMB8GA1UdIwQYMBaAFAQlMVsXlKGMEWPfKMMM6QVASnlPMAoGCCqG
-SM49BAMCA0gAMEUCIHr4AD6Xx3R6zFCsveIMnWao9Us88/0uGHoT4ELmMhA1AiEA
-yzfXU5qHp3xBJ1BrKOGi71UmQZVwWfO26INhxcfpCAg=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/msp/cacerts/peerOrg2-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/msp/cacerts/peerOrg2-cert.pem
deleted file mode 100644
index 3176359102..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/msp/cacerts/peerOrg2-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICHTCCAcSgAwIBAgIRALakYEdO1ZkArcOQHj85ay8wCgYIKoZIzj0EAwIwYDEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
-cmFuY2lzY28xETAPBgNVBAoTCHBlZXJPcmcyMREwDwYDVQQDEwhwZWVyT3JnMjAe
-Fw0xNzAzMDExNzM2NDFaFw0yNzAyMjcxNzM2NDFaMGAxCzAJBgNVBAYTAlVTMRMw
-EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMREwDwYD
-VQQKEwhwZWVyT3JnMjERMA8GA1UEAxMIcGVlck9yZzIwWTATBgcqhkjOPQIBBggq
-hkjOPQMBBwNCAAQrmpN8hPpqLhDFBlyBGOPA1htPscrn091QEqpu3/BPhVHZ0K8g
-LZpvF/kDsK24uAoovzEyyx6H/RYPl1KIgEHWo18wXTAOBgNVHQ8BAf8EBAMCAaYw
-DwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCCWvbV/
-Tvvc8gGiaYmetH4qc/u3KK4U1H0NWvt13epx3jAKBggqhkjOPQQDAgNHADBEAiAe
-1/wXZht2Gg6KVxf5lPdAOeoBWZzG0/TQN1KxTH7/QwIgMdJoWxbq2EzihNJlA/U0
-3+aFesZjYUGvuvOA0ijYFgA=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/msp/signcerts/peerOrg2-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/msp/signcerts/peerOrg2-cert.pem
deleted file mode 100644
index 3176359102..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/msp/signcerts/peerOrg2-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICHTCCAcSgAwIBAgIRALakYEdO1ZkArcOQHj85ay8wCgYIKoZIzj0EAwIwYDEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
-cmFuY2lzY28xETAPBgNVBAoTCHBlZXJPcmcyMREwDwYDVQQDEwhwZWVyT3JnMjAe
-Fw0xNzAzMDExNzM2NDFaFw0yNzAyMjcxNzM2NDFaMGAxCzAJBgNVBAYTAlVTMRMw
-EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMREwDwYD
-VQQKEwhwZWVyT3JnMjERMA8GA1UEAxMIcGVlck9yZzIwWTATBgcqhkjOPQIBBggq
-hkjOPQMBBwNCAAQrmpN8hPpqLhDFBlyBGOPA1htPscrn091QEqpu3/BPhVHZ0K8g
-LZpvF/kDsK24uAoovzEyyx6H/RYPl1KIgEHWo18wXTAOBgNVHQ8BAf8EBAMCAaYw
-DwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCCWvbV/
-Tvvc8gGiaYmetH4qc/u3KK4U1H0NWvt13epx3jAKBggqhkjOPQQDAgNHADBEAiAe
-1/wXZht2Gg6KVxf5lPdAOeoBWZzG0/TQN1KxTH7/QwIgMdJoWxbq2EzihNJlA/U0
-3+aFesZjYUGvuvOA0ijYFgA=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer1/admincerts/peerOrg2-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer1/admincerts/peerOrg2-cert.pem
deleted file mode 100644
index 3176359102..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer1/admincerts/peerOrg2-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICHTCCAcSgAwIBAgIRALakYEdO1ZkArcOQHj85ay8wCgYIKoZIzj0EAwIwYDEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
-cmFuY2lzY28xETAPBgNVBAoTCHBlZXJPcmcyMREwDwYDVQQDEwhwZWVyT3JnMjAe
-Fw0xNzAzMDExNzM2NDFaFw0yNzAyMjcxNzM2NDFaMGAxCzAJBgNVBAYTAlVTMRMw
-EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMREwDwYD
-VQQKEwhwZWVyT3JnMjERMA8GA1UEAxMIcGVlck9yZzIwWTATBgcqhkjOPQIBBggq
-hkjOPQMBBwNCAAQrmpN8hPpqLhDFBlyBGOPA1htPscrn091QEqpu3/BPhVHZ0K8g
-LZpvF/kDsK24uAoovzEyyx6H/RYPl1KIgEHWo18wXTAOBgNVHQ8BAf8EBAMCAaYw
-DwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCCWvbV/
-Tvvc8gGiaYmetH4qc/u3KK4U1H0NWvt13epx3jAKBggqhkjOPQQDAgNHADBEAiAe
-1/wXZht2Gg6KVxf5lPdAOeoBWZzG0/TQN1KxTH7/QwIgMdJoWxbq2EzihNJlA/U0
-3+aFesZjYUGvuvOA0ijYFgA=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer1/cacerts/peerOrg2-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer1/cacerts/peerOrg2-cert.pem
deleted file mode 100644
index 3176359102..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer1/cacerts/peerOrg2-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICHTCCAcSgAwIBAgIRALakYEdO1ZkArcOQHj85ay8wCgYIKoZIzj0EAwIwYDEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
-cmFuY2lzY28xETAPBgNVBAoTCHBlZXJPcmcyMREwDwYDVQQDEwhwZWVyT3JnMjAe
-Fw0xNzAzMDExNzM2NDFaFw0yNzAyMjcxNzM2NDFaMGAxCzAJBgNVBAYTAlVTMRMw
-EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMREwDwYD
-VQQKEwhwZWVyT3JnMjERMA8GA1UEAxMIcGVlck9yZzIwWTATBgcqhkjOPQIBBggq
-hkjOPQMBBwNCAAQrmpN8hPpqLhDFBlyBGOPA1htPscrn091QEqpu3/BPhVHZ0K8g
-LZpvF/kDsK24uAoovzEyyx6H/RYPl1KIgEHWo18wXTAOBgNVHQ8BAf8EBAMCAaYw
-DwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCCWvbV/
-Tvvc8gGiaYmetH4qc/u3KK4U1H0NWvt13epx3jAKBggqhkjOPQQDAgNHADBEAiAe
-1/wXZht2Gg6KVxf5lPdAOeoBWZzG0/TQN1KxTH7/QwIgMdJoWxbq2EzihNJlA/U0
-3+aFesZjYUGvuvOA0ijYFgA=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer1/keystore/26d8ff264dd3956922ff23e2fa2bca59817df114630f95adce343388f9fffe7a_sk b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer1/keystore/26d8ff264dd3956922ff23e2fa2bca59817df114630f95adce343388f9fffe7a_sk
deleted file mode 100755
index a0ec34567f..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer1/keystore/26d8ff264dd3956922ff23e2fa2bca59817df114630f95adce343388f9fffe7a_sk
+++ /dev/null
@@ -1,5 +0,0 @@
------BEGIN ECDSA PRIVATE KEY-----
-MHcCAQEEII4qcK71QQn3MUVdx84AsHaFOZJ2Coyz5uaFhBjPQWkioAoGCCqGSM49
-AwEHoUQDQgAE4uF+T15H10YdHK8ZDAP9T6zJuPHPqBCwZAXfU3dkR06uW+JEn1f2
-8VWYRgtcf8oYnXcgYCTcWwdzckChOyBkZw==
------END ECDSA PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer1/signcerts/peerOrg2Peer1-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer1/signcerts/peerOrg2Peer1-cert.pem
deleted file mode 100644
index e911043bc8..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer1/signcerts/peerOrg2Peer1-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICEjCCAbmgAwIBAgIRANUoapuJGF/Om0hyk45bQiQwCgYIKoZIzj0EAwIwYDEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
-cmFuY2lzY28xETAPBgNVBAoTCHBlZXJPcmcyMREwDwYDVQQDEwhwZWVyT3JnMjAe
-Fw0xNzAzMDExNzM2NDFaFw0yNzAyMjcxNzM2NDFaMFIxCzAJBgNVBAYTAlVTMRMw
-EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRYwFAYD
-VQQDEw1wZWVyT3JnMlBlZXIxMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE4uF+
-T15H10YdHK8ZDAP9T6zJuPHPqBCwZAXfU3dkR06uW+JEn1f28VWYRgtcf8oYnXcg
-YCTcWwdzckChOyBkZ6NiMGAwDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsG
-AQUFBwMBMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAglr21f0773PIBommJnrR+
-KnP7tyiuFNR9DVr7dd3qcd4wCgYIKoZIzj0EAwIDRwAwRAIgA0mw/fZ5YBX73LFO
-RjKXfWVXfXdEoq8mgWa6ir11QloCIB9mpenM34EsuH9AZR83cIMZZC2HiQbfFNAa
-5zKksj3o
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer2/admincerts/peerOrg2-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer2/admincerts/peerOrg2-cert.pem
deleted file mode 100644
index 3176359102..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer2/admincerts/peerOrg2-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICHTCCAcSgAwIBAgIRALakYEdO1ZkArcOQHj85ay8wCgYIKoZIzj0EAwIwYDEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
-cmFuY2lzY28xETAPBgNVBAoTCHBlZXJPcmcyMREwDwYDVQQDEwhwZWVyT3JnMjAe
-Fw0xNzAzMDExNzM2NDFaFw0yNzAyMjcxNzM2NDFaMGAxCzAJBgNVBAYTAlVTMRMw
-EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMREwDwYD
-VQQKEwhwZWVyT3JnMjERMA8GA1UEAxMIcGVlck9yZzIwWTATBgcqhkjOPQIBBggq
-hkjOPQMBBwNCAAQrmpN8hPpqLhDFBlyBGOPA1htPscrn091QEqpu3/BPhVHZ0K8g
-LZpvF/kDsK24uAoovzEyyx6H/RYPl1KIgEHWo18wXTAOBgNVHQ8BAf8EBAMCAaYw
-DwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCCWvbV/
-Tvvc8gGiaYmetH4qc/u3KK4U1H0NWvt13epx3jAKBggqhkjOPQQDAgNHADBEAiAe
-1/wXZht2Gg6KVxf5lPdAOeoBWZzG0/TQN1KxTH7/QwIgMdJoWxbq2EzihNJlA/U0
-3+aFesZjYUGvuvOA0ijYFgA=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer2/cacerts/peerOrg2-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer2/cacerts/peerOrg2-cert.pem
deleted file mode 100644
index 3176359102..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer2/cacerts/peerOrg2-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICHTCCAcSgAwIBAgIRALakYEdO1ZkArcOQHj85ay8wCgYIKoZIzj0EAwIwYDEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
-cmFuY2lzY28xETAPBgNVBAoTCHBlZXJPcmcyMREwDwYDVQQDEwhwZWVyT3JnMjAe
-Fw0xNzAzMDExNzM2NDFaFw0yNzAyMjcxNzM2NDFaMGAxCzAJBgNVBAYTAlVTMRMw
-EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMREwDwYD
-VQQKEwhwZWVyT3JnMjERMA8GA1UEAxMIcGVlck9yZzIwWTATBgcqhkjOPQIBBggq
-hkjOPQMBBwNCAAQrmpN8hPpqLhDFBlyBGOPA1htPscrn091QEqpu3/BPhVHZ0K8g
-LZpvF/kDsK24uAoovzEyyx6H/RYPl1KIgEHWo18wXTAOBgNVHQ8BAf8EBAMCAaYw
-DwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCCWvbV/
-Tvvc8gGiaYmetH4qc/u3KK4U1H0NWvt13epx3jAKBggqhkjOPQQDAgNHADBEAiAe
-1/wXZht2Gg6KVxf5lPdAOeoBWZzG0/TQN1KxTH7/QwIgMdJoWxbq2EzihNJlA/U0
-3+aFesZjYUGvuvOA0ijYFgA=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer2/keystore/cc80356f4275390b2090bf0a62b26d3c5e9420c022d196267990eed7014bfcec_sk b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer2/keystore/cc80356f4275390b2090bf0a62b26d3c5e9420c022d196267990eed7014bfcec_sk
deleted file mode 100755
index 353c899448..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer2/keystore/cc80356f4275390b2090bf0a62b26d3c5e9420c022d196267990eed7014bfcec_sk
+++ /dev/null
@@ -1,5 +0,0 @@
------BEGIN ECDSA PRIVATE KEY-----
-MHcCAQEEILzFjZgOVuJ4nMdNxJqiLQr3RVEUwykkx4m7xb+AnLKsoAoGCCqGSM49
-AwEHoUQDQgAEW+vZBJb2GMwSQt76Sreg1lUClTUaJKgJoEI73PsPktRixgQxnAtG
-L3eB2o7Hzt3AEu2BGEjkR7H085aeAVlT0A==
------END ECDSA PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer2/signcerts/peerOrg2Peer2-cert.pem b/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer2/signcerts/peerOrg2Peer2-cert.pem
deleted file mode 100644
index 35075e5838..0000000000
--- a/examples/balance-transfer/artifacts/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer2/signcerts/peerOrg2Peer2-cert.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICETCCAbigAwIBAgIQShO6B/mOsuBkRKow0G8U8TAKBggqhkjOPQQDAjBgMQsw
-CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
-YW5jaXNjbzERMA8GA1UEChMIcGVlck9yZzIxETAPBgNVBAMTCHBlZXJPcmcyMB4X
-DTE3MDMwMTE3MzY0MVoXDTI3MDIyNzE3MzY0MVowUjELMAkGA1UEBhMCVVMxEzAR
-BgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xFjAUBgNV
-BAMTDXBlZXJPcmcyUGVlcjIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARb69kE
-lvYYzBJC3vpKt6DWVQKVNRokqAmgQjvc+w+S1GLGBDGcC0Yvd4HajsfO3cAS7YEY
-SORHsfTzlp4BWVPQo2IwYDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYB
-BQUHAwEwDAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCCWvbV/Tvvc8gGiaYmetH4q
-c/u3KK4U1H0NWvt13epx3jAKBggqhkjOPQQDAgNHADBEAiB6z75qAEH6/RMAJ8zi
-BptJ22zK+l7zPUkzI43jhEU8JAIgUJRBA9/IEkpMPCCmrFlBKaaOKk3LxUovAO01
-yuHGA5I=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/docker-compose.yaml b/examples/balance-transfer/artifacts/docker-compose.yaml
index 4e2545ac19..b76fe270e5 100644
--- a/examples/balance-transfer/artifacts/docker-compose.yaml
+++ b/examples/balance-transfer/artifacts/docker-compose.yaml
@@ -2,205 +2,127 @@ version: '2'
services:
- ccenv:
- image: hyperledger/fabric-ccenv:x86_64-1.0.0-alpha
- container_name: ccenv
-
- ca0:
- image: hyperledger/fabric-ca:x86_64-1.0.0-alpha
+ ca.org1.example.com:
+ image: hyperledger/fabric-ca
environment:
- FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
+ - FABRIC_CA_SERVER_CA_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem
+ - FABRIC_CA_SERVER_CA_KEYFILE=/etc/hyperledger/fabric-ca-server-config/b0a5a73ebed2d6e2dbf1d52421bb61432e45a7bf358f12a2b1c983e84134fa43_sk
+ - FABRIC_CA_SERVER_TLS_ENABLED=true
+ - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem
+ - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/b0a5a73ebed2d6e2dbf1d52421bb61432e45a7bf358f12a2b1c983e84134fa43_sk
ports:
- "7054:7054"
- command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/peerOrg1-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/d8a5b3cac1b821f6e4b487ceaf1fd239cdcfc310894150908b90f05e9179556a_sk -b admin:adminpw' -d
+ command: sh -c 'fabric-ca-server start -b admin:adminpw -d'
volumes:
- - ./crypto-config/peerOrganizations/peerOrg1/ca/:/etc/hyperledger/fabric-ca-server-config
+ - ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config
container_name: ca_peerOrg1
- ca1:
- image: hyperledger/fabric-ca:x86_64-1.0.0-alpha
+ ca.org2.example.com:
+ image: hyperledger/fabric-ca
environment:
- FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
+ - FABRIC_CA_SERVER_CA_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem
+ - FABRIC_CA_SERVER_CA_KEYFILE=/etc/hyperledger/fabric-ca-server-config/a6673bbdfa2fc541e4f89faccae0247f37de362bace6c153bdf2881b1b65b51b_sk
+ - FABRIC_CA_SERVER_TLS_ENABLED=true
+ - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem
+ - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/a6673bbdfa2fc541e4f89faccae0247f37de362bace6c153bdf2881b1b65b51b_sk
ports:
- "8054:7054"
- command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/peerOrg2-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/96bdb57f4efbdcf201a269899eb47e2a73fbb728ae14d47d0d5afb75ddea71de_sk -b admin:adminpw' -d
+ command: sh -c 'fabric-ca-server start -b admin:adminpw -d'
volumes:
- - ./crypto-config/peerOrganizations/peerOrg2/ca/:/etc/hyperledger/fabric-ca-server-config
+ - ./crypto-config/peerOrganizations/org2.example.com/ca/:/etc/hyperledger/fabric-ca-server-config
container_name: ca_peerOrg2
- zookeeper:
- image: hyperledger/fabric-zookeeper:x86_64-1.0.0-alpha
-
- kafka:
- image: hyperledger/fabric-kafka:x86_64-1.0.0-alpha
+ orderer.example.com:
+ container_name: orderer.example.com
+ image: hyperledger/fabric-orderer
environment:
- KAFKA_BROKER_ID: 0
- KAFKA_MESSAGE_MAX_BYTES: 103809024
- KAFKA_REPLICA_FETCH_MAX_BYTES: 103809024
- KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE: "false"
- KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
-
- orderer0:
- container_name: orderer0
- image: hyperledger/fabric-orderer:x86_64-1.0.0-alpha
- environment:
- - GRPC_TRACE=all
- - GRPC_VERBOSITY=debug
- ORDERER_GENERAL_LOGLEVEL=debug
- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
- ORDERER_GENERAL_GENESISMETHOD=file
- - ORDERER_GENERAL_GENESISFILE=/etc/hyperledger/configtx/twoorgs.orderer.block
+ - ORDERER_GENERAL_GENESISFILE=/etc/hyperledger/configtx/genesis.block
- ORDERER_GENERAL_LOCALMSPID=OrdererMSP
- - ORDERER_GENERAL_LOCALMSPDIR=/etc/hyperledger/msp/orderer
+ - ORDERER_GENERAL_LOCALMSPDIR=/etc/hyperledger/crypto/orderer/msp
- ORDERER_GENERAL_TLS_ENABLED=true
- - ORDERER_GENERAL_TLS_PRIVATEKEY=/etc/hyperledger/tls/orderer/key.pem
- - ORDERER_GENERAL_TLS_CERTIFICATE=/etc/hyperledger/tls/orderer/cert.pem
- - ORDERER_GENERAL_TLS_ROOTCAS=[/etc/hyperledger/tls/orderer/ca-cert.pem, /etc/hyperledger/tls/peers/peer0/ca-cert.pem, /etc/hyperledger/tls/peers/peer2/ca-cert.pem]
- working_dir: /opt/gopath/src/github.com/hyperledger/fabric/orderer
+ - ORDERER_GENERAL_TLS_PRIVATEKEY=/etc/hyperledger/crypto/orderer/tls/server.key
+ - ORDERER_GENERAL_TLS_CERTIFICATE=/etc/hyperledger/crypto/orderer/tls/server.crt
+ - ORDERER_GENERAL_TLS_ROOTCAS=[/etc/hyperledger/crypto/orderer/tls/ca.crt, /etc/hyperledger/crypto/peerOrg1/tls/ca.crt, /etc/hyperledger/crypto/peerOrg2/tls/ca.crt]
+ working_dir: /opt/gopath/src/github.com/hyperledger/fabric/orderers
command: orderer
ports:
- 7050:7050
volumes:
- ./channel:/etc/hyperledger/configtx
- - ./crypto-config/ordererOrganizations/ordererOrg1/orderers/ordererOrg1orderer1/:/etc/hyperledger/msp/orderer
- - ./tls/orderer:/etc/hyperledger/tls/orderer
- - ./tls/peers:/etc/hyperledger/tls/peers
+ - ./crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/:/etc/hyperledger/crypto/orderer
+ - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/:/etc/hyperledger/crypto/peerOrg1
+ - ./crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/:/etc/hyperledger/crypto/peerOrg2
- peer0:
- container_name: peer0
- image: hyperledger/fabric-peer:x86_64-1.0.0-alpha
+ peer0.org1.example.com:
+ container_name: peer0.org1.example.com
+ extends:
+ file: base.yaml
+ service: peer-base
environment:
- - CORE_LOGGING_LEVEL=DEBUG
- - CORE_NEXT=true
- - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- - CORE_PEER_ID=peer0
- - CORE_PEER_ENDORSER_ENABLED=true
+ - CORE_PEER_ID=peer0.org1.example.com
- CORE_PEER_LOCALMSPID=Org1MSP
- - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/peer/
- - CORE_PEER_GOSSIP_USELEADERELECTION=true
- - CORE_PEER_GOSSIP_ORGLEADER=false
- - CORE_PEER_ADDRESS=peer0:7051
- - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0:7051
- - CORE_PEER_TLS_ENABLED=true
- - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/tls/key.pem
- - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/tls/cert.pem
- - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/tls/ca-cert.pem
- # the following setting starts chaincode containers on the same
- # bridge network as the peers
- # https://docs.docker.com/compose/networking/
- - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=artifacts_default
- working_dir: /opt/gopath/src/github.com/hyperledger/fabric
- command: peer node start --peer-defaultchain=false
+ - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
ports:
- 7051:7051
- 7053:7053
volumes:
- - /var/run/:/host/var/run/
- - ./crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer1/:/etc/hyperledger/msp/peer
- - ./tls/peers/peer0:/etc/hyperledger/tls
+ - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/:/etc/hyperledger/crypto/peer
depends_on:
- - orderer0
+ - orderer.example.com
- peer1:
- container_name: peer1
- image: hyperledger/fabric-peer:x86_64-1.0.0-alpha
+ peer1.org1.example.com:
+ container_name: peer1.org1.example.com
+ extends:
+ file: base.yaml
+ service: peer-base
environment:
- - CORE_NEXT=true
- - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- - CORE_PEER_ID=peer1
- - CORE_PEER_ENDORSER_ENABLED=true
+ - CORE_PEER_ID=peer1.org1.example.com
- CORE_PEER_LOCALMSPID=Org1MSP
- - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/peer/
- - CORE_PEER_GOSSIP_USELEADERELECTION=true
- - CORE_PEER_GOSSIP_ORGLEADER=false
- - CORE_PEER_ADDRESS=peer1:7051
- - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1:7051
- - CORE_PEER_TLS_ENABLED=true
- - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/tls/key.pem
- - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/tls/cert.pem
- - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/tls/ca-cert.pem
- # the following setting starts chaincode containers on the same
- # bridge network as the peers
- # https://docs.docker.com/compose/networking/
- - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=artifacts_default
- working_dir: /opt/gopath/src/github.com/hyperledger/fabric
- command: peer node start --peer-defaultchain=false
+ - CORE_PEER_ADDRESS=peer1.org1.example.com:7051
ports:
- 7056:7051
- 7058:7053
volumes:
- - /var/run/:/host/var/run/
- - ./crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer2/:/etc/hyperledger/msp/peer
- - ./tls/peers/peer1:/etc/hyperledger/tls
+ - ./crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/:/etc/hyperledger/crypto/peer
depends_on:
- - orderer0
- - peer0
+ - orderer.example.com
- peer2:
- container_name: peer2
- image: hyperledger/fabric-peer:x86_64-1.0.0-alpha
+ peer0.org2.example.com:
+ container_name: peer0.org2.example.com
+ extends:
+ file: base.yaml
+ service: peer-base
environment:
- - CORE_NEXT=true
- - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- - CORE_PEER_ID=peer2
- - CORE_PEER_ENDORSER_ENABLED=true
+ - CORE_PEER_ID=peer0.org2.example.com
- CORE_PEER_LOCALMSPID=Org2MSP
- - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/peer/
- - CORE_PEER_GOSSIP_USELEADERELECTION=true
- - CORE_PEER_GOSSIP_ORGLEADER=false
- - CORE_PEER_ADDRESS=peer2:7051
- - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer2:7051
- - CORE_PEER_TLS_ENABLED=true
- - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/tls/key.pem
- - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/tls/cert.pem
- - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/tls/ca-cert.pem
- # the following setting starts chaincode containers on the same
- # bridge network as the peers
- # https://docs.docker.com/compose/networking/
- - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=artifacts_default
- working_dir: /opt/gopath/src/github.com/hyperledger/fabric
- command: peer node start --peer-defaultchain=false
+ - CORE_PEER_ADDRESS=peer0.org2.example.com:7051
ports:
- 8051:7051
- 8053:7053
volumes:
- - /var/run/:/host/var/run/
- - ./crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer1/:/etc/hyperledger/msp/peer
- - ./tls/peers/peer2:/etc/hyperledger/tls
+ - ./crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/:/etc/hyperledger/crypto/peer
depends_on:
- - orderer0
+ - orderer.example.com
- peer3:
- container_name: peer3
- image: hyperledger/fabric-peer:x86_64-1.0.0-alpha
+ peer1.org2.example.com:
+ container_name: peer1.org2.example.com
+ extends:
+ file: base.yaml
+ service: peer-base
environment:
- - CORE_NEXT=true
- - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- - CORE_PEER_ID=peer3
- - CORE_PEER_ENDORSER_ENABLED=true
+ - CORE_PEER_ID=peer1.org2.example.com
- CORE_PEER_LOCALMSPID=Org2MSP
- - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/peer/
- - CORE_PEER_GOSSIP_USELEADERELECTION=true
- - CORE_PEER_GOSSIP_ORGLEADER=false
- - CORE_PEER_ADDRESS=peer3:7051
- - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer3:7051
- - CORE_PEER_TLS_ENABLED=true
- - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/tls/key.pem
- - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/tls/cert.pem
- - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/tls/ca-cert.pem
- # the following setting starts chaincode containers on the same
- # bridge network as the peers
- # https://docs.docker.com/compose/networking/
- - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=artifacts_default
- working_dir: /opt/gopath/src/github.com/hyperledger/fabric
- command: peer node start --peer-defaultchain=false
+ - CORE_PEER_ADDRESS=peer1.org2.example.com:7051
ports:
- 8056:7051
- 8058:7053
volumes:
- - /var/run/:/host/var/run/
- - ./crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer2/:/etc/hyperledger/msp/peer
- - ./tls/peers/peer3:/etc/hyperledger/tls
+ - ./crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/:/etc/hyperledger/crypto/peer
depends_on:
- - orderer0
- - peer2
+ - orderer.example.com
+
diff --git a/examples/balance-transfer/artifacts/tls/orderer/ca-cert.pem b/examples/balance-transfer/artifacts/tls/orderer/ca-cert.pem
deleted file mode 100644
index 604c9c35d4..0000000000
--- a/examples/balance-transfer/artifacts/tls/orderer/ca-cert.pem
+++ /dev/null
@@ -1,10 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBcjCCARigAwIBAwICA+gwCgYIKoZIzj0EAwIwFjEUMBIGA1UEAwwLb3JkZXJl
-ck9yZzAwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjAWMRQwEgYDVQQD
-DAtvcmRlcmVyT3JnMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABK8Sv0EA9h06
-fmBkUCO+D/b/2INZ2huy+W/HCxSF22c7WGoJbRzQcWtQmW1KqZowUk86RcxVfFqv
-jEMFVXzV38SjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCVakuvq
-xEcK8pYMf/Hw8hsexRMTMB8GA1UdIwQYMBaAFCVakuvqxEcK8pYMf/Hw8hsexRMT
-MAoGCCqGSM49BAMCA0gAMEUCIQCmXgDSRTyxpSk+PXg0FNlYZ4ijTVwKgLkYVhod
-zZPfngIgO4y0p3Fs/gNsJYrroKaaVDe955KrPp/O55jYDKAD/oY=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/tls/orderer/cert.pem b/examples/balance-transfer/artifacts/tls/orderer/cert.pem
deleted file mode 100644
index 171bc88a11..0000000000
--- a/examples/balance-transfer/artifacts/tls/orderer/cert.pem
+++ /dev/null
@@ -1,10 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBajCCAQ+gAwIBAwICA+gwCgYIKoZIzj0EAwIwFjEUMBIGA1UEAwwLb3JkZXJl
-ck9yZzAwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjATMREwDwYDVQQD
-DAhvcmRlcmVyMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH1h6WeFWnBDgPN5
-biXbyzqShGrAZ9ztOu4j03xcrqUIenBQASJ/rmAErmq4kilNyRVnwdZwDcGTrAwP
-QfAXkVCjUDBOMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFK01/Qm7YoTpXLXjq18D
-+X2pExanMB8GA1UdIwQYMBaAFCVakuvqxEcK8pYMf/Hw8hsexRMTMAoGCCqGSM49
-BAMCA0kAMEYCIQDXdRYqrZdTAM6F2JBl/eN3nIHoBa7N3gIQDqdUAris8wIhAP6i
-f0CgyBN4nWmw2mT+XtxaB0xxWrhYj/j4agiuQzrd
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/tls/orderer/key.pem b/examples/balance-transfer/artifacts/tls/orderer/key.pem
deleted file mode 100644
index e3d29310bf..0000000000
--- a/examples/balance-transfer/artifacts/tls/orderer/key.pem
+++ /dev/null
@@ -1,5 +0,0 @@
------BEGIN EC PRIVATE KEY-----
-MHcCAQEEIJPtBtNKlilpgVZ5FGUBWB2KH3zBtzkBnkrFMmi6W/80oAoGCCqGSM49
-AwEHoUQDQgAEfWHpZ4VacEOA83luJdvLOpKEasBn3O067iPTfFyupQh6cFABIn+u
-YASuariSKU3JFWfB1nANwZOsDA9B8BeRUA==
------END EC PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/tls/peers/peer0/ca-cert.pem b/examples/balance-transfer/artifacts/tls/peers/peer0/ca-cert.pem
deleted file mode 100644
index ac4f5af8d4..0000000000
--- a/examples/balance-transfer/artifacts/tls/peers/peer0/ca-cert.pem
+++ /dev/null
@@ -1,10 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBbDCCARKgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y
-ZzAwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjATMREwDwYDVQQDDAhw
-ZWVyT3JnMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKJfDc/CcaiHRipTG2AB
-K5fA0LO9SOlbtC9bZcjLo/xsL157p+3QB3UVF3gt7nkwgMs/ul3FhSEFTk2EVNlF
-1QCjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFQzuQR1RZP/Qn/B
-NDtGSa8n4eN/MB8GA1UdIwQYMBaAFFQzuQR1RZP/Qn/BNDtGSa8n4eN/MAoGCCqG
-SM49BAMCA0gAMEUCIAuG+/Fy3x9JXAD1/rFsu3ZpCKbXiXZLGF7P6Gma8is5AiEA
-pSQpRcdukxe4zvcfRmNBjMbNLWCoWlHSQA2jD678QGE=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/tls/peers/peer0/cert.pem b/examples/balance-transfer/artifacts/tls/peers/peer0/cert.pem
deleted file mode 100644
index 52b6db4aef..0000000000
--- a/examples/balance-transfer/artifacts/tls/peers/peer0/cert.pem
+++ /dev/null
@@ -1,10 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBYzCCAQmgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y
-ZzAwHhcNMTcwMjIwMTkwNjExWhcNMTgwMjIwMTkwNjExWjAQMQ4wDAYDVQQDDAVw
-ZWVyMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEF6dfqjqfbIgZuOR+dgoJMl
-/FaUlGI70A/ixmVUY83Yp4YtV3FDBSOPiO5O+s8pHnpbwB1LqhrxAx1Plr0M/UWj
-UDBOMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFBY2bc84vLEwkX1fSAER2p48jJXw
-MB8GA1UdIwQYMBaAFFQzuQR1RZP/Qn/BNDtGSa8n4eN/MAoGCCqGSM49BAMCA0gA
-MEUCIQDeDZ71L+OTYcbbqiDNRf0L8OExO59mH1O3xpdwMAM0MgIgXySG4sv9yV31
-WcWRFfRFyu7o3T72kqiLZ1nkDuJ8jWI=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/tls/peers/peer0/key.pem b/examples/balance-transfer/artifacts/tls/peers/peer0/key.pem
deleted file mode 100644
index 811fd382dd..0000000000
--- a/examples/balance-transfer/artifacts/tls/peers/peer0/key.pem
+++ /dev/null
@@ -1,5 +0,0 @@
------BEGIN EC PRIVATE KEY-----
-MHcCAQEEIKyhczWGQa7NbV1tq9LkZkvqslzoQ1HaEVwA6FCLOfvioAoGCCqGSM49
-AwEHoUQDQgAEQXp1+qOp9siBm45H52CgkyX8VpSUYjvQD+LGZVRjzdinhi1XcUMF
-I4+I7k76zykeelvAHUuqGvEDHU+WvQz9RQ==
------END EC PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/tls/peers/peer1/ca-cert.pem b/examples/balance-transfer/artifacts/tls/peers/peer1/ca-cert.pem
deleted file mode 100644
index ac4f5af8d4..0000000000
--- a/examples/balance-transfer/artifacts/tls/peers/peer1/ca-cert.pem
+++ /dev/null
@@ -1,10 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBbDCCARKgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y
-ZzAwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjATMREwDwYDVQQDDAhw
-ZWVyT3JnMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKJfDc/CcaiHRipTG2AB
-K5fA0LO9SOlbtC9bZcjLo/xsL157p+3QB3UVF3gt7nkwgMs/ul3FhSEFTk2EVNlF
-1QCjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFQzuQR1RZP/Qn/B
-NDtGSa8n4eN/MB8GA1UdIwQYMBaAFFQzuQR1RZP/Qn/BNDtGSa8n4eN/MAoGCCqG
-SM49BAMCA0gAMEUCIAuG+/Fy3x9JXAD1/rFsu3ZpCKbXiXZLGF7P6Gma8is5AiEA
-pSQpRcdukxe4zvcfRmNBjMbNLWCoWlHSQA2jD678QGE=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/tls/peers/peer1/cert.pem b/examples/balance-transfer/artifacts/tls/peers/peer1/cert.pem
deleted file mode 100644
index 3040662bf7..0000000000
--- a/examples/balance-transfer/artifacts/tls/peers/peer1/cert.pem
+++ /dev/null
@@ -1,10 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBYzCCAQmgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y
-ZzAwHhcNMTcwMjIwMTkwNjExWhcNMTgwMjIwMTkwNjExWjAQMQ4wDAYDVQQDDAVw
-ZWVyMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABI9/7z3nMORUeS3rZ+F93ymD
-R2jiB6Wm+QSoSz/uQuRavnoksgU6peF5rBMfebk/PfNoVjdR4egCqAHBHIpp7Iuj
-UDBOMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFJpxVAXpMAEOHtbNCwvL1m/ku9gt
-MB8GA1UdIwQYMBaAFFQzuQR1RZP/Qn/BNDtGSa8n4eN/MAoGCCqGSM49BAMCA0gA
-MEUCIQDsQ6lmuLdKmMgnN5+9YjlpCRQEJCoaG3uxRHhrAecZngIgQZlwnvwka+TM
-gF/yC3r2MeELK9ocw8c22DAe6x71RT4=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/tls/peers/peer1/key.pem b/examples/balance-transfer/artifacts/tls/peers/peer1/key.pem
deleted file mode 100644
index ed6814c8eb..0000000000
--- a/examples/balance-transfer/artifacts/tls/peers/peer1/key.pem
+++ /dev/null
@@ -1,5 +0,0 @@
------BEGIN EC PRIVATE KEY-----
-MHcCAQEEIGke7eS6obPUxqqTr3k4svyI+7H2K8vtauJslox/rNjooAoGCCqGSM49
-AwEHoUQDQgAEj3/vPecw5FR5Letn4X3fKYNHaOIHpab5BKhLP+5C5Fq+eiSyBTql
-4XmsEx95uT8982hWN1Hh6AKoAcEcimnsiw==
------END EC PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/tls/peers/peer2/ca-cert.pem b/examples/balance-transfer/artifacts/tls/peers/peer2/ca-cert.pem
deleted file mode 100644
index d02884fa17..0000000000
--- a/examples/balance-transfer/artifacts/tls/peers/peer2/ca-cert.pem
+++ /dev/null
@@ -1,10 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBbDCCARKgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y
-ZzEwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjATMREwDwYDVQQDDAhw
-ZWVyT3JnMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJ2S+UvyFgFZYL6qcrKo
-zy72Nkc/RQVzg1VfwC3X7QcnHEVBuCzba1nxdDVE8XPnhmKBWLKh0adn6GKUZpyf
-mbKjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAQlMVsXlKGMEWPf
-KMMM6QVASnlPMB8GA1UdIwQYMBaAFAQlMVsXlKGMEWPfKMMM6QVASnlPMAoGCCqG
-SM49BAMCA0gAMEUCIHr4AD6Xx3R6zFCsveIMnWao9Us88/0uGHoT4ELmMhA1AiEA
-yzfXU5qHp3xBJ1BrKOGi71UmQZVwWfO26INhxcfpCAg=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/tls/peers/peer2/cert.pem b/examples/balance-transfer/artifacts/tls/peers/peer2/cert.pem
deleted file mode 100644
index e6c7ec260f..0000000000
--- a/examples/balance-transfer/artifacts/tls/peers/peer2/cert.pem
+++ /dev/null
@@ -1,10 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBYzCCAQmgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y
-ZzEwHhcNMTcwMjIwMTkwNjExWhcNMTgwMjIwMTkwNjExWjAQMQ4wDAYDVQQDDAVw
-ZWVyMjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLZyoiEc/0aTctk8THKHtQ8W
-F2BAG1vgB6kxT+cUaLnEH2El9NTvRYjHmjq8ozM9+/R2JVucEGZelAIQxKD5pXuj
-UDBOMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFDdoFJ6jiClMPOVsNx5akist91so
-MB8GA1UdIwQYMBaAFAQlMVsXlKGMEWPfKMMM6QVASnlPMAoGCCqGSM49BAMCA0gA
-MEUCIQC7wATZy+O/7UIPzSiMSXNgBKCaT2U55+Y/e0FcHQFSoQIgCyKExrm3gtW0
-SAN1VofiAZkr3gYndu9goHZe4wVh9eQ=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/tls/peers/peer2/key.pem b/examples/balance-transfer/artifacts/tls/peers/peer2/key.pem
deleted file mode 100644
index 56fe97734b..0000000000
--- a/examples/balance-transfer/artifacts/tls/peers/peer2/key.pem
+++ /dev/null
@@ -1,5 +0,0 @@
------BEGIN EC PRIVATE KEY-----
-MHcCAQEEICO7+w9YD/MdNiZHXusiWGhHTOOAXks10aJGuITmZ0wkoAoGCCqGSM49
-AwEHoUQDQgAEtnKiIRz/RpNy2TxMcoe1DxYXYEAbW+AHqTFP5xRoucQfYSX01O9F
-iMeaOryjMz379HYlW5wQZl6UAhDEoPmlew==
------END EC PRIVATE KEY-----
diff --git a/examples/balance-transfer/artifacts/tls/peers/peer3/ca-cert.pem b/examples/balance-transfer/artifacts/tls/peers/peer3/ca-cert.pem
deleted file mode 100644
index d02884fa17..0000000000
--- a/examples/balance-transfer/artifacts/tls/peers/peer3/ca-cert.pem
+++ /dev/null
@@ -1,10 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBbDCCARKgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y
-ZzEwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjATMREwDwYDVQQDDAhw
-ZWVyT3JnMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJ2S+UvyFgFZYL6qcrKo
-zy72Nkc/RQVzg1VfwC3X7QcnHEVBuCzba1nxdDVE8XPnhmKBWLKh0adn6GKUZpyf
-mbKjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAQlMVsXlKGMEWPf
-KMMM6QVASnlPMB8GA1UdIwQYMBaAFAQlMVsXlKGMEWPfKMMM6QVASnlPMAoGCCqG
-SM49BAMCA0gAMEUCIHr4AD6Xx3R6zFCsveIMnWao9Us88/0uGHoT4ELmMhA1AiEA
-yzfXU5qHp3xBJ1BrKOGi71UmQZVwWfO26INhxcfpCAg=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/tls/peers/peer3/cert.pem b/examples/balance-transfer/artifacts/tls/peers/peer3/cert.pem
deleted file mode 100644
index 275533ba95..0000000000
--- a/examples/balance-transfer/artifacts/tls/peers/peer3/cert.pem
+++ /dev/null
@@ -1,10 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBYzCCAQmgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y
-ZzEwHhcNMTcwMjIwMTkwNjExWhcNMTgwMjIwMTkwNjExWjAQMQ4wDAYDVQQDDAVw
-ZWVyMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABMvgApKCXYIEY4YgPTgQKrLM
-GMdK/1j8WEl2hijED+onVUF/w/oleiSljNOCxdda3u3X0yXqXz/ozQPJL/d4YL+j
-UDBOMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOzMeVZK5xYzjaeO2uGvz8B7CQS7
-MB8GA1UdIwQYMBaAFAQlMVsXlKGMEWPfKMMM6QVASnlPMAoGCCqGSM49BAMCA0gA
-MEUCIQCgKtFodSdXcz2yf9MZB90t1nXYytpGUPMAl0/Gy2/yfQIgAcC1KRtaiclr
-9C9tshhXdYdbpvDruVZrwqjJ4drPHik=
------END CERTIFICATE-----
diff --git a/examples/balance-transfer/artifacts/tls/peers/peer3/key.pem b/examples/balance-transfer/artifacts/tls/peers/peer3/key.pem
deleted file mode 100644
index 73e4569018..0000000000
--- a/examples/balance-transfer/artifacts/tls/peers/peer3/key.pem
+++ /dev/null
@@ -1,5 +0,0 @@
------BEGIN EC PRIVATE KEY-----
-MHcCAQEEIPK7O2ZBw9tXDiVd2OM+riCIHT+uQPynGd0z9fjLSUltoAoGCCqGSM49
-AwEHoUQDQgAEy+ACkoJdggRjhiA9OBAqsswYx0r/WPxYSXaGKMQP6idVQX/D+iV6
-JKWM04LF11re7dfTJepfP+jNA8kv93hgvw==
------END EC PRIVATE KEY-----
diff --git a/examples/balance-transfer/config.json b/examples/balance-transfer/config.json
index 2cb28f9bb8..de4c95d6df 100644
--- a/examples/balance-transfer/config.json
+++ b/examples/balance-transfer/config.json
@@ -1,7 +1,7 @@
{
"host":"localhost",
"port":"4000",
- "jwt_expiretime": "3600",
+ "jwt_expiretime": "36000",
"chaincodeId":"mycc",
"channelName":"mychannel",
"chaincodeVersion": "v0",
diff --git a/examples/balance-transfer/package.json b/examples/balance-transfer/package.json
index d5071abb86..b4c51c6dba 100644
--- a/examples/balance-transfer/package.json
+++ b/examples/balance-transfer/package.json
@@ -1,7 +1,7 @@
{
"name": "balance-transfer",
- "version": "0.0.1",
- "description": "A balance-transfer example node program to demonstrate using NodeSDK apis with alpha based fabric images",
+ "version": "1.0.0-beta",
+ "description": "A balance-transfer example node program to demonstrate using node.js SDK APIs",
"main": "app/app.js",
"keywords": [
"fabric-client sample app",
@@ -18,11 +18,13 @@
"cookie-parser": "^1.4.3",
"cors": "^2.8.3",
"express": "^4.15.2",
+ "express-bearer-token": "^2.1.0",
"express-jwt": "^5.1.0",
"express-session": "^1.15.2",
- "fabric-ca-client": ">=1.0.0-alpha <1.0.0-alpha.10",
- "fabric-client": ">=1.0.0-alpha <1.0.0-alpha.10",
- "log4js": "^0.6.38",
- "jsonwebtoken": "^7.3.0"
+ "fabric-ca-client": "file:../../fabric-ca-client",
+ "fabric-client": "file:../../fabric-client",
+ "fs-extra": "^2.0.0",
+ "jsonwebtoken": "^7.3.0",
+ "log4js": "^0.6.38"
}
}
diff --git a/examples/balance-transfer/testAPIs.sh b/examples/balance-transfer/testAPIs.sh
index c6336be55e..e0a5d54260 100755
--- a/examples/balance-transfer/testAPIs.sh
+++ b/examples/balance-transfer/testAPIs.sh
@@ -12,7 +12,6 @@ echo "POST request Enroll on Org1 ..."
echo
ORG1_TOKEN=$(curl -s -X POST \
http://localhost:4000/users \
- -H "cache-control: no-cache" \
-H "content-type: application/x-www-form-urlencoded" \
-d 'username=Jim&orgName=org1')
echo $ORG1_TOKEN
@@ -24,7 +23,6 @@ echo "POST request Enroll on Org2 ..."
echo
ORG2_TOKEN=$(curl -s -X POST \
http://localhost:4000/users \
- -H "cache-control: no-cache" \
-H "content-type: application/x-www-form-urlencoded" \
-d 'username=Barry&orgName=org2')
echo $ORG2_TOKEN
@@ -38,9 +36,7 @@ echo
curl -s -X POST \
http://localhost:4000/channels \
-H "authorization: Bearer $ORG1_TOKEN" \
- -H "cache-control: no-cache" \
-H "content-type: application/json" \
- -H "x-access-token: $ORG1_TOKEN" \
-d '{
"channelName":"mychannel",
"channelConfigPath":"../artifacts/channel/mychannel.tx"
@@ -53,9 +49,7 @@ echo
curl -s -X POST \
http://localhost:4000/channels/mychannel/peers \
-H "authorization: Bearer $ORG1_TOKEN" \
- -H "cache-control: no-cache" \
-H "content-type: application/json" \
- -H "x-access-token: $ORG1_TOKEN" \
-d '{
"peers": ["localhost:7051","localhost:7056"]
}'
@@ -67,9 +61,7 @@ echo
curl -s -X POST \
http://localhost:4000/channels/mychannel/peers \
-H "authorization: Bearer $ORG2_TOKEN" \
- -H "cache-control: no-cache" \
-H "content-type: application/json" \
- -H "x-access-token: $ORG2_TOKEN" \
-d '{
"peers": ["localhost:8051","localhost:8056"]
}'
@@ -81,9 +73,7 @@ echo
curl -s -X POST \
http://localhost:4000/chaincodes \
-H "authorization: Bearer $ORG1_TOKEN" \
- -H "cache-control: no-cache" \
-H "content-type: application/json" \
- -H "x-access-token: $ORG1_TOKEN" \
-d '{
"peers": ["localhost:7051","localhost:7056"],
"chaincodeName":"mycc",
@@ -99,9 +89,7 @@ echo
curl -s -X POST \
http://localhost:4000/chaincodes \
-H "authorization: Bearer $ORG2_TOKEN" \
- -H "cache-control: no-cache" \
-H "content-type: application/json" \
- -H "x-access-token: $ORG2_TOKEN" \
-d '{
"peers": ["localhost:8051","localhost:8056"],
"chaincodeName":"mycc",
@@ -116,13 +104,9 @@ echo
curl -s -X POST \
http://localhost:4000/channels/mychannel/chaincodes \
-H "authorization: Bearer $ORG1_TOKEN" \
- -H "cache-control: no-cache" \
-H "content-type: application/json" \
- -H "x-access-token: $ORG1_TOKEN" \
-d '{
- "peers": ["localhost:7051"],
"chaincodeName":"mycc",
- "chaincodePath":"github.com/example_cc",
"chaincodeVersion":"v0",
"functionName":"init",
"args":["a","100","b","200"]
@@ -130,36 +114,15 @@ curl -s -X POST \
echo
echo
-echo "POST invoke chaincode on peers of Org1"
+echo "POST invoke chaincode on peers of Org1 and Org2"
echo
TRX_ID=$(curl -s -X POST \
http://localhost:4000/channels/mychannel/chaincodes/mycc \
-H "authorization: Bearer $ORG1_TOKEN" \
- -H "cache-control: no-cache" \
- -H "content-type: application/json" \
- -H "x-access-token: $ORG1_TOKEN" \
- -d '{
- "peers": ["localhost:7051", "localhost:7056"],
- "chaincodeVersion":"v0",
- "functionName":"invoke",
- "args":["move","a","b","10"]
-}')
-echo "Transacton ID is $TRX_ID"
-echo
-echo
-
-echo "POST invoke chaincode on peers of Org2"
-echo
-TRX_ID=$(curl -s -X POST \
- http://localhost:4000/channels/mychannel/chaincodes/mycc \
- -H "authorization: Bearer $ORG2_TOKEN" \
- -H "cache-control: no-cache" \
-H "content-type: application/json" \
- -H "x-access-token: $ORG2_TOKEN" \
-d '{
- "peers": ["localhost:8051", "localhost:8056"],
- "chaincodeVersion":"v0",
- "functionName":"invoke",
+ "peers": ["localhost:7051", "localhost:8051"],
+ "fcn":"invoke",
"args":["move","a","b","10"]
}')
echo "Transacton ID is $TRX_ID"
@@ -169,11 +132,9 @@ echo
echo "GET query chaincode on peer1 of Org1"
echo
curl -s -X GET \
- "http://localhost:4000/channels/mychannel/chaincodes/mycc?peer=peer1&args=%5B%22query%22%2C%22a%22%5D&chaincodeVersion=v0" \
+ "http://localhost:4000/channels/mychannel/chaincodes/mycc?peer=peer1&args=%5B%22query%22%2C%22a%22%5D" \
-H "authorization: Bearer $ORG1_TOKEN" \
- -H "cache-control: no-cache" \
- -H "content-type: application/json" \
- -H "x-access-token: $ORG1_TOKEN"
+ -H "content-type: application/json"
echo
echo
@@ -182,9 +143,7 @@ echo
curl -s -X GET \
"http://localhost:4000/channels/mychannel/blocks/1?peer=peer1" \
-H "authorization: Bearer $ORG1_TOKEN" \
- -H "cache-control: no-cache" \
- -H "content-type: application/json" \
- -H "x-access-token: $ORG1_TOKEN"
+ -H "content-type: application/json"
echo
echo
@@ -192,9 +151,7 @@ echo "GET query Transaction by TransactionID"
echo
curl -s -X GET http://localhost:4000/channels/mychannel/transactions/$TRX_ID?peer=peer1 \
-H "authorization: Bearer $ORG1_TOKEN" \
- -H "cache-control: no-cache" \
- -H "content-type: application/json" \
- -H "x-access-token: $ORG1_TOKEN"
+ -H "content-type: application/json"
echo
echo
@@ -218,9 +175,7 @@ echo
curl -s -X GET \
"http://localhost:4000/channels/mychannel?peer=peer1" \
-H "authorization: Bearer $ORG1_TOKEN" \
- -H "cache-control: no-cache" \
- -H "content-type: application/json" \
- -H "x-access-token: $ORG1_TOKEN"
+ -H "content-type: application/json"
echo
echo
@@ -229,9 +184,7 @@ echo
curl -s -X GET \
"http://localhost:4000/chaincodes?peer=peer1&type=installed" \
-H "authorization: Bearer $ORG1_TOKEN" \
- -H "cache-control: no-cache" \
- -H "content-type: application/json" \
- -H "x-access-token: $ORG1_TOKEN"
+ -H "content-type: application/json"
echo
echo
@@ -240,9 +193,7 @@ echo
curl -s -X GET \
"http://localhost:4000/chaincodes?peer=peer1&type=instantiated" \
-H "authorization: Bearer $ORG1_TOKEN" \
- -H "cache-control: no-cache" \
- -H "content-type: application/json" \
- -H "x-access-token: $ORG1_TOKEN"
+ -H "content-type: application/json"
echo
echo
@@ -251,9 +202,7 @@ echo
curl -s -X GET \
"http://localhost:4000/channels?peer=peer1" \
-H "authorization: Bearer $ORG1_TOKEN" \
- -H "cache-control: no-cache" \
- -H "content-type: application/json" \
- -H "x-access-token: $ORG1_TOKEN"
+ -H "content-type: application/json"
echo
echo
diff --git a/fabric-client/lib/Channel.js b/fabric-client/lib/Channel.js
index cd84b79bda..5033e1de8b 100755
--- a/fabric-client/lib/Channel.js
+++ b/fabric-client/lib/Channel.js
@@ -1193,7 +1193,6 @@ var Channel = class {
//validate the incoming request
if(!errorMsg) errorMsg = Channel._checkProposalRequest(request);
if(!errorMsg) errorMsg = Channel._checkInstallRequest(request);
- if(!errorMsg) errorMsg = _checkInstantiateRequest(request);
if(errorMsg) {
logger.error('sendChainCodeProposal error ' + errorMsg);
@@ -1217,7 +1216,6 @@ var Channel = class {
type: Channel._translateCCType(request.chaincodeType),
chaincode_id: {
name: request.chaincodeId,
- path: request.chaincodePath,
version: request.chaincodeVersion
},
input: {
@@ -1919,25 +1917,6 @@ function _arrayToMap(map, msps) {
}
};
-/*
-* @private
-*/
-function _checkInstantiateRequest(request) {
- var errorMsg = null;
-
- if (request) {
- var type = Channel._translateCCType(request.chaincodeType);
- // FIXME: GOLANG platform on the peer has a bug that requires chaincodePath
- // during instantiate. Police this for now until the peer is fixed.
- if(type === _ccProto.ChaincodeSpec.Type.GOLANG && !request.chaincodePath) {
- errorMsg = 'Missing "chaincodePath" parameter in the proposal request';
- }
- } else {
- errorMsg = 'Missing input request object on the proposal request';
- }
- return errorMsg;
-}
-
/*
* utility method to load in a config group
* @param {Object} - config_items - holder of values found in the configuration
diff --git a/test/integration/e2e/instantiate-chaincode.js b/test/integration/e2e/instantiate-chaincode.js
index 0e9cd50421..7cab1681ce 100644
--- a/test/integration/e2e/instantiate-chaincode.js
+++ b/test/integration/e2e/instantiate-chaincode.js
@@ -28,7 +28,7 @@ var test = _test(tape);
var e2eUtils = require('./e2eUtils.js');
var testUtil = require('../../unit/util.js');
-test('\n\n***** End-to-end flow: instantiate chaincode *****', (t) => {
+test('\n\n***** End-to-end flow: instantiate chaincode *****\n\n', (t) => {
e2eUtils.instantiateChaincode('org1', testUtil.CHAINCODE_PATH, 'v0', false, t)
.then((result) => {
if(result){
diff --git a/test/integration/e2e/invoke-transaction.js b/test/integration/e2e/invoke-transaction.js
index 115bd1a7c6..8b3896f7c1 100755
--- a/test/integration/e2e/invoke-transaction.js
+++ b/test/integration/e2e/invoke-transaction.js
@@ -23,7 +23,7 @@ var _test = require('tape-promise');
var test = _test(tape);
var e2eUtils = require('./e2eUtils.js');
-test('\n\n***** End-to-end flow: invoke transaction to move money *****', (t) => {
+test('\n\n***** End-to-end flow: invoke transaction to move money *****\n\n', (t) => {
e2eUtils.invokeChaincode('org2', 'v0', t, false/*useStore*/)
.then((result) => {
if(result){
diff --git a/test/integration/e2e/query.js b/test/integration/e2e/query.js
index 98a1ceb771..1ee45d5cee 100644
--- a/test/integration/e2e/query.js
+++ b/test/integration/e2e/query.js
@@ -23,7 +23,7 @@ var _test = require('tape-promise');
var test = _test(tape);
var e2eUtils = require('./e2eUtils.js');
-test('\n\n***** End-to-end flow: query chaincode *****', (t) => {
+test('\n\n***** End-to-end flow: query chaincode *****\n\n', (t) => {
e2eUtils.queryChaincode('org2', 'v0', '300', t)
.then((result) => {
if(result){
diff --git a/test/integration/e2e/upgrade.js b/test/integration/e2e/upgrade.js
index 0539be827d..614817f1b8 100644
--- a/test/integration/e2e/upgrade.js
+++ b/test/integration/e2e/upgrade.js
@@ -46,7 +46,7 @@ test('\n\n***** U P G R A D E flow: chaincode install *****\n\n', (t) => {
});
});
-test('\n\n***** U P G R A D E flow: upgrade chaincode *****', (t) => {
+test('\n\n***** U P G R A D E flow: upgrade chaincode *****\n\n', (t) => {
e2eUtils.instantiateChaincode('org1', testUtil.CHAINCODE_UPGRADE_PATH, 'v1', true, t)
.then((result) => {
if(result){
@@ -66,7 +66,7 @@ test('\n\n***** U P G R A D E flow: upgrade chaincode *****', (t) => {
});
});
-test('\n\n***** U P G R A D E flow: invoke transaction to move money *****', (t) => {
+test('\n\n***** U P G R A D E flow: invoke transaction to move money *****\n\n', (t) => {
e2eUtils.invokeChaincode('org2', 'v1', t)
.then((result) => {
if(result){
@@ -86,7 +86,7 @@ test('\n\n***** U P G R A D E flow: invoke transaction to move money *****', (t)
});
});
-test('\n\n***** U P G R A D E flow: query chaincode *****', (t) => {
+test('\n\n***** U P G R A D E flow: query chaincode *****\n\n', (t) => {
e2eUtils.queryChaincode('org2', 'v1', '410', t)
.then((result) => {
if(result){
@@ -106,7 +106,7 @@ test('\n\n***** U P G R A D E flow: query chaincode *****', (t) => {
});
});
-test('\n\n***** TransientMap Support in Proposals *****', (t) => {
+test('\n\n***** TransientMap Support in Proposals *****\n\n', (t) => {
var transient = {
'test': Buffer.from('dummyValue') // string <-> byte[]
};