diff --git a/hyperledger-fabric/LICENSE b/hyperledger-fabric/LICENSE deleted file mode 100644 index 8f71f43f..00000000 --- a/hyperledger-fabric/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - diff --git a/hyperledger-fabric/chaincode/fhir-data/.gitignore b/hyperledger-fabric/chaincode/fhir-data/.gitignore deleted file mode 100644 index d8243d17..00000000 --- a/hyperledger-fabric/chaincode/fhir-data/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.DS_Store -node_modules -.nyc_output -coverage diff --git a/hyperledger-fabric/chaincode/fhir-data/dist/index.d.ts b/hyperledger-fabric/chaincode/fhir-data/dist/index.d.ts deleted file mode 100644 index ad6feaca..00000000 --- a/hyperledger-fabric/chaincode/fhir-data/dist/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { PatientContract } from './patient-contract'; -export declare const contracts: any[]; diff --git a/hyperledger-fabric/chaincode/fhir-data/dist/index.js b/hyperledger-fabric/chaincode/fhir-data/dist/index.js deleted file mode 100644 index d1dddc2f..00000000 --- a/hyperledger-fabric/chaincode/fhir-data/dist/index.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; -/* - * SPDX-License-Identifier: Apache-2.0 - */ -Object.defineProperty(exports, "__esModule", { value: true }); -const patient_contract_1 = require("./patient-contract"); -var patient_contract_2 = require("./patient-contract"); -exports.PatientContract = patient_contract_2.PatientContract; -exports.contracts = [patient_contract_1.PatientContract]; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/hyperledger-fabric/chaincode/fhir-data/dist/index.js.map b/hyperledger-fabric/chaincode/fhir-data/dist/index.js.map deleted file mode 100644 index ffcb095c..00000000 --- a/hyperledger-fabric/chaincode/fhir-data/dist/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,yDAAqD;AACrD,uDAAqD;AAA5C,6CAAA,eAAe,CAAA;AAEX,QAAA,SAAS,GAAU,CAAE,kCAAe,CAAE,CAAC"} \ No newline at end of file diff --git a/hyperledger-fabric/chaincode/fhir-data/dist/patient-contract.d.ts b/hyperledger-fabric/chaincode/fhir-data/dist/patient-contract.d.ts deleted file mode 100644 index b53a1e12..00000000 --- a/hyperledger-fabric/chaincode/fhir-data/dist/patient-contract.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Context, Contract } from 'fabric-contract-api'; -export declare class PatientContract extends Contract { - initLedger(ctx: Context): Promise; - queryPatient(ctx: Context, id: string): Promise; - addPatient(ctx: Context, id: string, patientStr: string): Promise; - replacePatient(ctx: Context, id: string, patientStr: string): Promise; - updatePatient(ctx: Context, id: string, patientStr: string): Promise; -} diff --git a/hyperledger-fabric/chaincode/fhir-data/dist/patient-contract.js b/hyperledger-fabric/chaincode/fhir-data/dist/patient-contract.js deleted file mode 100644 index d9ba1c6d..00000000 --- a/hyperledger-fabric/chaincode/fhir-data/dist/patient-contract.js +++ /dev/null @@ -1,62 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const fabric_contract_api_1 = require("fabric-contract-api"); -const ts_deepmerge_1 = require("ts-deepmerge"); -class PatientContract extends fabric_contract_api_1.Contract { - async initLedger(ctx) { - console.info('============= START : Initialize Ledger ==========='); - console.info('============= END : Initialize Ledger ==========='); - } - // GET patient by id - async queryPatient(ctx, id) { - const patientBytes = await ctx.stub.getState(id); - if (!patientBytes || patientBytes.length === 0) { - throw new Error(`Patient with id '${id}' does not exist`); - } - console.log(patientBytes.toString()); - return patientBytes.toString(); - } - // POST patient - async addPatient(ctx, id, patientStr) { - console.info('============= START : addPatient ==========='); - const patientBytes = await ctx.stub.getState(id); - if (patientBytes && patientBytes.length > 0) { - throw new Error(`Patient with id '${id}' exists; use updatePatient instead.`); - } - const patient = JSON.parse(patientStr); - console.info(`addPatient: received id: '${id}' patient: ` + JSON.stringify(patient)); - await ctx.stub.putState(id, Buffer.from(JSON.stringify(patient))); - console.info('============= END : addPatient ==========='); - } - // PUT patient - async replacePatient(ctx, id, patientStr) { - console.info('============= START : replacePatient ==========='); - const patientBytes = await ctx.stub.getState(id); - if (!patientBytes || patientBytes.length === 0) { - throw new Error(`Patient with id '${id}' does not exist`); - } - const patient = JSON.parse(patientStr); - console.info(`updatePatient: received id: '${id}' patient: ` + JSON.stringify(patient)); - await ctx.stub.putState(id, Buffer.from(JSON.stringify(patient))); - console.info('============= END : replacePatient ==========='); - } - // PATCH patient - async updatePatient(ctx, id, patientStr) { - console.info('============= START : updatePatient ==========='); - const patientBytes = await ctx.stub.getState(id); - if (!patientBytes || patientBytes.length === 0) { - throw new Error(`Patient with id '${id}' does not exist`); - } - const existingPatient = JSON.parse(patientBytes.toString()); - const newPatient = JSON.parse(patientStr); - console.info(`updatePatient: id: '${id}' existingPatient: ` + JSON.stringify(existingPatient)); - console.info(`updatePatient: id: '${id}' newPatient: ` + JSON.stringify(newPatient)); - // Merge the values from newPatient into existingPatient - const result = ts_deepmerge_1.default(existingPatient, newPatient); - console.info(`updatePatient: id: '${id}' merged Patient: ` + JSON.stringify(result)); - await ctx.stub.putState(id, Buffer.from(JSON.stringify(result))); - console.info('============= END : updatePatient ==========='); - } -} -exports.PatientContract = PatientContract; -//# sourceMappingURL=patient-contract.js.map \ No newline at end of file diff --git a/hyperledger-fabric/chaincode/fhir-data/dist/patient-contract.js.map b/hyperledger-fabric/chaincode/fhir-data/dist/patient-contract.js.map deleted file mode 100644 index 271013a0..00000000 --- a/hyperledger-fabric/chaincode/fhir-data/dist/patient-contract.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"patient-contract.js","sourceRoot":"","sources":["../src/patient-contract.ts"],"names":[],"mappings":";;AACA,6DAAwD;AACxD,+CAAiC;AAGjC,MAAa,eAAgB,SAAQ,8BAAQ;IAElC,KAAK,CAAC,UAAU,CAAC,GAAY;QAChC,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IACtE,CAAC;IAED,oBAAoB;IACb,KAAK,CAAC,YAAY,CAAC,GAAY,EAAE,EAAU;QAC9C,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5C,MAAM,IAAI,KAAK,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;SAC7D;QACD,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrC,OAAO,YAAY,CAAC,QAAQ,EAAE,CAAC;IACnC,CAAC;IAED,eAAe;IACR,KAAK,CAAC,UAAU,CAAC,GAAY,EAAE,EAAU,EAAE,UAAkB;QAChE,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjD,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,oBAAoB,EAAE,sCAAsC,CAAC,CAAC;SACjF;QAED,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,6BAA6B,EAAE,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAErF,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC/D,CAAC;IAED,cAAc;IACP,KAAK,CAAC,cAAc,CAAC,GAAY,EAAE,EAAU,EAAE,UAAkB;QACpE,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QACjE,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5C,MAAM,IAAI,KAAK,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;SAC7D;QAED,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAExF,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IACnE,CAAC;IAED,gBAAgB;IACT,KAAK,CAAC,aAAa,CAAC,GAAY,EAAE,EAAU,EAAE,UAAkB;QACnE,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAChE,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5C,MAAM,IAAI,KAAK,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;SAC7D;QAED,MAAM,eAAe,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrE,MAAM,UAAU,GAAY,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;QAC/F,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QAErF,wDAAwD;QACxD,MAAM,MAAM,GAAG,sBAAK,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAErF,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAClE,CAAC;CACJ;AAnED,0CAmEC"} \ No newline at end of file diff --git a/hyperledger-fabric/chaincode/fhir-data/dist/patient.d.ts b/hyperledger-fabric/chaincode/fhir-data/dist/patient.d.ts deleted file mode 100644 index 28473c89..00000000 --- a/hyperledger-fabric/chaincode/fhir-data/dist/patient.d.ts +++ /dev/null @@ -1,160 +0,0 @@ -interface ICoding { - system?: string; - version?: string; - code?: string; - display?: string; - userSelected?: boolean; -} -interface IType { - coding?: ICoding[]; - text?: string; -} -interface IPeriod { - start?: string; - end?: string; -} -interface IIdentifier { - use?: string; - type?: IType; - system?: string; - value?: string; - period?: IPeriod; -} -interface ISecurity { - system?: string; - version?: string; - code?: string; - display?: string; - userSelected?: boolean; -} -interface ITag { - system?: string; - version?: string; - code?: string; - display?: string; - userSelected?: boolean; -} -interface IMeta { - versionId?: string; - lastUpdated?: string; - source?: string; - profile?: string[]; - security?: ISecurity[]; - tag?: ITag[]; -} -interface IName { - use?: string; - text?: string; - family?: string; - given?: string[]; - prefix?: string[]; - suffix?: string[]; - period?: IPeriod; -} -interface ITelecom { - system?: string; - value?: string; - use?: string; - rank?: number; - period?: IPeriod; -} -interface IAddress { - use?: string; - type?: string; - text?: string; - line?: string[]; - city?: string; - district?: string; - state?: string; - postalCode?: string; - country?: string; - period?: IPeriod; -} -interface IMaritalStatus { - coding?: ICoding[]; - text?: string; -} -interface IPhoto { - contentType?: string; - language?: string; - data?: string; - url?: string; - size?: number; - hash?: string; - title?: string; - creation?: string; -} -interface IRelationship { - coding?: ICoding[]; - text?: string; -} -interface IOrganization { - reference?: string; - type?: string; - identifier?: IIdentifier; - display?: string; -} -interface IContact { - relationship?: IRelationship[]; - name?: IName; - telecom?: ITelecom[]; - address?: IAddress; - gender: string; - organization?: IOrganization; - period?: IPeriod; -} -interface ILanguage { - coding?: ICoding[]; - text?: string; -} -interface ICommunication { - language?: ILanguage; - preferred?: boolean; -} -interface IGeneralPractitioner { - reference?: string; - type?: string; - identifier?: IIdentifier; - display?: string; -} -interface IManagingOrganization { - reference?: string; - type?: string; - identifier?: IIdentifier; - display?: string; -} -interface IOther { - reference?: string; - type?: string; - identifier?: IIdentifier; - display?: string; -} -interface ILink { - other?: IOther; - type: string; -} -export declare class Patient { - resourceType?: string; - id?: string; - meta?: IMeta; - implicitRules?: string; - language?: string; - Text?: Text; - identifier?: IIdentifier[]; - active?: boolean; - name?: IName[]; - telecom?: ITelecom[]; - gender: string; - birthDate?: string; - deceasedBoolean?: boolean; - address?: IAddress[]; - maritalStatus?: IMaritalStatus; - multipleBirthBoolean?: boolean; - photo?: IPhoto[]; - contact?: IContact[]; - communication?: ICommunication[]; - generalPractitioner?: IGeneralPractitioner[]; - managingOrganization?: IManagingOrganization[]; - link?: ILink[]; -} -export {}; diff --git a/hyperledger-fabric/chaincode/fhir-data/dist/patient.js b/hyperledger-fabric/chaincode/fhir-data/dist/patient.js deleted file mode 100644 index d2c87ab9..00000000 --- a/hyperledger-fabric/chaincode/fhir-data/dist/patient.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -// Patient is an asset -class Patient { -} -exports.Patient = Patient; -//# sourceMappingURL=patient.js.map \ No newline at end of file diff --git a/hyperledger-fabric/chaincode/fhir-data/dist/patient.js.map b/hyperledger-fabric/chaincode/fhir-data/dist/patient.js.map deleted file mode 100644 index 3b1be485..00000000 --- a/hyperledger-fabric/chaincode/fhir-data/dist/patient.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"patient.js","sourceRoot":"","sources":["../src/patient.ts"],"names":[],"mappings":";;AAiKA,sBAAsB;AACtB,MAAa,OAAO;CAuBnB;AAvBD,0BAuBC"} \ No newline at end of file diff --git a/hyperledger-fabric/chaincode/fhir-data/package-lock.json b/hyperledger-fabric/chaincode/fhir-data/package-lock.json deleted file mode 100644 index c7e89744..00000000 --- a/hyperledger-fabric/chaincode/fhir-data/package-lock.json +++ /dev/null @@ -1,2682 +0,0 @@ -{ - "name": "fhir-data", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/generator": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", - "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", - "dev": true, - "requires": { - "@babel/types": "^7.9.6", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", - "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.9.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", - "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", - "dev": true - }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", - "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==", - "dev": true - }, - "@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" - } - }, - "@babel/traverse": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", - "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.6", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@babel/types": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", - "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "@fidm/asn1": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@fidm/asn1/-/asn1-1.0.4.tgz", - "integrity": "sha512-esd1jyNvRb2HVaQGq2Gg8Z0kbQPXzV9Tq5Z14KNIov6KfFD6PTaRIO8UpcsYiTNzOqJpmyzWgVTrUwFV3UF4TQ==" - }, - "@fidm/x509": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@fidm/x509/-/x509-1.2.1.tgz", - "integrity": "sha512-nwc2iesjyc9hkuzcrMCBXQRn653XuAUKorfWM8PZyJawiy1QzLj4vahwzaI25+pfpwOLvMzbJ0uKpWLDNmo16w==", - "requires": { - "@fidm/asn1": "^1.0.4", - "tweetnacl": "^1.0.1" - } - }, - "@grpc/proto-loader": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.4.tgz", - "integrity": "sha512-HTM4QpI9B2XFkPz7pjwMyMgZchJ93TVkL3kWPW8GDMDKYxsMnmf4w2TNMJK7+KNiYHS5cJrCEAFlF+AwtXWVPA==", - "requires": { - "lodash.camelcase": "^4.3.0", - "protobufjs": "^6.8.6" - } - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "@sinonjs/commons": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.2.tgz", - "integrity": "sha512-+DUO6pnp3udV/v2VfUWgaY5BIE1IfT7lLfeDzPVeMT1XKkaAp9LgSI9x5RtrFQoZ9Oi0PgXQQHPaoKu7dCjVxw==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/formatio": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz", - "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^3.1.0" - } - }, - "@sinonjs/samsam": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", - "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.3.0", - "array-from": "^2.1.1", - "lodash": "^4.17.15" - } - }, - "@sinonjs/text-encoding": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", - "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", - "dev": true - }, - "@types/bytebuffer": { - "version": "5.0.41", - "resolved": "https://registry.npmjs.org/@types/bytebuffer/-/bytebuffer-5.0.41.tgz", - "integrity": "sha512-Mdrv4YcaHvpkx25ksqqFaezktx3yZRcd51GZY0rY/9avyaqZdiT/GiWRhfrJhMpgzXqTOSHgGvsumGxJFNiZZA==", - "requires": { - "@types/long": "*", - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "13.13.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.5.tgz", - "integrity": "sha512-3ySmiBYJPqgjiHA7oEaIo2Rzz0HrOZ7yrNO5HWyaE5q0lQ3BppDZ3N53Miz8bw2I7gh1/zir2MGVZBvpb1zq9g==" - } - } - }, - "@types/chai": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.11.tgz", - "integrity": "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==", - "dev": true - }, - "@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" - }, - "@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", - "dev": true - }, - "@types/node": { - "version": "10.17.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.21.tgz", - "integrity": "sha512-PQKsydPxYxF1DsAFWmunaxd3sOi3iMt6Zmx/tgaagHYmwJ/9cRH91hQkeJZaUGWbvn0K5HlSVEXkn5U/llWPpQ==", - "dev": true - }, - "@types/sinon": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-5.0.7.tgz", - "integrity": "sha512-opwMHufhUwkn/UUDk35LDbKJpA2VBsZT8WLU8NjayvRLGPxQkN+8XmfC2Xl35MAscBE8469koLLBjaI3XLEIww==", - "dev": true - }, - "@types/sinon-chai": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.4.tgz", - "integrity": "sha512-xq5KOWNg70PRC7dnR2VOxgYQ6paumW+4pTZP+6uTSdhpYsAUEeeT5bw6rRHHQrZ4KyR+M5ojOR+lje6TGSpUxA==", - "dev": true, - "requires": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "append-transform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", - "dev": true, - "requires": { - "default-require-extensions": "^2.0.0" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "ascli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz", - "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", - "requires": { - "colour": "~0.7.1", - "optjs": "~3.2.2" - } - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "bytebuffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz", - "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=", - "requires": { - "long": "~3" - }, - "dependencies": { - "long": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", - "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=" - } - } - }, - "caching-transform": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", - "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", - "dev": true, - "requires": { - "hasha": "^3.0.0", - "make-dir": "^2.0.0", - "package-hash": "^3.0.0", - "write-file-atomic": "^2.4.2" - } - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" - }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "class-transformer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.2.3.tgz", - "integrity": "sha512-qsP+0xoavpOlJHuYsQJsN58HXSl8Jvveo+T37rEvCEeRfMWoytAyR0Ua/YsFgpM6AZYZ/og2PJwArwzJl1aXtQ==" - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colornames": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", - "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, - "colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", - "requires": { - "color": "3.0.x", - "text-hex": "1.0.x" - } - }, - "colour": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz", - "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=" - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cp-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", - "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^2.0.0", - "nested-error-stacks": "^2.0.0", - "pify": "^4.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", - "dev": true, - "requires": { - "strip-bom": "^3.0.0" - } - }, - "diagnostics": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", - "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", - "requires": { - "colorspace": "1.1.x", - "enabled": "1.0.x", - "kuler": "1.0.x" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "enabled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", - "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", - "requires": { - "env-variable": "0.0.x" - } - }, - "env-variable": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz", - "integrity": "sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - } - } - }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "fabric-contract-api": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fabric-contract-api/-/fabric-contract-api-2.1.1.tgz", - "integrity": "sha512-W3ksJB/4rnWckhqLt+ucqWpLAiCBj5qm8DUDyTJXySlKcCemVAUMFtTl5pxO40jB4bUtrMbuaQhop8e4BLSU7Q==", - "requires": { - "class-transformer": "^0.2.2", - "fabric-shim-api": "2.1.1", - "fast-safe-stringify": "~2.0.7", - "get-params": "^0.1.2", - "reflect-metadata": "^0.1.12", - "winston": "^3.2.1" - } - }, - "fabric-shim": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fabric-shim/-/fabric-shim-2.1.1.tgz", - "integrity": "sha512-twsH+qJY/w4Ns831Z8IQkL4VUne655NBfJYCIp2FPGvQxMhSzJpyG91zvColFv6uA+ePkpgNuhza7qSXPqevyQ==", - "requires": { - "@fidm/x509": "^1.2.1", - "@grpc/proto-loader": "^0.5.1", - "@types/node": "^8.9.4", - "ajv": "^6.5.5", - "fabric-contract-api": "2.1.1", - "fabric-shim-api": "2.1.1", - "fs-extra": "8.1.0", - "grpc": "^1.23.3", - "reflect-metadata": "^0.1.12", - "winston": "^3.2.1", - "yargs": "^13.3.0 ", - "yargs-parser": "^13.1.1" - }, - "dependencies": { - "@types/node": { - "version": "8.10.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.60.tgz", - "integrity": "sha512-YjPbypHFuiOV0bTgeF07HpEEqhmHaZqYNSdCKeBJa+yFoQ/7BC+FpJcwmi34xUIIRVFktnUyP1dPU8U0612GOg==" - } - } - }, - "fabric-shim-api": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fabric-shim-api/-/fabric-shim-api-2.1.1.tgz", - "integrity": "sha512-FqJq9nMiRc8thrc6qgmahhYcQx6ISZ19yhNElkxqrQk0bYz9I6tpO8AgjnGsplesKzObTxp4VoGb5SB2JUJYBw==" - }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" - }, - "fecha": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", - "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "foreground-child": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", - "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", - "dev": true, - "requires": { - "cross-spawn": "^4", - "signal-exit": "^3.0.0" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-params": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/get-params/-/get-params-0.1.2.tgz", - "integrity": "sha1-uuDfq6WIoMYNeDTA2Nwv9g7u8v4=" - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "grpc": { - "version": "1.24.2", - "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.24.2.tgz", - "integrity": "sha512-EG3WH6AWMVvAiV15d+lr+K77HJ/KV/3FvMpjKjulXHbTwgDZkhkcWbwhxFAoTdxTkQvy0WFcO3Nog50QBbHZWw==", - "requires": { - "@types/bytebuffer": "^5.0.40", - "lodash.camelcase": "^4.3.0", - "lodash.clone": "^4.5.0", - "nan": "^2.13.2", - "node-pre-gyp": "^0.14.0", - "protobufjs": "^5.0.3" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.3", - "bundled": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "debug": { - "version": "3.2.6", - "bundled": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true - }, - "fs-minipass": { - "version": "1.2.7", - "bundled": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.4", - "bundled": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.3", - "bundled": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true - }, - "ini": { - "version": "1.3.5", - "bundled": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "bundled": true - }, - "minipass": { - "version": "2.9.0", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "bundled": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "bundled": true - } - } - }, - "ms": { - "version": "2.1.2", - "bundled": true - }, - "needle": { - "version": "2.4.0", - "bundled": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.14.0", - "bundled": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4.4.2" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true - }, - "npm-packlist": { - "version": "1.4.6", - "bundled": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "process-nextick-args": { - "version": "2.0.1", - "bundled": true - }, - "protobufjs": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz", - "integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==", - "requires": { - "ascli": "~1", - "bytebuffer": "~5", - "glob": "^7.0.5", - "yargs": "^3.10.0" - } - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.7.1", - "bundled": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true - }, - "sax": { - "version": "1.2.4", - "bundled": true - }, - "semver": { - "version": "5.7.1", - "bundled": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true - }, - "tar": { - "version": "4.4.13", - "bundled": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - }, - "yallist": { - "version": "3.1.1", - "bundled": true - }, - "yargs": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", - "requires": { - "camelcase": "^2.0.1", - "cliui": "^3.0.3", - "decamelize": "^1.1.1", - "os-locale": "^1.4.0", - "string-width": "^1.0.1", - "window-size": "^0.1.4", - "y18n": "^3.2.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "hasha": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", - "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", - "dev": true, - "requires": { - "is-stream": "^1.0.1" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" - }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", - "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", - "dev": true, - "requires": { - "append-transform": "^1.0.0" - } - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "just-extend": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.1.0.tgz", - "integrity": "sha512-ApcjaOdVTJ7y4r08xI5wIqpvwS48Q0PBG4DJROcEkH1f8MdAiNFyFxz3xoL0LWAVwjrwPYZdVHHxhRHcx/uGLA==", - "dev": true - }, - "kuler": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", - "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", - "requires": { - "colornames": "^1.1.1" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "^1.0.0" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" - }, - "lodash.clone": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", - "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=" - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "logform": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", - "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", - "requires": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", - "fecha": "^2.3.3", - "ms": "^2.1.1", - "triple-beam": "^1.3.0" - } - }, - "lolex": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz", - "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==", - "dev": true - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" - }, - "nested-error-stacks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", - "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", - "dev": true - }, - "nise": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz", - "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==", - "dev": true, - "requires": { - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "lolex": "^5.0.1", - "path-to-regexp": "^1.7.0" - }, - "dependencies": { - "lolex": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", - "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - } - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "nyc": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", - "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "caching-transform": "^3.0.2", - "convert-source-map": "^1.6.0", - "cp-file": "^6.2.0", - "find-cache-dir": "^2.1.0", - "find-up": "^3.0.0", - "foreground-child": "^1.5.6", - "glob": "^7.1.3", - "istanbul-lib-coverage": "^2.0.5", - "istanbul-lib-hook": "^2.0.7", - "istanbul-lib-instrument": "^3.3.0", - "istanbul-lib-report": "^2.0.8", - "istanbul-lib-source-maps": "^3.0.6", - "istanbul-reports": "^2.2.4", - "js-yaml": "^3.13.1", - "make-dir": "^2.1.0", - "merge-source-map": "^1.1.0", - "resolve-from": "^4.0.0", - "rimraf": "^2.6.3", - "signal-exit": "^3.0.2", - "spawn-wrap": "^1.4.2", - "test-exclude": "^5.2.3", - "uuid": "^3.3.2", - "yargs": "^13.2.2", - "yargs-parser": "^13.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "one-time": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", - "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" - }, - "optjs": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz", - "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4=" - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "requires": { - "lcid": "^1.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "package-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", - "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^3.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dev": true, - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "protobufjs": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.9.0.tgz", - "integrity": "sha512-LlGVfEWDXoI/STstRDdZZKb/qusoAWUnmLg9R8OLSO473mBLWHowx8clbX5/+mKDEI+v7GzjoK9tRPZMMcoTrg==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": "^13.7.0", - "long": "^4.0.0" - }, - "dependencies": { - "@types/node": { - "version": "13.13.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.5.tgz", - "integrity": "sha512-3ySmiBYJPqgjiHA7oEaIo2Rzz0HrOZ7yrNO5HWyaE5q0lQ3BppDZ3N53Miz8bw2I7gh1/zir2MGVZBvpb1zq9g==" - } - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" - }, - "release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - } - }, - "sinon": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.5.0.tgz", - "integrity": "sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.4.0", - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/samsam": "^3.3.3", - "diff": "^3.5.0", - "lolex": "^4.2.0", - "nise": "^1.5.2", - "supports-color": "^5.5.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "sinon-chai": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.5.0.tgz", - "integrity": "sha512-IifbusYiQBpUxxFJkR3wTU68xzBN0+bxCScEaKMjBvAQERg6FnTTc1F17rseLb1tjmkJ23730AXpFI0c47FgAg==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "spawn-wrap": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", - "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", - "dev": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - } - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" - }, - "ts-deepmerge": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/ts-deepmerge/-/ts-deepmerge-1.0.5.tgz", - "integrity": "sha512-SE5ZwI3fiBpmFFv1Siff89ChRX7Jywy4imstI5pBHoSCqfdrCngRSu87o9kj98Q7w3Z0QvNT8ZGNDpeU5W94cg==" - }, - "ts-node": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", - "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", - "dev": true, - "requires": { - "arrify": "^1.0.0", - "buffer-from": "^1.1.0", - "diff": "^3.1.0", - "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.6", - "yn": "^2.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } - } - }, - "tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", - "dev": true - }, - "tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "typescript": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", - "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" - }, - "winston": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", - "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", - "requires": { - "async": "^2.6.1", - "diagnostics": "^1.1.1", - "is-stream": "^1.1.0", - "logform": "^2.1.1", - "one-time": "0.0.4", - "readable-stream": "^3.1.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.3.0" - } - }, - "winston-transport": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", - "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", - "requires": { - "readable-stream": "^2.3.6", - "triple-beam": "^1.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - } - } - }, - "yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", - "dev": true - } - } -} diff --git a/hyperledger-fabric/chaincode/fhir-data/package.json b/hyperledger-fabric/chaincode/fhir-data/package.json deleted file mode 100644 index fec5f20f..00000000 --- a/hyperledger-fabric/chaincode/fhir-data/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "fhir-data", - "version": "1.0.0", - "description": "FHIR Patient contract implemented in TypeScript", - "main": "dist/index.js", - "typings": "dist/index.d.ts", - "engines": { - "node": ">=8", - "npm": ">=5" - }, - "scripts": { - "lint": "tslint -c tslint.json 'src/**/*.ts'", - "pretest": "npm run lint", - "test": "nyc mocha -r ts-node/register src/**/*.spec.ts", - "start": "fabric-chaincode-node start", - "build": "tsc", - "build:watch": "tsc -w", - "prepublishOnly": "npm run build" - }, - "engineStrict": true, - "author": "Carole Corley", - "license": "Apache-2.0", - "dependencies": { - "fabric-contract-api": "^2.0.0", - "fabric-shim": "^2.0.0", - "ts-deepmerge": "^1.0.5" - }, - "devDependencies": { - "@types/chai": "^4.1.7", - "@types/mocha": "^5.2.5", - "@types/node": "^10.12.10", - "@types/sinon": "^5.0.7", - "@types/sinon-chai": "^3.2.1", - "chai": "^4.2.0", - "mocha": "^5.2.0", - "nyc": "^14.1.1", - "sinon": "^7.1.1", - "sinon-chai": "^3.3.0", - "ts-node": "^7.0.1", - "tslint": "^5.11.0", - "typescript": "^3.1.6" - }, - "nyc": { - "extension": [ - ".ts", - ".tsx" - ], - "exclude": [ - "coverage/**", - "dist/**" - ], - "reporter": [ - "text-summary", - "html" - ], - "all": true, - "check-coverage": true, - "statements": 100, - "branches": 100, - "functions": 100, - "lines": 100 - } -} diff --git a/hyperledger-fabric/chaincode/fhir-data/src/index.ts b/hyperledger-fabric/chaincode/fhir-data/src/index.ts deleted file mode 100644 index 60cb14a4..00000000 --- a/hyperledger-fabric/chaincode/fhir-data/src/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - */ - -import { PatientContract } from './patient-contract'; -export { PatientContract } from './patient-contract'; - -export const contracts: any[] = [ PatientContract ]; diff --git a/hyperledger-fabric/chaincode/fhir-data/src/patient-contract.ts b/hyperledger-fabric/chaincode/fhir-data/src/patient-contract.ts deleted file mode 100644 index f82ef246..00000000 --- a/hyperledger-fabric/chaincode/fhir-data/src/patient-contract.ts +++ /dev/null @@ -1,73 +0,0 @@ - -import { Context, Contract } from 'fabric-contract-api'; -import merge from 'ts-deepmerge'; -import { Patient } from './patient'; - -export class PatientContract extends Contract { - - public async initLedger(ctx: Context) { - console.info('============= START : Initialize Ledger ==========='); - console.info('============= END : Initialize Ledger ==========='); - } - - // GET patient by id - public async queryPatient(ctx: Context, id: string): Promise { - const patientBytes = await ctx.stub.getState(id); - if (!patientBytes || patientBytes.length === 0) { - throw new Error(`Patient with id '${id}' does not exist`); - } - console.log(patientBytes.toString()); - return patientBytes.toString(); - } - - // POST patient - public async addPatient(ctx: Context, id: string, patientStr: string) { - console.info('============= START : addPatient ==========='); - const patientBytes = await ctx.stub.getState(id); - if (patientBytes && patientBytes.length > 0) { - throw new Error(`Patient with id '${id}' exists; use updatePatient instead.`); - } - - const patient: Patient = JSON.parse(patientStr); - console.info(`addPatient: received id: '${id}' patient: ` + JSON.stringify(patient)); - - await ctx.stub.putState(id, Buffer.from(JSON.stringify(patient))); - console.info('============= END : addPatient ==========='); - } - - // PUT patient - public async replacePatient(ctx: Context, id: string, patientStr: string) { - console.info('============= START : replacePatient ==========='); - const patientBytes = await ctx.stub.getState(id); - if (!patientBytes || patientBytes.length === 0) { - throw new Error(`Patient with id '${id}' does not exist`); - } - - const patient: Patient = JSON.parse(patientStr); - console.info(`updatePatient: received id: '${id}' patient: ` + JSON.stringify(patient)); - - await ctx.stub.putState(id, Buffer.from(JSON.stringify(patient))); - console.info('============= END : replacePatient ==========='); - } - - // PATCH patient - public async updatePatient(ctx: Context, id: string, patientStr: string) { - console.info('============= START : updatePatient ==========='); - const patientBytes = await ctx.stub.getState(id); - if (!patientBytes || patientBytes.length === 0) { - throw new Error(`Patient with id '${id}' does not exist`); - } - - const existingPatient: Patient = JSON.parse(patientBytes.toString()); - const newPatient: Patient = JSON.parse(patientStr); - console.info(`updatePatient: id: '${id}' existingPatient: ` + JSON.stringify(existingPatient)); - console.info(`updatePatient: id: '${id}' newPatient: ` + JSON.stringify(newPatient)); - - // Merge the values from newPatient into existingPatient - const result = merge(existingPatient, newPatient); - console.info(`updatePatient: id: '${id}' merged Patient: ` + JSON.stringify(result)); - - await ctx.stub.putState(id, Buffer.from(JSON.stringify(result))); - console.info('============= END : updatePatient ==========='); - } -} diff --git a/hyperledger-fabric/chaincode/fhir-data/src/patient.ts b/hyperledger-fabric/chaincode/fhir-data/src/patient.ts deleted file mode 100644 index ce94d781..00000000 --- a/hyperledger-fabric/chaincode/fhir-data/src/patient.ts +++ /dev/null @@ -1,186 +0,0 @@ -interface ICoding { - system?: string; - version?: string; - code?: string; - display?: string; - userSelected?: boolean; -} - -interface IType { - coding?: ICoding[]; - text?: string; -} - -interface IPeriod { - start?: string; - end?: string; -} - -interface IIdentifier { - use?: string; - type?: IType; - system?: string; - value?: string; - period?: IPeriod; -} - -interface ISecurity { - system?: string; - version?: string; - code?: string; - display?: string; - userSelected?: boolean; -} - -interface ITag { - system?: string; - version?: string; - code?: string; - display?: string; - userSelected?: boolean; -} - -interface IMeta { - versionId?: string; - lastUpdated?: string; - source?: string; - profile?: string[]; - security?: ISecurity[]; - tag?: ITag[]; -} - -interface IText { - status?: string; - div?: string; -} - -interface IName { - use?: string; - text?: string; - family?: string; - given?: string[]; - prefix?: string[]; - suffix?: string[]; - period?: IPeriod; -} - -interface ITelecom { - system?: string; - value?: string; - use?: string; - rank?: number; - period?: IPeriod; -} - -interface IAddress { - use?: string; - type?: string; - text?: string; - line?: string[]; - city?: string; - district?: string; - state?: string; - postalCode?: string; - country?: string; - period?: IPeriod; -} - -interface IMaritalStatus { - coding?: ICoding[]; - text?: string; -} - -interface IPhoto { - contentType?: string; - language?: string; - data?: string; - url?: string; - size?: number; - hash?: string; - title?: string; - creation?: string; -} - -interface IRelationship { - coding?: ICoding[]; - text?: string; -} - -interface IOrganization { - reference?: string; - type?: string; - identifier?: IIdentifier; - display?: string; -} - -interface IContact { - relationship?: IRelationship[]; - name?: IName; - telecom?: ITelecom[]; - address?: IAddress; - gender: string; - organization?: IOrganization; - period?: IPeriod; -} - -interface ILanguage { - coding?: ICoding[]; - text?: string; -} - -interface ICommunication { - language?: ILanguage; - preferred?: boolean; -} - -interface IGeneralPractitioner { - reference?: string; - type?: string; - identifier?: IIdentifier; - display?: string; -} - -interface IManagingOrganization { - reference?: string; - type?: string; - identifier?: IIdentifier; - display?: string; -} - -interface IOther { - reference?: string; - type?: string; - identifier?: IIdentifier; - display?: string; -} - -interface ILink { - other?: IOther; - type: string; -} - -// Patient is an asset -export class Patient { - public resourceType?: string; - public id?: string; - public meta?: IMeta; - public implicitRules?: string; - public language?: string; - public Text?: Text; - public identifier?: IIdentifier[]; - public active?: boolean; - public name?: IName[]; - public telecom?: ITelecom[]; - public gender: string; - public birthDate?: string; - public deceasedBoolean?: boolean; - public address?: IAddress[]; - public maritalStatus?: IMaritalStatus; - public multipleBirthBoolean?: boolean; - public photo?: IPhoto[]; - public contact?: IContact[]; - public communication?: ICommunication[]; - public generalPractitioner?: IGeneralPractitioner[]; - public managingOrganization?: IManagingOrganization[]; - public link?: ILink[]; -} diff --git a/hyperledger-fabric/chaincode/fhir-data/tsconfig.json b/hyperledger-fabric/chaincode/fhir-data/tsconfig.json deleted file mode 100644 index 8c96ea07..00000000 --- a/hyperledger-fabric/chaincode/fhir-data/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "outDir": "dist", - "target": "es2017", - "moduleResolution": "node", - "module": "commonjs", - "declaration": true, - "sourceMap": true - }, - "include": [ - "./src/**/*" - ], - "exclude": [ - "./src/**/*.spec.ts" - ] -} diff --git a/hyperledger-fabric/chaincode/fhir-data/tslint.json b/hyperledger-fabric/chaincode/fhir-data/tslint.json deleted file mode 100644 index 33ccbf3c..00000000 --- a/hyperledger-fabric/chaincode/fhir-data/tslint.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "defaultSeverity": "error", - "extends": [ - "tslint:recommended" - ], - "jsRules": {}, - "rules": { - "indent": [true, "spaces", 4], - "linebreak-style": [true, "LF"], - "quotemark": [true, "single"], - "semicolon": [true, "always"], - "no-console": false, - "curly": true, - "triple-equals": true, - "no-string-throw": true, - "no-var-keyword": true, - "no-trailing-whitespace": true, - "object-literal-key-quotes": [true, "as-needed"] - }, - "rulesDirectory": [] -} diff --git a/hyperledger-fabric/config/configtx.yaml b/hyperledger-fabric/config/configtx.yaml deleted file mode 100644 index 7134f431..00000000 --- a/hyperledger-fabric/config/configtx.yaml +++ /dev/null @@ -1,606 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - ---- -################################################################################ -# -# ORGANIZATIONS -# -# This section defines the organizational identities that can be referenced -# in the configuration profiles. -# -################################################################################ -Organizations: - - # SampleOrg defines an MSP using the sampleconfig. It should never be used - # in production but may be used as a template for other definitions. - - &SampleOrg - # Name is the key by which this org will be referenced in channel - # configuration transactions. - # Name can include alphanumeric characters as well as dots and dashes. - Name: SampleOrg - - # SkipAsForeign can be set to true for org definitions which are to be - # inherited from the orderer system channel during channel creation. This - # is especially useful when an admin of a single org without access to the - # MSP directories of the other orgs wishes to create a channel. Note - # this property must always be set to false for orgs included in block - # creation. - SkipAsForeign: false - - # ID is the key by which this org's MSP definition will be referenced. - # ID can include alphanumeric characters as well as dots and dashes. - ID: SampleOrg - - # MSPDir is the filesystem path which contains the MSP configuration. - MSPDir: msp - - # Policies defines the set of policies at this level of the config tree - # For organization policies, their canonical path is usually - # /Channel/// - Policies: &SampleOrgPolicies - Readers: - Type: Signature - Rule: "OR('SampleOrg.member')" - # If your MSP is configured with the new NodeOUs, you might - # want to use a more specific rule like the following: - # Rule: "OR('SampleOrg.admin', 'SampleOrg.peer', 'SampleOrg.client')" - Writers: - Type: Signature - Rule: "OR('SampleOrg.member')" - # If your MSP is configured with the new NodeOUs, you might - # want to use a more specific rule like the following: - # Rule: "OR('SampleOrg.admin', 'SampleOrg.client')" - Admins: - Type: Signature - Rule: "OR('SampleOrg.admin')" - Endorsement: - Type: Signature - Rule: "OR('SampleOrg.member')" - - # OrdererEndpoints is a list of all orderers this org runs which clients - # and peers may to connect to to push transactions and receive blocks respectively. - OrdererEndpoints: - - "127.0.0.1:7050" - - # AnchorPeers defines the location of peers which can be used for - # cross-org gossip communication. Note, this value is only encoded in - # the genesis block in the Application section context. - AnchorPeers: - - Host: 127.0.0.1 - Port: 7051 - -################################################################################ -# -# CAPABILITIES -# -# This section defines the capabilities of fabric network. This is a new -# concept as of v1.1.0 and should not be utilized in mixed networks with -# v1.0.x peers and orderers. Capabilities define features which must be -# present in a fabric binary for that binary to safely participate in the -# fabric network. For instance, if a new MSP type is added, newer binaries -# might recognize and validate the signatures from this type, while older -# binaries without this support would be unable to validate those -# transactions. This could lead to different versions of the fabric binaries -# having different world states. Instead, defining a capability for a channel -# informs those binaries without this capability that they must cease -# processing transactions until they have been upgraded. For v1.0.x if any -# capabilities are defined (including a map with all capabilities turned off) -# then the v1.0.x peer will deliberately crash. -# -################################################################################ -Capabilities: - # Channel capabilities apply to both the orderers and the peers and must be - # supported by both. - # Set the value of the capability to true to require it. - Channel: &ChannelCapabilities - # V2.0 for Channel is a catchall flag for behavior which has been - # determined to be desired for all orderers and peers running at the v2.0.0 - # level, but which would be incompatible with orderers and peers from - # prior releases. - # Prior to enabling V2.0 channel capabilities, ensure that all - # orderers and peers on a channel are at v2.0.0 or later. - V2_0: true - - # Orderer capabilities apply only to the orderers, and may be safely - # used with prior release peers. - # Set the value of the capability to true to require it. - Orderer: &OrdererCapabilities - # V1.1 for Orderer is a catchall flag for behavior which has been - # determined to be desired for all orderers running at the v1.1.x - # level, but which would be incompatible with orderers from prior releases. - # Prior to enabling V2.0 orderer capabilities, ensure that all - # orderers on a channel are at v2.0.0 or later. - V2_0: true - - # Application capabilities apply only to the peer network, and may be safely - # used with prior release orderers. - # Set the value of the capability to true to require it. - Application: &ApplicationCapabilities - # V2.0 for Application enables the new non-backwards compatible - # features and fixes of fabric v2.0. - # Prior to enabling V2.0 orderer capabilities, ensure that all - # orderers on a channel are at v2.0.0 or later. - V2_0: true - -################################################################################ -# -# APPLICATION -# -# This section defines the values to encode into a config transaction or -# genesis block for application-related parameters. -# -################################################################################ -Application: &ApplicationDefaults - ACLs: &ACLsDefault - # This section provides defaults for policies for various resources - # in the system. These "resources" could be functions on system chaincodes - # (e.g., "GetBlockByNumber" on the "qscc" system chaincode) or other resources - # (e.g.,who can receive Block events). This section does NOT specify the resource's - # definition or API, but just the ACL policy for it. - # - # Users can override these defaults with their own policy mapping by defining the - # mapping under ACLs in their channel definition - - #---New Lifecycle System Chaincode (_lifecycle) function to policy mapping for access control--# - - # ACL policy for _lifecycle's "CheckCommitReadiness" function - _lifecycle/CheckCommitReadiness: /Channel/Application/Writers - - # ACL policy for _lifecycle's "CommitChaincodeDefinition" function - _lifecycle/CommitChaincodeDefinition: /Channel/Application/Writers - - # ACL policy for _lifecycle's "QueryChaincodeDefinition" function - _lifecycle/QueryChaincodeDefinition: /Channel/Application/Readers - - # ACL policy for _lifecycle's "QueryChaincodeDefinitions" function - _lifecycle/QueryChaincodeDefinitions: /Channel/Application/Readers - - #---Lifecycle System Chaincode (lscc) function to policy mapping for access control---# - - # ACL policy for lscc's "getid" function - lscc/ChaincodeExists: /Channel/Application/Readers - - # ACL policy for lscc's "getdepspec" function - lscc/GetDeploymentSpec: /Channel/Application/Readers - - # ACL policy for lscc's "getccdata" function - lscc/GetChaincodeData: /Channel/Application/Readers - - # ACL Policy for lscc's "getchaincodes" function - lscc/GetInstantiatedChaincodes: /Channel/Application/Readers - - #---Query System Chaincode (qscc) function to policy mapping for access control---# - - # ACL policy for qscc's "GetChainInfo" function - qscc/GetChainInfo: /Channel/Application/Readers - - # ACL policy for qscc's "GetBlockByNumber" function - qscc/GetBlockByNumber: /Channel/Application/Readers - - # ACL policy for qscc's "GetBlockByHash" function - qscc/GetBlockByHash: /Channel/Application/Readers - - # ACL policy for qscc's "GetTransactionByID" function - qscc/GetTransactionByID: /Channel/Application/Readers - - # ACL policy for qscc's "GetBlockByTxID" function - qscc/GetBlockByTxID: /Channel/Application/Readers - - #---Configuration System Chaincode (cscc) function to policy mapping for access control---# - - # ACL policy for cscc's "GetConfigBlock" function - cscc/GetConfigBlock: /Channel/Application/Readers - - # ACL policy for cscc's "GetConfigTree" function - cscc/GetConfigTree: /Channel/Application/Readers - - # ACL policy for cscc's "SimulateConfigTreeUpdate" function - cscc/SimulateConfigTreeUpdate: /Channel/Application/Readers - - #---Miscellanesous peer function to policy mapping for access control---# - - # ACL policy for invoking chaincodes on peer - peer/Propose: /Channel/Application/Writers - - # ACL policy for chaincode to chaincode invocation - peer/ChaincodeToChaincode: /Channel/Application/Readers - - #---Events resource to policy mapping for access control###---# - - # ACL policy for sending block events - event/Block: /Channel/Application/Readers - - # ACL policy for sending filtered block events - event/FilteredBlock: /Channel/Application/Readers - - # Organizations lists the orgs participating on the application side of the - # network. - Organizations: - - # Policies defines the set of policies at this level of the config tree - # For Application policies, their canonical path is - # /Channel/Application/ - Policies: &ApplicationDefaultPolicies - LifecycleEndorsement: - Type: ImplicitMeta - Rule: "MAJORITY Endorsement" - Endorsement: - Type: ImplicitMeta - Rule: "MAJORITY Endorsement" - Readers: - Type: ImplicitMeta - Rule: "ANY Readers" - Writers: - Type: ImplicitMeta - Rule: "ANY Writers" - Admins: - Type: ImplicitMeta - Rule: "MAJORITY Admins" - - # Capabilities describes the application level capabilities, see the - # dedicated Capabilities section elsewhere in this file for a full - # description - Capabilities: - <<: *ApplicationCapabilities - -################################################################################ -# -# ORDERER -# -# This section defines the values to encode into a config transaction or -# genesis block for orderer related parameters. -# -################################################################################ -Orderer: &OrdererDefaults - - # Orderer Type: The orderer implementation to start. - # Available types are "solo", "kafka" and "etcdraft". - OrdererType: solo - - # Addresses used to be the list of orderer addresses that clients and peers - # could connect to. However, this does not allow clients to associate orderer - # addresses and orderer organizations which can be useful for things such - # as TLS validation. The preferred way to specify orderer addresses is now - # to include the OrdererEndpoints item in your org definition - Addresses: - # - 127.0.0.1:7050 - - # Batch Timeout: The amount of time to wait before creating a batch. - BatchTimeout: 2s - - # Batch Size: Controls the number of messages batched into a block. - # The orderer views messages opaquely, but typically, messages may - # be considered to be Fabric transactions. The 'batch' is the group - # of messages in the 'data' field of the block. Blocks will be a few kb - # larger than the batch size, when signatures, hashes, and other metadata - # is applied. - BatchSize: - - # Max Message Count: The maximum number of messages to permit in a - # batch. No block will contain more than this number of messages. - MaxMessageCount: 500 - - # Absolute Max Bytes: The absolute maximum number of bytes allowed for - # the serialized messages in a batch. The maximum block size is this value - # plus the size of the associated metadata (usually a few KB depending - # upon the size of the signing identities). Any transaction larger than - # this value will be rejected by ordering. If the "kafka" OrdererType is - # selected, set 'message.max.bytes' and 'replica.fetch.max.bytes' on - # the Kafka brokers to a value that is larger than this one. - AbsoluteMaxBytes: 10 MB - - # Preferred Max Bytes: The preferred maximum number of bytes allowed - # for the serialized messages in a batch. Roughly, this field may be considered - # the best effort maximum size of a batch. A batch will fill with messages - # until this size is reached (or the max message count, or batch timeout is - # exceeded). If adding a new message to the batch would cause the batch to - # exceed the preferred max bytes, then the current batch is closed and written - # to a block, and a new batch containing the new message is created. If a - # message larger than the preferred max bytes is received, then its batch - # will contain only that message. Because messages may be larger than - # preferred max bytes (up to AbsoluteMaxBytes), some batches may exceed - # the preferred max bytes, but will always contain exactly one transaction. - PreferredMaxBytes: 2 MB - - # Max Channels is the maximum number of channels to allow on the ordering - # network. When set to 0, this implies no maximum number of channels. - MaxChannels: 0 - - Kafka: - # Brokers: A list of Kafka brokers to which the orderer connects. Edit - # this list to identify the brokers of the ordering service. - # NOTE: Use IP:port notation. - Brokers: - - kafka0:9092 - - kafka1:9092 - - kafka2:9092 - - # EtcdRaft defines configuration which must be set when the "etcdraft" - # orderertype is chosen. - EtcdRaft: - # The set of Raft replicas for this network. For the etcd/raft-based - # implementation, we expect every replica to also be an OSN. Therefore, - # a subset of the host:port items enumerated in this list should be - # replicated under the Orderer.Addresses key above. - Consenters: - - Host: raft0.example.com - Port: 7050 - ClientTLSCert: path/to/ClientTLSCert0 - ServerTLSCert: path/to/ServerTLSCert0 - - Host: raft1.example.com - Port: 7050 - ClientTLSCert: path/to/ClientTLSCert1 - ServerTLSCert: path/to/ServerTLSCert1 - - Host: raft2.example.com - Port: 7050 - ClientTLSCert: path/to/ClientTLSCert2 - ServerTLSCert: path/to/ServerTLSCert2 - - # Options to be specified for all the etcd/raft nodes. The values here - # are the defaults for all new channels and can be modified on a - # per-channel basis via configuration updates. - Options: - # TickInterval is the time interval between two Node.Tick invocations. - TickInterval: 500ms - - # ElectionTick is the number of Node.Tick invocations that must pass - # between elections. That is, if a follower does not receive any - # message from the leader of current term before ElectionTick has - # elapsed, it will become candidate and start an election. - # ElectionTick must be greater than HeartbeatTick. - ElectionTick: 10 - - # HeartbeatTick is the number of Node.Tick invocations that must - # pass between heartbeats. That is, a leader sends heartbeat - # messages to maintain its leadership every HeartbeatTick ticks. - HeartbeatTick: 1 - - # MaxInflightBlocks limits the max number of in-flight append messages - # during optimistic replication phase. - MaxInflightBlocks: 5 - - # SnapshotIntervalSize defines number of bytes per which a snapshot is taken - SnapshotIntervalSize: 16 MB - - # Organizations lists the orgs participating on the orderer side of the - # network. - Organizations: - - # Policies defines the set of policies at this level of the config tree - # For Orderer policies, their canonical path is - # /Channel/Orderer/ - Policies: - Readers: - Type: ImplicitMeta - Rule: "ANY Readers" - Writers: - Type: ImplicitMeta - Rule: "ANY Writers" - Admins: - Type: ImplicitMeta - Rule: "MAJORITY Admins" - # BlockValidation specifies what signatures must be included in the block - # from the orderer for the peer to validate it. - BlockValidation: - Type: ImplicitMeta - Rule: "ANY Writers" - - # Capabilities describes the orderer level capabilities, see the - # dedicated Capabilities section elsewhere in this file for a full - # description - Capabilities: - <<: *OrdererCapabilities - -################################################################################ -# -# CHANNEL -# -# This section defines the values to encode into a config transaction or -# genesis block for channel related parameters. -# -################################################################################ -Channel: &ChannelDefaults - # Policies defines the set of policies at this level of the config tree - # For Channel policies, their canonical path is - # /Channel/ - Policies: - # Who may invoke the 'Deliver' API - Readers: - Type: ImplicitMeta - Rule: "ANY Readers" - # Who may invoke the 'Broadcast' API - Writers: - Type: ImplicitMeta - Rule: "ANY Writers" - # By default, who may modify elements at this config level - Admins: - Type: ImplicitMeta - Rule: "MAJORITY Admins" - - - # Capabilities describes the channel level capabilities, see the - # dedicated Capabilities section elsewhere in this file for a full - # description - Capabilities: - <<: *ChannelCapabilities - -################################################################################ -# -# PROFILES -# -# Different configuration profiles may be encoded here to be specified as -# parameters to the configtxgen tool. The profiles which specify consortiums -# are to be used for generating the orderer genesis block. With the correct -# consortium members defined in the orderer genesis block, channel creation -# requests may be generated with only the org member names and a consortium -# name. -# -################################################################################ -Profiles: - - # SampleSingleMSPSolo defines a configuration which uses the Solo orderer, - # and contains a single MSP definition (the MSP sampleconfig). - # The Consortium SampleConsortium has only a single member, SampleOrg. - SampleSingleMSPSolo: - <<: *ChannelDefaults - Orderer: - <<: *OrdererDefaults - Organizations: - - *SampleOrg - Consortiums: - SampleConsortium: - Organizations: - - *SampleOrg - - # SampleSingleMSPKafka defines a configuration that differs from the - # SampleSingleMSPSolo one only in that it uses the Kafka-based orderer. - SampleSingleMSPKafka: - <<: *ChannelDefaults - Orderer: - <<: *OrdererDefaults - OrdererType: kafka - Organizations: - - *SampleOrg - Consortiums: - SampleConsortium: - Organizations: - - *SampleOrg - - # SampleInsecureSolo defines a configuration which uses the Solo orderer, - # contains no MSP definitions, and allows all transactions and channel - # creation requests for the consortium SampleConsortium. - SampleInsecureSolo: - <<: *ChannelDefaults - Orderer: - <<: *OrdererDefaults - Consortiums: - SampleConsortium: - Organizations: - - # SampleInsecureKafka defines a configuration that differs from the - # SampleInsecureSolo one only in that it uses the Kafka-based orderer. - SampleInsecureKafka: - <<: *ChannelDefaults - Orderer: - OrdererType: kafka - <<: *OrdererDefaults - Consortiums: - SampleConsortium: - Organizations: - - # SampleDevModeSolo defines a configuration which uses the Solo orderer, - # contains the sample MSP as both orderer and consortium member, and - # requires only basic membership for admin privileges. It also defines - # an Application on the ordering system channel, which should usually - # be avoided. - SampleDevModeSolo: - <<: *ChannelDefaults - Orderer: - <<: *OrdererDefaults - Organizations: - - <<: *SampleOrg - Policies: - <<: *SampleOrgPolicies - Admins: - Type: Signature - Rule: "OR('SampleOrg.member')" - Application: - <<: *ApplicationDefaults - Organizations: - - <<: *SampleOrg - Policies: - <<: *SampleOrgPolicies - Admins: - Type: Signature - Rule: "OR('SampleOrg.member')" - Consortiums: - SampleConsortium: - Organizations: - - <<: *SampleOrg - Policies: - <<: *SampleOrgPolicies - Admins: - Type: Signature - Rule: "OR('SampleOrg.member')" - - # SampleDevModeKafka defines a configuration that differs from the - # SampleDevModeSolo one only in that it uses the Kafka-based orderer. - SampleDevModeKafka: - <<: *ChannelDefaults - Orderer: - <<: *OrdererDefaults - OrdererType: kafka - Organizations: - - <<: *SampleOrg - Policies: - <<: *SampleOrgPolicies - Admins: - Type: Signature - Rule: "OR('SampleOrg.member')" - Application: - <<: *ApplicationDefaults - Organizations: - - <<: *SampleOrg - Policies: - <<: *SampleOrgPolicies - Admins: - Type: Signature - Rule: "OR('SampleOrg.member')" - Consortiums: - SampleConsortium: - Organizations: - - <<: *SampleOrg - Policies: - <<: *SampleOrgPolicies - Admins: - Type: Signature - Rule: "OR('SampleOrg.member')" - - # SampleSingleMSPChannel defines a channel with only the sample org as a - # member. It is designed to be used in conjunction with SampleSingleMSPSolo - # and SampleSingleMSPKafka orderer profiles. Note, for channel creation - # profiles, only the 'Application' section and consortium # name are - # considered. - SampleSingleMSPChannel: - <<: *ChannelDefaults - Consortium: SampleConsortium - Application: - <<: *ApplicationDefaults - Organizations: - - <<: *SampleOrg - - # SampleDevModeEtcdRaft defines a configuration that differs from the - # SampleDevModeSolo one only in that it uses the etcd/raft-based orderer. - SampleDevModeEtcdRaft: - <<: *ChannelDefaults - Orderer: - <<: *OrdererDefaults - OrdererType: etcdraft - Organizations: - - <<: *SampleOrg - Policies: - <<: *SampleOrgPolicies - Admins: - Type: Signature - Rule: "OR('SampleOrg.member')" - Application: - <<: *ApplicationDefaults - Organizations: - - <<: *SampleOrg - Policies: - <<: *SampleOrgPolicies - Admins: - Type: Signature - Rule: "OR('SampleOrg.member')" - Consortiums: - SampleConsortium: - Organizations: - - <<: *SampleOrg - Policies: - <<: *SampleOrgPolicies - Admins: - Type: Signature - Rule: "OR('SampleOrg.member')" diff --git a/hyperledger-fabric/config/core.yaml b/hyperledger-fabric/config/core.yaml deleted file mode 100644 index 6ef6641e..00000000 --- a/hyperledger-fabric/config/core.yaml +++ /dev/null @@ -1,727 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -############################################################################### -# -# Peer section -# -############################################################################### -peer: - - # The peer id provides a name for this peer instance and is used when - # naming docker resources. - id: jdoe - - # The networkId allows for logical separation of networks and is used when - # naming docker resources. - networkId: dev - - # The Address at local network interface this Peer will listen on. - # By default, it will listen on all network interfaces - listenAddress: 0.0.0.0:7051 - - # The endpoint this peer uses to listen for inbound chaincode connections. - # If this is commented-out, the listen address is selected to be - # the peer's address (see below) with port 7052 - # chaincodeListenAddress: 0.0.0.0:7052 - - # The endpoint the chaincode for this peer uses to connect to the peer. - # If this is not specified, the chaincodeListenAddress address is selected. - # And if chaincodeListenAddress is not specified, address is selected from - # peer listenAddress. - # chaincodeAddress: 0.0.0.0:7052 - - # When used as peer config, this represents the endpoint to other peers - # in the same organization. For peers in other organization, see - # gossip.externalEndpoint for more info. - # When used as CLI config, this means the peer's endpoint to interact with - address: 0.0.0.0:7051 - - # Whether the Peer should programmatically determine its address - # This case is useful for docker containers. - addressAutoDetect: false - - # Keepalive settings for peer server and clients - keepalive: - # Interval is the duration after which if the server does not see - # any activity from the client it pings the client to see if it's alive - interval: 7200s - # Timeout is the duration the server waits for a response - # from the client after sending a ping before closing the connection - timeout: 20s - # MinInterval is the minimum permitted time between client pings. - # If clients send pings more frequently, the peer server will - # disconnect them - minInterval: 60s - # Client keepalive settings for communicating with other peer nodes - client: - # Interval is the time between pings to peer nodes. This must - # greater than or equal to the minInterval specified by peer - # nodes - interval: 60s - # Timeout is the duration the client waits for a response from - # peer nodes before closing the connection - timeout: 20s - # DeliveryClient keepalive settings for communication with ordering - # nodes. - deliveryClient: - # Interval is the time between pings to ordering nodes. This must - # greater than or equal to the minInterval specified by ordering - # nodes. - interval: 60s - # Timeout is the duration the client waits for a response from - # ordering nodes before closing the connection - timeout: 20s - - - # Gossip related configuration - gossip: - # Bootstrap set to initialize gossip with. - # This is a list of other peers that this peer reaches out to at startup. - # Important: The endpoints here have to be endpoints of peers in the same - # organization, because the peer would refuse connecting to these endpoints - # unless they are in the same organization as the peer. - bootstrap: 127.0.0.1:7051 - - # NOTE: orgLeader and useLeaderElection parameters are mutual exclusive. - # Setting both to true would result in the termination of the peer - # since this is undefined state. If the peers are configured with - # useLeaderElection=false, make sure there is at least 1 peer in the - # organization that its orgLeader is set to true. - - # Defines whenever peer will initialize dynamic algorithm for - # "leader" selection, where leader is the peer to establish - # connection with ordering service and use delivery protocol - # to pull ledger blocks from ordering service. It is recommended to - # use leader election for large networks of peers. - useLeaderElection: true - # Statically defines peer to be an organization "leader", - # where this means that current peer will maintain connection - # with ordering service and disseminate block across peers in - # its own organization - orgLeader: false - - # Interval for membershipTracker polling - membershipTrackerInterval: 5s - - # Overrides the endpoint that the peer publishes to peers - # in its organization. For peers in foreign organizations - # see 'externalEndpoint' - endpoint: - # Maximum count of blocks stored in memory - maxBlockCountToStore: 100 - # Max time between consecutive message pushes(unit: millisecond) - maxPropagationBurstLatency: 10ms - # Max number of messages stored until a push is triggered to remote peers - maxPropagationBurstSize: 10 - # Number of times a message is pushed to remote peers - propagateIterations: 1 - # Number of peers selected to push messages to - propagatePeerNum: 3 - # Determines frequency of pull phases(unit: second) - # Must be greater than digestWaitTime + responseWaitTime - pullInterval: 4s - # Number of peers to pull from - pullPeerNum: 3 - # Determines frequency of pulling state info messages from peers(unit: second) - requestStateInfoInterval: 4s - # Determines frequency of pushing state info messages to peers(unit: second) - publishStateInfoInterval: 4s - # Maximum time a stateInfo message is kept until expired - stateInfoRetentionInterval: - # Time from startup certificates are included in Alive messages(unit: second) - publishCertPeriod: 10s - # Should we skip verifying block messages or not (currently not in use) - skipBlockVerification: false - # Dial timeout(unit: second) - dialTimeout: 3s - # Connection timeout(unit: second) - connTimeout: 2s - # Buffer size of received messages - recvBuffSize: 20 - # Buffer size of sending messages - sendBuffSize: 200 - # Time to wait before pull engine processes incoming digests (unit: second) - # Should be slightly smaller than requestWaitTime - digestWaitTime: 1s - # Time to wait before pull engine removes incoming nonce (unit: milliseconds) - # Should be slightly bigger than digestWaitTime - requestWaitTime: 1500ms - # Time to wait before pull engine ends pull (unit: second) - responseWaitTime: 2s - # Alive check interval(unit: second) - aliveTimeInterval: 5s - # Alive expiration timeout(unit: second) - aliveExpirationTimeout: 25s - # Reconnect interval(unit: second) - reconnectInterval: 25s - # This is an endpoint that is published to peers outside of the organization. - # If this isn't set, the peer will not be known to other organizations. - externalEndpoint: - # Leader election service configuration - election: - # Longest time peer waits for stable membership during leader election startup (unit: second) - startupGracePeriod: 15s - # Interval gossip membership samples to check its stability (unit: second) - membershipSampleInterval: 1s - # Time passes since last declaration message before peer decides to perform leader election (unit: second) - leaderAliveThreshold: 10s - # Time between peer sends propose message and declares itself as a leader (sends declaration message) (unit: second) - leaderElectionDuration: 5s - - pvtData: - # pullRetryThreshold determines the maximum duration of time private data corresponding for a given block - # would be attempted to be pulled from peers until the block would be committed without the private data - pullRetryThreshold: 60s - # As private data enters the transient store, it is associated with the peer's ledger's height at that time. - # transientstoreMaxBlockRetention defines the maximum difference between the current ledger's height upon commit, - # and the private data residing inside the transient store that is guaranteed not to be purged. - # Private data is purged from the transient store when blocks with sequences that are multiples - # of transientstoreMaxBlockRetention are committed. - transientstoreMaxBlockRetention: 1000 - # pushAckTimeout is the maximum time to wait for an acknowledgement from each peer - # at private data push at endorsement time. - pushAckTimeout: 3s - # Block to live pulling margin, used as a buffer - # to prevent peer from trying to pull private data - # from peers that is soon to be purged in next N blocks. - # This helps a newly joined peer catch up to current - # blockchain height quicker. - btlPullMargin: 10 - # the process of reconciliation is done in an endless loop, while in each iteration reconciler tries to - # pull from the other peers the most recent missing blocks with a maximum batch size limitation. - # reconcileBatchSize determines the maximum batch size of missing private data that will be reconciled in a - # single iteration. - reconcileBatchSize: 10 - # reconcileSleepInterval determines the time reconciler sleeps from end of an iteration until the beginning - # of the next reconciliation iteration. - reconcileSleepInterval: 1m - # reconciliationEnabled is a flag that indicates whether private data reconciliation is enable or not. - reconciliationEnabled: true - # skipPullingInvalidTransactionsDuringCommit is a flag that indicates whether pulling of invalid - # transaction's private data from other peers need to be skipped during the commit time and pulled - # only through reconciler. - skipPullingInvalidTransactionsDuringCommit: false - # implicitCollectionDisseminationPolicy specifies the dissemination policy for the peer's own implicit collection. - # When a peer endorses a proposal that writes to its own implicit collection, below values override the default values - # for disseminating private data. - # Note that it is applicable to all channels the peer has joined. The implication is that requiredPeerCount has to - # be smaller than the number of peers in a channel that has the lowest numbers of peers from the organization. - implicitCollectionDisseminationPolicy: - # requiredPeerCount defines the minimum number of eligible peers to which the peer must successfully - # disseminate private data for its own implicit collection during endorsement. Default value is 0. - requiredPeerCount: 0 - # maxPeerCount defines the maximum number of eligible peers to which the peer will attempt to - # disseminate private data for its own implicit collection during endorsement. Default value is 1. - maxPeerCount: 1 - - # Gossip state transfer related configuration - state: - # indicates whenever state transfer is enabled or not - # default value is true, i.e. state transfer is active - # and takes care to sync up missing blocks allowing - # lagging peer to catch up to speed with rest network - enabled: true - # checkInterval interval to check whether peer is lagging behind enough to - # request blocks via state transfer from another peer. - checkInterval: 10s - # responseTimeout amount of time to wait for state transfer response from - # other peers - responseTimeout: 3s - # batchSize the number of blocks to request via state transfer from another peer - batchSize: 10 - # blockBufferSize reflects the size of the re-ordering buffer - # which captures blocks and takes care to deliver them in order - # down to the ledger layer. The actually buffer size is bounded between - # 0 and 2*blockBufferSize, each channel maintains its own buffer - blockBufferSize: 100 - # maxRetries maximum number of re-tries to ask - # for single state transfer request - maxRetries: 3 - - # TLS Settings - tls: - # Require server-side TLS - enabled: false - # Require client certificates / mutual TLS. - # Note that clients that are not configured to use a certificate will - # fail to connect to the peer. - clientAuthRequired: false - # X.509 certificate used for TLS server - cert: - file: tls/server.crt - # Private key used for TLS server (and client if clientAuthEnabled - # is set to true - key: - file: tls/server.key - # Trusted root certificate chain for tls.cert - rootcert: - file: tls/ca.crt - # Set of root certificate authorities used to verify client certificates - clientRootCAs: - files: - - tls/ca.crt - # Private key used for TLS when making client connections. If - # not set, peer.tls.key.file will be used instead - clientKey: - file: - # X.509 certificate used for TLS when making client connections. - # If not set, peer.tls.cert.file will be used instead - clientCert: - file: - - # Authentication contains configuration parameters related to authenticating - # client messages - authentication: - # the acceptable difference between the current server time and the - # client's time as specified in a client request message - timewindow: 15m - - # Path on the file system where peer will store data (eg ledger). This - # location must be access control protected to prevent unintended - # modification that might corrupt the peer operations. - fileSystemPath: /var/hyperledger/production - - # BCCSP (Blockchain crypto provider): Select which crypto implementation or - # library to use - BCCSP: - Default: SW - # Settings for the SW crypto provider (i.e. when DEFAULT: SW) - SW: - # TODO: The default Hash and Security level needs refactoring to be - # fully configurable. Changing these defaults requires coordination - # SHA2 is hardcoded in several places, not only BCCSP - Hash: SHA2 - Security: 256 - # Location of Key Store - FileKeyStore: - # If "", defaults to 'mspConfigPath'/keystore - KeyStore: - # Settings for the PKCS#11 crypto provider (i.e. when DEFAULT: PKCS11) - PKCS11: - # Location of the PKCS11 module library - Library: - # Token Label - Label: - # User PIN - Pin: - Hash: - Security: - - # Path on the file system where peer will find MSP local configurations - mspConfigPath: msp - - # Identifier of the local MSP - # ----!!!!IMPORTANT!!!-!!!IMPORTANT!!!-!!!IMPORTANT!!!!---- - # Deployers need to change the value of the localMspId string. - # In particular, the name of the local MSP ID of a peer needs - # to match the name of one of the MSPs in each of the channel - # that this peer is a member of. Otherwise this peer's messages - # will not be identified as valid by other nodes. - localMspId: SampleOrg - - # CLI common client config options - client: - # connection timeout - connTimeout: 3s - - # Delivery service related config - deliveryclient: - # It sets the total time the delivery service may spend in reconnection - # attempts until its retry logic gives up and returns an error - reconnectTotalTimeThreshold: 3600s - - # It sets the delivery service <-> ordering service node connection timeout - connTimeout: 3s - - # It sets the delivery service maximal delay between consecutive retries - reConnectBackoffThreshold: 3600s - - # A list of orderer endpoint addresses which should be overridden - # when found in channel configurations. - addressOverrides: - # - from: - # to: - # caCertsFile: - # - from: - # to: - # caCertsFile: - - # Type for the local MSP - by default it's of type bccsp - localMspType: bccsp - - # Used with Go profiling tools only in none production environment. In - # production, it should be disabled (eg enabled: false) - profile: - enabled: false - listenAddress: 0.0.0.0:6060 - - # Handlers defines custom handlers that can filter and mutate - # objects passing within the peer, such as: - # Auth filter - reject or forward proposals from clients - # Decorators - append or mutate the chaincode input passed to the chaincode - # Endorsers - Custom signing over proposal response payload and its mutation - # Valid handler definition contains: - # - A name which is a factory method name defined in - # core/handlers/library/library.go for statically compiled handlers - # - library path to shared object binary for pluggable filters - # Auth filters and decorators are chained and executed in the order that - # they are defined. For example: - # authFilters: - # - - # name: FilterOne - # library: /opt/lib/filter.so - # - - # name: FilterTwo - # decorators: - # - - # name: DecoratorOne - # - - # name: DecoratorTwo - # library: /opt/lib/decorator.so - # Endorsers are configured as a map that its keys are the endorsement system chaincodes that are being overridden. - # Below is an example that overrides the default ESCC and uses an endorsement plugin that has the same functionality - # as the default ESCC. - # If the 'library' property is missing, the name is used as the constructor method in the builtin library similar - # to auth filters and decorators. - # endorsers: - # escc: - # name: DefaultESCC - # library: /etc/hyperledger/fabric/plugin/escc.so - handlers: - authFilters: - - - name: DefaultAuth - - - name: ExpirationCheck # This filter checks identity x509 certificate expiration - decorators: - - - name: DefaultDecorator - endorsers: - escc: - name: DefaultEndorsement - library: - validators: - vscc: - name: DefaultValidation - library: - - # library: /etc/hyperledger/fabric/plugin/escc.so - # Number of goroutines that will execute transaction validation in parallel. - # By default, the peer chooses the number of CPUs on the machine. Set this - # variable to override that choice. - # NOTE: overriding this value might negatively influence the performance of - # the peer so please change this value only if you know what you're doing - validatorPoolSize: - - # The discovery service is used by clients to query information about peers, - # such as - which peers have joined a certain channel, what is the latest - # channel config, and most importantly - given a chaincode and a channel, - # what possible sets of peers satisfy the endorsement policy. - discovery: - enabled: true - # Whether the authentication cache is enabled or not. - authCacheEnabled: true - # The maximum size of the cache, after which a purge takes place - authCacheMaxSize: 1000 - # The proportion (0 to 1) of entries that remain in the cache after the cache is purged due to overpopulation - authCachePurgeRetentionRatio: 0.75 - # Whether to allow non-admins to perform non channel scoped queries. - # When this is false, it means that only peer admins can perform non channel scoped queries. - orgMembersAllowedAccess: false - - # Limits is used to configure some internal resource limits. - limits: - # Concurrency limits the number of concurrently running requests to a service on each peer. - # Currently this option is only applied to endorser service and deliver service. - # When the property is missing or the value is 0, the concurrency limit is disabled for the service. - concurrency: - # endorserService limits concurrent requests to endorser service that handles chaincode deployment, query and invocation, - # including both user chaincodes and system chaincodes. - endorserService: 2500 - # deliverService limits concurrent event listeners registered to deliver service for blocks and transaction events. - deliverService: 2500 - -############################################################################### -# -# VM section -# -############################################################################### -vm: - - # Endpoint of the vm management system. For docker can be one of the following in general - # unix:///var/run/docker.sock - # http://localhost:2375 - # https://localhost:2376 - endpoint: unix:///var/run/docker.sock - - # settings for docker vms - docker: - tls: - enabled: false - ca: - file: docker/ca.crt - cert: - file: docker/tls.crt - key: - file: docker/tls.key - - # Enables/disables the standard out/err from chaincode containers for - # debugging purposes - attachStdout: false - - # Parameters on creating docker container. - # Container may be efficiently created using ipam & dns-server for cluster - # NetworkMode - sets the networking mode for the container. Supported - # standard values are: `host`(default),`bridge`,`ipvlan`,`none`. - # Dns - a list of DNS servers for the container to use. - # Note: `Privileged` `Binds` `Links` and `PortBindings` properties of - # Docker Host Config are not supported and will not be used if set. - # LogConfig - sets the logging driver (Type) and related options - # (Config) for Docker. For more info, - # https://docs.docker.com/engine/admin/logging/overview/ - # Note: Set LogConfig using Environment Variables is not supported. - hostConfig: - NetworkMode: host - Dns: - # - 192.168.0.1 - LogConfig: - Type: json-file - Config: - max-size: "50m" - max-file: "5" - Memory: 2147483648 - -############################################################################### -# -# Chaincode section -# -############################################################################### -chaincode: - - # The id is used by the Chaincode stub to register the executing Chaincode - # ID with the Peer and is generally supplied through ENV variables - # the `path` form of ID is provided when installing the chaincode. - # The `name` is used for all other requests and can be any string. - id: - path: - name: - - # Generic builder environment, suitable for most chaincode types - builder: $(DOCKER_NS)/fabric-ccenv:$(TWO_DIGIT_VERSION) - - # Enables/disables force pulling of the base docker images (listed below) - # during user chaincode instantiation. - # Useful when using moving image tags (such as :latest) - pull: false - - golang: - # golang will never need more than baseos - runtime: $(DOCKER_NS)/fabric-baseos:$(TWO_DIGIT_VERSION) - - # whether or not golang chaincode should be linked dynamically - dynamicLink: false - - java: - # This is an image based on java:openjdk-8 with addition compiler - # tools added for java shim layer packaging. - # This image is packed with shim layer libraries that are necessary - # for Java chaincode runtime. - runtime: $(DOCKER_NS)/fabric-javaenv:$(TWO_DIGIT_VERSION) - - node: - # This is an image based on node:$(NODE_VER)-alpine - runtime: $(DOCKER_NS)/fabric-nodeenv:$(TWO_DIGIT_VERSION) - - # List of directories to treat as external builders and launchers for - # chaincode. The external builder detection processing will iterate over the - # builders in the order specified below. - externalBuilders: [] - # - path: /path/to/directory - # name: descriptive-builder-name - # environmentWhitelist: - # - ENVVAR_NAME_TO_PROPAGATE_FROM_PEER - # - GOPROXY - - # The maximum duration to wait for the chaincode build and install process - # to complete. - installTimeout: 300s - - # Timeout duration for starting up a container and waiting for Register - # to come through. - startuptimeout: 300s - - # Timeout duration for Invoke and Init calls to prevent runaway. - # This timeout is used by all chaincodes in all the channels, including - # system chaincodes. - # Note that during Invoke, if the image is not available (e.g. being - # cleaned up when in development environment), the peer will automatically - # build the image, which might take more time. In production environment, - # the chaincode image is unlikely to be deleted, so the timeout could be - # reduced accordingly. - executetimeout: 30s - - # There are 2 modes: "dev" and "net". - # In dev mode, user runs the chaincode after starting peer from - # command line on local machine. - # In net mode, peer will run chaincode in a docker container. - mode: net - - # keepalive in seconds. In situations where the communication goes through a - # proxy that does not support keep-alive, this parameter will maintain connection - # between peer and chaincode. - # A value <= 0 turns keepalive off - keepalive: 0 - - # system chaincodes whitelist. To add system chaincode "myscc" to the - # whitelist, add "myscc: enable" to the list below, and register in - # chaincode/importsysccs.go - system: - _lifecycle: enable - cscc: enable - lscc: enable - escc: enable - vscc: enable - qscc: enable - - # Logging section for the chaincode container - logging: - # Default level for all loggers within the chaincode container - level: info - # Override default level for the 'shim' logger - shim: warning - # Format for the chaincode container logs - format: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}' - -############################################################################### -# -# Ledger section - ledger configuration encompasses both the blockchain -# and the state -# -############################################################################### -ledger: - - blockchain: - - state: - # stateDatabase - options are "goleveldb", "CouchDB" - # goleveldb - default state database stored in goleveldb. - # CouchDB - store state database in CouchDB - stateDatabase: goleveldb - # Limit on the number of records to return per query - totalQueryLimit: 100000 - couchDBConfig: - # It is recommended to run CouchDB on the same server as the peer, and - # not map the CouchDB container port to a server port in docker-compose. - # Otherwise proper security must be provided on the connection between - # CouchDB client (on the peer) and server. - couchDBAddress: 127.0.0.1:5984 - # This username must have read and write authority on CouchDB - username: - # The password is recommended to pass as an environment variable - # during start up (eg CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD). - # If it is stored here, the file must be access control protected - # to prevent unintended users from discovering the password. - password: - # Number of retries for CouchDB errors - maxRetries: 3 - # Number of retries for CouchDB errors during peer startup - maxRetriesOnStartup: 12 - # CouchDB request timeout (unit: duration, e.g. 20s) - requestTimeout: 35s - # Limit on the number of records per each CouchDB query - # Note that chaincode queries are only bound by totalQueryLimit. - # Internally the chaincode may execute multiple CouchDB queries, - # each of size internalQueryLimit. - internalQueryLimit: 1000 - # Limit on the number of records per CouchDB bulk update batch - maxBatchUpdateSize: 1000 - # Warm indexes after every N blocks. - # This option warms any indexes that have been - # deployed to CouchDB after every N blocks. - # A value of 1 will warm indexes after every block commit, - # to ensure fast selector queries. - # Increasing the value may improve write efficiency of peer and CouchDB, - # but may degrade query response time. - warmIndexesAfterNBlocks: 1 - # Create the _global_changes system database - # This is optional. Creating the global changes database will require - # additional system resources to track changes and maintain the database - createGlobalChangesDB: false - # CacheSize denotes the maximum mega bytes (MB) to be allocated for the in-memory state - # cache. Note that CacheSize needs to be a multiple of 32 MB. If it is not a multiple - # of 32 MB, the peer would round the size to the next multiple of 32 MB. - # To disable the cache, 0 MB needs to be assigned to the cacheSize. - cacheSize: 64 - - history: - # enableHistoryDatabase - options are true or false - # Indicates if the history of key updates should be stored. - # All history 'index' will be stored in goleveldb, regardless if using - # CouchDB or alternate database for the state. - enableHistoryDatabase: true - - pvtdataStore: - # the maximum db batch size for converting - # the ineligible missing data entries to eligible missing data entries - collElgProcMaxDbBatchSize: 5000 - # the minimum duration (in milliseconds) between writing - # two consecutive db batches for converting the ineligible missing data entries to eligible missing data entries - collElgProcDbBatchesInterval: 1000 - -############################################################################### -# -# Operations section -# -############################################################################### -operations: - # host and port for the operations server - listenAddress: 127.0.0.1:9443 - - # TLS configuration for the operations endpoint - tls: - # TLS enabled - enabled: false - - # path to PEM encoded server certificate for the operations server - cert: - file: - - # path to PEM encoded server key for the operations server - key: - file: - - # most operations service endpoints require client authentication when TLS - # is enabled. clientAuthRequired requires client certificate authentication - # at the TLS layer to access all resources. - clientAuthRequired: false - - # paths to PEM encoded ca certificates to trust for client authentication - clientRootCAs: - files: [] - -############################################################################### -# -# Metrics section -# -############################################################################### -metrics: - # metrics provider is one of statsd, prometheus, or disabled - provider: disabled - - # statsd configuration - statsd: - # network type: tcp or udp - network: udp - - # statsd server address - address: 127.0.0.1:8125 - - # the interval at which locally cached counters and gauges are pushed - # to statsd; timings are pushed immediately - writeInterval: 10s - - # prefix is prepended to all emitted statsd metrics - prefix: diff --git a/hyperledger-fabric/config/orderer.yaml b/hyperledger-fabric/config/orderer.yaml deleted file mode 100644 index 2608fced..00000000 --- a/hyperledger-fabric/config/orderer.yaml +++ /dev/null @@ -1,361 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - ---- -################################################################################ -# -# Orderer Configuration -# -# - This controls the type and configuration of the orderer. -# -################################################################################ -General: - # Listen address: The IP on which to bind to listen. - ListenAddress: 127.0.0.1 - - # Listen port: The port on which to bind to listen. - ListenPort: 7050 - - # TLS: TLS settings for the GRPC server. - TLS: - Enabled: false - # PrivateKey governs the file location of the private key of the TLS certificate. - PrivateKey: tls/server.key - # Certificate governs the file location of the server TLS certificate. - Certificate: tls/server.crt - RootCAs: - - tls/ca.crt - ClientAuthRequired: false - ClientRootCAs: - # Keepalive settings for the GRPC server. - Keepalive: - # ServerMinInterval is the minimum permitted time between client pings. - # If clients send pings more frequently, the server will - # disconnect them. - ServerMinInterval: 60s - # ServerInterval is the time between pings to clients. - ServerInterval: 7200s - # ServerTimeout is the duration the server waits for a response from - # a client before closing the connection. - ServerTimeout: 20s - # Cluster settings for ordering service nodes that communicate with other ordering service nodes - # such as Raft based ordering service. - Cluster: - # SendBufferSize is the maximum number of messages in the egress buffer. - # Consensus messages are dropped if the buffer is full, and transaction - # messages are waiting for space to be freed. - SendBufferSize: 10 - # ClientCertificate governs the file location of the client TLS certificate - # used to establish mutual TLS connections with other ordering service nodes. - ClientCertificate: - # ClientPrivateKey governs the file location of the private key of the client TLS certificate. - ClientPrivateKey: - # The below 4 properties should be either set together, or be unset together. - # If they are set, then the orderer node uses a separate listener for intra-cluster - # communication. If they are unset, then the general orderer listener is used. - # This is useful if you want to use a different TLS server certificates on the - # client-facing and the intra-cluster listeners. - - # ListenPort defines the port on which the cluster listens to connections. - ListenPort: - # ListenAddress defines the IP on which to listen to intra-cluster communication. - ListenAddress: - # ServerCertificate defines the file location of the server TLS certificate used for intra-cluster - # communication. - ServerCertificate: - # ServerPrivateKey defines the file location of the private key of the TLS certificate. - ServerPrivateKey: - - # Bootstrap method: The method by which to obtain the bootstrap block - # system channel is specified. The option can be one of: - # "file" - path to a file containing the genesis block or config block of system channel - # "none" - allows an orderer to start without a system channel configuration - BootstrapMethod: file - - # Bootstrap file: The file containing the bootstrap block to use when - # initializing the orderer system channel and BootstrapMethod is set to - # "file". The bootstrap file can be the genesis block, and it can also be - # a config block for late bootstrap of some consensus methods like Raft. - # Generate a genesis block by updating $FABRIC_CFG_PATH/configtx.yaml and - # using configtxgen command with "-outputBlock" option. - # Defaults to file "genesisblock" (in $FABRIC_CFG_PATH directory) if not specified. - BootstrapFile: - - # LocalMSPDir is where to find the private crypto material needed by the - # orderer. It is set relative here as a default for dev environments but - # should be changed to the real location in production. - LocalMSPDir: msp - - # LocalMSPID is the identity to register the local MSP material with the MSP - # manager. IMPORTANT: The local MSP ID of an orderer needs to match the MSP - # ID of one of the organizations defined in the orderer system channel's - # /Channel/Orderer configuration. The sample organization defined in the - # sample configuration provided has an MSP ID of "SampleOrg". - LocalMSPID: SampleOrg - - # Enable an HTTP service for Go "pprof" profiling as documented at: - # https://golang.org/pkg/net/http/pprof - Profile: - Enabled: false - Address: 0.0.0.0:6060 - - # BCCSP configures the blockchain crypto service providers. - BCCSP: - # Default specifies the preferred blockchain crypto service provider - # to use. If the preferred provider is not available, the software - # based provider ("SW") will be used. - # Valid providers are: - # - SW: a software based crypto provider - # - PKCS11: a CA hardware security module crypto provider. - Default: SW - - # SW configures the software based blockchain crypto provider. - SW: - # TODO: The default Hash and Security level needs refactoring to be - # fully configurable. Changing these defaults requires coordination - # SHA2 is hardcoded in several places, not only BCCSP - Hash: SHA2 - Security: 256 - # Location of key store. If this is unset, a location will be - # chosen using: 'LocalMSPDir'/keystore - FileKeyStore: - KeyStore: - - # Settings for the PKCS#11 crypto provider (i.e. when DEFAULT: PKCS11) - PKCS11: - # Location of the PKCS11 module library - Library: - # Token Label - Label: - # User PIN - Pin: - Hash: - Security: - FileKeyStore: - KeyStore: - - # Authentication contains configuration parameters related to authenticating - # client messages - Authentication: - # the acceptable difference between the current server time and the - # client's time as specified in a client request message - TimeWindow: 15m - - -################################################################################ -# -# SECTION: File Ledger -# -# - This section applies to the configuration of the file or json ledgers. -# -################################################################################ -FileLedger: - - # Location: The directory to store the blocks in. - # NOTE: If this is unset, a new temporary location will be chosen every time - # the orderer is restarted, using the prefix specified by Prefix. - Location: /var/hyperledger/production/orderer - - # The prefix to use when generating a ledger directory in temporary space. - # Otherwise, this value is ignored. - Prefix: hyperledger-fabric-ordererledger - -################################################################################ -# -# SECTION: Kafka -# -# - This section applies to the configuration of the Kafka-based orderer, and -# its interaction with the Kafka cluster. -# -################################################################################ -Kafka: - - # Retry: What do if a connection to the Kafka cluster cannot be established, - # or if a metadata request to the Kafka cluster needs to be repeated. - Retry: - # When a new channel is created, or when an existing channel is reloaded - # (in case of a just-restarted orderer), the orderer interacts with the - # Kafka cluster in the following ways: - # 1. It creates a Kafka producer (writer) for the Kafka partition that - # corresponds to the channel. - # 2. It uses that producer to post a no-op CONNECT message to that - # partition - # 3. It creates a Kafka consumer (reader) for that partition. - # If any of these steps fail, they will be re-attempted every - # for a total of , and then every - # for a total of until they succeed. - # Note that the orderer will be unable to write to or read from a - # channel until all of the steps above have been completed successfully. - ShortInterval: 5s - ShortTotal: 10m - LongInterval: 5m - LongTotal: 12h - # Affects the socket timeouts when waiting for an initial connection, a - # response, or a transmission. See Config.Net for more info: - # https://godoc.org/github.com/Shopify/sarama#Config - NetworkTimeouts: - DialTimeout: 10s - ReadTimeout: 10s - WriteTimeout: 10s - # Affects the metadata requests when the Kafka cluster is in the middle - # of a leader election.See Config.Metadata for more info: - # https://godoc.org/github.com/Shopify/sarama#Config - Metadata: - RetryBackoff: 250ms - RetryMax: 3 - # What to do if posting a message to the Kafka cluster fails. See - # Config.Producer for more info: - # https://godoc.org/github.com/Shopify/sarama#Config - Producer: - RetryBackoff: 100ms - RetryMax: 3 - # What to do if reading from the Kafka cluster fails. See - # Config.Consumer for more info: - # https://godoc.org/github.com/Shopify/sarama#Config - Consumer: - RetryBackoff: 2s - # Settings to use when creating Kafka topics. Only applies when - # Kafka.Version is v0.10.1.0 or higher - Topic: - # The number of Kafka brokers across which to replicate the topic - ReplicationFactor: 3 - # Verbose: Enable logging for interactions with the Kafka cluster. - Verbose: false - - # TLS: TLS settings for the orderer's connection to the Kafka cluster. - TLS: - - # Enabled: Use TLS when connecting to the Kafka cluster. - Enabled: false - - # PrivateKey: PEM-encoded private key the orderer will use for - # authentication. - PrivateKey: - # As an alternative to specifying the PrivateKey here, uncomment the - # following "File" key and specify the file name from which to load the - # value of PrivateKey. - #File: path/to/PrivateKey - - # Certificate: PEM-encoded signed public key certificate the orderer will - # use for authentication. - Certificate: - # As an alternative to specifying the Certificate here, uncomment the - # following "File" key and specify the file name from which to load the - # value of Certificate. - #File: path/to/Certificate - - # RootCAs: PEM-encoded trusted root certificates used to validate - # certificates from the Kafka cluster. - RootCAs: - # As an alternative to specifying the RootCAs here, uncomment the - # following "File" key and specify the file name from which to load the - # value of RootCAs. - #File: path/to/RootCAs - - # SASLPlain: Settings for using SASL/PLAIN authentication with Kafka brokers - SASLPlain: - # Enabled: Use SASL/PLAIN to authenticate with Kafka brokers - Enabled: false - # User: Required when Enabled is set to true - User: - # Password: Required when Enabled is set to true - Password: - - # Kafka protocol version used to communicate with the Kafka cluster brokers - # (defaults to 0.10.2.0 if not specified) - Version: - -################################################################################ -# -# Debug Configuration -# -# - This controls the debugging options for the orderer -# -################################################################################ -Debug: - - # BroadcastTraceDir when set will cause each request to the Broadcast service - # for this orderer to be written to a file in this directory - BroadcastTraceDir: - - # DeliverTraceDir when set will cause each request to the Deliver service - # for this orderer to be written to a file in this directory - DeliverTraceDir: - -################################################################################ -# -# Operations Configuration -# -# - This configures the operations server endpoint for the orderer -# -################################################################################ -Operations: - # host and port for the operations server - ListenAddress: 127.0.0.1:8443 - - # TLS configuration for the operations endpoint - TLS: - # TLS enabled - Enabled: false - - # Certificate is the location of the PEM encoded TLS certificate - Certificate: - - # PrivateKey points to the location of the PEM-encoded key - PrivateKey: - - # Most operations service endpoints require client authentication when TLS - # is enabled. ClientAuthRequired requires client certificate authentication - # at the TLS layer to access all resources. - ClientAuthRequired: false - - # Paths to PEM encoded ca certificates to trust for client authentication - ClientRootCAs: [] - -################################################################################ -# -# Metrics Configuration -# -# - This configures metrics collection for the orderer -# -################################################################################ -Metrics: - # The metrics provider is one of statsd, prometheus, or disabled - Provider: disabled - - # The statsd configuration - Statsd: - # network type: tcp or udp - Network: udp - - # the statsd server address - Address: 127.0.0.1:8125 - - # The interval at which locally cached counters and gauges are pushed - # to statsd; timings are pushed immediately - WriteInterval: 30s - - # The prefix is prepended to all emitted statsd metrics - Prefix: - -################################################################################ -# -# Consensus Configuration -# -# - This section contains config options for a consensus plugin. It is opaque -# to orderer, and completely up to consensus implementation to make use of. -# -################################################################################ -Consensus: - # The allowed key-value pairs here depend on consensus plugin. For etcd/raft, - # we use following options: - - # WALDir specifies the location at which Write Ahead Logs for etcd/raft are - # stored. Each channel will have its own subdir named after channel ID. - WALDir: /var/hyperledger/production/orderer/etcdraft/wal - - # SnapDir specifies the location at which snapshots for etcd/raft are - # stored. Each channel will have its own subdir named after channel ID. - SnapDir: /var/hyperledger/production/orderer/etcdraft/snapshot diff --git a/hyperledger-fabric/first-network/.env b/hyperledger-fabric/first-network/.env deleted file mode 100644 index a6665fed..00000000 --- a/hyperledger-fabric/first-network/.env +++ /dev/null @@ -1,2 +0,0 @@ -COMPOSE_PROJECT_NAME=net -IMAGE_TAG=latest diff --git a/hyperledger-fabric/first-network/.env.sh b/hyperledger-fabric/first-network/.env.sh deleted file mode 100644 index 7f410234..00000000 --- a/hyperledger-fabric/first-network/.env.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -export PATH=./bin:$PATH diff --git a/hyperledger-fabric/first-network/.gitignore b/hyperledger-fabric/first-network/.gitignore deleted file mode 100644 index 038650ef..00000000 --- a/hyperledger-fabric/first-network/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -/channel-artifacts/*.tx -/channel-artifacts/*.block -/crypto-config/* -/ledgers -/ledgers-backup -/channel-artifacts/*.json -/org3-artifacts/crypto-config/* -/connection-*.* \ No newline at end of file diff --git a/hyperledger-fabric/first-network/README.md b/hyperledger-fabric/first-network/README.md deleted file mode 100644 index 6d9e2543..00000000 --- a/hyperledger-fabric/first-network/README.md +++ /dev/null @@ -1,7 +0,0 @@ -## Build Your First Network (BYFN) - -The directions for using this are documented in the Hyperledger Fabric -["Build Your First Network"](http://hyperledger-fabric.readthedocs.io/en/latest/build_network.html) tutorial. - -*NOTE:* After navigating to the documentation, choose the documentation version that matches your version of Fabric - diff --git a/hyperledger-fabric/first-network/base/docker-compose-base.yaml b/hyperledger-fabric/first-network/base/docker-compose-base.yaml deleted file mode 100644 index 4c55ff96..00000000 --- a/hyperledger-fabric/first-network/base/docker-compose-base.yaml +++ /dev/null @@ -1,110 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -services: - - orderer.example.com: - container_name: orderer.example.com - extends: - file: peer-base.yaml - service: orderer-base - volumes: - - ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block - - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp - - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls - - orderer.example.com:/var/hyperledger/production/orderer - ports: - - 7050:7050 - - peer0.org1.example.com: - container_name: peer0.org1.example.com - extends: - file: peer-base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer0.org1.example.com - - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 - - CORE_PEER_LISTENADDRESS=0.0.0.0:7051 - - CORE_PEER_CHAINCODEADDRESS=peer0.org1.example.com:7052 - - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:8051 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051 - - CORE_PEER_LOCALMSPID=Org1MSP - volumes: - - /var/run/:/host/var/run/ - - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp - - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls - - peer0.org1.example.com:/var/hyperledger/production - ports: - - 7051:7051 - - peer1.org1.example.com: - container_name: peer1.org1.example.com - extends: - file: peer-base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer1.org1.example.com - - CORE_PEER_ADDRESS=peer1.org1.example.com:8051 - - CORE_PEER_LISTENADDRESS=0.0.0.0:8051 - - CORE_PEER_CHAINCODEADDRESS=peer1.org1.example.com:8052 - - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:8052 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:8051 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051 - - CORE_PEER_LOCALMSPID=Org1MSP - volumes: - - /var/run/:/host/var/run/ - - ../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/fabric/msp - - ../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls - - peer1.org1.example.com:/var/hyperledger/production - - ports: - - 8051:8051 - - peer0.org2.example.com: - container_name: peer0.org2.example.com - extends: - file: peer-base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer0.org2.example.com - - CORE_PEER_ADDRESS=peer0.org2.example.com:9051 - - CORE_PEER_LISTENADDRESS=0.0.0.0:9051 - - CORE_PEER_CHAINCODEADDRESS=peer0.org2.example.com:9052 - - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:9052 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:9051 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org2.example.com:10051 - - CORE_PEER_LOCALMSPID=Org2MSP - volumes: - - /var/run/:/host/var/run/ - - ../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/etc/hyperledger/fabric/msp - - ../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/etc/hyperledger/fabric/tls - - peer0.org2.example.com:/var/hyperledger/production - ports: - - 9051:9051 - - peer1.org2.example.com: - container_name: peer1.org2.example.com - extends: - file: peer-base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer1.org2.example.com - - CORE_PEER_ADDRESS=peer1.org2.example.com:10051 - - CORE_PEER_LISTENADDRESS=0.0.0.0:10051 - - CORE_PEER_CHAINCODEADDRESS=peer1.org2.example.com:10052 - - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:10052 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.example.com:10051 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:9051 - - CORE_PEER_LOCALMSPID=Org2MSP - volumes: - - /var/run/:/host/var/run/ - - ../crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp:/etc/hyperledger/fabric/msp - - ../crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls:/etc/hyperledger/fabric/tls - - peer1.org2.example.com:/var/hyperledger/production - ports: - - 10051:10051 diff --git a/hyperledger-fabric/first-network/base/peer-base.yaml b/hyperledger-fabric/first-network/base/peer-base.yaml deleted file mode 100644 index 11dc8a73..00000000 --- a/hyperledger-fabric/first-network/base/peer-base.yaml +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -services: - peer-base: - image: hyperledger/fabric-peer:$IMAGE_TAG - environment: - - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - # the following setting starts chaincode containers on the same - # bridge network as the peers - # https://docs.docker.com/compose/networking/ - - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_byfn - - FABRIC_LOGGING_SPEC=INFO - #- FABRIC_LOGGING_SPEC=DEBUG - - CORE_PEER_TLS_ENABLED=true - - CORE_PEER_GOSSIP_USELEADERELECTION=true - - CORE_PEER_GOSSIP_ORGLEADER=false - - CORE_PEER_PROFILE_ENABLED=true - - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt - - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key - - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt - # Allow more time for chaincode container to build on install. - - CORE_CHAINCODE_EXECUTETIMEOUT=300s - working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer - command: peer node start - - orderer-base: - image: hyperledger/fabric-orderer:$IMAGE_TAG - environment: - - FABRIC_LOGGING_SPEC=INFO - - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 - - ORDERER_GENERAL_BOOTSTRAPMETHOD=file - - ORDERER_GENERAL_BOOTSTRAPFILE=/var/hyperledger/orderer/orderer.genesis.block - - ORDERER_GENERAL_LOCALMSPID=OrdererMSP - - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp - # enabled TLS - - ORDERER_GENERAL_TLS_ENABLED=true - - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key - - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt - - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] - - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt - - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key - - ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] - working_dir: /opt/gopath/src/github.com/hyperledger/fabric - command: orderer - diff --git a/hyperledger-fabric/first-network/bin copy/configtxgen b/hyperledger-fabric/first-network/bin copy/configtxgen deleted file mode 100755 index 30bc6aab..00000000 Binary files a/hyperledger-fabric/first-network/bin copy/configtxgen and /dev/null differ diff --git a/hyperledger-fabric/first-network/bin copy/configtxlator b/hyperledger-fabric/first-network/bin copy/configtxlator deleted file mode 100755 index 97702e64..00000000 Binary files a/hyperledger-fabric/first-network/bin copy/configtxlator and /dev/null differ diff --git a/hyperledger-fabric/first-network/bin copy/cryptogen b/hyperledger-fabric/first-network/bin copy/cryptogen deleted file mode 100755 index bdaaeaad..00000000 Binary files a/hyperledger-fabric/first-network/bin copy/cryptogen and /dev/null differ diff --git a/hyperledger-fabric/first-network/bin copy/discover b/hyperledger-fabric/first-network/bin copy/discover deleted file mode 100755 index 57aa3ad1..00000000 Binary files a/hyperledger-fabric/first-network/bin copy/discover and /dev/null differ diff --git a/hyperledger-fabric/first-network/bin copy/fabric-ca-client b/hyperledger-fabric/first-network/bin copy/fabric-ca-client deleted file mode 100755 index 94db2eb3..00000000 Binary files a/hyperledger-fabric/first-network/bin copy/fabric-ca-client and /dev/null differ diff --git a/hyperledger-fabric/first-network/bin copy/fabric-ca-server b/hyperledger-fabric/first-network/bin copy/fabric-ca-server deleted file mode 100755 index 046b0a8f..00000000 Binary files a/hyperledger-fabric/first-network/bin copy/fabric-ca-server and /dev/null differ diff --git a/hyperledger-fabric/first-network/bin copy/idemixgen b/hyperledger-fabric/first-network/bin copy/idemixgen deleted file mode 100755 index bc054fd2..00000000 Binary files a/hyperledger-fabric/first-network/bin copy/idemixgen and /dev/null differ diff --git a/hyperledger-fabric/first-network/bin copy/orderer b/hyperledger-fabric/first-network/bin copy/orderer deleted file mode 100755 index 87aebc28..00000000 Binary files a/hyperledger-fabric/first-network/bin copy/orderer and /dev/null differ diff --git a/hyperledger-fabric/first-network/bin copy/peer b/hyperledger-fabric/first-network/bin copy/peer deleted file mode 100755 index 32f25e26..00000000 Binary files a/hyperledger-fabric/first-network/bin copy/peer and /dev/null differ diff --git a/hyperledger-fabric/first-network/bin/configtxgen b/hyperledger-fabric/first-network/bin/configtxgen deleted file mode 100755 index 30bc6aab..00000000 Binary files a/hyperledger-fabric/first-network/bin/configtxgen and /dev/null differ diff --git a/hyperledger-fabric/first-network/bin/configtxlator b/hyperledger-fabric/first-network/bin/configtxlator deleted file mode 100755 index 97702e64..00000000 Binary files a/hyperledger-fabric/first-network/bin/configtxlator and /dev/null differ diff --git a/hyperledger-fabric/first-network/bin/cryptogen b/hyperledger-fabric/first-network/bin/cryptogen deleted file mode 100755 index bdaaeaad..00000000 Binary files a/hyperledger-fabric/first-network/bin/cryptogen and /dev/null differ diff --git a/hyperledger-fabric/first-network/byfn.sh b/hyperledger-fabric/first-network/byfn.sh deleted file mode 100755 index b899211d..00000000 --- a/hyperledger-fabric/first-network/byfn.sh +++ /dev/null @@ -1,561 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp All Rights Reserved -# -# SPDX-License-Identifier: Apache-2.0 -# - -# This script will orchestrate a sample end-to-end execution of the Hyperledger -# Fabric network. -# -# The end-to-end verification provisions a sample Fabric network consisting of -# two organizations, each maintaining two peers, and a Raft ordering service. -# -# This verification makes use of two fundamental tools, which are necessary to -# create a functioning transactional network with digital signature validation -# and access control: -# -# * cryptogen - generates the x509 certificates used to identify and -# authenticate the various components in the network. -# * configtxgen - generates the requisite configuration artifacts for orderer -# bootstrap and channel creation. -# -# Each tool consumes a configuration yaml file, within which we specify the topology -# of our network (cryptogen) and the location of our certificates for various -# configuration operations (configtxgen). Once the tools have been successfully run, -# we are able to launch our network. More detail on the tools and the structure of -# the network will be provided later in this document. For now, let's get going... - -# prepending $PWD/../bin to PATH to ensure we are picking up the correct binaries -# this may be commented out to resolve installed version of tools if desired -export PATH=${PWD}/../bin:${PWD}:$PATH -export FABRIC_CFG_PATH=${PWD} -export VERBOSE=false -export NO_CHAINCODE=false - -# Print the usage message -function printHelp() { - echo "Usage: " - echo " byfn.sh [-c ] [-t ] [-d ] [-f ] [-s ] [-l ] [-o ] [-i ] [-a] [-n] [-v]" - echo " - one of 'up', 'down', 'restart', 'generate' or 'upgrade'" - echo " - 'up' - bring up the network with docker-compose up" - echo " - 'down' - clear the network with docker-compose down" - echo " - 'restart' - restart the network" - echo " - 'generate' - generate required certificates and genesis block" - echo " - 'upgrade' - upgrade the network from version 1.3.x to 1.4.0" - echo " -c - channel name to use (defaults to \"mychannel\")" - echo " -t - CLI timeout duration in seconds (defaults to 10)" - echo " -d - delay duration in seconds (defaults to 3)" - echo " -s - the database backend to use: goleveldb (default) or couchdb" - echo " -l - the programming language of the chaincode to deploy: go (default), javascript, or java" - echo " -p - the path of the chaincode to package and deploy" - echo " -m - the name of the chaincode to deploy" - echo " -e - the version of the chaincode to be deployed" - echo " -i - the tag to be used to launch the network (defaults to \"latest\")" - echo " -a - launch certificate authorities (no certificate authorities are launched by default)" - echo " -n - do not deploy chaincode (abstore chaincode is deployed by default)" - echo " -v - verbose mode" - echo " byfn.sh -h (print this message)" - echo - echo "Typically, one would first generate the required certificates and " - echo "genesis block, then bring up the network. e.g.:" - echo - echo " byfn.sh generate -c mychannel" - echo " byfn.sh up -c mychannel -s couchdb" - echo " byfn.sh up -c mychannel -s couchdb -i 1.4.0" - echo " byfn.sh up -l javascript" - echo " byfn.sh down -c mychannel" - echo " byfn.sh upgrade -c mychannel" - echo - echo "Taking all defaults:" - echo " byfn.sh generate" - echo " byfn.sh up" - echo " byfn.sh down" - echo - echo "Installing your own chaincode:" - echo " byfn.sh up -c mychannel -l javascript -cpath ../../fabric-samples/chaincode/mychaincode -cname mychaincode -version 1" - echo -} - -# Ask user for confirmation to proceed -function askProceed() { - read -p "Continue? [Y/n] " ans - case "$ans" in - y | Y | "") - echo "proceeding ..." - ;; - n | N) - echo "exiting..." - exit 1 - ;; - *) - echo "invalid response" - askProceed - ;; - esac -} - -# Obtain CONTAINER_IDS and remove them -# TODO Might want to make this optional - could clear other containers -function clearContainers() { - CONTAINER_IDS=$(docker ps -a | awk '($2 ~ /dev-peer.*/) {print $1}') - if [ -z "$CONTAINER_IDS" -o "$CONTAINER_IDS" == " " ]; then - echo "---- No containers available for deletion ----" - else - docker rm -f $CONTAINER_IDS - fi -} - -# Delete any images that were generated as a part of this setup -# specifically the following images are often left behind: -# TODO list generated image naming patterns -function removeUnwantedImages() { - DOCKER_IMAGE_IDS=$(docker images | awk '($1 ~ /dev-peer.*/) {print $3}') - if [ -z "$DOCKER_IMAGE_IDS" -o "$DOCKER_IMAGE_IDS" == " " ]; then - echo "---- No images available for deletion ----" - else - docker rmi -f $DOCKER_IMAGE_IDS - fi -} - -# Versions of fabric known not to work with this release of first-network -BLACKLISTED_VERSIONS="^1\." - -# Do some basic sanity checking to make sure that the appropriate versions of fabric -# binaries/images are available. In the future, additional checking for the presence -# of go or other items could be added. -function checkPrereqs() { - # Note, we check configtxlator externally because it does not require a config file, and peer in the - # docker image because of FAB-8551 that makes configtxlator return 'development version' in docker - LOCAL_VERSION=$(configtxlator version | sed -ne 's/ Version: //p') - DOCKER_IMAGE_VERSION=$(docker run --rm hyperledger/fabric-tools:$IMAGETAG peer version | sed -ne 's/ Version: //p' | head -1) - - echo "LOCAL_VERSION=$LOCAL_VERSION" - echo "DOCKER_IMAGE_VERSION=$DOCKER_IMAGE_VERSION" - - if [ "$LOCAL_VERSION" != "$DOCKER_IMAGE_VERSION" ]; then - echo "=================== WARNING ===================" - echo " Local fabric binaries and docker images are " - echo " out of sync. This may cause problems. " - echo "===============================================" - fi - - for UNSUPPORTED_VERSION in $BLACKLISTED_VERSIONS; do - echo "$LOCAL_VERSION" | grep -q $UNSUPPORTED_VERSION - if [ $? -eq 0 ]; then - echo "ERROR! Local Fabric binary version of $LOCAL_VERSION does not match this newer version of BYFN and is unsupported. Either move to a later version of Fabric or checkout an earlier version of fabric-samples." - exit 1 - fi - - echo "$DOCKER_IMAGE_VERSION" | grep -q $UNSUPPORTED_VERSION - if [ $? -eq 0 ]; then - echo "ERROR! Fabric Docker image version of $DOCKER_IMAGE_VERSION does not match this newer version of BYFN and is unsupported. Either move to a later version of Fabric or checkout an earlier version of fabric-samples." - exit 1 - fi - done -} - -# Generate the needed certificates, the genesis block and start the network. -function networkUp() { - checkPrereqs - # generate artifacts if they don't exist - if [ ! -d "crypto-config" ]; then - generateCerts - generateChannelArtifacts - fi - COMPOSE_FILES="-f ${COMPOSE_FILE} -f ${COMPOSE_FILE_RAFT2}" - if [ "${CERTIFICATE_AUTHORITIES}" == "true" ]; then - COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_CA}" - export BYFN_CA1_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org1.example.com/ca && ls *_sk) - export BYFN_CA2_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org2.example.com/ca && ls *_sk) - fi - if [ "${IF_COUCHDB}" == "couchdb" ]; then - COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_COUCH}" - fi - IMAGE_TAG=$IMAGETAG docker-compose ${COMPOSE_FILES} up -d 2>&1 - docker ps -a - if [ $? -ne 0 ]; then - echo "ERROR !!!! Unable to start network" - exit 1 - fi - - echo "Sleeping 15s to allow Raft cluster to complete booting" - sleep 15 - - if [[ "${NO_CHAINCODE}" != "true" ]] && [[ -z "${CC_SRC_PATH}" ]]; then - echo Vendoring Go dependencies ... - pushd ../chaincode/abstore/go - GO111MODULE=on go mod vendor - popd - echo Finished vendoring Go dependencies - fi - - # now run the end to end script - docker exec cli scripts/script.sh $CHANNEL_NAME $CLI_DELAY $CC_SRC_LANGUAGE $CLI_TIMEOUT $VERBOSE $NO_CHAINCODE $CC_SRC_PATH $CC_NAME $VERSION - if [ $? -ne 0 ]; then - echo "ERROR !!!! Test failed" - exit 1 - fi -} - -# Upgrade the network components which are at version 1.3.x to 1.4.x -# Stop the orderer and peers, backup the ledger for orderer and peers, cleanup chaincode containers and images -# and relaunch the orderer and peers with latest tag -function upgradeNetwork() { - if [[ "$IMAGETAG" == *"1.4"* ]] || [[ $IMAGETAG == "latest" ]]; then - docker inspect -f '{{.Config.Volumes}}' orderer.example.com | grep -q '/var/hyperledger/production/orderer' - if [ $? -ne 0 ]; then - echo "ERROR !!!! This network does not appear to start with fabric-samples >= v1.3.x?" - exit 1 - fi - - LEDGERS_BACKUP=./ledgers-backup - - # create ledger-backup directory - mkdir -p $LEDGERS_BACKUP - - export IMAGE_TAG=$IMAGETAG - COMPOSE_FILES="-f ${COMPOSE_FILE} -f ${COMPOSE_FILE_RAFT2}" - if [ "${CERTIFICATE_AUTHORITIES}" == "true" ]; then - COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_CA}" - export BYFN_CA1_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org1.example.com/ca && ls *_sk) - export BYFN_CA2_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org2.example.com/ca && ls *_sk) - fi - if [ "${IF_COUCHDB}" == "couchdb" ]; then - COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_COUCH}" - fi - - # removing the cli container - docker-compose $COMPOSE_FILES stop cli - docker-compose $COMPOSE_FILES up -d --no-deps cli - - echo "Upgrading orderer" - docker-compose $COMPOSE_FILES stop orderer.example.com - docker cp -a orderer.example.com:/var/hyperledger/production/orderer $LEDGERS_BACKUP/orderer.example.com - docker-compose $COMPOSE_FILES up -d --no-deps orderer.example.com - - for PEER in peer0.org1.example.com peer1.org1.example.com peer0.org2.example.com peer1.org2.example.com; do - echo "Upgrading peer $PEER" - - # Stop the peer and backup its ledger - docker-compose $COMPOSE_FILES stop $PEER - docker cp -a $PEER:/var/hyperledger/production $LEDGERS_BACKUP/$PEER/ - - # Remove any old containers and images for this peer - CC_CONTAINERS=$(docker ps | grep dev-$PEER | awk '{print $1}') - if [ -n "$CC_CONTAINERS" ]; then - docker rm -f $CC_CONTAINERS - fi - CC_IMAGES=$(docker images | grep dev-$PEER | awk '{print $1}') - if [ -n "$CC_IMAGES" ]; then - docker rmi -f $CC_IMAGES - fi - - # Start the peer again - docker-compose $COMPOSE_FILES up -d --no-deps $PEER - done - - docker exec cli scripts/upgrade_to_v14.sh $CHANNEL_NAME $CLI_DELAY $CC_SRC_LANGUAGE $CLI_TIMEOUT $VERBOSE - if [ $? -ne 0 ]; then - echo "ERROR !!!! Test failed" - exit 1 - fi - else - echo "ERROR !!!! Pass the v1.4.x image tag" - fi -} - -# Tear down running network -function networkDown() { - # stop org3 containers also in addition to org1 and org2, in case we were running sample to add org3 - docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_COUCH -f $COMPOSE_FILE_RAFT2 -f $COMPOSE_FILE_CA -f $COMPOSE_FILE_ORG3 down --volumes --remove-orphans - - # Don't remove the generated artifacts -- note, the ledgers are always removed - if [ "$MODE" != "restart" ]; then - # Bring down the network, deleting the volumes - #Delete any ledger backups - docker run -v $PWD:/tmp/first-network --rm hyperledger/fabric-tools:$IMAGETAG rm -Rf /tmp/first-network/ledgers-backup - #Cleanup the chaincode containers - clearContainers - #Cleanup images - removeUnwantedImages - # remove orderer block and other channel configuration transactions and certs - rm -rf channel-artifacts/*.block channel-artifacts/*.tx crypto-config ./org3-artifacts/crypto-config/ channel-artifacts/org3.json - fi -} - -# We will use the cryptogen tool to generate the cryptographic material (x509 certs) -# for our various network entities. The certificates are based on a standard PKI -# implementation where validation is achieved by reaching a common trust anchor. -# -# Cryptogen consumes a file - ``crypto-config.yaml`` - that contains the network -# topology and allows us to generate a library of certificates for both the -# Organizations and the components that belong to those Organizations. Each -# Organization is provisioned a unique root certificate (``ca-cert``), that binds -# specific components (peers and orderers) to that Org. Transactions and communications -# within Fabric are signed by an entity's private key (``keystore``), and then verified -# by means of a public key (``signcerts``). You will notice a "count" variable within -# this file. We use this to specify the number of peers per Organization; in our -# case it's two peers per Org. The rest of this template is extremely -# self-explanatory. -# -# After we run the tool, the certs will be parked in a folder titled ``crypto-config``. - -# Generates Org certs using cryptogen tool -function generateCerts() { - which cryptogen - if [ "$?" -ne 0 ]; then - echo "cryptogen tool not found. exiting" - exit 1 - fi - echo - echo "##########################################################" - echo "##### Generate certificates using cryptogen tool #########" - echo "##########################################################" - - if [ -d "crypto-config" ]; then - rm -Rf crypto-config - fi - set -x - cryptogen generate --config=./crypto-config.yaml - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate certificates..." - exit 1 - fi - echo - echo "Generate CCP files for Org1 and Org2" - ./ccp-generate.sh -} - -# The `configtxgen tool is used to create four artifacts: orderer **bootstrap -# block**, fabric **channel configuration transaction**, and two **anchor -# peer transactions** - one for each Peer Org. -# -# The orderer block is the genesis block for the ordering service, and the -# channel transaction file is broadcast to the orderer at channel creation -# time. The anchor peer transactions, as the name might suggest, specify each -# Org's anchor peer on this channel. -# -# Configtxgen consumes a file - ``configtx.yaml`` - that contains the definitions -# for the sample network. There are three members - one Orderer Org (``OrdererOrg``) -# and two Peer Orgs (``Org1`` & ``Org2``) each managing and maintaining two peer nodes. -# This file also specifies a consortium - ``SampleConsortium`` - consisting of our -# two Peer Orgs. Pay specific attention to the "Profiles" section at the top of -# this file. You will notice that we have two unique headers. One for the orderer genesis -# block - ``TwoOrgsOrdererGenesis`` - and one for our channel - ``TwoOrgsChannel``. -# These headers are important, as we will pass them in as arguments when we create -# our artifacts. This file also contains two additional specifications that are worth -# noting. Firstly, we specify the anchor peers for each Peer Org -# (``peer0.org1.example.com`` & ``peer0.org2.example.com``). Secondly, we point to -# the location of the MSP directory for each member, in turn allowing us to store the -# root certificates for each Org in the orderer genesis block. This is a critical -# concept. Now any network entity communicating with the ordering service can have -# its digital signature verified. -# -# This function will generate the crypto material and our four configuration -# artifacts, and subsequently output these files into the ``channel-artifacts`` -# folder. -# -# If you receive the following warning, it can be safely ignored: -# -# [bccsp] GetDefault -> WARN 001 Before using BCCSP, please call InitFactories(). Falling back to bootBCCSP. -# -# You can ignore the logs regarding intermediate certs, we are not using them in -# this crypto implementation. - -# Generate orderer genesis block, channel configuration transaction and -# anchor peer update transactions -function generateChannelArtifacts() { - which configtxgen - if [ "$?" -ne 0 ]; then - echo "configtxgen tool not found. exiting" - exit 1 - fi - - echo "##########################################################" - echo "######### Generating Orderer Genesis block ##############" - echo "##########################################################" - # Note: For some unknown reason (at least for now) the block file can't be - # named orderer.genesis.block or the orderer will fail to launch! - set -x - configtxgen -profile SampleMultiNodeEtcdRaft -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate orderer genesis block..." - exit 1 - fi - echo - echo "#################################################################" - echo "### Generating channel configuration transaction 'channel.tx' ###" - echo "#################################################################" - set -x - configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate channel configuration transaction..." - exit 1 - fi - - echo - echo "#################################################################" - echo "####### Generating anchor peer update for Org1MSP ##########" - echo "#################################################################" - set -x - configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate anchor peer update for Org1MSP..." - exit 1 - fi - - echo - echo "#################################################################" - echo "####### Generating anchor peer update for Org2MSP ##########" - echo "#################################################################" - set -x - configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate \ - ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate anchor peer update for Org2MSP..." - exit 1 - fi - echo -} - -# timeout duration - the duration the CLI should wait for a response from -# another container before giving up -CLI_TIMEOUT=10 -# default for delay between commands -CLI_DELAY=3 -# channel name defaults to "mychannel" -CHANNEL_NAME="mychannel" -# use this as the default docker-compose yaml definition -COMPOSE_FILE=docker-compose-cli.yaml -# -COMPOSE_FILE_COUCH=docker-compose-couch.yaml -# org3 docker compose file -COMPOSE_FILE_ORG3=docker-compose-org3.yaml -# two additional etcd/raft orderers -COMPOSE_FILE_RAFT2=docker-compose-etcdraft2.yaml -# certificate authorities compose file -COMPOSE_FILE_CA=docker-compose-ca.yaml -# -# use go as the default language for chaincode -CC_SRC_LANGUAGE=go -# default image tag -IMAGETAG="latest" -# Parse commandline args -if [ "$1" = "-m" ]; then # supports old usage, muscle memory is powerful! - shift -fi -MODE=$1 -shift -# Determine whether starting, stopping, restarting, generating or upgrading -if [ "$MODE" == "up" ]; then - EXPMODE="Starting" -elif [ "$MODE" == "down" ]; then - EXPMODE="Stopping" -elif [ "$MODE" == "restart" ]; then - EXPMODE="Restarting" -elif [ "$MODE" == "generate" ]; then - EXPMODE="Generating certs and genesis block" -elif [ "$MODE" == "upgrade" ]; then - EXPMODE="Upgrading the network" -else - printHelp - exit 1 -fi - -while getopts "h?c:t:d:s:l:i:p:m:e:anv" opt; do - case "$opt" in - h | \?) - printHelp - exit 0 - ;; - c) - CHANNEL_NAME=$OPTARG - echo "CHANNEL_NAME: "$CHANNEL_NAME - ;; - t) - CLI_TIMEOUT=$OPTARG - echo "CLI_TIMEOUT: "$CLI_TIMEOUT - ;; - d) - CLI_DELAY=$OPTARG - echo "CLI_DELAY: "$CLI_DELAY - ;; - s) - IF_COUCHDB=$OPTARG - echo "IF_COUCHDB: "$IF_COUCHDB - ;; - l) - CC_SRC_LANGUAGE=$OPTARG - echo "CC_SRC_LANGUAGE: "$CC_SRC_LANGUAGE - ;; - i) - IMAGETAG=$(go env GOARCH)"-"$OPTARG - echo "IMAGETAG: "$IMAGETAG - ;; - p) - CC_SRC_PATH=$OPTARG - echo "CC_SRC_PATH: "$CC_SRC_PATH - ;; - m) - CC_NAME=$OPTARG - echo "CC_NAME: "$CC_NAME - ;; - e) - VERSION=$OPTARG - echo "VERSION: "$VERSION - ;; - a) - CERTIFICATE_AUTHORITIES=true - echo "CERTIFICATE_AUTHORITIES: "$CERTIFICATE_AUTHORITIES - ;; - n) - NO_CHAINCODE=true - echo "NO_CHAINCODE: "$NO_CHAINCODE - ;; - v) - VERBOSE=true - echo "VERBOSE: "$VERBOSE - ;; - esac -done - - -# Announce what was requested - -if [ "${IF_COUCHDB}" == "couchdb" ]; then - echo - echo "${EXPMODE} for channel '${CHANNEL_NAME}' with CLI timeout of '${CLI_TIMEOUT}' seconds and CLI delay of '${CLI_DELAY}' seconds and using database '${IF_COUCHDB}'" -else - echo "${EXPMODE} for channel '${CHANNEL_NAME}' with CLI timeout of '${CLI_TIMEOUT}' seconds and CLI delay of '${CLI_DELAY}' seconds" -fi -# ask for confirmation to proceed -askProceed - -#Create the network using docker compose -if [ "${MODE}" == "up" ]; then - networkUp -elif [ "${MODE}" == "down" ]; then ## Clear the network - networkDown -elif [ "${MODE}" == "generate" ]; then ## Generate Artifacts - generateCerts - generateChannelArtifacts -elif [ "${MODE}" == "restart" ]; then ## Restart the network - networkDown - networkUp -elif [ "${MODE}" == "upgrade" ]; then ## Upgrade the network from version 1.2.x to 1.3.x - upgradeNetwork -else - printHelp - exit 1 -fi diff --git a/hyperledger-fabric/first-network/ccp-generate.sh b/hyperledger-fabric/first-network/ccp-generate.sh deleted file mode 100755 index 11d37155..00000000 --- a/hyperledger-fabric/first-network/ccp-generate.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash - -function one_line_pem { - echo "`awk 'NF {sub(/\\n/, ""); printf "%s\\\\\\\n",$0;}' $1`" -} - -function json_ccp { - local PP=$(one_line_pem $5) - local CP=$(one_line_pem $6) - sed -e "s/\${ORG}/$1/" \ - -e "s/\${P0PORT}/$2/" \ - -e "s/\${P1PORT}/$3/" \ - -e "s/\${CAPORT}/$4/" \ - -e "s#\${PEERPEM}#$PP#" \ - -e "s#\${CAPEM}#$CP#" \ - ccp-template.json -} - -function yaml_ccp { - local PP=$(one_line_pem $5) - local CP=$(one_line_pem $6) - sed -e "s/\${ORG}/$1/" \ - -e "s/\${P0PORT}/$2/" \ - -e "s/\${P1PORT}/$3/" \ - -e "s/\${CAPORT}/$4/" \ - -e "s#\${PEERPEM}#$PP#" \ - -e "s#\${CAPEM}#$CP#" \ - ccp-template.yaml | sed -e $'s/\\\\n/\\\n /g' -} - -ORG=1 -P0PORT=7051 -P1PORT=8051 -CAPORT=7054 -PEERPEM=crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem -CAPEM=crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem - -echo "$(json_ccp $ORG $P0PORT $P1PORT $CAPORT $PEERPEM $CAPEM)" > connection-org1.json -echo "$(yaml_ccp $ORG $P0PORT $P1PORT $CAPORT $PEERPEM $CAPEM)" > connection-org1.yaml - -ORG=2 -P0PORT=9051 -P1PORT=10051 -CAPORT=8054 -PEERPEM=crypto-config/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem -CAPEM=crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem - -echo "$(json_ccp $ORG $P0PORT $P1PORT $CAPORT $PEERPEM $CAPEM)" > connection-org2.json -echo "$(yaml_ccp $ORG $P0PORT $P1PORT $CAPORT $PEERPEM $CAPEM)" > connection-org2.yaml diff --git a/hyperledger-fabric/first-network/ccp-template.json b/hyperledger-fabric/first-network/ccp-template.json deleted file mode 100644 index 243f0ccd..00000000 --- a/hyperledger-fabric/first-network/ccp-template.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "first-network-org${ORG}", - "version": "1.0.0", - "client": { - "organization": "Org${ORG}", - "connection": { - "timeout": { - "peer": { - "endorser": "300" - } - } - } - }, - "organizations": { - "Org${ORG}": { - "mspid": "Org${ORG}MSP", - "peers": [ - "peer0.org${ORG}.example.com", - "peer1.org${ORG}.example.com" - ], - "certificateAuthorities": [ - "ca.org${ORG}.example.com" - ] - } - }, - "peers": { - "peer0.org${ORG}.example.com": { - "url": "grpcs://localhost:${P0PORT}", - "tlsCACerts": { - "pem": "${PEERPEM}" - }, - "grpcOptions": { - "ssl-target-name-override": "peer0.org${ORG}.example.com", - "hostnameOverride": "peer0.org${ORG}.example.com" - } - }, - "peer1.org${ORG}.example.com": { - "url": "grpcs://localhost:${P1PORT}", - "tlsCACerts": { - "pem": "${PEERPEM}" - }, - "grpcOptions": { - "ssl-target-name-override": "peer1.org${ORG}.example.com", - "hostnameOverride": "peer1.org${ORG}.example.com" - } - } - }, - "certificateAuthorities": { - "ca.org${ORG}.example.com": { - "url": "https://localhost:${CAPORT}", - "caName": "ca-org${ORG}", - "tlsCACerts": { - "pem": "${CAPEM}" - }, - "httpOptions": { - "verify": false - } - } - } -} diff --git a/hyperledger-fabric/first-network/ccp-template.yaml b/hyperledger-fabric/first-network/ccp-template.yaml deleted file mode 100644 index 35333d99..00000000 --- a/hyperledger-fabric/first-network/ccp-template.yaml +++ /dev/null @@ -1,43 +0,0 @@ ---- -name: first-network-org${ORG} -version: 1.0.0 -client: - organization: Org${ORG} - connection: - timeout: - peer: - endorser: '300' -organizations: - Org${ORG}: - mspid: Org${ORG}MSP - peers: - - peer0.org${ORG}.example.com - - peer1.org${ORG}.example.com - certificateAuthorities: - - ca.org${ORG}.example.com -peers: - peer0.org${ORG}.example.com: - url: grpcs://localhost:${P0PORT} - tlsCACerts: - pem: | - ${PEERPEM} - grpcOptions: - ssl-target-name-override: peer0.org${ORG}.example.com - hostnameOverride: peer0.org${ORG}.example.com - peer1.org${ORG}.example.com: - url: grpcs://localhost:${P1PORT} - tlsCACerts: - pem: | - ${PEERPEM} - grpcOptions: - ssl-target-name-override: peer1.org${ORG}.example.com - hostnameOverride: peer1.org${ORG}.example.com -certificateAuthorities: - ca.org${ORG}.example.com: - url: https://localhost:${CAPORT} - caName: ca-org${ORG} - tlsCACerts: - pem: | - ${CAPEM} - httpOptions: - verify: false diff --git a/hyperledger-fabric/first-network/channel-artifacts/.gitkeep b/hyperledger-fabric/first-network/channel-artifacts/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/hyperledger-fabric/first-network/configtx.yaml b/hyperledger-fabric/first-network/configtx.yaml deleted file mode 100644 index c81f2b02..00000000 --- a/hyperledger-fabric/first-network/configtx.yaml +++ /dev/null @@ -1,363 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - ---- -################################################################################ -# -# Section: Organizations -# -# - This section defines the different organizational identities which will -# be referenced later in the configuration. -# -################################################################################ -Organizations: - - # SampleOrg defines an MSP using the sampleconfig. It should never be used - # in production but may be used as a template for other definitions - - &OrdererOrg - # DefaultOrg defines the organization which is used in the sampleconfig - # of the fabric.git development environment - Name: OrdererOrg - - # ID to load the MSP definition as - ID: OrdererMSP - - # MSPDir is the filesystem path which contains the MSP configuration - MSPDir: crypto-config/ordererOrganizations/example.com/msp - - # Policies defines the set of policies at this level of the config tree - # For organization policies, their canonical path is usually - # /Channel/// - Policies: - Readers: - Type: Signature - Rule: "OR('OrdererMSP.member')" - Writers: - Type: Signature - Rule: "OR('OrdererMSP.member')" - Admins: - Type: Signature - Rule: "OR('OrdererMSP.admin')" - - OrdererEndpoints: - - orderer.example.com:7050 - - - &Org1 - # DefaultOrg defines the organization which is used in the sampleconfig - # of the fabric.git development environment - Name: Org1MSP - - # ID to load the MSP definition as - ID: Org1MSP - - MSPDir: crypto-config/peerOrganizations/org1.example.com/msp - - # Policies defines the set of policies at this level of the config tree - # For organization policies, their canonical path is usually - # /Channel/// - Policies: - Readers: - Type: Signature - Rule: "OR('Org1MSP.admin', 'Org1MSP.peer', 'Org1MSP.client')" - Writers: - Type: Signature - Rule: "OR('Org1MSP.admin', 'Org1MSP.client')" - Admins: - Type: Signature - Rule: "OR('Org1MSP.admin')" - Endorsement: - Type: Signature - Rule: "OR('Org1MSP.peer')" - - # leave this flag set to true. - AnchorPeers: - # AnchorPeers defines the location of peers which can be used - # for cross org gossip communication. Note, this value is only - # encoded in the genesis block in the Application section context - - Host: peer0.org1.example.com - Port: 7051 - - - &Org2 - # DefaultOrg defines the organization which is used in the sampleconfig - # of the fabric.git development environment - Name: Org2MSP - - # ID to load the MSP definition as - ID: Org2MSP - - MSPDir: crypto-config/peerOrganizations/org2.example.com/msp - - # Policies defines the set of policies at this level of the config tree - # For organization policies, their canonical path is usually - # /Channel/// - Policies: - Readers: - Type: Signature - Rule: "OR('Org2MSP.admin', 'Org2MSP.peer', 'Org2MSP.client')" - Writers: - Type: Signature - Rule: "OR('Org2MSP.admin', 'Org2MSP.client')" - Admins: - Type: Signature - Rule: "OR('Org2MSP.admin')" - Endorsement: - Type: Signature - Rule: "OR('Org2MSP.peer')" - - AnchorPeers: - # AnchorPeers defines the location of peers which can be used - # for cross org gossip communication. Note, this value is only - # encoded in the genesis block in the Application section context - - Host: peer0.org2.example.com - Port: 9051 - -################################################################################ -# -# SECTION: Capabilities -# -# - This section defines the capabilities of fabric network. This is a new -# concept as of v1.1.0 and should not be utilized in mixed networks with -# v1.0.x peers and orderers. Capabilities define features which must be -# present in a fabric binary for that binary to safely participate in the -# fabric network. For instance, if a new MSP type is added, newer binaries -# might recognize and validate the signatures from this type, while older -# binaries without this support would be unable to validate those -# transactions. This could lead to different versions of the fabric binaries -# having different world states. Instead, defining a capability for a channel -# informs those binaries without this capability that they must cease -# processing transactions until they have been upgraded. For v1.0.x if any -# capabilities are defined (including a map with all capabilities turned off) -# then the v1.0.x peer will deliberately crash. -# -################################################################################ -Capabilities: - # Channel capabilities apply to both the orderers and the peers and must be - # supported by both. - # Set the value of the capability to true to require it. - Channel: &ChannelCapabilities - # V2_0 capability ensures that orderers and peers behave according - # to v2.0 channel capabilities. Orderers and peers from - # prior releases would behave in an incompatible way, and are therefore - # not able to participate in channels at v2.0 capability. - # Prior to enabling V2.0 channel capabilities, ensure that all - # orderers and peers on a channel are at v2.0.0 or later. - V2_0: true - - # Orderer capabilities apply only to the orderers, and may be safely - # used with prior release peers. - # Set the value of the capability to true to require it. - Orderer: &OrdererCapabilities - # V2_0 orderer capability ensures that orderers behave according - # to v2.0 orderer capabilities. Orderers from - # prior releases would behave in an incompatible way, and are therefore - # not able to participate in channels at v2.0 orderer capability. - # Prior to enabling V2.0 orderer capabilities, ensure that all - # orderers on channel are at v2.0.0 or later. - V2_0: true - - # Application capabilities apply only to the peer network, and may be safely - # used with prior release orderers. - # Set the value of the capability to true to require it. - Application: &ApplicationCapabilities - # V2_0 application capability ensures that peers behave according - # to v2.0 application capabilities. Peers from - # prior releases would behave in an incompatible way, and are therefore - # not able to participate in channels at v2.0 application capability. - # Prior to enabling V2.0 application capabilities, ensure that all - # peers on channel are at v2.0.0 or later. - V2_0: true - -################################################################################ -# -# SECTION: Application -# -# - This section defines the values to encode into a config transaction or -# genesis block for application related parameters -# -################################################################################ -Application: &ApplicationDefaults - - # Organizations is the list of orgs which are defined as participants on - # the application side of the network - Organizations: - - # Policies defines the set of policies at this level of the config tree - # For Application policies, their canonical path is - # /Channel/Application/ - Policies: - Readers: - Type: ImplicitMeta - Rule: "ANY Readers" - Writers: - Type: ImplicitMeta - Rule: "ANY Writers" - Admins: - Type: ImplicitMeta - Rule: "MAJORITY Admins" - LifecycleEndorsement: - Type: ImplicitMeta - Rule: "MAJORITY Endorsement" - Endorsement: - Type: ImplicitMeta - Rule: "MAJORITY Endorsement" - - Capabilities: - <<: *ApplicationCapabilities -################################################################################ -# -# SECTION: Orderer -# -# - This section defines the values to encode into a config transaction or -# genesis block for orderer related parameters -# -################################################################################ -Orderer: &OrdererDefaults - - # Orderer Type: The orderer implementation to start - OrdererType: etcdraft - - # Batch Timeout: The amount of time to wait before creating a batch - BatchTimeout: 2s - - # Batch Size: Controls the number of messages batched into a block - BatchSize: - - # Max Message Count: The maximum number of messages to permit in a batch - MaxMessageCount: 10 - - # Absolute Max Bytes: The absolute maximum number of bytes allowed for - # the serialized messages in a batch. - AbsoluteMaxBytes: 99 MB - - # Preferred Max Bytes: The preferred maximum number of bytes allowed for - # the serialized messages in a batch. A message larger than the preferred - # max bytes will result in a batch larger than preferred max bytes. - PreferredMaxBytes: 512 KB - - # Organizations is the list of orgs which are defined as participants on - # the orderer side of the network - Organizations: - - # Policies defines the set of policies at this level of the config tree - # For Orderer policies, their canonical path is - # /Channel/Orderer/ - Policies: - Readers: - Type: ImplicitMeta - Rule: "ANY Readers" - Writers: - Type: ImplicitMeta - Rule: "ANY Writers" - Admins: - Type: ImplicitMeta - Rule: "MAJORITY Admins" - # BlockValidation specifies what signatures must be included in the block - # from the orderer for the peer to validate it. - BlockValidation: - Type: ImplicitMeta - Rule: "ANY Writers" - -################################################################################ -# -# CHANNEL -# -# This section defines the values to encode into a config transaction or -# genesis block for channel related parameters. -# -################################################################################ -Channel: &ChannelDefaults - # Policies defines the set of policies at this level of the config tree - # For Channel policies, their canonical path is - # /Channel/ - Policies: - # Who may invoke the 'Deliver' API - Readers: - Type: ImplicitMeta - Rule: "ANY Readers" - # Who may invoke the 'Broadcast' API - Writers: - Type: ImplicitMeta - Rule: "ANY Writers" - # By default, who may modify elements at this config level - Admins: - Type: ImplicitMeta - Rule: "MAJORITY Admins" - - # Capabilities describes the channel level capabilities, see the - # dedicated Capabilities section elsewhere in this file for a full - # description - Capabilities: - <<: *ChannelCapabilities - -################################################################################ -# -# Profile -# -# - Different configuration profiles may be encoded here to be specified -# as parameters to the configtxgen tool -# -################################################################################ -Profiles: - - TwoOrgsChannel: - Consortium: SampleConsortium - <<: *ChannelDefaults - Application: - <<: *ApplicationDefaults - Organizations: - - *Org1 - - *Org2 - Capabilities: - <<: *ApplicationCapabilities - - SampleMultiNodeEtcdRaft: - <<: *ChannelDefaults - Capabilities: - <<: *ChannelCapabilities - Orderer: - <<: *OrdererDefaults - OrdererType: etcdraft - EtcdRaft: - Consenters: - - Host: orderer.example.com - Port: 7050 - ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt - ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt - - Host: orderer2.example.com - Port: 8050 - ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/server.crt - ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/server.crt - - Host: orderer3.example.com - Port: 9050 - ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/server.crt - ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/server.crt - - Host: orderer4.example.com - Port: 10050 - ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/tls/server.crt - ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/tls/server.crt - - Host: orderer5.example.com - Port: 11050 - ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/tls/server.crt - ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/tls/server.crt - Addresses: - - orderer.example.com:7050 - - orderer2.example.com:8050 - - orderer3.example.com:9050 - - orderer4.example.com:10050 - - orderer5.example.com:11050 - - Organizations: - - *OrdererOrg - Capabilities: - <<: *OrdererCapabilities - Application: - <<: *ApplicationDefaults - Organizations: - - <<: *OrdererOrg - Consortiums: - SampleConsortium: - Organizations: - - *Org1 - - *Org2 diff --git a/hyperledger-fabric/first-network/crypto-config.yaml b/hyperledger-fabric/first-network/crypto-config.yaml deleted file mode 100644 index a38299b5..00000000 --- a/hyperledger-fabric/first-network/crypto-config.yaml +++ /dev/null @@ -1,88 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -# --------------------------------------------------------------------------- -# "OrdererOrgs" - Definition of organizations managing orderer nodes -# --------------------------------------------------------------------------- -OrdererOrgs: - # --------------------------------------------------------------------------- - # Orderer - # --------------------------------------------------------------------------- - - Name: Orderer - Domain: example.com - # --------------------------------------------------------------------------- - # "Specs" - See PeerOrgs below for complete description - # --------------------------------------------------------------------------- - Specs: - - Hostname: orderer - - Hostname: orderer2 - - Hostname: orderer3 - - Hostname: orderer4 - - Hostname: orderer5 - -# --------------------------------------------------------------------------- -# "PeerOrgs" - Definition of organizations managing peer nodes -# --------------------------------------------------------------------------- -PeerOrgs: - # --------------------------------------------------------------------------- - # Org1 - # --------------------------------------------------------------------------- - - Name: Org1 - Domain: org1.example.com - EnableNodeOUs: true - # --------------------------------------------------------------------------- - # "Specs" - # --------------------------------------------------------------------------- - # Uncomment this section to enable the explicit definition of hosts in your - # configuration. Most users will want to use Template, below - # - # Specs is an array of Spec entries. Each Spec entry consists of two fields: - # - Hostname: (Required) The desired hostname, sans the domain. - # - CommonName: (Optional) Specifies the template or explicit override for - # the CN. By default, this is the template: - # - # "{{.Hostname}}.{{.Domain}}" - # - # which obtains its values from the Spec.Hostname and - # Org.Domain, respectively. - # --------------------------------------------------------------------------- - # Specs: - # - Hostname: foo # implicitly "foo.org1.example.com" - # CommonName: foo27.org5.example.com # overrides Hostname-based FQDN set above - # - Hostname: bar - # - Hostname: baz - # --------------------------------------------------------------------------- - # "Template" - # --------------------------------------------------------------------------- - # Allows for the definition of 1 or more hosts that are created sequentially - # from a template. By default, this looks like "peer%d" from 0 to Count-1. - # You may override the number of nodes (Count), the starting index (Start) - # or the template used to construct the name (Hostname). - # - # Note: Template and Specs are not mutually exclusive. You may define both - # sections and the aggregate nodes will be created for you. Take care with - # name collisions - # --------------------------------------------------------------------------- - Template: - Count: 2 - # Start: 5 - # Hostname: {{.Prefix}}{{.Index}} # default - # --------------------------------------------------------------------------- - # "Users" - # --------------------------------------------------------------------------- - # Count: The number of user accounts _in addition_ to Admin - # --------------------------------------------------------------------------- - Users: - Count: 1 - # --------------------------------------------------------------------------- - # Org2: See "Org1" for full specification - # --------------------------------------------------------------------------- - - Name: Org2 - Domain: org2.example.com - EnableNodeOUs: true - Template: - Count: 2 - Users: - Count: 1 diff --git a/hyperledger-fabric/first-network/docker-compose-ca.yaml b/hyperledger-fabric/first-network/docker-compose-ca.yaml deleted file mode 100644 index 7f019606..00000000 --- a/hyperledger-fabric/first-network/docker-compose-ca.yaml +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -networks: - byfn: - -services: - ca0: - image: hyperledger/fabric-ca:$IMAGE_TAG - environment: - - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - - FABRIC_CA_SERVER_CA_NAME=ca-org1 - - FABRIC_CA_SERVER_TLS_ENABLED=true - - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem - - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/${BYFN_CA1_PRIVATE_KEY} - - FABRIC_CA_SERVER_PORT=7054 - ports: - - "7054:7054" - command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/${BYFN_CA1_PRIVATE_KEY} -b admin:adminpw -d' - volumes: - - ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config - container_name: ca_peerOrg1 - networks: - - byfn - - ca1: - image: hyperledger/fabric-ca:$IMAGE_TAG - environment: - - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - - FABRIC_CA_SERVER_CA_NAME=ca-org2 - - FABRIC_CA_SERVER_TLS_ENABLED=true - - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem - - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/${BYFN_CA2_PRIVATE_KEY} - - FABRIC_CA_SERVER_PORT=8054 - ports: - - "8054:8054" - command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/${BYFN_CA2_PRIVATE_KEY} -b admin:adminpw -d' - volumes: - - ./crypto-config/peerOrganizations/org2.example.com/ca/:/etc/hyperledger/fabric-ca-server-config - container_name: ca_peerOrg2 - networks: - - byfn \ No newline at end of file diff --git a/hyperledger-fabric/first-network/docker-compose-cli.yaml b/hyperledger-fabric/first-network/docker-compose-cli.yaml deleted file mode 100644 index 7ad11f01..00000000 --- a/hyperledger-fabric/first-network/docker-compose-cli.yaml +++ /dev/null @@ -1,93 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -volumes: - orderer.example.com: - peer0.org1.example.com: - peer1.org1.example.com: - peer0.org2.example.com: - peer1.org2.example.com: - -networks: - byfn: - -services: - - orderer.example.com: - extends: - file: base/docker-compose-base.yaml - service: orderer.example.com - container_name: orderer.example.com - networks: - - byfn - - peer0.org1.example.com: - container_name: peer0.org1.example.com - extends: - file: base/docker-compose-base.yaml - service: peer0.org1.example.com - networks: - - byfn - - peer1.org1.example.com: - container_name: peer1.org1.example.com - extends: - file: base/docker-compose-base.yaml - service: peer1.org1.example.com - networks: - - byfn - - peer0.org2.example.com: - container_name: peer0.org2.example.com - extends: - file: base/docker-compose-base.yaml - service: peer0.org2.example.com - networks: - - byfn - - peer1.org2.example.com: - container_name: peer1.org2.example.com - extends: - file: base/docker-compose-base.yaml - service: peer1.org2.example.com - networks: - - byfn - - cli: - container_name: cli - image: hyperledger/fabric-tools:$IMAGE_TAG - tty: true - stdin_open: true - environment: - - GOPATH=/opt/gopath - - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - #- FABRIC_LOGGING_SPEC=DEBUG - - FABRIC_LOGGING_SPEC=INFO - - CORE_PEER_ID=cli - - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 - - CORE_PEER_LOCALMSPID=Org1MSP - - CORE_PEER_TLS_ENABLED=true - - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt - - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key - - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt - - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp - working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer - command: /bin/bash - volumes: - - /var/run/:/host/var/run/ - - ./../chaincode/:/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode - - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ - - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/ - - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts - depends_on: - - orderer.example.com - - peer0.org1.example.com - - peer1.org1.example.com - - peer0.org2.example.com - - peer1.org2.example.com - networks: - - byfn diff --git a/hyperledger-fabric/first-network/docker-compose-couch.yaml b/hyperledger-fabric/first-network/docker-compose-couch.yaml deleted file mode 100644 index d7a2bdc0..00000000 --- a/hyperledger-fabric/first-network/docker-compose-couch.yaml +++ /dev/null @@ -1,118 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -networks: - byfn: - -services: - couchdb0: - container_name: couchdb0 - image: couchdb:2.3 - # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password - # for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode. - environment: - - COUCHDB_USER= - - COUCHDB_PASSWORD= - # Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service, - # for example map it to utilize Fauxton User Interface in dev environments. - ports: - - "5984:5984" - networks: - - byfn - - peer0.org1.example.com: - environment: - - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984 - # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD - # provide the credentials for ledger to connect to CouchDB. The username and password must - # match the username and password set for the associated CouchDB. - - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= - - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= - depends_on: - - couchdb0 - - couchdb1: - container_name: couchdb1 - image: couchdb:2.3 - # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password - # for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode. - environment: - - COUCHDB_USER= - - COUCHDB_PASSWORD= - # Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service, - # for example map it to utilize Fauxton User Interface in dev environments. - ports: - - "6984:5984" - networks: - - byfn - - peer1.org1.example.com: - environment: - - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb1:5984 - # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD - # provide the credentials for ledger to connect to CouchDB. The username and password must - # match the username and password set for the associated CouchDB. - - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= - - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= - depends_on: - - couchdb1 - - couchdb2: - container_name: couchdb2 - image: couchdb:2.3 - # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password - # for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode. - environment: - - COUCHDB_USER= - - COUCHDB_PASSWORD= - # Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service, - # for example map it to utilize Fauxton User Interface in dev environments. - ports: - - "7984:5984" - networks: - - byfn - - peer0.org2.example.com: - environment: - - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb2:5984 - # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD - # provide the credentials for ledger to connect to CouchDB. The username and password must - # match the username and password set for the associated CouchDB. - - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= - - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= - depends_on: - - couchdb2 - - couchdb3: - container_name: couchdb3 - image: couchdb:2.3 - # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password - # for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode. - environment: - - COUCHDB_USER= - - COUCHDB_PASSWORD= - # Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service, - # for example map it to utilize Fauxton User Interface in dev environments. - ports: - - "8984:5984" - networks: - - byfn - - peer1.org2.example.com: - environment: - - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb3:5984 - # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD - # provide the credentials for ledger to connect to CouchDB. The username and password must - # match the username and password set for the associated CouchDB. - - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= - - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= - depends_on: - - couchdb3 diff --git a/hyperledger-fabric/first-network/docker-compose-e2e-template.yaml b/hyperledger-fabric/first-network/docker-compose-e2e-template.yaml deleted file mode 100644 index bd874028..00000000 --- a/hyperledger-fabric/first-network/docker-compose-e2e-template.yaml +++ /dev/null @@ -1,90 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -volumes: - orderer.example.com: - peer0.org1.example.com: - peer1.org1.example.com: - peer0.org2.example.com: - peer1.org2.example.com: - -networks: - byfn: -services: - ca0: - image: hyperledger/fabric-ca:$IMAGE_TAG - environment: - - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - - FABRIC_CA_SERVER_CA_NAME=ca-org1 - - FABRIC_CA_SERVER_TLS_ENABLED=true - - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem - - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/CA1_PRIVATE_KEY - ports: - - "7054:7054" - command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/CA1_PRIVATE_KEY -b admin:adminpw -d' - volumes: - - ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config - container_name: ca_peerOrg1 - networks: - - byfn - - ca1: - image: hyperledger/fabric-ca:$IMAGE_TAG - environment: - - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - - FABRIC_CA_SERVER_CA_NAME=ca-org2 - - FABRIC_CA_SERVER_TLS_ENABLED=true - - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem - - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/CA2_PRIVATE_KEY - ports: - - "8054:7054" - command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/CA2_PRIVATE_KEY -b admin:adminpw -d' - volumes: - - ./crypto-config/peerOrganizations/org2.example.com/ca/:/etc/hyperledger/fabric-ca-server-config - container_name: ca_peerOrg2 - networks: - - byfn - - orderer.example.com: - extends: - file: base/docker-compose-base.yaml - service: orderer.example.com - container_name: orderer.example.com - networks: - - byfn - - peer0.org1.example.com: - container_name: peer0.org1.example.com - extends: - file: base/docker-compose-base.yaml - service: peer0.org1.example.com - networks: - - byfn - - peer1.org1.example.com: - container_name: peer1.org1.example.com - extends: - file: base/docker-compose-base.yaml - service: peer1.org1.example.com - networks: - - byfn - - peer0.org2.example.com: - container_name: peer0.org2.example.com - extends: - file: base/docker-compose-base.yaml - service: peer0.org2.example.com - networks: - - byfn - - peer1.org2.example.com: - container_name: peer1.org2.example.com - extends: - file: base/docker-compose-base.yaml - service: peer1.org2.example.com - networks: - - byfn diff --git a/hyperledger-fabric/first-network/docker-compose-etcdraft2.yaml b/hyperledger-fabric/first-network/docker-compose-etcdraft2.yaml deleted file mode 100644 index 042d884a..00000000 --- a/hyperledger-fabric/first-network/docker-compose-etcdraft2.yaml +++ /dev/null @@ -1,85 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -volumes: - orderer2.example.com: - orderer3.example.com: - orderer4.example.com: - orderer5.example.com: - -networks: - byfn: - -services: - - orderer2.example.com: - extends: - file: base/peer-base.yaml - service: orderer-base - environment: - - ORDERER_GENERAL_LISTENPORT=8050 - container_name: orderer2.example.com - networks: - - byfn - volumes: - - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/msp:/var/hyperledger/orderer/msp - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/:/var/hyperledger/orderer/tls - - orderer2.example.com:/var/hyperledger/production/orderer - ports: - - 8050:8050 - - orderer3.example.com: - extends: - file: base/peer-base.yaml - service: orderer-base - environment: - - ORDERER_GENERAL_LISTENPORT=9050 - container_name: orderer3.example.com - networks: - - byfn - volumes: - - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/msp:/var/hyperledger/orderer/msp - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/:/var/hyperledger/orderer/tls - - orderer3.example.com:/var/hyperledger/production/orderer - ports: - - 9050:9050 - - orderer4.example.com: - extends: - file: base/peer-base.yaml - service: orderer-base - environment: - - ORDERER_GENERAL_LISTENPORT=10050 - container_name: orderer4.example.com - networks: - - byfn - volumes: - - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/msp:/var/hyperledger/orderer/msp - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/tls/:/var/hyperledger/orderer/tls - - orderer4.example.com:/var/hyperledger/production/orderer - ports: - - 10050:10050 - - orderer5.example.com: - extends: - file: base/peer-base.yaml - service: orderer-base - environment: - - ORDERER_GENERAL_LISTENPORT=11050 - container_name: orderer5.example.com - networks: - - byfn - volumes: - - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/msp:/var/hyperledger/orderer/msp - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/tls/:/var/hyperledger/orderer/tls - - orderer5.example.com:/var/hyperledger/production/orderer - ports: - - 11050:11050 diff --git a/hyperledger-fabric/first-network/docker-compose-org3.yaml b/hyperledger-fabric/first-network/docker-compose-org3.yaml deleted file mode 100644 index 20aa79cf..00000000 --- a/hyperledger-fabric/first-network/docker-compose-org3.yaml +++ /dev/null @@ -1,97 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -volumes: - peer0.org3.example.com: - peer1.org3.example.com: - -networks: - byfn: - -services: - - peer0.org3.example.com: - container_name: peer0.org3.example.com - extends: - file: base/peer-base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer0.org3.example.com - - CORE_PEER_ADDRESS=peer0.org3.example.com:11051 - - CORE_PEER_LISTENADDRESS=0.0.0.0:11051 - - CORE_PEER_CHAINCODEADDRESS=peer0.org3.example.com:11052 - - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:11052 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org3.example.com:12051 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org3.example.com:11051 - - CORE_PEER_LOCALMSPID=Org3MSP - volumes: - - /var/run/:/host/var/run/ - - ./org3-artifacts/crypto-config/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/msp:/etc/hyperledger/fabric/msp - - ./org3-artifacts/crypto-config/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls:/etc/hyperledger/fabric/tls - - peer0.org3.example.com:/var/hyperledger/production - ports: - - 11051:11051 - networks: - - byfn - - peer1.org3.example.com: - container_name: peer1.org3.example.com - extends: - file: base/peer-base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer1.org3.example.com - - CORE_PEER_ADDRESS=peer1.org3.example.com:12051 - - CORE_PEER_LISTENADDRESS=0.0.0.0:12051 - - CORE_PEER_CHAINCODEADDRESS=peer1.org3.example.com:12052 - - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:12052 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org3.example.com:11051 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org3.example.com:12051 - - CORE_PEER_LOCALMSPID=Org3MSP - volumes: - - /var/run/:/host/var/run/ - - ./org3-artifacts/crypto-config/peerOrganizations/org3.example.com/peers/peer1.org3.example.com/msp:/etc/hyperledger/fabric/msp - - ./org3-artifacts/crypto-config/peerOrganizations/org3.example.com/peers/peer1.org3.example.com/tls:/etc/hyperledger/fabric/tls - - peer1.org3.example.com:/var/hyperledger/production - ports: - - 12051:12051 - networks: - - byfn - - - Org3cli: - container_name: Org3cli - image: hyperledger/fabric-tools:$IMAGE_TAG - tty: true - stdin_open: true - environment: - - GOPATH=/opt/gopath - - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - - FABRIC_LOGGING_SPEC=INFO - #- FABRIC_LOGGING_SPEC=DEBUG - - CORE_PEER_ID=Org3cli - - CORE_PEER_ADDRESS=peer0.org3.example.com:11051 - - CORE_PEER_LOCALMSPID=Org3MSP - - CORE_PEER_TLS_ENABLED=true - - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/server.crt - - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/server.key - - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt - - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp - working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer - command: /bin/bash - volumes: - - /var/run/:/host/var/run/ - - ./../chaincode/:/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode - - ./org3-artifacts/crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ - - ./crypto-config/peerOrganizations/org1.example.com:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com - - ./crypto-config/peerOrganizations/org2.example.com:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com - - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/ - depends_on: - - peer0.org3.example.com - - peer1.org3.example.com - networks: - - byfn diff --git a/hyperledger-fabric/first-network/env.sh b/hyperledger-fabric/first-network/env.sh deleted file mode 100755 index 235e07c6..00000000 --- a/hyperledger-fabric/first-network/env.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -export FABRIC_CFG_PATH=$PWD/../config/ -export PATH=${PWD}/../bin:${PWD}:$PATH - diff --git a/hyperledger-fabric/first-network/fhir-data.tar.gz b/hyperledger-fabric/first-network/fhir-data.tar.gz deleted file mode 100644 index b2fc9416..00000000 Binary files a/hyperledger-fabric/first-network/fhir-data.tar.gz and /dev/null differ diff --git a/hyperledger-fabric/first-network/monitordocker.sh b/hyperledger-fabric/first-network/monitordocker.sh deleted file mode 100755 index 2cf82fbd..00000000 --- a/hyperledger-fabric/first-network/monitordocker.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -# This script uses the logspout and http stream tools to let you watch the docker containers -# in action. -# -# More information at https://github.com/gliderlabs/logspout/tree/master/httpstream - -if [ -z "$1" ]; then - DOCKER_NETWORK=basicnetwork_basic -else - DOCKER_NETWORK="$1" -fi - -if [ -z "$2" ]; then - PORT=8000 -else - PORT="$2" -fi - -echo Starting monitoring on all containers on the network ${DOCKER_NETWORK} - -docker kill logspout 2> /dev/null 1>&2 || true -docker rm logspout 2> /dev/null 1>&2 || true - -docker run -d --name="logspout" \ - --volume=/var/run/docker.sock:/var/run/docker.sock \ - --publish=127.0.0.1:${PORT}:80 \ - --network ${DOCKER_NETWORK} \ - gliderlabs/logspout -sleep 3 -curl http://127.0.0.1:${PORT}/logs diff --git a/hyperledger-fabric/first-network/scripts/org1.sh b/hyperledger-fabric/first-network/scripts/org1.sh deleted file mode 100755 index 286a535a..00000000 --- a/hyperledger-fabric/first-network/scripts/org1.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -# Environment variables for PEER0 in Org1 -CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp -CORE_PEER_ADDRESS=peer0.org1.example.com:7051 -CORE_PEER_LOCALMSPID="Org1MSP" -CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt - diff --git a/hyperledger-fabric/first-network/scripts/org2.sh b/hyperledger-fabric/first-network/scripts/org2.sh deleted file mode 100755 index 631a3c2e..00000000 --- a/hyperledger-fabric/first-network/scripts/org2.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -# Environment variables for PEER0 in Org2 -CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp -CORE_PEER_ADDRESS=peer0.org2.example.com:9051 -CORE_PEER_LOCALMSPID="Org2MSP" -CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt - diff --git a/hyperledger-fabric/first-network/scripts/script.sh b/hyperledger-fabric/first-network/scripts/script.sh deleted file mode 100755 index bbc0a8a1..00000000 --- a/hyperledger-fabric/first-network/scripts/script.sh +++ /dev/null @@ -1,184 +0,0 @@ -#!/bin/bash - -echo -echo " ____ _____ _ ____ _____ " -echo "/ ___| |_ _| / \ | _ \ |_ _|" -echo "\___ \ | | / _ \ | |_) | | | " -echo " ___) | | | / ___ \ | _ < | | " -echo "|____/ |_| /_/ \_\ |_| \_\ |_| " -echo -echo "Build your first network (BYFN) end-to-end test" -echo -CHANNEL_NAME="$1" -DELAY="$2" -CC_SRC_LANGUAGE="$3" -TIMEOUT="$4" -VERBOSE="$5" -NO_CHAINCODE="$6" -CC_SRC_PATH="$7" -CC_NAME="$8" -VERSION="$9" -: ${CHANNEL_NAME:="mychannel"} -: ${DELAY:="3"} -: ${CC_SRC_LANGUAGE:="go"} -: ${TIMEOUT:="10"} -: ${VERBOSE:="false"} -: ${NO_CHAINCODE:="false"} -: ${CC_NAME:="mycc"} -: ${VERSION:="1"} -CC_SRC_LANGUAGE=`echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:]` -COUNTER=1 -MAX_RETRY=20 -PACKAGE_ID="" - -echo "script.sh inputs: "$1 $2 $3 $4 $5 $6 $7 $8 $9 - -# set chaincode runtime language -if [ "$CC_SRC_LANGUAGE" = "go" -o "$CC_SRC_LANGUAGE" = "golang" ]; then - CC_RUNTIME_LANGUAGE=golang -elif [ "$CC_SRC_LANGUAGE" = "javascript" ]; then - CC_RUNTIME_LANGUAGE=node # chaincode runtime language is node.js -elif [ "$CC_SRC_LANGUAGE" = "java" ]; then - CC_RUNTIME_LANGUAGE=java -else - echo The chaincode language ${CC_SRC_LANGUAGE} is not supported by this script - echo Supported chaincode languages are: go, javascript, java - exit 1 -fi - -# set chaincode src path to use default contract, if not provided -if [-z "$CC_SRC_PATH"]; then - if [ "$CC_SRC_LANGUAGE" = "go" -o "$CC_SRC_LANGUAGE" = "golang" ]; then - CC_SRC_PATH="github.com/hyperledger/fabric-samples/chaincode/abstore/go/" - elif [ "$CC_SRC_LANGUAGE" = "javascript" ]; then - CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/javascript/" - elif [ "$CC_SRC_LANGUAGE" = "java" ]; then - CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/java/" - fi -fi - -echo "Channel name : "$CHANNEL_NAME - -# import utils -. scripts/utils.sh - -createChannel() { - setGlobals 0 1 - - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then - set -x - peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx >&log.txt - res=$? - set +x - else - set -x - peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA >&log.txt - res=$? - set +x - fi - cat log.txt - verifyResult $res "Channel creation failed" - echo "===================== Channel '$CHANNEL_NAME' created ===================== " - echo -} - -joinChannel () { - for org in 1 2; do - for peer in 0 1; do - joinChannelWithRetry $peer $org - echo "===================== peer${peer}.org${org} joined channel '$CHANNEL_NAME' ===================== " - sleep $DELAY - echo - done - done -} - -## Create channel -echo "Creating channel..." -createChannel - -## Join all the peers to the channel -echo "Having all peers join the channel..." -joinChannel - -## Set the anchor peers for each org in the channel -echo "Updating anchor peers for org1..." -updateAnchorPeers 0 1 -echo "Updating anchor peers for org2..." -updateAnchorPeers 0 2 - -if [ "${NO_CHAINCODE}" != "true" ]; then - - ## at first we package the chaincode - packageChaincode "${VERSION}" 0 1 - - ## Install chaincode on peer0.org1 and peer0.org2 - echo "Installing chaincode on peer0.org1..." - installChaincode 0 1 - echo "Install chaincode on peer0.org2..." - installChaincode 0 2 - - ## query whether the chaincode is installed - queryInstalled 0 1 - - ## approve the definition for org1 - approveForMyOrg "${VERSION}" 0 1 - - ## check whether the chaincode definition is ready to be committed - ## expect org1 to have approved and org2 not to - checkCommitReadiness 1 0 1 "\"Org1MSP\": true" "\"Org2MSP\": false" - checkCommitReadiness 1 0 2 "\"Org1MSP\": true" "\"Org2MSP\": false" - - ## now approve also for org2 - approveForMyOrg "${VERSION}" 0 2 - - ## check whether the chaincode definition is ready to be committed - ## expect them both to have approved - checkCommitReadiness "${VERSION}" 0 1 "\"Org1MSP\": true" "\"Org2MSP\": true" - checkCommitReadiness "${VERSION}" 0 2 "\"Org1MSP\": true" "\"Org2MSP\": true" - - ## now that we know for sure both orgs have approved, commit the definition - commitChaincodeDefinition "${VERSION}" 0 1 0 2 - - ## query on both orgs to see that the definition committed successfully - queryCommitted "${VERSION}" 0 1 - queryCommitted "${VERSION}" 0 2 - - # invoke init - #chaincodeInvoke 1 0 1 0 2 - - # Query chaincode on peer0.org1 - # echo "Querying chaincode on peer0.org1..." - # chaincodeQuery 0 1 100 - - # Invoke chaincode on peer0.org1 and peer0.org2 - # echo "Sending invoke transaction on peer0.org1 peer0.org2..." - # chaincodeInvoke 0 0 1 0 2 - - # Query chaincode on peer0.org1 - # echo "Querying chaincode on peer0.org1..." - # chaincodeQuery 0 1 90 - - ## Install chaincode on peer1.org2 - echo "Installing chaincode on peer1.org2..." - installChaincode 1 2 - - # Query on chaincode on peer1.org2, check if the result is 90 - # echo "Querying chaincode on peer1.org2..." - # chaincodeQuery 1 2 90 - -fi - -echo -echo "========= All GOOD, BYFN execution completed =========== " -echo - -echo -echo " _____ _ _ ____ " -echo "| ____| | \ | | | _ \ " -echo "| _| | \| | | | | | " -echo "| |___ | |\ | | |_| | " -echo "|_____| |_| \_| |____/ " -echo - -exit 0 diff --git a/hyperledger-fabric/first-network/scripts/step1org3.sh b/hyperledger-fabric/first-network/scripts/step1org3.sh deleted file mode 100755 index 4329860c..00000000 --- a/hyperledger-fabric/first-network/scripts/step1org3.sh +++ /dev/null @@ -1,81 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -# This script is designed to be run in the org3cli container as the -# first step of the EYFN tutorial. It creates and submits a -# configuration transaction to add org3 to the network previously -# setup in the BYFN tutorial. -# - -CHANNEL_NAME="$1" -DELAY="$2" -CC_SRC_LANGUAGE="$3" -TIMEOUT="$4" -VERBOSE="$5" -: ${CHANNEL_NAME:="mychannel"} -: ${DELAY:="3"} -: ${CC_SRC_LANGUAGE:="go"} -: ${TIMEOUT:="10"} -: ${VERBOSE:="false"} -CC_SRC_LANGUAGE=`echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:]` -COUNTER=1 -MAX_RETRY=5 - -if [ "$CC_SRC_LANGUAGE" = "go" -o "$CC_SRC_LANGUAGE" = "golang" ]; then - CC_RUNTIME_LANGUAGE=golang - CC_SRC_PATH="github.com/hyperledger/fabric-samples/chaincode/abstore/go/" -elif [ "$CC_SRC_LANGUAGE" = "javascript" ]; then - CC_RUNTIME_LANGUAGE=node # chaincode runtime language is node.js - CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/javascript/" -elif [ "$CC_SRC_LANGUAGE" = "java" ]; then - CC_RUNTIME_LANGUAGE=java - CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/java/" -else - echo The chaincode language ${CC_SRC_LANGUAGE} is not supported by this script - echo Supported chaincode languages are: go, javascript, java - exit 1 -fi - -# import utils -. scripts/utils.sh - -echo -echo "========= Creating config transaction to add org3 to network =========== " -echo - -# Fetch the config for the channel, writing it to config.json -fetchChannelConfig ${CHANNEL_NAME} config.json - -# Modify the configuration to append the new org -set -x -jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' config.json ./channel-artifacts/org3.json > modified_config.json -set +x - -# Compute a config update, based on the differences between config.json and modified_config.json, write it as a transaction to org3_update_in_envelope.pb -createConfigUpdate ${CHANNEL_NAME} config.json modified_config.json org3_update_in_envelope.pb - -echo -echo "========= Config transaction to add org3 to network created ===== " -echo - -echo "Signing config transaction" -echo -signConfigtxAsPeerOrg 1 org3_update_in_envelope.pb - -echo -echo "========= Submitting transaction from a different peer (peer0.org2) which also signs it ========= " -echo -setGlobals 0 2 -set -x -peer channel update -f org3_update_in_envelope.pb -c ${CHANNEL_NAME} -o orderer.example.com:7050 --tls --cafile ${ORDERER_CA} -set +x - -echo -echo "========= Config transaction to add org3 to network submitted! =========== " -echo - -exit 0 diff --git a/hyperledger-fabric/first-network/scripts/step2org3.sh b/hyperledger-fabric/first-network/scripts/step2org3.sh deleted file mode 100755 index fec4dcc4..00000000 --- a/hyperledger-fabric/first-network/scripts/step2org3.sh +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -# This script is designed to be run in the org3cli container as the -# second step of the EYFN tutorial. It joins the org3 peers to the -# channel previously setup in the BYFN tutorial and install the -# chaincode as version 2.0 on peer0.org3. -# - -echo -echo "========= Getting Org3 on to your first network ========= " -echo -CHANNEL_NAME="$1" -DELAY="$2" -CC_SRC_LANGUAGE="$3" -TIMEOUT="$4" -VERBOSE="$5" -: ${CHANNEL_NAME:="mychannel"} -: ${DELAY:="3"} -: ${CC_SRC_LANGUAGE:="go"} -: ${TIMEOUT:="10"} -: ${VERBOSE:="false"} -CC_SRC_LANGUAGE=`echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:]` -COUNTER=1 -MAX_RETRY=5 -PACKAGE_ID="" - -if [ "$CC_SRC_LANGUAGE" = "go" -o "$CC_SRC_LANGUAGE" = "golang" ]; then - CC_RUNTIME_LANGUAGE=golang - CC_SRC_PATH="github.com/hyperledger/fabric-samples/chaincode/abstore/go/" -elif [ "$CC_SRC_LANGUAGE" = "javascript" ]; then - CC_RUNTIME_LANGUAGE=node # chaincode runtime language is node.js - CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/javascript/" -elif [ "$CC_SRC_LANGUAGE" = "java" ]; then - CC_RUNTIME_LANGUAGE=java - CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/java/" -else - echo The chaincode language ${CC_SRC_LANGUAGE} is not supported by this script - echo Supported chaincode languages are: go, javascript, java - exit 1 -fi - -# import utils -. scripts/utils.sh - -echo "Fetching channel config block from orderer..." -set -x -peer channel fetch 0 $CHANNEL_NAME.block -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA >&log.txt -res=$? -set +x -cat log.txt -verifyResult $res "Fetching config block from orderer has Failed" - -joinChannelWithRetry 0 3 -echo "===================== peer0.org3 joined channel '$CHANNEL_NAME' ===================== " -joinChannelWithRetry 1 3 -echo "===================== peer1.org3 joined channel '$CHANNEL_NAME' ===================== " - -## at first we package the chaincode -packageChaincode 1 0 3 - -echo "Installing chaincode on peer0.org3..." -installChaincode 0 3 - -## query whether the chaincode is installed -queryInstalled 0 3 - -## sanity check: expect the chaincode to be already committed -queryCommitted 1 0 3 - -## approve it for our org, so that our peers know what package to invoke -approveForMyOrg 1 0 3 - -# Query on chaincode on peer0.org3, check if the result is 90 -echo "Querying chaincode on peer0.org3..." -chaincodeQuery 0 3 90 - -echo -echo "========= Finished adding Org3 to your first network! ========= " -echo - -exit 0 diff --git a/hyperledger-fabric/first-network/scripts/testorg3.sh b/hyperledger-fabric/first-network/scripts/testorg3.sh deleted file mode 100755 index 04e23114..00000000 --- a/hyperledger-fabric/first-network/scripts/testorg3.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -# This script is designed to be run in the org3cli container as the -# final step of the EYFN tutorial. It simply issues a couple of -# chaincode requests through the org3 peers to check that org3 was -# properly added to the network previously setup in the BYFN tutorial. -# - -echo -echo " ____ _____ _ ____ _____ " -echo "/ ___| |_ _| / \ | _ \ |_ _|" -echo "\___ \ | | / _ \ | |_) | | | " -echo " ___) | | | / ___ \ | _ < | | " -echo "|____/ |_| /_/ \_\ |_| \_\ |_| " -echo -echo "Extend your first network (EYFN) test" -echo -CHANNEL_NAME="$1" -DELAY="$2" -CC_SRC_LANGUAGE="$3" -TIMEOUT="$4" -VERBOSE="$5" -: ${CHANNEL_NAME:="mychannel"} -: ${TIMEOUT:="10"} -: ${CC_SRC_LANGUAGE:="go"} -: ${VERBOSE:="false"} -CC_SRC_LANGUAGE=`echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:]` -COUNTER=1 -MAX_RETRY=5 - -if [ "$CC_SRC_LANGUAGE" = "go" -o "$CC_SRC_LANGUAGE" = "golang" ]; then - CC_RUNTIME_LANGUAGE=golang - CC_SRC_PATH="github.com/hyperledger/fabric-samples/chaincode/abstore/go/" -elif [ "$CC_SRC_LANGUAGE" = "javascript" ]; then - CC_RUNTIME_LANGUAGE=node # chaincode runtime language is node.js - CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/javascript/" -elif [ "$CC_SRC_LANGUAGE" = "java" ]; then - CC_RUNTIME_LANGUAGE=java - CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/java/" -else - echo The chaincode language ${CC_SRC_LANGUAGE} is not supported by this script - echo Supported chaincode languages are: go, javascript, java - exit 1 -fi - -echo "Channel name : "$CHANNEL_NAME - -# import functions -. scripts/utils.sh - -# Query chaincode on peer0.org3, check if the result is 90 -echo "Querying chaincode on peer0.org3..." -chaincodeQuery 0 3 90 - -# Invoke chaincode on peer0.org1 and peer0.org3 -echo "Sending invoke transaction on peer0.org1 peer0.org3..." -chaincodeInvoke 0 0 1 0 3 - -# Query on chaincode on peer0.org3, peer0.org2, peer0.org1 check if the result is 80 -# We query a peer in each organization, to ensure peers from all organizations are in sync -# and there is no state fork between organizations. -echo "Querying chaincode on peer0.org3..." -chaincodeQuery 0 3 80 - -echo "Querying chaincode on peer0.org2..." -chaincodeQuery 0 2 80 - -echo "Querying chaincode on peer0.org1..." -chaincodeQuery 0 1 80 - - -echo -echo "========= All GOOD, EYFN test execution completed =========== " -echo - -echo -echo " _____ _ _ ____ " -echo "| ____| | \ | | | _ \ " -echo "| _| | \| | | | | | " -echo "| |___ | |\ | | |_| | " -echo "|_____| |_| \_| |____/ " -echo - -exit 0 diff --git a/hyperledger-fabric/first-network/scripts/upgrade_to_v14.sh b/hyperledger-fabric/first-network/scripts/upgrade_to_v14.sh deleted file mode 100755 index 3fb4df68..00000000 --- a/hyperledger-fabric/first-network/scripts/upgrade_to_v14.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/bash - -echo -echo " ____ _____ _ ____ _____ " -echo "/ ___| |_ _| / \ | _ \ |_ _|" -echo "\___ \ | | / _ \ | |_) | | | " -echo " ___) | | | / ___ \ | _ < | | " -echo "|____/ |_| /_/ \_\ |_| \_\ |_| " -echo -echo "Upgrade your first network (BYFN) from v1.3.x to v1.4.x end-to-end test" -echo -CHANNEL_NAME="$1" -DELAY="$2" -CC_SRC_LANGUAGE="$3" -TIMEOUT="$4" -VERBOSE="$5" -: ${CHANNEL_NAME:="mychannel"} -: ${DELAY:="5"} -: ${CC_SRC_LANGUAGE:="go"} -: ${TIMEOUT:="10"} -: ${VERBOSE:="false"} -CC_SRC_LANGUAGE=$(echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:]) -COUNTER=1 -MAX_RETRY=5 - -if [ "$CC_SRC_LANGUAGE" = "go" -o "$CC_SRC_LANGUAGE" = "golang" ]; then - CC_RUNTIME_LANGUAGE=golang - CC_SRC_PATH="github.com/hyperledger/fabric-samples/chaincode/abstore/go/" -elif [ "$CC_SRC_LANGUAGE" = "javascript" ]; then - CC_RUNTIME_LANGUAGE=node # chaincode runtime language is node.js - CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/javascript/" -elif [ "$CC_SRC_LANGUAGE" = "java" ]; then - CC_RUNTIME_LANGUAGE=java - CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/java/" -else - echo The chaincode language ${CC_SRC_LANGUAGE} is not supported by this script - echo Supported chaincode languages are: go, javascript, java - exit 1 -fi - -echo "Channel name : "$CHANNEL_NAME - -# import utils -. scripts/utils.sh - -sleep $DELAY - -#Query on chaincode on Peer0/Org1 -echo "Querying chaincode on org1/peer0..." -chaincodeQuery 0 1 90 - -sleep $DELAY - -#Invoke on chaincode on Peer0/Org1 -echo "Sending invoke transaction on org1/peer0..." -chaincodeInvoke 0 1 0 2 - -sleep $DELAY - -#Query on chaincode on Peer0/Org1 -echo "Querying chaincode on org1/peer0..." -chaincodeQuery 0 1 80 - -echo -echo "===================== All GOOD, End-2-End UPGRADE Scenario execution completed ===================== " -echo - -echo -echo " _____ _ _ ____ _____ ____ _____ " -echo "| ____| | \ | | | _ \ | ____| |___ \ | ____|" -echo "| _| | \| | | | | | _____ | _| __) | | _| " -echo "| |___ | |\ | | |_| | |_____| | |___ / __/ | |___ " -echo "|_____| |_| \_| |____/ |_____| |_____| |_____|" -echo - -exit 0 diff --git a/hyperledger-fabric/first-network/scripts/utils.sh b/hyperledger-fabric/first-network/scripts/utils.sh deleted file mode 100755 index f759e7d1..00000000 --- a/hyperledger-fabric/first-network/scripts/utils.sh +++ /dev/null @@ -1,451 +0,0 @@ -# -# Copyright IBM Corp All Rights Reserved -# -# SPDX-License-Identifier: Apache-2.0 -# - -# This is a collection of bash functions used by different scripts - -ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -PEER0_ORG1_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt -PEER0_ORG2_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -PEER0_ORG3_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt - -# verify the result of the end-to-end test -verifyResult() { - if [ $1 -ne 0 ]; then - echo "!!!!!!!!!!!!!!! "$2" !!!!!!!!!!!!!!!!" - echo "========= ERROR !!! FAILED to execute End-2-End Scenario ===========" - echo - exit 1 - fi -} - -# Set OrdererOrg.Admin globals -setOrdererGlobals() { - CORE_PEER_LOCALMSPID="OrdererMSP" - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/users/Admin@example.com/msp -} - -setGlobals() { - PEER=$1 - ORG=$2 - if [ $ORG -eq 1 ]; then - CORE_PEER_LOCALMSPID="Org1MSP" - CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG1_CA - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp - if [ $PEER -eq 0 ]; then - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 - else - CORE_PEER_ADDRESS=peer1.org1.example.com:8051 - fi - elif [ $ORG -eq 2 ]; then - CORE_PEER_LOCALMSPID="Org2MSP" - CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG2_CA - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp - if [ $PEER -eq 0 ]; then - CORE_PEER_ADDRESS=peer0.org2.example.com:9051 - else - CORE_PEER_ADDRESS=peer1.org2.example.com:10051 - fi - - elif [ $ORG -eq 3 ]; then - CORE_PEER_LOCALMSPID="Org3MSP" - CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG3_CA - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp - if [ $PEER -eq 0 ]; then - CORE_PEER_ADDRESS=peer0.org3.example.com:11051 - else - CORE_PEER_ADDRESS=peer1.org3.example.com:12051 - fi - else - echo "================== ERROR !!! ORG Unknown ==================" - fi - - if [ "$VERBOSE" == "true" ]; then - env | grep CORE - fi -} - -updateAnchorPeers() { - PEER=$1 - ORG=$2 - setGlobals $PEER $ORG - - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then - set -x - peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/${CORE_PEER_LOCALMSPID}anchors.tx >&log.txt - res=$? - set +x - else - set -x - peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/${CORE_PEER_LOCALMSPID}anchors.tx --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA >&log.txt - res=$? - set +x - fi - cat log.txt - verifyResult $res "Anchor peer update failed" - echo "===================== Anchor peers updated for org '$CORE_PEER_LOCALMSPID' on channel '$CHANNEL_NAME' ===================== " - sleep $DELAY - echo -} - -## Sometimes Join takes time hence RETRY at least 5 times -joinChannelWithRetry() { - PEER=$1 - ORG=$2 - setGlobals $PEER $ORG - - set -x - peer channel join -b $CHANNEL_NAME.block >&log.txt - res=$? - set +x - cat log.txt - if [ $res -ne 0 -a $COUNTER -lt $MAX_RETRY ]; then - COUNTER=$(expr $COUNTER + 1) - echo "peer${PEER}.org${ORG} failed to join the channel, Retry after $DELAY seconds" - sleep $DELAY - joinChannelWithRetry $PEER $ORG - else - COUNTER=1 - fi - verifyResult $res "After $MAX_RETRY attempts, peer${PEER}.org${ORG} has failed to join channel '$CHANNEL_NAME' " -} - -# packageChaincode VERSION PEER ORG -packageChaincode() { - VERSION=$1 - PEER=$2 - ORG=$3 - setGlobals $PEER $ORG - set -x - peer lifecycle chaincode package ${CC_NAME}.tar.gz --path ${CC_SRC_PATH} --lang ${CC_RUNTIME_LANGUAGE} --label ${CC_NAME}_${VERSION} >&log.txt - res=$? - set +x - cat log.txt - verifyResult $res "Chaincode packaging on peer${PEER}.org${ORG} has failed" - echo "===================== Chaincode is packaged on peer${PEER}.org${ORG} ===================== " - echo -} - -# installChaincode PEER ORG -installChaincode() { - PEER=$1 - ORG=$2 - setGlobals $PEER $ORG - set -x - peer lifecycle chaincode install ${CC_NAME}.tar.gz >&log.txt - res=$? - set +x - cat log.txt - verifyResult $res "Chaincode installation on peer${PEER}.org${ORG} has failed" - echo "===================== Chaincode is installed on peer${PEER}.org${ORG} ===================== " - echo -} - -# queryInstalled PEER ORG -queryInstalled() { - PEER=$1 - ORG=$2 - setGlobals $PEER $ORG - set -x - peer lifecycle chaincode queryinstalled >&log.txt - res=$? - set +x - cat log.txt - PACKAGE_ID=`sed -n '/Package/{s/^Package ID: //; s/, Label:.*$//; p;}' log.txt` - verifyResult $res "Query installed on peer${PEER}.org${ORG} has failed" - echo PackageID is ${PACKAGE_ID} - echo "===================== Query installed successful on peer${PEER}.org${ORG} on channel ===================== " - echo -} - -# approveForMyOrg VERSION PEER ORG -approveForMyOrg() { - VERSION=$1 - PEER=$2 - ORG=$3 - setGlobals $PEER $ORG - - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then - set -x - peer lifecycle chaincode approveformyorg --channelID $CHANNEL_NAME --name ${CC_NAME} --version ${VERSION} --init-required --package-id ${PACKAGE_ID} --sequence ${VERSION} --waitForEvent >&log.txt - set +x - else - set -x - peer lifecycle chaincode approveformyorg --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA --channelID $CHANNEL_NAME --name ${CC_NAME} --version ${VERSION} --init-required --package-id ${PACKAGE_ID} --sequence ${VERSION} --waitForEvent >&log.txt - set +x - fi - cat log.txt - verifyResult $res "Chaincode definition approved on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' failed" - echo "===================== Chaincode definition approved on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' ===================== " - echo -} - -# commitChaincodeDefinition VERSION PEER ORG (PEER ORG)... -commitChaincodeDefinition() { - VERSION=$1 - shift - parsePeerConnectionParameters $@ - res=$? - verifyResult $res "Invoke transaction failed on channel '$CHANNEL_NAME' due to uneven number of peer and org parameters " - - # while 'peer chaincode' command can get the orderer endpoint from the - # peer (if join was successful), let's supply it directly as we know - # it using the "-o" option - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then - set -x - peer lifecycle chaincode commit -o orderer.example.com:7050 --channelID $CHANNEL_NAME --name ${CC_NAME} $PEER_CONN_PARMS --version ${VERSION} --sequence ${VERSION} --init-required >&log.txt - res=$? - set +x - else - set -x - peer lifecycle chaincode commit -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA --channelID $CHANNEL_NAME --name ${CC_NAME} $PEER_CONN_PARMS --version ${VERSION} --sequence ${VERSION} --init-required >&log.txt - res=$? - set +x - fi - cat log.txt - verifyResult $res "Chaincode definition commit failed on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' failed" - echo "===================== Chaincode definition committed on channel '$CHANNEL_NAME' ===================== " - echo -} - -# checkCommitReadiness VERSION PEER ORG -checkCommitReadiness() { - VERSION=$1 - PEER=$2 - ORG=$3 - shift 3 - setGlobals $PEER $ORG - echo "===================== Checking the commit readiness of the chaincode definition on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME'... ===================== " - local rc=1 - local starttime=$(date +%s) - - # continue to poll - # we either get a successful response, or reach TIMEOUT - while - test "$(($(date +%s) - starttime))" -lt "$TIMEOUT" -a $rc -ne 0 - do - sleep $DELAY - echo "Attempting to check the commit readiness of the chaincode definition on peer${PEER}.org${ORG} ...$(($(date +%s) - starttime)) secs" - set -x - peer lifecycle chaincode checkcommitreadiness --channelID $CHANNEL_NAME --name ${CC_NAME} $PEER_CONN_PARMS --version ${VERSION} --sequence ${VERSION} --output json --init-required >&log.txt - res=$? - set +x - test $res -eq 0 || continue - let rc=0 - for var in "$@" - do - grep "$var" log.txt &>/dev/null || let rc=1 - done - done - echo - cat log.txt - if test $rc -eq 0; then - echo "===================== Checking the commit readiness of the chaincode definition successful on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' ===================== " - else - echo "!!!!!!!!!!!!!!! Check commit readiness result on peer${PEER}.org${ORG} is INVALID !!!!!!!!!!!!!!!!" - echo "================== ERROR !!! FAILED to execute End-2-End Scenario ==================" - echo - exit 1 - fi -} - -# queryCommitted VERSION PEER ORG -queryCommitted() { - VERSION=$1 - PEER=$2 - ORG=$3 - setGlobals $PEER $ORG - EXPECTED_RESULT="Version: ${VERSION}, Sequence: ${VERSION}, Endorsement Plugin: escc, Validation Plugin: vscc" - echo "===================== Querying chaincode definition on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME'... ===================== " - local rc=1 - local starttime=$(date +%s) - - # continue to poll - # we either get a successful response, or reach TIMEOUT - while - test "$(($(date +%s) - starttime))" -lt "$TIMEOUT" -a $rc -ne 0 - do - sleep $DELAY - echo "Attempting to Query committed status on peer${PEER}.org${ORG} ...$(($(date +%s) - starttime)) secs" - set -x - peer lifecycle chaincode querycommitted --channelID $CHANNEL_NAME --name ${CC_NAME} >&log.txt - res=$? - set +x - test $res -eq 0 && VALUE=$(cat log.txt | grep -o '^Version: [0-9], Sequence: [0-9], Endorsement Plugin: escc, Validation Plugin: vscc') - test "$VALUE" = "$EXPECTED_RESULT" && let rc=0 - done - echo - cat log.txt - if test $rc -eq 0; then - echo "===================== Query chaincode definition successful on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' ===================== " - else - echo "!!!!!!!!!!!!!!! Query chaincode definition result on peer${PEER}.org${ORG} is INVALID !!!!!!!!!!!!!!!!" - echo "================== ERROR !!! FAILED to execute End-2-End Scenario ==================" - echo - exit 1 - fi -} - -chaincodeQuery() { - PEER=$1 - ORG=$2 - setGlobals $PEER $ORG - EXPECTED_RESULT=$3 - echo "===================== Querying on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME'... ===================== " - local rc=1 - local starttime=$(date +%s) - - # continue to poll - # we either get a successful response, or reach TIMEOUT - while - test "$(($(date +%s) - starttime))" -lt "$TIMEOUT" -a $rc -ne 0 - do - sleep $DELAY - echo "Attempting to Query peer${PEER}.org${ORG} ...$(($(date +%s) - starttime)) secs" - set -x - peer chaincode query -C $CHANNEL_NAME -n ${CC_NAME} -c '{"Args":["query","a"]}' >&log.txt - res=$? - set +x - test $res -eq 0 && VALUE=$(cat log.txt | awk '/Query Result/ {print $NF}') - test "$VALUE" = "$EXPECTED_RESULT" && let rc=0 - # removed the string "Query Result" from peer chaincode query command - # result. as a result, have to support both options until the change - # is merged. - test $rc -ne 0 && VALUE=$(cat log.txt | egrep '^[0-9]+$') - test "$VALUE" = "$EXPECTED_RESULT" && let rc=0 - done - echo - cat log.txt - if test $rc -eq 0; then - echo "===================== Query successful on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' ===================== " - else - echo "!!!!!!!!!!!!!!! Query result on peer${PEER}.org${ORG} is INVALID !!!!!!!!!!!!!!!!" - echo "================== ERROR !!! FAILED to execute End-2-End Scenario ==================" - echo - exit 1 - fi -} - -# fetchChannelConfig -# Writes the current channel config for a given channel to a JSON file -fetchChannelConfig() { - CHANNEL=$1 - OUTPUT=$2 - - setOrdererGlobals - - echo "Fetching the most recent configuration block for the channel" - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then - set -x - peer channel fetch config config_block.pb -o orderer.example.com:7050 -c $CHANNEL --cafile $ORDERER_CA - set +x - else - set -x - peer channel fetch config config_block.pb -o orderer.example.com:7050 -c $CHANNEL --tls --cafile $ORDERER_CA - set +x - fi - - echo "Decoding config block to JSON and isolating config to ${OUTPUT}" - set -x - configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config >"${OUTPUT}" - set +x -} - -# signConfigtxAsPeerOrg -# Set the peerOrg admin of an org and signing the config update -signConfigtxAsPeerOrg() { - PEERORG=$1 - TX=$2 - setGlobals 0 $PEERORG - set -x - peer channel signconfigtx -f "${TX}" - set +x -} - -# createConfigUpdate -# Takes an original and modified config, and produces the config update tx -# which transitions between the two -createConfigUpdate() { - CHANNEL=$1 - ORIGINAL=$2 - MODIFIED=$3 - OUTPUT=$4 - - set -x - configtxlator proto_encode --input "${ORIGINAL}" --type common.Config >original_config.pb - configtxlator proto_encode --input "${MODIFIED}" --type common.Config >modified_config.pb - configtxlator compute_update --channel_id "${CHANNEL}" --original original_config.pb --updated modified_config.pb >config_update.pb - configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate >config_update.json - echo '{"payload":{"header":{"channel_header":{"channel_id":"'$CHANNEL'", "type":2}},"data":{"config_update":'$(cat config_update.json)'}}}' | jq . >config_update_in_envelope.json - configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope >"${OUTPUT}" - set +x -} - -# parsePeerConnectionParameters $@ -# Helper function that takes the parameters from a chaincode operation -# (e.g. invoke, query, instantiate) and checks for an even number of -# peers and associated org, then sets $PEER_CONN_PARMS and $PEERS -parsePeerConnectionParameters() { - # check for uneven number of peer and org parameters - if [ $(($# % 2)) -ne 0 ]; then - exit 1 - fi - - PEER_CONN_PARMS="" - PEERS="" - while [ "$#" -gt 0 ]; do - setGlobals $1 $2 - PEER="peer$1.org$2" - PEERS="$PEERS $PEER" - PEER_CONN_PARMS="$PEER_CONN_PARMS --peerAddresses $CORE_PEER_ADDRESS" - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "true" ]; then - TLSINFO=$(eval echo "--tlsRootCertFiles \$PEER$1_ORG$2_CA") - PEER_CONN_PARMS="$PEER_CONN_PARMS $TLSINFO" - fi - # shift by two to get the next pair of peer/org parameters - shift - shift - done - # remove leading space for output - PEERS="$(echo -e "$PEERS" | sed -e 's/^[[:space:]]*//')" -} - -# chaincodeInvoke IS_INIT PEER ORG (PEER ORG) ... -# Accepts as many peer/org pairs as desired and requests endorsement from each -chaincodeInvoke() { - IS_INIT=$1 - shift - parsePeerConnectionParameters $@ - res=$? - verifyResult $res "Invoke transaction failed on channel '$CHANNEL_NAME' due to uneven number of peer and org parameters " - - if [ "${IS_INIT}" -eq "1" ]; then - CCARGS='{"Args":["Init","a","100","b","100"]}' - INIT_ARG="--isInit" - else - CCARGS='{"Args":["invoke","a","b","10"]}' - INIT_ARG="" - fi - - # while 'peer chaincode' command can get the orderer endpoint from the - # peer (if join was successful), let's supply it directly as we know - # it using the "-o" option - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then - set -x - peer chaincode invoke -o orderer.example.com:7050 -C $CHANNEL_NAME -n ${CC_NAME} $PEER_CONN_PARMS ${INIT_ARG} -c ${CCARGS} >&log.txt - res=$? - set +x - else - set -x - peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n ${CC_NAME} $PEER_CONN_PARMS ${INIT_ARG} -c ${CCARGS} >&log.txt - res=$? - set +x - fi - cat log.txt - verifyResult $res "Invoke execution on $PEERS failed " - echo "===================== Invoke transaction successful on $PEERS on channel '$CHANNEL_NAME' ===================== " - echo -}