├── public └── images │ └── .gitkeep ├── images └── Monalisa.jpg ├── artifacts ├── channel │ ├── mychannel.tx │ ├── genesis.block │ ├── crypto-config │ │ ├── ordererOrganizations │ │ │ └── example.com │ │ │ │ ├── users │ │ │ │ └── Admin@example.com │ │ │ │ │ ├── tls │ │ │ │ │ ├── server.key │ │ │ │ │ ├── server.crt │ │ │ │ │ └── ca.crt │ │ │ │ │ └── msp │ │ │ │ │ ├── keystore │ │ │ │ │ └── db670eed8487a93c35ae448b9f84c2f241a7a8c87df0544fc1dc08baf7832aa0_sk │ │ │ │ │ ├── admincerts │ │ │ │ │ └── Admin@example.com-cert.pem │ │ │ │ │ ├── signcerts │ │ │ │ │ └── Admin@example.com-cert.pem │ │ │ │ │ ├── cacerts │ │ │ │ │ └── ca.example.com-cert.pem │ │ │ │ │ └── tlscacerts │ │ │ │ │ └── tlsca.example.com-cert.pem │ │ │ │ ├── orderers │ │ │ │ └── orderer.example.com │ │ │ │ │ ├── tls │ │ │ │ │ ├── server.key │ │ │ │ │ ├── ca.crt │ │ │ │ │ └── server.crt │ │ │ │ │ └── msp │ │ │ │ │ ├── keystore │ │ │ │ │ └── 2fb065725bf1b7e2811c0e8ca8d37f5a951fc4cd1162a47aad8accf9ddd10291_sk │ │ │ │ │ ├── admincerts │ │ │ │ │ └── Admin@example.com-cert.pem │ │ │ │ │ ├── signcerts │ │ │ │ │ └── orderer.example.com-cert.pem │ │ │ │ │ ├── cacerts │ │ │ │ │ └── ca.example.com-cert.pem │ │ │ │ │ └── tlscacerts │ │ │ │ │ └── tlsca.example.com-cert.pem │ │ │ │ ├── ca │ │ │ │ ├── 0d46ccf0e9436c1bc3b6e2bf80cdb202c4943604f95c72ee0ff839d3ec300719_sk │ │ │ │ └── ca.example.com-cert.pem │ │ │ │ ├── tlsca │ │ │ │ ├── 6a211ed18880b4db3867831c977809902713b8e321a5ab55ecc104dafc2eec49_sk │ │ │ │ └── tlsca.example.com-cert.pem │ │ │ │ └── msp │ │ │ │ ├── admincerts │ │ │ │ └── Admin@example.com-cert.pem │ │ │ │ ├── cacerts │ │ │ │ └── ca.example.com-cert.pem │ │ │ │ └── tlscacerts │ │ │ │ └── tlsca.example.com-cert.pem │ │ └── peerOrganizations │ │ │ ├── org1.example.com │ │ │ ├── peers │ │ │ │ ├── peer0.org1.example.com │ │ │ │ │ ├── tls │ │ │ │ │ │ ├── server.key │ │ │ │ │ │ ├── ca.crt │ │ │ │ │ │ └── server.crt │ │ │ │ │ └── msp │ │ │ │ │ │ ├── keystore │ │ │ │ │ │ └── 27db82c96b1482480baa1c75f80e5cce249beaab27b70c741bb0e2554355957e_sk │ │ │ │ │ │ ├── signcerts │ │ │ │ │ │ └── peer0.org1.example.com-cert.pem │ │ │ │ │ │ ├── admincerts │ │ │ │ │ │ └── Admin@org1.example.com-cert.pem │ │ │ │ │ │ ├── cacerts │ │ │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ │ │ │ └── tlscacerts │ │ │ │ │ │ └── tlsca.org1.example.com-cert.pem │ │ │ │ └── peer1.org1.example.com │ │ │ │ │ ├── tls │ │ │ │ │ ├── server.key │ │ │ │ │ ├── ca.crt │ │ │ │ │ └── server.crt │ │ │ │ │ └── msp │ │ │ │ │ ├── keystore │ │ │ │ │ └── fdee12a3510fde3155c37128cfec26090ae249bfbca28f884e60c21338493edd_sk │ │ │ │ │ ├── admincerts │ │ │ │ │ └── Admin@org1.example.com-cert.pem │ │ │ │ │ ├── signcerts │ │ │ │ │ └── peer1.org1.example.com-cert.pem │ │ │ │ │ ├── cacerts │ │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ │ │ └── tlscacerts │ │ │ │ │ └── tlsca.org1.example.com-cert.pem │ │ │ ├── users │ │ │ │ ├── Admin@org1.example.com │ │ │ │ │ ├── tls │ │ │ │ │ │ ├── server.key │ │ │ │ │ │ ├── server.crt │ │ │ │ │ │ └── ca.crt │ │ │ │ │ └── msp │ │ │ │ │ │ ├── keystore │ │ │ │ │ │ └── 5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8_sk │ │ │ │ │ │ ├── admincerts │ │ │ │ │ │ └── Admin@org1.example.com-cert.pem │ │ │ │ │ │ ├── signcerts │ │ │ │ │ │ └── Admin@org1.example.com-cert.pem │ │ │ │ │ │ ├── cacerts │ │ │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ │ │ │ └── tlscacerts │ │ │ │ │ │ └── tlsca.org1.example.com-cert.pem │ │ │ │ └── User1@org1.example.com │ │ │ │ │ ├── tls │ │ │ │ │ ├── server.key │ │ │ │ │ ├── server.crt │ │ │ │ │ └── ca.crt │ │ │ │ │ └── msp │ │ │ │ │ ├── keystore │ │ │ │ │ └── 73cdc0072c7203f1ec512232c780fc84acc9752ef30ebc16be1f4666c02b614b_sk │ │ │ │ │ ├── admincerts │ │ │ │ │ └── User1@org1.example.com-cert.pem │ │ │ │ │ ├── signcerts │ │ │ │ │ └── User1@org1.example.com-cert.pem │ │ │ │ │ ├── cacerts │ │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ │ │ └── tlscacerts │ │ │ │ │ └── tlsca.org1.example.com-cert.pem │ │ │ ├── ca │ │ │ │ ├── 0e729224e8b3f31784c8a93c5b8ef6f4c1c91d9e6e577c45c33163609fe40011_sk │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ ├── tlsca │ │ │ │ ├── 945092d936f5838c5a6f6484db974d857933706737d00d04bf65f74e3976f9f8_sk │ │ │ │ └── tlsca.org1.example.com-cert.pem │ │ │ └── msp │ │ │ │ ├── admincerts │ │ │ │ └── Admin@org1.example.com-cert.pem │ │ │ │ ├── cacerts │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ │ └── tlscacerts │ │ │ │ └── tlsca.org1.example.com-cert.pem │ │ │ └── org2.example.com │ │ │ ├── peers │ │ │ ├── peer0.org2.example.com │ │ │ │ ├── tls │ │ │ │ │ ├── server.key │ │ │ │ │ ├── ca.crt │ │ │ │ │ └── server.crt │ │ │ │ └── msp │ │ │ │ │ ├── keystore │ │ │ │ │ └── 0d9f72608133ee627b570b6af6877666bc8f365746f9329d6dd8a5f54e53e2ab_sk │ │ │ │ │ ├── admincerts │ │ │ │ │ └── Admin@org2.example.com-cert.pem │ │ │ │ │ ├── signcerts │ │ │ │ │ └── peer0.org2.example.com-cert.pem │ │ │ │ │ ├── cacerts │ │ │ │ │ └── ca.org2.example.com-cert.pem │ │ │ │ │ └── tlscacerts │ │ │ │ │ └── tlsca.org2.example.com-cert.pem │ │ │ └── peer1.org2.example.com │ │ │ │ ├── tls │ │ │ │ ├── server.key │ │ │ │ ├── ca.crt │ │ │ │ └── server.crt │ │ │ │ └── msp │ │ │ │ ├── keystore │ │ │ │ └── 27ccb54a06020260c66c65bec91f91e1c9043e3076d3d6128692e7271c4c7a2c_sk │ │ │ │ ├── admincerts │ │ │ │ └── Admin@org2.example.com-cert.pem │ │ │ │ ├── signcerts │ │ │ │ └── peer1.org2.example.com-cert.pem │ │ │ │ ├── cacerts │ │ │ │ └── ca.org2.example.com-cert.pem │ │ │ │ └── tlscacerts │ │ │ │ └── tlsca.org2.example.com-cert.pem │ │ │ ├── users │ │ │ ├── Admin@org2.example.com │ │ │ │ ├── tls │ │ │ │ │ ├── server.key │ │ │ │ │ ├── server.crt │ │ │ │ │ └── ca.crt │ │ │ │ └── msp │ │ │ │ │ ├── keystore │ │ │ │ │ └── 1995b11d6573ed3be52fcd7a5fa477bc0f183e1f5f398c8281d0ce7c2c75a076_sk │ │ │ │ │ ├── admincerts │ │ │ │ │ └── Admin@org2.example.com-cert.pem │ │ │ │ │ ├── signcerts │ │ │ │ │ └── Admin@org2.example.com-cert.pem │ │ │ │ │ ├── cacerts │ │ │ │ │ └── ca.org2.example.com-cert.pem │ │ │ │ │ └── tlscacerts │ │ │ │ │ └── tlsca.org2.example.com-cert.pem │ │ │ └── User1@org2.example.com │ │ │ │ ├── tls │ │ │ │ ├── server.key │ │ │ │ ├── server.crt │ │ │ │ └── ca.crt │ │ │ │ └── msp │ │ │ │ ├── keystore │ │ │ │ └── 585175c83bac91fc0c1ce8f9d0ff9aefa47c565678f100ca8673db249ee785ac_sk │ │ │ │ ├── admincerts │ │ │ │ └── User1@org2.example.com-cert.pem │ │ │ │ ├── signcerts │ │ │ │ └── User1@org2.example.com-cert.pem │ │ │ │ ├── cacerts │ │ │ │ └── ca.org2.example.com-cert.pem │ │ │ │ └── tlscacerts │ │ │ │ └── tlsca.org2.example.com-cert.pem │ │ │ ├── ca │ │ │ ├── a7d47efa46a6ba07730c850fed2c1375df27360d7227f48cdc2f80e505678005_sk │ │ │ └── ca.org2.example.com-cert.pem │ │ │ ├── tlsca │ │ │ ├── 7bb8ba3ff11d3c8cf592bd4326062e77d06ac4963c7b7ae459284dfbd3eb5aac_sk │ │ │ └── tlsca.org2.example.com-cert.pem │ │ │ └── msp │ │ │ ├── admincerts │ │ │ └── Admin@org2.example.com-cert.pem │ │ │ ├── cacerts │ │ │ └── ca.org2.example.com-cert.pem │ │ │ └── tlscacerts │ │ │ └── tlsca.org2.example.com-cert.pem │ ├── cryptogen.yaml │ └── configtx.yaml ├── base.yaml ├── org1.yaml ├── org2.yaml ├── docker-compose.yaml ├── network-config.yaml ├── network-config-aws.yaml └── src │ └── github.com │ └── auction │ └── auction.go ├── readme-images ├── image-output.png └── auction-diagram.png ├── .gitignore ├── config.json ├── config.js ├── package.json ├── bootstrap_app.sh ├── app ├── query.js ├── saveImageTx.js ├── create-channel.js ├── install-chaincode.js ├── join-channel.js ├── helper.js ├── invoke-transaction.js └── instantiate-chaincode.js ├── quicktest.sh ├── README.md └── app.js /public/images/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/Monalisa.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IBM/SecuringArt-using-Blockchain-DigitalCertificates/HEAD/images/Monalisa.jpg -------------------------------------------------------------------------------- /artifacts/channel/mychannel.tx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IBM/SecuringArt-using-Blockchain-DigitalCertificates/HEAD/artifacts/channel/mychannel.tx -------------------------------------------------------------------------------- /readme-images/image-output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IBM/SecuringArt-using-Blockchain-DigitalCertificates/HEAD/readme-images/image-output.png -------------------------------------------------------------------------------- /artifacts/channel/genesis.block: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IBM/SecuringArt-using-Blockchain-DigitalCertificates/HEAD/artifacts/channel/genesis.block -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/* 2 | package-lock.json 3 | fabric-client-kv-org* 4 | ## saved as thumbnail in public/images folder 5 | public/images/Monalisa.jpeg -------------------------------------------------------------------------------- /readme-images/auction-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IBM/SecuringArt-using-Blockchain-DigitalCertificates/HEAD/readme-images/auction-diagram.png -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "host":"localhost", 3 | "port":"4000", 4 | "jwt_expiretime": "36000", 5 | "channelName":"mychannel", 6 | "CC_SRC_PATH":"../artifacts", 7 | "eventWaitTime":"30000", 8 | "admins":[ 9 | { 10 | "username":"admin", 11 | "secret":"adminpw" 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgixJReeen2sIgyqT6 3 | F0z2Y9iYIu++FVOGg7ha4FR6G2WhRANCAAT73Elt3f2FcnDxjj2a3PM7U/8pouPO 4 | QQBAYbtye6NvK0kdEsv6QdbYTTb6hvyEC5zCyNH9LGDQnbK59oPEpa1K 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgUsf4CUpdmdIaax7T 3 | qjCJaQLCsSU1/xaoETdgCCZ8fDihRANCAATc297sbanJvFsD5Ldu8qU/wEBHiQkb 4 | 3ph3aT1QVzv4yZ1czn/tN5UJtqJ2dik4Nivak2XOjweKPCjK9jGc3tTd 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgCRU1ZAMLxDAlcr5d 3 | D6ZSprL4Lf0+TkWwN6rCFVWmjDuhRANCAAQmRdf9VGMJ0SZNnft8wdHFvaIvB4e4 4 | OgmgcOmhCNVsILSmfv7NvKEFVGAVSbHU90QBoEUUbddkK6jv8Wu/4tVH 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgi4EN3aLIYYJMpLwD 3 | r3yCKO+EBzcCcTA5QbNZ1SvDFa+hRANCAASqTVmuI3/0ZOW6UmahWLXixEpHeym6 4 | 0jqIqiyZmErzPiow0T7fv6YywTSjOtLb5J01LJVOiZ3v+wlcdRaYh40R 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgfVrs13ZtxgKp8l5T 3 | WAq2IXqgd+zF1V6sTh7rbQ104rShRANCAAQpNJlzWzyMzfmDib8f9F5zlXW+hkcT 4 | XrTjrrlqvkAViyYXZUSq4bSPjU4hyo6u1DJgTXSHwTwtWFxyBnXg9rvg 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgOXZUBNCAmIwJR3bt 3 | GfoOwtmo3QunwcBnBBUPjot4frihRANCAATIesaE2DLbqG4feE1qnVQy1BEFUjHF 4 | NfQ2ohtQwpwFLD0NEXSd1kd3kpBRWuPm3b9Bj5hKmorq58OTrx9ZIBns 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgVlcwZfAKBQZ+W/JX 3 | w64rHF3JiaddhBcUfxk7WuyZxrChRANCAATA4gn4ZLD2UYcaRsqMLy7vJUIwuh+M 4 | v0okLk24RvmVyvfVUcgw6Cs5Msw6VMTHKNcbw94Gn0g7616ypWTmzfWz 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgxFdgRfevcXrABROv 3 | sV6HvrpoN5PHW6qXIFj71CAwtzyhRANCAASldEbYLCoj4XRSgxIiajcif1HuXN5L 4 | 4O4vWks6MXmzTmRUBwfrTj/0VEjrW6O9aniZheiucH5HWlxDC2iVg3M8 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgOa1azVZZkkb3rRW1 3 | y3z1TCvqOzftqGI3eELPG2TWK6WhRANCAATBTXEqGDfNnEJ0hqMQYloc5WIvTZ1W 4 | 63zgjXbMTDo4WCH76bY1YAYXPO2alLEKeLEmFR1dasQCezw+dAiUQvuE 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgftZDPdCM6QMMv8ZO 3 | eXbUFGQqnFhEUAiChttdWcSp6QOhRANCAASzPxD+5doMF+ERsVvYF+/AkyDUOt0U 4 | XFNNRfdR0qU95fntR9BwAoCVkxpH+WZ8Ap1HHWf89mA9ec31RRxdn78H 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/ca/0d46ccf0e9436c1bc3b6e2bf80cdb202c4943604f95c72ee0ff839d3ec300719_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg9pRJ4Y87tn+vE1fU 3 | uAGVg5OOGwHYlqBuvAOvy0Z+mEChRANCAAQyw4A26b4ouKj0TxbF3mM4I51vDLZ2 4 | clA+fdrYJwZcI9F/lLmpu+oEd/XXdQn/ELzEsgeCi9xdThVYmeXJ/53K 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/ca/0e729224e8b3f31784c8a93c5b8ef6f4c1c91d9e6e577c45c33163609fe40011_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgp4Y9v/Cx/ee3K2mP 3 | N62ttbG2y1NkppMN6MlycYpqtT2hRANCAAQohXCFPMmsvPN+QiP874DXwHXyTZxI 4 | oRZ1Jt9ZkikUlJv3LDxCgSxu2TjCP0kkP/A5JrV4MP+lCit6MKbbkKYF 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/ca/a7d47efa46a6ba07730c850fed2c1375df27360d7227f48cdc2f80e505678005_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgUgMy/PQKxjfxITFM 3 | mVPTu4ZwQlhYIh1vJkn3dkjqDBShRANCAARVtStps/F2HsCLFIdah6iJhTW6Vvro 4 | DQ/HOkGAfPZjzjB4cYpfaRNX19I/9fPnuLqIWxSjj/FEwdeXNX/5hUhH 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/tlsca/6a211ed18880b4db3867831c977809902713b8e321a5ab55ecc104dafc2eec49_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQghjZ40AvUeupMV603 3 | i9pA9S8uNLz5i6TePeBgJZhrY/ihRANCAAQkmbjr/9EK0m/4CpR6DiM+Eyke3vxP 4 | X+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFTRWPw 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/tlsca/945092d936f5838c5a6f6484db974d857933706737d00d04bf65f74e3976f9f8_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg/I1tIO3Xr1ZlsJUm 3 | FDoUo/CNIJXLPlpUxtB7/LjcNzahRANCAASrgcdhvIXc7eJf5u3u0BM2B2tZboZh 4 | dZ8oomOyuIEyG1ivnL+xOO+DrixnnXs3H9A2PbrIot1n29IFQaEBR951 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/tlsca/7bb8ba3ff11d3c8cf592bd4326062e77d06ac4963c7b7ae459284dfbd3eb5aac_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgXu7VBLhnEUi4mu4d 3 | tU1nT4lcMR9aoG29s5hLPmIKH/mhRANCAAQafufB/FcqVxwfR3/9RMWU5jXXAZU1 4 | IAJhx+bG/Q4sx18JY6Os3cl32XC70wqaC8myf656eDyiezSlA5q0Mpi1 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/db670eed8487a93c35ae448b9f84c2f241a7a8c87df0544fc1dc08baf7832aa0_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg33NMbWc5E80ueSIA 3 | iWqRlyC2M+1ce4shkkP/CVKOp4uhRANCAASgMruzeEtmT0Es7AFRf5sMAnsLrvvj 4 | LX3DJlHXqCDxUQY9STAp33/PDNMI9d4EEiUOhn51K0++hvy+XxsQlIn1 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/2fb065725bf1b7e2811c0e8ca8d37f5a951fc4cd1162a47aad8accf9ddd10291_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgc4TjL7yNIkRpowuC 3 | Y0uEEkzJraTtTM380wlyrRoVs96hRANCAARi2C4soUEstzRVLDI8ccc17vocfvWg 4 | 5crrC6fxj/m+0xrA9n9ZOb+8FVRZ182XNz14DbxpfHrMEAHyJGbXoR5T 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/27db82c96b1482480baa1c75f80e5cce249beaab27b70c741bb0e2554355957e_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgTEPwtCyJ1jFk2qQs 3 | oFgHzMo3/MEXG1XJHiTgoRYvnPahRANCAATNL2TaAIodxq3xaPhPacHW7ILxHbOD 4 | e6bF1MvueaAVanS7IIJtBDEP9VL7xH/cM28QWS/OFyNz01T+dGoyKuku 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/keystore/fdee12a3510fde3155c37128cfec26090ae249bfbca28f884e60c21338493edd_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgtzNlo4v/qB1j5dJ6 3 | CRLQb9UAfUMMevXdnbuXUux2K2GhRANCAAQp09OJbb47IImVbghi7EWMxIgkyWZW 4 | cIdx0/9u9wdzZFgO8K5ciuxXwGpyMnsbkdVCPZuPmCjahRunIGJ3/DLH 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgNmsvQQm4nwrxOKFX 3 | UNfLPgjNm+FtYu3vb6OZ9q/5GbChRANCAAQKZvNQOjMissqOnc4DMi1IbubsWXDv 4 | qtPxU7wTqi2ULDEq0FGQ+lkvueisLc2yPITff0nk7ilcKqEgClDJFGxG 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/73cdc0072c7203f1ec512232c780fc84acc9752ef30ebc16be1f4666c02b614b_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgaYlbFIz6yVz0SYqh 3 | nrhdTCb797PBwSwtCw9HtOkbqQGhRANCAAR1el/5FrkCusYV3vTnp0GSgyO/82se 4 | 2I2JUb1JR4AqKiiMvHxQGrd4JRm1V9aKNqGe3DCVZRZ27oj3a4OL5Mo3 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/keystore/0d9f72608133ee627b570b6af6877666bc8f365746f9329d6dd8a5f54e53e2ab_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgNYZ86CFF4Iz0K+sE 3 | HMg3lSS+mo5lRIFFLUOGrfseqhOhRANCAAT/Dd/SwXAdKicm97/WPViD32Bzn1j5 4 | 2k/FslsxorK2Lx1Rfhi3wyxa40LNLjfED7E7KmJZ1w7PzI7+7WWhPTbq 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/keystore/27ccb54a06020260c66c65bec91f91e1c9043e3076d3d6128692e7271c4c7a2c_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgtRT9fcsCMexhHlCO 3 | dfzBqkDIfC88UFE51dYxRHDSrMShRANCAAS4r7MB6WDw96YKpJIzOvqhXs1dQ3XQ 4 | 5QMMX4aOwVLT1vZHOkPghRr2wMhJeQs1vVY+5RcnOWy6OyB/oYCCIPka 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/1995b11d6573ed3be52fcd7a5fa477bc0f183e1f5f398c8281d0ce7c2c75a076_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgHa4xvmGVQJV5wrMj 3 | KttcA0hh/Yz0dezmXlRLjNk9HyahRANCAATCyh15tcTe05OGM2loOBmIS6MjY647 4 | Od9NqN+5tdlPC6K0eyC+X3RYGCC3i+F1D4wv0BuBNqOoT5d7mT1FRK22 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/keystore/585175c83bac91fc0c1ce8f9d0ff9aefa47c565678f100ca8673db249ee785ac_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgmHG6n4ZvwUeV4jCp 3 | kvAmGSQKZ+vOYsyzRZgYwORO+vChRANCAAQXfUrBIhR9fySG96jBDy0dncoKJBVS 4 | lniDXAdDYuEwUZHyFllCXggDU1GNdT5v/uYLPnwU6gc/DNlM6SQ1V+/t 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /config.js: -------------------------------------------------------------------------------- 1 | var util = require('util'); 2 | var path = require('path'); 3 | var hfc = require('fabric-client'); 4 | 5 | var file = 'network-config%s.yaml'; 6 | 7 | var env = process.env.TARGET_NETWORK; 8 | if (env) 9 | file = util.format(file, '-' + env); 10 | else 11 | file = util.format(file, ''); 12 | // indicate to the application where the setup file is located so it able 13 | // to have the hfc load it to initalize the fabric client instance 14 | hfc.setConfigSetting('network-connection-profile-path',path.join(__dirname, 'artifacts' ,file)); 15 | hfc.setConfigSetting('Org1-connection-profile-path',path.join(__dirname, 'artifacts', 'org1.yaml')); 16 | hfc.setConfigSetting('Org2-connection-profile-path',path.join(__dirname, 'artifacts', 'org2.yaml')); 17 | // some other settings the application might need to know 18 | hfc.addConfigFile(path.join(__dirname, 'config.json')); 19 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/msp/admincerts/Admin@example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICCjCCAbGgAwIBAgIRANPhTyHWZkTenKfX4eBv0ZUwCgYIKoZIzj0EAwIwaTEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt 5 | cGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFYxCzAJBgNV 6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp 7 | c2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqG 8 | SM49AwEHA0IABKAyu7N4S2ZPQSzsAVF/mwwCewuu++MtfcMmUdeoIPFRBj1JMCnf 9 | f88M0wj13gQSJQ6GfnUrT76G/L5fGxCUifWjTTBLMA4GA1UdDwEB/wQEAwIHgDAM 10 | BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy 11 | 7g/4OdPsMAcZMAoGCCqGSM49BAMCA0cAMEQCIEdiGFLzeGMvVNubuZ3iuvRp/Pp6 12 | im3FmABwIbnMarabAiBIHWzz8Yxh9K5ZNkVNZX3fLZ4LlzsKBinbWH9J2wblDg== 13 | -----END CERTIFICATE----- 14 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/admincerts/Admin@example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICCjCCAbGgAwIBAgIRANPhTyHWZkTenKfX4eBv0ZUwCgYIKoZIzj0EAwIwaTEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt 5 | cGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFYxCzAJBgNV 6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp 7 | c2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqG 8 | SM49AwEHA0IABKAyu7N4S2ZPQSzsAVF/mwwCewuu++MtfcMmUdeoIPFRBj1JMCnf 9 | f88M0wj13gQSJQ6GfnUrT76G/L5fGxCUifWjTTBLMA4GA1UdDwEB/wQEAwIHgDAM 10 | BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy 11 | 7g/4OdPsMAcZMAoGCCqGSM49BAMCA0cAMEQCIEdiGFLzeGMvVNubuZ3iuvRp/Pp6 12 | im3FmABwIbnMarabAiBIHWzz8Yxh9K5ZNkVNZX3fLZ4LlzsKBinbWH9J2wblDg== 13 | -----END CERTIFICATE----- 14 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts/Admin@example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICCjCCAbGgAwIBAgIRANPhTyHWZkTenKfX4eBv0ZUwCgYIKoZIzj0EAwIwaTEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt 5 | cGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFYxCzAJBgNV 6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp 7 | c2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqG 8 | SM49AwEHA0IABKAyu7N4S2ZPQSzsAVF/mwwCewuu++MtfcMmUdeoIPFRBj1JMCnf 9 | f88M0wj13gQSJQ6GfnUrT76G/L5fGxCUifWjTTBLMA4GA1UdDwEB/wQEAwIHgDAM 10 | BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy 11 | 7g/4OdPsMAcZMAoGCCqGSM49BAMCA0cAMEQCIEdiGFLzeGMvVNubuZ3iuvRp/Pp6 12 | im3FmABwIbnMarabAiBIHWzz8Yxh9K5ZNkVNZX3fLZ4LlzsKBinbWH9J2wblDg== 13 | -----END CERTIFICATE----- 14 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/admincerts/Admin@example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICCjCCAbGgAwIBAgIRANPhTyHWZkTenKfX4eBv0ZUwCgYIKoZIzj0EAwIwaTEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt 5 | cGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFYxCzAJBgNV 6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp 7 | c2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqG 8 | SM49AwEHA0IABKAyu7N4S2ZPQSzsAVF/mwwCewuu++MtfcMmUdeoIPFRBj1JMCnf 9 | f88M0wj13gQSJQ6GfnUrT76G/L5fGxCUifWjTTBLMA4GA1UdDwEB/wQEAwIHgDAM 10 | BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy 11 | 7g/4OdPsMAcZMAoGCCqGSM49BAMCA0cAMEQCIEdiGFLzeGMvVNubuZ3iuvRp/Pp6 12 | im3FmABwIbnMarabAiBIHWzz8Yxh9K5ZNkVNZX3fLZ4LlzsKBinbWH9J2wblDg== 13 | -----END CERTIFICATE----- 14 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla 6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw 8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT 9 | 8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD 10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE 11 | yKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/ 12 | yfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy 13 | CKqf8052NVUs2CvPzA== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGjCCAcCgAwIBAgIRAIUbkOONvaq2DLJr9qZbDKwwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 6 | WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ 8 | MBMGByqGSM49AgEGCCqGSM49AwEHA0IABMLKHXm1xN7Tk4YzaWg4GYhLoyNjrjs5 9 | 302o37m12U8LorR7IL5fdFgYILeL4XUPjC/QG4E2o6hPl3uZPUVErbajTTBLMA4G 10 | A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH 11 | cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQDa1k6R 12 | +luypvng6JMSKIyibptkwICToEAZlDqLeD+k1gIgGFXm1+p1QqxViOa+c1dUvjl0 13 | m1UCqGDwNTHDm5mO+es= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICLjCCAdWgAwIBAgIQCeSxIA/5bBc/893OreC2kzAKBggqhkjOPQQDAjBpMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w 5 | bGUuY29tMB4XDTE3MDYyMzEyMzMxOVoXDTI3MDYyMTEyMzMxOVowaTELMAkGA1UE 6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz 7 | Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv 8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDLDgDbpvii4qPRPFsXeYzgjnW8M 9 | tnZyUD592tgnBlwj0X+Uuam76gR39dd1Cf8QvMSyB4KL3F1OFViZ5cn/ncqjXzBd 10 | MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB 11 | Af8wKQYDVR0OBCIEIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy7g/4OdPsMAcZMAoG 12 | CCqGSM49BAMCA0cAMEQCICXp7cNAHK6RQOFxE8Gpqy1B/FuLbmtYNqqBo5e1Pgly 13 | AiAWH23pmnXngcjLHg3nGwa3oUlCyPD64ilFoCMdN9TRVg== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/signcerts/orderer.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICDTCCAbOgAwIBAgIRALFafJiTFN/47AvAGfvj1ZEwCgYIKoZIzj0EAwIwaTEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt 5 | cGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFgxCzAJBgNV 6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp 7 | c2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI 8 | KoZIzj0DAQcDQgAEYtguLKFBLLc0VSwyPHHHNe76HH71oOXK6wun8Y/5vtMawPZ/ 9 | WTm/vBVUWdfNlzc9eA28aXx6zBAB8iRm16EeU6NNMEswDgYDVR0PAQH/BAQDAgeA 10 | MAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDUbM8OlDbBvDtuK/gM2yAsSUNgT5 11 | XHLuD/g50+wwBxkwCgYIKoZIzj0EAwIDSAAwRQIhANJuEGHBftrtlWgie9zgc60J 12 | /XVytPN/D0rPlkMV17n7AiBBbStggGBfFYcQ2LhDhcKut8nScJ2OFrt+dJSdJbod 13 | 7A== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICKzCCAdKgAwIBAgIQF7ZJRSdZJSb9HEWyJaxQuDAKBggqhkjOPQQDAjBsMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4 5 | YW1wbGUuY29tMB4XDTE3MDYyMzEyMzMxOVoXDTI3MDYyMTEyMzMxOVowVjELMAkG 6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu 7 | Y2lzY28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI 8 | KoZIzj0DAQcDQgAE+9xJbd39hXJw8Y49mtzzO1P/KaLjzkEAQGG7cnujbytJHRLL 9 | +kHW2E02+ob8hAucwsjR/Sxg0J2yufaDxKWtSqNsMGowDgYDVR0PAQH/BAQDAgWg 10 | MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMCsG 11 | A1UdIwQkMCKAIGohHtGIgLTbOGeDHJd4CZAnE7jjIaWrVezBBNr8LuxJMAoGCCqG 12 | SM49BAMCA0cAMEQCIA5f8O7WfymKaLrJ71f77GGb/6z72Jh7g5svHDZBgKkBAiAg 13 | fkCIypxeGnU1Vbo3vYauhqU6lQYO6VcVBhk3182wyQ== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/msp/cacerts/ca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICLjCCAdWgAwIBAgIQCeSxIA/5bBc/893OreC2kzAKBggqhkjOPQQDAjBpMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w 5 | bGUuY29tMB4XDTE3MDYyMzEyMzMxOVoXDTI3MDYyMTEyMzMxOVowaTELMAkGA1UE 6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz 7 | Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv 8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDLDgDbpvii4qPRPFsXeYzgjnW8M 9 | tnZyUD592tgnBlwj0X+Uuam76gR39dd1Cf8QvMSyB4KL3F1OFViZ5cn/ncqjXzBd 10 | MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB 11 | Af8wKQYDVR0OBCIEIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy7g/4OdPsMAcZMAoG 12 | CCqGSM49BAMCA0cAMEQCICXp7cNAHK6RQOFxE8Gpqy1B/FuLbmtYNqqBo5e1Pgly 13 | AiAWH23pmnXngcjLHg3nGwa3oUlCyPD64ilFoCMdN9TRVg== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l 5 | eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ 6 | BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh 7 | bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh 8 | bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6 9 | DiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT 10 | RWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB 11 | Af8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa 12 | /C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6 13 | WqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l 5 | eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ 6 | BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh 7 | bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh 8 | bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6 9 | DiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT 10 | RWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB 11 | Af8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa 12 | /C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6 13 | WqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/signcerts/peer0.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGDCCAb+gAwIBAgIQPcMFFEB/vq6mEL6vXV7aUTAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla 6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDExZwZWVyMC5vcmcxLmV4YW1wbGUuY29tMFkw 8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzS9k2gCKHcat8Wj4T2nB1uyC8R2zg3um 9 | xdTL7nmgFWp0uyCCbQQxD/VS+8R/3DNvEFkvzhcjc9NU/nRqMirpLqNNMEswDgYD 10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE 11 | yKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgHBdxbHUG 12 | rFUzKPX9UmmN3SwigWcRUREUy/GTb3hDIAsCIEF1BxTqv8ilQYE8ql0wJL4mTber 13 | HE6DFYvvBCUnicUh 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l 5 | eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ 6 | BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh 7 | bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh 8 | bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6 9 | DiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT 10 | RWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB 11 | Af8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa 12 | /C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6 13 | WqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l 5 | eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ 6 | BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh 7 | bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh 8 | bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6 9 | DiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT 10 | RWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB 11 | Af8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa 12 | /C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6 13 | WqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla 6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw 8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT 9 | 8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD 10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE 11 | yKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/ 12 | yfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy 13 | CKqf8052NVUs2CvPzA== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla 6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw 8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT 9 | 8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD 10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE 11 | yKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/ 12 | yfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy 13 | CKqf8052NVUs2CvPzA== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/signcerts/peer1.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGjCCAcCgAwIBAgIRAI+BBtEBvpOqhfRZZH7eV/YwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 6 | WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjEub3JnMS5leGFtcGxlLmNvbTBZ 8 | MBMGByqGSM49AgEGCCqGSM49AwEHA0IABCnT04ltvjsgiZVuCGLsRYzEiCTJZlZw 9 | h3HT/273B3NkWA7wrlyK7FfAanIyexuR1UI9m4+YKNqFG6cgYnf8MsejTTBLMA4G 10 | A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA5ykiTos/MX 11 | hMipPFuO9vTByR2ebld8RcMxY2Cf5AARMAoGCCqGSM49BAMCA0gAMEUCIQCSRdWm 12 | i4IgVUajvzWVxyE/wi7n617pVqS4+nJ7gbTRjQIgefzBwS+bkNhPc3/rktySFLRC 13 | WMnq87KyqMLc6iRaJx0= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla 6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw 8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT 9 | 8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD 10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE 11 | yKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/ 12 | yfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy 13 | CKqf8052NVUs2CvPzA== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla 6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw 8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT 9 | 8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD 10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE 11 | yKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/ 12 | yfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy 13 | CKqf8052NVUs2CvPzA== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/admincerts/User1@org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGjCCAcCgAwIBAgIRANfNECvok9C6hT58XJZ/lJAwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 6 | WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWVXNlcjFAb3JnMS5leGFtcGxlLmNvbTBZ 8 | MBMGByqGSM49AgEGCCqGSM49AwEHA0IABHV6X/kWuQK6xhXe9OenQZKDI7/zax7Y 9 | jYlRvUlHgCoqKIy8fFAat3glGbVX1oo2oZ7cMJVlFnbuiPdrg4vkyjejTTBLMA4G 10 | A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA5ykiTos/MX 11 | hMipPFuO9vTByR2ebld8RcMxY2Cf5AARMAoGCCqGSM49BAMCA0gAMEUCIQDbCDrW 12 | eqZ4yw7vcEhnNExiRZTv0xcVbRF8JgGozLz6qwIgZoXcqxvkJaBdZpwzg4f0RvVQ 13 | QrjJMURXXchQ1Mnd5+o= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGjCCAcCgAwIBAgIRANfNECvok9C6hT58XJZ/lJAwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 6 | WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWVXNlcjFAb3JnMS5leGFtcGxlLmNvbTBZ 8 | MBMGByqGSM49AgEGCCqGSM49AwEHA0IABHV6X/kWuQK6xhXe9OenQZKDI7/zax7Y 9 | jYlRvUlHgCoqKIy8fFAat3glGbVX1oo2oZ7cMJVlFnbuiPdrg4vkyjejTTBLMA4G 10 | A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA5ykiTos/MX 11 | hMipPFuO9vTByR2ebld8RcMxY2Cf5AARMAoGCCqGSM49BAMCA0gAMEUCIQDbCDrW 12 | eqZ4yw7vcEhnNExiRZTv0xcVbRF8JgGozLz6qwIgZoXcqxvkJaBdZpwzg4f0RvVQ 13 | QrjJMURXXchQ1Mnd5+o= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGjCCAcCgAwIBAgIRAIUbkOONvaq2DLJr9qZbDKwwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 6 | WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ 8 | MBMGByqGSM49AgEGCCqGSM49AwEHA0IABMLKHXm1xN7Tk4YzaWg4GYhLoyNjrjs5 9 | 302o37m12U8LorR7IL5fdFgYILeL4XUPjC/QG4E2o6hPl3uZPUVErbajTTBLMA4G 10 | A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH 11 | cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQDa1k6R 12 | +luypvng6JMSKIyibptkwICToEAZlDqLeD+k1gIgGFXm1+p1QqxViOa+c1dUvjl0 13 | m1UCqGDwNTHDm5mO+es= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/signcerts/peer0.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGjCCAcCgAwIBAgIRANDlqX1daKI2aN0Qm7vrfKAwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 6 | WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMi5leGFtcGxlLmNvbTBZ 8 | MBMGByqGSM49AgEGCCqGSM49AwEHA0IABP8N39LBcB0qJyb3v9Y9WIPfYHOfWPna 9 | T8WyWzGisrYvHVF+GLfDLFrjQs0uN8QPsTsqYlnXDs/Mjv7tZaE9NuqjTTBLMA4G 10 | A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH 11 | cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQDa1gKe 12 | PRVRN/i8hUptACw02V7V9Yeo7kKlbQ6vWU5fqAIgXg2xAQ4TjwXOHlKbIyYZ7fox 13 | cekBJ+E8yAFm8XQrfy0= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGjCCAcCgAwIBAgIRAIUbkOONvaq2DLJr9qZbDKwwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 6 | WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ 8 | MBMGByqGSM49AgEGCCqGSM49AwEHA0IABMLKHXm1xN7Tk4YzaWg4GYhLoyNjrjs5 9 | 302o37m12U8LorR7IL5fdFgYILeL4XUPjC/QG4E2o6hPl3uZPUVErbajTTBLMA4G 10 | A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH 11 | cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQDa1k6R 12 | +luypvng6JMSKIyibptkwICToEAZlDqLeD+k1gIgGFXm1+p1QqxViOa+c1dUvjl0 13 | m1UCqGDwNTHDm5mO+es= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/signcerts/peer1.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGTCCAb+gAwIBAgIQKeRyEPaHSUPvshfEtmg9tzAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla 6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDExZwZWVyMS5vcmcyLmV4YW1wbGUuY29tMFkw 8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuK+zAelg8PemCqSSMzr6oV7NXUN10OUD 9 | DF+GjsFS09b2RzpD4IUa9sDISXkLNb1WPuUXJzlsujsgf6GAgiD5GqNNMEswDgYD 10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgp9R++kamugdz 11 | DIUP7SwTdd8nNg1yJ/SM3C+A5QVngAUwCgYIKoZIzj0EAwIDSAAwRQIhAMIQLWEv 12 | wpaNibkXEGJlT0IzSIBsCjMJD7VaqZLKm5h9AiAlYmNBB8siyLLxFawvEB/4F26x 13 | e1jgyza7Yg+ardDzlw== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGjCCAcCgAwIBAgIRAIUbkOONvaq2DLJr9qZbDKwwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 6 | WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ 8 | MBMGByqGSM49AgEGCCqGSM49AwEHA0IABMLKHXm1xN7Tk4YzaWg4GYhLoyNjrjs5 9 | 302o37m12U8LorR7IL5fdFgYILeL4XUPjC/QG4E2o6hPl3uZPUVErbajTTBLMA4G 10 | A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH 11 | cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQDa1k6R 12 | +luypvng6JMSKIyibptkwICToEAZlDqLeD+k1gIgGFXm1+p1QqxViOa+c1dUvjl0 13 | m1UCqGDwNTHDm5mO+es= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGjCCAcCgAwIBAgIRAIUbkOONvaq2DLJr9qZbDKwwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 6 | WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ 8 | MBMGByqGSM49AgEGCCqGSM49AwEHA0IABMLKHXm1xN7Tk4YzaWg4GYhLoyNjrjs5 9 | 302o37m12U8LorR7IL5fdFgYILeL4XUPjC/QG4E2o6hPl3uZPUVErbajTTBLMA4G 10 | A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH 11 | cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQDa1k6R 12 | +luypvng6JMSKIyibptkwICToEAZlDqLeD+k1gIgGFXm1+p1QqxViOa+c1dUvjl0 13 | m1UCqGDwNTHDm5mO+es= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/admincerts/User1@org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGjCCAcCgAwIBAgIRAIPRwJHVLhHK47XK0BbFZJswCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 6 | WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWVXNlcjFAb3JnMi5leGFtcGxlLmNvbTBZ 8 | MBMGByqGSM49AgEGCCqGSM49AwEHA0IABBd9SsEiFH1/JIb3qMEPLR2dygokFVKW 9 | eINcB0Ni4TBRkfIWWUJeCANTUY11Pm/+5gs+fBTqBz8M2UzpJDVX7+2jTTBLMA4G 10 | A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH 11 | cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQC8NIMw 12 | e4ym/QRwCJb5umbONNLSVQuEpnPsJrM/ssBPvgIgQpe2oYa3yO3USro9nBHjpM3L 13 | KsFQrpVnF8O6hoHOYZQ= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/signcerts/User1@org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGjCCAcCgAwIBAgIRAIPRwJHVLhHK47XK0BbFZJswCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 6 | WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWVXNlcjFAb3JnMi5leGFtcGxlLmNvbTBZ 8 | MBMGByqGSM49AgEGCCqGSM49AwEHA0IABBd9SsEiFH1/JIb3qMEPLR2dygokFVKW 9 | eINcB0Ni4TBRkfIWWUJeCANTUY11Pm/+5gs+fBTqBz8M2UzpJDVX7+2jTTBLMA4G 10 | A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH 11 | cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQC8NIMw 12 | e4ym/QRwCJb5umbONNLSVQuEpnPsJrM/ssBPvgIgQpe2oYa3yO3USro9nBHjpM3L 13 | KsFQrpVnF8O6hoHOYZQ= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/cacerts/ca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICLjCCAdWgAwIBAgIQCeSxIA/5bBc/893OreC2kzAKBggqhkjOPQQDAjBpMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w 5 | bGUuY29tMB4XDTE3MDYyMzEyMzMxOVoXDTI3MDYyMTEyMzMxOVowaTELMAkGA1UE 6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz 7 | Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv 8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDLDgDbpvii4qPRPFsXeYzgjnW8M 9 | tnZyUD592tgnBlwj0X+Uuam76gR39dd1Cf8QvMSyB4KL3F1OFViZ5cn/ncqjXzBd 10 | MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB 11 | Af8wKQYDVR0OBCIEIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy7g/4OdPsMAcZMAoG 12 | CCqGSM49BAMCA0cAMEQCICXp7cNAHK6RQOFxE8Gpqy1B/FuLbmtYNqqBo5e1Pgly 13 | AiAWH23pmnXngcjLHg3nGwa3oUlCyPD64ilFoCMdN9TRVg== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICLjCCAdWgAwIBAgIQCeSxIA/5bBc/893OreC2kzAKBggqhkjOPQQDAjBpMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w 5 | bGUuY29tMB4XDTE3MDYyMzEyMzMxOVoXDTI3MDYyMTEyMzMxOVowaTELMAkGA1UE 6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz 7 | Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv 8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDLDgDbpvii4qPRPFsXeYzgjnW8M 9 | tnZyUD592tgnBlwj0X+Uuam76gR39dd1Cf8QvMSyB4KL3F1OFViZ5cn/ncqjXzBd 10 | MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB 11 | Af8wKQYDVR0OBCIEIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy7g/4OdPsMAcZMAoG 12 | CCqGSM49BAMCA0cAMEQCICXp7cNAHK6RQOFxE8Gpqy1B/FuLbmtYNqqBo5e1Pgly 13 | AiAWH23pmnXngcjLHg3nGwa3oUlCyPD64ilFoCMdN9TRVg== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla 6 | MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD 8 | ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE 9 | KIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w 10 | OSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG 11 | BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472 12 | 9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc 13 | tQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl 14 | rg/GXwkv 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICOzCCAeKgAwIBAgIRALvUEE81tMguFRFvx00HyREwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz 6 | MzE5WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMS5leGFtcGxlLmNv 8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCk0mXNbPIzN+YOJvx/0XnOVdb6G 9 | RxNetOOuuWq+QBWLJhdlRKrhtI+NTiHKjq7UMmBNdIfBPC1YXHIGdeD2u+CjbDBq 10 | MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw 11 | DAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCCUUJLZNvWDjFpvZITbl02FeTNwZzfQ 12 | DQS/ZfdOOXb5+DAKBggqhkjOPQQDAgNHADBEAiAp9+XFJ2igUvUlvkFVLeH7sWHf 13 | +Q4m47hVT/81vedY1gIgTSz5CufvmWnI5AgwCuw4D0w0eDPFAc1HkO1rlVo5icY= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICOjCCAeGgAwIBAgIQSEKNVPcBOB7Kgrrzf05rJjAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz 6 | MTlaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZVc2VyMUBvcmcxLmV4YW1wbGUuY29t 8 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEyHrGhNgy26huH3hNap1UMtQRBVIx 9 | xTX0NqIbUMKcBSw9DRF0ndZHd5KQUVrj5t2/QY+YSpqK6ufDk68fWSAZ7KNsMGow 10 | DgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAM 11 | BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIJRQktk29YOMWm9khNuXTYV5M3BnN9AN 12 | BL9l9045dvn4MAoGCCqGSM49BAMCA0cAMEQCIE6HCTr9in2CqF6S+m/aGCVQrZwK 13 | /o3oyXdcymDc/PbDAiAHIRDkIw1mU31KNhvPd6f8c/sReVDr3PQLydWh/HJpTQ== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICPDCCAeKgAwIBAgIRAJyMPO3I72b3mbPNKpVYYLMwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz 6 | MzE5WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNv 8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABMFNcSoYN82cQnSGoxBiWhzlYi9N 9 | nVbrfOCNdsxMOjhYIfvptjVgBhc87ZqUsQp4sSYVHV1qxAJ7PD50CJRC+4SjbDBq 10 | MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw 11 | DAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCB7uLo/8R08jPWSvUMmBi530GrEljx7 12 | euRZKE370+tarDAKBggqhkjOPQQDAgNIADBFAiEAkPjfzaF3Dxz5n39QChNSfWwC 13 | lpxiBCgw8DMP2D91UFICIC640slBiPu2zx3U7izA6Zu00IIaEt8xGtt4pbhwwqWj 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICOzCCAeKgAwIBAgIRAPD3UPMtRDq5GhVZUuS25LUwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz 6 | MzE5WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWVXNlcjFAb3JnMi5leGFtcGxlLmNv 8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLM/EP7l2gwX4RGxW9gX78CTINQ6 9 | 3RRcU01F91HSpT3l+e1H0HACgJWTGkf5ZnwCnUcdZ/z2YD15zfVFHF2fvwejbDBq 10 | MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw 11 | DAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCB7uLo/8R08jPWSvUMmBi530GrEljx7 12 | euRZKE370+tarDAKBggqhkjOPQQDAgNHADBEAiBo0H6ZNg1XJladWoGNnFsdRm3I 13 | u4dLlJBwe9gTrscPAAIgXfsHfA8qVvyK2Pnlca2cwUHvRrJ4cAvaYrWNTMG1t7Q= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICQzCCAeqgAwIBAgIRAJEAD5YytxsnFjw+liBjOQkwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE 8 | AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA 9 | BFW1K2mz8XYewIsUh1qHqImFNbpW+ugND8c6QYB89mPOMHhxil9pE1fX0j/18+e4 10 | uohbFKOP8UTB15c1f/mFSEejXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG 11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKfUfvpGproHcwyFD+0s 12 | E3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0cAMEQCIGrkModOvz6mcUDA 13 | Zql4YPXU/3ZUbMLw8VuSNHh47lg7AiAPLSKy/v8y8mhebGRCNTYwdkidQCQFrh+2 14 | BIirBFsT0g== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/tlscacerts/tlsca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l 5 | eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ 6 | BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh 7 | bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh 8 | bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6 9 | DiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT 10 | RWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB 11 | Af8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa 12 | /C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6 13 | WqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla 6 | MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD 8 | ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE 9 | KIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w 10 | OSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG 11 | BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472 12 | 9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc 13 | tQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl 14 | rg/GXwkv 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l 5 | eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ 6 | BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh 7 | bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh 8 | bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6 9 | DiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT 10 | RWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB 11 | Af8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa 12 | /C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6 13 | WqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICQzCCAeqgAwIBAgIRAJEAD5YytxsnFjw+liBjOQkwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE 8 | AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA 9 | BFW1K2mz8XYewIsUh1qHqImFNbpW+ugND8c6QYB89mPOMHhxil9pE1fX0j/18+e4 10 | uohbFKOP8UTB15c1f/mFSEejXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG 11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKfUfvpGproHcwyFD+0s 12 | E3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0cAMEQCIGrkModOvz6mcUDA 13 | Zql4YPXU/3ZUbMLw8VuSNHh47lg7AiAPLSKy/v8y8mhebGRCNTYwdkidQCQFrh+2 14 | BIirBFsT0g== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz 6 | MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD 8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 9 | AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s 10 | Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud 11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa 12 | b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw 13 | 14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F 14 | qwkrkz69kT1ZsL7SXw== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz 6 | MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD 8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 9 | AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s 10 | Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud 11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa 12 | b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw 13 | 14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F 14 | qwkrkz69kT1ZsL7SXw== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz 6 | MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD 8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 9 | AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s 10 | Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud 11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa 12 | b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw 13 | 14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F 14 | qwkrkz69kT1ZsL7SXw== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz 6 | MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD 8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 9 | AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s 10 | Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud 11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa 12 | b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw 13 | 14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F 14 | qwkrkz69kT1ZsL7SXw== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz 6 | MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD 8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 9 | AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s 10 | Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud 11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa 12 | b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw 13 | 14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F 14 | qwkrkz69kT1ZsL7SXw== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz 6 | MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ 10 | cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV 11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM 12 | 9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD 13 | mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a 14 | nfIdbwvBbsl1XV/j0g== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz 6 | MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ 10 | cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV 11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM 12 | 9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD 13 | mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a 14 | nfIdbwvBbsl1XV/j0g== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz 6 | MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ 10 | cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV 11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM 12 | 9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD 13 | mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a 14 | nfIdbwvBbsl1XV/j0g== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz 6 | MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ 10 | cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV 11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM 12 | 9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD 13 | mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a 14 | nfIdbwvBbsl1XV/j0g== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz 6 | MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ 10 | cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV 11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM 12 | 9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD 13 | mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a 14 | nfIdbwvBbsl1XV/j0g== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz 6 | MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD 8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 9 | AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s 10 | Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud 11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa 12 | b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw 13 | 14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F 14 | qwkrkz69kT1ZsL7SXw== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz 6 | MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ 10 | cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV 11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM 12 | 9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD 13 | mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a 14 | nfIdbwvBbsl1XV/j0g== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla 6 | MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD 8 | ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE 9 | KIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w 10 | OSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG 11 | BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472 12 | 9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc 13 | tQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl 14 | rg/GXwkv 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla 6 | MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD 8 | ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE 9 | KIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w 10 | OSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG 11 | BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472 12 | 9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc 13 | tQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl 14 | rg/GXwkv 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla 6 | MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD 8 | ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE 9 | KIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w 10 | OSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG 11 | BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472 12 | 9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc 13 | tQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl 14 | rg/GXwkv 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla 6 | MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD 8 | ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE 9 | KIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w 10 | OSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG 11 | BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472 12 | 9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc 13 | tQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl 14 | rg/GXwkv 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICWjCCAgCgAwIBAgIRAKk85zOKA4NKFQe/AmGxK7EwCgYIKoZIzj0EAwIwbDEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l 5 | eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFgxCzAJ 6 | BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh 7 | bmNpc2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0C 8 | AQYIKoZIzj0DAQcDQgAE3Nve7G2pybxbA+S3bvKlP8BAR4kJG96Yd2k9UFc7+Mmd 9 | XM5/7TeVCbaidnYpODYr2pNlzo8HijwoyvYxnN7U3aOBljCBkzAOBgNVHQ8BAf8E 10 | BAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQC 11 | MAAwKwYDVR0jBCQwIoAgaiEe0YiAtNs4Z4Mcl3gJkCcTuOMhpatV7MEE2vwu7Ekw 12 | JwYDVR0RBCAwHoITb3JkZXJlci5leGFtcGxlLmNvbYIHb3JkZXJlcjAKBggqhkjO 13 | PQQDAgNIADBFAiEAtW6SunJ0GXR2gZY2yOg4CAOLPqb3YB07/9byOSFYZygCIA77 14 | iitG1Mkvlc7fyNFcgYKDUpbXQBS5iTmAuo/cISDx 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICQzCCAeqgAwIBAgIRAJEAD5YytxsnFjw+liBjOQkwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE 8 | AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA 9 | BFW1K2mz8XYewIsUh1qHqImFNbpW+ugND8c6QYB89mPOMHhxil9pE1fX0j/18+e4 10 | uohbFKOP8UTB15c1f/mFSEejXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG 11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKfUfvpGproHcwyFD+0s 12 | E3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0cAMEQCIGrkModOvz6mcUDA 13 | Zql4YPXU/3ZUbMLw8VuSNHh47lg7AiAPLSKy/v8y8mhebGRCNTYwdkidQCQFrh+2 14 | BIirBFsT0g== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICQzCCAeqgAwIBAgIRAJEAD5YytxsnFjw+liBjOQkwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE 8 | AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA 9 | BFW1K2mz8XYewIsUh1qHqImFNbpW+ugND8c6QYB89mPOMHhxil9pE1fX0j/18+e4 10 | uohbFKOP8UTB15c1f/mFSEejXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG 11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKfUfvpGproHcwyFD+0s 12 | E3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0cAMEQCIGrkModOvz6mcUDA 13 | Zql4YPXU/3ZUbMLw8VuSNHh47lg7AiAPLSKy/v8y8mhebGRCNTYwdkidQCQFrh+2 14 | BIirBFsT0g== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICQzCCAeqgAwIBAgIRAJEAD5YytxsnFjw+liBjOQkwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE 8 | AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA 9 | BFW1K2mz8XYewIsUh1qHqImFNbpW+ugND8c6QYB89mPOMHhxil9pE1fX0j/18+e4 10 | uohbFKOP8UTB15c1f/mFSEejXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG 11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKfUfvpGproHcwyFD+0s 12 | E3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0cAMEQCIGrkModOvz6mcUDA 13 | Zql4YPXU/3ZUbMLw8VuSNHh47lg7AiAPLSKy/v8y8mhebGRCNTYwdkidQCQFrh+2 14 | BIirBFsT0g== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICQzCCAeqgAwIBAgIRAJEAD5YytxsnFjw+liBjOQkwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE 8 | AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA 9 | BFW1K2mz8XYewIsUh1qHqImFNbpW+ugND8c6QYB89mPOMHhxil9pE1fX0j/18+e4 10 | uohbFKOP8UTB15c1f/mFSEejXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG 11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKfUfvpGproHcwyFD+0s 12 | E3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0cAMEQCIGrkModOvz6mcUDA 13 | Zql4YPXU/3ZUbMLw8VuSNHh47lg7AiAPLSKy/v8y8mhebGRCNTYwdkidQCQFrh+2 14 | BIirBFsT0g== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz 6 | MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD 8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 9 | AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s 10 | Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud 11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa 12 | b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw 13 | 14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F 14 | qwkrkz69kT1ZsL7SXw== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz 6 | MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD 8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 9 | AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s 10 | Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud 11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa 12 | b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw 13 | 14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F 14 | qwkrkz69kT1ZsL7SXw== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz 6 | MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD 8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 9 | AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s 10 | Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud 11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa 12 | b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw 13 | 14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F 14 | qwkrkz69kT1ZsL7SXw== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz 6 | MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD 8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 9 | AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s 10 | Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud 11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa 12 | b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw 13 | 14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F 14 | qwkrkz69kT1ZsL7SXw== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz 6 | MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ 10 | cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV 11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM 12 | 9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD 13 | mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a 14 | nfIdbwvBbsl1XV/j0g== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz 6 | MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ 10 | cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV 11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM 12 | 9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD 13 | mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a 14 | nfIdbwvBbsl1XV/j0g== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz 6 | MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ 10 | cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV 11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM 12 | 9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD 13 | mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a 14 | nfIdbwvBbsl1XV/j0g== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz 6 | MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ 10 | cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV 11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM 12 | 9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD 13 | mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a 14 | nfIdbwvBbsl1XV/j0g== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICczCCAhmgAwIBAgIRAIKTnLyvyRImVvGtyrD0wH4wCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz 6 | MzE5WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMS5leGFtcGxlLmNv 8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCZF1/1UYwnRJk2d+3zB0cW9oi8H 9 | h7g6CaBw6aEI1WwgtKZ+/s28oQVUYBVJsdT3RAGgRRRt12QrqO/xa7/i1UejgaIw 10 | gZ8wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD 11 | AjAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIJRQktk29YOMWm9khNuXTYV5M3Bn 12 | N9ANBL9l9045dvn4MDMGA1UdEQQsMCqCFnBlZXIwLm9yZzEuZXhhbXBsZS5jb22C 13 | BXBlZXIwgglsb2NhbGhvc3QwCgYIKoZIzj0EAwIDSAAwRQIhAPs/YOkkkh2835Vb 14 | pXtUuQNCi/PlhPhTiFlEdeE56vmmAiBadeHDYBIHkEA10wzr33wS1FpELg18eC5N 15 | 5gtmHzQUBA== 16 | -----END CERTIFICATE----- 17 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICczCCAhmgAwIBAgIRALZ2km4W6KjPQb9rM12Ewb4wCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz 6 | MzE5WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjEub3JnMS5leGFtcGxlLmNv 8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKpNWa4jf/Rk5bpSZqFYteLESkd7 9 | KbrSOoiqLJmYSvM+KjDRPt+/pjLBNKM60tvknTUslU6Jne/7CVx1FpiHjRGjgaIw 10 | gZ8wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD 11 | AjAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIJRQktk29YOMWm9khNuXTYV5M3Bn 12 | N9ANBL9l9045dvn4MDMGA1UdEQQsMCqCFnBlZXIxLm9yZzEuZXhhbXBsZS5jb22C 13 | BXBlZXIxgglsb2NhbGhvc3QwCgYIKoZIzj0EAwIDSAAwRQIhAKjhWT8ZdaYR2Hvx 14 | hPUl3t6gDJmkVuhy2Mxin04XxrUUAiBmBN83NmGoluPHQnvtGQ1BQP/JpY+UCkMR 15 | O0xeuEChjA== 16 | -----END CERTIFICATE----- 17 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICcjCCAhmgAwIBAgIRAKTjFkKbLMrbEP10dpOEqz4wCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz 6 | MzE5WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMi5leGFtcGxlLmNv 8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABMDiCfhksPZRhxpGyowvLu8lQjC6 9 | H4y/SiQuTbhG+ZXK99VRyDDoKzkyzDpUxMco1xvD3gafSDvrXrKlZObN9bOjgaIw 10 | gZ8wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD 11 | AjAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIHu4uj/xHTyM9ZK9QyYGLnfQasSW 12 | PHt65FkoTfvT61qsMDMGA1UdEQQsMCqCFnBlZXIwLm9yZzIuZXhhbXBsZS5jb22C 13 | BXBlZXIwgglsb2NhbGhvc3QwCgYIKoZIzj0EAwIDRwAwRAIgf1MZC8BVgrxO76J+ 14 | aCGntiQsicgU1DPMt5l45jXiEeECIAHHYsIZcV8GW7iyKQevvdXSQ3JC7XgyuPrm 15 | eDhWmPcO 16 | -----END CERTIFICATE----- 17 | -------------------------------------------------------------------------------- /artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICcjCCAhigAwIBAgIQEV3hkn7yJpdb29dDQvTKWDAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz 6 | MTlaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDExZwZWVyMS5vcmcyLmV4YW1wbGUuY29t 8 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEpXRG2CwqI+F0UoMSImo3In9R7lze 9 | S+DuL1pLOjF5s05kVAcH604/9FRI61ujvWp4mYXornB+R1pcQwtolYNzPKOBojCB 10 | nzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC 11 | MAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAge7i6P/EdPIz1kr1DJgYud9BqxJY8 12 | e3rkWShN+9PrWqwwMwYDVR0RBCwwKoIWcGVlcjEub3JnMi5leGFtcGxlLmNvbYIF 13 | cGVlcjGCCWxvY2FsaG9zdDAKBggqhkjOPQQDAgNIADBFAiEAmzFD5Dd4yR5lKy44 14 | Jdz4hy5AtRLQAmhlmLhli46z0r8CIDXFZJ7EwiD3F/jBT6906IFizjr9CD/DtOC9 15 | bxT5JhIN 16 | -----END CERTIFICATE----- 17 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "balance-transfer", 3 | "version": "1.0.0", 4 | "description": "A balance-transfer example node program to demonstrate using node.js SDK APIs", 5 | "main": "app.js", 6 | "scripts": { 7 | "start": "node app.js" 8 | }, 9 | "keywords": [ 10 | "fabric-client sample app", 11 | "balance-transfer node sample", 12 | "v1.0 fabric nodesdk sample" 13 | ], 14 | "engines": { 15 | "node": ">=8.9.4 <9.0", 16 | "npm": ">=5.6.0 <6.0" 17 | }, 18 | "license": "Apache-2.0", 19 | "dependencies": { 20 | "body-parser": "^1.17.1", 21 | "config": "^2.0.1", 22 | "cookie-parser": "^1.4.3", 23 | "cors": "^2.8.3", 24 | "crypto": "^1.0.1", 25 | "express": "^4.15.2", 26 | "express-bearer-token": "^2.1.0", 27 | "express-jwt": "^5.1.0", 28 | "express-session": "^1.15.2", 29 | "fabric-ca-client": "^1.2.0", 30 | "fabric-client": "^1.2.0", 31 | "fs-extra": "^2.0.0", 32 | "images": "^3.0.1", 33 | "jsonwebtoken": "^7.3.0", 34 | "log4js": "^0.6.38", 35 | "mime-types": "^2.1.19", 36 | "moment": "^2.22.2", 37 | "uuid": "^3.3.2" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /artifacts/base.yaml: -------------------------------------------------------------------------------- 1 | # Copyright IBM Corp. All Rights Reserved. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | # 5 | 6 | version: '2' 7 | services: 8 | peer-base: 9 | image: hyperledger/fabric-peer 10 | environment: 11 | - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock 12 | # the following setting starts chaincode containers on the same 13 | # bridge network as the peers 14 | # https://docs.docker.com/compose/networking/ 15 | - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=artifacts_default 16 | - CORE_LOGGING_LEVEL=DEBUG 17 | - CORE_PEER_GOSSIP_USELEADERELECTION=true 18 | - CORE_PEER_GOSSIP_ORGLEADER=false 19 | # The following setting skips the gossip handshake since we are 20 | # are not doing mutual TLS 21 | - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true 22 | - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/crypto/peer/msp 23 | - CORE_PEER_TLS_ENABLED=true 24 | - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/crypto/peer/tls/server.key 25 | - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/crypto/peer/tls/server.crt 26 | - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/crypto/peer/tls/ca.crt 27 | working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer 28 | command: peer node start 29 | volumes: 30 | - /var/run/:/host/var/run/ 31 | -------------------------------------------------------------------------------- /bootstrap_app.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright IBM Corp. All Rights Reserved. 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | # 7 | 8 | function stopContainers(){ 9 | echo 10 | # Stop chaincode containers and images as well 11 | docker rm -f $(docker ps -aq --filter name=dev-peer) > /dev/null 2>&1 12 | docker rmi $(docker images | awk '$1 ~ /dev-peer/ { print $3 }') > /dev/null 2>&1 13 | echo 14 | } 15 | 16 | function restartNetwork() { 17 | echo 18 | #teardown the network and clean the containers and intermediate images 19 | echo "============== Stopping docker containers ==============" 20 | docker-compose -f ./artifacts/docker-compose.yaml down 21 | stopContainers 22 | echo "============== Docker containers have been stopped ==============" 23 | echo 24 | #Cleanup the stores 25 | rm -rf ./fabric-client-kv-org* 26 | 27 | #Start the network 28 | docker-compose -f ./artifacts/docker-compose.yaml up -d 29 | echo 30 | } 31 | 32 | function installNodeModules() { 33 | echo 34 | if [ -d node_modules ]; then 35 | echo "============== node modules installed already =============" 36 | else 37 | echo "============== Installing node modules =============" 38 | npm install 39 | fi 40 | echo 41 | } 42 | 43 | function downloaFabricImages(){ 44 | FABRIC_TAG=1.2.0 45 | FABRIC_IMAGES=$(docker images | grep 1.2.0 | wc -l) 46 | if [ "$FABRIC_IMAGES" != "5" ]; then 47 | echo "============== Downloading Fabric Images ==============" 48 | for image in peer orderer ca ccenv tools; do 49 | docker pull hyperledger/fabric-$image:$FABRIC_TAG 50 | docker tag hyperledger/fabric-$image:$FABRIC_TAG hyperledger/fabric-$image 51 | done 52 | fi 53 | } 54 | 55 | # Download v1.2 docker images 56 | downloaFabricImages 57 | 58 | #Restart the network each time you start application 59 | restartNetwork 60 | 61 | #Install 1.2 node modules 62 | installNodeModules 63 | 64 | # start the node app on port 4000 65 | PORT=4000 node app 66 | -------------------------------------------------------------------------------- /app/query.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2017 IBM All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | var path = require('path'); 17 | var fs = require('fs'); 18 | var util = require('util'); 19 | var hfc = require('fabric-client'); 20 | var helper = require('./helper.js'); 21 | var logger = helper.getLogger('Query'); 22 | 23 | var queryChaincode = async function(peer, channelName, chaincodeName, args, fcn, username, org_name) { 24 | try { 25 | // first setup the client for this org 26 | var client = await helper.getClientForOrg(org_name, username); 27 | logger.debug('Successfully got the fabric client for the organization "%s"', org_name); 28 | var channel = client.getChannel(channelName); 29 | if(!channel) { 30 | let message = util.format('Channel %s was not defined in the connection profile', channelName); 31 | logger.error(message); 32 | throw new Error(message); 33 | } 34 | 35 | // send query 36 | var request = { 37 | targets : [peer], //queryByChaincode allows for multiple targets 38 | chaincodeId: chaincodeName, 39 | fcn: fcn, 40 | args: [args] 41 | }; 42 | logger.info(request); 43 | let response_payloads = await channel.queryByChaincode(request); 44 | if (response_payloads) { 45 | return response_payloads[0].toString('utf8'); 46 | } else { 47 | logger.error('response_payloads is null'); 48 | return 'response_payloads is null'; 49 | } 50 | } catch(error) { 51 | logger.error('Failed to query due to error: ' + error.stack ? error.stack : error); 52 | return error.toString(); 53 | } 54 | }; 55 | 56 | exports.queryChaincode = queryChaincode; 57 | -------------------------------------------------------------------------------- /artifacts/org1.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # 3 | # The network connection profile provides client applications the information about the target 4 | # blockchain network that are necessary for the applications to interact with it. These are all 5 | # knowledge that must be acquired from out-of-band sources. This file provides such a source. 6 | # 7 | name: "balance-transfer-org1" 8 | 9 | # 10 | # Any properties with an "x-" prefix will be treated as application-specific, exactly like how naming 11 | # in HTTP headers or swagger properties work. The SDK will simply ignore these fields and leave 12 | # them for the applications to process. This is a mechanism for different components of an application 13 | # to exchange information that are not part of the standard schema described below. In particular, 14 | # the "x-type" property with the "hlfv1" value example below is used by Hyperledger Composer to 15 | # determine the type of Fabric networks (v0.6 vs. v1.0) it needs to work with. 16 | # 17 | x-type: "hlfv1" 18 | 19 | # 20 | # Describe what the target network is/does. 21 | # 22 | description: "Balance Transfer Network - client definition for Org1" 23 | 24 | # 25 | # Schema version of the content. Used by the SDK to apply the corresponding parsing rules. 26 | # 27 | version: "1.0" 28 | 29 | # 30 | # The client section is SDK-specific. The sample below is for the node.js SDK 31 | # 32 | client: 33 | # Which organization does this application instance belong to? The value must be the name of an org 34 | # defined under "organizations" 35 | organization: Org1 36 | 37 | # Some SDKs support pluggable KV stores, the properties under "credentialStore" 38 | # are implementation specific 39 | credentialStore: 40 | # [Optional]. Specific to FileKeyValueStore.js or similar implementations in other SDKs. Can be others 41 | # if using an alternative impl. For instance, CouchDBKeyValueStore.js would require an object 42 | # here for properties like url, db name, etc. 43 | path: "./fabric-client-kv-org1" 44 | 45 | # [Optional]. Specific to the CryptoSuite implementation. Software-based implementations like 46 | # CryptoSuite_ECDSA_AES.js in node SDK requires a key store. PKCS#11 based implementations does 47 | # not. 48 | cryptoStore: 49 | # Specific to the underlying KeyValueStore that backs the crypto key store. 50 | path: "/tmp/fabric-client-kv-org1" 51 | 52 | # [Optional]. Specific to Composer environment 53 | wallet: wallet-name 54 | -------------------------------------------------------------------------------- /artifacts/org2.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # 3 | # The network connection profile provides client applications the information about the target 4 | # blockchain network that are necessary for the applications to interact with it. These are all 5 | # knowledge that must be acquired from out-of-band sources. This file provides such a source. 6 | # 7 | name: "balance-transfer-org2" 8 | 9 | # 10 | # Any properties with an "x-" prefix will be treated as application-specific, exactly like how naming 11 | # in HTTP headers or swagger properties work. The SDK will simply ignore these fields and leave 12 | # them for the applications to process. This is a mechanism for different components of an application 13 | # to exchange information that are not part of the standard schema described below. In particular, 14 | # the "x-type" property with the "hlfv1" value example below is used by Hyperledger Composer to 15 | # determine the type of Fabric networks (v0.6 vs. v1.0) it needs to work with. 16 | # 17 | x-type: "hlfv1" 18 | 19 | # 20 | # Describe what the target network is/does. 21 | # 22 | description: "Balance Transfer Network - client definition for Org2" 23 | 24 | # 25 | # Schema version of the content. Used by the SDK to apply the corresponding parsing rules. 26 | # 27 | version: "1.0" 28 | 29 | # 30 | # The client section is SDK-specific. The sample below is for the node.js SDK 31 | # 32 | client: 33 | # Which organization does this application instance belong to? The value must be the name of an org 34 | # defined under "organizations" 35 | organization: Org2 36 | 37 | # Some SDKs support pluggable KV stores, the properties under "credentialStore" 38 | # are implementation specific 39 | credentialStore: 40 | # [Optional]. Specific to FileKeyValueStore.js or similar implementations in other SDKs. Can be others 41 | # if using an alternative impl. For instance, CouchDBKeyValueStore.js would require an object 42 | # here for properties like url, db name, etc. 43 | path: "./fabric-client-kv-org2" 44 | 45 | # [Optional]. Specific to the CryptoSuite implementation. Software-based implementations like 46 | # CryptoSuite_ECDSA_AES.js in node SDK requires a key store. PKCS#11 based implementations does 47 | # not. 48 | cryptoStore: 49 | # Specific to the underlying KeyValueStore that backs the crypto key store. 50 | path: "/tmp/fabric-client-kv-org2" 51 | 52 | # [Optional]. Specific to Composer environment 53 | wallet: wallet-name 54 | -------------------------------------------------------------------------------- /app/saveImageTx.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2018 IT People Corporation. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the 'License'); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an 'AS IS' BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | * 16 | * Author: Mohan Venkataraman 17 | * Author: Sandeep Pulluru 18 | * Author: Ratnakar Asara 19 | */ 20 | 21 | 'use strict'; 22 | var path = require('path'); 23 | var helper = require('./helper.js'); 24 | var logger = helper.getLogger('saveImageTx'); 25 | var invoke = require('./invoke-transaction.js'); 26 | 27 | const mime = require('mime-types'); 28 | const crypto = require('crypto'); 29 | const images = require("images"); 30 | const uuidv4 = require('uuid/v4'); 31 | 32 | 33 | var saveImage = async function (peerNames, channelName, chaincodeName, item, username, org_name, res) { 34 | logger.debug(">>> saveImage() ..."); 35 | res.set('Content-Type', 'application/json'); 36 | 37 | let jsonArr = []; 38 | 39 | let imageName = item.itemDetail + "." + mime.extension(item.itemImageType); 40 | let base64Image = item.itemImage.split(';base64,').pop(); 41 | 42 | item.itemImageName = imageName 43 | item.currentOwnerID = username; 44 | item.aesKey = crypto.randomBytes(32).toString('base64'); 45 | item.itemImage = helper.encrypt(item.itemImage, item.aesKey); 46 | item.itemID = uuidv4().toString(); 47 | item.timeStamp = helper.getTimestamp(); 48 | jsonArr.push(JSON.stringify(item)); 49 | 50 | logger.debug(">>> saveImage() : args: %s", jsonArr); 51 | var data = await invoke.invokeChaincode(peerNames, channelName, chaincodeName, jsonArr, item.fcn, username, org_name); 52 | if (data) { 53 | images(Buffer.from(base64Image, 'base64')) 54 | .size(400) 55 | .save(path.join(__dirname , '../public/images', imageName), { 56 | quality: 50 57 | }); 58 | let result = JSON.parse(data); 59 | result.itemImage = helper.decrypt(result.itemImage, result.aesKey); 60 | return result; 61 | } else { 62 | return 'Failed to invoke the transaction ! check the logs for the details'; 63 | } 64 | } 65 | 66 | exports.saveImage = saveImage; -------------------------------------------------------------------------------- /app/create-channel.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2017 IBM All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the 'License'); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an 'AS IS' BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | var util = require('util'); 17 | var fs = require('fs'); 18 | var path = require('path'); 19 | 20 | var helper = require('./helper.js'); 21 | var logger = helper.getLogger('Create-Channel'); 22 | //Attempt to send a request to the orderer with the sendTransaction method 23 | var createChannel = async function(channelName, channelConfigPath, username, orgName) { 24 | logger.debug('\n====== Creating Channel \'' + channelName + '\' ======\n'); 25 | try { 26 | // first setup the client for this org 27 | var client = await helper.getClientForOrg(orgName); 28 | logger.debug('Successfully got the fabric client for the organization "%s"', orgName); 29 | 30 | // read in the envelope for the channel config raw bytes 31 | var envelope = fs.readFileSync(path.join(__dirname, channelConfigPath)); 32 | // extract the channel config bytes from the envelope to be signed 33 | var channelConfig = client.extractChannelConfig(envelope); 34 | 35 | //Acting as a client in the given organization provided with "orgName" param 36 | // sign the channel config bytes as "endorsement", this is required by 37 | // the orderer's channel creation policy 38 | // this will use the admin identity assigned to the client when the connection profile was loaded 39 | let signature = client.signChannelConfig(channelConfig); 40 | 41 | let request = { 42 | config: channelConfig, 43 | signatures: [signature], 44 | name: channelName, 45 | txId: client.newTransactionID(true) // get an admin based transactionID 46 | }; 47 | 48 | // send to orderer 49 | var response = await client.createChannel(request) 50 | logger.debug(' response ::%j', response); 51 | if (response && response.status === 'SUCCESS') { 52 | logger.debug('Successfully created the channel.'); 53 | let response = { 54 | success: true, 55 | message: 'Channel \'' + channelName + '\' created Successfully' 56 | }; 57 | return response; 58 | } else { 59 | logger.error('\n!!!!!!!!! Failed to create the channel \'' + channelName + 60 | '\' !!!!!!!!!\n\n'); 61 | throw new Error('Failed to create the channel \'' + channelName + '\''); 62 | } 63 | } catch (err) { 64 | logger.error('Failed to initialize the channel: ' + err.stack ? err.stack : err); 65 | throw new Error('Failed to initialize the channel: ' + err.toString()); 66 | } 67 | }; 68 | 69 | exports.createChannel = createChannel; 70 | -------------------------------------------------------------------------------- /app/install-chaincode.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2017 IBM All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 'use strict'; 17 | var path = require('path'); 18 | var fs = require('fs'); 19 | var util = require('util'); 20 | var config = require('../config.json'); 21 | var helper = require('./helper.js'); 22 | var logger = helper.getLogger('install-chaincode'); 23 | var tx_id = null; 24 | 25 | var installChaincode = async function(peers, chaincodeName, chaincodePath, 26 | chaincodeVersion, chaincodeType, username, org_name) { 27 | logger.debug('\n\n============ Install chaincode on organizations ============\n'); 28 | helper.setupChaincodeDeploy(); 29 | let error_message = null; 30 | try { 31 | logger.info('Calling peers in organization "%s" to join the channel', org_name); 32 | 33 | // first setup the client for this org 34 | var client = await helper.getClientForOrg(org_name, username); 35 | logger.debug('Successfully got the fabric client for the organization "%s"', org_name); 36 | 37 | tx_id = client.newTransactionID(true); //get an admin transactionID 38 | var request = { 39 | targets: peers, 40 | chaincodePath: chaincodePath, 41 | chaincodeId: chaincodeName, 42 | chaincodeVersion: chaincodeVersion, 43 | chaincodeType: chaincodeType 44 | }; 45 | let results = await client.installChaincode(request); 46 | // the returned object has both the endorsement results 47 | // and the actual proposal, the proposal will be needed 48 | // later when we send a transaction to the orederer 49 | var proposalResponses = results[0]; 50 | var proposal = results[1]; 51 | 52 | // lets have a look at the responses to see if they are 53 | // all good, if good they will also include signatures 54 | // required to be committed 55 | var all_good = true; 56 | for (var i in proposalResponses) { 57 | let one_good = false; 58 | if (proposalResponses && proposalResponses[i].response && 59 | proposalResponses[i].response.status === 200) { 60 | one_good = true; 61 | logger.info('install proposal was good'); 62 | } else { 63 | logger.error('install proposal was bad %j',proposalResponses.toJSON()); 64 | } 65 | all_good = all_good & one_good; 66 | } 67 | if (all_good) { 68 | logger.info('Successfully sent install Proposal and received ProposalResponse'); 69 | } else { 70 | error_message = 'Failed to send install Proposal or receive valid response. Response null or status is not 200' 71 | logger.error(error_message); 72 | } 73 | } catch(error) { 74 | logger.error('Failed to install due to error: ' + error.stack ? error.stack : error); 75 | error_message = error.toString(); 76 | } 77 | 78 | if (!error_message) { 79 | let message = util.format('Successfully install chaincode'); 80 | logger.info(message); 81 | // build a response to send back to the REST caller 82 | let response = { 83 | success: true, 84 | message: message 85 | }; 86 | return response; 87 | } else { 88 | let message = util.format('Failed to install due to:%s',error_message); 89 | logger.error(message); 90 | throw new Error(message); 91 | } 92 | }; 93 | exports.installChaincode = installChaincode; 94 | -------------------------------------------------------------------------------- /app/join-channel.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2017 IBM All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the 'License'); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an 'AS IS' BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | var util = require('util'); 17 | var path = require('path'); 18 | var fs = require('fs'); 19 | 20 | var helper = require('./helper.js'); 21 | var logger = helper.getLogger('Join-Channel'); 22 | 23 | /* 24 | * Have an organization join a channel 25 | */ 26 | var joinChannel = async function(channel_name, peers, username, org_name) { 27 | logger.debug('\n\n============ Join Channel start ============\n') 28 | var error_message = null; 29 | var all_eventhubs = []; 30 | try { 31 | logger.info('Calling peers in organization "%s" to join the channel', org_name); 32 | 33 | // first setup the client for this org 34 | var client = await helper.getClientForOrg(org_name, username); 35 | logger.debug('Successfully got the fabric client for the organization "%s"', org_name); 36 | var channel = client.getChannel(channel_name); 37 | if(!channel) { 38 | let message = util.format('Channel %s was not defined in the connection profile', channel_name); 39 | logger.error(message); 40 | throw new Error(message); 41 | } 42 | 43 | // next step is to get the genesis_block from the orderer, 44 | // the starting point for the channel that we want to join 45 | let request = { 46 | txId : client.newTransactionID(true) //get an admin based transactionID 47 | }; 48 | let genesis_block = await channel.getGenesisBlock(request); 49 | 50 | // tell each peer to join and wait for the event hub of each peer to tell us 51 | // that the channel has been created on each peer 52 | var promises = []; 53 | let join_request = { 54 | targets: peers, //using the peer names which only is allowed when a connection profile is loaded 55 | txId: client.newTransactionID(true), //get an admin based transactionID 56 | block: genesis_block 57 | }; 58 | let join_promise = channel.joinChannel(join_request); 59 | promises.push(join_promise); 60 | let results = await Promise.all(promises); 61 | logger.debug(util.format('Join Channel R E S P O N S E : %j', results)); 62 | 63 | // lets check the results of sending to the peers which is 64 | // last in the results array 65 | let peers_results = results.pop(); 66 | // then each peer results 67 | for(let i in peers_results) { 68 | let peer_result = peers_results[i]; 69 | if(peer_result.response && peer_result.response.status == 200) { 70 | logger.info('Successfully joined peer to the channel %s',channel_name); 71 | } else { 72 | let message = util.format('Failed to joined peer to the channel %s',channel_name); 73 | error_message = message; 74 | logger.error(message); 75 | } 76 | } 77 | } catch(error) { 78 | logger.error('Failed to join channel due to error: ' + error.stack ? error.stack : error); 79 | error_message = error.toString(); 80 | } 81 | 82 | // need to shutdown open event streams 83 | all_eventhubs.forEach((eh) => { 84 | eh.disconnect(); 85 | }); 86 | 87 | if (!error_message) { 88 | let message = util.format( 89 | 'Successfully joined peers in organization %s to the channel:%s', 90 | org_name, channel_name); 91 | logger.info(message); 92 | // build a response to send back to the REST caller 93 | let response = { 94 | success: true, 95 | message: message 96 | }; 97 | return response; 98 | } else { 99 | let message = util.format('Failed to join all peers to channel. cause:%s',error_message); 100 | logger.error(message); 101 | throw new Error(message); 102 | } 103 | }; 104 | exports.joinChannel = joinChannel; 105 | -------------------------------------------------------------------------------- /artifacts/channel/cryptogen.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright IBM Corp. All Rights Reserved. 3 | # 4 | # SPDX-License-Identifier: Apache-2.0 5 | # 6 | # --------------------------------------------------------------------------- 7 | # "OrdererOrgs" - Definition of organizations managing orderer nodes 8 | # --------------------------------------------------------------------------- 9 | OrdererOrgs: 10 | # --------------------------------------------------------------------------- 11 | # Orderer 12 | # --------------------------------------------------------------------------- 13 | - Name: Orderer 14 | Domain: example.com 15 | 16 | # --------------------------------------------------------------------------- 17 | # "Specs" - See PeerOrgs below for complete description 18 | # --------------------------------------------------------------------------- 19 | Specs: 20 | - Hostname: orderer 21 | 22 | # --------------------------------------------------------------------------- 23 | # "PeerOrgs" - Definition of organizations managing peer nodes 24 | # --------------------------------------------------------------------------- 25 | PeerOrgs: 26 | # --------------------------------------------------------------------------- 27 | # Org1 28 | # --------------------------------------------------------------------------- 29 | - Name: Org1 30 | Domain: org1.example.com 31 | 32 | # --------------------------------------------------------------------------- 33 | # "CA" 34 | # --------------------------------------------------------------------------- 35 | # Uncomment this section to enable the explicit definition of the CA for this 36 | # organization. This entry is a Spec. See "Specs" section below for details. 37 | # --------------------------------------------------------------------------- 38 | CA: 39 | Hostname: ca # implicitly ca.org1.example.com 40 | 41 | # --------------------------------------------------------------------------- 42 | # "Specs" 43 | # --------------------------------------------------------------------------- 44 | # Uncomment this section to enable the explicit definition of hosts in your 45 | # configuration. Most users will want to use Template, below 46 | # 47 | # Specs is an array of Spec entries. Each Spec entry consists of two fields: 48 | # - Hostname: (Required) The desired hostname, sans the domain. 49 | # - CommonName: (Optional) Specifies the template or explicit override for 50 | # the CN. By default, this is the template: 51 | # 52 | # "{{.Hostname}}.{{.Domain}}" 53 | # 54 | # which obtains its values from the Spec.Hostname and 55 | # Org.Domain, respectively. 56 | # - SANS: (Optional) Specifies one or more Subject Alternative Names 57 | # the be set in the resulting x509. Accepts template 58 | # variables {{.Hostname}}, {{.Domain}}, {{.CommonName}} 59 | # NOTE: Two implicit entries are created for you: 60 | # - {{ .CommonName }} 61 | # - {{ .Hostname }} 62 | # --------------------------------------------------------------------------- 63 | # Specs: 64 | # - Hostname: foo # implicitly "foo.org1.example.com" 65 | # CommonName: foo27.org5.example.com # overrides Hostname-based FQDN set above 66 | # SANS: 67 | # - "bar.{{.Domain}}" 68 | # - "altfoo.{{.Domain}}" 69 | # - "{{.Hostname}}.org6.net" 70 | # - Hostname: bar 71 | # - Hostname: baz 72 | 73 | # --------------------------------------------------------------------------- 74 | # "Template" 75 | # --------------------------------------------------------------------------- 76 | # Allows for the definition of 1 or more hosts that are created sequentially 77 | # from a template. By default, this looks like "peer%d" from 0 to Count-1. 78 | # You may override the number of nodes (Count), the starting index (Start) 79 | # or the template used to construct the name (Hostname). 80 | # 81 | # Note: Template and Specs are not mutually exclusive. You may define both 82 | # sections and the aggregate nodes will be created for you. Take care with 83 | # name collisions 84 | # --------------------------------------------------------------------------- 85 | Template: 86 | Count: 2 87 | # Start: 5 88 | # Hostname: {{.Prefix}}{{.Index}} # default 89 | SANS: 90 | - "localhost" 91 | 92 | # --------------------------------------------------------------------------- 93 | # "Users" 94 | # --------------------------------------------------------------------------- 95 | # Count: The number of user accounts _in addition_ to Admin 96 | # --------------------------------------------------------------------------- 97 | Users: 98 | Count: 1 99 | 100 | # --------------------------------------------------------------------------- 101 | # Org2: See "Org1" for full specification 102 | # --------------------------------------------------------------------------- 103 | - Name: Org2 104 | Domain: org2.example.com 105 | CA: 106 | Hostname: ca # implicitly ca.org1.example.com 107 | 108 | Template: 109 | Count: 2 110 | SANS: 111 | - "localhost" 112 | Users: 113 | Count: 1 114 | -------------------------------------------------------------------------------- /quicktest.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright IBM Corp. All Rights Reserved. 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | # 7 | 8 | jq --version > /dev/null 2>&1 9 | if [ $? -ne 0 ]; then 10 | echo "Please Install 'jq' https://stedolan.github.io/jq/ to execute this script" 11 | echo 12 | exit 1 13 | fi 14 | 15 | starttime=$(date +%s) 16 | 17 | # Language defaults to "golang" 18 | LANGUAGE="golang" 19 | CC_SRC_PATH="github.com/auction" 20 | 21 | echo "POST request Enroll on Org1 ..." 22 | echo 23 | ORG1_TOKEN=$(curl -s -X POST \ 24 | http://localhost:4000/users \ 25 | -H "content-type: application/x-www-form-urlencoded" \ 26 | -d 'username=Jim&orgName=Org1') 27 | echo $ORG1_TOKEN 28 | ORG1_TOKEN=$(echo $ORG1_TOKEN | jq ".token" | sed "s/\"//g") 29 | echo 30 | echo "ORG1 token is $ORG1_TOKEN" 31 | echo 32 | echo "POST request Enroll on Org2 ..." 33 | echo 34 | ORG2_TOKEN=$(curl -s -X POST \ 35 | http://localhost:4000/users \ 36 | -H "content-type: application/x-www-form-urlencoded" \ 37 | -d 'username=Barry&orgName=Org2') 38 | echo $ORG2_TOKEN 39 | ORG2_TOKEN=$(echo $ORG2_TOKEN | jq ".token" | sed "s/\"//g") 40 | echo 41 | echo "ORG2 token is $ORG2_TOKEN" 42 | echo 43 | echo 44 | echo "POST request Create channel ..." 45 | echo 46 | curl -s -X POST \ 47 | http://localhost:4000/channels \ 48 | -H "authorization: Bearer $ORG1_TOKEN" \ 49 | -H "content-type: application/json" \ 50 | -d '{ 51 | "channelName":"mychannel", 52 | "channelConfigPath":"../artifacts/channel/mychannel.tx" 53 | }' 54 | echo 55 | echo 56 | sleep 5 57 | echo "POST request Join channel on Org1" 58 | echo 59 | curl -s -X POST \ 60 | http://localhost:4000/channels/mychannel/peers \ 61 | -H "authorization: Bearer $ORG1_TOKEN" \ 62 | -H "content-type: application/json" \ 63 | -d '{ 64 | "peers": ["peer0.org1.example.com","peer1.org1.example.com"] 65 | }' 66 | echo 67 | echo 68 | 69 | echo "POST request Join channel on Org2" 70 | echo 71 | curl -s -X POST \ 72 | http://localhost:4000/channels/mychannel/peers \ 73 | -H "authorization: Bearer $ORG2_TOKEN" \ 74 | -H "content-type: application/json" \ 75 | -d '{ 76 | "peers": ["peer0.org2.example.com","peer1.org2.example.com"] 77 | }' 78 | echo 79 | echo 80 | 81 | echo "POST Install chaincode on Org1" 82 | echo 83 | curl -s -X POST \ 84 | http://localhost:4000/chaincodes \ 85 | -H "authorization: Bearer $ORG1_TOKEN" \ 86 | -H "content-type: application/json" \ 87 | -d "{ 88 | \"peers\": [\"peer0.org1.example.com\",\"peer1.org1.example.com\"], 89 | \"chaincodeName\":\"mycc\", 90 | \"chaincodePath\":\"$CC_SRC_PATH\", 91 | \"chaincodeType\": \"$LANGUAGE\", 92 | \"chaincodeVersion\":\"v0\" 93 | }" 94 | echo 95 | echo 96 | 97 | echo "POST Install chaincode on Org2" 98 | echo 99 | curl -s -X POST \ 100 | http://localhost:4000/chaincodes \ 101 | -H "authorization: Bearer $ORG2_TOKEN" \ 102 | -H "content-type: application/json" \ 103 | -d "{ 104 | \"peers\": [\"peer0.org2.example.com\",\"peer1.org2.example.com\"], 105 | \"chaincodeName\":\"mycc\", 106 | \"chaincodePath\":\"$CC_SRC_PATH\", 107 | \"chaincodeType\": \"$LANGUAGE\", 108 | \"chaincodeVersion\":\"v0\" 109 | }" 110 | echo 111 | echo 112 | 113 | echo "POST instantiate chaincode on peer1 of Org1" 114 | echo 115 | curl -s -X POST \ 116 | http://localhost:4000/channels/mychannel/chaincodes \ 117 | -H "authorization: Bearer $ORG1_TOKEN" \ 118 | -H "content-type: application/json" \ 119 | -d "{ 120 | \"chaincodeName\":\"mycc\", 121 | \"chaincodeVersion\":\"v0\", 122 | \"chaincodeType\": \"$LANGUAGE\", 123 | \"args\":[\"a\",\"100\",\"b\",\"200\"] 124 | }" 125 | echo 126 | echo 127 | 128 | # "itemImage":"data:image/jpeg;base64,$(base64 -w 0 images/Monalisa.jpg)", 129 | 130 | saveImageOnBlockchain() { 131 | cat < setTimeout(resolve, sleep_time_ms)); 30 | } 31 | 32 | async function getClientForOrg (userorg, username) { 33 | logger.debug('getClientForOrg - ****** START %s %s', userorg, username) 34 | // get a fabric client loaded with a connection profile for this org 35 | let config = '-connection-profile-path'; 36 | 37 | // build a client context and load it with a connection profile 38 | // lets only load the network settings and save the client for later 39 | let client = hfc.loadFromConfig(hfc.getConfigSetting('network'+config)); 40 | 41 | // This will load a connection profile over the top of the current one one 42 | // since the first one did not have a client section and the following one does 43 | // nothing will actually be replaced. 44 | // This will also set an admin identity because the organization defined in the 45 | // client section has one defined 46 | client.loadFromConfig(hfc.getConfigSetting(userorg+config)); 47 | 48 | // this will create both the state store and the crypto store based 49 | // on the settings in the client section of the connection profile 50 | await client.initCredentialStores(); 51 | 52 | // The getUserContext call tries to get the user from persistence. 53 | // If the user has been saved to persistence then that means the user has 54 | // been registered and enrolled. If the user is found in persistence 55 | // the call will then assign the user to the client object. 56 | if(username) { 57 | let user = await client.getUserContext(username, true); 58 | if(!user) { 59 | throw new Error(util.format('User was not found :', username)); 60 | } else { 61 | logger.debug('User %s was found to be registered and enrolled', username); 62 | } 63 | } 64 | logger.debug('getClientForOrg - ****** END %s %s \n\n', userorg, username) 65 | 66 | return client; 67 | } 68 | 69 | var getRegisteredUser = async function(username, userOrg, isJson) { 70 | try { 71 | var client = await getClientForOrg(userOrg); 72 | logger.debug('Successfully initialized the credential stores'); 73 | // client can now act as an agent for organization Org1 74 | // first check to see if the user is already enrolled 75 | var user = await client.getUserContext(username, true); 76 | if (user && user.isEnrolled()) { 77 | logger.info('Successfully loaded member from persistence'); 78 | } else { 79 | // user was not enrolled, so we will need an admin user object to register 80 | logger.info('User %s was not enrolled, so we will need an admin user object to register',username); 81 | var admins = hfc.getConfigSetting('admins'); 82 | let adminUserObj = await client.setUserContext({username: admins[0].username, password: admins[0].secret}); 83 | let caClient = client.getCertificateAuthority(); 84 | let secret = await caClient.register({ 85 | enrollmentID: username, 86 | affiliation: userOrg.toLowerCase() + '.department1' 87 | }, adminUserObj); 88 | logger.debug('Successfully got the secret for user %s',username); 89 | user = await client.setUserContext({username:username, password:secret}); 90 | logger.debug('Successfully enrolled username %s and setUserContext on the client object', username); 91 | } 92 | if(user && user.isEnrolled) { 93 | if (isJson && isJson === true) { 94 | var response = { 95 | success: true, 96 | secret: user._enrollmentSecret, 97 | message: username + ' enrolled Successfully', 98 | }; 99 | return response; 100 | } 101 | } else { 102 | throw new Error('User was not enrolled '); 103 | } 104 | } catch(error) { 105 | logger.error('Failed to get registered user: %s with error: %s', username, error.toString()); 106 | return 'failed '+error.toString(); 107 | } 108 | 109 | }; 110 | 111 | 112 | var setupChaincodeDeploy = function() { 113 | process.env.GOPATH = path.join(__dirname, hfc.getConfigSetting('CC_SRC_PATH')); 114 | }; 115 | 116 | var getLogger = function(moduleName) { 117 | var logger = log4js.getLogger(moduleName); 118 | logger.setLevel('DEBUG'); 119 | return logger; 120 | }; 121 | 122 | var encrypt = function (text, masterkey) { 123 | // random initialization vector 124 | const iv = crypto.randomBytes(16); 125 | 126 | // random salt 127 | const salt = crypto.randomBytes(64); 128 | 129 | // derive key: 32 byte key length - in assumption the masterkey is a cryptographic and NOT a password there is no need for 130 | // a large number of iterations. It may can replaced by HKDF 131 | const key = crypto.pbkdf2Sync(masterkey, salt, 2145, 32, 'sha512'); 132 | 133 | // AES 256 GCM Mode 134 | const cipher = crypto.createCipheriv('aes-256-gcm', key, iv); 135 | 136 | // encrypt the given text 137 | const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]); 138 | 139 | // extract the auth tag 140 | const tag = cipher.getAuthTag(); 141 | 142 | // generate output 143 | return Buffer.concat([salt, iv, tag, encrypted]).toString('base64'); 144 | }; 145 | 146 | var decrypt = function (data, masterkey) { 147 | // base64 decoding 148 | const bData = new Buffer(data, 'base64'); 149 | 150 | // convert data to buffers 151 | const salt = bData.slice(0, 64); 152 | const iv = bData.slice(64, 80); 153 | const tag = bData.slice(80, 96); 154 | const text = bData.slice(96); 155 | 156 | // derive key using; 32 byte key length 157 | const key = crypto.pbkdf2Sync(masterkey, salt, 2145, 32, 'sha512'); 158 | 159 | // AES 256 GCM Mode 160 | const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv); 161 | decipher.setAuthTag(tag); 162 | 163 | // encrypt the given text 164 | const decrypted = decipher.update(text, 'binary', 'utf8') + decipher.final('utf8'); 165 | 166 | return decrypted; 167 | }; 168 | 169 | const config = require('config'); 170 | const moment = require('moment'); 171 | 172 | var getTimestamp = function () { 173 | return moment.utc().format(config.dateFormat); 174 | } 175 | exports.getClientForOrg = getClientForOrg; 176 | exports.getLogger = getLogger; 177 | exports.setupChaincodeDeploy = setupChaincodeDeploy; 178 | exports.getRegisteredUser = getRegisteredUser; 179 | exports.encrypt = encrypt; 180 | exports.decrypt = decrypt; 181 | exports.getTimestamp = getTimestamp; 182 | -------------------------------------------------------------------------------- /app/invoke-transaction.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2017 IBM All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 'use strict'; 17 | var util = require('util'); 18 | var helper = require('./helper.js'); 19 | var logger = helper.getLogger('invoke-chaincode'); 20 | 21 | var invokeChaincode = async function(peerNames, channelName, chaincodeName, args, fcn, username, org_name) { 22 | logger.debug(util.format('\n============ invoke transaction on channel %s ============\n', channelName)); 23 | var error_message = null; 24 | var tx_id_string = null; 25 | try { 26 | // first setup the client for this org 27 | var client = await helper.getClientForOrg(org_name, username); 28 | logger.debug('Successfully got the fabric client for the organization "%s"', org_name); 29 | var channel = client.getChannel(channelName); 30 | if(!channel) { 31 | let message = util.format('Channel %s was not defined in the connection profile', channelName); 32 | logger.error(message); 33 | throw new Error(message); 34 | } 35 | var tx_id = client.newTransactionID(); 36 | // will need the transaction ID string for the event registration later 37 | tx_id_string = tx_id.getTransactionID(); 38 | 39 | // send proposal to endorser 40 | var request = { 41 | targets: [peerNames], 42 | chaincodeId: chaincodeName, 43 | fcn: fcn, 44 | args: args, 45 | chainId: channelName, 46 | txId: tx_id 47 | }; 48 | 49 | let results = await channel.sendTransactionProposal(request); 50 | 51 | // the returned object has both the endorsement results 52 | // and the actual proposal, the proposal will be needed 53 | // later when we send a transaction to the orderer 54 | var proposalResponses = results[0]; 55 | var proposal = results[1]; 56 | 57 | // lets have a look at the responses to see if they are 58 | // all good, if good they will also include signatures 59 | // required to be committed 60 | var all_good = true; 61 | for (var i in proposalResponses) { 62 | let one_good = false; 63 | if (proposalResponses && proposalResponses[i].response && 64 | proposalResponses[i].response.status === 200) { 65 | one_good = true; 66 | logger.info('invoke chaincode proposal was good'); 67 | } else { 68 | logger.error('invoke chaincode proposal was bad'); 69 | } 70 | all_good = all_good & one_good; 71 | } 72 | 73 | if (all_good) { 74 | logger.info(util.format( 75 | 'Successfully sent Proposal and received ProposalResponse: Status - %s, message - "%s", metadata - "%s", endorsement signature: %s', 76 | proposalResponses[0].response.status, proposalResponses[0].response.message, 77 | proposalResponses[0].response.payload, proposalResponses[0].endorsement.signature)); 78 | 79 | // wait for the channel-based event hub to tell us 80 | // that the commit was good or bad on each peer in our organization 81 | var promises = []; 82 | let event_hubs = channel.getChannelEventHubsForOrg(); 83 | event_hubs.forEach((eh) => { 84 | logger.debug('invokeEventPromise - setting up event'); 85 | let invokeEventPromise = new Promise((resolve, reject) => { 86 | let event_timeout = setTimeout(() => { 87 | let message = 'REQUEST_TIMEOUT:' + eh.getPeerAddr(); 88 | logger.error(message); 89 | eh.disconnect(); 90 | }, 3000); 91 | eh.registerTxEvent(tx_id_string, (tx, code, block_num) => { 92 | logger.info('The chaincode invoke chaincode transaction has been committed on peer %s',eh.getPeerAddr()); 93 | logger.info('Transaction %s has status of %s in blocl %s', tx, code, block_num); 94 | clearTimeout(event_timeout); 95 | 96 | if (code !== 'VALID') { 97 | let message = util.format('The invoke chaincode transaction was invalid, code:%s',code); 98 | logger.error(message); 99 | reject(new Error(message)); 100 | } else { 101 | let message = 'The invoke chaincode transaction was valid.'; 102 | logger.info(message); 103 | resolve(message); 104 | } 105 | }, (err) => { 106 | clearTimeout(event_timeout); 107 | logger.error(err); 108 | reject(err); 109 | }, 110 | // the default for 'unregister' is true for transaction listeners 111 | // so no real need to set here, however for 'disconnect' 112 | // the default is false as most event hubs are long running 113 | // in this use case we are using it only once 114 | {unregister: true, disconnect: true} 115 | ); 116 | eh.connect(); 117 | }); 118 | promises.push(invokeEventPromise); 119 | }); 120 | 121 | var orderer_request = { 122 | txId: tx_id, 123 | proposalResponses: proposalResponses, 124 | proposal: proposal 125 | }; 126 | var sendPromise = channel.sendTransaction(orderer_request); 127 | // put the send to the orderer last so that the events get registered and 128 | // are ready for the orderering and committing 129 | promises.push(sendPromise); 130 | let results = await Promise.all(promises); 131 | logger.debug(util.format('------->>> R E S P O N S E : %j', results)); 132 | let response = results.pop(); // orderer results are last in the results 133 | if (response.status === 'SUCCESS') { 134 | logger.info('Successfully sent transaction to the orderer.'); 135 | } else { 136 | error_message = util.format('Failed to order the transaction. Error code: %s',response.status); 137 | logger.debug(error_message); 138 | } 139 | 140 | // now see what each of the event hubs reported 141 | for(let i in results) { 142 | let event_hub_result = results[i]; 143 | let event_hub = event_hubs[i]; 144 | logger.debug('Event results for event hub :%s',event_hub.getPeerAddr()); 145 | if(typeof event_hub_result === 'string') { 146 | logger.debug(event_hub_result); 147 | } else { 148 | if(!error_message) error_message = event_hub_result.toString(); 149 | logger.debug(event_hub_result.toString()); 150 | } 151 | } 152 | } else { 153 | error_message = util.format('Failed to send Proposal and receive all good ProposalResponse'); 154 | logger.debug(error_message); 155 | } 156 | } catch (error) { 157 | logger.error('Failed to invoke due to error: ' + error.stack ? error.stack : error); 158 | error_message = error.toString(); 159 | } 160 | 161 | if (!error_message) { 162 | let message = util.format( 163 | 'Successfully invoked the chaincode %s to the channel \'%s\' for transaction ID: %s', 164 | org_name, channelName, tx_id_string); 165 | logger.info(message); 166 | return proposalResponses[0].response.payload; 167 | } else { 168 | let message = util.format('Failed to invoke chaincode. cause:%s',error_message); 169 | logger.error(message); 170 | // throw new Error(message); 171 | return message; 172 | } 173 | }; 174 | 175 | exports.invokeChaincode = invokeChaincode; 176 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WARNING: This repository is no longer maintained :warning: 2 | 3 | > This repository will not be updated. The repository will be kept available in read-only mode. 4 | 5 | 6 | # Securing Artwork using Blockchain Digital Certificates 7 | 8 | This code pattern is a sample auction Node.js based application that demonstrates storing base64 encoded and encrypted images on a Blockchain ledger and retrieving the same. This application launches Hyperledger Fabric network and then starts the application as a REST API server built on top of NodeSDK APIs. 9 | 10 | **Auction Blockchain Application Credits**: Mohan Venkataraman, Sandeep Pulluru and Ratnakar Asara 11 | 12 | **Disclaimer**: The image used in this sample demo has been downloaded from publicly available images on the internet, and the copyright belongs to the respective owners. The usage here is strictly for non-commercial purposes as sample data. We recommend that users create their own sample data as appropriate. All details used in the sample data are fictitious. The information provided in this `README.md` is subject to change. Also this is based out of fabric-sample balance-transfer example. 13 | 14 | When the reader has completed this code pattern, he or she will understand how to: 15 | 16 | * Set up a Blockchain network 17 | * Generate a base64 encrypted image and store it on the blockchain ledger 18 | * Query chaincode to retrieve image and store it in a public folder 19 | 20 | 21 | 22 |

