{"_id":"@bajerm/cactus-plugin-ledger-connector-quorum","_rev":"1-1d4afcec59f2ace402c071920d694f8a","name":"@bajerm/cactus-plugin-ledger-connector-quorum","dist-tags":{"latest":"1.1.3-u2"},"versions":{"1.1.3-u1":{"name":"@bajerm/cactus-plugin-ledger-connector-quorum","version":"1.1.3-u1","description":"Allows Cactus nodes to connect to a Quorum ledger.","keywords":["Hyperledger","Cactus","Integration","Blockchain","Distributed Ledger Technology"],"homepage":"https://github.com/hyperledger/cactus#readme","bugs":{"url":"https://github.com/hyperledger/cactus/issues"},"repository":{"type":"git","url":"git+https://github.com/hyperledger/cactus.git"},"license":"Apache-2.0","author":{"name":"Hyperledger Cactus Contributors","email":"cactus@lists.hyperledger.org","url":"https://www.hyperledger.org/use/cactus"},"contributors":[{"name":"Please add yourself to the list of contributors","email":"your.name@example.com","url":"https://example.com"},{"name":"Peter Somogyvari","email":"peter.somogyvari@accenture.com","url":"https://accenture.com"}],"main":"dist/lib/main/typescript/index.js","module":"dist/lib/main/typescript/index.js","browser":"dist/cactus-plugin-ledger-connector-quorum.web.umd.js","types":"dist/lib/main/typescript/index.d.ts","scripts":{"codegen":"run-p 'codegen:*'","codegen:openapi":"npm run generate-sdk","generate-sdk":"openapi-generator-cli generate -i ./src/main/json/openapi.json -g typescript-axios -o ./src/main/typescript/generated/openapi/typescript-axios/ --reserved-words-mappings protected=protected","watch":"npm-watch","webpack":"npm-run-all webpack:dev","webpack:dev":"npm-run-all webpack:dev:node webpack:dev:web","webpack:dev:node":"webpack --env=dev --target=node --config ../../webpack.config.js","webpack:dev:web":"webpack --env=dev --target=web --config ../../webpack.config.js"},"dependencies":{"@hyperledger/cactus-common":"1.1.3","@bajerm/cactus-core":"1.1.3-u1","@hyperledger/cactus-core-api":"1.1.3","axios":"0.21.4","express":"4.17.1","prom-client":"13.2.0","run-time-error":"1.4.0","rxjs":"7.3.0","sanitize-html":"2.7.0","typescript-optional":"2.0.1","web3":"1.10.0","web3-eth-contract":"1.10.0"},"devDependencies":{"@hyperledger/cactus-plugin-keychain-memory":"1.1.3","@hyperledger/cactus-test-tooling":"1.1.3","@types/express":"4.17.13","@types/sanitize-html":"2.6.2","web3-eth":"1.10.0"},"engines":{"node":">=10","npm":">=6"},"publishConfig":{"access":"public"},"browserMinified":"dist/cactus-plugin-ledger-connector-quorum.web.umd.min.js","mainMinified":"dist/cactus-plugin-ledger-connector-quorum.node.umd.min.js","watch":{"codegen:openapi":{"patterns":["./src/main/json/openapi.json"]}},"gitHead":"795ee6bbd9637c2259fe92d0f56780d36121c538","_id":"@bajerm/cactus-plugin-ledger-connector-quorum@1.1.3-u1","_nodeVersion":"16.19.0","_npmVersion":"8.19.3","dist":{"integrity":"sha512-5GSHxOG2CDF6omr21nR0+ZA9yQ6x+Yo90airoF1+fbx80qdeWX32MfOmUq9iF7u23+jAuxmMRK+MdayPjm/7Gg==","shasum":"48a29ee7ac585ac84aa53369a432603e01484bc4","tarball":"https://registry.npmjs.org/@bajerm/cactus-plugin-ledger-connector-quorum/-/cactus-plugin-ledger-connector-quorum-1.1.3-u1.tgz","fileCount":92,"unpackedSize":754603,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEANPWgSLSagOsXrWAqI1OPsdr6c4WOtaQR/g5u0OEDTAiAvxf7tM+cfZz2tbkW2y4ur4rARNdORJ1DFimaCf/f4SQ=="}]},"_npmUser":{"name":"bajerm","email":"michal.bajer@fujitsu.com"},"directories":{},"maintainers":[{"name":"bajerm","email":"michal.bajer@fujitsu.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cactus-plugin-ledger-connector-quorum_1.1.3-u1_1687524765270_0.26132496199569855"},"_hasShrinkwrap":false},"1.1.3-u2":{"name":"@bajerm/cactus-plugin-ledger-connector-quorum","version":"1.1.3-u2","description":"Allows Cactus nodes to connect to a Quorum ledger.","keywords":["Hyperledger","Cactus","Integration","Blockchain","Distributed Ledger Technology"],"homepage":"https://github.com/hyperledger/cactus#readme","bugs":{"url":"https://github.com/hyperledger/cactus/issues"},"repository":{"type":"git","url":"git+https://github.com/hyperledger/cactus.git"},"license":"Apache-2.0","author":{"name":"Hyperledger Cactus Contributors","email":"cactus@lists.hyperledger.org","url":"https://www.hyperledger.org/use/cactus"},"contributors":[{"name":"Please add yourself to the list of contributors","email":"your.name@example.com","url":"https://example.com"},{"name":"Peter Somogyvari","email":"peter.somogyvari@accenture.com","url":"https://accenture.com"}],"main":"dist/lib/main/typescript/index.js","module":"dist/lib/main/typescript/index.js","browser":"dist/cactus-plugin-ledger-connector-quorum.web.umd.js","types":"dist/lib/main/typescript/index.d.ts","scripts":{"codegen":"run-p 'codegen:*'","codegen:openapi":"npm run generate-sdk","generate-sdk":"openapi-generator-cli generate -i ./src/main/json/openapi.json -g typescript-axios -o ./src/main/typescript/generated/openapi/typescript-axios/ --reserved-words-mappings protected=protected","watch":"npm-watch","webpack":"npm-run-all webpack:dev","webpack:dev":"npm-run-all webpack:dev:node webpack:dev:web","webpack:dev:node":"webpack --env=dev --target=node --config ../../webpack.config.js","webpack:dev:web":"webpack --env=dev --target=web --config ../../webpack.config.js"},"dependencies":{"@hyperledger/cactus-common":"1.1.3","@bajerm/cactus-core":"1.1.3-u2","@hyperledger/cactus-core-api":"1.1.3","axios":"0.21.4","express":"4.17.3","prom-client":"13.2.0","run-time-error":"1.4.0","rxjs":"7.3.0","sanitize-html":"2.7.0","typescript-optional":"2.0.1","web3":"1.10.0","web3-eth-contract":"1.10.0"},"devDependencies":{"@hyperledger/cactus-plugin-keychain-memory":"1.1.3","@hyperledger/cactus-test-tooling":"1.1.3","@types/express":"4.17.13","@types/sanitize-html":"2.6.2","web3-eth":"1.10.0"},"engines":{"node":">=10","npm":">=6"},"publishConfig":{"access":"public"},"browserMinified":"dist/cactus-plugin-ledger-connector-quorum.web.umd.min.js","mainMinified":"dist/cactus-plugin-ledger-connector-quorum.node.umd.min.js","watch":{"codegen:openapi":{"patterns":["./src/main/json/openapi.json"]}},"gitHead":"014b106f78d70317ffd5ca292211abb38f8375e4","_id":"@bajerm/cactus-plugin-ledger-connector-quorum@1.1.3-u2","_nodeVersion":"16.19.0","_npmVersion":"8.19.3","dist":{"integrity":"sha512-+OhZYcOi6CswoyEjHki4xlx0F5FY6tHPBsGnA0cNSd/izJX8viTMsbDDFVGSiWSsJrtYT7pixMrhhLUmtOVXPw==","shasum":"857e2d050bf95f6e39e7d35920b50ae085dd355a","tarball":"https://registry.npmjs.org/@bajerm/cactus-plugin-ledger-connector-quorum/-/cactus-plugin-ledger-connector-quorum-1.1.3-u2.tgz","fileCount":92,"unpackedSize":754603,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCD4rtQDND5ZkAcIEl3x3bKIkAZ1l5PB1Nn4CbFBAhlVgIhAK3Cr0wywyeS9IqkdKvXU0sPsmNPVm6XZJ8yNaPrk82q"}]},"_npmUser":{"name":"bajerm","email":"michal.bajer@fujitsu.com"},"directories":{},"maintainers":[{"name":"bajerm","email":"michal.bajer@fujitsu.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cactus-plugin-ledger-connector-quorum_1.1.3-u2_1687526046649_0.1800829003451776"},"_hasShrinkwrap":false}},"time":{"created":"2023-06-23T12:52:45.211Z","1.1.3-u1":"2023-06-23T12:52:45.442Z","modified":"2023-06-23T13:14:06.976Z","1.1.3-u2":"2023-06-23T13:14:06.863Z"},"maintainers":[{"name":"bajerm","email":"michal.bajer@fujitsu.com"}],"description":"Allows Cactus nodes to connect to a Quorum ledger.","homepage":"https://github.com/hyperledger/cactus#readme","keywords":["Hyperledger","Cactus","Integration","Blockchain","Distributed Ledger Technology"],"repository":{"type":"git","url":"git+https://github.com/hyperledger/cactus.git"},"contributors":[{"name":"Please add yourself to the list of contributors","email":"your.name@example.com","url":"https://example.com"},{"name":"Peter Somogyvari","email":"peter.somogyvari@accenture.com","url":"https://accenture.com"}],"author":{"name":"Hyperledger Cactus Contributors","email":"cactus@lists.hyperledger.org","url":"https://www.hyperledger.org/use/cactus"},"bugs":{"url":"https://github.com/hyperledger/cactus/issues"},"license":"Apache-2.0","readme":"# `@hyperledger/cactus-plugin-ledger-connector-quorum`\n\nThis plugin provides `Cactus` a way to interact with Quorum networks. Using this we can perform:\n* Deploy Smart-contracts through bytecode.\n* Build and sign transactions using different keystores.\n* Invoke smart-contract functions that we have deployed on the network.\n\n## Summary\n\n  - [Getting Started](#getting-started)\n  - [Usage](#usage)\n  - [Prometheus Exporter](#prometheus-exporter)\n  - [Runing the tests](#running-the-tests)\n  - [Contributing](#contributing)\n  - [License](#license)\n  - [Acknowledgments](#acknowledgments)\n\n## Getting Started\n\nClone the git repository on your local machine. Follow these instructions that will get you a copy of the project up and running on\nyour local machine for development and testing purposes.\n\n### Prerequisites\n\nIn the root of the project to install the dependencies execute the command:\n```sh\nnpm run configure\n```\n\n## Usage\n\nTo use this import public-api and create new **PluginLedgerConnectorQuorum**.\n```typescript\n  const connector: PluginLedgerConnectorQuorum = new PluginLedgerConnectorQuorum({\n    instanceId: uuidV4(),\n    rpcApiHttpHost,\n    pluginRegistry: new PluginRegistry(),\n  });\n```\nYou can make calls through the connector to the plugin API:\n\n```typescript\nasync invokeContract(req: InvokeContractJsonObjectV1Request):Promise<InvokeContractV1Response>;\nasync transact(req: RunTransactionRequest): Promise<RunTransactionResponse>;\nasync transactSigned(rawTransaction: string): Promise<RunTransactionResponse>;\nasync transactGethKeychain(txIn: RunTransactionRequest): Promise<RunTransactionResponse>;\nasync transactPrivateKey(req: RunTransactionRequest): Promise<RunTransactionResponse>;\nasync transactCactusKeychainRef(req: RunTransactionRequest):Promise<RunTransactionResponse>;\nasync deployContract(req: DeployContractSolidityBytecodeV1Request :Promise<DeployContractSolidityBytecodeV1Response>;\nasync deployContractJsonObject(req: DeployContractSolidityBytecodeJsonObjectV1Request): Promise<DeployContractSolidityBytecodeV1Response>\nasync invokeRawWeb3EthMethod(req: InvokeRawWeb3EthMethodV1Request): Promise<any>;\nasync invokeRawWeb3EthContract(req: InvokeRawWeb3EthContractV1Request): Promise<any>;\n```\n\nCall example to deploy a contract:\n```typescript\nconst deployOut = await connector.deployContract({\n  web3SigningCredential: {\n    ethAccount: firstHighNetWorthAccount,\n    secret: \"\",\n    type: Web3SigningCredentialType.GETHKEYCHAINPASSWORD,\n  },\n  bytecode: ContractJson.bytecode,\n  gas: 1000000,\n});\n```\nThe field \"type\" can have the following values:\n```typescript\nenum Web3SigningCredentialType {\n    CACTUSKEYCHAINREF = 'CACTUS_KEYCHAIN_REF',\n    GETHKEYCHAINPASSWORD = 'GETH_KEYCHAIN_PASSWORD',\n    PRIVATEKEYHEX = 'PRIVATE_KEY_HEX',\n    NONE = 'NONE'\n}\n```\n> Extensive documentation and examples in the [readthedocs](https://readthedocs.org/projects/hyperledger-cactus/) (WIP)\n\n## QuorumApiClient\n\nAll connector API endpoints are defined in [open-api specification](./src/main/json/openapi.json). You can use [QuorumApiClient](./src/main/typescript/api-client) to call remote quorum connector functions. It also contain additional utility functions to ease integration.\n\n### REST Functions\nSee [DefaultApi](./src/main/typescript/generated/openapi/typescript-axios/api.ts) for up-to-date listing of supported endpoints.\n- deployContractSolBytecodeJsonObjectV1\n- deployContractSolBytecodeV1\n- getPrometheusMetricsV1\n- invokeContractV1\n- invokeContractV1NoKeychain\n- invokeRawWeb3EthContractV1\n- invokeRawWeb3EthMethodV1\n- runTransactionV1\n\n### Asynchronous Functions (socket.io)\n- watchBlocksV1\n\n### Send Request Methods\nBoth methods are deprecated, async version returns immediately while sync respond with Promise of a call results.\n- `sendAsyncRequest`\n- `sendSyncRequest`\n\n#### Supported Requests\n- `web3Eth`: Calls `invokeRawWeb3EthMethodV1`\n- `web3EthContract`: Calls  `invokeRawWeb3EthContractV1`\n\n#### Arguments\n- The same for both async and sync methods.\n- Arguments interpretation depends on `method.type` (i.e. request type)\n``` typescript\n// Contract definition for web3EthContract request, ignored otherwise\ncontract: {\n  abi?: AbiItem[],\n  address?: string\n},\n\n// Request definition\nmethod: {\n  type: \"web3Eth\" | \"web3EthContract\",\n  command: string // web3 method\n  function?: string; // contract function\n  params?: any[]; // contract parameters\n}\n\n// web3 method arguments\nargs: {\n  {\n    args?: any[] | Record<string, unknown>;\n  }\n},\n```\n\n## Running the tests\n\nTo check that all has been installed correctly and that the pugin has no errors, there are two options to run the tests:\n\n* Run this command at the project's root:\n```sh\nnpm run test:plugin-ledger-connector-quorum\n```\n\n### Building/running the container image locally\n\nIn the Cactus project root say:\n\n```sh\nDOCKER_BUILDKIT=1 docker build -f ./packages/cactus-plugin-ledger-connector-quorum/Dockerfile . -t cplcb\n```\n\nBuild with a specific version of the npm package:\n```sh\nDOCKER_BUILDKIT=1 docker build --build-arg NPM_PKG_VERSION=0.4.1 -f ./packages/cactus-plugin-ledger-connector-quorum/Dockerfile . -t cplcb\n```\n\n#### Running the container\n\nLaunch container with plugin configuration as an **environment variable**:\n```sh\ndocker run \\\n  --rm \\\n  --publish 3000:3000 \\\n  --publish 4000:4000 \\\n  --env AUTHORIZATION_PROTOCOL='NONE' \\\n  --env AUTHORIZATION_CONFIG_JSON='{}' \\\n  --env PLUGINS='[{\"packageName\": \"@hyperledger/cactus-plugin-ledger-connector-quorum\", \"type\": \"org.hyperledger.cactus.plugin_import_type.LOCAL\", \"action\": \"org.hyperledger.cactus.plugin_import_action.INSTALL\",  \"options\": {\"rpcApiHttpHost\": \"http://localhost:8545\", \"instanceId\": \"some-unique-quorum-connector-instance-id\"}}]' \\\n  cplcb\n```\n\nLaunch container with plugin configuration as a **CLI argument**:\n```sh\ndocker run \\\n  --rm \\\n  --publish 3000:3000 \\\n   --publish 4000:4000 \\\n  cplcb \\\n    ./node_modules/@hyperledger/cactus-cmd-api-server/dist/lib/main/typescript/cmd/cactus-api.js \\\n    --authorization-protocol='NONE' \\\n    --authorization-config-json='{}' \\\n    --plugins='[{\"packageName\": \"@hyperledger/cactus-plugin-ledger-connector-quorum\", \"type\": \"org.hyperledger.cactus.plugin_import_type.LOCAL\", \"action\": \"org.hyperledger.cactus.plugin_import_action.INSTALL\",  \"options\": {\"rpcApiHttpHost\": \"http://localhost:8545\", \"instanceId\": \"some-unique-quorum-connector-instance-id\"}}]'\n```\n\nLaunch container with **configuration file** mounted from host machine:\n```sh\n\necho '{\"authorizationProtocol\":\"NONE\",\"authorizationConfigJson\":{},\"plugins\":[{\"packageName\":\"@hyperledger/cactus-plugin-ledger-connector-quorum\",\"type\":\"org.hyperledger.cactus.plugin_import_type.LOCAL\",\"action\":\"org.hyperledger.cactus.plugin_import_action.INSTALL\",\"options\":{\"rpcApiHttpHost\":\"http://localhost:8545\",\"instanceId\":\"some-unique-quorum-connector-instance-id\"}}]}' > cactus.json\n\ndocker run \\\n  --rm \\\n  --publish 3000:3000 \\\n  --publish 4000:4000 \\\n  --mount type=bind,source=\"$(pwd)\"/cactus.json,target=/cactus.json \\\n  cplcb \\\n    ./node_modules/@hyperledger/cactus-cmd-api-server/dist/lib/main/typescript/cmd/cactus-api.js \\\n    --config-file=/cactus.json\n```\n\n#### Testing API calls with the container\n\nDon't have a quorum network on hand to test with? Test or develop against our quorum All-In-One container!\n\n**Terminal Window 1 (Ledger)**\n```sh\ndocker run -p 0.0.0.0:8545:8545/tcp  -p 0.0.0.0:8546:8546/tcp  -p 0.0.0.0:8888:8888/tcp  -p 0.0.0.0:9001:9001/tcp  -p 0.0.0.0:9545:9545/tcp hyperledger/cactus-quorum-all-in-one:latest\n```\n\n**Terminal Window 2 (Cactus API Server)**\n```sh\ndocker run \\\n  --network host \\\n  --rm \\\n  --publish 3000:3000 \\\n  --publish 4000:4000 \\\n  --env PLUGINS='[{\"packageName\": \"@hyperledger/cactus-plugin-ledger-connector-quorum\", \"type\": \"org.hyperledger.cactus.plugin_import_type.LOCAL\", \"action\": \"org.hyperledger.cactus.plugin_import_action.INSTALL\",  \"options\": {\"rpcApiHttpHost\": \"http://localhost:8545\", \"instanceId\": \"some-unique-quorum-connector-instance-id\"}}]' \\\n  cplcb\n```\n\n**Terminal Window 3 (curl - replace eth accounts as needed)**\n```sh\ncurl --location --request POST 'http://127.0.0.1:4000/api/v1/plugins/@hyperledger/cactus-plugin-ledger-connector-quorum/run-transaction' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n    \"web3SigningCredential\": {\n      \"ethAccount\": \"627306090abaB3A6e1400e9345bC60c78a8BEf57\",\n      \"secret\": \"c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3\",\n      \"type\": \"PRIVATE_KEY_HEX\"\n    },\n    \"consistencyStrategy\": {\n      \"blockConfirmations\": 0,\n      \"receiptType\": \"NODE_TX_POOL_ACK\"\n    },\n    \"transactionConfig\": {\n      \"from\": \"627306090abaB3A6e1400e9345bC60c78a8BEf57\",\n      \"to\": \"f17f52151EbEF6C7334FAD080c5704D77216b732\",\n      \"value\": 1,\n      \"gas\": 10000000\n    }\n}'\n```\n\nThe above should produce a response that looks similar to this:\n\n```json\n{\n    \"success\": true,\n    \"data\": {\n        \"transactionReceipt\": {\n            \"blockHash\": \"0x7c97c038a5d3bd84613fe23ed442695276d5d2df97f4e7c4f10ca06765033ffd\",\n            \"blockNumber\": 1218,\n            \"contractAddress\": null,\n            \"cumulativeGasUsed\": 21000,\n            \"from\": \"0x627306090abab3a6e1400e9345bc60c78a8bef57\",\n            \"gasUsed\": 21000,\n            \"logs\": [],\n            \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n            \"status\": true,\n            \"to\": \"0xf17f52151ebef6c7334fad080c5704d77216b732\",\n            \"transactionHash\": \"0xc7fcb46c735bdc696d500bfc70c72595a2b8c31813929e5c61d9a5aec3376d6f\",\n            \"transactionIndex\": 0\n        }\n    }\n}\n```\n\n## Prometheus Exporter\n\nThis class creates a prometheus exporter, which scrapes the transactions (total transaction count) for the use cases incorporating the use of Quorum connector plugin.\n\n### Prometheus Exporter Usage\nThe prometheus exporter object is initialized in the `PluginLedgerConnectorQuorum` class constructor itself, so instantiating the object of the `PluginLedgerConnectorQuorum` class, gives access to the exporter object.\nYou can also initialize the prometheus exporter object seperately and then pass it to the `IPluginLedgerConnectorQuorumOptions` interface for `PluginLedgerConnectoQuorum` constructor.\n\n`getPrometheusMetricsV1` function returns the prometheus exporter metrics, currently displaying the total transaction count, which currently increments everytime the `transact()` method of the `PluginLedgerConnectorQuorum` class is called.\n\n### Prometheus Integration\nTo use Prometheus with this exporter make sure to install [Prometheus main component](https://prometheus.io/download/).\nOnce Prometheus is setup, the corresponding scrape_config needs to be added to the prometheus.yml\n\n```(yaml)\n- job_name: 'quorum_ledger_connector_exporter'\n  metrics_path: api/v1/plugins/@hyperledger/cactus-plugin-ledger-connector-quorum/get-prometheus-exporter-metrics\n  scrape_interval: 5s\n  static_configs:\n    - targets: ['{host}:{port}']\n```\n\nHere the `host:port` is where the prometheus exporter metrics are exposed. The test cases (For example, packages/cactus-plugin-ledger-connector-quorum/src/test/typescript/integration/plugin-ledger-connector-quorum/deploy-contract/deploy-contract-from-json.test.ts) exposes it over `0.0.0.0` and a random port(). The random port can be found in the running logs of the test case and looks like (42379 in the below mentioned URL)\n`Metrics URL: http://0.0.0.0:42379/api/v1/plugins/@hyperledger/cactus-plugin-ledger-connector-quorum/get-prometheus-exporter-metrics`\n\nOnce edited, you can start the prometheus service by referencing the above edited prometheus.yml file.\nOn the prometheus graphical interface (defaulted to http://localhost:9090), choose **Graph** from the menu bar, then select the **Console** tab. From the **Insert metric at cursor** drop down, select **cactus_quorum_total_tx_count** and click **execute**\n\n### Helper code\n\n###### response.type.ts\nThis file contains the various responses of the metrics.\n\n###### data-fetcher.ts\nThis file contains functions encasing the logic to process the data points\n\n###### metrics.ts\nThis file lists all the prometheus metrics and what they are used for.\n\n## Running the tests\n\nTo check that all has been installed correctly and that the pugin has no errors, there are two options to run the tests:\n\n* Run this command at the project's root:\n```sh\nnpm run test:plugin-ledger-connector-quorum\n```\n\n## Contributing\n\nWe welcome contributions to Hyperledger Cactus in many forms, and there’s always plenty to do!\n\nPlease review [CONTIRBUTING.md](../../CONTRIBUTING.md) to get started.\n\n## License\n\nThis distribution is published under the Apache License Version 2.0 found in the [LICENSE](../../LICENSE) file.\n\n## Acknowledgments\n```","readmeFilename":"README.md"}