├── .gitignore ├── mychannel.block ├── image └── HLF-K8.drawio.png ├── chaincode └── fabcar │ └── go │ ├── go.mod │ ├── fabcar.go │ └── go.sum ├── client └── nodejs │ ├── package.json │ ├── wallet │ └── Org1MSP │ │ ├── enroll.id │ │ └── appUser.id │ ├── enrollAdmin.js │ ├── query.js │ ├── invoke.js │ ├── register.js │ ├── connection-org.yaml │ └── package-lock.json ├── crypto-config └── peerOrganizations │ └── Org3MSP │ └── msp │ ├── config.yaml │ ├── cacerts │ └── ca.pem │ └── tlscacerts │ └── tlsca.pem ├── org1-peer.yaml ├── org2-peer.yaml ├── admin-ordservice.yaml ├── admin-tls-ordservice.yaml ├── configtx.yaml ├── ADD-ORG.md ├── ordservice.yaml ├── README.md ├── ISTIO.md └── networkConfig.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | wallet 3 | -------------------------------------------------------------------------------- /mychannel.block: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityajoshi12/hyperledger-fabric-on-kubernetes/HEAD/mychannel.block -------------------------------------------------------------------------------- /image/HLF-K8.drawio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityajoshi12/hyperledger-fabric-on-kubernetes/HEAD/image/HLF-K8.drawio.png -------------------------------------------------------------------------------- /chaincode/fabcar/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/hyperledger/fabric-samples/chaincode/fabcar/go 2 | 3 | go 1.13 4 | 5 | require github.com/hyperledger/fabric-contract-api-go v1.1.0 -------------------------------------------------------------------------------- /client/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nodejs", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "fabric-ca-client": "^2.2.11", 14 | "fabric-network": "^2.2.11", 15 | "js-yaml": "^4.1.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /crypto-config/peerOrganizations/Org3MSP/msp/config.yaml: -------------------------------------------------------------------------------- 1 | 2 | NodeOUs: 3 | Enable: true 4 | ClientOUIdentifier: 5 | Certificate: cacerts/ca.pem 6 | OrganizationalUnitIdentifier: client 7 | PeerOUIdentifier: 8 | Certificate: cacerts/ca.pem 9 | OrganizationalUnitIdentifier: peer 10 | AdminOUIdentifier: 11 | Certificate: cacerts/ca.pem 12 | OrganizationalUnitIdentifier: admin 13 | OrdererOUIdentifier: 14 | Certificate: cacerts/ca.pem 15 | OrganizationalUnitIdentifier: orderer 16 | -------------------------------------------------------------------------------- /crypto-config/peerOrganizations/Org3MSP/msp/cacerts/ca.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICPjCCAeWgAwIBAgIQRwC1OnqNo9f1+dxIV0f+YDAKBggqhkjOPQQDAjBqMQsw 3 | CQYDVQQGEwJFUzERMA8GA1UEBxMIQWxpY2FudGUxETAPBgNVBAkTCEFsaWNhbnRl 4 | MRkwFwYDVQQKExBLdW5nIEZ1IFNvZnR3YXJlMQ0wCwYDVQQLEwRUZWNoMQswCQYD 5 | VQQDEwJjYTAeFw0yMjA0MDcwODM3MTlaFw0zMjA0MDgwODM3MTlaMGoxCzAJBgNV 6 | BAYTAkVTMREwDwYDVQQHEwhBbGljYW50ZTERMA8GA1UECRMIQWxpY2FudGUxGTAX 7 | BgNVBAoTEEt1bmcgRnUgU29mdHdhcmUxDTALBgNVBAsTBFRlY2gxCzAJBgNVBAMT 8 | AmNhMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEylJqwSMrZlC/nfoCuRMwhxVe 9 | eesT7Rns4dN/UrtoDefUFjFNt5FD2Ai/PQ7/WcfoIUD2xUK+I4yKQAX4DbDdKKNt 10 | MGswDgYDVR0PAQH/BAQDAgGmMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD 11 | ATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCD6p78WsM8tWZv4uSI6ahWoU6k3 12 | mKCixyxsqLi5P/ooDjAKBggqhkjOPQQDAgNHADBEAiBhaWpG3RRAdIlZi90To7lF 13 | JIsQ+HjZdg7jcQcwrTUTSwIgbDJQ2aEXP66D7d5xj5kkhGoO3VKBbDtPd5y+KCys 14 | nH8= 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /crypto-config/peerOrganizations/Org3MSP/msp/tlscacerts/tlsca.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICRTCCAeygAwIBAgIRAKlrU8Aox11jM2cM+uUnGoYwCgYIKoZIzj0EAwIwbTEL 3 | MAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGljYW50 4 | ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEOMAwG 5 | A1UEAxMFdGxzY2EwHhcNMjIwNDA3MDgzNzE5WhcNMzIwNDA4MDgzNzE5WjBtMQsw 6 | CQYDVQQGEwJFUzERMA8GA1UEBxMIQWxpY2FudGUxETAPBgNVBAkTCEFsaWNhbnRl 7 | MRkwFwYDVQQKExBLdW5nIEZ1IFNvZnR3YXJlMQ0wCwYDVQQLEwRUZWNoMQ4wDAYD 8 | VQQDEwV0bHNjYTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOfbSXeS0BOWTQvc 9 | KW/HKnBXqHWZgIYSBVMOrpD0gMytlxV07a4sxj0TcVQHMa3c0vHI4Mn5wS8EX9lG 10 | maMEjp+jbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYI 11 | KwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgf94H4cXQ1dFhe1IJ 12 | rBr/LrSV1tfrbFjcTPfxTQ0518owCgYIKoZIzj0EAwIDRwAwRAIgc1X9fEFh2xY1 13 | EMjarM4wWmrfw6yHhBPJIiTJ4rRDn7sCIFyU1cvf4TtUA2zhsc4zwYWeZ9JIAR+l 14 | rez61ix+7RSx 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /client/nodejs/wallet/Org1MSP/enroll.id: -------------------------------------------------------------------------------- 1 | {"credentials":{"certificate":"-----BEGIN CERTIFICATE-----\nMIIB+TCCAaCgAwIBAgIUdN4Iijj5i5LNDJ0CllT3P4Cx6UowCgYIKoZIzj0EAwIw\najELMAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGlj\nYW50ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEL\nMAkGA1UEAxMCY2EwHhcNMjIwMjEzMTIwMjAwWhcNMjMwMjEzMTIwNzAwWjAiMQ8w\nDQYDVQQLEwZjbGllbnQxDzANBgNVBAMTBmVucm9sbDBZMBMGByqGSM49AgEGCCqG\nSM49AwEHA0IABHD+npontQMTsfAPdaURGSrlet4q5vv2RlpdAZ2mWYZoaWXn+JBe\nYdWar8WMBmipwrbiIXh23HnYpz4V9m1lPcWjbDBqMA4GA1UdDwEB/wQEAwIHgDAM\nBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQeQmU89dDKlQ7u0pR47qmHK1o2rDArBgNV\nHSMEJDAigCCXzW0ix1mjCY7pXW+tMHprjXF1lm+j2oPj1q+8mghRBDAKBggqhkjO\nPQQDAgNHADBEAiBcBeRPfke5a05nEan5xoB74F9hCDbuhbvDhT8SN1TVMQIgbY7m\nbN0lThvWiLD/dpJksvJQerJUGGZYWPg/v/Ep2/k=\n-----END CERTIFICATE-----\n","privateKey":"-----BEGIN PRIVATE KEY-----\r\nMIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgBQP0i9SDGoZm+GI3\r\nwp5iV6Y0FZTz8Vg/lXJTz3x/JbWhRANCAARw/p6aJ7UDE7HwD3WlERkq5XreKub7\r\n9kZaXQGdplmGaGll5/iQXmHVmq/FjAZoqcK24iF4dtx52Kc+FfZtZT3F\r\n-----END PRIVATE KEY-----\r\n"},"mspId":"Org1MSP","type":"X.509","version":1} -------------------------------------------------------------------------------- /client/nodejs/wallet/Org1MSP/appUser.id: -------------------------------------------------------------------------------- 1 | {"credentials":{"certificate":"-----BEGIN CERTIFICATE-----\nMIICWDCCAf+gAwIBAgIUOiv3++Ms7z1lXTGCcY19NXVYlNswCgYIKoZIzj0EAwIw\najELMAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGlj\nYW50ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEL\nMAkGA1UEAxMCY2EwHhcNMjIwMjEzMTIwNDAwWhcNMjMwMjEzMTIwOTAwWjAjMQ8w\nDQYDVQQLEwZjbGllbnQxEDAOBgNVBAMTB2FwcFVzZXIwWTATBgcqhkjOPQIBBggq\nhkjOPQMBBwNCAARUP8E+ETsfo238cFRsVccxfXyuRRuqLO83kW9D6fGnit8hyJCl\n2AaU8b60rL35PyNieITERIqVS8pDUKAQqt9Xo4HJMIHGMA4GA1UdDwEB/wQEAwIH\ngDAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQwGv5A8Lt/PC3zlxhc1l/PhztRjjAr\nBgNVHSMEJDAigCCXzW0ix1mjCY7pXW+tMHprjXF1lm+j2oPj1q+8mghRBDBaBggq\nAwQFBgcIAQROeyJhdHRycyI6eyJoZi5BZmZpbGlhdGlvbiI6IiIsImhmLkVucm9s\nbG1lbnRJRCI6ImFwcFVzZXIiLCJoZi5UeXBlIjoiY2xpZW50In19MAoGCCqGSM49\nBAMCA0cAMEQCIHfJIPpY4FI3w15aZSYOOhEo+21d7ugbMpdBLz6Bc9YUAiBGcxDs\nYqrTI1v4lNY0FlEpnOnYhQvDXbIPvxxsKWNDUg==\n-----END CERTIFICATE-----\n","privateKey":"-----BEGIN PRIVATE KEY-----\r\nMIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg5V5yLcnQsbi4yTbX\r\nF5IyclP2vFQ6Pp6mwW0rKrQxLRihRANCAARUP8E+ETsfo238cFRsVccxfXyuRRuq\r\nLO83kW9D6fGnit8hyJCl2AaU8b60rL35PyNieITERIqVS8pDUKAQqt9X\r\n-----END PRIVATE KEY-----\r\n"},"mspId":"Org1MSP","type":"X.509","version":1} -------------------------------------------------------------------------------- /org1-peer.yaml: -------------------------------------------------------------------------------- 1 | cert: 2 | pem: | 3 | -----BEGIN CERTIFICATE----- 4 | MIICUzCCAfmgAwIBAgIUfJPDdOc5WNGrxocdjj3CuqtB2gYwCgYIKoZIzj0EAwIw 5 | ajELMAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGlj 6 | YW50ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEL 7 | MAkGA1UEAxMCY2EwHhcNMjIwNDA4MDYyODAwWhcNMjMwNDA4MDYzMzAwWjAgMQ4w 8 | DAYDVQQLEwVhZG1pbjEOMAwGA1UEAxMFYWRtaW4wWTATBgcqhkjOPQIBBggqhkjO 9 | PQMBBwNCAATJZNGiz47BYoKZpl61aLYs4Hbpba0hUnyYBq3cKdEfWVDtqLALzXFH 10 | V3Xs+9bvS5BGbuC6fkIaQBC5x4RVvOcUo4HGMIHDMA4GA1UdDwEB/wQEAwIHgDAM 11 | BgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQkOfMWdaAms8glYkYQN8CdTkSFizArBgNV 12 | HSMEJDAigCAFcGcbwD1GSHRenqqYTlgN6DlJPYkxrVYcqqXv/BlOYzBXBggqAwQF 13 | BgcIAQRLeyJhdHRycyI6eyJoZi5BZmZpbGlhdGlvbiI6IiIsImhmLkVucm9sbG1l 14 | bnRJRCI6ImFkbWluIiwiaGYuVHlwZSI6ImFkbWluIn19MAoGCCqGSM49BAMCA0gA 15 | MEUCIQCqCErDdFA8Qms9DKsAiAqtDPk2KbGRUV01K52VHQee4QIgfo/bUPs/NmU7 16 | Dvu8ZnEHee5TBqbff8V1wmROHPWTqc4= 17 | -----END CERTIFICATE----- 18 | key: 19 | pem: | 20 | -----BEGIN PRIVATE KEY----- 21 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgeqZgEfIY+TCS92V/ 22 | OQ6cAyMh9ONHKlI4yrkhF6pfKcKhRANCAATJZNGiz47BYoKZpl61aLYs4Hbpba0h 23 | UnyYBq3cKdEfWVDtqLALzXFHV3Xs+9bvS5BGbuC6fkIaQBC5x4RVvOcU 24 | -----END PRIVATE KEY----- 25 | -------------------------------------------------------------------------------- /org2-peer.yaml: -------------------------------------------------------------------------------- 1 | cert: 2 | pem: | 3 | -----BEGIN CERTIFICATE----- 4 | MIICUzCCAfmgAwIBAgIUbBL8H3qyHNSIYF7sf9TFcf/o9FswCgYIKoZIzj0EAwIw 5 | ajELMAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGlj 6 | YW50ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEL 7 | MAkGA1UEAxMCY2EwHhcNMjIwNDA4MDYyODAwWhcNMjMwNDA4MDYzMzAwWjAgMQ4w 8 | DAYDVQQLEwVhZG1pbjEOMAwGA1UEAxMFYWRtaW4wWTATBgcqhkjOPQIBBggqhkjO 9 | PQMBBwNCAASkjlyJXQACIh+SvjHEWYQN6Kn63jrtf8j4pyKWWlBPxvdVXhnLpQA3 10 | bCmACWzuvp9dftXP/7isB98D0JgzDAk1o4HGMIHDMA4GA1UdDwEB/wQEAwIHgDAM 11 | BgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRzN8IsZORyGuKGA6wu1IdLMhc8kDArBgNV 12 | HSMEJDAigCC30bBNlpM9StFrDU0rSZxvFn2H/NK5Z3bmv3Cy2LDcpzBXBggqAwQF 13 | BgcIAQRLeyJhdHRycyI6eyJoZi5BZmZpbGlhdGlvbiI6IiIsImhmLkVucm9sbG1l 14 | bnRJRCI6ImFkbWluIiwiaGYuVHlwZSI6ImFkbWluIn19MAoGCCqGSM49BAMCA0gA 15 | MEUCIQDBZF7RKoj3vZTo5HBCM8ylB3jCsUuRuneNo9TokVCIPwIgPMW9/crzyrPb 16 | IaZf8+w23M1CD1TD39zyMqVBM1YT0A0= 17 | -----END CERTIFICATE----- 18 | key: 19 | pem: | 20 | -----BEGIN PRIVATE KEY----- 21 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgxCzkqO+4W/UHbzhc 22 | +UJjo1TBFoDZwoUnnDUAaJWPLrqhRANCAASkjlyJXQACIh+SvjHEWYQN6Kn63jrt 23 | f8j4pyKWWlBPxvdVXhnLpQA3bCmACWzuvp9dftXP/7isB98D0JgzDAk1 24 | -----END PRIVATE KEY----- 25 | -------------------------------------------------------------------------------- /admin-ordservice.yaml: -------------------------------------------------------------------------------- 1 | cert: 2 | pem: | 3 | -----BEGIN CERTIFICATE----- 4 | MIICUjCCAfmgAwIBAgIUa57FW4zmutPj0jElFxq0MgZffN8wCgYIKoZIzj0EAwIw 5 | ajELMAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGlj 6 | YW50ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEL 7 | MAkGA1UEAxMCY2EwHhcNMjIwNDA4MDYzOTAwWhcNMjMwNDA4MDY0NDAwWjAgMQ4w 8 | DAYDVQQLEwVhZG1pbjEOMAwGA1UEAxMFYWRtaW4wWTATBgcqhkjOPQIBBggqhkjO 9 | PQMBBwNCAARYTZkC/rMedc3AxSpOVIZlL/bobwH0cexT4GJqLmbH3XLkH3VCYf6g 10 | mEWezGxMts/zGS8x2p2XACn7LZtf7RAmo4HGMIHDMA4GA1UdDwEB/wQEAwIHgDAM 11 | BgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQN42KcScbBz1NjcchbvVYto07zYzArBgNV 12 | HSMEJDAigCBKDhOQdKTeYqG5KI4ZQhWAR6rdk/Hfnp/OJnbeCETaZjBXBggqAwQF 13 | BgcIAQRLeyJhdHRycyI6eyJoZi5BZmZpbGlhdGlvbiI6IiIsImhmLkVucm9sbG1l 14 | bnRJRCI6ImFkbWluIiwiaGYuVHlwZSI6ImFkbWluIn19MAoGCCqGSM49BAMCA0cA 15 | MEQCIFj3ZKkLH3ZkJJhtvwwcjMyaLnV6PWZidBYXzuHMyDKfAiAi2IYwHjZJZe2X 16 | qKFfKIRw1t2QkMVAVcQcFWckjvXgLg== 17 | -----END CERTIFICATE----- 18 | key: 19 | pem: | 20 | -----BEGIN PRIVATE KEY----- 21 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgmkRHGuyq7lQtu5Jo 22 | 4mVUup/+DXxeIasJDVsqrbaz0ZChRANCAARYTZkC/rMedc3AxSpOVIZlL/bobwH0 23 | cexT4GJqLmbH3XLkH3VCYf6gmEWezGxMts/zGS8x2p2XACn7LZtf7RAm 24 | -----END PRIVATE KEY----- 25 | -------------------------------------------------------------------------------- /admin-tls-ordservice.yaml: -------------------------------------------------------------------------------- 1 | cert: 2 | pem: | 3 | -----BEGIN CERTIFICATE----- 4 | MIICVjCCAfygAwIBAgIUOPl5RRerxlaFk/L2+AW4Uk8L7pkwCgYIKoZIzj0EAwIw 5 | bTELMAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGlj 6 | YW50ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEO 7 | MAwGA1UEAxMFdGxzY2EwHhcNMjIwNDA4MDYzOTAwWhcNMjMwNDA4MDY0NDAwWjAg 8 | MQ4wDAYDVQQLEwVhZG1pbjEOMAwGA1UEAxMFYWRtaW4wWTATBgcqhkjOPQIBBggq 9 | hkjOPQMBBwNCAATsN8CyY+amqnad8miD85IGhuBqiKeyna2WpItDpuf+/MwRtnee 10 | VHnRZb8fF0xYbzQYXE704OszrfXr7RDyEV4So4HGMIHDMA4GA1UdDwEB/wQEAwIH 11 | gDAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSeAbDfFGGmnrky/6BbT4XOtapRmDAr 12 | BgNVHSMEJDAigCAmXMm+GkfaDuMgV+ftEeKpPToWLazsFntyURq0iXLArzBXBggq 13 | AwQFBgcIAQRLeyJhdHRycyI6eyJoZi5BZmZpbGlhdGlvbiI6IiIsImhmLkVucm9s 14 | bG1lbnRJRCI6ImFkbWluIiwiaGYuVHlwZSI6ImFkbWluIn19MAoGCCqGSM49BAMC 15 | A0gAMEUCIQD4SeF2bz/RmtS1N61MSeU5f9LVEVOecnf2Q4Xo8DfL2wIgJKFg/jUQ 16 | +FK5OLbU7k7HClvPQf5YDEAw3n29PhsiY6Q= 17 | -----END CERTIFICATE----- 18 | key: 19 | pem: | 20 | -----BEGIN PRIVATE KEY----- 21 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgBQ0VpVd/4VeTBxP6 22 | opIgTy6MSM+zP5VNsQ6OZnIseZGhRANCAATsN8CyY+amqnad8miD85IGhuBqiKey 23 | na2WpItDpuf+/MwRtneeVHnRZb8fF0xYbzQYXE704OszrfXr7RDyEV4S 24 | -----END PRIVATE KEY----- 25 | -------------------------------------------------------------------------------- /client/nodejs/enrollAdmin.js: -------------------------------------------------------------------------------- 1 | 2 | const FabricCAServices = require('fabric-ca-client'); 3 | const { Wallets } = require('fabric-network'); 4 | const fs = require('fs'); 5 | const path = require('path'); 6 | let mspId = "Org1MSP"; 7 | const admin = 'enroll'; 8 | const adminpw = 'enrollpw'; 9 | const caUrl = 'org1-ca.fabric' // refer this from the connection profile 10 | const yaml = require("js-yaml"); 11 | async function enroll() { 12 | try { 13 | 14 | const ccpPath = path.resolve(__dirname, "connection-org.yaml"); 15 | if (ccpPath.includes(".yaml")) { 16 | ccp = yaml.load(fs.readFileSync(ccpPath, "utf8")); 17 | } else { 18 | ccp = JSON.parse(fs.readFileSync(ccpPath, "utf8")); 19 | } 20 | 21 | const caInfo = ccp.certificateAuthorities[caUrl]; 22 | const caTLSCACerts = caInfo.tlsCACerts.pem; 23 | const ca = new FabricCAServices(caInfo.url, { trustedRoots: caTLSCACerts, verify: false }, caInfo.caName); 24 | 25 | const walletPath = path.join(process.cwd(), 'wallet', mspId); 26 | const wallet = await Wallets.newFileSystemWallet(walletPath); 27 | 28 | const identity = await wallet.get(admin); 29 | if (identity) { 30 | console.log('An identity for the admin user "admin" already exists in the wallet'); 31 | return; 32 | } 33 | 34 | const enrollment = await ca.enroll({ enrollmentID: admin, enrollmentSecret: adminpw }); 35 | const x509Identity = { 36 | credentials: { 37 | certificate: enrollment.certificate, 38 | privateKey: enrollment.key.toBytes(), 39 | }, 40 | mspId: mspId, 41 | type: 'X.509', 42 | }; 43 | await wallet.put(admin, x509Identity); 44 | console.log('Successfully enrolled admin user "enroll" and imported it into the wallet'); 45 | 46 | } catch (error) { 47 | console.error(`Failed to enroll admin user "enroll": ${error}`); 48 | process.exit(1); 49 | } 50 | } 51 | 52 | enroll(); -------------------------------------------------------------------------------- /client/nodejs/query.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const { Gateway, Wallets } = require("fabric-network"); 4 | const yaml = require("js-yaml"); 5 | const fs = require("fs"); 6 | const path = require("path"); 7 | const mspId = "Org1MSP"; 8 | const CC_NAME = "fabcar"; 9 | const CHANNEL = "mychannel"; 10 | let ccp = null; 11 | async function invoke(user) { 12 | try { 13 | console.log("Invoking chaincode using : ", user); 14 | // load the network configuration 15 | const ccpPath = path.resolve( 16 | __dirname, 17 | "connection-org.yaml" 18 | ); 19 | if (ccpPath.includes(".yaml")) { 20 | ccp = yaml.load(fs.readFileSync(ccpPath, "utf8")); 21 | } else { 22 | ccp = JSON.parse(fs.readFileSync(ccpPath, "utf8")); 23 | } 24 | // Create a new file system based wallet for managing identities. 25 | const walletPath = path.join(process.cwd(), "wallet", mspId); 26 | const wallet = await Wallets.newFileSystemWallet(walletPath); 27 | console.log(`Wallet path: ${walletPath}`); 28 | 29 | // Check to see if we've already enrolled the user. 30 | const identity = await wallet.get(user); 31 | if (!identity) { 32 | console.log( 33 | 'An identity for the user "${user}" does not exist in the wallet' 34 | ); 35 | console.log("Run the registerUser.js application before retrying"); 36 | return; 37 | } 38 | 39 | // Create a new gateway for connecting to our peer node. 40 | const gateway = new Gateway(); 41 | await gateway.connect(ccp, { 42 | wallet, 43 | identity: user, 44 | discovery: { enabled: true, asLocalhost: false }, 45 | }); 46 | 47 | // Get the network (channel) our contract is deployed to. 48 | const network = await gateway.getNetwork(CHANNEL); 49 | 50 | // Get the contract from the network. 51 | const contract = network.getContract(CC_NAME); 52 | 53 | const result = await contract.evaluateTransaction( 54 | "QueryAllCars" 55 | ); 56 | console.log("Transaction has been submitted"); 57 | console.log(result.toString()) 58 | // Disconnect from the gateway. 59 | gateway.disconnect(); 60 | return result; 61 | } catch (error) { 62 | console.error(`Failed to submit transaction: ${error}`); 63 | process.exit(1); 64 | } 65 | } 66 | const result=invoke("appUser") -------------------------------------------------------------------------------- /client/nodejs/invoke.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const { Gateway, Wallets } = require("fabric-network"); 4 | const yaml = require("js-yaml"); 5 | const fs = require("fs"); 6 | const path = require("path"); 7 | const mspId = "Org1MSP"; 8 | const CC_NAME = "fabcar"; 9 | const CHANNEL = "mychannel"; 10 | let ccp = null; 11 | async function invoke(user) { 12 | try { 13 | console.log("Invoking chaincode using : ", user); 14 | // load the network configuration 15 | const ccpPath = path.resolve( 16 | __dirname, 17 | "connection-org.yaml" 18 | ); 19 | if (ccpPath.includes(".yaml")) { 20 | ccp = yaml.load(fs.readFileSync(ccpPath, "utf8")); 21 | } else { 22 | ccp = JSON.parse(fs.readFileSync(ccpPath, "utf8")); 23 | } 24 | // Create a new file system based wallet for managing identities. 25 | const walletPath = path.join(process.cwd(), "wallet", mspId); 26 | const wallet = await Wallets.newFileSystemWallet(walletPath); 27 | console.log(`Wallet path: ${walletPath}`); 28 | 29 | // Check to see if we've already enrolled the user. 30 | const identity = await wallet.get(user); 31 | if (!identity) { 32 | console.log( 33 | 'An identity for the user "${user}" does not exist in the wallet' 34 | ); 35 | console.log("Run the registerUser.js application before retrying"); 36 | return; 37 | } 38 | 39 | // Create a new gateway for connecting to our peer node. 40 | const gateway = new Gateway(); 41 | await gateway.connect(ccp, { 42 | wallet, 43 | identity: user, 44 | discovery: { enabled: true, asLocalhost: false }, 45 | }); 46 | 47 | // Get the network (channel) our contract is deployed to. 48 | const network = await gateway.getNetwork(CHANNEL); 49 | 50 | // Get the contract from the network. 51 | const contract = network.getContract(CC_NAME); 52 | 53 | const result = await contract.submitTransaction( 54 | "CreateCar", 55 | "400", "Honda", "Civic", "red", "aditya" 56 | ); 57 | console.log("Transaction has been submitted"); 58 | 59 | // Disconnect from the gateway. 60 | gateway.disconnect(); 61 | return result; 62 | } catch (error) { 63 | console.error(`Failed to submit transaction: ${error}`); 64 | process.exit(1); 65 | } 66 | } 67 | invoke("appUser") -------------------------------------------------------------------------------- /configtx.yaml: -------------------------------------------------------------------------------- 1 | 2 | --- 3 | ################################################################################ 4 | # 5 | # ORGANIZATIONS 6 | # 7 | # This section defines the organizational identities that can be referenced 8 | # in the configuration profiles. 9 | # 10 | ################################################################################ 11 | Organizations: 12 | 13 | # Org3MSP defines an MSP using the sampleconfig. It should never be used 14 | # in production but may be used as a template for other definitions. 15 | - 16 | # Name is the key by which this org will be referenced in channel 17 | # configuration transactions. 18 | # Name can include alphanumeric characters as well as dots and dashes. 19 | Name: Org3MSP 20 | 21 | # SkipAsForeign can be set to true for org definitions which are to be 22 | # inherited from the orderer system channel during channel creation. This 23 | # is especially useful when an admin of a single org without access to the 24 | # MSP directories of the other orgs wishes to create a channel. Note 25 | # this property must always be set to false for orgs included in block 26 | # creation. 27 | SkipAsForeign: false 28 | 29 | # ID is the key by which this org's MSP definition will be referenced. 30 | # ID can include alphanumeric characters as well as dots and dashes. 31 | ID: Org3MSP 32 | 33 | # MSPDir is the filesystem path which contains the MSP configuration. 34 | MSPDir: crypto-config/peerOrganizations/Org3MSP/msp 35 | MSPType: bccsp 36 | 37 | # Policies defines the set of policies at this level of the config tree 38 | # For organization policies, their canonical path is usually 39 | # /Channel/// 40 | Policies: &Org3MSPPolicies 41 | Readers: 42 | Type: Signature 43 | Rule: "OR('Org3MSP.member')" 44 | # If your MSP is configured with the new NodeOUs, you might 45 | # want to use a more specific rule like the following: 46 | # Rule: "OR('Org3MSP.admin', 'Org3MSP.peer', 'Org3MSP.client')" 47 | Writers: 48 | Type: Signature 49 | Rule: "OR('Org3MSP.member')" 50 | # If your MSP is configured with the new NodeOUs, you might 51 | # want to use a more specific rule like the following: 52 | # Rule: "OR('Org3MSP.admin', 'Org3MSP.client')" 53 | Admins: 54 | Type: Signature 55 | Rule: "OR('Org3MSP.admin')" 56 | Endorsement: 57 | Type: Signature 58 | Rule: "OR('Org3MSP.member')" 59 | 60 | -------------------------------------------------------------------------------- /client/nodejs/register.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const { Wallets } = require('fabric-network'); 4 | const FabricCAServices = require('fabric-ca-client'); 5 | const fs = require('fs'); 6 | const path = require('path'); 7 | const mspId = "Org1MSP"; 8 | const caName = 'org1-ca.fabric' 9 | const yaml = require("js-yaml"); 10 | let ccp = null; 11 | async function register(user) { 12 | try { 13 | 14 | const ccpPath = path.resolve(__dirname, "connection-org.yaml"); 15 | if (ccpPath.includes(".yaml")) { 16 | ccp = yaml.load(fs.readFileSync(ccpPath, "utf8")); 17 | } else { 18 | ccp = JSON.parse(fs.readFileSync(ccpPath, "utf8")); 19 | } 20 | 21 | const caInfo = ccp.certificateAuthorities[caName]; 22 | const caURL = caInfo.url; 23 | const ca = new FabricCAServices(caURL); 24 | 25 | const walletPath = path.join(process.cwd(), 'wallet', mspId); 26 | const wallet = await Wallets.newFileSystemWallet(walletPath); 27 | console.log(`Wallet path: ${walletPath}`); 28 | 29 | const userIdentity = await wallet.get(user); 30 | if (userIdentity) { 31 | console.log(`An identity for the user ${user} already exists in the wallet`); 32 | return; 33 | } 34 | 35 | const adminIdentity = await wallet.get('enroll'); 36 | if (!adminIdentity) { 37 | console.log('An identity for the enroll user "enroll" does not exist in the wallet'); 38 | console.log('Run the enrollAdmin.js application before retrying'); 39 | return; 40 | } 41 | 42 | const provider = wallet.getProviderRegistry().getProvider(adminIdentity.type); 43 | const adminUser = await provider.getUserContext(adminIdentity, 'enroll'); 44 | 45 | const secret = await ca.register({ 46 | enrollmentID: user, 47 | role: 'client' 48 | }, adminUser); 49 | 50 | const enrollment = await ca.enroll({ 51 | enrollmentID: user, 52 | enrollmentSecret: secret 53 | }); 54 | 55 | const x509Identity = { 56 | credentials: { 57 | certificate: enrollment.certificate, 58 | privateKey: enrollment.key.toBytes(), 59 | }, 60 | mspId: mspId, 61 | type: 'X.509', 62 | }; 63 | await wallet.put(user, x509Identity); 64 | console.log(`Successfully registered and enrolled enroll user "${user}" and imported it into the wallet`); 65 | 66 | } catch (error) { 67 | console.error(`Failed to register user "${user}": ${error}`); 68 | process.exit(1); 69 | } 70 | } 71 | register("appUser"); -------------------------------------------------------------------------------- /ADD-ORG.md: -------------------------------------------------------------------------------- 1 | # HLF Opertor - Adding new Org from different cluster 2 | ![Architecture](./image/HLF-K8.drawio.png) 3 | 4 | ### Installing the Operator and Istio - Cluster 2 5 | 6 | ```bash 7 | cd ~/hlf-operator 8 | helm install hlf-operator ./chart/hlf-operator 9 | istioctl install --set profile=default -y 10 | ``` 11 | 12 | ### Create CA - Cluster 2 13 | 14 | ```bash 15 | export SC=$(kubectl get sc -o=jsonpath='{.items[0].metadata.name}') 16 | export DOMAIN=... 17 | kubectl-hlf ca create --storage-class="$SC" --capacity=2Gi --name=org3-ca --enroll-id=enroll --enroll-pw=enrollpw --namespace=fabric --hosts=org3-ca.${DOMAIN} --istio-ingressgateway=ingressgateway --istio-port=443 18 | kubectl-hlf ca register --name=org3-ca --user=org3-peer1 --secret=peerpw --type=peer --enroll-id enroll --enroll-secret=enrollpw --mspid=Org3MSP --namespace=fabric 19 | ``` 20 | 21 | ### Create peer - Cluster 2 22 | 23 | ```bash 24 | kubectl-hlf peer create --storage-class="$SC" --enroll-id=org3-peer1 --mspid=Org3MSP --enroll-pw=peerpw --capacity=5Gi --name=org3-peer1 --ca-name=org3-ca.fabric --namespace=fabric --statedb=couchdb --hosts=org3-peer1.${DOMAIN} --istio-ingressgateway=ingressgateway --istio-port=443 25 | kubectl-hlf ca register --name=org3-ca --user=admin --secret=adminpw --type=admin --enroll-id enroll --enroll-secret=enrollpw --mspid=Org3MSP --namespace=fabric 26 | kubectl-hlf ca enroll --name=org3-ca --user=admin --secret=adminpw --ca-name ca --output org3-peer.yaml --mspid=Org3MSP --namespace=fabric 27 | ``` 28 | 29 | ### Connection Profile 30 | 31 | ```bash 32 | kubectl hlf inspect --output org3.yaml -o Org3MSP 33 | kubectl hlf utils adduser --userPath=org3-peer.yaml --config=org3.yaml --username=admin --mspid=Org3MSP 34 | ``` 35 | 36 | ### Get Crypto Material - Cluster 2 37 | 38 | ```bash 39 | kubectl hlf org inspect -o Org3MSP --output-path=crypto-config 40 | ``` 41 | 42 | ### Modifing channel - Cluster 1 43 | 44 | ```bash 45 | kubectl hlf channel addorg --peer=org1-peer1.fabric --name=mychannel --config=networkConfig.yaml --user=admin --msp-id=Org3MSP --org-config=configtx.yaml --dry-run > org3.json 46 | configtxlator proto_encode --input org3.json --type common.ConfigUpdate --output org3.pb 47 | ``` 48 | 49 | ```bash 50 | echo '{"payload":{"header":{"channel_header":{"channel_id":"mychannel", "type":2}},"data":{"config_update":'$(cat org3.json)'}}}' | jq . > config_update_in_envelope.json 51 | ``` 52 | 53 | ```bash 54 | configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope --output config_update_in_envelope.pb 55 | ``` 56 | 57 | ```bash 58 | kubectl hlf channel signupdate --channel=mychannel -f config_update_in_envelope.pb --user=admin --config=networkConfig.yaml --mspid=Org1MSP --output org1-mychannel-update-sign.pb 59 | kubectl hlf channel signupdate --channel=mychannel -f config_update_in_envelope.pb --user=admin --config=networkConfig.yaml --mspid=Org2MSP --output org2-mychannel-update-sign.pb 60 | ``` 61 | 62 | ### Updating channel - Cluster 1 63 | 64 | ```bash 65 | kubectl hlf channel update --channel mychannel -f config_update_in_envelope.pb --config=networkConfig.yaml --user=admin --mspid=Org1MSP -s org1-mychannel-update-sign.pb -s org2-mychannel-update-sign.pb 66 | ``` 67 | 68 | ### adjust the network config add the orderer detail 69 | Add the orderer section in the `org3.yaml` 70 | 71 | ### join the channel - Cluster 2 72 | 73 | ```bash 74 | kubectl hlf channel join --name=mychannel --config=org3.yaml --user=admin -p=org3-peer1.fabric 75 | ``` 76 | 77 | ### Adding the anchor peer - Cluster 2 78 | 79 | ```bash 80 | kubectl-hlf channel addanchorpeer --channel=mychannel --config=networkConfig.yaml --user=admin --peer=org3-peer1.fabric 81 | ``` 82 | 83 | ### Install CC - Cluster 2 84 | 85 | ```bash 86 | kubectl-hlf chaincode install --path=./chaincode/fabcar/go --config=org3.yaml --language=golang --label=fabcar --user=admin --peer=org3-peer1.fabric 87 | ``` 88 | 89 | ### Approve CC - Cluster 2 90 | 91 | ```bash 92 | PACKAGE_ID= 93 | kubectl hlf chaincode approveformyorg --config=org3.yaml --user=admin --peer=org3-peer1.fabric \ 94 | --package-id=$PACKAGE_ID \ 95 | --version "1.0" --sequence 2 --name=fabcar --policy="OR('Org1MSP.member', 'Org2MSP.member','Org3MSP.member')" --channel=mychannel 96 | ``` 97 | 98 | ### Invoke/Query CC - Cluster 2 99 | 100 | ```bash 101 | kubectl-hlf chaincode invoke --config=org3.yaml --user=admin --peer=org3-peer1.fabric --chaincode=fabcar --channel=mychannel --fcn=CreateCar -a "1000" -a "honda" -a "civic" -a "blue" "aditya" 102 | kubectl hlf chaincode query --config=org3.yaml --user=admin --peer=org3-peer1.fabric --chaincode=fabcar --channel=mychannel --fcn=QueryAllCars 103 | ``` 104 | -------------------------------------------------------------------------------- /chaincode/fabcar/go/fabcar.go: -------------------------------------------------------------------------------- 1 | /* 2 | SPDX-License-Identifier: Apache-2.0 3 | */ 4 | 5 | package main 6 | 7 | import ( 8 | "encoding/json" 9 | "fmt" 10 | "strconv" 11 | 12 | "github.com/hyperledger/fabric-contract-api-go/contractapi" 13 | ) 14 | 15 | // SmartContract provides functions for managing a car 16 | type SmartContract struct { 17 | contractapi.Contract 18 | } 19 | 20 | // Car describes basic details of what makes up a car 21 | type Car struct { 22 | Make string `json:"make"` 23 | Model string `json:"model"` 24 | Colour string `json:"colour"` 25 | Owner string `json:"owner"` 26 | } 27 | 28 | // QueryResult structure used for handling result of query 29 | type QueryResult struct { 30 | Key string `json:"Key"` 31 | Record *Car 32 | } 33 | 34 | // InitLedger adds a base set of cars to the ledger 35 | func (s *SmartContract) InitLedger(ctx contractapi.TransactionContextInterface) error { 36 | cars := []Car{ 37 | Car{Make: "Toyota", Model: "Prius", Colour: "blue", Owner: "Tomoko"}, 38 | Car{Make: "Ford", Model: "Mustang", Colour: "red", Owner: "Brad"}, 39 | Car{Make: "Hyundai", Model: "Tucson", Colour: "green", Owner: "Jin Soo"}, 40 | Car{Make: "Volkswagen", Model: "Passat", Colour: "yellow", Owner: "Max"}, 41 | Car{Make: "Tesla", Model: "S", Colour: "black", Owner: "Adriana"}, 42 | Car{Make: "Peugeot", Model: "205", Colour: "purple", Owner: "Michel"}, 43 | Car{Make: "Chery", Model: "S22L", Colour: "white", Owner: "Aarav"}, 44 | Car{Make: "Fiat", Model: "Punto", Colour: "violet", Owner: "Pari"}, 45 | Car{Make: "Tata", Model: "Nano", Colour: "indigo", Owner: "Valeria"}, 46 | Car{Make: "Holden", Model: "Barina", Colour: "brown", Owner: "Shotaro"}, 47 | } 48 | 49 | for i, car := range cars { 50 | carAsBytes, _ := json.Marshal(car) 51 | err := ctx.GetStub().PutState("CAR"+strconv.Itoa(i), carAsBytes) 52 | 53 | if err != nil { 54 | return fmt.Errorf("Failed to put to world state. %s", err.Error()) 55 | } 56 | } 57 | 58 | return nil 59 | } 60 | 61 | // CreateCar adds a new car to the world state with given details 62 | func (s *SmartContract) CreateCar(ctx contractapi.TransactionContextInterface, carNumber string, make string, model string, colour string, owner string) error { 63 | car := Car{ 64 | Make: make, 65 | Model: model, 66 | Colour: colour, 67 | Owner: owner, 68 | } 69 | 70 | carAsBytes, _ := json.Marshal(car) 71 | 72 | return ctx.GetStub().PutState(carNumber, carAsBytes) 73 | } 74 | 75 | // QueryCar returns the car stored in the world state with given id 76 | func (s *SmartContract) QueryCar(ctx contractapi.TransactionContextInterface, carNumber string) (*Car, error) { 77 | carAsBytes, err := ctx.GetStub().GetState(carNumber) 78 | 79 | if err != nil { 80 | return nil, fmt.Errorf("Failed to read from world state. %s", err.Error()) 81 | } 82 | 83 | if carAsBytes == nil { 84 | return nil, fmt.Errorf("%s does not exist", carNumber) 85 | } 86 | 87 | car := new(Car) 88 | _ = json.Unmarshal(carAsBytes, car) 89 | 90 | return car, nil 91 | } 92 | 93 | // QueryAllCars returns all cars found in world state 94 | func (s *SmartContract) QueryAllCars(ctx contractapi.TransactionContextInterface) ([]QueryResult, error) { 95 | startKey := "" 96 | endKey := "" 97 | 98 | resultsIterator, err := ctx.GetStub().GetStateByRange(startKey, endKey) 99 | 100 | if err != nil { 101 | return nil, err 102 | } 103 | defer resultsIterator.Close() 104 | 105 | results := []QueryResult{} 106 | 107 | for resultsIterator.HasNext() { 108 | queryResponse, err := resultsIterator.Next() 109 | 110 | if err != nil { 111 | return nil, err 112 | } 113 | 114 | car := new(Car) 115 | _ = json.Unmarshal(queryResponse.Value, car) 116 | 117 | queryResult := QueryResult{Key: queryResponse.Key, Record: car} 118 | results = append(results, queryResult) 119 | } 120 | 121 | return results, nil 122 | } 123 | 124 | // ChangeCarOwner updates the owner field of car with given id in world state 125 | func (s *SmartContract) ChangeCarOwner(ctx contractapi.TransactionContextInterface, carNumber string, newOwner string) error { 126 | car, err := s.QueryCar(ctx, carNumber) 127 | 128 | if err != nil { 129 | return err 130 | } 131 | 132 | car.Owner = newOwner 133 | 134 | carAsBytes, _ := json.Marshal(car) 135 | 136 | return ctx.GetStub().PutState(carNumber, carAsBytes) 137 | } 138 | 139 | func main() { 140 | 141 | chaincode, err := contractapi.NewChaincode(new(SmartContract)) 142 | 143 | if err != nil { 144 | fmt.Printf("Error create fabcar chaincode: %s", err.Error()) 145 | return 146 | } 147 | 148 | if err := chaincode.Start(); err != nil { 149 | fmt.Printf("Error starting fabcar chaincode: %s", err.Error()) 150 | } 151 | } -------------------------------------------------------------------------------- /ordservice.yaml: -------------------------------------------------------------------------------- 1 | certificateAuthorities: 2 | ord-ca.fabric: 3 | caName: ca 4 | registrar: 5 | enrollId: enroll 6 | enrollSecret: enrollpw 7 | tlsCACerts: 8 | pem: 9 | - | 10 | -----BEGIN CERTIFICATE----- 11 | MIICYzCCAgqgAwIBAgIQRa3nCKDuiluITf3nngWz4jAKBggqhkjOPQQDAjBSMRMw 12 | EQYDVQQGEwpDYWxpZm9ybmlhMQkwBwYDVQQHEwAxCTAHBgNVBAkTADEUMBIGA1UE 13 | ChMLSHlwZXJsZWRnZXIxDzANBgNVBAsTBkZhYnJpYzAeFw0yMjA0MDcwNjI3NDFa 14 | Fw0zMjA0MDgwNjI3NDFaMFIxEzARBgNVBAYTCkNhbGlmb3JuaWExCTAHBgNVBAcT 15 | ADEJMAcGA1UECRMAMRQwEgYDVQQKEwtIeXBlcmxlZGdlcjEPMA0GA1UECxMGRmFi 16 | cmljMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKjc6ZLkpudkQhsZsBP+Gbzl0 17 | /E0ysuwSpA92fe22TYzR3T0Tmlj2L1sJRxD8J1I0LW4mqBJ94LjLauT6L7uAk6OB 18 | wTCBvjAOBgNVHQ8BAf8EBAMCAaYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF 19 | BwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIB/cTqd6b3m5u/Q7+gxu6l7I 20 | v4Lmw+caJ8wFO2M2kWllMFEGA1UdEQRKMEiCCWxvY2FsaG9zdIIGb3JkLWNhgg1v 21 | cmQtY2EuZmFicmljghhvcmQtY2EuaGxmLWJsb2NrY2hhaW4udGuHBH8AAAGHBIs7 22 | TpQwCgYIKoZIzj0EAwIDRwAwRAIgcAwSGBpF0A5fhDfrBwB1zyruX3cZYfOlO5Qt 23 | 3GMPeFkCIDN1LmW4U7qPVMQrxEtRY/fDbf4t3q4+OulqB1GKGr5n 24 | -----END CERTIFICATE----- 25 | url: https://ord-ca.hlf-blockchain.tk:443 26 | org1-ca.fabric: 27 | caName: ca 28 | registrar: 29 | enrollId: enroll 30 | enrollSecret: enrollpw 31 | tlsCACerts: 32 | pem: 33 | - | 34 | -----BEGIN CERTIFICATE----- 35 | MIICaDCCAg2gAwIBAgIQMHoxcuX1t2eLPmJbJc/1MjAKBggqhkjOPQQDAjBSMRMw 36 | EQYDVQQGEwpDYWxpZm9ybmlhMQkwBwYDVQQHEwAxCTAHBgNVBAkTADEUMBIGA1UE 37 | ChMLSHlwZXJsZWRnZXIxDzANBgNVBAsTBkZhYnJpYzAeFw0yMjA0MDcwNjI3Mzla 38 | Fw0zMjA0MDgwNjI3MzlaMFIxEzARBgNVBAYTCkNhbGlmb3JuaWExCTAHBgNVBAcT 39 | ADEJMAcGA1UECRMAMRQwEgYDVQQKEwtIeXBlcmxlZGdlcjEPMA0GA1UECxMGRmFi 40 | cmljMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0SUqm9/Tx7HWxa+aT8IRie+o 41 | Bgk3pvYyajstdJR6SyBsILslxZAxcOJR7fvTzIb45ZQSbiPfwZIVzzbKZ/DyGKOB 42 | xDCBwTAOBgNVHQ8BAf8EBAMCAaYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF 43 | BwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIM6JXFXgAkS3WcTDJX2kVOeC 44 | 70hVRrG9+4BxC0K6sISVMFQGA1UdEQRNMEuCCWxvY2FsaG9zdIIHb3JnMS1jYYIO 45 | b3JnMS1jYS5mYWJyaWOCGW9yZzEtY2EuaGxmLWJsb2NrY2hhaW4udGuHBH8AAAGH 46 | BIs7TpQwCgYIKoZIzj0EAwIDSQAwRgIhAJ0ECJaUrNbq4S3Yk4ForGZ6HO/2r4Zd 47 | Hr4OSk4HBN8HAiEA6cA5hOl6LfOv2WGqr4UBZUoRQl/7hirbVDQG3nHclLY= 48 | -----END CERTIFICATE----- 49 | url: https://org1-ca.hlf-blockchain.tk:443 50 | org2-ca.fabric: 51 | caName: ca 52 | registrar: 53 | enrollId: enroll 54 | enrollSecret: enrollpw 55 | tlsCACerts: 56 | pem: 57 | - | 58 | -----BEGIN CERTIFICATE----- 59 | MIICaTCCAg6gAwIBAgIRAPWOwkSYGVdWHMcQmhaQ4AgwCgYIKoZIzj0EAwIwUjET 60 | MBEGA1UEBhMKQ2FsaWZvcm5pYTEJMAcGA1UEBxMAMQkwBwYDVQQJEwAxFDASBgNV 61 | BAoTC0h5cGVybGVkZ2VyMQ8wDQYDVQQLEwZGYWJyaWMwHhcNMjIwNDA3MDYyNzQw 62 | WhcNMzIwNDA4MDYyNzQwWjBSMRMwEQYDVQQGEwpDYWxpZm9ybmlhMQkwBwYDVQQH 63 | EwAxCTAHBgNVBAkTADEUMBIGA1UEChMLSHlwZXJsZWRnZXIxDzANBgNVBAsTBkZh 64 | YnJpYzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABNOiIfbddPd7EOSTmieKSm09 65 | J/cmhQ+Q8dHDm5wB8Zk4aiV/ZxxMmnwK9cwnk1UbTYzR8uELYj6bKk5KF+fyCdmj 66 | gcQwgcEwDgYDVR0PAQH/BAQDAgGmMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEF 67 | BQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCDJ76RDaORMNZyZhDx+gluZ 68 | 34HKi7fFBySCCjBS0BEYpDBUBgNVHREETTBLgglsb2NhbGhvc3SCB29yZzItY2GC 69 | Dm9yZzItY2EuZmFicmljghlvcmcyLWNhLmhsZi1ibG9ja2NoYWluLnRrhwR/AAAB 70 | hwSLO06UMAoGCCqGSM49BAMCA0kAMEYCIQDi6oTifQn5NveeNREYef1KCWQzEgOE 71 | FpgpYF/HMhbngQIhAMniifDMf4ywMKqQ6K8Gw51KzFIdNy1qfblKb+uMPM33 72 | -----END CERTIFICATE----- 73 | url: https://org2-ca.hlf-blockchain.tk:443 74 | channels: 75 | _default: 76 | orderers: 77 | - ord-node1.fabric 78 | peers: {} 79 | client: 80 | organization: 81 | name: hlf-network 82 | orderers: 83 | ord-node1.fabric: 84 | grpcOptions: 85 | allow-insecure: false 86 | tlsCACerts: 87 | pem: | 88 | -----BEGIN CERTIFICATE----- 89 | MIICRDCCAeugAwIBAgIQZc9hibJ+i9Ucj+WvF/s64jAKBggqhkjOPQQDAjBtMQsw 90 | CQYDVQQGEwJFUzERMA8GA1UEBxMIQWxpY2FudGUxETAPBgNVBAkTCEFsaWNhbnRl 91 | MRkwFwYDVQQKExBLdW5nIEZ1IFNvZnR3YXJlMQ0wCwYDVQQLEwRUZWNoMQ4wDAYD 92 | VQQDEwV0bHNjYTAeFw0yMjA0MDcwNjI3NDFaFw0zMjA0MDgwNjI3NDFaMG0xCzAJ 93 | BgNVBAYTAkVTMREwDwYDVQQHEwhBbGljYW50ZTERMA8GA1UECRMIQWxpY2FudGUx 94 | GTAXBgNVBAoTEEt1bmcgRnUgU29mdHdhcmUxDTALBgNVBAsTBFRlY2gxDjAMBgNV 95 | BAMTBXRsc2NhMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdistDS6uq8cHxl9B 96 | KI01lt+BDG8E7ZlXnnyf20oHOaLofUc5+HFZ4qWV84xGz66OswwGMCvicJ5HL8zm 97 | qfeSX6NtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggr 98 | BgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCAmXMm+GkfaDuMgV+ft 99 | EeKpPToWLazsFntyURq0iXLArzAKBggqhkjOPQQDAgNHADBEAiAviCW3/+kgRIot 100 | r5yd+QIf7fbDAzTI+dW6cIuFWqlOJgIgH5trRqBBHZbIAT9Dedkqng0+Dlfh9fAg 101 | XQrbNIz0QGQ= 102 | -----END CERTIFICATE----- 103 | url: grpcs://ord-node1.hlf-blockchain.tk:443 104 | organizations: 105 | OrdererMSP: 106 | cryptoPath: /tmp/cryptopath 107 | mspid: OrdererMSP 108 | orderers: 109 | - ord-node1.fabric 110 | peers: [] 111 | users: 112 | admin: 113 | cert: 114 | pem: | 115 | -----BEGIN CERTIFICATE----- 116 | MIICUjCCAfmgAwIBAgIUa57FW4zmutPj0jElFxq0MgZffN8wCgYIKoZIzj0EAwIw 117 | ajELMAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGlj 118 | YW50ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEL 119 | MAkGA1UEAxMCY2EwHhcNMjIwNDA4MDYzOTAwWhcNMjMwNDA4MDY0NDAwWjAgMQ4w 120 | DAYDVQQLEwVhZG1pbjEOMAwGA1UEAxMFYWRtaW4wWTATBgcqhkjOPQIBBggqhkjO 121 | PQMBBwNCAARYTZkC/rMedc3AxSpOVIZlL/bobwH0cexT4GJqLmbH3XLkH3VCYf6g 122 | mEWezGxMts/zGS8x2p2XACn7LZtf7RAmo4HGMIHDMA4GA1UdDwEB/wQEAwIHgDAM 123 | BgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQN42KcScbBz1NjcchbvVYto07zYzArBgNV 124 | HSMEJDAigCBKDhOQdKTeYqG5KI4ZQhWAR6rdk/Hfnp/OJnbeCETaZjBXBggqAwQF 125 | BgcIAQRLeyJhdHRycyI6eyJoZi5BZmZpbGlhdGlvbiI6IiIsImhmLkVucm9sbG1l 126 | bnRJRCI6ImFkbWluIiwiaGYuVHlwZSI6ImFkbWluIn19MAoGCCqGSM49BAMCA0cA 127 | MEQCIFj3ZKkLH3ZkJJhtvwwcjMyaLnV6PWZidBYXzuHMyDKfAiAi2IYwHjZJZe2X 128 | qKFfKIRw1t2QkMVAVcQcFWckjvXgLg== 129 | -----END CERTIFICATE----- 130 | key: 131 | pem: | 132 | -----BEGIN PRIVATE KEY----- 133 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgmkRHGuyq7lQtu5Jo 134 | 4mVUup/+DXxeIasJDVsqrbaz0ZChRANCAARYTZkC/rMedc3AxSpOVIZlL/bobwH0 135 | cexT4GJqLmbH3XLkH3VCYf6gmEWezGxMts/zGS8x2p2XACn7LZtf7RAm 136 | -----END PRIVATE KEY----- 137 | peers: [] 138 | version: 1.0.0 139 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hyperledger Fabric On Kubernetes 2 | 3 | ### Youtube 4 | 5 | 6 |