23 | 24 |

25 | 26 | ## Flow 27 | 28 | 1. Teardown any existing networks, remove any existing containers or images lying around 29 | 2. Launch the Hyperledger Fabric network 30 | 3. Launch the Node.js application (Rest Server wrapper of top of the NodeSDK API) 31 | 4. Create the channel myChannel 32 | 5. Install and instantiate the auction chaincode 33 | 6. Invoke a transaction where the Node.js app transforms a base 64 encrypted image into a string format 34 | 7. Store the encrypted image image on the Blockchain ledger 35 | 8. Query ledger to get the image data by its imageID and save the image as a Thumbnail in a public folder 36 | 37 | 38 | ## Prerequisites 39 | * [Docker](https://www.docker.com/): 17.09.x or higher 40 | * [Docker Compose](https://docs.docker.com/compose/): 1.16.1 or higher 41 | * [jq](https://stedolan.github.io/jq/) 42 | * [Hyperledger Fabric SDK](https://fabric-sdk-node.github.io/): Enables backend to connect to IBM Blockchain service 43 | * [Node.js packages](https://docs.docker.com/compose/): If expecting to run this application locally, please continue by installing [Node.js](https://docs.docker.com/compose/) runtime and NPM. Currently the Hyperledger Fabric SDK only appears to work with node v8.9.0+, but [is not yet supported](https://github.com/hyperledger/fabric-sdk-node#build-and-test) on node v9.0+. If your system requires newer versions of node for other projects, we'd suggest using [nvm](https://github.com/creationix/nvm) to easily switch between node versions. We did so with the following commands 44 | ``` 45 | curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash 46 | # Place next three lines in ~/.bash_profile 47 | export NVM_DIR="$HOME/.nvm" 48 | [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm 49 | [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion 50 | nvm install v8.9.0 51 | nvm use 8.9.0 52 | ``` 53 | 54 | 55 | ## Included components 56 | * [Hyperledger Fabric v1.1](https://hyperledger-fabric.readthedocs.io) Hyperledger Fabric is a platform for distributed ledger solutions, underpinned by a modular architecture delivering high degrees of confidentiality, resiliency, flexibility and scalability. 57 | 58 | 59 | ## Featured technologies 60 | * [Hyperledger Node.js SDK](https://github.com/hyperledger/fabric-sdk-node) 61 | * [jq](https://stedolan.github.io/jq/): a lightweight and flexible command-line JSON processor 62 | * [Docker](https://www.docker.com/): 17.09.x or higher 63 | * [Docker Compose](https://docs.docker.com/compose/): 1.16.1 or higher 64 | * [Node.js](https://docs.docker.com/compose/): v8.9.0 or higher 65 | 66 | ## Steps 67 | 1. [Clone the repo](#1-clone-the-repo) 68 | 2. [Launch Hyperledger Fabric Network and Node App](#2-launch-hyperledger-fabric-network-and-node-app) 69 | 3. [Create the Network Channel and Invoke a Transaction](#3-Create-the-Network-Channel-and-Invoke-a-Transaction) 70 | 71 | 72 | ### Step 1. Clone the repo 73 | 74 | Clone the `SecuringArt-using-Blockchain-DigitalCertificates` repo locally. In a terminal, run: 75 | 76 | ``` 77 | git clone https://github.com/IBM/SecuringArt-using-Blockchain-DigitalCertificates 78 | ``` 79 | 80 | ### Step 2. Launch Hyperledger Fabric Network and Node App 81 | 82 | In one terminal launch hyperledger fabric network and Node.js application (a REST Server wrapper on top of Fabric NodeSDK api) with the following command 83 | ``` 84 | cd SecuringArt-using-Blockchain-DigitalCertificates 85 | ./bootstrap_app.sh 86 | ``` 87 | The above script **bootstrap_app.sh** performs the following actions: 88 | * remove any old *docker* images 89 | * *Downloads* fabric images 90 | * restarts the *Fabric network* 91 | * *Installs* required node modules 92 | * *Starts* the node application on Port 4000 93 | 94 | **NOTE:** You may be tempted to run `http://localhost:4000` at this point - please do not do that; otherwise you will get an `UnauthorizedError: No authorization token was found` error. After running the `bootstrap_app.sh` command, immediately go to [Create the Network Channel and Invoke a Transaction](#3-Create-the-Network-Channel-and-Invoke-a-Transaction) and run the `quicketest.sh` command. 95 | 96 | ### Step 3. Create the Network Channel and Invoke a Transaction 97 | In another terminal issue the following command from auction directory. 98 | ``` 99 | ./quicktest.sh 100 | ``` 101 | The above script **quicktest.sh** performs the following actions: 102 | * creates a *channel* named **mychannel** & and all the peers on the network *join*s the channel 103 | * *Installs* & *Instantiates* auction chaincode 104 | * send an *Invoke transaction*. where Node.js app generates base64 encrypted image in to a string format and sends it to chaincode, then *auction chaincode* stores the image on the Blockchain ledger of the channel *mychannel*. 105 | * Query chaincode to get the Image data using the imageID, the image will be saved as Thumbnail and saved in `public/images` folder. 106 | 107 | You should see similar results from running `quicktest.sh`: 108 |

109 | 110 |

111 | 112 | 113 | * For all the image processing & conversion refer to the Node.js code [here](https://github.com/ChainyardLabs/auction/blob/master/app/saveImageTx.js) 114 | 115 | * Storing an image using chaincode, refer the code snippet [here](https://github.com/ChainyardLabs/auction/blob/master/artifacts/src/github.com/auction/auction.go#L138-L168) 116 | 117 | * Please check youtube video available here: https://goo.gl/jH1uCQ 118 | 119 | 120 | # Links 121 | 122 | * [IBM Blockchain - Marbles demo](https://github.com/IBM-Blockchain/marbles) 123 | 124 | 125 | # Learn more 126 | 127 | * **Blockchain Code Patterns**: Enjoyed this Code Pattern? Check out our other [Blockchain Code Patterns](https://developer.ibm.com/technologies/blockchain/) 128 | 129 | * **Blockchain 101**: Learn why IBM believes that blockchain can transform businesses, industries – and even the world. [Blockchain 101](https://developer.ibm.com/technologies/blockchain/) 130 | 131 | # License 132 | This code pattern is licensed under the Apache Software License, Version 2. Separate third party code objects invoked within this code pattern are licensed by their respective providers pursuant to their own separate licenses. Contributions are subject to the [Developer Certificate of Origin, Version 1.1 (DCO)](https://developercertificate.org/) and the [Apache Software License, Version 2](https://www.apache.org/licenses/LICENSE-2.0.txt). 133 | 134 | [Apache Software License (ASL) FAQ](https://www.apache.org/foundation/license-faq.html#WhatDoesItMEAN) 135 | -------------------------------------------------------------------------------- /app/instantiate-chaincode.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2017 IBM All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 'use strict'; 17 | var path = require('path'); 18 | var fs = require('fs'); 19 | var util = require('util'); 20 | var hfc = require('fabric-client'); 21 | var helper = require('./helper.js'); 22 | var logger = helper.getLogger('instantiate-chaincode'); 23 | 24 | var instantiateChaincode = async function(peers, channelName, chaincodeName, chaincodeVersion, functionName, chaincodeType, args, username, org_name) { 25 | logger.debug('\n\n============ Instantiate chaincode on channel ' + channelName + 26 | ' ============\n'); 27 | var error_message = null; 28 | 29 | try { 30 | // first setup the client for this org 31 | var client = await helper.getClientForOrg(org_name, username); 32 | logger.debug('Successfully got the fabric client for the organization "%s"', org_name); 33 | var channel = client.getChannel(channelName); 34 | if(!channel) { 35 | let message = util.format('Channel %s was not defined in the connection profile', channelName); 36 | logger.error(message); 37 | throw new Error(message); 38 | } 39 | var tx_id = client.newTransactionID(true); // Get an admin based transactionID 40 | // An admin based transactionID will 41 | // indicate that admin identity should 42 | // be used to sign the proposal request. 43 | // will need the transaction ID string for the event registration later 44 | var deployId = tx_id.getTransactionID(); 45 | 46 | // send proposal to endorser 47 | var request = { 48 | targets : peers, 49 | chaincodeId: chaincodeName, 50 | chaincodeType: chaincodeType, 51 | chaincodeVersion: chaincodeVersion, 52 | args: args, 53 | txId: tx_id 54 | }; 55 | 56 | if (functionName) 57 | request.fcn = functionName; 58 | 59 | let results = await channel.sendInstantiateProposal(request, 60000); //instantiate takes much longer 60 | 61 | // the returned object has both the endorsement results 62 | // and the actual proposal, the proposal will be needed 63 | // later when we send a transaction to the orderer 64 | var proposalResponses = results[0]; 65 | var proposal = results[1]; 66 | 67 | // lets have a look at the responses to see if they are 68 | // all good, if good they will also include signatures 69 | // required to be committed 70 | var all_good = true; 71 | for (var i in proposalResponses) { 72 | let one_good = false; 73 | if (proposalResponses && proposalResponses[i].response && 74 | proposalResponses[i].response.status === 200) { 75 | one_good = true; 76 | logger.info('instantiate proposal was good'); 77 | } else { 78 | logger.error('instantiate proposal was bad'); 79 | } 80 | all_good = all_good & one_good; 81 | } 82 | 83 | if (all_good) { 84 | logger.info(util.format( 85 | 'Successfully sent Proposal and received ProposalResponse: Status - %s, message - "%s", metadata - "%s", endorsement signature: %s', 86 | proposalResponses[0].response.status, proposalResponses[0].response.message, 87 | proposalResponses[0].response.payload, proposalResponses[0].endorsement.signature)); 88 | 89 | // wait for the channel-based event hub to tell us that the 90 | // instantiate transaction was committed on the peer 91 | var promises = []; 92 | let event_hubs = channel.getChannelEventHubsForOrg(); 93 | logger.debug('found %s eventhubs for this organization %s',event_hubs.length, org_name); 94 | event_hubs.forEach((eh) => { 95 | let instantiateEventPromise = new Promise((resolve, reject) => { 96 | logger.debug('instantiateEventPromise - setting up event'); 97 | let event_timeout = setTimeout(() => { 98 | let message = 'REQUEST_TIMEOUT:' + eh.getPeerAddr(); 99 | logger.error(message); 100 | eh.disconnect(); 101 | }, 60000); 102 | eh.registerTxEvent(deployId, (tx, code, block_num) => { 103 | logger.info('The chaincode instantiate transaction has been committed on peer %s',eh.getPeerAddr()); 104 | logger.info('Transaction %s has status of %s in blocl %s', tx, code, block_num); 105 | clearTimeout(event_timeout); 106 | 107 | if (code !== 'VALID') { 108 | let message = until.format('The chaincode instantiate transaction was invalid, code:%s',code); 109 | logger.error(message); 110 | reject(new Error(message)); 111 | } else { 112 | let message = 'The chaincode instantiate transaction was valid.'; 113 | logger.info(message); 114 | resolve(message); 115 | } 116 | }, (err) => { 117 | clearTimeout(event_timeout); 118 | logger.error(err); 119 | reject(err); 120 | }, 121 | // the default for 'unregister' is true for transaction listeners 122 | // so no real need to set here, however for 'disconnect' 123 | // the default is false as most event hubs are long running 124 | // in this use case we are using it only once 125 | {unregister: true, disconnect: true} 126 | ); 127 | eh.connect(); 128 | }); 129 | promises.push(instantiateEventPromise); 130 | }); 131 | 132 | var orderer_request = { 133 | txId: tx_id, // must include the transaction id so that the outbound 134 | // transaction to the orderer will be signed by the admin 135 | // id as was the proposal above, notice that transactionID 136 | // generated above was based on the admin id not the current 137 | // user assigned to the 'client' instance. 138 | proposalResponses: proposalResponses, 139 | proposal: proposal 140 | }; 141 | var sendPromise = channel.sendTransaction(orderer_request); 142 | // put the send to the orderer last so that the events get registered and 143 | // are ready for the orderering and committing 144 | promises.push(sendPromise); 145 | let results = await Promise.all(promises); 146 | logger.debug(util.format('------->>> R E S P O N S E : %j', results)); 147 | let response = results.pop(); // orderer results are last in the results 148 | if (response.status === 'SUCCESS') { 149 | logger.info('Successfully sent transaction to the orderer.'); 150 | } else { 151 | error_message = util.format('Failed to order the transaction. Error code: %s',response.status); 152 | logger.debug(error_message); 153 | } 154 | 155 | // now see what each of the event hubs reported 156 | for(let i in results) { 157 | let event_hub_result = results[i]; 158 | let event_hub = event_hubs[i]; 159 | logger.debug('Event results for event hub :%s',event_hub.getPeerAddr()); 160 | if(typeof event_hub_result === 'string') { 161 | logger.debug(event_hub_result); 162 | } else { 163 | if(!error_message) error_message = event_hub_result.toString(); 164 | logger.debug(event_hub_result.toString()); 165 | } 166 | } 167 | } else { 168 | error_message = util.format('Failed to send Proposal and receive all good ProposalResponse'); 169 | logger.debug(error_message); 170 | } 171 | } catch (error) { 172 | logger.error('Failed to send instantiate due to error: ' + error.stack ? error.stack : error); 173 | error_message = error.toString(); 174 | } 175 | 176 | if (!error_message) { 177 | let message = util.format( 178 | 'Successfully instantiate chaingcode in organization %s to the channel \'%s\'', 179 | org_name, channelName); 180 | logger.info(message); 181 | // build a response to send back to the REST caller 182 | let response = { 183 | success: true, 184 | message: message 185 | }; 186 | return response; 187 | } else { 188 | let message = util.format('Failed to instantiate. cause:%s',error_message); 189 | logger.error(message); 190 | throw new Error(message); 191 | } 192 | }; 193 | exports.instantiateChaincode = instantiateChaincode; 194 | -------------------------------------------------------------------------------- /artifacts/network-config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # 3 | # The network connection profile provides client applications the information about the target 4 | # blockchain network that are necessary for the applications to interact with it. These are all 5 | # knowledge that must be acquired from out-of-band sources. This file provides such a source. 6 | # 7 | name: "balance-transfer" 8 | 9 | # 10 | # Any properties with an "x-" prefix will be treated as application-specific, exactly like how naming 11 | # in HTTP headers or swagger properties work. The SDK will simply ignore these fields and leave 12 | # them for the applications to process. This is a mechanism for different components of an application 13 | # to exchange information that are not part of the standard schema described below. In particular, 14 | # the "x-type" property with the "hlfv1" value example below is used by Hyperledger Composer to 15 | # determine the type of Fabric networks (v0.6 vs. v1.0) it needs to work with. 16 | # 17 | x-type: "hlfv1" 18 | 19 | # 20 | # Describe what the target network is/does. 21 | # 22 | description: "Balance Transfer Network" 23 | 24 | # 25 | # Schema version of the content. Used by the SDK to apply the corresponding parsing rules. 26 | # 27 | version: "1.0" 28 | 29 | # 30 | # The client section will be added on a per org basis see org1.yaml and org2.yaml 31 | # 32 | #client: 33 | 34 | # 35 | # [Optional]. But most apps would have this section so that channel objects can be constructed 36 | # based on the content below. If an app is creating channels, then it likely will not need this 37 | # section. 38 | # 39 | channels: 40 | # name of the channel 41 | mychannel: 42 | # Required. list of orderers designated by the application to use for transactions on this 43 | # channel. This list can be a result of access control ("org1" can only access "ordererA"), or 44 | # operational decisions to share loads from applications among the orderers. The values must 45 | # be "names" of orgs defined under "organizations/peers" 46 | orderers: 47 | - orderer.example.com 48 | 49 | # Required. list of peers from participating orgs 50 | peers: 51 | peer0.org1.example.com: 52 | # [Optional]. will this peer be sent transaction proposals for endorsement? The peer must 53 | # have the chaincode installed. The app can also use this property to decide which peers 54 | # to send the chaincode install request. Default: true 55 | endorsingPeer: true 56 | 57 | # [Optional]. will this peer be sent query proposals? The peer must have the chaincode 58 | # installed. The app can also use this property to decide which peers to send the 59 | # chaincode install request. Default: true 60 | chaincodeQuery: true 61 | 62 | # [Optional]. will this peer be sent query proposals that do not require chaincodes, like 63 | # queryBlock(), queryTransaction(), etc. Default: true 64 | ledgerQuery: true 65 | 66 | # [Optional]. will this peer be the target of the SDK's listener registration? All peers can 67 | # produce events but the app typically only needs to connect to one to listen to events. 68 | # Default: true 69 | eventSource: true 70 | 71 | peer1.org1.example.com: 72 | endorsingPeer: false 73 | chaincodeQuery: true 74 | ledgerQuery: true 75 | eventSource: false 76 | 77 | peer0.org2.example.com: 78 | endorsingPeer: true 79 | chaincodeQuery: true 80 | ledgerQuery: true 81 | eventSource: true 82 | 83 | peer1.org2.example.com: 84 | endorsingPeer: false 85 | chaincodeQuery: true 86 | ledgerQuery: true 87 | eventSource: false 88 | 89 | # [Optional]. what chaincodes are expected to exist on this channel? The application can use 90 | # this information to validate that the target peers are in the expected state by comparing 91 | # this list with the query results of getInstalledChaincodes() and getInstantiatedChaincodes() 92 | chaincodes: 93 | # the format follows the "cannonical name" of chaincodes by fabric code 94 | - mycc:v0 95 | 96 | # 97 | # list of participating organizations in this network 98 | # 99 | organizations: 100 | Org1: 101 | mspid: Org1MSP 102 | 103 | peers: 104 | - peer0.org1.example.com 105 | - peer1.org1.example.com 106 | 107 | # [Optional]. Certificate Authorities issue certificates for identification purposes in a Fabric based 108 | # network. Typically certificates provisioning is done in a separate process outside of the 109 | # runtime network. Fabric-CA is a special certificate authority that provides a REST APIs for 110 | # dynamic certificate management (enroll, revoke, re-enroll). The following section is only for 111 | # Fabric-CA servers. 112 | certificateAuthorities: 113 | - ca-org1 114 | 115 | # [Optional]. If the application is going to make requests that are reserved to organization 116 | # administrators, including creating/updating channels, installing/instantiating chaincodes, it 117 | # must have access to the admin identity represented by the private key and signing certificate. 118 | # Both properties can be the PEM string or local path to the PEM file. Note that this is mainly for 119 | # convenience in development mode, production systems should not expose sensitive information 120 | # this way. The SDK should allow applications to set the org admin identity via APIs, and only use 121 | # this route as an alternative when it exists. 122 | adminPrivateKey: 123 | path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8_sk 124 | signedCert: 125 | path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem 126 | 127 | # the profile will contain public information about organizations other than the one it belongs to. 128 | # These are necessary information to make transaction lifecycles work, including MSP IDs and 129 | # peers with a public URL to send transaction proposals. The file will not contain private 130 | # information reserved for members of the organization, such as admin key and certificate, 131 | # fabric-ca registrar enroll ID and secret, etc. 132 | Org2: 133 | mspid: Org2MSP 134 | peers: 135 | - peer0.org2.example.com 136 | - peer1.org2.example.com 137 | certificateAuthorities: 138 | - ca-org2 139 | adminPrivateKey: 140 | path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/1995b11d6573ed3be52fcd7a5fa477bc0f183e1f5f398c8281d0ce7c2c75a076_sk 141 | signedCert: 142 | path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem 143 | 144 | # 145 | # List of orderers to send transaction and channel create/update requests to. For the time 146 | # being only one orderer is needed. If more than one is defined, which one get used by the 147 | # SDK is implementation specific. Consult each SDK's documentation for its handling of orderers. 148 | # 149 | orderers: 150 | orderer.example.com: 151 | url: grpcs://localhost:7050 152 | 153 | # these are standard properties defined by the gRPC library 154 | # they will be passed in as-is to gRPC client constructor 155 | grpcOptions: 156 | ssl-target-name-override: orderer.example.com 157 | 158 | tlsCACerts: 159 | path: artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt 160 | 161 | # 162 | # List of peers to send various requests to, including endorsement, query 163 | # and event listener registration. 164 | # 165 | peers: 166 | peer0.org1.example.com: 167 | # this URL is used to send endorsement and query requests 168 | url: grpcs://localhost:7051 169 | 170 | grpcOptions: 171 | ssl-target-name-override: peer0.org1.example.com 172 | tlsCACerts: 173 | path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt 174 | 175 | peer1.org1.example.com: 176 | url: grpcs://localhost:7056 177 | grpcOptions: 178 | ssl-target-name-override: peer1.org1.example.com 179 | tlsCACerts: 180 | path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt 181 | 182 | peer0.org2.example.com: 183 | url: grpcs://localhost:8051 184 | grpcOptions: 185 | ssl-target-name-override: peer0.org2.example.com 186 | tlsCACerts: 187 | path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt 188 | 189 | peer1.org2.example.com: 190 | url: grpcs://localhost:8056 191 | grpcOptions: 192 | ssl-target-name-override: peer1.org2.example.com 193 | tlsCACerts: 194 | path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt 195 | 196 | # 197 | # Fabric-CA is a special kind of Certificate Authority provided by Hyperledger Fabric which allows 198 | # certificate management to be done via REST APIs. Application may choose to use a standard 199 | # Certificate Authority instead of Fabric-CA, in which case this section would not be specified. 200 | # 201 | certificateAuthorities: 202 | ca-org1: 203 | url: https://localhost:7054 204 | # the properties specified under this object are passed to the 'http' client verbatim when 205 | # making the request to the Fabric-CA server 206 | httpOptions: 207 | verify: false 208 | tlsCACerts: 209 | path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem 210 | 211 | # Fabric-CA supports dynamic user enrollment via REST APIs. A "root" user, a.k.a registrar, is 212 | # needed to enroll and invoke new users. 213 | registrar: 214 | - enrollId: admin 215 | enrollSecret: adminpw 216 | # [Optional] The optional name of the CA. 217 | caName: ca-org1 218 | 219 | ca-org2: 220 | url: https://localhost:8054 221 | httpOptions: 222 | verify: false 223 | tlsCACerts: 224 | path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem 225 | registrar: 226 | - enrollId: admin 227 | enrollSecret: adminpw 228 | # [Optional] The optional name of the CA. 229 | caName: ca-org2 230 | -------------------------------------------------------------------------------- /artifacts/network-config-aws.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # 3 | # The network connection profile provides client applications the information about the target 4 | # blockchain network that are necessary for the applications to interact with it. These are all 5 | # knowledge that must be acquired from out-of-band sources. This file provides such a source. 6 | # 7 | name: "balance-transfer" 8 | 9 | # 10 | # Any properties with an "x-" prefix will be treated as application-specific, exactly like how naming 11 | # in HTTP headers or swagger properties work. The SDK will simply ignore these fields and leave 12 | # them for the applications to process. This is a mechanism for different components of an application 13 | # to exchange information that are not part of the standard schema described below. In particular, 14 | # the "x-type" property with the "hlfv1" value example below is used by Hyperledger Composer to 15 | # determine the type of Fabric networks (v0.6 vs. v1.0) it needs to work with. 16 | # 17 | x-type: "hlfv1" 18 | 19 | # 20 | # Describe what the target network is/does. 21 | # 22 | description: "Balance Transfer Network" 23 | 24 | # 25 | # Schema version of the content. Used by the SDK to apply the corresponding parsing rules. 26 | # 27 | version: "1.0" 28 | 29 | # 30 | # The client section will be added on a per org basis see org1.yaml and org2.yaml 31 | # 32 | #client: 33 | 34 | # 35 | # [Optional]. But most apps would have this section so that channel objects can be constructed 36 | # based on the content below. If an app is creating channels, then it likely will not need this 37 | # section. 38 | # 39 | channels: 40 | # name of the channel 41 | mychannel: 42 | # Required. list of orderers designated by the application to use for transactions on this 43 | # channel. This list can be a result of access control ("org1" can only access "ordererA"), or 44 | # operational decisions to share loads from applications among the orderers. The values must 45 | # be "names" of orgs defined under "organizations/peers" 46 | orderers: 47 | - orderer.example.com 48 | 49 | # Required. list of peers from participating orgs 50 | peers: 51 | peer0.org1.example.com: 52 | # [Optional]. will this peer be sent transaction proposals for endorsement? The peer must 53 | # have the chaincode installed. The app can also use this property to decide which peers 54 | # to send the chaincode install request. Default: true 55 | endorsingPeer: true 56 | 57 | # [Optional]. will this peer be sent query proposals? The peer must have the chaincode 58 | # installed. The app can also use this property to decide which peers to send the 59 | # chaincode install request. Default: true 60 | chaincodeQuery: true 61 | 62 | # [Optional]. will this peer be sent query proposals that do not require chaincodes, like 63 | # queryBlock(), queryTransaction(), etc. Default: true 64 | ledgerQuery: true 65 | 66 | # [Optional]. will this peer be the target of the SDK's listener registration? All peers can 67 | # produce events but the app typically only needs to connect to one to listen to events. 68 | # Default: true 69 | eventSource: true 70 | 71 | peer1.org1.example.com: 72 | endorsingPeer: false 73 | chaincodeQuery: true 74 | ledgerQuery: true 75 | eventSource: false 76 | 77 | peer0.org2.example.com: 78 | endorsingPeer: true 79 | chaincodeQuery: true 80 | ledgerQuery: true 81 | eventSource: true 82 | 83 | peer1.org2.example.com: 84 | endorsingPeer: false 85 | chaincodeQuery: true 86 | ledgerQuery: true 87 | eventSource: false 88 | 89 | # [Optional]. what chaincodes are expected to exist on this channel? The application can use 90 | # this information to validate that the target peers are in the expected state by comparing 91 | # this list with the query results of getInstalledChaincodes() and getInstantiatedChaincodes() 92 | chaincodes: 93 | # the format follows the "cannonical name" of chaincodes by fabric code 94 | - mycc:v0 95 | 96 | # 97 | # list of participating organizations in this network 98 | # 99 | organizations: 100 | Org1: 101 | mspid: Org1MSP 102 | 103 | peers: 104 | - peer0.org1.example.com 105 | - peer1.org1.example.com 106 | 107 | # [Optional]. Certificate Authorities issue certificates for identification purposes in a Fabric based 108 | # network. Typically certificates provisioning is done in a separate process outside of the 109 | # runtime network. Fabric-CA is a special certificate authority that provides a REST APIs for 110 | # dynamic certificate management (enroll, revoke, re-enroll). The following section is only for 111 | # Fabric-CA servers. 112 | certificateAuthorities: 113 | - ca-org1 114 | 115 | # [Optional]. If the application is going to make requests that are reserved to organization 116 | # administrators, including creating/updating channels, installing/instantiating chaincodes, it 117 | # must have access to the admin identity represented by the private key and signing certificate. 118 | # Both properties can be the PEM string or local path to the PEM file. Note that this is mainly for 119 | # convenience in development mode, production systems should not expose sensitive information 120 | # this way. The SDK should allow applications to set the org admin identity via APIs, and only use 121 | # this route as an alternative when it exists. 122 | adminPrivateKey: 123 | path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8_sk 124 | signedCert: 125 | path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem 126 | 127 | # the profile will contain public information about organizations other than the one it belongs to. 128 | # These are necessary information to make transaction lifecycles work, including MSP IDs and 129 | # peers with a public URL to send transaction proposals. The file will not contain private 130 | # information reserved for members of the organization, such as admin key and certificate, 131 | # fabric-ca registrar enroll ID and secret, etc. 132 | Org2: 133 | mspid: Org2MSP 134 | peers: 135 | - peer0.org2.example.com 136 | - peer1.org2.example.com 137 | certificateAuthorities: 138 | - ca-org2 139 | adminPrivateKey: 140 | path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/1995b11d6573ed3be52fcd7a5fa477bc0f183e1f5f398c8281d0ce7c2c75a076_sk 141 | signedCert: 142 | path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem 143 | 144 | # 145 | # List of orderers to send transaction and channel create/update requests to. For the time 146 | # being only one orderer is needed. If more than one is defined, which one get used by the 147 | # SDK is implementation specific. Consult each SDK's documentation for its handling of orderers. 148 | # 149 | orderers: 150 | orderer.example.com: 151 | url: grpcs://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7050 152 | 153 | # these are standard properties defined by the gRPC library 154 | # they will be passed in as-is to gRPC client constructor 155 | grpcOptions: 156 | ssl-target-name-override: orderer.example.com 157 | 158 | tlsCACerts: 159 | path: artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt 160 | 161 | # 162 | # List of peers to send various requests to, including endorsement, query 163 | # and event listener registration. 164 | # 165 | peers: 166 | peer0.org1.example.com: 167 | # this URL is used to send endorsement and query requests 168 | url: grpcs://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7051 169 | 170 | # this URL is used to connect the EventHub and registering event listeners 171 | eventUrl: grpcs://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7053 172 | 173 | grpcOptions: 174 | ssl-target-name-override: peer0.org1.example.com 175 | tlsCACerts: 176 | path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt 177 | 178 | peer1.org1.example.com: 179 | url: grpcs://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7056 180 | eventUrl: grpcs://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7058 181 | grpcOptions: 182 | ssl-target-name-override: peer1.org1.example.com 183 | tlsCACerts: 184 | path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt 185 | 186 | peer0.org2.example.com: 187 | url: grpcs://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:8051 188 | eventUrl: grpcs://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:8053 189 | grpcOptions: 190 | ssl-target-name-override: peer0.org2.example.com 191 | tlsCACerts: 192 | path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt 193 | 194 | peer1.org2.example.com: 195 | url: grpcs://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:8056 196 | eventUrl: grpcs://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:8058 197 | grpcOptions: 198 | ssl-target-name-override: peer1.org2.example.com 199 | tlsCACerts: 200 | path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt 201 | 202 | # 203 | # Fabric-CA is a special kind of Certificate Authority provided by Hyperledger Fabric which allows 204 | # certificate management to be done via REST APIs. Application may choose to use a standard 205 | # Certificate Authority instead of Fabric-CA, in which case this section would not be specified. 206 | # 207 | certificateAuthorities: 208 | ca-org1: 209 | url: https://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7054 210 | # the properties specified under this object are passed to the 'http' client verbatim when 211 | # making the request to the Fabric-CA server 212 | httpOptions: 213 | verify: false 214 | tlsCACerts: 215 | path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem 216 | 217 | # Fabric-CA supports dynamic user enrollment via REST APIs. A "root" user, a.k.a registrar, is 218 | # needed to enroll and invoke new users. 219 | registrar: 220 | - enrollId: admin 221 | enrollSecret: adminpw 222 | # [Optional] The optional name of the CA. 223 | caName: ca-org1 224 | 225 | ca-org2: 226 | url: https://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:8054 227 | httpOptions: 228 | verify: false 229 | tlsCACerts: 230 | path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem 231 | registrar: 232 | - enrollId: admin 233 | enrollSecret: adminpw 234 | # [Optional] The optional name of the CA. 235 | caName: ca-org2 236 | -------------------------------------------------------------------------------- /artifacts/src/github.com/auction/auction.go: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2018 IT People Corporation. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the 'License'); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an 'AS IS' BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | * 16 | * Author: Mohan Venkataraman 17 | * Author: Sandeep Pulluru 18 | * Author: Ratnakar Asara 19 | */ 20 | 21 | package main 22 | 23 | import ( 24 | "encoding/json" 25 | "errors" 26 | "fmt" 27 | "strconv" 28 | 29 | "github.com/hyperledger/fabric/core/chaincode/shim" 30 | pb "github.com/hyperledger/fabric/protos/peer" 31 | ) 32 | 33 | var logger = shim.NewLogger("example_cc0") 34 | 35 | var isInit = false 36 | 37 | // AuctionChaincode - Chaincode implementation 38 | // ============================================ 39 | type AuctionChaincode struct { 40 | funcMap map[string]InvokeFunc 41 | } 42 | 43 | type InvokeFunc func(stub shim.ChaincodeStubInterface, args []string) pb.Response 44 | 45 | // Constant for All function name that will be called from invoke 46 | // ============================================================== 47 | const ( 48 | SAVE_IMAGE string = "saveImage" 49 | GET_ITEM_BY_ID string = "getImageByID" 50 | ) 51 | 52 | ///////////////////////////////////////////////////// 53 | const ( 54 | IMAGE string = "IMAGE" 55 | ) 56 | 57 | // Item - Record of the Asset (Inventory) 58 | // Includes Description, title, certificate of authenticity or image whatever..idea is to checkin a image and store it 59 | // in encrypted form 60 | type Item struct { 61 | ItemID string `json:"itemID,required"` 62 | DocType string `json:"docType"` 63 | ItemDesc string `json:"itemDescription"` 64 | ItemDetail string `json:"itemDetail"` // Could included details such as who created the Art work if item is a Painting 65 | ItemDate string `json:"itemDate"` 66 | ItemType string `json:"itemType"` 67 | ItemSubject string `json:"itemSubject"` 68 | ItemMedia string `json:"itemMedia"` 69 | ItemSize string `json:"itemSize"` 70 | ItemStatus string `json:"itemStatus"` 71 | ItemImage string `json:"itemImage"` 72 | ItemImageName string `json:"itemImageName"` // Item Subject + Extension 73 | AESKey string `json:"aesKey"` // This is generated by the AES Algorithms 74 | ItemImageType string `json:"itemImageType"` // should be used to regenerate the appropriate image type 75 | ItemBasePrice string `json:"itemBasePrice"` // Reserve Price at Auction must be greater than this price 76 | CurrentOwnerID string `json:"currentOwnerID,required"` // This is validated for a user registered record 77 | TimeStamp string `json:"timeStamp"` // This is the time stamp 78 | } 79 | 80 | // initMaps - Map all the Functions here for Invoke 81 | // ================================================ 82 | func (t *AuctionChaincode) initMaps() { 83 | t.funcMap = make(map[string]InvokeFunc) 84 | t.funcMap[SAVE_IMAGE] = saveImage 85 | t.funcMap[GET_ITEM_BY_ID] = getImageByID 86 | } 87 | 88 | // Init - Initialize Chaincode at Deploy Time 89 | // ========================================== 90 | func (t *AuctionChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { 91 | logger.Info("########### Init ###########") 92 | t.initMaps() 93 | isInit = true 94 | logger.SetLevel(shim.LogDebug) 95 | logger.Debug("AuctionChaincode Init") 96 | return getSuccessResponse("Succesfully Initiated Auction Chaincode") 97 | } 98 | 99 | // Invoke -Invoke Chaincode functions as requested by the Invoke Function 100 | // ====================================================================== 101 | func (t *AuctionChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { 102 | //Temporay fix if the initialization not done on the specific peer do it before Invoke a method 103 | if !isInit { 104 | t.initMaps() 105 | isInit = true 106 | } 107 | function, args := stub.GetFunctionAndParameters() 108 | logger.Infof("\n########### Invoke %s ###########\n", function) 109 | f, ok := t.funcMap[function] 110 | if ok { 111 | return f(stub, args) 112 | } 113 | 114 | logger.Errorf("Invalid function name %s", function) 115 | return getErrorResponse(fmt.Sprintf("Invalid function %s", function)) 116 | } 117 | 118 | // getImageByID - Get Item Details by Item ID 119 | // ========================================== 120 | func getImageByID(stub shim.ChaincodeStubInterface, args []string) pb.Response { 121 | logger.Debugf("Arguments for getImageByID : %s", args[0]) 122 | 123 | // Get the Auction Item Information 124 | auctionImageBytes, err := queryObject(stub, IMAGE, []string{args[0]}) 125 | if err != nil { 126 | return getErrorResponse("Failed to query if Auction Item exists") 127 | } 128 | if auctionImageBytes == nil { 129 | return getErrorResponse("Auction Item does not exist") 130 | } 131 | return shim.Success(auctionImageBytes) 132 | } 133 | 134 | // saveImage - creates a record of the Asset, store into chaincode state 135 | // ===================================================================== 136 | func saveImage(stub shim.ChaincodeStubInterface, args []string) pb.Response { 137 | logger.Debug("Arguments for saveImage : %s", args[0]) 138 | 139 | if len(args) != 1 { 140 | return getErrorResponse("Incorrect number of arguments specified. Expecting 1") 141 | } 142 | 143 | auctionImage := &Item{} 144 | err := jsonToObject([]byte(args[0]), auctionImage) 145 | 146 | if err != nil { 147 | return getErrorResponse("Failed to convert arguments to a Image object") 148 | } 149 | 150 | auctionImageBytes, err := queryObject(stub, IMAGE, []string{auctionImage.ItemID}) 151 | if err != nil { 152 | return getErrorResponse("Failed to query Image") 153 | } 154 | if auctionImageBytes != nil { 155 | return getErrorResponse("Image already exists") 156 | } 157 | 158 | auctionImage.ItemStatus = "INITIAL" 159 | auctionImageBytes, err = objectToJSON(auctionImage) 160 | err = updateObject(stub, IMAGE, []string{auctionImage.ItemID}, auctionImageBytes) 161 | if err != nil { 162 | return getErrorResponse("Unable to create Auction Item") 163 | } 164 | 165 | return shim.Success(auctionImageBytes) 166 | } 167 | 168 | // queryObject - Query a User Object by Object Name and Key 169 | // This has to be a full key and should return only one unique object 170 | // ================================================================== 171 | func queryObject(stub shim.ChaincodeStubInterface, objectType string, keys []string) ([]byte, error) { 172 | // Check number of keys 173 | err := verifyAtLeastOneKeyIsPresent(keys) 174 | if err != nil { 175 | return nil, err 176 | } 177 | 178 | compoundKey, _ := stub.CreateCompositeKey(objectType, keys) 179 | logger.Debugf("queryObject() : Compound Key : %s", compoundKey) 180 | 181 | objBytes, err := stub.GetState(compoundKey) 182 | if err != nil { 183 | return nil, err 184 | } 185 | 186 | return objBytes, nil 187 | } 188 | 189 | // updateObject - Replace current data with replacement 190 | // ==================================================== 191 | func updateObject(stub shim.ChaincodeStubInterface, objectType string, keys []string, objectData []byte) error { 192 | // Check number of keys 193 | err := verifyAtLeastOneKeyIsPresent(keys) 194 | if err != nil { 195 | return err 196 | } 197 | 198 | // Convert keys to compound key 199 | compositeKey, _ := stub.CreateCompositeKey(objectType, keys) 200 | 201 | // Add Object JSON to state 202 | err = stub.PutState(compositeKey, objectData) 203 | if err != nil { 204 | logger.Errorf("updateObject() : Error inserting Object into State Database %s", err) 205 | return err 206 | } 207 | logger.Debugf("updateObject() : Successfully updated record of type %s", objectType) 208 | 209 | return nil 210 | } 211 | 212 | func main() { 213 | logger.SetLevel(shim.LogDebug) 214 | logger.Info("Auction: main(): Init ") 215 | err := shim.Start(new(AuctionChaincode)) 216 | if err != nil { 217 | logger.Errorf("Auction: main(): Error starting Auction chaincode: %s", err) 218 | } 219 | } 220 | 221 | func init() { 222 | logger.Info("Called Init Method,Changing log Level : ", shim.LogDebug) 223 | logger.SetLevel(shim.LogDebug) 224 | } 225 | 226 | // Response - Object to store Response Status and Message 227 | // ======================================================= 228 | type Response struct { 229 | Status string `json:"status"` 230 | Message string `json:"message"` 231 | } 232 | 233 | // getSuccessResponse - Create Success Response and return back to the calling application 234 | // ======================================================================================= 235 | func getSuccessResponse(message string) pb.Response { 236 | objResponse := Response{Status: "200", Message: message} 237 | logger.Info("getSuccessResponse: Called For: ", objResponse) 238 | response, err := json.Marshal(objResponse) 239 | if err != nil { 240 | logger.Errorf(fmt.Sprintf("Invalid function %s", err)) 241 | } 242 | return shim.Success(response) 243 | } 244 | 245 | // getErrorResponse - Create Error Response and return back to the calling application 246 | // =================================================================================== 247 | func getErrorResponse(message string) pb.Response { 248 | objResponse := Response{Status: "500", Message: message} 249 | logger.Info("getErrorResponse: Called For: ", objResponse) 250 | response, err := json.Marshal(objResponse) 251 | if err != nil { 252 | logger.Errorf(fmt.Sprintf("Invalid function %s", err)) 253 | } 254 | return shim.Success(response) 255 | } 256 | 257 | ///////// Utility Methods ///////// 258 | 259 | // jsonToObject (Serialize) : Unmarshalls a JSON into an object 260 | // ============================================================ 261 | func jsonToObject(data []byte, object interface{}) error { 262 | if err := json.Unmarshal([]byte(data), object); err != nil { 263 | logger.Errorf("Unmarshal failed : %s ", err.Error()) //SCOMCONV004E 264 | return err 265 | } 266 | return nil 267 | } 268 | 269 | // objectToJSON (Deserialize) : Marshalls an object into a JSON 270 | // ============================================================= 271 | func objectToJSON(object interface{}) ([]byte, error) { 272 | var byteArray []byte 273 | var err error 274 | 275 | if byteArray, err = json.Marshal(object); err != nil { 276 | logger.Errorf("Marshal failed : %s ", err.Error()) 277 | return nil, err 278 | } 279 | 280 | if len(byteArray) == 0 { 281 | return nil, fmt.Errorf(("failed to convert object")) 282 | } 283 | return byteArray, nil 284 | } 285 | 286 | // verifyAtLeastOneKeyIsPresent - This function verifies if the number of key 287 | // provided is at least 1 and 288 | // < the max keys defined for the Object 289 | // =========================================================================== 290 | func verifyAtLeastOneKeyIsPresent(args []string) error { 291 | // Check number of keys 292 | nKeys := len(args) 293 | 294 | if nKeys < 1 { 295 | err := fmt.Sprintf("verifyAtLeastOneKeyIsPresent() Failed: Atleast 1 Key must be needed : nKeys : %s", strconv.Itoa(nKeys)) 296 | logger.Debugf("verifyAtLeastOneKeyIsPresent() Failed: Atleast 1 Key must be needed : nKeys : %s", strconv.Itoa(nKeys)) 297 | return errors.New(err) 298 | } 299 | 300 | return nil 301 | } 302 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2017 IBM All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the 'License'); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an 'AS IS' BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 'use strict'; 17 | var log4js = require('log4js'); 18 | var logger = log4js.getLogger('SampleWebApp'); 19 | var express = require('express'); 20 | var session = require('express-session'); 21 | var cookieParser = require('cookie-parser'); 22 | var bodyParser = require('body-parser'); 23 | var http = require('http'); 24 | var util = require('util'); 25 | var app = express(); 26 | var expressJWT = require('express-jwt'); 27 | var jwt = require('jsonwebtoken'); 28 | var bearerToken = require('express-bearer-token'); 29 | var cors = require('cors'); 30 | 31 | require('./config.js'); 32 | var hfc = require('fabric-client'); 33 | 34 | var helper = require('./app/helper.js'); 35 | var createChannel = require('./app/create-channel.js'); 36 | var join = require('./app/join-channel.js'); 37 | var install = require('./app/install-chaincode.js'); 38 | var instantiate = require('./app/instantiate-chaincode.js'); 39 | var invoke = require('./app/saveImageTx.js'); 40 | var query = require('./app/query.js'); 41 | var host = process.env.HOST || hfc.getConfigSetting('host'); 42 | var port = process.env.PORT || hfc.getConfigSetting('port'); 43 | /////////////////////////////////////////////////////////////////////////////// 44 | //////////////////////////////// SET CONFIGURATONS //////////////////////////// 45 | /////////////////////////////////////////////////////////////////////////////// 46 | app.options('*', cors()); 47 | app.use(cors()); 48 | //support parsing of application/json type post data 49 | app.use(bodyParser.json({limit: '10mb', extended: true})); 50 | //support parsing of application/x-www-form-urlencoded post data 51 | app.use(bodyParser.urlencoded({limit: '10mb', extended: true})); 52 | // set secret variable 53 | app.set('secret', 'thisismysecret'); 54 | app.use(expressJWT({ 55 | secret: 'thisismysecret' 56 | }).unless({ 57 | path: ['/users'] 58 | })); 59 | app.use(bearerToken()); 60 | app.use(function(req, res, next) { 61 | logger.debug(' ------>>>>>> new request for %s',req.originalUrl); 62 | if (req.originalUrl.indexOf('/users') >= 0) { 63 | return next(); 64 | } 65 | 66 | var token = req.token; 67 | jwt.verify(token, app.get('secret'), function(err, decoded) { 68 | if (err) { 69 | res.send({ 70 | success: false, 71 | message: 'Failed to authenticate token. Make sure to include the ' + 72 | 'token returned from /users call in the authorization header ' + 73 | ' as a Bearer token' 74 | }); 75 | return; 76 | } else { 77 | // add the decoded user name and org name to the request object 78 | // for the downstream code to use 79 | req.username = decoded.username; 80 | req.orgname = decoded.orgName; 81 | logger.debug(util.format('Decoded from JWT token: username - %s, orgname - %s', decoded.username, decoded.orgName)); 82 | return next(); 83 | } 84 | }); 85 | }); 86 | 87 | /////////////////////////////////////////////////////////////////////////////// 88 | //////////////////////////////// START SERVER ///////////////////////////////// 89 | /////////////////////////////////////////////////////////////////////////////// 90 | var server = http.createServer(app).listen(port, function() {}); 91 | logger.info('****************** SERVER STARTED ************************'); 92 | logger.info('*************** http://%s:%s ******************',host,port); 93 | server.timeout = 240000; 94 | 95 | function getErrorMessage(field) { 96 | var response = { 97 | success: false, 98 | message: field + ' field is missing or Invalid in the request' 99 | }; 100 | return response; 101 | } 102 | 103 | /////////////////////////////////////////////////////////////////////////////// 104 | ///////////////////////// REST ENDPOINTS START HERE /////////////////////////// 105 | /////////////////////////////////////////////////////////////////////////////// 106 | // Register and enroll user 107 | app.post('/users', async function(req, res) { 108 | var username = req.body.username; 109 | var orgName = req.body.orgName; 110 | logger.debug('End point : /users'); 111 | logger.debug('User name : ' + username); 112 | logger.debug('Org name : ' + orgName); 113 | if (!username) { 114 | res.json(getErrorMessage('\'username\'')); 115 | return; 116 | } 117 | if (!orgName) { 118 | res.json(getErrorMessage('\'orgName\'')); 119 | return; 120 | } 121 | var token = jwt.sign({ 122 | exp: Math.floor(Date.now() / 1000) + parseInt(hfc.getConfigSetting('jwt_expiretime')), 123 | username: username, 124 | orgName: orgName 125 | }, app.get('secret')); 126 | let response = await helper.getRegisteredUser(username, orgName, true); 127 | logger.debug('-- returned from registering the username %s for organization %s',username,orgName); 128 | if (response && typeof response !== 'string') { 129 | logger.debug('Successfully registered the username %s for organization %s',username,orgName); 130 | response.token = token; 131 | res.json(response); 132 | } else { 133 | logger.debug('Failed to register the username %s for organization %s with::%s',username,orgName,response); 134 | res.json({success: false, message: response}); 135 | } 136 | 137 | }); 138 | // Create Channel 139 | app.post('/channels', async function(req, res) { 140 | logger.info('<<<<<<<<<<<<<<<<< C R E A T E C H A N N E L >>>>>>>>>>>>>>>>>'); 141 | logger.debug('End point : /channels'); 142 | var channelName = req.body.channelName; 143 | var channelConfigPath = req.body.channelConfigPath; 144 | logger.debug('Channel name : ' + channelName); 145 | logger.debug('channelConfigPath : ' + channelConfigPath); //../artifacts/channel/mychannel.tx 146 | if (!channelName) { 147 | res.json(getErrorMessage('\'channelName\'')); 148 | return; 149 | } 150 | if (!channelConfigPath) { 151 | res.json(getErrorMessage('\'channelConfigPath\'')); 152 | return; 153 | } 154 | 155 | let message = await createChannel.createChannel(channelName, channelConfigPath, req.username, req.orgname); 156 | res.send(message); 157 | }); 158 | // Join Channel 159 | app.post('/channels/:channelName/peers', async function(req, res) { 160 | logger.info('<<<<<<<<<<<<<<<<< J O I N C H A N N E L >>>>>>>>>>>>>>>>>'); 161 | var channelName = req.params.channelName; 162 | var peers = req.body.peers; 163 | logger.debug('channelName : ' + channelName); 164 | logger.debug('peers : ' + peers); 165 | logger.debug('username :' + req.username); 166 | logger.debug('orgname:' + req.orgname); 167 | 168 | if (!channelName) { 169 | res.json(getErrorMessage('\'channelName\'')); 170 | return; 171 | } 172 | if (!peers || peers.length == 0) { 173 | res.json(getErrorMessage('\'peers\'')); 174 | return; 175 | } 176 | 177 | let message = await join.joinChannel(channelName, peers, req.username, req.orgname); 178 | res.send(message); 179 | }); 180 | // Install chaincode on target peers 181 | app.post('/chaincodes', async function(req, res) { 182 | logger.debug('==================== INSTALL CHAINCODE =================='); 183 | var peers = req.body.peers; 184 | var chaincodeName = req.body.chaincodeName; 185 | var chaincodePath = req.body.chaincodePath; 186 | var chaincodeVersion = req.body.chaincodeVersion; 187 | var chaincodeType = req.body.chaincodeType; 188 | logger.debug('peers : ' + peers); // target peers list 189 | logger.debug('chaincodeName : ' + chaincodeName); 190 | logger.debug('chaincodePath : ' + chaincodePath); 191 | logger.debug('chaincodeVersion : ' + chaincodeVersion); 192 | logger.debug('chaincodeType : ' + chaincodeType); 193 | if (!peers || peers.length == 0) { 194 | res.json(getErrorMessage('\'peers\'')); 195 | return; 196 | } 197 | if (!chaincodeName) { 198 | res.json(getErrorMessage('\'chaincodeName\'')); 199 | return; 200 | } 201 | if (!chaincodePath) { 202 | res.json(getErrorMessage('\'chaincodePath\'')); 203 | return; 204 | } 205 | if (!chaincodeVersion) { 206 | res.json(getErrorMessage('\'chaincodeVersion\'')); 207 | return; 208 | } 209 | if (!chaincodeType) { 210 | res.json(getErrorMessage('\'chaincodeType\'')); 211 | return; 212 | } 213 | let message = await install.installChaincode(peers, chaincodeName, chaincodePath, chaincodeVersion, chaincodeType, req.username, req.orgname) 214 | res.send(message);}); 215 | // Instantiate chaincode on target peers 216 | app.post('/channels/:channelName/chaincodes', async function(req, res) { 217 | logger.debug('==================== INSTANTIATE CHAINCODE =================='); 218 | var peers = req.body.peers; 219 | var chaincodeName = req.body.chaincodeName; 220 | var chaincodeVersion = req.body.chaincodeVersion; 221 | var channelName = req.params.channelName; 222 | var chaincodeType = req.body.chaincodeType; 223 | var fcn = req.body.fcn; 224 | var args = req.body.args; 225 | logger.debug('peers : ' + peers); 226 | logger.debug('channelName : ' + channelName); 227 | logger.debug('chaincodeName : ' + chaincodeName); 228 | logger.debug('chaincodeVersion : ' + chaincodeVersion); 229 | logger.debug('chaincodeType : ' + chaincodeType); 230 | logger.debug('fcn : ' + fcn); 231 | logger.debug('args : ' + args); 232 | if (!chaincodeName) { 233 | res.json(getErrorMessage('\'chaincodeName\'')); 234 | return; 235 | } 236 | if (!chaincodeVersion) { 237 | res.json(getErrorMessage('\'chaincodeVersion\'')); 238 | return; 239 | } 240 | if (!channelName) { 241 | res.json(getErrorMessage('\'channelName\'')); 242 | return; 243 | } 244 | if (!chaincodeType) { 245 | res.json(getErrorMessage('\'chaincodeType\'')); 246 | return; 247 | } 248 | if (!args) { 249 | res.json(getErrorMessage('\'args\'')); 250 | return; 251 | } 252 | 253 | let message = await instantiate.instantiateChaincode(peers, channelName, chaincodeName, chaincodeVersion, chaincodeType, fcn, args, req.username, req.orgname); 254 | res.send(message); 255 | }); 256 | // Invoke transaction on chaincode on target peers 257 | app.post('/channels/:channelName/chaincodes/:chaincodeName', async function(req, res) { 258 | logger.debug('==================== INVOKE ON CHAINCODE =================='); 259 | var peers = req.body.peers; 260 | var chaincodeName = req.params.chaincodeName; 261 | var channelName = req.params.channelName; 262 | logger.debug('channelName : ' + channelName); 263 | logger.debug('chaincodeName : ' + chaincodeName); 264 | if (!chaincodeName) { 265 | res.json(getErrorMessage('\'chaincodeName\'')); 266 | return; 267 | } 268 | if (!channelName) { 269 | res.json(getErrorMessage('\'channelName\'')); 270 | return; 271 | } 272 | 273 | let message = await invoke.saveImage(peers, channelName, chaincodeName, req.body, req.username, req.orgname, res); 274 | res.send(message); 275 | }); 276 | // Query on chaincode on target peers 277 | app.get('/channels/:channelName/chaincodes/:chaincodeName', async function(req, res) { 278 | logger.debug('==================== QUERY BY CHAINCODE =================='); 279 | var channelName = req.params.channelName; 280 | var chaincodeName = req.params.chaincodeName; 281 | let args = req.query.args; 282 | let fcn = req.query.fcn; 283 | let peer = req.query.peer; 284 | 285 | logger.debug('channelName : ' + channelName); 286 | logger.debug('chaincodeName : ' + chaincodeName); 287 | logger.debug('fcn : ' + fcn); 288 | logger.debug('args : ' + args); 289 | 290 | if (!chaincodeName) { 291 | res.json(getErrorMessage('\'chaincodeName\'')); 292 | return; 293 | } 294 | if (!channelName) { 295 | res.json(getErrorMessage('\'channelName\'')); 296 | return; 297 | } 298 | if (!fcn) { 299 | res.json(getErrorMessage('\'fcn\'')); 300 | return; 301 | } 302 | if (!args) { 303 | res.json(getErrorMessage('\'args\'')); 304 | return; 305 | } 306 | 307 | // let message = await query.queryChaincode(peer, channelName, chaincodeName, args, fcn, req.username, req.orgname, res); 308 | let message = await query.queryChaincode(peer, channelName, chaincodeName, args.toString(), fcn, req.username, req.orgname, res); 309 | // res.send('Successfully queried ') 310 | res.send(message); 311 | }); 312 | --------------------------------------------------------------------------------