7 | Music Caster Video Demo Thumbnail 8 |

9 |
10 | 11 | ### Namespace 12 | 13 | ```bash 14 | kubectl create ns fabric 15 | ``` 16 | 17 | ### CA 18 | 19 | ```bash 20 | kubectl hlf ca create --storage-class=do-block-storage --capacity=2Gi --name=org1-ca --enroll-id=enroll --enroll-pw=enrollpw --namespace=fabric 21 | kubectl hlf ca create --storage-class=do-block-storage --capacity=2Gi --name=org2-ca --enroll-id=enroll --enroll-pw=enrollpw --namespace=fabric 22 | kubectl hlf ca create --storage-class=do-block-storage --capacity=2Gi --name=ord-ca --enroll-id=enroll --enroll-pw=enrollpw --namespace=fabric 23 | ``` 24 | 25 | ```bash 26 | # GET ALL CAs 27 | kubectl get fabriccas.hlf.kungfusoftware.es -A 28 | ``` 29 | 30 | ### Peer 31 | 32 | ```bash 33 | kubectl hlf ca register --name=org1-ca --user=org1-peer1 --secret=peerpw --type=peer --enroll-id enroll --enroll-secret=enrollpw --mspid=Org1MSP --namespace=fabric 34 | kubectl hlf ca register --name=org1-ca --user=org1-peer2 --secret=peerpw --type=peer --enroll-id enroll --enroll-secret=enrollpw --mspid=Org1MSP --namespace=fabric 35 | kubectl hlf ca register --name=org2-ca --user=org2-peer1 --secret=peerpw --type=peer --enroll-id enroll --enroll-secret=enrollpw --mspid=Org2MSP --namespace=fabric 36 | kubectl hlf ca register --name=org2-ca --user=org2-peer2 --secret=peerpw --type=peer --enroll-id enroll --enroll-secret=enrollpw --mspid=Org2MSP --namespace=fabric 37 | ``` 38 | 39 | ```bash 40 | kubectl hlf peer create --storage-class=do-block-storage --enroll-id=org1-peer1 --mspid=Org1MSP --enroll-pw=peerpw --capacity=5Gi --name=org1-peer1 --ca-name=org1-ca.fabric --namespace=fabric --statedb=couchdb 41 | kubectl-hlf peer create --storage-class=do-block-storage --enroll-id=org1-peer2 --mspid=Org1MSP --enroll-pw=peerpw --capacity=5Gi --name=org1-peer2 --ca-name=org1-ca.fabric --namespace=fabric --statedb=couchdb 42 | kubectl-hlf peer create --storage-class=do-block-storage --enroll-id=org2-peer1 --mspid=Org2MSP --enroll-pw=peerpw --capacity=5Gi --name=org2-peer1 --ca-name=org2-ca.fabric --namespace=fabric --statedb=couchdb 43 | kubectl-hlf peer create --storage-class=do-block-storage --enroll-id=org2-peer2 --mspid=Org2MSP --enroll-pw=peerpw --capacity=5Gi --name=org2-peer2 --ca-name=org2-ca.fabric --namespace=fabric --statedb=couchdb 44 | ``` 45 | 46 | ```bash 47 | # GET ALL PEERs 48 | kubectl get fabricpeers.hlf.kungfusoftware.es -A 49 | ``` 50 | 51 | ### Admin Certs 52 | 53 | ```bash 54 | kubectl hlf ca register --name=org1-ca --user=admin --secret=adminpw --type=admin --enroll-id enroll --enroll-secret=enrollpw --mspid=Org1MSP --namespace=fabric 55 | kubectl hlf ca enroll --name=org1-ca --user=admin --secret=adminpw --ca-name ca --output org1-peer.yaml --mspid=Org1MSP --namespace=fabric 56 | ``` 57 | 58 | ```bash 59 | kubectl hlf ca register --name=org2-ca --user=admin --secret=adminpw --type=admin --enroll-id enroll --enroll-secret=enrollpw --mspid=Org2MSP --namespace=fabric 60 | kubectl hlf ca enroll --name=org2-ca --user=admin --secret=adminpw --ca-name ca --output org2-peer.yaml --mspid=Org2MSP --namespace=fabric 61 | ``` 62 | 63 | ### Connection Profile 64 | 65 | ```bash 66 | kubectl hlf inspect --output networkConfig.yaml -o Org1MSP -o OrdererMSP -o Org2MSP 67 | ``` 68 | 69 | ```bash 70 | kubectl hlf utils adduser --userPath=org1-peer.yaml --config=networkConfig.yaml --username=admin --mspid=Org1MSP 71 | kubectl hlf utils adduser --userPath=org2-peer.yaml --config=networkConfig.yaml --username=admin --mspid=Org2MSP 72 | ``` 73 | 74 | ### Orderer 75 | 76 | ```bash 77 | kubectl hlf ca register --name=ord-ca --user=orderer --secret=ordererpw --type=orderer --enroll-id enroll --enroll-secret=enrollpw --mspid=OrdererMSP --namespace=fabric 78 | ``` 79 | 80 | ```bash 81 | kubectl hlf ordnode create --storage-class=do-block-storage --enroll-id=orderer --mspid=OrdererMSP --enroll-pw=ordererpw --capacity=2Gi --name=ord-node1 --ca-name=ord-ca.fabric --namespace=fabric 82 | ``` 83 | 84 | ```bash 85 | kubectl hlf ca register --name=ord-ca --user=admin --secret=adminpw --type=admin --enroll-id enroll --enroll-secret=enrollpw --mspid=OrdererMSP --namespace=fabric 86 | kubectl-hlf ca enroll --name=ord-ca --user=admin --secret=adminpw --mspid=OrdererMSP --ca-name ca --output admin-ordservice.yaml --namespace=fabric 87 | kubectl-hlf ca enroll --name=ord-ca --user=admin --secret=adminpw --mspid=OrdererMSP --ca-name tlsca --output admin-tls-ordservice.yaml --namespace=fabric 88 | ``` 89 | 90 | ```bash 91 | kubectl-hlf inspect --output ordservice.yaml -o OrdererMSP 92 | ``` 93 | 94 | ```bash 95 | kubectl-hlf utils adduser --userPath=admin-ordservice.yaml --config=ordservice.yaml --username=admin --mspid=OrdererMSP 96 | ``` 97 | 98 | ### Connection Profile 99 | 100 | ```bash 101 | kubectl hlf inspect --output networkConfig.yaml -o Org1MSP -o OrdererMSP -o Org2MSP 102 | ``` 103 | 104 | ### Channel 105 | 106 | ```bash 107 | kubectl hlf channel generate --output=mychannel.block --name=mychannel --organizations Org1MSP --organizations Org2MSP --ordererOrganizations OrdererMSP 108 | ``` 109 | 110 | ```bash 111 | kubectl hlf ordnode join --block=mychannel.block --name=ord-node1 --namespace=fabric --identity=admin-tls-ordservice.yaml --namespace=fabric 112 | ``` 113 | 114 | ```bash 115 | kubectl hlf channel join --name=mychannel --config=networkConfig.yaml --user=admin -p=org1-peer1.fabric 116 | kubectl hlf channel join --name=mychannel --config=networkConfig.yaml --user=admin -p=org1-peer2.fabric 117 | kubectl hlf channel join --name=mychannel --config=networkConfig.yaml --user=admin -p=org2-peer1.fabric 118 | kubectl hlf channel join --name=mychannel --config=networkConfig.yaml --user=admin -p=org2-peer2.fabric 119 | ``` 120 | 121 | ### Anchor Peers 122 | 123 | ```bash 124 | kubectl hlf channel addanchorpeer --channel=mychannel --config=networkConfig.yaml --user=admin --peer=org1-peer1.fabric 125 | kubectl hlf channel addanchorpeer --channel=mychannel --config=networkConfig.yaml --user=admin --peer=org2-peer1.fabric 126 | ``` 127 | 128 | ### Chaincode 129 | 130 | ```bash 131 | CC_NAME=mycc 132 | cat <"metadata.json" 133 | { 134 | "type": "ccaas", 135 | "label": "${CC_NAME}" 136 | } 137 | METADATA-EOF 138 | 139 | cat <"connection.json" 140 | { 141 | "address": "${CC_NAME}:7052", 142 | "dial_timeout": "10s", 143 | "tls_required": false 144 | } 145 | CONN_EOF 146 | 147 | tar cfz code.tar.gz connection.json 148 | tar cfz ${CC_NAME}-external.tgz metadata.json code.tar.gz 149 | PACKAGE_ID=$(kubectl-hlf chaincode calculatepackageid --path=$CC_NAME-external.tgz --language=node --label=$CC_NAME) 150 | echo "PACKAGE_ID=$PACKAGE_ID" 151 | ``` 152 | 153 | ### Installing Chaincode 154 | 155 | ```bash 156 | kubectl hlf chaincode install --path=./${CC_NAME}-external.tgz --config=networkConfig.yaml --language=node --label=$CC_NAME --user=admin --peer=org1-peer1.fabric 157 | kubectl hlf chaincode install --path=./${CC_NAME}-external.tgz --config=networkConfig.yaml --language=node --label=$CC_NAME --user=admin --peer=org2-peer1.fabric 158 | ``` 159 | 160 | ### Chaincode Containerizing 161 | 162 | ```bash 163 | chaincode structure 164 | package.json file 165 | dockerfile 166 | docker build and push 167 | ``` 168 | 169 | ### Deploying Chaincode 170 | 171 | ```bash 172 | kubectl hlf externalchaincode sync --image=adityajoshi12/hlf-nodejs-external-cc:latest --name=$CC_NAME --namespace=fabric --package-id=$PACKAGE_ID --tls-required=false --replicas=1 173 | ``` 174 | 175 | ### Approve Chaincode 176 | 177 | ```bash 178 | kubectl hlf chaincode approveformyorg --config=networkConfig.yaml --user=admin --peer=org1-peer1.fabric --package-id=$PACKAGE_ID --version 1.0 --sequence 1 --name=$CC_NAME --policy="OR('Org1MSP.member','Org2MSP.member')" --channel=mychannel 179 | kubectl hlf chaincode approveformyorg --config=networkConfig.yaml --user=admin --peer=org2-peer1.fabric --package-id=$PACKAGE_ID --version 1.0 --sequence 1 --name=$CC_NAME --policy="OR('Org1MSP.member','Org2MSP.member')" --channel=mychannel 180 | ``` 181 | 182 | ### Commit Chaincode 183 | 184 | ```bash 185 | kubectl hlf chaincode commit --config=networkConfig.yaml --mspid=Org1MSP --user=admin --version 1.0 --sequence 1 --name=$CC_NAME --policy="OR('Org1MSP.member','Org2MSP.member')" --channel=mychannel 186 | ``` 187 | 188 | ### Invoke/Query 189 | 190 | ```bash 191 | kubectl hlf chaincode invoke --config=networkConfig.yaml --user=admin --peer=org1-peer1.fabric --chaincode=$CC_NAME --channel=mychannel --fcn=createCar -a "1000" -a "honda" -a "civic" -a "red" -a "aditya" 192 | ``` 193 | 194 | ```bash 195 | kubectl hlf chaincode query --config=networkConfig.yaml --user=admin --peer=org1-peer1.fabric --chaincode=$CC_NAME --channel=mychannel --fcn=queryAllCars -a '' 196 | ``` 197 | 198 | ### Also read 199 | 1. [Istio Enabled blockchain network](ISTIO.md) 200 | 2. [Adding new org running in different kubernetes cluster](ADD-ORG.md) 201 | -------------------------------------------------------------------------------- /ISTIO.md: -------------------------------------------------------------------------------- 1 | # HLF Operator With Istio 2 | 3 | ## Adding Istio and HLF Opertor 4 | 5 | ```bash 6 | helm install hlf-operator ./chart/hlf-operator 7 | istioctl install --set profile=default -y 8 | export DOMAIN= 9 | ``` 10 | 11 | ### CA 12 | 13 | ```bash 14 | kubectl hlf ca create --storage-class=do-block-storage --capacity=2Gi --name=org1-ca --enroll-id=enroll --enroll-pw=enrollpw --namespace=fabric --hosts=org1-ca.$DOMAIN --istio-ingressgateway=ingressgateway --istio-port=443 15 | kubectl hlf ca create --storage-class=do-block-storage --capacity=2Gi --name=org2-ca --enroll-id=enroll --enroll-pw=enrollpw --namespace=fabric --hosts=org2-ca.$DOMAIN --istio-ingressgateway=ingressgateway --istio-port=443 16 | kubectl hlf ca create --storage-class=do-block-storage --capacity=2Gi --name=ord-ca --enroll-id=enroll --enroll-pw=enrollpw --namespace=fabric --hosts=ord-ca.$DOMAIN --istio-ingressgateway=ingressgateway --istio-port=443 17 | ``` 18 | 19 | ### Register Peer Identities 20 | 21 | ```bash 22 | kubectl hlf ca register --name=org1-ca --user=org1-peer1 --secret=peerpw --type=peer --enroll-id enroll --enroll-secret=enrollpw --mspid=Org1MSP --namespace=fabric 23 | kubectl hlf ca register --name=org1-ca --user=org1-peer2 --secret=peerpw --type=peer --enroll-id enroll --enroll-secret=enrollpw --mspid=Org1MSP --namespace=fabric 24 | kubectl hlf ca register --name=org2-ca --user=org2-peer1 --secret=peerpw --type=peer --enroll-id enroll --enroll-secret=enrollpw --mspid=Org2MSP --namespace=fabric 25 | kubectl hlf ca register --name=org2-ca --user=org2-peer2 --secret=peerpw --type=peer --enroll-id enroll --enroll-secret=enrollpw --mspid=Org2MSP --namespace=fabric 26 | ``` 27 | 28 | ### Peer 29 | 30 | ```bash 31 | kubectl hlf peer create --storage-class=do-block-storage --enroll-id=org1-peer1 --mspid=Org1MSP --enroll-pw=peerpw --capacity=5Gi --name=org1-peer1 --ca-name=org1-ca.fabric --namespace=fabric --statedb=couchdb --hosts=org1-peer1."$DOMAIN" --istio-ingressgateway=ingressgateway --istio-port=443 32 | kubectl-hlf peer create --storage-class=do-block-storage --enroll-id=org1-peer2 --mspid=Org1MSP --enroll-pw=peerpw --capacity=5Gi --name=org1-peer2 --ca-name=org1-ca.fabric --namespace=fabric --statedb=couchdb --hosts=org1-peer2."$DOMAIN" --istio-ingressgateway=ingressgateway --istio-port=443 33 | kubectl-hlf peer create --storage-class=do-block-storage --enroll-id=org2-peer1 --mspid=Org2MSP --enroll-pw=peerpw --capacity=5Gi --name=org2-peer1 --ca-name=org2-ca.fabric --namespace=fabric --statedb=couchdb --hosts=org2-peer1."$DOMAIN" --istio-ingressgateway=ingressgateway --istio-port=443 34 | kubectl-hlf peer create --storage-class=do-block-storage --enroll-id=org2-peer2 --mspid=Org2MSP --enroll-pw=peerpw --capacity=5Gi --name=org2-peer2 --ca-name=org2-ca.fabric --namespace=fabric --statedb=couchdb --hosts=org2-peer2."$DOMAIN" --istio-ingressgateway=ingressgateway --istio-port=443 35 | ``` 36 | 37 | ### Admin Certs 38 | 39 | ```bash 40 | kubectl hlf ca register --name=org1-ca --user=admin --secret=adminpw --type=admin --enroll-id enroll --enroll-secret=enrollpw --mspid=Org1MSP --namespace=fabric 41 | kubectl hlf ca enroll --name=org1-ca --user=admin --secret=adminpw --ca-name ca --output org1-peer.yaml --mspid=Org1MSP --namespace=fabric 42 | ``` 43 | 44 | ```bash 45 | kubectl hlf ca register --name=org2-ca --user=admin --secret=adminpw --type=admin --enroll-id enroll --enroll-secret=enrollpw --mspid=Org2MSP --namespace=fabric 46 | kubectl hlf ca enroll --name=org2-ca --user=admin --secret=adminpw --ca-name ca --output org2-peer.yaml --mspid=Org2MSP --namespace=fabric 47 | ``` 48 | 49 | ### Connection Profile 50 | 51 | ```bash 52 | kubectl hlf inspect --output networkConfig.yaml -o Org1MSP -o OrdererMSP -o Org2MSP 53 | ``` 54 | 55 | ```bash 56 | # adding users to connection profile 57 | kubectl hlf utils adduser --userPath=org1-peer.yaml --config=networkConfig.yaml --username=admin --mspid=Org1MSP 58 | kubectl hlf utils adduser --userPath=org2-peer.yaml --config=networkConfig.yaml --username=admin --mspid=Org2MSP 59 | ``` 60 | 61 | ### Orderer 62 | 63 | ```bash 64 | kubectl hlf ca register --name=ord-ca --user=orderer --secret=ordererpw --type=orderer --enroll-id enroll --enroll-secret=enrollpw --mspid=OrdererMSP --namespace=fabric 65 | ``` 66 | 67 | ```bash 68 | kubectl hlf ordnode create --storage-class=do-block-storage --enroll-id=orderer --mspid=OrdererMSP --enroll-pw=ordererpw --capacity=2Gi --name=ord-node1 --ca-name=ord-ca.fabric --namespace=fabric --hosts=ord-node1.$DOMAIN --istio-ingressgateway=ingressgateway --istio-port=443 --image=hyperledger/fabric-orderer --version=2.5.0 --admin-hosts=ord-node1-admin.$DOMAIN 69 | ``` 70 | 71 | ```bash 72 | kubectl hlf ca register --name=ord-ca --user=admin --secret=adminpw --type=admin --enroll-id enroll --enroll-secret=enrollpw --mspid=OrdererMSP --namespace=fabric 73 | kubectl-hlf ca enroll --name=ord-ca --user=admin --secret=adminpw --mspid=OrdererMSP --ca-name ca --output admin-ordservice.yaml --namespace=fabric 74 | kubectl-hlf ca enroll --name=ord-ca --user=admin --secret=adminpw --mspid=OrdererMSP --ca-name tlsca --output admin-tls-ordservice.yaml --namespace=fabric 75 | ``` 76 | 77 | ```bash 78 | 79 | kubectl-hlf inspect --output ordservice.yaml -o OrdererMSP 80 | kubectl-hlf utils adduser --userPath=admin-ordservice.yaml --config=ordservice.yaml --username=admin --mspid=OrdererMSP 81 | ``` 82 | 83 | ### Connection Profile 84 | 85 | ```bash 86 | kubectl hlf inspect --output networkConfig.yaml -o Org1MSP -o OrdererMSP -o Org2MSP 87 | # adding users to connection profile 88 | kubectl hlf utils adduser --userPath=org1-peer.yaml --config=networkConfig.yaml --username=admin --mspid=Org1MSP 89 | kubectl hlf utils adduser --userPath=org2-peer.yaml --config=networkConfig.yaml --username=admin --mspid=Org2MSP 90 | ``` 91 | 92 | ### Channel 93 | 94 | ```bash 95 | # create channel - mychannel 96 | kubectl hlf channel generate --output=mychannel.block --name=mychannel --organizations Org1MSP --organizations Org2MSP --ordererOrganizations OrdererMSP 97 | ``` 98 | 99 | ```bash 100 | # Orderer join channel 101 | kubectl hlf ordnode join --block=mychannel.block --name=ord-node1 --namespace=fabric --identity=admin-tls-ordservice.yaml --namespace=fabric 102 | ``` 103 | 104 | ```bash 105 | # peer channel join 106 | kubectl hlf channel join --name=mychannel --config=networkConfig.yaml --user=admin -p=org1-peer1.fabric 107 | kubectl hlf channel join --name=mychannel --config=networkConfig.yaml --user=admin -p=org1-peer2.fabric 108 | kubectl hlf channel join --name=mychannel --config=networkConfig.yaml --user=admin -p=org2-peer1.fabric 109 | kubectl hlf channel join --name=mychannel --config=networkConfig.yaml --user=admin -p=org2-peer2.fabric 110 | ``` 111 | 112 | ### Anchor Peer 113 | 114 | ```bash 115 | kubectl hlf channel addanchorpeer --channel=mychannel --config=networkConfig.yaml --user=admin --peer=org1-peer1.fabric 116 | kubectl hlf channel addanchorpeer --channel=mychannel --config=networkConfig.yaml --user=admin --peer=org2-peer1.fabric 117 | ``` 118 | 119 | ### Chaincode 120 | 121 | ```bash 122 | CC_NAME=mycc 123 | cat <"metadata.json" 124 | { 125 | "type": "ccaas", 126 | "label": "${CC_NAME}" 127 | } 128 | METADATA-EOF 129 | 130 | cat <"connection.json" 131 | { 132 | "address": "${CC_NAME}:7052", 133 | "dial_timeout": "10s", 134 | "tls_required": false 135 | } 136 | CONN_EOF 137 | 138 | tar cfz code.tar.gz connection.json 139 | tar cfz ${CC_NAME}-external.tgz metadata.json code.tar.gz 140 | PACKAGE_ID=$(kubectl-hlf chaincode calculatepackageid --path=$CC_NAME-external.tgz --language=node --label=$CC_NAME) 141 | echo "PACKAGE_ID=$PACKAGE_ID" 142 | ``` 143 | 144 | ### Installing Chaincode 145 | 146 | ```bash 147 | kubectl hlf chaincode install --path=./${CC_NAME}-external.tgz --config=networkConfig.yaml --language=node --label=$CC_NAME --user=admin --peer=org1-peer1.fabric 148 | kubectl hlf chaincode install --path=./${CC_NAME}-external.tgz --config=networkConfig.yaml --language=node --label=$CC_NAME --user=admin --peer=org2-peer1.fabric 149 | ``` 150 | 151 | ### Chaincode Containerizing 152 | 153 | ```bash 154 | chaincode structure 155 | package.json file 156 | dockerfile 157 | docker build and push 158 | ``` 159 | 160 | ### Deploying Chaincode 161 | 162 | ```bash 163 | kubectl hlf externalchaincode sync --image=adityajoshi12/hlf-nodejs-external-cc:latest --name=$CC_NAME --namespace=fabric --package-id=$PACKAGE_ID --tls-required=false --replicas=1 164 | ``` 165 | 166 | ### Approve Chaincode 167 | 168 | ```bash 169 | kubectl hlf chaincode approveformyorg --config=networkConfig.yaml --user=admin --peer=org1-peer1.fabric --package-id=$PACKAGE_ID --version 1.0 --sequence 1 --name=$CC_NAME --policy="OR('Org1MSP.member','Org2MSP.member')" --channel=mychannel 170 | kubectl hlf chaincode approveformyorg --config=networkConfig.yaml --user=admin --peer=org2-peer1.fabric --package-id=$PACKAGE_ID --version 1.0 --sequence 1 --name=$CC_NAME --policy="OR('Org1MSP.member','Org2MSP.member')" --channel=mychannel 171 | ``` 172 | 173 | ### Commit Chaincode 174 | 175 | ```bash 176 | kubectl hlf chaincode commit --config=networkConfig.yaml --mspid=Org1MSP --user=admin --version 1.0 --sequence 1 --name=$CC_NAME --policy="OR('Org1MSP.member','Org2MSP.member')" --channel=mychannel 177 | ``` 178 | 179 | ### Invoke/Query 180 | 181 | ```bash 182 | kubectl hlf chaincode invoke --config=networkConfig.yaml --user=admin --peer=org1-peer1.fabric --chaincode=$CC_NAME --channel=mychannel --fcn=createCar -a "1000" -a "honda" -a "civic" -a "red" -a "aditya" 183 | ``` 184 | 185 | ```bash 186 | kubectl hlf chaincode query --config=networkConfig.yaml --user=admin --peer=org1-peer1.fabric --chaincode=$CC_NAME --channel=mychannel --fcn=queryAllCars -a '' 187 | ``` 188 | -------------------------------------------------------------------------------- /client/nodejs/connection-org.yaml: -------------------------------------------------------------------------------- 1 | certificateAuthorities: 2 | ord-ca.fabric: 3 | caName: ca 4 | registrar: 5 | enrollId: enroll 6 | enrollSecret: enrollpw 7 | tlsCACerts: 8 | pem: 9 | - | 10 | -----BEGIN CERTIFICATE----- 11 | MIICSjCCAfCgAwIBAgIQdfbLK6yqlGEWU7WZ9XjF7jAKBggqhkjOPQQDAjBSMRMw 12 | EQYDVQQGEwpDYWxpZm9ybmlhMQkwBwYDVQQHEwAxCTAHBgNVBAkTADEUMBIGA1UE 13 | ChMLSHlwZXJsZWRnZXIxDzANBgNVBAsTBkZhYnJpYzAeFw0yMjAyMTIwNTM3NDFa 14 | Fw0zMjAyMTMwNTM3NDFaMFIxEzARBgNVBAYTCkNhbGlmb3JuaWExCTAHBgNVBAcT 15 | ADEJMAcGA1UECRMAMRQwEgYDVQQKEwtIeXBlcmxlZGdlcjEPMA0GA1UECxMGRmFi 16 | cmljMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzkQYAuMmpXWsZYdxQLz4i2+A 17 | Nw50BXNjiz0VDnBxWJUbezvYnro/w3PqX1us4Y02X+2zhNdwqfMIZRKt7TRjaKOB 18 | pzCBpDAOBgNVHQ8BAf8EBAMCAaYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF 19 | BwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIL54IUqL/NWe30LO5RFCKi+Y 20 | AHLaXTh3CU9MDUdmE5k/MDcGA1UdEQQwMC6CCWxvY2FsaG9zdIIGb3JkLWNhgg1v 21 | cmQtY2EuZmFicmljhwR/AAABhwSnY9kBMAoGCCqGSM49BAMCA0gAMEUCIEgVXbqa 22 | i/rin3EF2NNxDtoVxRJXci7gIBrcxVlTp9iTAiEAoymUYqML4qNceOAATAq34UBZ 23 | 4N6fTMTw2ELBAHy1LIU= 24 | -----END CERTIFICATE----- 25 | url: https://167.99.217.1:32541 26 | org1-ca.fabric: 27 | caName: ca 28 | registrar: 29 | enrollId: enroll 30 | enrollSecret: enrollpw 31 | tlsCACerts: 32 | pem: 33 | - | 34 | -----BEGIN CERTIFICATE----- 35 | MIICTTCCAfOgAwIBAgIRAJF0nHmNU2hz964LtFrvOtwwCgYIKoZIzj0EAwIwUjET 36 | MBEGA1UEBhMKQ2FsaWZvcm5pYTEJMAcGA1UEBxMAMQkwBwYDVQQJEwAxFDASBgNV 37 | BAoTC0h5cGVybGVkZ2VyMQ8wDQYDVQQLEwZGYWJyaWMwHhcNMjIwMjEyMDUzNzM3 38 | WhcNMzIwMjEzMDUzNzM3WjBSMRMwEQYDVQQGEwpDYWxpZm9ybmlhMQkwBwYDVQQH 39 | EwAxCTAHBgNVBAkTADEUMBIGA1UEChMLSHlwZXJsZWRnZXIxDzANBgNVBAsTBkZh 40 | YnJpYzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHfvuwNAu67gGTEq3kfwPrSc 41 | iL9BLWnwTInvha1JYXMuOPuJSrs5dlsG+VMtEBQ1h77GKYd4YbiuQW8ZQRcbzJWj 42 | gakwgaYwDgYDVR0PAQH/BAQDAgGmMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEF 43 | BQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCCsEEZYe9ihhmmvKX6SDQt8 44 | yNYx3vmc8L0rIiY0u4GpJTA5BgNVHREEMjAwgglsb2NhbGhvc3SCB29yZzEtY2GC 45 | Dm9yZzEtY2EuZmFicmljhwR/AAABhwSnY9kBMAoGCCqGSM49BAMCA0gAMEUCIQDY 46 | SjVqG0LWtuO8lPHVb7PfhfBKMWmnAhyBgovuKHLdDgIgD10ip3roECDMDEnecNBn 47 | AuhY7tYw/9NvivZR5d1wW6A= 48 | -----END CERTIFICATE----- 49 | url: https://167.99.217.1:30781 50 | org2-ca.fabric: 51 | caName: ca 52 | registrar: 53 | enrollId: enroll 54 | enrollSecret: enrollpw 55 | tlsCACerts: 56 | pem: 57 | - | 58 | -----BEGIN CERTIFICATE----- 59 | MIICTjCCAfOgAwIBAgIRANdf/s3aVrYQ1mLtUPfoz7QwCgYIKoZIzj0EAwIwUjET 60 | MBEGA1UEBhMKQ2FsaWZvcm5pYTEJMAcGA1UEBxMAMQkwBwYDVQQJEwAxFDASBgNV 61 | BAoTC0h5cGVybGVkZ2VyMQ8wDQYDVQQLEwZGYWJyaWMwHhcNMjIwMjEyMDUzNzM5 62 | WhcNMzIwMjEzMDUzNzM5WjBSMRMwEQYDVQQGEwpDYWxpZm9ybmlhMQkwBwYDVQQH 63 | EwAxCTAHBgNVBAkTADEUMBIGA1UEChMLSHlwZXJsZWRnZXIxDzANBgNVBAsTBkZh 64 | YnJpYzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPBCd+GtbSU2PMEvm4siTv72 65 | DFU8bIjrilK6RMIYAL5PiJS49AWqcSAhoAsBPWXU5rjZhRE4R5FtfpTUul6Xiw2j 66 | gakwgaYwDgYDVR0PAQH/BAQDAgGmMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEF 67 | BQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCCJFoMShXPTpYzSOOCmyIzR 68 | hIdtqso2+1GgHb67/LjkkjA5BgNVHREEMjAwgglsb2NhbGhvc3SCB29yZzItY2GC 69 | Dm9yZzItY2EuZmFicmljhwR/AAABhwSnY9kBMAoGCCqGSM49BAMCA0kAMEYCIQCZ 70 | shV+PQld5hi9Sjo8E3V2yCLC5qu2OOYmLHFVPFMo+wIhAJUTc8gsg3avM8KK2Ojk 71 | B7YGbe0xrMmuxiHsQki1i9pZ 72 | -----END CERTIFICATE----- 73 | url: https://167.99.217.1:30398 74 | channels: 75 | mychannel: 76 | orderers: 77 | - ord-node1.fabric 78 | peers: 79 | org1-peer1.fabric: 80 | chaincodeQuery: true 81 | discover: true 82 | endorsingPeer: true 83 | eventSource: true 84 | ledgerQuery: true 85 | org1-peer2.fabric: 86 | chaincodeQuery: true 87 | discover: true 88 | endorsingPeer: true 89 | eventSource: true 90 | ledgerQuery: true 91 | org2-peer1.fabric: 92 | chaincodeQuery: true 93 | discover: true 94 | endorsingPeer: true 95 | eventSource: true 96 | ledgerQuery: true 97 | org2-peer2.fabric: 98 | chaincodeQuery: true 99 | discover: true 100 | endorsingPeer: true 101 | eventSource: true 102 | ledgerQuery: true 103 | client: 104 | organization: "" 105 | name: hlf-network 106 | orderers: 107 | ord-node1.fabric: 108 | grpcOptions: 109 | allow-insecure: false 110 | tlsCACerts: 111 | pem: | 112 | -----BEGIN CERTIFICATE----- 113 | MIICRjCCAeugAwIBAgIQGsEYDO4t/crJ3tsFXx7uFTAKBggqhkjOPQQDAjBtMQsw 114 | CQYDVQQGEwJFUzERMA8GA1UEBxMIQWxpY2FudGUxETAPBgNVBAkTCEFsaWNhbnRl 115 | MRkwFwYDVQQKExBLdW5nIEZ1IFNvZnR3YXJlMQ0wCwYDVQQLEwRUZWNoMQ4wDAYD 116 | VQQDEwV0bHNjYTAeFw0yMjAyMTIwNTM3NDFaFw0zMjAyMTMwNTM3NDFaMG0xCzAJ 117 | BgNVBAYTAkVTMREwDwYDVQQHEwhBbGljYW50ZTERMA8GA1UECRMIQWxpY2FudGUx 118 | GTAXBgNVBAoTEEt1bmcgRnUgU29mdHdhcmUxDTALBgNVBAsTBFRlY2gxDjAMBgNV 119 | BAMTBXRsc2NhMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENvrCWKtDaZrXW3GB 120 | xD0ESBMI5dDExvD5R8vm6s4ofzIfwCWHRXR3gYSmxOZEi8oUexLWRQLpF3fRYdM6 121 | yGGxZaNtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggr 122 | BgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCD8I/wuwDbnGrCMb+qL 123 | 1jzCnsnZJbbMCFN9DVy/ByARrTAKBggqhkjOPQQDAgNJADBGAiEApdSB1Q8UWL8Q 124 | izucIzO5AJm9yOYIS7FC9h4Dl7293tQCIQDtIYeyUK3YgJtUfFuWBWsTzRUM+H/w 125 | KYTINnT+yXOIOw== 126 | -----END CERTIFICATE----- 127 | url: grpcs://167.99.217.1:31086 128 | organizations: 129 | Org1MSP: 130 | cryptoPath: /tmp/cryptopath 131 | mspid: Org1MSP 132 | orderers: null 133 | peers: 134 | - org1-peer1.fabric 135 | - org1-peer2.fabric 136 | users: 137 | admin: 138 | cert: 139 | pem: | 140 | -----BEGIN CERTIFICATE----- 141 | MIICUjCCAfmgAwIBAgIUGI2XWviffQHmyTw6ywqwJc7S3R8wCgYIKoZIzj0EAwIw 142 | ajELMAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGlj 143 | YW50ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEL 144 | MAkGA1UEAxMCY2EwHhcNMjIwMjEzMDYwMjAwWhcNMjMwMjEzMDYwNzAwWjAgMQ4w 145 | DAYDVQQLEwVhZG1pbjEOMAwGA1UEAxMFYWRtaW4wWTATBgcqhkjOPQIBBggqhkjO 146 | PQMBBwNCAASfcyVUkVmK4WB6ETJ/zIbpQdljHOcXW2TB1Cw2wI9PTtd0clZi3Qb8 147 | nvTXGWbZxwKV4TGyr0k9mImUVgfXNKpko4HGMIHDMA4GA1UdDwEB/wQEAwIHgDAM 148 | BgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSUAB6stgRN7j9KxL5aZY9KFhJ5UjArBgNV 149 | HSMEJDAigCCXzW0ix1mjCY7pXW+tMHprjXF1lm+j2oPj1q+8mghRBDBXBggqAwQF 150 | BgcIAQRLeyJhdHRycyI6eyJoZi5BZmZpbGlhdGlvbiI6IiIsImhmLkVucm9sbG1l 151 | bnRJRCI6ImFkbWluIiwiaGYuVHlwZSI6ImFkbWluIn19MAoGCCqGSM49BAMCA0cA 152 | MEQCIEi+UegyCm2sDRwbpg8zRxKW9Opm5tpc3QWzUyHQtpEhAiALhwIaL7GxcdC8 153 | oFFJqs31Pg6o6N9rXxF4oY5iMFu+7Q== 154 | -----END CERTIFICATE----- 155 | key: 156 | pem: | 157 | -----BEGIN PRIVATE KEY----- 158 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgvZ3EGV2CKmKoiW79 159 | flUBksA06kYdXFR4fz25dwRkLGGhRANCAASfcyVUkVmK4WB6ETJ/zIbpQdljHOcX 160 | W2TB1Cw2wI9PTtd0clZi3Qb8nvTXGWbZxwKV4TGyr0k9mImUVgfXNKpk 161 | -----END PRIVATE KEY----- 162 | Org2MSP: 163 | cryptoPath: /tmp/cryptopath 164 | mspid: Org2MSP 165 | orderers: null 166 | peers: 167 | - org2-peer1.fabric 168 | - org2-peer2.fabric 169 | users: 170 | admin: 171 | cert: 172 | pem: | 173 | -----BEGIN CERTIFICATE----- 174 | MIICUjCCAfmgAwIBAgIUWs2bScuX+qhszDHfycJsQhGlvV4wCgYIKoZIzj0EAwIw 175 | ajELMAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGlj 176 | YW50ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEL 177 | MAkGA1UEAxMCY2EwHhcNMjIwMjEzMDYwNjAwWhcNMjMwMjEzMDYxMTAwWjAgMQ4w 178 | DAYDVQQLEwVhZG1pbjEOMAwGA1UEAxMFYWRtaW4wWTATBgcqhkjOPQIBBggqhkjO 179 | PQMBBwNCAARIdTTOwfBbgUpije6DYaMv+Nm/0TeH/hikoNxuqkasogsRhzNFto2j 180 | pBMtXePa0xXF6crmo50X72v23CW6AMCUo4HGMIHDMA4GA1UdDwEB/wQEAwIHgDAM 181 | BgNVHRMBAf8EAjAAMB0GA1UdDgQWBBR/BoDHvhjiH881Up7cRMwW4yF+KDArBgNV 182 | HSMEJDAigCCdV/rU2xHxKy0VE16wrl+v3O/JDyR+w9CCXkT2Ha5/eDBXBggqAwQF 183 | BgcIAQRLeyJhdHRycyI6eyJoZi5BZmZpbGlhdGlvbiI6IiIsImhmLkVucm9sbG1l 184 | bnRJRCI6ImFkbWluIiwiaGYuVHlwZSI6ImFkbWluIn19MAoGCCqGSM49BAMCA0cA 185 | MEQCIC2SeMbxs0XCtzC8Zrq5aSh2TdFFPFAuktrPxIdSgMjHAiBvTK2cHtPllxa0 186 | CoQMOM6r57YxHfdaZbpydQWP4PIlBQ== 187 | -----END CERTIFICATE----- 188 | key: 189 | pem: | 190 | -----BEGIN PRIVATE KEY----- 191 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgKdjCeq+X+AbRBDlu 192 | 1ymhDukB2PNLCTXlS8GzOePYa/ShRANCAARIdTTOwfBbgUpije6DYaMv+Nm/0TeH 193 | /hikoNxuqkasogsRhzNFto2jpBMtXePa0xXF6crmo50X72v23CW6AMCU 194 | -----END PRIVATE KEY----- 195 | peers: 196 | org1-peer1.fabric: 197 | grpcOptions: 198 | allow-insecure: false 199 | hostnameOverride: "" 200 | ssl-target-name-override: "" 201 | tlsCACerts: 202 | pem: | 203 | -----BEGIN CERTIFICATE----- 204 | MIICRjCCAeygAwIBAgIRALDyEJJpZmpjxzMcgI0r/dswCgYIKoZIzj0EAwIwbTEL 205 | MAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGljYW50 206 | ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEOMAwG 207 | A1UEAxMFdGxzY2EwHhcNMjIwMjEyMDUzNzM3WhcNMzIwMjEzMDUzNzM3WjBtMQsw 208 | CQYDVQQGEwJFUzERMA8GA1UEBxMIQWxpY2FudGUxETAPBgNVBAkTCEFsaWNhbnRl 209 | MRkwFwYDVQQKExBLdW5nIEZ1IFNvZnR3YXJlMQ0wCwYDVQQLEwRUZWNoMQ4wDAYD 210 | VQQDEwV0bHNjYTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABABWsoWSo0sM1ZUT 211 | DqOfCAj+hVjBQEkGngy6MBs+5XJhRtMiUnb4yh5U5sva3nH+hOjpz1dbSzQ0zLee 212 | dOw8v6ajbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYI 213 | KwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgaTyiCQeKzwAJh2RW 214 | obVyaFmPH6McB0OXlX5b2LCy/pcwCgYIKoZIzj0EAwIDSAAwRQIgTmgSU7BBNv5g 215 | OrVVRhk5JfMynG3O9lzm0fwL+jNw620CIQC7r8HFShKwgRo4WeiU0xWRiK+RqHp5 216 | fuwWKV3d0dcIMw== 217 | -----END CERTIFICATE----- 218 | url: grpcs://167.99.217.1:31842 219 | org1-peer2.fabric: 220 | grpcOptions: 221 | allow-insecure: false 222 | hostnameOverride: "" 223 | ssl-target-name-override: "" 224 | tlsCACerts: 225 | pem: | 226 | -----BEGIN CERTIFICATE----- 227 | MIICRjCCAeygAwIBAgIRALDyEJJpZmpjxzMcgI0r/dswCgYIKoZIzj0EAwIwbTEL 228 | MAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGljYW50 229 | ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEOMAwG 230 | A1UEAxMFdGxzY2EwHhcNMjIwMjEyMDUzNzM3WhcNMzIwMjEzMDUzNzM3WjBtMQsw 231 | CQYDVQQGEwJFUzERMA8GA1UEBxMIQWxpY2FudGUxETAPBgNVBAkTCEFsaWNhbnRl 232 | MRkwFwYDVQQKExBLdW5nIEZ1IFNvZnR3YXJlMQ0wCwYDVQQLEwRUZWNoMQ4wDAYD 233 | VQQDEwV0bHNjYTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABABWsoWSo0sM1ZUT 234 | DqOfCAj+hVjBQEkGngy6MBs+5XJhRtMiUnb4yh5U5sva3nH+hOjpz1dbSzQ0zLee 235 | dOw8v6ajbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYI 236 | KwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgaTyiCQeKzwAJh2RW 237 | obVyaFmPH6McB0OXlX5b2LCy/pcwCgYIKoZIzj0EAwIDSAAwRQIgTmgSU7BBNv5g 238 | OrVVRhk5JfMynG3O9lzm0fwL+jNw620CIQC7r8HFShKwgRo4WeiU0xWRiK+RqHp5 239 | fuwWKV3d0dcIMw== 240 | -----END CERTIFICATE----- 241 | url: grpcs://167.99.217.1:30826 242 | org2-peer1.fabric: 243 | grpcOptions: 244 | allow-insecure: false 245 | hostnameOverride: "" 246 | ssl-target-name-override: "" 247 | tlsCACerts: 248 | pem: | 249 | -----BEGIN CERTIFICATE----- 250 | MIICRjCCAeygAwIBAgIRAIsJn3gVVbld2KPRTZ9kVrUwCgYIKoZIzj0EAwIwbTEL 251 | MAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGljYW50 252 | ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEOMAwG 253 | A1UEAxMFdGxzY2EwHhcNMjIwMjEyMDUzNzM5WhcNMzIwMjEzMDUzNzM5WjBtMQsw 254 | CQYDVQQGEwJFUzERMA8GA1UEBxMIQWxpY2FudGUxETAPBgNVBAkTCEFsaWNhbnRl 255 | MRkwFwYDVQQKExBLdW5nIEZ1IFNvZnR3YXJlMQ0wCwYDVQQLEwRUZWNoMQ4wDAYD 256 | VQQDEwV0bHNjYTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABO6dqiB7GR6OTeGf 257 | nS+dHvE/Mh68G0Jug24EIm2iLn1FN+wsZb/Tw8brGDNz1H20iilV8hmMkGYHpjoc 258 | VkzZ4tWjbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYI 259 | KwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgej7FOcawq+srWFC3 260 | TikeOHIw3uHo1VB4qS9uvGOvQ80wCgYIKoZIzj0EAwIDSAAwRQIgK92/M2lTcUR3 261 | NdccuO2hiZDcxvCV7VHE20KvNHcSu0sCIQCuKoAoZSAvRkgudMs6qyCGGNzbaNzL 262 | ouSd5fMybqSt5w== 263 | -----END CERTIFICATE----- 264 | url: grpcs://167.99.217.1:31417 265 | org2-peer2.fabric: 266 | grpcOptions: 267 | allow-insecure: false 268 | hostnameOverride: "" 269 | ssl-target-name-override: "" 270 | tlsCACerts: 271 | pem: | 272 | -----BEGIN CERTIFICATE----- 273 | MIICRjCCAeygAwIBAgIRAIsJn3gVVbld2KPRTZ9kVrUwCgYIKoZIzj0EAwIwbTEL 274 | MAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGljYW50 275 | ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEOMAwG 276 | A1UEAxMFdGxzY2EwHhcNMjIwMjEyMDUzNzM5WhcNMzIwMjEzMDUzNzM5WjBtMQsw 277 | CQYDVQQGEwJFUzERMA8GA1UEBxMIQWxpY2FudGUxETAPBgNVBAkTCEFsaWNhbnRl 278 | MRkwFwYDVQQKExBLdW5nIEZ1IFNvZnR3YXJlMQ0wCwYDVQQLEwRUZWNoMQ4wDAYD 279 | VQQDEwV0bHNjYTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABO6dqiB7GR6OTeGf 280 | nS+dHvE/Mh68G0Jug24EIm2iLn1FN+wsZb/Tw8brGDNz1H20iilV8hmMkGYHpjoc 281 | VkzZ4tWjbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYI 282 | KwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgej7FOcawq+srWFC3 283 | TikeOHIw3uHo1VB4qS9uvGOvQ80wCgYIKoZIzj0EAwIDSAAwRQIgK92/M2lTcUR3 284 | NdccuO2hiZDcxvCV7VHE20KvNHcSu0sCIQCuKoAoZSAvRkgudMs6qyCGGNzbaNzL 285 | ouSd5fMybqSt5w== 286 | -----END CERTIFICATE----- 287 | url: grpcs://167.99.217.1:30322 288 | version: 1.0.0 289 | -------------------------------------------------------------------------------- /chaincode/fabcar/go/go.sum: -------------------------------------------------------------------------------- 1 | cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= 2 | github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 3 | github.com/DATA-DOG/go-txdb v0.1.3/go.mod h1:DhAhxMXZpUJVGnT+p9IbzJoRKvlArO2pkHjnGX7o0n0= 4 | github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= 5 | github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= 6 | github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= 7 | github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= 8 | github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= 9 | github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= 10 | github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= 11 | github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= 12 | github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= 13 | github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= 14 | github.com/cucumber/godog v0.8.0/go.mod h1:Cp3tEV1LRAyH/RuCThcxHS/+9ORZ+FMzPva2AZ5Ki+A= 15 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 16 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 17 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 18 | github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= 19 | github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= 20 | github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w= 21 | github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= 22 | github.com/go-openapi/jsonreference v0.19.2 h1:o20suLFB4Ri0tuzpWtyHlh7E7HnkqTNLq6aR6WVNS1w= 23 | github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= 24 | github.com/go-openapi/spec v0.19.4 h1:ixzUSnHTd6hCemgtAJgluaTSGYpLNpJY4mA2DIkdOAo= 25 | github.com/go-openapi/spec v0.19.4/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= 26 | github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= 27 | github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY= 28 | github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= 29 | github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= 30 | github.com/gobuffalo/envy v1.7.0 h1:GlXgaiBkmrYMHco6t4j7SacKO4XUjvh5pwXh0f4uxXU= 31 | github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= 32 | github.com/gobuffalo/logger v1.0.0/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= 33 | github.com/gobuffalo/packd v0.3.0 h1:eMwymTkA1uXsqxS0Tpoop3Lc0u3kTfiMBE6nKtQU4g4= 34 | github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q= 35 | github.com/gobuffalo/packr v1.30.1 h1:hu1fuVR3fXEZR7rXNW3h8rqSML8EVAf6KNm0NKO/wKg= 36 | github.com/gobuffalo/packr v1.30.1/go.mod h1:ljMyFO2EcrnzsHsN99cvbq055Y9OhRrIaviy289eRuk= 37 | github.com/gobuffalo/packr/v2 v2.5.1/go.mod h1:8f9c96ITobJlPzI44jj+4tHnEKNt0xXWSVlXRN9X1Iw= 38 | github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= 39 | github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= 40 | github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= 41 | github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 42 | github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= 43 | github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 44 | github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= 45 | github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= 46 | github.com/hyperledger/fabric-chaincode-go v0.0.0-20200424173110-d7076418f212 h1:1i4lnpV8BDgKOLi1hgElfBqdHXjXieSuj8629mwBZ8o= 47 | github.com/hyperledger/fabric-chaincode-go v0.0.0-20200424173110-d7076418f212/go.mod h1:N7H3sA7Tx4k/YzFq7U0EPdqJtqvM4Kild0JoCc7C0Dc= 48 | github.com/hyperledger/fabric-contract-api-go v1.1.0 h1:K9uucl/6eX3NF0/b+CGIiO1IPm1VYQxBkpnVGJur2S4= 49 | github.com/hyperledger/fabric-contract-api-go v1.1.0/go.mod h1:nHWt0B45fK53owcFpLtAe8DH0Q5P068mnzkNXMPSL7E= 50 | github.com/hyperledger/fabric-protos-go v0.0.0-20190919234611-2a87503ac7c9/go.mod h1:xVYTjK4DtZRBxZ2D9aE4y6AbLaPwue2o/criQyQbVD0= 51 | github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e h1:9PS5iezHk/j7XriSlNuSQILyCOfcZ9wZ3/PiucmSE8E= 52 | github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e/go.mod h1:xVYTjK4DtZRBxZ2D9aE4y6AbLaPwue2o/criQyQbVD0= 53 | github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 54 | github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= 55 | github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= 56 | github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= 57 | github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 58 | github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 59 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 60 | github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= 61 | github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= 62 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 63 | github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= 64 | github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= 65 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 66 | github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= 67 | github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= 68 | github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8= 69 | github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= 70 | github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= 71 | github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= 72 | github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= 73 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 74 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 75 | github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= 76 | github.com/rogpeppe/go-internal v1.3.0 h1:RR9dF3JtopPvtkroDZuVD7qquD0bnHlKSqaQhgwt8yk= 77 | github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= 78 | github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= 79 | github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= 80 | github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= 81 | github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= 82 | github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= 83 | github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= 84 | github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= 85 | github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= 86 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 87 | github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 88 | github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= 89 | github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= 90 | github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= 91 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 92 | github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= 93 | github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= 94 | github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= 95 | github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= 96 | github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= 97 | github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= 98 | github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= 99 | github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= 100 | github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= 101 | github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= 102 | golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= 103 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 104 | golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 105 | golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 106 | golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 107 | golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 108 | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 109 | golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= 110 | golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 111 | golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM= 112 | golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 113 | golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= 114 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 115 | golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 116 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 117 | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 118 | golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 119 | golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 120 | golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 121 | golang.org/x/sys v0.0.0-20190710143415-6ec70d6a5542 h1:6ZQFf1D2YYDDI7eSwW8adlkkavTB9sw5I24FVtEvNUQ= 122 | golang.org/x/sys v0.0.0-20190710143415-6ec70d6a5542/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 123 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 124 | golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= 125 | golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= 126 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 127 | golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 128 | golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= 129 | golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 130 | golang.org/x/tools v0.0.0-20190624180213-70d37148ca0c/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 131 | google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= 132 | google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= 133 | google.golang.org/genproto v0.0.0-20180831171423-11092d34479b h1:lohp5blsw53GBXtLyLNaTXPXS9pJ1tiTw61ZHUoE9Qw= 134 | google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= 135 | google.golang.org/grpc v1.23.0 h1:AzbTB6ux+okLTzP8Ru1Xs41C303zdcfEht7MQnYJt5A= 136 | google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= 137 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 138 | gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 139 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= 140 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 141 | gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= 142 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 143 | gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= 144 | gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 145 | honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -------------------------------------------------------------------------------- /networkConfig.yaml: -------------------------------------------------------------------------------- 1 | certificateAuthorities: 2 | ord-ca.fabric: 3 | caName: ca 4 | registrar: 5 | enrollId: enroll 6 | enrollSecret: enrollpw 7 | tlsCACerts: 8 | pem: 9 | - | 10 | -----BEGIN CERTIFICATE----- 11 | MIICYzCCAgqgAwIBAgIQRa3nCKDuiluITf3nngWz4jAKBggqhkjOPQQDAjBSMRMw 12 | EQYDVQQGEwpDYWxpZm9ybmlhMQkwBwYDVQQHEwAxCTAHBgNVBAkTADEUMBIGA1UE 13 | ChMLSHlwZXJsZWRnZXIxDzANBgNVBAsTBkZhYnJpYzAeFw0yMjA0MDcwNjI3NDFa 14 | Fw0zMjA0MDgwNjI3NDFaMFIxEzARBgNVBAYTCkNhbGlmb3JuaWExCTAHBgNVBAcT 15 | ADEJMAcGA1UECRMAMRQwEgYDVQQKEwtIeXBlcmxlZGdlcjEPMA0GA1UECxMGRmFi 16 | cmljMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKjc6ZLkpudkQhsZsBP+Gbzl0 17 | /E0ysuwSpA92fe22TYzR3T0Tmlj2L1sJRxD8J1I0LW4mqBJ94LjLauT6L7uAk6OB 18 | wTCBvjAOBgNVHQ8BAf8EBAMCAaYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF 19 | BwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIB/cTqd6b3m5u/Q7+gxu6l7I 20 | v4Lmw+caJ8wFO2M2kWllMFEGA1UdEQRKMEiCCWxvY2FsaG9zdIIGb3JkLWNhgg1v 21 | cmQtY2EuZmFicmljghhvcmQtY2EuaGxmLWJsb2NrY2hhaW4udGuHBH8AAAGHBIs7 22 | TpQwCgYIKoZIzj0EAwIDRwAwRAIgcAwSGBpF0A5fhDfrBwB1zyruX3cZYfOlO5Qt 23 | 3GMPeFkCIDN1LmW4U7qPVMQrxEtRY/fDbf4t3q4+OulqB1GKGr5n 24 | -----END CERTIFICATE----- 25 | url: https://ord-ca.hlf-blockchain.tk:443 26 | org1-ca.fabric: 27 | caName: ca 28 | registrar: 29 | enrollId: enroll 30 | enrollSecret: enrollpw 31 | tlsCACerts: 32 | pem: 33 | - | 34 | -----BEGIN CERTIFICATE----- 35 | MIICaDCCAg2gAwIBAgIQMHoxcuX1t2eLPmJbJc/1MjAKBggqhkjOPQQDAjBSMRMw 36 | EQYDVQQGEwpDYWxpZm9ybmlhMQkwBwYDVQQHEwAxCTAHBgNVBAkTADEUMBIGA1UE 37 | ChMLSHlwZXJsZWRnZXIxDzANBgNVBAsTBkZhYnJpYzAeFw0yMjA0MDcwNjI3Mzla 38 | Fw0zMjA0MDgwNjI3MzlaMFIxEzARBgNVBAYTCkNhbGlmb3JuaWExCTAHBgNVBAcT 39 | ADEJMAcGA1UECRMAMRQwEgYDVQQKEwtIeXBlcmxlZGdlcjEPMA0GA1UECxMGRmFi 40 | cmljMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0SUqm9/Tx7HWxa+aT8IRie+o 41 | Bgk3pvYyajstdJR6SyBsILslxZAxcOJR7fvTzIb45ZQSbiPfwZIVzzbKZ/DyGKOB 42 | xDCBwTAOBgNVHQ8BAf8EBAMCAaYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF 43 | BwMBMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIM6JXFXgAkS3WcTDJX2kVOeC 44 | 70hVRrG9+4BxC0K6sISVMFQGA1UdEQRNMEuCCWxvY2FsaG9zdIIHb3JnMS1jYYIO 45 | b3JnMS1jYS5mYWJyaWOCGW9yZzEtY2EuaGxmLWJsb2NrY2hhaW4udGuHBH8AAAGH 46 | BIs7TpQwCgYIKoZIzj0EAwIDSQAwRgIhAJ0ECJaUrNbq4S3Yk4ForGZ6HO/2r4Zd 47 | Hr4OSk4HBN8HAiEA6cA5hOl6LfOv2WGqr4UBZUoRQl/7hirbVDQG3nHclLY= 48 | -----END CERTIFICATE----- 49 | url: https://org1-ca.hlf-blockchain.tk:443 50 | org2-ca.fabric: 51 | caName: ca 52 | registrar: 53 | enrollId: enroll 54 | enrollSecret: enrollpw 55 | tlsCACerts: 56 | pem: 57 | - | 58 | -----BEGIN CERTIFICATE----- 59 | MIICaTCCAg6gAwIBAgIRAPWOwkSYGVdWHMcQmhaQ4AgwCgYIKoZIzj0EAwIwUjET 60 | MBEGA1UEBhMKQ2FsaWZvcm5pYTEJMAcGA1UEBxMAMQkwBwYDVQQJEwAxFDASBgNV 61 | BAoTC0h5cGVybGVkZ2VyMQ8wDQYDVQQLEwZGYWJyaWMwHhcNMjIwNDA3MDYyNzQw 62 | WhcNMzIwNDA4MDYyNzQwWjBSMRMwEQYDVQQGEwpDYWxpZm9ybmlhMQkwBwYDVQQH 63 | EwAxCTAHBgNVBAkTADEUMBIGA1UEChMLSHlwZXJsZWRnZXIxDzANBgNVBAsTBkZh 64 | YnJpYzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABNOiIfbddPd7EOSTmieKSm09 65 | J/cmhQ+Q8dHDm5wB8Zk4aiV/ZxxMmnwK9cwnk1UbTYzR8uELYj6bKk5KF+fyCdmj 66 | gcQwgcEwDgYDVR0PAQH/BAQDAgGmMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEF 67 | BQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCDJ76RDaORMNZyZhDx+gluZ 68 | 34HKi7fFBySCCjBS0BEYpDBUBgNVHREETTBLgglsb2NhbGhvc3SCB29yZzItY2GC 69 | Dm9yZzItY2EuZmFicmljghlvcmcyLWNhLmhsZi1ibG9ja2NoYWluLnRrhwR/AAAB 70 | hwSLO06UMAoGCCqGSM49BAMCA0kAMEYCIQDi6oTifQn5NveeNREYef1KCWQzEgOE 71 | FpgpYF/HMhbngQIhAMniifDMf4ywMKqQ6K8Gw51KzFIdNy1qfblKb+uMPM33 72 | -----END CERTIFICATE----- 73 | url: https://org2-ca.hlf-blockchain.tk:443 74 | channels: 75 | _default: 76 | orderers: 77 | - ord-node1.fabric 78 | peers: 79 | org1-peer1.fabric: 80 | chaincodeQuery: true 81 | discover: true 82 | endorsingPeer: true 83 | eventSource: true 84 | ledgerQuery: true 85 | org1-peer2.fabric: 86 | chaincodeQuery: true 87 | discover: true 88 | endorsingPeer: true 89 | eventSource: true 90 | ledgerQuery: true 91 | org2-peer1.fabric: 92 | chaincodeQuery: true 93 | discover: true 94 | endorsingPeer: true 95 | eventSource: true 96 | ledgerQuery: true 97 | org2-peer2.fabric: 98 | chaincodeQuery: true 99 | discover: true 100 | endorsingPeer: true 101 | eventSource: true 102 | ledgerQuery: true 103 | client: 104 | organization: 105 | name: hlf-network 106 | orderers: 107 | ord-node1.fabric: 108 | grpcOptions: 109 | allow-insecure: false 110 | tlsCACerts: 111 | pem: | 112 | -----BEGIN CERTIFICATE----- 113 | MIICRDCCAeugAwIBAgIQZc9hibJ+i9Ucj+WvF/s64jAKBggqhkjOPQQDAjBtMQsw 114 | CQYDVQQGEwJFUzERMA8GA1UEBxMIQWxpY2FudGUxETAPBgNVBAkTCEFsaWNhbnRl 115 | MRkwFwYDVQQKExBLdW5nIEZ1IFNvZnR3YXJlMQ0wCwYDVQQLEwRUZWNoMQ4wDAYD 116 | VQQDEwV0bHNjYTAeFw0yMjA0MDcwNjI3NDFaFw0zMjA0MDgwNjI3NDFaMG0xCzAJ 117 | BgNVBAYTAkVTMREwDwYDVQQHEwhBbGljYW50ZTERMA8GA1UECRMIQWxpY2FudGUx 118 | GTAXBgNVBAoTEEt1bmcgRnUgU29mdHdhcmUxDTALBgNVBAsTBFRlY2gxDjAMBgNV 119 | BAMTBXRsc2NhMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdistDS6uq8cHxl9B 120 | KI01lt+BDG8E7ZlXnnyf20oHOaLofUc5+HFZ4qWV84xGz66OswwGMCvicJ5HL8zm 121 | qfeSX6NtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggr 122 | BgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCAmXMm+GkfaDuMgV+ft 123 | EeKpPToWLazsFntyURq0iXLArzAKBggqhkjOPQQDAgNHADBEAiAviCW3/+kgRIot 124 | r5yd+QIf7fbDAzTI+dW6cIuFWqlOJgIgH5trRqBBHZbIAT9Dedkqng0+Dlfh9fAg 125 | XQrbNIz0QGQ= 126 | -----END CERTIFICATE----- 127 | url: grpcs://ord-node1.hlf-blockchain.tk:443 128 | organizations: 129 | OrdererMSP: 130 | cryptoPath: /tmp/cryptopath 131 | mspid: OrdererMSP 132 | orderers: 133 | - ord-node1.fabric 134 | peers: [] 135 | users: {} 136 | Org1MSP: 137 | cryptoPath: /tmp/cryptopath 138 | mspid: Org1MSP 139 | orderers: [] 140 | peers: 141 | - org1-peer1.fabric 142 | - org1-peer2.fabric 143 | users: 144 | admin: 145 | cert: 146 | pem: | 147 | -----BEGIN CERTIFICATE----- 148 | MIICUzCCAfmgAwIBAgIUfJPDdOc5WNGrxocdjj3CuqtB2gYwCgYIKoZIzj0EAwIw 149 | ajELMAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGlj 150 | YW50ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEL 151 | MAkGA1UEAxMCY2EwHhcNMjIwNDA4MDYyODAwWhcNMjMwNDA4MDYzMzAwWjAgMQ4w 152 | DAYDVQQLEwVhZG1pbjEOMAwGA1UEAxMFYWRtaW4wWTATBgcqhkjOPQIBBggqhkjO 153 | PQMBBwNCAATJZNGiz47BYoKZpl61aLYs4Hbpba0hUnyYBq3cKdEfWVDtqLALzXFH 154 | V3Xs+9bvS5BGbuC6fkIaQBC5x4RVvOcUo4HGMIHDMA4GA1UdDwEB/wQEAwIHgDAM 155 | BgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQkOfMWdaAms8glYkYQN8CdTkSFizArBgNV 156 | HSMEJDAigCAFcGcbwD1GSHRenqqYTlgN6DlJPYkxrVYcqqXv/BlOYzBXBggqAwQF 157 | BgcIAQRLeyJhdHRycyI6eyJoZi5BZmZpbGlhdGlvbiI6IiIsImhmLkVucm9sbG1l 158 | bnRJRCI6ImFkbWluIiwiaGYuVHlwZSI6ImFkbWluIn19MAoGCCqGSM49BAMCA0gA 159 | MEUCIQCqCErDdFA8Qms9DKsAiAqtDPk2KbGRUV01K52VHQee4QIgfo/bUPs/NmU7 160 | Dvu8ZnEHee5TBqbff8V1wmROHPWTqc4= 161 | -----END CERTIFICATE----- 162 | key: 163 | pem: | 164 | -----BEGIN PRIVATE KEY----- 165 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgeqZgEfIY+TCS92V/ 166 | OQ6cAyMh9ONHKlI4yrkhF6pfKcKhRANCAATJZNGiz47BYoKZpl61aLYs4Hbpba0h 167 | UnyYBq3cKdEfWVDtqLALzXFHV3Xs+9bvS5BGbuC6fkIaQBC5x4RVvOcU 168 | -----END PRIVATE KEY----- 169 | Org2MSP: 170 | cryptoPath: /tmp/cryptopath 171 | mspid: Org2MSP 172 | orderers: [] 173 | peers: 174 | - org2-peer1.fabric 175 | - org2-peer2.fabric 176 | users: 177 | admin: 178 | cert: 179 | pem: | 180 | -----BEGIN CERTIFICATE----- 181 | MIICUzCCAfmgAwIBAgIUbBL8H3qyHNSIYF7sf9TFcf/o9FswCgYIKoZIzj0EAwIw 182 | ajELMAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGlj 183 | YW50ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEL 184 | MAkGA1UEAxMCY2EwHhcNMjIwNDA4MDYyODAwWhcNMjMwNDA4MDYzMzAwWjAgMQ4w 185 | DAYDVQQLEwVhZG1pbjEOMAwGA1UEAxMFYWRtaW4wWTATBgcqhkjOPQIBBggqhkjO 186 | PQMBBwNCAASkjlyJXQACIh+SvjHEWYQN6Kn63jrtf8j4pyKWWlBPxvdVXhnLpQA3 187 | bCmACWzuvp9dftXP/7isB98D0JgzDAk1o4HGMIHDMA4GA1UdDwEB/wQEAwIHgDAM 188 | BgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRzN8IsZORyGuKGA6wu1IdLMhc8kDArBgNV 189 | HSMEJDAigCC30bBNlpM9StFrDU0rSZxvFn2H/NK5Z3bmv3Cy2LDcpzBXBggqAwQF 190 | BgcIAQRLeyJhdHRycyI6eyJoZi5BZmZpbGlhdGlvbiI6IiIsImhmLkVucm9sbG1l 191 | bnRJRCI6ImFkbWluIiwiaGYuVHlwZSI6ImFkbWluIn19MAoGCCqGSM49BAMCA0gA 192 | MEUCIQDBZF7RKoj3vZTo5HBCM8ylB3jCsUuRuneNo9TokVCIPwIgPMW9/crzyrPb 193 | IaZf8+w23M1CD1TD39zyMqVBM1YT0A0= 194 | -----END CERTIFICATE----- 195 | key: 196 | pem: | 197 | -----BEGIN PRIVATE KEY----- 198 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgxCzkqO+4W/UHbzhc 199 | +UJjo1TBFoDZwoUnnDUAaJWPLrqhRANCAASkjlyJXQACIh+SvjHEWYQN6Kn63jrt 200 | f8j4pyKWWlBPxvdVXhnLpQA3bCmACWzuvp9dftXP/7isB98D0JgzDAk1 201 | -----END PRIVATE KEY----- 202 | peers: 203 | org1-peer1.fabric: 204 | grpcOptions: 205 | allow-insecure: false 206 | hostnameOverride: "" 207 | ssl-target-name-override: "" 208 | tlsCACerts: 209 | pem: | 210 | -----BEGIN CERTIFICATE----- 211 | MIICRjCCAeygAwIBAgIRAOXQdFAWGtKCZzqDwloWfTswCgYIKoZIzj0EAwIwbTEL 212 | MAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGljYW50 213 | ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEOMAwG 214 | A1UEAxMFdGxzY2EwHhcNMjIwNDA3MDYyNzM5WhcNMzIwNDA4MDYyNzM5WjBtMQsw 215 | CQYDVQQGEwJFUzERMA8GA1UEBxMIQWxpY2FudGUxETAPBgNVBAkTCEFsaWNhbnRl 216 | MRkwFwYDVQQKExBLdW5nIEZ1IFNvZnR3YXJlMQ0wCwYDVQQLEwRUZWNoMQ4wDAYD 217 | VQQDEwV0bHNjYTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJUs0CUzKmgxhvXQ 218 | ps05R/hhrxvECDNO+rFKd+RiwkcLD3oizq0e5i0JGRxAS14yZY+bpL64wKxUzBNx 219 | qj7AIBKjbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYI 220 | KwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgA0wNNsOaR5wETDeZ 221 | I8JeEVBSeQKGiAMJo5mfcEu16JMwCgYIKoZIzj0EAwIDSAAwRQIgY2wWI9EvvmOh 222 | fzePdyzscTLh4SCGQfYcJAak/IP2dfwCIQCROJbC4/ac94ttXoHMa/Z5e6wcnqNs 223 | bUVoKnULBdNQOA== 224 | -----END CERTIFICATE----- 225 | url: grpcs://org1-peer1.hlf-blockchain.tk:443 226 | org1-peer2.fabric: 227 | grpcOptions: 228 | allow-insecure: false 229 | hostnameOverride: "" 230 | ssl-target-name-override: "" 231 | tlsCACerts: 232 | pem: | 233 | -----BEGIN CERTIFICATE----- 234 | MIICRjCCAeygAwIBAgIRAOXQdFAWGtKCZzqDwloWfTswCgYIKoZIzj0EAwIwbTEL 235 | MAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGljYW50 236 | ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEOMAwG 237 | A1UEAxMFdGxzY2EwHhcNMjIwNDA3MDYyNzM5WhcNMzIwNDA4MDYyNzM5WjBtMQsw 238 | CQYDVQQGEwJFUzERMA8GA1UEBxMIQWxpY2FudGUxETAPBgNVBAkTCEFsaWNhbnRl 239 | MRkwFwYDVQQKExBLdW5nIEZ1IFNvZnR3YXJlMQ0wCwYDVQQLEwRUZWNoMQ4wDAYD 240 | VQQDEwV0bHNjYTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJUs0CUzKmgxhvXQ 241 | ps05R/hhrxvECDNO+rFKd+RiwkcLD3oizq0e5i0JGRxAS14yZY+bpL64wKxUzBNx 242 | qj7AIBKjbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYI 243 | KwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgA0wNNsOaR5wETDeZ 244 | I8JeEVBSeQKGiAMJo5mfcEu16JMwCgYIKoZIzj0EAwIDSAAwRQIgY2wWI9EvvmOh 245 | fzePdyzscTLh4SCGQfYcJAak/IP2dfwCIQCROJbC4/ac94ttXoHMa/Z5e6wcnqNs 246 | bUVoKnULBdNQOA== 247 | -----END CERTIFICATE----- 248 | url: grpcs://org1-peer2.hlf-blockchain.tk:443 249 | org2-peer1.fabric: 250 | grpcOptions: 251 | allow-insecure: false 252 | hostnameOverride: "" 253 | ssl-target-name-override: "" 254 | tlsCACerts: 255 | pem: | 256 | -----BEGIN CERTIFICATE----- 257 | MIICRTCCAeygAwIBAgIRAME2NjUZycmXoaXe6RK+YvowCgYIKoZIzj0EAwIwbTEL 258 | MAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGljYW50 259 | ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEOMAwG 260 | A1UEAxMFdGxzY2EwHhcNMjIwNDA3MDYyNzQwWhcNMzIwNDA4MDYyNzQwWjBtMQsw 261 | CQYDVQQGEwJFUzERMA8GA1UEBxMIQWxpY2FudGUxETAPBgNVBAkTCEFsaWNhbnRl 262 | MRkwFwYDVQQKExBLdW5nIEZ1IFNvZnR3YXJlMQ0wCwYDVQQLEwRUZWNoMQ4wDAYD 263 | VQQDEwV0bHNjYTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBljC8SJrquzgHEA 264 | JpOlImtke3DJnzD4ft34Wl2C6D7EE/ACM9OGn9jskBKYxzcv2i4t3iTnRIK0uAt0 265 | pLgooO2jbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYI 266 | KwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgrP8Ww/WP3llT6Hve 267 | uCoe7vRY/eagVcByNyLaMniw5X4wCgYIKoZIzj0EAwIDRwAwRAIgWgh0n7jKgv6T 268 | GSXbROi7KLjAnhOYJnV14pLgB9AxeFgCIA2H/ynwqx9DgNEdRmNGhWWOYoIJUfUI 269 | 3C1MOQRUr/Ny 270 | -----END CERTIFICATE----- 271 | url: grpcs://org2-peer1.hlf-blockchain.tk:443 272 | org2-peer2.fabric: 273 | grpcOptions: 274 | allow-insecure: false 275 | hostnameOverride: "" 276 | ssl-target-name-override: "" 277 | tlsCACerts: 278 | pem: | 279 | -----BEGIN CERTIFICATE----- 280 | MIICRTCCAeygAwIBAgIRAME2NjUZycmXoaXe6RK+YvowCgYIKoZIzj0EAwIwbTEL 281 | MAkGA1UEBhMCRVMxETAPBgNVBAcTCEFsaWNhbnRlMREwDwYDVQQJEwhBbGljYW50 282 | ZTEZMBcGA1UEChMQS3VuZyBGdSBTb2Z0d2FyZTENMAsGA1UECxMEVGVjaDEOMAwG 283 | A1UEAxMFdGxzY2EwHhcNMjIwNDA3MDYyNzQwWhcNMzIwNDA4MDYyNzQwWjBtMQsw 284 | CQYDVQQGEwJFUzERMA8GA1UEBxMIQWxpY2FudGUxETAPBgNVBAkTCEFsaWNhbnRl 285 | MRkwFwYDVQQKExBLdW5nIEZ1IFNvZnR3YXJlMQ0wCwYDVQQLEwRUZWNoMQ4wDAYD 286 | VQQDEwV0bHNjYTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBljC8SJrquzgHEA 287 | JpOlImtke3DJnzD4ft34Wl2C6D7EE/ACM9OGn9jskBKYxzcv2i4t3iTnRIK0uAt0 288 | pLgooO2jbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYI 289 | KwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgrP8Ww/WP3llT6Hve 290 | uCoe7vRY/eagVcByNyLaMniw5X4wCgYIKoZIzj0EAwIDRwAwRAIgWgh0n7jKgv6T 291 | GSXbROi7KLjAnhOYJnV14pLgB9AxeFgCIA2H/ynwqx9DgNEdRmNGhWWOYoIJUfUI 292 | 3C1MOQRUr/Ny 293 | -----END CERTIFICATE----- 294 | url: grpcs://org2-peer2.hlf-blockchain.tk:443 295 | version: 1.0.0 296 | -------------------------------------------------------------------------------- /client/nodejs/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nodejs", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "nodejs", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "fabric-ca-client": "^2.2.11", 13 | "fabric-network": "^2.2.11", 14 | "js-yaml": "^4.1.0" 15 | } 16 | }, 17 | "node_modules/@grpc/grpc-js": { 18 | "version": "1.5.5", 19 | "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.5.5.tgz", 20 | "integrity": "sha512-FTd27ItHlsSG/7hp62xgI9YnqSwRbHRSVmDVR8DwOoC+6t8JhHRXe2JL0U8N9GLc0jS0HrtEbO/KP5+G0ebjLQ==", 21 | "dependencies": { 22 | "@grpc/proto-loader": "^0.6.4", 23 | "@types/node": ">=12.12.47" 24 | }, 25 | "engines": { 26 | "node": "^8.13.0 || >=10.10.0" 27 | } 28 | }, 29 | "node_modules/@grpc/proto-loader": { 30 | "version": "0.6.9", 31 | "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", 32 | "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", 33 | "dependencies": { 34 | "@types/long": "^4.0.1", 35 | "lodash.camelcase": "^4.3.0", 36 | "long": "^4.0.0", 37 | "protobufjs": "^6.10.0", 38 | "yargs": "^16.2.0" 39 | }, 40 | "bin": { 41 | "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" 42 | }, 43 | "engines": { 44 | "node": ">=6" 45 | } 46 | }, 47 | "node_modules/@protobufjs/aspromise": { 48 | "version": "1.1.2", 49 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 50 | "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" 51 | }, 52 | "node_modules/@protobufjs/base64": { 53 | "version": "1.1.2", 54 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 55 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 56 | }, 57 | "node_modules/@protobufjs/codegen": { 58 | "version": "2.0.4", 59 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 60 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 61 | }, 62 | "node_modules/@protobufjs/eventemitter": { 63 | "version": "1.1.0", 64 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 65 | "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" 66 | }, 67 | "node_modules/@protobufjs/fetch": { 68 | "version": "1.1.0", 69 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 70 | "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", 71 | "dependencies": { 72 | "@protobufjs/aspromise": "^1.1.1", 73 | "@protobufjs/inquire": "^1.1.0" 74 | } 75 | }, 76 | "node_modules/@protobufjs/float": { 77 | "version": "1.0.2", 78 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 79 | "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" 80 | }, 81 | "node_modules/@protobufjs/inquire": { 82 | "version": "1.1.0", 83 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 84 | "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" 85 | }, 86 | "node_modules/@protobufjs/path": { 87 | "version": "1.1.2", 88 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 89 | "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" 90 | }, 91 | "node_modules/@protobufjs/pool": { 92 | "version": "1.1.0", 93 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 94 | "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" 95 | }, 96 | "node_modules/@protobufjs/utf8": { 97 | "version": "1.1.0", 98 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 99 | "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" 100 | }, 101 | "node_modules/@types/long": { 102 | "version": "4.0.1", 103 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", 104 | "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" 105 | }, 106 | "node_modules/@types/node": { 107 | "version": "17.0.17", 108 | "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz", 109 | "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==" 110 | }, 111 | "node_modules/@types/tough-cookie": { 112 | "version": "4.0.1", 113 | "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", 114 | "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==" 115 | }, 116 | "node_modules/ansi-regex": { 117 | "version": "5.0.1", 118 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 119 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 120 | "engines": { 121 | "node": ">=8" 122 | } 123 | }, 124 | "node_modules/ansi-styles": { 125 | "version": "4.3.0", 126 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 127 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 128 | "dependencies": { 129 | "color-convert": "^2.0.1" 130 | }, 131 | "engines": { 132 | "node": ">=8" 133 | }, 134 | "funding": { 135 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 136 | } 137 | }, 138 | "node_modules/argparse": { 139 | "version": "2.0.1", 140 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 141 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" 142 | }, 143 | "node_modules/async": { 144 | "version": "1.5.2", 145 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", 146 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" 147 | }, 148 | "node_modules/axios": { 149 | "version": "0.21.4", 150 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", 151 | "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", 152 | "dependencies": { 153 | "follow-redirects": "^1.14.0" 154 | } 155 | }, 156 | "node_modules/axios-cookiejar-support": { 157 | "version": "1.0.1", 158 | "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-1.0.1.tgz", 159 | "integrity": "sha512-IZJxnAJ99XxiLqNeMOqrPbfR7fRyIfaoSLdPUf4AMQEGkH8URs0ghJK/xtqBsD+KsSr3pKl4DEQjCn834pHMig==", 160 | "dependencies": { 161 | "is-redirect": "^1.0.0", 162 | "pify": "^5.0.0" 163 | }, 164 | "engines": { 165 | "node": ">= 10.0.0" 166 | }, 167 | "peerDependencies": { 168 | "@types/tough-cookie": ">=2.3.3", 169 | "axios": ">=0.16.2", 170 | "tough-cookie": ">=2.3.3" 171 | } 172 | }, 173 | "node_modules/bn.js": { 174 | "version": "4.12.0", 175 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 176 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 177 | }, 178 | "node_modules/brorand": { 179 | "version": "1.1.0", 180 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 181 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" 182 | }, 183 | "node_modules/call-bind": { 184 | "version": "1.0.2", 185 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 186 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 187 | "dependencies": { 188 | "function-bind": "^1.1.1", 189 | "get-intrinsic": "^1.0.2" 190 | }, 191 | "funding": { 192 | "url": "https://github.com/sponsors/ljharb" 193 | } 194 | }, 195 | "node_modules/callsite": { 196 | "version": "1.0.0", 197 | "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", 198 | "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", 199 | "engines": { 200 | "node": "*" 201 | } 202 | }, 203 | "node_modules/cliui": { 204 | "version": "7.0.4", 205 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 206 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 207 | "dependencies": { 208 | "string-width": "^4.2.0", 209 | "strip-ansi": "^6.0.0", 210 | "wrap-ansi": "^7.0.0" 211 | } 212 | }, 213 | "node_modules/color-convert": { 214 | "version": "2.0.1", 215 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 216 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 217 | "dependencies": { 218 | "color-name": "~1.1.4" 219 | }, 220 | "engines": { 221 | "node": ">=7.0.0" 222 | } 223 | }, 224 | "node_modules/color-name": { 225 | "version": "1.1.4", 226 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 227 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 228 | }, 229 | "node_modules/colors": { 230 | "version": "1.0.3", 231 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", 232 | "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", 233 | "engines": { 234 | "node": ">=0.1.90" 235 | } 236 | }, 237 | "node_modules/cycle": { 238 | "version": "1.0.3", 239 | "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", 240 | "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", 241 | "engines": { 242 | "node": ">=0.4.0" 243 | } 244 | }, 245 | "node_modules/elliptic": { 246 | "version": "6.5.4", 247 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", 248 | "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", 249 | "dependencies": { 250 | "bn.js": "^4.11.9", 251 | "brorand": "^1.1.0", 252 | "hash.js": "^1.0.0", 253 | "hmac-drbg": "^1.0.1", 254 | "inherits": "^2.0.4", 255 | "minimalistic-assert": "^1.0.1", 256 | "minimalistic-crypto-utils": "^1.0.1" 257 | } 258 | }, 259 | "node_modules/emoji-regex": { 260 | "version": "8.0.0", 261 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 262 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 263 | }, 264 | "node_modules/escalade": { 265 | "version": "3.1.1", 266 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 267 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 268 | "engines": { 269 | "node": ">=6" 270 | } 271 | }, 272 | "node_modules/eyes": { 273 | "version": "0.1.8", 274 | "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", 275 | "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", 276 | "engines": { 277 | "node": "> 0.1.90" 278 | } 279 | }, 280 | "node_modules/fabric-ca-client": { 281 | "version": "2.2.11", 282 | "resolved": "https://registry.npmjs.org/fabric-ca-client/-/fabric-ca-client-2.2.11.tgz", 283 | "integrity": "sha512-Tl6ktoYw5ouvz256E/blz+0mWoA6r9L8Pc1BbRffi6ROxuSewdaJEffQjLGAcLG+gJpH2aeviXljWNASqvPIUQ==", 284 | "dependencies": { 285 | "fabric-common": "2.2.11", 286 | "jsrsasign": "^10.4.1", 287 | "url": "^0.11.0", 288 | "winston": "^2.4.5" 289 | }, 290 | "engines": { 291 | "node": "^10.15.3 || ^12.13.1 || ^14.13.1", 292 | "npm": "^6.4.1" 293 | } 294 | }, 295 | "node_modules/fabric-common": { 296 | "version": "2.2.11", 297 | "resolved": "https://registry.npmjs.org/fabric-common/-/fabric-common-2.2.11.tgz", 298 | "integrity": "sha512-VDZUXSoTkgXA4axOONCF93DkFzDaqN0wfKnUTa36Y1Dkk5iSZFdH5iqCroAmerrKg71yGlkiBN7DsD7QWl9McA==", 299 | "dependencies": { 300 | "callsite": "^1.0.0", 301 | "elliptic": "^6.5.4", 302 | "fabric-protos": "2.2.11", 303 | "js-sha3": "^0.8.0", 304 | "jsrsasign": "^10.4.1", 305 | "long": "^4.0.0", 306 | "nconf": "^0.11.2", 307 | "promise-settle": "^0.3.0", 308 | "sjcl": "^1.0.8", 309 | "winston": "^2.4.5", 310 | "yn": "^4.0.0" 311 | }, 312 | "engines": { 313 | "node": "^10.15.3 || ^12.13.1 || ^14.13.1", 314 | "npm": "^6.4.1" 315 | }, 316 | "optionalDependencies": { 317 | "pkcs11js": "^1.0.6" 318 | } 319 | }, 320 | "node_modules/fabric-network": { 321 | "version": "2.2.11", 322 | "resolved": "https://registry.npmjs.org/fabric-network/-/fabric-network-2.2.11.tgz", 323 | "integrity": "sha512-YikiBMK0O9Ve+5vZkEOkiz/eXCBzJFh0Ik9MigpjRam86E64NOpNzjMZbCfeas91+O5HPJrO5+zfjEHw7vWsIg==", 324 | "dependencies": { 325 | "fabric-common": "2.2.11", 326 | "fabric-protos": "2.2.11", 327 | "long": "^4.0.0", 328 | "nano": "^9.0.3" 329 | }, 330 | "engines": { 331 | "node": "^10.15.3 || ^12.13.1 || ^14.13.1", 332 | "npm": "^6.4.1" 333 | } 334 | }, 335 | "node_modules/fabric-protos": { 336 | "version": "2.2.11", 337 | "resolved": "https://registry.npmjs.org/fabric-protos/-/fabric-protos-2.2.11.tgz", 338 | "integrity": "sha512-haWUubqMLccIyBdmhx4ueKCe7rJgr/zln7iDF+BM7Im48K/a76VmWdddm+QGgWI0Bbk1RA1KfLOdwdb/gSGiSg==", 339 | "dependencies": { 340 | "@grpc/grpc-js": "^1.3.4", 341 | "@grpc/proto-loader": "^0.6.2", 342 | "protobufjs": "^6.11.2" 343 | }, 344 | "engines": { 345 | "node": "^10.15.3 || ^12.13.1 || ^14.13.1", 346 | "npm": "^6.4.1" 347 | } 348 | }, 349 | "node_modules/follow-redirects": { 350 | "version": "1.14.8", 351 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", 352 | "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", 353 | "funding": [ 354 | { 355 | "type": "individual", 356 | "url": "https://github.com/sponsors/RubenVerborgh" 357 | } 358 | ], 359 | "engines": { 360 | "node": ">=4.0" 361 | }, 362 | "peerDependenciesMeta": { 363 | "debug": { 364 | "optional": true 365 | } 366 | } 367 | }, 368 | "node_modules/function-bind": { 369 | "version": "1.1.1", 370 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 371 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 372 | }, 373 | "node_modules/get-caller-file": { 374 | "version": "2.0.5", 375 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 376 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 377 | "engines": { 378 | "node": "6.* || 8.* || >= 10.*" 379 | } 380 | }, 381 | "node_modules/get-intrinsic": { 382 | "version": "1.1.1", 383 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 384 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 385 | "dependencies": { 386 | "function-bind": "^1.1.1", 387 | "has": "^1.0.3", 388 | "has-symbols": "^1.0.1" 389 | }, 390 | "funding": { 391 | "url": "https://github.com/sponsors/ljharb" 392 | } 393 | }, 394 | "node_modules/has": { 395 | "version": "1.0.3", 396 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 397 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 398 | "dependencies": { 399 | "function-bind": "^1.1.1" 400 | }, 401 | "engines": { 402 | "node": ">= 0.4.0" 403 | } 404 | }, 405 | "node_modules/has-symbols": { 406 | "version": "1.0.2", 407 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", 408 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", 409 | "engines": { 410 | "node": ">= 0.4" 411 | }, 412 | "funding": { 413 | "url": "https://github.com/sponsors/ljharb" 414 | } 415 | }, 416 | "node_modules/hash.js": { 417 | "version": "1.1.7", 418 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 419 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 420 | "dependencies": { 421 | "inherits": "^2.0.3", 422 | "minimalistic-assert": "^1.0.1" 423 | } 424 | }, 425 | "node_modules/hmac-drbg": { 426 | "version": "1.0.1", 427 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 428 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 429 | "dependencies": { 430 | "hash.js": "^1.0.3", 431 | "minimalistic-assert": "^1.0.0", 432 | "minimalistic-crypto-utils": "^1.0.1" 433 | } 434 | }, 435 | "node_modules/inherits": { 436 | "version": "2.0.4", 437 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 438 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 439 | }, 440 | "node_modules/ini": { 441 | "version": "2.0.0", 442 | "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", 443 | "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", 444 | "engines": { 445 | "node": ">=10" 446 | } 447 | }, 448 | "node_modules/is-fullwidth-code-point": { 449 | "version": "3.0.0", 450 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 451 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 452 | "engines": { 453 | "node": ">=8" 454 | } 455 | }, 456 | "node_modules/is-redirect": { 457 | "version": "1.0.0", 458 | "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", 459 | "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", 460 | "engines": { 461 | "node": ">=0.10.0" 462 | } 463 | }, 464 | "node_modules/isstream": { 465 | "version": "0.1.2", 466 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 467 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 468 | }, 469 | "node_modules/js-sha3": { 470 | "version": "0.8.0", 471 | "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", 472 | "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" 473 | }, 474 | "node_modules/js-yaml": { 475 | "version": "4.1.0", 476 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 477 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 478 | "dependencies": { 479 | "argparse": "^2.0.1" 480 | }, 481 | "bin": { 482 | "js-yaml": "bin/js-yaml.js" 483 | } 484 | }, 485 | "node_modules/jsrsasign": { 486 | "version": "10.5.3", 487 | "resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-10.5.3.tgz", 488 | "integrity": "sha512-5QEQN05HzXxLNVsnd50y6e/vNyKCeFTDu8xwgYbtWOLJKZQf148vmi9DhPEfhLThz22vJm9iyDY39ekmXBSj2A==", 489 | "funding": { 490 | "url": "https://github.com/kjur/jsrsasign#donations" 491 | } 492 | }, 493 | "node_modules/lodash.camelcase": { 494 | "version": "4.3.0", 495 | "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", 496 | "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" 497 | }, 498 | "node_modules/long": { 499 | "version": "4.0.0", 500 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", 501 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" 502 | }, 503 | "node_modules/minimalistic-assert": { 504 | "version": "1.0.1", 505 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 506 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" 507 | }, 508 | "node_modules/minimalistic-crypto-utils": { 509 | "version": "1.0.1", 510 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 511 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" 512 | }, 513 | "node_modules/nan": { 514 | "version": "2.15.0", 515 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", 516 | "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", 517 | "optional": true 518 | }, 519 | "node_modules/nano": { 520 | "version": "9.0.5", 521 | "resolved": "https://registry.npmjs.org/nano/-/nano-9.0.5.tgz", 522 | "integrity": "sha512-fEAhwAdXh4hDDnC8cYJtW6D8ivOmpvFAqT90+zEuQREpRkzA/mJPcI4EKv15JUdajaqiLTXNoKK6PaRF+/06DQ==", 523 | "dependencies": { 524 | "@types/tough-cookie": "^4.0.0", 525 | "axios": "^0.21.1", 526 | "axios-cookiejar-support": "^1.0.1", 527 | "qs": "^6.9.4", 528 | "tough-cookie": "^4.0.0" 529 | }, 530 | "engines": { 531 | "node": ">=10" 532 | } 533 | }, 534 | "node_modules/nconf": { 535 | "version": "0.11.3", 536 | "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.11.3.tgz", 537 | "integrity": "sha512-iYsAuDS9pzjVMGIzJrGE0Vk3Eh8r/suJanRAnWGBd29rVS2XtSgzcAo5l6asV3e4hH2idVONHirg1efoBOslBg==", 538 | "dependencies": { 539 | "async": "^1.4.0", 540 | "ini": "^2.0.0", 541 | "secure-keys": "^1.0.0", 542 | "yargs": "^16.1.1" 543 | }, 544 | "engines": { 545 | "node": ">= 0.4.0" 546 | } 547 | }, 548 | "node_modules/object-inspect": { 549 | "version": "1.12.0", 550 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", 551 | "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", 552 | "funding": { 553 | "url": "https://github.com/sponsors/ljharb" 554 | } 555 | }, 556 | "node_modules/pify": { 557 | "version": "5.0.0", 558 | "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", 559 | "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", 560 | "engines": { 561 | "node": ">=10" 562 | }, 563 | "funding": { 564 | "url": "https://github.com/sponsors/sindresorhus" 565 | } 566 | }, 567 | "node_modules/pkcs11js": { 568 | "version": "1.3.0", 569 | "resolved": "https://registry.npmjs.org/pkcs11js/-/pkcs11js-1.3.0.tgz", 570 | "integrity": "sha512-owI+M6Gpw0cEU47cTt2eWQs4Iqm9zRyobiJ0q37wIgOrK8BcXVuRM3eVGH58QxYWhItMcRiEBUTE8HUHZX+beQ==", 571 | "hasInstallScript": true, 572 | "optional": true, 573 | "dependencies": { 574 | "nan": "^2.15.0" 575 | }, 576 | "funding": { 577 | "type": "github", 578 | "url": "https://github.com/sponsors/PeculiarVentures" 579 | } 580 | }, 581 | "node_modules/promise-settle": { 582 | "version": "0.3.0", 583 | "resolved": "https://registry.npmjs.org/promise-settle/-/promise-settle-0.3.0.tgz", 584 | "integrity": "sha1-tO/VcqHrdM95T4KM00naQKCOTpY=", 585 | "engines": { 586 | "node": ">= 0.10.0" 587 | } 588 | }, 589 | "node_modules/protobufjs": { 590 | "version": "6.11.2", 591 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", 592 | "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", 593 | "hasInstallScript": true, 594 | "dependencies": { 595 | "@protobufjs/aspromise": "^1.1.2", 596 | "@protobufjs/base64": "^1.1.2", 597 | "@protobufjs/codegen": "^2.0.4", 598 | "@protobufjs/eventemitter": "^1.1.0", 599 | "@protobufjs/fetch": "^1.1.0", 600 | "@protobufjs/float": "^1.0.2", 601 | "@protobufjs/inquire": "^1.1.0", 602 | "@protobufjs/path": "^1.1.2", 603 | "@protobufjs/pool": "^1.1.0", 604 | "@protobufjs/utf8": "^1.1.0", 605 | "@types/long": "^4.0.1", 606 | "@types/node": ">=13.7.0", 607 | "long": "^4.0.0" 608 | }, 609 | "bin": { 610 | "pbjs": "bin/pbjs", 611 | "pbts": "bin/pbts" 612 | } 613 | }, 614 | "node_modules/psl": { 615 | "version": "1.8.0", 616 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", 617 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" 618 | }, 619 | "node_modules/punycode": { 620 | "version": "2.1.1", 621 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 622 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 623 | "engines": { 624 | "node": ">=6" 625 | } 626 | }, 627 | "node_modules/qs": { 628 | "version": "6.10.3", 629 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", 630 | "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", 631 | "dependencies": { 632 | "side-channel": "^1.0.4" 633 | }, 634 | "engines": { 635 | "node": ">=0.6" 636 | }, 637 | "funding": { 638 | "url": "https://github.com/sponsors/ljharb" 639 | } 640 | }, 641 | "node_modules/querystring": { 642 | "version": "0.2.0", 643 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 644 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", 645 | "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", 646 | "engines": { 647 | "node": ">=0.4.x" 648 | } 649 | }, 650 | "node_modules/require-directory": { 651 | "version": "2.1.1", 652 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 653 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 654 | "engines": { 655 | "node": ">=0.10.0" 656 | } 657 | }, 658 | "node_modules/secure-keys": { 659 | "version": "1.0.0", 660 | "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz", 661 | "integrity": "sha1-8MgtmKOxOah3aogIBQuCRDEIf8o=" 662 | }, 663 | "node_modules/side-channel": { 664 | "version": "1.0.4", 665 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 666 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 667 | "dependencies": { 668 | "call-bind": "^1.0.0", 669 | "get-intrinsic": "^1.0.2", 670 | "object-inspect": "^1.9.0" 671 | }, 672 | "funding": { 673 | "url": "https://github.com/sponsors/ljharb" 674 | } 675 | }, 676 | "node_modules/sjcl": { 677 | "version": "1.0.8", 678 | "resolved": "https://registry.npmjs.org/sjcl/-/sjcl-1.0.8.tgz", 679 | "integrity": "sha512-LzIjEQ0S0DpIgnxMEayM1rq9aGwGRG4OnZhCdjx7glTaJtf4zRfpg87ImfjSJjoW9vKpagd82McDOwbRT5kQKQ==", 680 | "engines": { 681 | "node": "*" 682 | } 683 | }, 684 | "node_modules/stack-trace": { 685 | "version": "0.0.10", 686 | "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", 687 | "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", 688 | "engines": { 689 | "node": "*" 690 | } 691 | }, 692 | "node_modules/string-width": { 693 | "version": "4.2.3", 694 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 695 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 696 | "dependencies": { 697 | "emoji-regex": "^8.0.0", 698 | "is-fullwidth-code-point": "^3.0.0", 699 | "strip-ansi": "^6.0.1" 700 | }, 701 | "engines": { 702 | "node": ">=8" 703 | } 704 | }, 705 | "node_modules/strip-ansi": { 706 | "version": "6.0.1", 707 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 708 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 709 | "dependencies": { 710 | "ansi-regex": "^5.0.1" 711 | }, 712 | "engines": { 713 | "node": ">=8" 714 | } 715 | }, 716 | "node_modules/tough-cookie": { 717 | "version": "4.0.0", 718 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", 719 | "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", 720 | "dependencies": { 721 | "psl": "^1.1.33", 722 | "punycode": "^2.1.1", 723 | "universalify": "^0.1.2" 724 | }, 725 | "engines": { 726 | "node": ">=6" 727 | } 728 | }, 729 | "node_modules/universalify": { 730 | "version": "0.1.2", 731 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 732 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 733 | "engines": { 734 | "node": ">= 4.0.0" 735 | } 736 | }, 737 | "node_modules/url": { 738 | "version": "0.11.0", 739 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", 740 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", 741 | "dependencies": { 742 | "punycode": "1.3.2", 743 | "querystring": "0.2.0" 744 | } 745 | }, 746 | "node_modules/url/node_modules/punycode": { 747 | "version": "1.3.2", 748 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 749 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" 750 | }, 751 | "node_modules/winston": { 752 | "version": "2.4.5", 753 | "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.5.tgz", 754 | "integrity": "sha512-TWoamHt5yYvsMarGlGEQE59SbJHqGsZV8/lwC+iCcGeAe0vUaOh+Lv6SYM17ouzC/a/LB1/hz/7sxFBtlu1l4A==", 755 | "dependencies": { 756 | "async": "~1.0.0", 757 | "colors": "1.0.x", 758 | "cycle": "1.0.x", 759 | "eyes": "0.1.x", 760 | "isstream": "0.1.x", 761 | "stack-trace": "0.0.x" 762 | }, 763 | "engines": { 764 | "node": ">= 0.10.0" 765 | } 766 | }, 767 | "node_modules/winston/node_modules/async": { 768 | "version": "1.0.0", 769 | "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", 770 | "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" 771 | }, 772 | "node_modules/wrap-ansi": { 773 | "version": "7.0.0", 774 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 775 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 776 | "dependencies": { 777 | "ansi-styles": "^4.0.0", 778 | "string-width": "^4.1.0", 779 | "strip-ansi": "^6.0.0" 780 | }, 781 | "engines": { 782 | "node": ">=10" 783 | }, 784 | "funding": { 785 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 786 | } 787 | }, 788 | "node_modules/y18n": { 789 | "version": "5.0.8", 790 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 791 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 792 | "engines": { 793 | "node": ">=10" 794 | } 795 | }, 796 | "node_modules/yargs": { 797 | "version": "16.2.0", 798 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 799 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 800 | "dependencies": { 801 | "cliui": "^7.0.2", 802 | "escalade": "^3.1.1", 803 | "get-caller-file": "^2.0.5", 804 | "require-directory": "^2.1.1", 805 | "string-width": "^4.2.0", 806 | "y18n": "^5.0.5", 807 | "yargs-parser": "^20.2.2" 808 | }, 809 | "engines": { 810 | "node": ">=10" 811 | } 812 | }, 813 | "node_modules/yargs-parser": { 814 | "version": "20.2.9", 815 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 816 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", 817 | "engines": { 818 | "node": ">=10" 819 | } 820 | }, 821 | "node_modules/yn": { 822 | "version": "4.0.0", 823 | "resolved": "https://registry.npmjs.org/yn/-/yn-4.0.0.tgz", 824 | "integrity": "sha512-huWiiCS4TxKc4SfgmTwW1K7JmXPPAmuXWYy4j9qjQo4+27Kni8mGhAAi1cloRWmBe2EqcLgt3IGqQoRL/MtPgg==", 825 | "engines": { 826 | "node": ">=10" 827 | } 828 | } 829 | }, 830 | "dependencies": { 831 | "@grpc/grpc-js": { 832 | "version": "1.5.5", 833 | "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.5.5.tgz", 834 | "integrity": "sha512-FTd27ItHlsSG/7hp62xgI9YnqSwRbHRSVmDVR8DwOoC+6t8JhHRXe2JL0U8N9GLc0jS0HrtEbO/KP5+G0ebjLQ==", 835 | "requires": { 836 | "@grpc/proto-loader": "^0.6.4", 837 | "@types/node": ">=12.12.47" 838 | } 839 | }, 840 | "@grpc/proto-loader": { 841 | "version": "0.6.9", 842 | "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", 843 | "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", 844 | "requires": { 845 | "@types/long": "^4.0.1", 846 | "lodash.camelcase": "^4.3.0", 847 | "long": "^4.0.0", 848 | "protobufjs": "^6.10.0", 849 | "yargs": "^16.2.0" 850 | } 851 | }, 852 | "@protobufjs/aspromise": { 853 | "version": "1.1.2", 854 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 855 | "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" 856 | }, 857 | "@protobufjs/base64": { 858 | "version": "1.1.2", 859 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 860 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 861 | }, 862 | "@protobufjs/codegen": { 863 | "version": "2.0.4", 864 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 865 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 866 | }, 867 | "@protobufjs/eventemitter": { 868 | "version": "1.1.0", 869 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 870 | "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" 871 | }, 872 | "@protobufjs/fetch": { 873 | "version": "1.1.0", 874 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 875 | "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", 876 | "requires": { 877 | "@protobufjs/aspromise": "^1.1.1", 878 | "@protobufjs/inquire": "^1.1.0" 879 | } 880 | }, 881 | "@protobufjs/float": { 882 | "version": "1.0.2", 883 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 884 | "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" 885 | }, 886 | "@protobufjs/inquire": { 887 | "version": "1.1.0", 888 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 889 | "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" 890 | }, 891 | "@protobufjs/path": { 892 | "version": "1.1.2", 893 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 894 | "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" 895 | }, 896 | "@protobufjs/pool": { 897 | "version": "1.1.0", 898 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 899 | "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" 900 | }, 901 | "@protobufjs/utf8": { 902 | "version": "1.1.0", 903 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 904 | "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" 905 | }, 906 | "@types/long": { 907 | "version": "4.0.1", 908 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", 909 | "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" 910 | }, 911 | "@types/node": { 912 | "version": "17.0.17", 913 | "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz", 914 | "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==" 915 | }, 916 | "@types/tough-cookie": { 917 | "version": "4.0.1", 918 | "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", 919 | "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==" 920 | }, 921 | "ansi-regex": { 922 | "version": "5.0.1", 923 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 924 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 925 | }, 926 | "ansi-styles": { 927 | "version": "4.3.0", 928 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 929 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 930 | "requires": { 931 | "color-convert": "^2.0.1" 932 | } 933 | }, 934 | "argparse": { 935 | "version": "2.0.1", 936 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 937 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" 938 | }, 939 | "async": { 940 | "version": "1.5.2", 941 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", 942 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" 943 | }, 944 | "axios": { 945 | "version": "0.21.4", 946 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", 947 | "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", 948 | "requires": { 949 | "follow-redirects": "^1.14.0" 950 | } 951 | }, 952 | "axios-cookiejar-support": { 953 | "version": "1.0.1", 954 | "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-1.0.1.tgz", 955 | "integrity": "sha512-IZJxnAJ99XxiLqNeMOqrPbfR7fRyIfaoSLdPUf4AMQEGkH8URs0ghJK/xtqBsD+KsSr3pKl4DEQjCn834pHMig==", 956 | "requires": { 957 | "is-redirect": "^1.0.0", 958 | "pify": "^5.0.0" 959 | } 960 | }, 961 | "bn.js": { 962 | "version": "4.12.0", 963 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 964 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 965 | }, 966 | "brorand": { 967 | "version": "1.1.0", 968 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 969 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" 970 | }, 971 | "call-bind": { 972 | "version": "1.0.2", 973 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 974 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 975 | "requires": { 976 | "function-bind": "^1.1.1", 977 | "get-intrinsic": "^1.0.2" 978 | } 979 | }, 980 | "callsite": { 981 | "version": "1.0.0", 982 | "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", 983 | "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" 984 | }, 985 | "cliui": { 986 | "version": "7.0.4", 987 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 988 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 989 | "requires": { 990 | "string-width": "^4.2.0", 991 | "strip-ansi": "^6.0.0", 992 | "wrap-ansi": "^7.0.0" 993 | } 994 | }, 995 | "color-convert": { 996 | "version": "2.0.1", 997 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 998 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 999 | "requires": { 1000 | "color-name": "~1.1.4" 1001 | } 1002 | }, 1003 | "color-name": { 1004 | "version": "1.1.4", 1005 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1006 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 1007 | }, 1008 | "colors": { 1009 | "version": "1.0.3", 1010 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", 1011 | "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" 1012 | }, 1013 | "cycle": { 1014 | "version": "1.0.3", 1015 | "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", 1016 | "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" 1017 | }, 1018 | "elliptic": { 1019 | "version": "6.5.4", 1020 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", 1021 | "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", 1022 | "requires": { 1023 | "bn.js": "^4.11.9", 1024 | "brorand": "^1.1.0", 1025 | "hash.js": "^1.0.0", 1026 | "hmac-drbg": "^1.0.1", 1027 | "inherits": "^2.0.4", 1028 | "minimalistic-assert": "^1.0.1", 1029 | "minimalistic-crypto-utils": "^1.0.1" 1030 | } 1031 | }, 1032 | "emoji-regex": { 1033 | "version": "8.0.0", 1034 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1035 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 1036 | }, 1037 | "escalade": { 1038 | "version": "3.1.1", 1039 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1040 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" 1041 | }, 1042 | "eyes": { 1043 | "version": "0.1.8", 1044 | "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", 1045 | "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" 1046 | }, 1047 | "fabric-ca-client": { 1048 | "version": "2.2.11", 1049 | "resolved": "https://registry.npmjs.org/fabric-ca-client/-/fabric-ca-client-2.2.11.tgz", 1050 | "integrity": "sha512-Tl6ktoYw5ouvz256E/blz+0mWoA6r9L8Pc1BbRffi6ROxuSewdaJEffQjLGAcLG+gJpH2aeviXljWNASqvPIUQ==", 1051 | "requires": { 1052 | "fabric-common": "2.2.11", 1053 | "jsrsasign": "^10.4.1", 1054 | "url": "^0.11.0", 1055 | "winston": "^2.4.5" 1056 | } 1057 | }, 1058 | "fabric-common": { 1059 | "version": "2.2.11", 1060 | "resolved": "https://registry.npmjs.org/fabric-common/-/fabric-common-2.2.11.tgz", 1061 | "integrity": "sha512-VDZUXSoTkgXA4axOONCF93DkFzDaqN0wfKnUTa36Y1Dkk5iSZFdH5iqCroAmerrKg71yGlkiBN7DsD7QWl9McA==", 1062 | "requires": { 1063 | "callsite": "^1.0.0", 1064 | "elliptic": "^6.5.4", 1065 | "fabric-protos": "2.2.11", 1066 | "js-sha3": "^0.8.0", 1067 | "jsrsasign": "^10.4.1", 1068 | "long": "^4.0.0", 1069 | "nconf": "^0.11.2", 1070 | "pkcs11js": "^1.0.6", 1071 | "promise-settle": "^0.3.0", 1072 | "sjcl": "^1.0.8", 1073 | "winston": "^2.4.5", 1074 | "yn": "^4.0.0" 1075 | } 1076 | }, 1077 | "fabric-network": { 1078 | "version": "2.2.11", 1079 | "resolved": "https://registry.npmjs.org/fabric-network/-/fabric-network-2.2.11.tgz", 1080 | "integrity": "sha512-YikiBMK0O9Ve+5vZkEOkiz/eXCBzJFh0Ik9MigpjRam86E64NOpNzjMZbCfeas91+O5HPJrO5+zfjEHw7vWsIg==", 1081 | "requires": { 1082 | "fabric-common": "2.2.11", 1083 | "fabric-protos": "2.2.11", 1084 | "long": "^4.0.0", 1085 | "nano": "^9.0.3" 1086 | } 1087 | }, 1088 | "fabric-protos": { 1089 | "version": "2.2.11", 1090 | "resolved": "https://registry.npmjs.org/fabric-protos/-/fabric-protos-2.2.11.tgz", 1091 | "integrity": "sha512-haWUubqMLccIyBdmhx4ueKCe7rJgr/zln7iDF+BM7Im48K/a76VmWdddm+QGgWI0Bbk1RA1KfLOdwdb/gSGiSg==", 1092 | "requires": { 1093 | "@grpc/grpc-js": "^1.3.4", 1094 | "@grpc/proto-loader": "^0.6.2", 1095 | "protobufjs": "^6.11.2" 1096 | } 1097 | }, 1098 | "follow-redirects": { 1099 | "version": "1.14.8", 1100 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", 1101 | "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==" 1102 | }, 1103 | "function-bind": { 1104 | "version": "1.1.1", 1105 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1106 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 1107 | }, 1108 | "get-caller-file": { 1109 | "version": "2.0.5", 1110 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1111 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 1112 | }, 1113 | "get-intrinsic": { 1114 | "version": "1.1.1", 1115 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 1116 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 1117 | "requires": { 1118 | "function-bind": "^1.1.1", 1119 | "has": "^1.0.3", 1120 | "has-symbols": "^1.0.1" 1121 | } 1122 | }, 1123 | "has": { 1124 | "version": "1.0.3", 1125 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1126 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1127 | "requires": { 1128 | "function-bind": "^1.1.1" 1129 | } 1130 | }, 1131 | "has-symbols": { 1132 | "version": "1.0.2", 1133 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", 1134 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" 1135 | }, 1136 | "hash.js": { 1137 | "version": "1.1.7", 1138 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 1139 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 1140 | "requires": { 1141 | "inherits": "^2.0.3", 1142 | "minimalistic-assert": "^1.0.1" 1143 | } 1144 | }, 1145 | "hmac-drbg": { 1146 | "version": "1.0.1", 1147 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 1148 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 1149 | "requires": { 1150 | "hash.js": "^1.0.3", 1151 | "minimalistic-assert": "^1.0.0", 1152 | "minimalistic-crypto-utils": "^1.0.1" 1153 | } 1154 | }, 1155 | "inherits": { 1156 | "version": "2.0.4", 1157 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1158 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1159 | }, 1160 | "ini": { 1161 | "version": "2.0.0", 1162 | "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", 1163 | "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" 1164 | }, 1165 | "is-fullwidth-code-point": { 1166 | "version": "3.0.0", 1167 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1168 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 1169 | }, 1170 | "is-redirect": { 1171 | "version": "1.0.0", 1172 | "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", 1173 | "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" 1174 | }, 1175 | "isstream": { 1176 | "version": "0.1.2", 1177 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1178 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 1179 | }, 1180 | "js-sha3": { 1181 | "version": "0.8.0", 1182 | "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", 1183 | "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" 1184 | }, 1185 | "js-yaml": { 1186 | "version": "4.1.0", 1187 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1188 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1189 | "requires": { 1190 | "argparse": "^2.0.1" 1191 | } 1192 | }, 1193 | "jsrsasign": { 1194 | "version": "10.5.3", 1195 | "resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-10.5.3.tgz", 1196 | "integrity": "sha512-5QEQN05HzXxLNVsnd50y6e/vNyKCeFTDu8xwgYbtWOLJKZQf148vmi9DhPEfhLThz22vJm9iyDY39ekmXBSj2A==" 1197 | }, 1198 | "lodash.camelcase": { 1199 | "version": "4.3.0", 1200 | "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", 1201 | "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" 1202 | }, 1203 | "long": { 1204 | "version": "4.0.0", 1205 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", 1206 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" 1207 | }, 1208 | "minimalistic-assert": { 1209 | "version": "1.0.1", 1210 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 1211 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" 1212 | }, 1213 | "minimalistic-crypto-utils": { 1214 | "version": "1.0.1", 1215 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 1216 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" 1217 | }, 1218 | "nan": { 1219 | "version": "2.15.0", 1220 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", 1221 | "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", 1222 | "optional": true 1223 | }, 1224 | "nano": { 1225 | "version": "9.0.5", 1226 | "resolved": "https://registry.npmjs.org/nano/-/nano-9.0.5.tgz", 1227 | "integrity": "sha512-fEAhwAdXh4hDDnC8cYJtW6D8ivOmpvFAqT90+zEuQREpRkzA/mJPcI4EKv15JUdajaqiLTXNoKK6PaRF+/06DQ==", 1228 | "requires": { 1229 | "@types/tough-cookie": "^4.0.0", 1230 | "axios": "^0.21.1", 1231 | "axios-cookiejar-support": "^1.0.1", 1232 | "qs": "^6.9.4", 1233 | "tough-cookie": "^4.0.0" 1234 | } 1235 | }, 1236 | "nconf": { 1237 | "version": "0.11.3", 1238 | "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.11.3.tgz", 1239 | "integrity": "sha512-iYsAuDS9pzjVMGIzJrGE0Vk3Eh8r/suJanRAnWGBd29rVS2XtSgzcAo5l6asV3e4hH2idVONHirg1efoBOslBg==", 1240 | "requires": { 1241 | "async": "^1.4.0", 1242 | "ini": "^2.0.0", 1243 | "secure-keys": "^1.0.0", 1244 | "yargs": "^16.1.1" 1245 | } 1246 | }, 1247 | "object-inspect": { 1248 | "version": "1.12.0", 1249 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", 1250 | "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" 1251 | }, 1252 | "pify": { 1253 | "version": "5.0.0", 1254 | "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", 1255 | "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==" 1256 | }, 1257 | "pkcs11js": { 1258 | "version": "1.3.0", 1259 | "resolved": "https://registry.npmjs.org/pkcs11js/-/pkcs11js-1.3.0.tgz", 1260 | "integrity": "sha512-owI+M6Gpw0cEU47cTt2eWQs4Iqm9zRyobiJ0q37wIgOrK8BcXVuRM3eVGH58QxYWhItMcRiEBUTE8HUHZX+beQ==", 1261 | "optional": true, 1262 | "requires": { 1263 | "nan": "^2.15.0" 1264 | } 1265 | }, 1266 | "promise-settle": { 1267 | "version": "0.3.0", 1268 | "resolved": "https://registry.npmjs.org/promise-settle/-/promise-settle-0.3.0.tgz", 1269 | "integrity": "sha1-tO/VcqHrdM95T4KM00naQKCOTpY=" 1270 | }, 1271 | "protobufjs": { 1272 | "version": "6.11.2", 1273 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", 1274 | "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", 1275 | "requires": { 1276 | "@protobufjs/aspromise": "^1.1.2", 1277 | "@protobufjs/base64": "^1.1.2", 1278 | "@protobufjs/codegen": "^2.0.4", 1279 | "@protobufjs/eventemitter": "^1.1.0", 1280 | "@protobufjs/fetch": "^1.1.0", 1281 | "@protobufjs/float": "^1.0.2", 1282 | "@protobufjs/inquire": "^1.1.0", 1283 | "@protobufjs/path": "^1.1.2", 1284 | "@protobufjs/pool": "^1.1.0", 1285 | "@protobufjs/utf8": "^1.1.0", 1286 | "@types/long": "^4.0.1", 1287 | "@types/node": ">=13.7.0", 1288 | "long": "^4.0.0" 1289 | } 1290 | }, 1291 | "psl": { 1292 | "version": "1.8.0", 1293 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", 1294 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" 1295 | }, 1296 | "punycode": { 1297 | "version": "2.1.1", 1298 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1299 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 1300 | }, 1301 | "qs": { 1302 | "version": "6.10.3", 1303 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", 1304 | "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", 1305 | "requires": { 1306 | "side-channel": "^1.0.4" 1307 | } 1308 | }, 1309 | "querystring": { 1310 | "version": "0.2.0", 1311 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 1312 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" 1313 | }, 1314 | "require-directory": { 1315 | "version": "2.1.1", 1316 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1317 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" 1318 | }, 1319 | "secure-keys": { 1320 | "version": "1.0.0", 1321 | "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz", 1322 | "integrity": "sha1-8MgtmKOxOah3aogIBQuCRDEIf8o=" 1323 | }, 1324 | "side-channel": { 1325 | "version": "1.0.4", 1326 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1327 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1328 | "requires": { 1329 | "call-bind": "^1.0.0", 1330 | "get-intrinsic": "^1.0.2", 1331 | "object-inspect": "^1.9.0" 1332 | } 1333 | }, 1334 | "sjcl": { 1335 | "version": "1.0.8", 1336 | "resolved": "https://registry.npmjs.org/sjcl/-/sjcl-1.0.8.tgz", 1337 | "integrity": "sha512-LzIjEQ0S0DpIgnxMEayM1rq9aGwGRG4OnZhCdjx7glTaJtf4zRfpg87ImfjSJjoW9vKpagd82McDOwbRT5kQKQ==" 1338 | }, 1339 | "stack-trace": { 1340 | "version": "0.0.10", 1341 | "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", 1342 | "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" 1343 | }, 1344 | "string-width": { 1345 | "version": "4.2.3", 1346 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1347 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1348 | "requires": { 1349 | "emoji-regex": "^8.0.0", 1350 | "is-fullwidth-code-point": "^3.0.0", 1351 | "strip-ansi": "^6.0.1" 1352 | } 1353 | }, 1354 | "strip-ansi": { 1355 | "version": "6.0.1", 1356 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1357 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1358 | "requires": { 1359 | "ansi-regex": "^5.0.1" 1360 | } 1361 | }, 1362 | "tough-cookie": { 1363 | "version": "4.0.0", 1364 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", 1365 | "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", 1366 | "requires": { 1367 | "psl": "^1.1.33", 1368 | "punycode": "^2.1.1", 1369 | "universalify": "^0.1.2" 1370 | } 1371 | }, 1372 | "universalify": { 1373 | "version": "0.1.2", 1374 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 1375 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" 1376 | }, 1377 | "url": { 1378 | "version": "0.11.0", 1379 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", 1380 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", 1381 | "requires": { 1382 | "punycode": "1.3.2", 1383 | "querystring": "0.2.0" 1384 | }, 1385 | "dependencies": { 1386 | "punycode": { 1387 | "version": "1.3.2", 1388 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 1389 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" 1390 | } 1391 | } 1392 | }, 1393 | "winston": { 1394 | "version": "2.4.5", 1395 | "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.5.tgz", 1396 | "integrity": "sha512-TWoamHt5yYvsMarGlGEQE59SbJHqGsZV8/lwC+iCcGeAe0vUaOh+Lv6SYM17ouzC/a/LB1/hz/7sxFBtlu1l4A==", 1397 | "requires": { 1398 | "async": "~1.0.0", 1399 | "colors": "1.0.x", 1400 | "cycle": "1.0.x", 1401 | "eyes": "0.1.x", 1402 | "isstream": "0.1.x", 1403 | "stack-trace": "0.0.x" 1404 | }, 1405 | "dependencies": { 1406 | "async": { 1407 | "version": "1.0.0", 1408 | "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", 1409 | "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" 1410 | } 1411 | } 1412 | }, 1413 | "wrap-ansi": { 1414 | "version": "7.0.0", 1415 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1416 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1417 | "requires": { 1418 | "ansi-styles": "^4.0.0", 1419 | "string-width": "^4.1.0", 1420 | "strip-ansi": "^6.0.0" 1421 | } 1422 | }, 1423 | "y18n": { 1424 | "version": "5.0.8", 1425 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1426 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" 1427 | }, 1428 | "yargs": { 1429 | "version": "16.2.0", 1430 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 1431 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 1432 | "requires": { 1433 | "cliui": "^7.0.2", 1434 | "escalade": "^3.1.1", 1435 | "get-caller-file": "^2.0.5", 1436 | "require-directory": "^2.1.1", 1437 | "string-width": "^4.2.0", 1438 | "y18n": "^5.0.5", 1439 | "yargs-parser": "^20.2.2" 1440 | } 1441 | }, 1442 | "yargs-parser": { 1443 | "version": "20.2.9", 1444 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 1445 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" 1446 | }, 1447 | "yn": { 1448 | "version": "4.0.0", 1449 | "resolved": "https://registry.npmjs.org/yn/-/yn-4.0.0.tgz", 1450 | "integrity": "sha512-huWiiCS4TxKc4SfgmTwW1K7JmXPPAmuXWYy4j9qjQo4+27Kni8mGhAAi1cloRWmBe2EqcLgt3IGqQoRL/MtPgg==" 1451 | } 1452 | } 1453 | } 1454 | --------------------------------------------------------------------------------