Full Code of OriginTrail/ot-node for AI

v8/develop a8156d63132d cached
436 files
1.5 MB
360.8k tokens
2051 symbols
1 requests
Download .txt
Showing preview only (1,727K chars total). Download the full file or copy to clipboard to get everything.
Repository: OriginTrail/ot-node
Branch: v8/develop
Commit: a8156d63132d
Files: 436
Total size: 1.5 MB

Directory structure:
gitextract_wywppseo/

├── .codex/
│   ├── review-prompt.md
│   └── review-schema.json
├── .eslintrc.cjs
├── .github/
│   ├── CODEOWNERS
│   ├── ISSUE_TEMPLATE/
│   │   └── bug_report_v8.md
│   ├── actions/
│   │   └── setup/
│   │       └── action.yml
│   ├── pull_request_template.md
│   ├── release-drafter-template.yml
│   └── workflows/
│       ├── check-package-lock.yml
│       ├── checks.yml
│       ├── codex-review.yml
│       ├── release-drafter-config.yml
│       └── update-cache.yml
├── .gitignore
├── .husky/
│   ├── .gitignore
│   └── pre-commit
├── .lintstagedrc.json
├── .prettierrc
├── Alpine.Dockerfile
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Debian.Dockerfile
├── LICENSE
├── README.md
├── Ubuntu.Dockerfile
├── bin/
│   ├── darwin/
│   │   ├── arm64/
│   │   │   └── .gitkeep
│   │   └── x64/
│   │       └── .gitkeep
│   ├── linux/
│   │   ├── arm64/
│   │   │   └── .gitkeep
│   │   └── x64/
│   │       └── .gitkeep
│   └── win32/
│       └── x64/
│           └── .gitkeep
├── blazegraph-migration/
│   ├── README.md
│   ├── check_quad_num.sh
│   ├── export.sh
│   ├── import.sh
│   └── job_pool.sh
├── config/
│   ├── config.json
│   └── papertrail.yml
├── cucumber.js
├── dependencies.md
├── docker/
│   ├── docker-compose-alpine-blazegraph.yaml
│   ├── docker-compose-alpine-graphdb.yaml
│   ├── docker-compose-debian-blazegraph.yaml
│   ├── docker-compose-debian-graphdb.yaml
│   ├── docker-compose-ubuntu-blazegraph.yaml
│   └── docker-compose-ubuntu-graphdb.yaml
├── docs/
│   ├── openapi/
│   │   └── DKGv8.yaml
│   └── postman/
│       └── DKGv8.postman_collection.json
├── index.js
├── installer/
│   ├── README.md
│   └── installer.sh
├── ot-node.js
├── package.json
├── scripts/
│   ├── copy-assertions.js
│   ├── set-ask.js
│   ├── set-operator-fee.js
│   ├── set-stake.js
│   └── utils.js
├── src/
│   ├── commands/
│   │   ├── blockchain-event-listener/
│   │   │   ├── blockchain-event-listener-command.js
│   │   │   └── event-listener-command.js
│   │   ├── cleaners/
│   │   │   ├── ask-cleaner-command.js
│   │   │   ├── ask-response-cleaner-command.js
│   │   │   ├── batch-get-cleaner-command.js
│   │   │   ├── blockchain-event-cleaner-command.js
│   │   │   ├── cleaner-command.js
│   │   │   ├── commands-cleaner-command.js
│   │   │   ├── finality-cleaner-command.js
│   │   │   ├── finality-response-cleaner-command.js
│   │   │   ├── get-cleaner-command.js
│   │   │   ├── get-response-cleaner-command.js
│   │   │   ├── operation-id-cleaner-command.js
│   │   │   ├── pending-storage-cleaner-command.js
│   │   │   ├── publish-cleaner-command.js
│   │   │   ├── publish-response-cleaner-command.js
│   │   │   ├── update-cleaner-command.js
│   │   │   └── update-response-cleaner-command.js
│   │   ├── command-executor.js
│   │   ├── command-resolver.js
│   │   ├── command.js
│   │   ├── common/
│   │   │   ├── dial-peers-command.js
│   │   │   ├── log-public-addresses-command.js
│   │   │   ├── otnode-update-command.js
│   │   │   ├── send-telemetry-command.js
│   │   │   ├── send-transaction-command.js
│   │   │   ├── sharding-table-check-command.js
│   │   │   └── validate-asset-command.js
│   │   ├── paranet/
│   │   │   ├── paranet-sync-command.js
│   │   │   └── start-paranet-sync-commands.js
│   │   ├── protocols/
│   │   │   ├── ask/
│   │   │   │   ├── receiver/
│   │   │   │   │   └── v1.0.0/
│   │   │   │   │       └── v1-0-0-handle-ask-request-command.js
│   │   │   │   └── sender/
│   │   │   │       ├── ask-find-shard-command.js
│   │   │   │       ├── ask-schedule-messages-command.js
│   │   │   │       ├── network-ask-command.js
│   │   │   │       └── v1.0.0/
│   │   │   │           └── v1-0-0-ask-request-command.js
│   │   │   ├── common/
│   │   │   │   ├── find-curated-paranet-nodes-command.js
│   │   │   │   ├── find-shard-command.js
│   │   │   │   ├── handle-protocol-message-command.js
│   │   │   │   ├── network-protocol-command.js
│   │   │   │   ├── protocol-message-command.js
│   │   │   │   ├── protocol-request-command.js
│   │   │   │   ├── protocol-schedule-messages-command.js
│   │   │   │   └── validate-assertion-metadata-command.js
│   │   │   ├── finality/
│   │   │   │   ├── receiver/
│   │   │   │   │   ├── publish-finality-save-ack-command.js
│   │   │   │   │   └── v1.0.0/
│   │   │   │   │       └── v1-0-0-handle-finality-request-command.js
│   │   │   │   └── sender/
│   │   │   │       ├── finality-schedule-messages-command.js
│   │   │   │       ├── find-publisher-node-command.js
│   │   │   │       ├── network-finality-command.js
│   │   │   │       └── v1.0.0/
│   │   │   │           └── v1-0-0-finality-request-command.js
│   │   │   ├── get/
│   │   │   │   ├── receiver/
│   │   │   │   │   └── v1.0.0/
│   │   │   │   │       ├── v1-0-0-handle-batch-get-request-command.js
│   │   │   │   │       └── v1-0-0-handle-get-request-command.js
│   │   │   │   └── sender/
│   │   │   │       ├── batch-get-command.js
│   │   │   │       └── get-command.js
│   │   │   ├── publish/
│   │   │   │   ├── publish-finalization-command.js
│   │   │   │   ├── receiver/
│   │   │   │   │   └── v1.0.0/
│   │   │   │   │       └── v1-0-0-handle-store-request-command.js
│   │   │   │   └── sender/
│   │   │   │       └── publish-replication-command.js
│   │   │   └── update/
│   │   │       ├── receiver/
│   │   │       │   └── v1.0.0/
│   │   │       │       └── v1-0-0-handle-update-request-command.js
│   │   │       ├── sender/
│   │   │       │   ├── network-update-command.js
│   │   │       │   ├── update-find-shard-command.js
│   │   │       │   ├── update-schedule-messages-command.js
│   │   │       │   ├── update-validate-asset-command.js
│   │   │       │   └── v1.0.0/
│   │   │       │       └── v1-0-0-update-request-command.js
│   │   │       ├── update-assertion-command.js
│   │   │       └── update-validate-assertion-metadata-command.js
│   │   └── query/
│   │       └── query-command.js
│   ├── constants/
│   │   └── constants.js
│   ├── controllers/
│   │   ├── http-api/
│   │   │   ├── base-http-api-controller.js
│   │   │   ├── http-api-router.js
│   │   │   ├── v0/
│   │   │   │   ├── bid-suggestion-http-api-controller-v0.js
│   │   │   │   ├── get-http-api-controller-v0.js
│   │   │   │   ├── info-http-api-controller-v0.js
│   │   │   │   ├── local-store-http-api-controller-v0.js
│   │   │   │   ├── publish-http-api-controller-v0.js
│   │   │   │   ├── query-http-api-controller-v0.js
│   │   │   │   ├── request-schema/
│   │   │   │   │   ├── bid-suggestion-schema-v0.js
│   │   │   │   │   ├── get-schema-v0.js
│   │   │   │   │   ├── local-store-schema-v0.js
│   │   │   │   │   ├── publish-schema-v0.js
│   │   │   │   │   ├── query-schema-v0.js
│   │   │   │   │   └── update-schema-v0.js
│   │   │   │   ├── result-http-api-controller-v0.js
│   │   │   │   └── update-http-api-controller-v0.js
│   │   │   └── v1/
│   │   │       ├── .gitkeep
│   │   │       ├── ask-http-api-controller-v1.js
│   │   │       ├── direct-query-http-api-controller-v1.js
│   │   │       ├── finality-http-api-controller-v1.js
│   │   │       ├── get-http-api-controller-v1.js
│   │   │       ├── info-http-api-controller-v1.js
│   │   │       ├── local-store-http-api-controller-v1.js
│   │   │       ├── publish-http-api-controller-v1.js
│   │   │       ├── query-http-api-controller-v1.js
│   │   │       ├── request-schema/
│   │   │       │   ├── .gitkeep
│   │   │       │   ├── ask-schema-v1.js
│   │   │       │   ├── direct-query-schema-v1.js
│   │   │       │   ├── finality-schema-v1.js
│   │   │       │   ├── get-schema-v1.js
│   │   │       │   ├── local-store-schema-v1.js
│   │   │       │   ├── publish-schema-v1.js
│   │   │       │   └── query-schema-v1.js
│   │   │       └── result-http-api-controller-v1.js
│   │   └── rpc/
│   │       ├── ask-rpc-controller.js
│   │       ├── base-rpc-controller.js
│   │       ├── batch-get-rpc-controller.js
│   │       ├── finality-rpc-controller.js
│   │       ├── get-rpc-controller.js
│   │       ├── publish-rpc-controller.js
│   │       ├── rpc-router.js
│   │       └── update-rpc-controller.js
│   ├── logger/
│   │   └── logger.js
│   ├── migration/
│   │   ├── base-migration.js
│   │   ├── migration-executor.js
│   │   ├── redis-setup-migration.js
│   │   └── triple-store-user-configuration-migration.js
│   ├── modules/
│   │   ├── auto-updater/
│   │   │   ├── auto-updater-module-manager.js
│   │   │   └── implementation/
│   │   │       └── ot-auto-updater.js
│   │   ├── base-module-manager.js
│   │   ├── blockchain/
│   │   │   ├── blockchain-module-manager.js
│   │   │   └── implementation/
│   │   │       ├── base/
│   │   │       │   └── base-service.js
│   │   │       ├── eth/
│   │   │       │   └── eth-service.js
│   │   │       ├── gnosis/
│   │   │       │   └── gnosis-service.js
│   │   │       ├── hardhat/
│   │   │       │   └── hardhat-service.js
│   │   │       ├── ot-parachain/
│   │   │       │   └── ot-parachain-service.js
│   │   │       ├── polygon/
│   │   │       │   └── polygon-service.js
│   │   │       ├── web3-service-validator.js
│   │   │       └── web3-service.js
│   │   ├── blockchain-events/
│   │   │   ├── blockchain-events-module-manager.js
│   │   │   └── implementation/
│   │   │       ├── blockchain-events-service.js
│   │   │       └── ot-ethers/
│   │   │           └── ot-ethers.js
│   │   ├── http-client/
│   │   │   ├── http-client-module-manager.js
│   │   │   └── implementation/
│   │   │       ├── express-http-client.js
│   │   │       └── middleware/
│   │   │           ├── authentication-middleware.js
│   │   │           ├── authorization-middleware.js
│   │   │           ├── blockchain-id-midleware.js
│   │   │           ├── rate-limiter-middleware.js
│   │   │           └── request-validation-middleware.js
│   │   ├── module-config-validation.js
│   │   ├── network/
│   │   │   ├── implementation/
│   │   │   │   └── libp2p-service.js
│   │   │   └── network-module-manager.js
│   │   ├── repository/
│   │   │   ├── implementation/
│   │   │   │   └── sequelize/
│   │   │   │       ├── migrations/
│   │   │   │       │   ├── 20211117005500-create-commands.js
│   │   │   │       │   ├── 20211117005504-create-operation_ids.js
│   │   │   │       │   ├── 20220620100000-create-publish.js
│   │   │   │       │   ├── 20220620100005-create-publish-response.js
│   │   │   │       │   ├── 20220623125000-create-get.js
│   │   │   │       │   ├── 20220623125001-create-get-response.js
│   │   │   │       │   ├── 20220624020509-create-event.js
│   │   │   │       │   ├── 20220624103229-create-ability.js
│   │   │   │       │   ├── 20220624103610-create-role.js
│   │   │   │       │   ├── 20220624103615-create-user.js
│   │   │   │       │   ├── 20220624103658-create-token.js
│   │   │   │       │   ├── 20220624113659-create-role-ability.js
│   │   │   │       │   ├── 20220628113824-add-predefined-auth-entities.js
│   │   │   │       │   ├── 20221025120253-create-blockchain-event.js
│   │   │   │       │   ├── 20221025212800-create-shard.js
│   │   │   │       │   ├── 20221028125900-create-blockchain.js
│   │   │   │       │   ├── 20221114115524-update-publish-add-agreement-data.js
│   │   │   │       │   ├── 20221206183634-update-shard-types.js
│   │   │   │       │   ├── 20221214110050-update-commands-types.js
│   │   │   │       │   ├── 20221215130500-update-event-types.js
│   │   │   │       │   ├── 20230216112400-add-abilities.js
│   │   │   │       │   ├── 20230227094500-create-update.js
│   │   │   │       │   ├── 20230303131200-update-publish-remove-agreement-data.js
│   │   │   │       │   ├── 20230303131400-create-update-response.js
│   │   │   │       │   ├── 20230413194400-update-command-period-type.js
│   │   │   │       │   ├── 20230419140000-create-service-agreements.js
│   │   │   │       │   ├── 20230502110300-add-blockchain-event-index.js
│   │   │   │       │   ├── 20231201140100-event-add-blockchain-id.js
│   │   │   │       │   ├── 20231221131300-update-abilities.js
│   │   │   │       │   ├── 20233010122500-update-blockchain-id.js
│   │   │   │       │   ├── 20233011121700-remove-blockchain-info.js
│   │   │   │       │   ├── 20240126120000-shard-add-sha256blobl.js
│   │   │   │       │   ├── 20240201100000-remove-sha256Blob.js
│   │   │   │       │   ├── 20240221162000-add-service-agreement-data-source.js
│   │   │   │       │   ├── 20240429083058-create-paranet.js
│   │   │   │       │   ├── 20240529070000-create-missed-paranet-asset.js
│   │   │   │       │   ├── 20240923195000-create-publish-paranet.js
│   │   │   │       │   ├── 20240924161700-create-paranet-synced-asset.js
│   │   │   │       │   ├── 20240924205500-create-publish-paranet-response.js
│   │   │   │       │   ├── 20240927110000-change-paranet-synced-asset-nullable-assertions.js
│   │   │   │       │   ├── 20240930113000-add-error-message.js
│   │   │   │       │   ├── 20241011112100-remove-knowledge-asset-id.js
│   │   │   │       │   ├── 20241014164500-paranet-synced-asset-optional-fileds.js
│   │   │   │       │   ├── 20241023170300-add-synced-data-source.js
│   │   │   │       │   ├── 20241105150000-change-data-source-col-type-in-paranet-synced-asset.js
│   │   │   │       │   ├── 20241105160000-add-indexes-to-tables.js
│   │   │   │       │   ├── 20241125151200-rename-keyword-column-to-datasetroot-in-responses.js
│   │   │   │       │   ├── 20241126114400-add-commands-priority.js
│   │   │   │       │   ├── 20241129120000-add-commands-is_blocking.js
│   │   │   │       │   ├── 20241129125800-remove-datasetroot-response-table.js
│   │   │   │       │   ├── 20241201152000-update-blockchain-events.js
│   │   │   │       │   ├── 20241202214500-update-blockchain-table.js
│   │   │   │       │   ├── 20241203125000-create-finality.js
│   │   │   │       │   ├── 20241203125001-create-finality-response.js
│   │   │   │       │   ├── 20241211204400-rename-ask.js
│   │   │   │       │   ├── 20241211205400-create-finality-response.js
│   │   │   │       │   ├── 20241211205400-create-finality-status.js
│   │   │   │       │   ├── 20241211205400-create-finality.js
│   │   │   │       │   ├── 20241212122200-add-min-acks-reached-column.js
│   │   │   │       │   ├── 20241215122200-create-paranet-kc.js
│   │   │   │       │   ├── 20241226151800-prune-commands.js
│   │   │   │       │   ├── 20250401123500-truncate-commands-table.js
│   │   │   │       │   ├── 20250401155600-create-random-sampling-chanalage.js
│   │   │   │       │   ├── 20250408164300-create-triples-inserted-count-table.js
│   │   │   │       │   ├── 20250422150500-add-tx-hash-blockchain-event.js
│   │   │   │       │   ├── 20250509142900-create-batch-get.js
│   │   │   │       │   ├── 20250509142901-create-latest-synced-kc.js
│   │   │   │       │   └── 20250509142902-create-sync-missed-kc.js
│   │   │   │       ├── models/
│   │   │   │       │   ├── ability.js
│   │   │   │       │   ├── ask-response.js
│   │   │   │       │   ├── ask.js
│   │   │   │       │   ├── base-sync-missed-kc.js
│   │   │   │       │   ├── batch-get.js
│   │   │   │       │   ├── blockchain-event.js
│   │   │   │       │   ├── blockchain.js
│   │   │   │       │   ├── commands.js
│   │   │   │       │   ├── event.js
│   │   │   │       │   ├── finality-response.js
│   │   │   │       │   ├── finality-status.js
│   │   │   │       │   ├── finality.js
│   │   │   │       │   ├── get-response.js
│   │   │   │       │   ├── get.js
│   │   │   │       │   ├── gnosis-sync-missed-kc.js
│   │   │   │       │   ├── hardhat1-sync-missed-kc.js
│   │   │   │       │   ├── hardhat2-sync-missed-kc.js
│   │   │   │       │   ├── latest-synced-kc.js
│   │   │   │       │   ├── missed-paranet-asset.js
│   │   │   │       │   ├── operation_ids.js
│   │   │   │       │   ├── otp-sync-missed-kc.js
│   │   │   │       │   ├── paranet-kc.js
│   │   │   │       │   ├── paranet-synced-asset.js
│   │   │   │       │   ├── paranet.js
│   │   │   │       │   ├── publish-paranet-response.js
│   │   │   │       │   ├── publish-paranet.js
│   │   │   │       │   ├── publish-response.js
│   │   │   │       │   ├── publish.js
│   │   │   │       │   ├── random-sampling-challenge.js
│   │   │   │       │   ├── role-ability.js
│   │   │   │       │   ├── role.js
│   │   │   │       │   ├── shard.js
│   │   │   │       │   ├── token.js
│   │   │   │       │   ├── triples-inserted-count.js
│   │   │   │       │   ├── update-response.js
│   │   │   │       │   ├── update.js
│   │   │   │       │   └── user.js
│   │   │   │       ├── repositories/
│   │   │   │       │   ├── blockchain-event-repository.js
│   │   │   │       │   ├── blockchain-missed-kc-repository.js
│   │   │   │       │   ├── blockchain-repository.js
│   │   │   │       │   ├── command-repository.js
│   │   │   │       │   ├── event-repository.js
│   │   │   │       │   ├── finality-status-repository.js
│   │   │   │       │   ├── inserted-triples-repository.js
│   │   │   │       │   ├── latest-synced-kc-repository.js
│   │   │   │       │   ├── missed-paranet-asset-repository.js
│   │   │   │       │   ├── operation-id-repository.js
│   │   │   │       │   ├── operation-repository.js
│   │   │   │       │   ├── operation-response.js
│   │   │   │       │   ├── paranet-kc-repository.js
│   │   │   │       │   ├── paranet-repository.js
│   │   │   │       │   ├── paranet-synced-asset-repository.js
│   │   │   │       │   ├── random-sampling-challenge-repository.js
│   │   │   │       │   ├── shard-repository.js
│   │   │   │       │   ├── token-repository.js
│   │   │   │       │   └── user-repository.js
│   │   │   │       ├── sequelize-migrator.js
│   │   │   │       └── sequelize-repository.js
│   │   │   └── repository-module-manager.js
│   │   ├── telemetry/
│   │   │   ├── implementation/
│   │   │   │   └── quest-telemetry.js
│   │   │   └── telemetry-module-manager.js
│   │   ├── triple-store/
│   │   │   ├── implementation/
│   │   │   │   ├── ot-blazegraph/
│   │   │   │   │   └── ot-blazegraph.js
│   │   │   │   ├── ot-fuseki/
│   │   │   │   │   └── ot-fuseki.js
│   │   │   │   ├── ot-graphdb/
│   │   │   │   │   └── ot-graphdb.js
│   │   │   │   ├── ot-neptune/
│   │   │   │   │   └── ot-neptune.js
│   │   │   │   └── ot-triple-store.js
│   │   │   └── triple-store-module-manager.js
│   │   └── validation/
│   │       ├── implementation/
│   │       │   └── merkle-validation.js
│   │       └── validation-module-manager.js
│   └── service/
│       ├── ask-service.js
│       ├── auth-service.js
│       ├── batch-get-service.js
│       ├── blockchain-events-service.js
│       ├── claim-rewards-service.js
│       ├── crypto-service.js
│       ├── dependency-injection.js
│       ├── file-service.js
│       ├── finality-service.js
│       ├── get-service.js
│       ├── json-schema-service.js
│       ├── messaging-service.js
│       ├── operation-id-service.js
│       ├── operation-service.js
│       ├── paranet-service.js
│       ├── pending-storage-service.js
│       ├── proofing-service.js
│       ├── protocol-service.js
│       ├── publish-service.js
│       ├── sharding-table-service.js
│       ├── signature-service.js
│       ├── sync-service.js
│       ├── triple-store-service.js
│       ├── ual-service.js
│       ├── update-service.js
│       ├── util/
│       │   ├── jwt-util.js
│       │   └── string-util.js
│       └── validation-service.js
├── test/
│   ├── assertions/
│   │   └── assertions.js
│   ├── bdd/
│   │   ├── features/
│   │   │   ├── bid-suggestion.feature
│   │   │   ├── get-errors.feature
│   │   │   ├── publish-errors.feature
│   │   │   ├── publish.feature
│   │   │   ├── smoke.feature
│   │   │   └── update-errors.feature
│   │   ├── run-bdd.sh
│   │   └── steps/
│   │       ├── api/
│   │       │   ├── bid-suggestion.mjs
│   │       │   ├── get.mjs
│   │       │   ├── info.mjs
│   │       │   ├── publish.mjs
│   │       │   ├── resolve.mjs
│   │       │   └── update.mjs
│   │       ├── blockchain.mjs
│   │       ├── common.mjs
│   │       ├── hooks.mjs
│   │       └── lib/
│   │           ├── local-blockchain.mjs
│   │           └── ot-node-process.mjs
│   ├── modules/
│   │   └── telemetry/
│   │       ├── config.json
│   │       └── telemetry.js
│   ├── unit/
│   │   ├── api/
│   │   │   └── http-api-router.test.js
│   │   ├── commands/
│   │   │   └── operation-id-cleaner-command.test.js
│   │   ├── controllers/
│   │   │   └── publish-http-api-controller-v1.test.js
│   │   ├── middleware/
│   │   │   ├── authentication-middleware.test.js
│   │   │   └── authorization-middleware.test.js
│   │   ├── mock/
│   │   │   ├── blockchain-module-manager-mock.js
│   │   │   ├── command-executor-mock.js
│   │   │   ├── event-emitter-mock.js
│   │   │   ├── http-client-module-manager-mock.js
│   │   │   ├── json-schema-service-mock.js
│   │   │   ├── network-module-manager-mock.js
│   │   │   ├── operation-id-service-mock.js
│   │   │   ├── repository-module-manager-mock.js
│   │   │   └── validation-module-manager-mock.js
│   │   ├── modules/
│   │   │   ├── repository/
│   │   │   │   ├── config.json
│   │   │   │   └── repository.test.js
│   │   │   ├── triple-store/
│   │   │   │   ├── config.json
│   │   │   │   └── triple-store.test.js
│   │   │   └── validation/
│   │   │       ├── config.json
│   │   │       └── validation-module-manager.test.js
│   │   ├── service/
│   │   │   ├── auth-service.test.js
│   │   │   ├── get-service.test.js
│   │   │   ├── operation-id-service-cache.test.js
│   │   │   ├── operation-service.test.js
│   │   │   ├── publish-service.test.js
│   │   │   ├── sharding-table-service.test.js
│   │   │   ├── update-service.test.js
│   │   │   ├── util/
│   │   │   │   └── jwt-util.test.js
│   │   │   └── validation-service.test.js
│   │   └── sparlql-query-service.test.js
│   └── utilities/
│       ├── dkg-client-helper.mjs
│       ├── http-api-helper.mjs
│       ├── steps-utils.mjs
│       └── utilities.js
├── tools/
│   ├── local-network-setup/
│   │   ├── .origintrail_noderc_template.json
│   │   ├── README.md
│   │   ├── generate-config-files.js
│   │   ├── run-local-blockchain.js
│   │   ├── setup-linux-environment.sh
│   │   └── setup-macos-environment.sh
│   ├── ot-parachain-account-mapping/
│   │   └── create-account-mapping-signature.js
│   ├── substrate-accounts-mapping/
│   │   ├── README.md
│   │   └── accounts-mapping.js
│   └── token-generation.js
└── v8-data-migration/
    ├── abi/
    │   ├── ContentAssetStorage.json
    │   └── ContentAssetStorageV2.json
    ├── blockchain-utils.js
    ├── constants.js
    ├── logger.js
    ├── run-data-migration.sh
    ├── sqlite-utils.js
    ├── triple-store-utils.js
    ├── v8-data-migration-utils.js
    ├── v8-data-migration.js
    └── validation.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .codex/review-prompt.md
================================================
# PR Review Instructions

You are a senior code reviewer for the OriginTrail DKG Engine (ot-node). Your job is to review a pull request diff and produce structured, actionable feedback as inline comments on specific changed lines. You review like a staff engineer who cares deeply about code quality, readability, and simplicity.

## Context Files

Read these files before reviewing:

1. **`pr-diff.patch`** — The PR diff (generated at runtime). This is the primary input.

You may read other files in the repository **only** to understand how code changed in the diff is called or referenced. Do not review, comment on, or mention code in files that are not part of the diff. All review comments and the summary must be strictly scoped to changes introduced by this PR's diff — nothing else.

## Project Architecture

- **Node.js** application (ESM modules, `.js` and `.mjs` files)
- **Awilix** dependency injection container for service management
- **libp2p** for peer-to-peer networking and message passing
- **Ethers.js / Web3.js** for multi-chain blockchain interactions (NeuroWeb, Gnosis, Base)
- **Sequelize** ORM for local SQLite database
- **Blazegraph** triple store for RDF/SPARQL knowledge graph operations
- **Pino** for structured logging
- **Command pattern** for async operations (publish, get, query)
- **BDD tests** using Cucumber.js with Gherkin feature files

### Key Directories

- `src/commands/` — Command implementations (publish, get, query protocols)
- `src/modules/` — Core modules (blockchain, network, repository, triple-store)
- `src/service/` — Service layer (pending-storage, operation, validation)
- `src/constants/` — System-wide constants and error definitions
- `test/bdd/` — Cucumber BDD tests (features, steps, utilities)

## Review Philosophy

Most PR issues in this codebase are maintainability problems — bloat, poor naming, scattered validation, hardcoded values, pattern drift. These matter a lot.

However, review priority is always **severity-first**:

1. **Blockers first** — correctness, security, auth, data integrity, blockchain safety.
2. **Then maintainability** — readability, simplicity, pattern conformance.

When both exist, report blockers first.

### Review Method

Do three passes:

1. **Context + risk-map pass (mandatory)** — Start from diff hunks, then read surrounding or full touched files when needed to evaluate maintainability, coupling, naming, and extraction opportunities. Use this context to assess changed behavior, not to run unrelated file-wide audits.
2. **Blockers pass** — Scan for correctness bugs, security issues, blockchain transaction safety, gas handling issues, data integrity risks, and missing tests for changed behavior. These are `🔴 Bug` comments.
3. **Maintainability pass** — Scan for code bloat, readability issues, naming problems, pattern violations, hardcoded values, and architecture drift in touched areas. These are `🟡 Issue`, `🔵 Nit`, or `💡 Suggestion` comments.

### Comment Gate

Before posting any comment, verify all four conditions:

1. **Introduced by this diff** — The issue is introduced or materially worsened by the changes in this PR, not pre-existing.
2. **Materially impactful** — The issue affects correctness, security, readability, or maintainability in a meaningful way. Not a theoretical concern.
3. **Concrete fix direction** — You can suggest a specific fix or clear direction. If you can only say "this seems off" without a concrete suggestion, do not comment.
4. **Scope fit** — If the issue is mainly in pre-existing code, the PR must touch the same function/module and fixing it must directly simplify, de-risk, or de-duplicate the new/changed code.

If any check fails, skip the comment.
Every comment must be traceable to changed behavior in this PR and anchored to a right-side line present in `pr-diff.patch`. Prefer added/modified lines; use nearby unchanged hunk lines only when necessary to explain a directly related issue.

**Uncertainty guard:** If you are not certain an issue is real and cannot verify it from the diff and allowed context, do not label it `🔴 Bug`. Downgrade to `🟡 Issue` or `💡 Suggestion`, or skip it entirely.

**Deduplication:** One comment per root cause. If the same pattern repeats across multiple lines, comment on the first occurrence and note "same pattern at lines X, Y, Z." Aim for a maximum of ~10 comments, highest impact first.

## What to Review

### Pass 1: Blockers

#### Correctness

- Logic errors, off-by-one, null/undefined handling, incorrect assumptions, race conditions.
- Boundary conditions — empty arrays, null inputs, zero values, maximum values.
- Error handling — swallowed errors, missing error propagation, unhelpful error messages. Do not flag missing error handling for internal code that cannot reasonably fail.
- Async/await correctness — unhandled promise rejections, missing awaits, race conditions in concurrent operations.
- Nonce management — verify blockchain nonce allocation and retry logic does not create orphan transactions or nonce gaps.

#### Security

- Injection risks (SQL, command, XSS) when handling user input.
- Hardcoded secrets — API keys, passwords, private keys, tokens in code. Private keys must never appear in source.
- Missing input validation at system boundaries (user input, external APIs, RPC responses). Not for internal function calls.
- Auth bypass, privilege escalation, or missing authorization checks.
- RPC endpoint exposure — verify no private/paid RPC URLs or API keys are hardcoded in committed code.

#### Blockchain Safety

- Gas handling — verify gas price calculations, multipliers, and buffers are reasonable and consistent across testnet/mainnet.
- Transaction retry logic — ensure retries don't waste gas, create duplicate transactions, or cause nonce conflicts.
- Wallet/key management — no hardcoded private keys, proper key isolation between environments.
- Multi-chain consistency — changes affecting one chain should be verified for impact on other supported chains (NeuroWeb, Gnosis, Base).
- BigNumber handling — verify arithmetic operations use BigNumber-safe methods, no precision loss from floating point.

#### Tests for Changed Behavior

- New behavior must have corresponding tests covering core functionality and error handling.
- Bug fixes must include a regression test that would have caught the original bug.
- Changed behavior must have updated tests reflecting the new expectations.
- If tests are present but brittle (testing implementation details rather than behavior), flag it.

Missing tests for changed behavior are blockers (`🔴 Bug`) only when the change affects user-facing behavior, API contracts, or data integrity. Missing tests for internal refactors or trivial changes are `🟡 Issue`.

### Pass 2: Maintainability

#### Code Bloat and Unnecessary Complexity

- **Excessive code** — More lines than necessary. Could this be done in fewer lines without sacrificing clarity?
- **Over-engineering** — Abstractions, helpers, or utilities for one-time operations. Premature generalization.
- **Dead code** — Unused variables, unreachable branches, commented-out code, leftover debug logging.
- **Duplicate code** — Same logic repeated instead of extracted. Do not suggest extraction for only 2-3 similar lines unless the repeated logic encodes a correctness invariant across multiple paths.

#### Readability and Naming

- **Confusing variable/function names** — Names that don't describe what the thing is or does. Generic names like `data`, `result`, `item`, `temp`, `val` when a specific name would be clearer.
- **Misleading names** — Names that suggest different behavior than what the code does.
- **Inconsistent naming** — Not following conventions in the rest of the codebase.
- **Long functions** — Functions doing too many things. If you need a comment to explain a section, it should probably be its own function.
- **Deep nesting** — More than 2-3 levels. Suggest early returns, guard clauses, or extraction.
- **Unclear control flow** — Complex conditionals that could be simplified or decomposed.

#### Hardcoded Values and Magic Constants

Flag only when the value is:

- **Reused 3+ times** in touched files or the diff — should be a named constant.
- **Domain-significant** — timeout values, retry counts, gas multipliers, RPC URLs, network message timeouts. Even if used once, these belong in constants or configuration.

Do not flag one-off numeric literals that are self-explanatory in context (e.g., `array.slice(0, 2)`, `Math.round(x * 100) / 100`).

#### Performance (Only Obvious Issues)

- N+1 queries — database queries inside loops.
- Blocking operations in async contexts — synchronous I/O in async code.
- Unnecessary work in hot paths — redundant allocations, repeated computations.
- Memory leaks — Maps/Sets/caches that grow unboundedly without cleanup.

## What NOT to Review

- Formatting or style — ESLint and Prettier handle this.
- Things that are clearly intentional design choices backed by existing patterns.
- Pre-existing issues in unchanged code outside the diff.
- Pre-existing issues in touched files when the PR does not introduce/worsen them.
- Adding documentation unless a public API is clearly undocumented.
- Repository-wide or file-wide audits not required by the changed behavior.
- Test configuration files (cucumber.js, .eslintrc) unless they introduce issues.

## Comment Format

Use severity prefixes:

- `🔴 Bug:` — Correctness error, security issue, blockchain safety issue, data integrity risk. Will cause incorrect behavior.
- `🟡 Issue:` — Code quality problem that should be fixed. Bloated code, bad naming, pattern violation, missing tests.
- `🔵 Nit:` — Minor improvement, optional.
- `💡 Suggestion:` — Alternative approach worth considering.

Be specific, be concise, explain why. One clear sentence with a concrete fix is better than a paragraph of theory.

## Output Format

Return raw JSON only. No markdown fences, no prose before or after the JSON object. Your output MUST be valid JSON matching the provided output schema. Example:

```json
{
  "summary": "This PR improves blockchain error handling but introduces a potential gas waste issue in the retry loop and has leftover debug logging.",
  "comments": [
    {
      "path": "src/modules/blockchain/implementation/web3-service.js",
      "line": 142,
      "body": "🔴 Bug: Gas price is bumped on every retry including network errors, which wastes gas. Only bump for nonce conflicts and execution errors. Add a `shouldBumpGas` guard."
    },
    {
      "path": "src/commands/protocols/publish/sender/publish-replication-command.js",
      "line": 58,
      "body": "🟡 Issue: `console.log` debug statement left in production code. Use `this.logger.debug()` instead or remove it."
    }
  ]
}
```

The `line` field must refer to the line number in the new version of the file (right side of the diff), and it must be a line that actually appears in the diff hunks. Do not comment on lines outside the diff.

## Summary

Write a brief (2–4 sentence) overall assessment in the `summary` field covering **only** what this PR's diff changes. Do not mention code, packages, or behavior outside the diff. Lead with blockers if any exist. Mention whether the PR is clean/minimal or has code quality issues. Include one sentence on maintainability direction in touched areas (improved / neutral / worsened, and why). If the PR looks good, say so.


================================================
FILE: .codex/review-schema.json
================================================
{
  "type": "object",
  "properties": {
    "summary": {
      "type": "string",
      "description": "Brief overall assessment of the PR (2-4 sentences)"
    },
    "comments": {
      "type": "array",
      "description": "Inline review comments on specific changed lines",
      "items": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "File path relative to repository root"
          },
          "line": {
            "type": "integer",
            "minimum": 1,
            "description": "Line number in the new version of the file (must be within the diff)"
          },
          "body": {
            "type": "string",
            "description": "Review comment with severity prefix"
          }
        },
        "required": ["path", "line", "body"],
        "additionalProperties": false
      }
    }
  },
  "required": ["summary", "comments"],
  "additionalProperties": false
}


================================================
FILE: .eslintrc.cjs
================================================
module.exports = {
    env: {
        es6: true,
        node: true,
    },
    extends: ['airbnb/base', 'prettier'],
    parserOptions: {
        sourceType: 'module',
        ecmaVersion: 'latest',
    },
    rules: {
        'linebreak-style': ['error', 'unix'],
        'class-methods-use-this': 0,
        'consistent-return': 0,
        'no-restricted-syntax': 0,
        'guard-for-in': 0,
        'no-console': 'warn',
        'no-continue': 0,
        'no-underscore-dangle': 0,
        'import/extensions': 0,
    },
    overrides: [
        {
            files: ['*.test.js', '*.spec.js'],
            rules: {
                'no-unused-expressions': 'off',
            },
        },
        {
            files: ['*-mock.js', '*.test.js'],
            rules: {
                'no-empty-function': 'off',
                'no-unused-vars': 'off',
            },
        },
    ],
};


================================================
FILE: .github/CODEOWNERS
================================================
* @branarakic @u-hubar @Mihajlo-Pavlovic


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report_v8.md
================================================
---
name: Bug report for V8 ot-node
about: Create an issue report
title: ''
labels: ''
assignees: ''

---

## Issue description

## Expected behavior

## Actual behavior

## Steps to reproduce the problem

  1.
  2.
  3.

## Specifications

  - Node version:
  - Platform:
  - Node wallet:
  - Node libp2p identity:

## Contact details
  - Email:

## Error logs


## Disclaimer

Please be aware that the issue reported on a public repository allows everyone to see your node logs, node details, and contact details. If you have any sensitive information, feel free to share it by sending an email to [tech@origin-trail.com](tech@origin-trail.com).


================================================
FILE: .github/actions/setup/action.yml
================================================
name: setup

runs:
  using: composite
  steps:
    - name: Setup NodeJS
      id: nodejs
      uses: actions/setup-node@v3
      with:
        node-version: 20.x
        cache: npm

    - name: Cache node modules
      id: cache-node-modules
      uses: actions/cache@v3
      with:
        path: '**/node_modules'
        key: ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }}
        restore-keys: |
            ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }}
            ${{ runner.os }}-node-modules-

    - name: Cache Blazegraph
      id: cache-blazegraph
      uses: actions/cache@v3
      with:
        path: blazegraph.jar
        key: ${{ runner.os }}-blazegraph-${{ hashFiles('blazegraph.jar') }}
        restore-keys: ${{ runner.os }}-blazegraph-

    - if: steps.cache-node-modules.outputs.cache-hit != 'true'
      name: Install dependencies & compile contracts
      shell: bash
      run: |
        npm install
        npm install --save-dev rollup@4.40.0
        npm explore dkg-evm-module -- npm run compile
    
    - if: steps.cache-blazegraph.outputs.cache-hit != 'true'
      name: Download Blazegraph
      shell: bash
      run: wget https://github.com/blazegraph/database/releases/latest/download/blazegraph.jar


================================================
FILE: .github/pull_request_template.md
================================================
# Description

Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.

Fixes # (issue)

## Type of change

Please delete options that are not relevant.

- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] This change requires a documentation update

# How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration

- [ ] Test A
- [ ] Test B

# Checklist:

- [ ] My code follows the style guidelines of this project
- [ ] I have performed a self-review of my own code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream modules


================================================
FILE: .github/release-drafter-template.yml
================================================
name-template: 'OriginTrail Release $NEXT_PATCH_VERSION'
tag-template: "$NEXT_PATCH_VERSION"
version-template: "v$MAJOR.$MINOR.$PATCH"
categories:
  - title: '🚀 Features'
    labels:
      - 'enhancement'
  - title: '🐛 Bug Fixes'
    labels:
      - 'bug'
  - title: '🧰 Maintenance'
    labels:
      - 'internal process'
  - title: '⚠️ Breaking changes'
    labels:
      - 'breaking change'
change-template: '- $TITLE (#$NUMBER)'
template: |
  # Changes

  $CHANGES

================================================
FILE: .github/workflows/check-package-lock.yml
================================================
name: Check Package Lock File

permissions:
  contents: read

concurrency:
  group: check-package-lock-${{ github.ref }}
  cancel-in-progress: true

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - "**"

jobs:
  verify-package-lock:
    name: Verify package-lock.json
    runs-on: ubuntu-latest
    timeout-minutes: 5

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Check if package.json dependencies were changed
        id: check-changes
        run: |
          if [ "${{ github.event_name }}" = "pull_request" ]; then
            BASE_SHA="${{ github.event.pull_request.base.sha }}"
          else
            BASE_SHA="${{ github.event.before }}"
          fi

          if ! git diff --name-only "$BASE_SHA" HEAD | grep -q '^package\.json$'; then
            echo "package_json_changed=false" >> "$GITHUB_OUTPUT"
            echo "package.json was NOT changed, skipping lock file validation"
            exit 0
          fi

          echo "package_json_changed=true" >> "$GITHUB_OUTPUT"
          echo "package.json was changed, will validate lock file"

      - name: Check if package-lock.json exists
        run: |
          if [ ! -f "package-lock.json" ]; then
            echo "ERROR: package-lock.json file is missing from the repository"
            echo "This file is required to ensure consistent dependency versions across all environments"
            echo "Please ensure package-lock.json is committed with your changes"
            exit 1
          fi
          echo "SUCCESS: package-lock.json file is present"

      - name: Verify package-lock.json is not empty
        run: |
          if [ ! -s "package-lock.json" ]; then
            echo "ERROR: package-lock.json file exists but is empty"
            echo "Please run 'npm install' to regenerate the lock file"
            exit 1
          fi
          echo "SUCCESS: package-lock.json file is valid and not empty"

      - name: Setup Node.js
        if: steps.check-changes.outputs.package_json_changed == 'true'
        uses: actions/setup-node@v4
        with:
          node-version: '22'

      - name: Validate package-lock.json is in sync
        if: steps.check-changes.outputs.package_json_changed == 'true'
        run: npm ci --dry-run --ignore-scripts


================================================
FILE: .github/workflows/checks.yml
================================================
name: checks

on:
  pull_request:
    types: [opened, reopened, synchronize]
  push:
    branches:
      - '**'

permissions:
  contents: read

env:
  REPOSITORY_PASSWORD: password
  JWT_SECRET: aTx13FzDG+85j9b5s2G7IBEc5SJNJZZLPLe7RF8hu1xKgRKj46YFRx/z7fJi7iF2NnL7SHcxTzq7TySuPKWkdg/AYKEMD2p1I++qPYFHqg8KQeLArGjCYiqtf43i1Fgtya8z9qJXyegogMz/jYori2BJ8v6b4K3GkAw3XxiO7VaaEYktOp8qsRDcN3b+bITMZqztDvZdWp4EnViGjoES7fRFhKm/d/2C8URnQyGm6xgTR3xTfAjy7+milGmoPA0KU0nu+GsZIhOfeVc9Z2nfxOK/1JQykpjeBhNDYTOr31yW/xdvoW0Kq0PZ6JmM+yezLoyQXcYjavZ+X7cXjbREQg==

concurrency:
  group: checks-${{ github.ref }}
  cancel-in-progress: true

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Set up environment
        uses: ./.github/actions/setup

      - name: Run linter
        run: npm run lint

  bdd-smoke:
    if: github.event_name == 'push'
    runs-on: ubuntu-latest
    services:
      mysql:
        image: mysql:5.7
        env:
          MYSQL_DATABASE: operationaldb
          MYSQL_USER: node
          MYSQL_PASSWORD: password
          MYSQL_ROOT_PASSWORD: password
        ports:
          - 3306:3306
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
      redis:
        image: redis:7
        ports:
          - 6379:6379
        options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Set up environment
        uses: ./.github/actions/setup

      - name: Start Blazegraph
        run: /usr/bin/java -Djava.awt.headless=true -jar blazegraph.jar &

      - name: Wait for Blazegraph
        run: |
          for i in $(seq 1 30); do
            if curl -sf http://localhost:9999/blazegraph/status > /dev/null; then
              echo "Blazegraph is ready"
              exit 0
            fi
            sleep 2
          done
          echo "Blazegraph did not start in time"
          exit 1

      - name: Run BDD smoke tests
        run: |
          npx cucumber-js \
            --config cucumber.js \
            --tags "@smoke" \
            --format progress \
            test/bdd/ \
            --import test/bdd/steps/ \
            --exit

      - name: Upload log files
        if: '!cancelled()'
        uses: actions/upload-artifact@v4
        with:
          name: bdd-smoke-logs
          path: ./test/bdd/log/

  bdd-tests:
    if: github.event_name == 'pull_request'
    runs-on: ubuntu-latest
    services:
      mysql:
        image: mysql:5.7
        env:
          MYSQL_DATABASE: operationaldb
          MYSQL_USER: node
          MYSQL_PASSWORD: password
          MYSQL_ROOT_PASSWORD: password
        ports:
          - 3306:3306
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
      redis:
        image: redis:7
        ports:
          - 6379:6379
        options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Set up environment
        uses: ./.github/actions/setup

      - name: Start Blazegraph
        run: /usr/bin/java -Djava.awt.headless=true -jar blazegraph.jar &

      - name: Wait for Blazegraph
        run: |
          for i in $(seq 1 30); do
            if curl -sf http://localhost:9999/blazegraph/status > /dev/null; then
              echo "Blazegraph is ready"
              exit 0
            fi
            sleep 2
          done
          echo "Blazegraph did not start in time"
          exit 1

      - name: Run full BDD tests
        run: |
          npx cucumber-js \
            --config cucumber.js \
            --tags "not @ignore" \
            --format progress \
            test/bdd/ \
            --import test/bdd/steps/ \
            --exit

      - name: Upload log files
        if: '!cancelled()'
        uses: actions/upload-artifact@v4
        with:
          name: bdd-tests-logs
          path: ./test/bdd/log/


================================================
FILE: .github/workflows/codex-review.yml
================================================
name: Codex PR Review

on:
  pull_request:
    types: [opened, synchronize, reopened]

concurrency:
  group: codex-review-${{ github.event.pull_request.number }}
  cancel-in-progress: true

permissions:
  contents: read
  pull-requests: write

jobs:
  review:
    name: Codex Review
    runs-on: ubuntu-latest
    timeout-minutes: 15
    # Skip fork PRs — they cannot access repository secrets
    if: github.event.pull_request.head.repo.full_name == github.repository

    steps:
      - name: Checkout PR merge commit
        uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
        with:
          ref: refs/pull/${{ github.event.pull_request.number }}/merge
          fetch-depth: 0

      - name: Generate PR diff
        run: git diff ${{ github.event.pull_request.base.sha }}...HEAD > pr-diff.patch

      - name: Allow unprivileged user namespaces for bubblewrap sandbox
        run: |
          if sudo sysctl -n kernel.apparmor_restrict_unprivileged_userns 2>/dev/null; then
            sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
          fi

      - name: Run Codex review
        id: codex
        uses: openai/codex-action@f5c0ca71642badb34c1e66321d8d85685a0fa3dc # v1
        with:
          openai-api-key: ${{ secrets.OPENAI_API_KEY }}
          prompt-file: .codex/review-prompt.md
          output-schema-file: .codex/review-schema.json
          effort: high
          sandbox: read-only

      - name: Post PR review with inline comments
        uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7
        env:
          REVIEW_JSON: ${{ steps.codex.outputs.final-message }}
        with:
          script: |
            let review;
            try {
              review = JSON.parse(process.env.REVIEW_JSON);
            } catch (e) {
              console.error('Failed to parse Codex output:', e.message);
              console.error('Raw output:', process.env.REVIEW_JSON?.slice(0, 500));
              await github.rest.pulls.createReview({
                owner: context.repo.owner,
                repo: context.repo.repo,
                pull_number: context.issue.number,
                body: '⚠️ Codex review failed to produce valid JSON output. Check the [workflow logs](' +
                  `${process.env.GITHUB_SERVER_URL}/${context.repo.owner}/${context.repo.repo}/actions/runs/${process.env.GITHUB_RUN_ID}) for details.`,
                event: 'COMMENT',
                comments: [],
              });
              return;
            }

            // Fetch all changed files (paginated for large PRs)
            const files = await github.paginate(
              github.rest.pulls.listFiles,
              {
                owner: context.repo.owner,
                repo: context.repo.repo,
                pull_number: context.issue.number,
                per_page: 100,
              }
            );

            // Build set of valid (path:line) pairs from right-side diff hunk lines
            // (added + context). This keeps comments bound to changed areas.
            const validLines = new Set();
            for (const file of files) {
              // Skip binary/large/truncated files with no patch
              if (!file.patch) continue;

              const lines = file.patch.split('\n');
              let currentLine = 0;
              for (const line of lines) {
                const hunkMatch = line.match(/^@@ -\d+(?:,\d+)? \+(\d+)/);
                if (hunkMatch) {
                  currentLine = parseInt(hunkMatch[1], 10);
                  continue;
                }
                // Added lines are valid comment targets
                if (line.startsWith('+')) {
                  validLines.add(`${file.filename}:${currentLine}`);
                  currentLine++;
                  continue;
                }
                // Deleted lines don't exist in the new file
                if (line.startsWith('-')) continue;
                // Ignore hunk metadata lines
                if (line.startsWith('\\')) continue;
                // Context lines on the right side are also valid targets
                validLines.add(`${file.filename}:${currentLine}`);
                currentLine++;
              }
            }

            // Partition comments into valid (on right-side diff lines) and dropped
            const comments = Array.isArray(review.comments) ? review.comments : [];
            const validComments = [];
            const droppedComments = [];

            for (const comment of comments) {
              const key = `${comment.path}:${comment.line}`;
              if (validLines.has(key)) {
                validComments.push({
                  path: comment.path,
                  line: comment.line,
                  body: comment.body,
                  side: 'RIGHT',
                });
              } else {
                droppedComments.push(comment);
              }
            }

            // Build review body from summary only.
            // Intentionally do NOT publish out-of-diff comments.
            let body = review.summary || 'Codex review complete.';

            // Post the review
            await github.rest.pulls.createReview({
              owner: context.repo.owner,
              repo: context.repo.repo,
              pull_number: context.issue.number,
              body,
              event: 'COMMENT',
              comments: validComments,
            });

            console.log(`Review posted: ${validComments.length} inline comments, ${droppedComments.length} dropped out-of-diff comments`);


================================================
FILE: .github/workflows/release-drafter-config.yml
================================================
name: release-drafter

on:
  push:
    branches:
      - develop

jobs:
  update_release_draft:
    runs-on: ubuntu-latest
    steps:
      # Drafts your next Release notes as Pull Requests are merged into "master"
      - uses: release-drafter/release-drafter@v6
        with:
          # (Optional) specify config name to use, relative to .github/. Default: release-drafter.yml
          config-name: release-drafter-template.yml
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .github/workflows/update-cache.yml
================================================
name: update-cache

on:
  push:
    branches:
      - v8/develop

concurrency:
  group: update-cache-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build-cache:
    name: Build Cache
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Set up environment
        uses: ./.github/actions/setup


================================================
FILE: .gitignore
================================================
# Logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.idea
.origintrail_noderc
.*_origintrail_noderc.json

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/

# TypeScript v1 declaration files
typings/

# TypeScript cache
*.tsbuildinfo

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env
.env.test

# parcel-bundler cache (https://parceljs.org/)
.cache

# Next.js build output
.next

# Nuxt.js build / generate output
.nuxt
dist

# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and *not* Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public

# vuepress build output
.vuepress/dist

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/

# TernJS port file
.tern-port

.DS_Store

# Test data folders
test-data*

# Data folders
data*

# VS code files
.vscode/launch.json

# KAs Distribution Simulation Script Plots
tools/knowledge-assets-distribution-simulation/plots/**/*jpg

node_modules
.env

# Hardhat files
/cache
/artifacts

# TypeChain files
/typechain
/typechain-types

# solidity-coverage files
/coverage
/coverage.json

# Hardhat Ignition default folder for deployments against a local node
ignition/deployments/chain-31337

# Redis
dump.rdb

# Blazegraph journal files
*.jnl


================================================
FILE: .husky/.gitignore
================================================
_


================================================
FILE: .husky/pre-commit
================================================
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npm run lint-staged


================================================
FILE: .lintstagedrc.json
================================================
{
  "*.{js, json}": ["prettier --write", "eslint"]
}


================================================
FILE: .prettierrc
================================================
{
  "semi": true,
  "printWidth": 100,
  "singleQuote": true,
  "trailingComma": "all",
  "arrowParens": "always",
  "tabWidth": 4,
  "bracketSpacing": true
}


================================================
FILE: Alpine.Dockerfile
================================================
FROM node:14-alpine3.15

LABEL maintainer="OriginTrail"
ENV NODE_ENV=testnet

#Install Papertrail
RUN wget https://github.com/papertrail/remote_syslog2/releases/download/v0.20/remote_syslog_linux_amd64.tar.gz
RUN tar xzf ./remote_syslog_linux_amd64.tar.gz && cd remote_syslog && cp ./remote_syslog /usr/local/bin

COPY config/papertrail.yml /etc/log_files.yml

#Install git & forever
RUN npm install forever -g
RUN apk add git

WORKDIR /ot-node

COPY . .

#Install nppm
RUN npm install





================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
  and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
  overall community

Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or
  advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
  address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
tech@origin-trail.com.
All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series
of actions.

**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior,  harassment of an
individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within
the community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.

Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing

## Rules

There are a few basic ground-rules for contributors (including the maintainer(s) of the project):

- **No `--force` pushes** or modifying the Git history in any way. If you need to rebase, ensure you do it in your own repo.
- **All modifications** must be made in a **pull-request** to solicit feedback from other contributors.

### Reviewing pull requests

When reviewing a pull request, the end-goal is to suggest useful changes to the author. Reviews should finish with approval unless there are issues that would result in:

- Buggy behavior.
- Undue maintenance burden.
- Breaking with house coding style.
- Pessimization (i.e. reduction of speed as measured in the projects benchmarks).
- Feature reduction (i.e. it removes some aspect of functionality that a significant minority of users rely on).
- Uselessness (i.e. it does not strictly add a feature or fix a known issue).

### Reviews may not be used as an effective veto for a PR because

- There exists a somewhat cleaner/better/faster way of accomplishing the same feature/fix.
- It does not fit well with some other contributors' longer-term vision for the project.

## Releases

Declaring formal releases remains the prerogative of the project maintainer(s).

## Changes to this arrangement

This is an experiment and feedback is welcome! This document may also be subject to pull-requests or changes by contributors where you believe you have something valuable to add or change.

## Heritage

These contributing guidelines are modified from the "OPEN Open Source Project" guidelines for the Level project: <https://github.com/Level/community/blob/master/CONTRIBUTING.md>


================================================
FILE: Debian.Dockerfile
================================================
#base image
FROM node:14.18.3-bullseye

MAINTAINER OriginTrail
LABEL maintainer="OriginTrail"
ENV NODE_ENV=testnet


#Mysql-server installation
ARG DEBIAN_FRONTEND=noninteractive
ARG PASSWORD=password
RUN apt-get update
RUN apt-get install -y lsb-release
RUN apt-get install -y wget gnupg curl
RUN curl -LO https://dev.mysql.com/get/mysql-apt-config_0.8.20-1_all.deb
RUN dpkg -i ./mysql-apt-config_0.8.20-1_all.deb
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29


RUN { \
     echo mysql-server mysql-server/root_password password $PASSWORD ''; \
     echo mysql-server mysql-server/root_password_again password $PASSWORD ''; \
} | debconf-set-selections \
    && apt-get update && apt-get install -y default-mysql-server default-mysql-server-core



RUN apt-get -qq -y install git
RUN apt-get -qq -y install make python

#Install Papertrail
RUN wget https://github.com/papertrail/remote_syslog2/releases/download/v0.20/remote_syslog_linux_amd64.tar.gz
RUN tar xzf ./remote_syslog_linux_amd64.tar.gz && cd remote_syslog && cp ./remote_syslog /usr/local/bin
COPY config/papertrail.yml /etc/log_files.yml






#Install forever
RUN npm install forever -g




WORKDIR /ot-node

COPY . .

#Install nppm
RUN npm install

#Mysql intialization
RUN service mariadb start && mysql -u root  -e "CREATE DATABASE operationaldb /*\!40100 DEFAULT CHARACTER SET utf8 */; SET PASSWORD FOR root@localhost = PASSWORD(''); FLUSH PRIVILEGES;"



================================================
FILE: LICENSE
================================================
                                 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 2018 OriginTrail

   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.


================================================
FILE: README.md
================================================
<a name="readme-top"></a>

---

<br />
<div align="center">
  <a href="https://github.com/OriginTrail/ot-node">
    <img src="images/banner.gif" alt="OriginTrail Node Banner">
  </a>

  <h3 align="center"><b>OT-Node</b></h3>

  <p align="center">
    </br>
    <a href="https://docs.origintrail.io/">OriginTrail Docs</a>
    ·
    <a href="https://github.com/OriginTrail/ot-node/issues">Report Bug</a>
    ·
    <a href="https://github.com/OriginTrail/ot-node/issues">Request Feature</a>
  </p>
</div>

</br>

<details open>
  <summary>
    <b>Table of Contents</b>
  </summary>
  <ol>
    <li>
      <a href="#📚-about-the-project">📚 About The Project</a>
      <ul>
        <li><a href="#what-is-the-decentralized-knowledge-graph">What is the Decentralized Knowledge Graph?</a></li>
        <li><a href="#the-origintrail-dkg-architecture">The OriginTrail DKG Architecture</a></li>
        <li><a href="#what-is-a-knowledge-asset">What is a Knowledge Asset?</a></li>
      </ul>
    </li>
    <li>
      <a href="#🚀-getting-started">🚀 Getting Started</a>
      <ul>
        <li><a href="#prerequisites">Prerequisites</a></li>
        <li><a href="#local-network-setup">Local Network Setup</a></li>
        <li><a href="#dkg-node-setup">DKG Node Setup</a></li>
        <li><a href="#build-on-dkg">Build on DKG</a></li>
      </ul>
    </li>
    <li><a href="#📄-license">📄 License</a></li>
    <li><a href="#🤝-contributing">🤝 Contributing</a></li>
    <li><a href="#📰-social-media">📰 Social Media</a></li>
  </ol>
</details>

---

<br/>

## 📚 About The Project

<details open>
<summary>

### **What is the Decentralized Knowledge Graph?**

</summary>

<br/>

<div align="center">
    <img src="images/nodes.png" alt="Knowledge Asset" width="200">
</div>

OriginTrail Decentralized Knowledge Graph (DKG), hosted on the OriginTrail Decentralized Network (ODN) as trusted knowledge infrastructure, is shared global Knowledge Graph of Knowledge Assets. Running on the basis of the permissionless multi-chain OriginTrail protocol, it combines blockchains and knowledge graph technology to enable trusted AI applications based on key W3C standards.

</details>

<details open>
<summary>

### **The OriginTrail DKG Architecture**

</summary>

<br/>

The OriginTrail tech stack is a three layer structure, consisting of the multi-chain consensus layer (OriginTrail layer 1, running on multiple blockchains), the Decentralized Knowledge Graph layer (OriginTrail Layer 2, hosted on the ODN) and Trusted Knowledge applications in the application layer.

<div align="center">
    <img src="images/dkg-architecture.png" alt="DKG Architecture" width="400">
</div>

Further, the architecture differentiates between **the public, replicated knowledge graph** shared by all network nodes according to the protocol, and **private Knowledge graphs** hosted separately by each of the OriginTrail nodes.

**Anyone can run an OriginTrail node and become part of the ODN, contributing to the network capacity and hosting the OriginTrail DKG. The OriginTrail node is the ultimate data service for data and knowledge intensive Web3 applications and is used as the key backbone for trusted AI applications (see https://chatdkg.ai)**

</details>

<details open>
<summary>

### **What is a Knowledge Asset?**

</summary>

<br/>

<div align="center">
    <img src="images/ka.png" alt="Knowledge Asset" width="200">
</div>

**Knowledge Asset is the new, AI‑ready resource for the Internet**

Knowledge Assets are verifiable containers of structured knowledge that live on the OriginTrail DKG and provide:

-   **Discoverability - UAL is the new URL**. Uniform Asset Locators (UALs, based on the W3C Decentralized Identifiers) are a new Web3 knowledge identifier (extensions of the Uniform Resource Locators - URLs) which identify a specific piece of knowledge and make it easy to find and connect with other Knowledge Assets.
-   **Ownership - NFTs enable ownership**. Each Knowledge Asset contains an NFT token that enables ownership, knowledge asset administration and market mechanisms.
-   **Verifiability - On-chain information origin and verifiable trail**. The blockchain tech increases trust, security, transparency, and the traceability of information.

By their nature, Knowledge Assets are semantic resources (following the W3C Semantic Web set of standards), and through their symbolic representations inherently AI ready. See more at https://chatdkg.ai
<br/>

**Discover Knowledge Assets with the DKG Explorer:**

<div align="center">
    <table>
        <tr>
            <td align="center">
                <a href="https://dkg.origintrail.io/explore?ual=did:dkg:otp/0x5cac41237127f94c2d21dae0b14bfefa99880630/309100">
                  <img src="images/knowledge-assets-graph1.svg" width="300" alt="Knowledge Assets Graph 1">
                </a>
                <br><b>Supply Chains</b>
            </td>
            <td align="center">
                <a href="https://dkg.origintrail.io/explore?ual=did:dkg:otp/0x5cac41237127f94c2d21dae0b14bfefa99880630/309285">
                  <img src="images/knowledge-assets-graph2.svg" width="300" alt="Knowledge Assets Graph 2">
                </a>
                <br><b>Construction</b>
            </td>
            <td align="center">
                <a href="https://dkg.origintrail.io/explore?ual=did:dkg:otp/0x5cac41237127f94c2d21dae0b14bfefa99880630/309222">
                  <img src="images/knowledge-assets-graph3.svg" width="300" alt="Knowledge Assets Graph 3">
                </a>
                <br><b>Life sciences and healthcare</b>
            </td>
            <td align="center">
                <a href="https://dkg.origintrail.io/explore?ual=did:dkg:otp/0x5cac41237127f94c2d21dae0b14bfefa99880630/308028">
                  <img src="images/knowledge-assets-graph4.svg" width="300" alt="Knowledge Assets Graph 3">
                </a>
                <br><b>Metaverse</b>
            </td>
        </tr>
    </table>
</div>

</details>

<p align="right">(<a href="#readme-top">back to top</a>)</p>
<br/>

## 🚀 Getting Started

---

### Prerequisites

<br/>

-   **Node.js** 20.18
-   **npm** 10.8.2

---

<br/>

### Local Network Setup

<br/>

First, clone the repo:

```bash
git clone https://github.com/OriginTrail/ot-node.git
cd ot-node
```

Switch the branch to `v8/develop`:

```bash
git checkout v8/develop
```

Install dependencies using `npm`:

```bash
npm install
```

Create the .env file inside the "ot-node" directory:

```bash
nano .env
```

and paste the following content inside (save and close):

```bash
NODE_ENV=development
RPC_ENDPOINT_BC1=http://localhost:8545
RPC_ENDPOINT_BC2=http://localhost:9545
REPOSITORY_PASSWORD=
```

Run the Triple Store.

To use default Triple Store (`blazegraph`), download the exec file and run it with the following command in the separate process:

```bash
java -server -Xmx6g -jar blazegraph.jar
```

It's highly recommended to use a larger heap size (6GB or 8GB), as the DKG node will require a lot of memory.

Ensure your MySQL instance is running on port 3306 with the password matching REPOSITORY_PASSWORD in your .env file. Additionally, set up Redis on its default port 6379. Both are required for the nodes to start properly.

Then, depending on the OS, use one of the scripts in order to run the local network with provided number of nodes (minimal amount of nodes should be 6):

**MacOS**

```bash
bash ./tools/local-network-setup/setup-macos-environment.sh --nodes=6
```

**Linux**

```bash
./tools/local-network-setup/setup-linux-environment.sh --nodes=6
```

---

<br/>

### DKG Node Setup

<br/>

In order to run a DKG node on the **V8 Testnet**, please read the official documentation: https://docs.origintrail.io/dkg-v8-upcoming-version/run-a-v8-core-node-on-testnet

---

<br/>

### Build on DKG

<br/>

The OriginTrail SDKs are client libraries for your applications, used to interact and connect with the OriginTrail Decentralized Knowledge Graph.
From an architectural standpoint, the SDK libraries are application interfaces into the DKG, enabling you to create and manage Knowledge Assets through your apps, as well as perform network queries (such as search, or SPARQL queries), as illustrated below.

<div align="center">
    <img src="images/sdk.png" alt="SDK" width="200">
</div>

The OriginTrail SDK libraries are being built in various languages by the team and the community, as listed below:

-   dkg.js - V8 JavaScript SDK implementation
    -   [Github repository](https://github.com/OriginTrail/dkg.js/tree/v8/develop)
    -   [Documentation](https://docs.origintrail.io/dkg-v8-upcoming-version/v8-dkg-sdk/dkg-v8-js-client)
-   dkg.py - V8 Python SDK implementation
    -   [Github repository](https://github.com/OriginTrail/dkg.py/tree/v8/develop)
    -   [Documentation](https://docs.origintrail.io/dkg-v8-upcoming-version/v8-dkg-sdk/dkg-v8-py-client)

---

<br/>
<p align="right">(<a href="#readme-top">back to top</a>)</p>

## 📄 License

Distributed under the Apache-2.0 License. See `LICENSE` file for more information.

<br/>
<p align="right">(<a href="#readme-top">back to top</a>)</p>

## 🤝 Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.

If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement".
Don't forget to give the project a star! Thanks again!

1. Fork the Project
2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the Branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request

<br/>
<p align="right">(<a href="#readme-top">back to top</a>)</p>

## 📰 Social Media

<br/>

<div align="center">
  <a href="https://medium.com/origintrail">
    <img src="images/icons/medium.svg" alt="Medium Badge" width="30" style="margin-right: 10px"/>
  </a>
  <a href="https://t.me/origintrail">
    <img src="images/icons/telegram.svg" alt="Telegram Badge" width="30" style="margin-right: 10px"/>
  </a>
  <a href="https://x.com/origin_trail">
    <img src="images/icons/x.svg" alt="X Badge" width="30" style="margin-right: 10px"/>
  </a>
  <a href="https://www.youtube.com/c/origintrail">
    <img src="images/icons/youtube.svg" alt="YouTube Badge" width="30" style="margin-right: 10px"/>
  </a>
  <a href="https://www.linkedin.com/company/origintrail/">
    <img src="images/icons/linkedin.svg" alt="LinkedIn Badge" width="30" style="margin-right: 10px"/>
  </a>
  <a href="https://discord.gg/cCRPzzmnNT">
    <img src="images/icons/discord.svg" alt="Discord Badge" width="30" style="margin-right: 10px"/>
  </a>
  <a href="https://www.reddit.com/r/OriginTrail/">
    <img src="images/icons/reddit.svg" alt="Reddit Badge" width="30" style="margin-right: 10px"/>
  </a>
  <a href="https://coinmarketcap.com/currencies/origintrail/">
    <img src="images/icons/coinmarketcap.svg" alt="Coinmarketcap Badge" width="30" style="margin-right: 10px"/>
  </a>
</div>

---


================================================
FILE: Ubuntu.Dockerfile
================================================
#base image
FROM ubuntu:20.04

MAINTAINER OriginTrail
LABEL maintainer="OriginTrail"
ENV NODE_ENV=testnet

#Install git, nodejs, mysql, python
RUN apt-get -qq update && apt-get -qq -y install curl
RUN curl -sL https://deb.nodesource.com/setup_14.x |  bash -
RUN apt-get -qq update
RUN apt-get -qq -y install wget apt-transport-https
RUN apt-get -qq -y install git nodejs
RUN apt update && DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends mysql-server
RUN apt-get -qq -y install unzip nano
RUN apt-get -qq -y install make python

#Install Papertrail
RUN wget https://github.com/papertrail/remote_syslog2/releases/download/v0.20/remote_syslog_linux_amd64.tar.gz
RUN tar xzf ./remote_syslog_linux_amd64.tar.gz && cd remote_syslog && cp ./remote_syslog /usr/local/bin
COPY config/papertrail.yml /etc/log_files.yml



#Install forever
RUN npm install -g forever


WORKDIR /ot-node

COPY . .


#Install npm
RUN npm install


#Intialize mysql
RUN usermod -d /var/lib/mysql/ mysql
RUN echo "disable_log_bin" >> /etc/mysql/mysql.conf.d/mysqld.cnf
RUN service mysql start && mysql -u root  -e "CREATE DATABASE operationaldb /*\!40100 DEFAULT CHARACTER SET utf8 */; update mysql.user set plugin = 'mysql_native_password' where User='root'/*\!40100 DEFAULT CHARACTER SET utf8 */; flush privileges;"



================================================
FILE: bin/darwin/arm64/.gitkeep
================================================


================================================
FILE: bin/darwin/x64/.gitkeep
================================================


================================================
FILE: bin/linux/arm64/.gitkeep
================================================


================================================
FILE: bin/linux/x64/.gitkeep
================================================


================================================
FILE: bin/win32/x64/.gitkeep
================================================


================================================
FILE: blazegraph-migration/README.md
================================================
The migration is manual and split into two scripts: export and import, which you must run yourself. Your node will be offline during export (several hours), but usable during import. Core nodes won’t be affected staking-wise. Import time varies based on data and hardware and can take hours to days.

After finishing both export and import processes, the check_quad_num.sh should be ran. It will return info on the outcome of the migration.

We recommend migrating before the 8.0.6 release, as it will add more data and increase future migration time. The process removes blazegraph.jnl and rebuilds it from exported DKG and paranet repositories — so if you have custom data, review the script and back up your journal file first.

Before running the migration, make sure the blazegraph.jnl you are migrating is in the ot-node directory and that blazegraph is running.

Export script (to export dkg and paranet namespaces):

```bash
nohup ./current/blazegraph-migration/export.sh /path_to_ot_node/ot-node dkg $(curl -s http://localhost:9999/blazegraph/namespace | grep -oP '<Namespace[^>]*>\K[^<]+' | grep '^paranet-') | tee export_migration.log &
```

Import script:

```bash
./current/blazegraph-migration/import.sh
```

Check quad number:

```bash
./current/blazegraph-migration/check_quad_num.sh
```


================================================
FILE: blazegraph-migration/check_quad_num.sh
================================================
#!/bin/bash

get_mysql_password() {
    local base_dir=$(dirname "$0")
    grep ^REPOSITORY_PASSWORD= "./current/.env" | cut -d '=' -f2
}

get_inserted_triples_count() {
    local repo_pw=$1
    mysql -u root -p"$repo_pw" operationaldb -e "SELECT count FROM triples_insert_count WHERE id = 1;" | tail -n 1
}

get_blazegraph_count() {
    local namespace=$1
    local BLAZEGRAPH_URL="http://localhost:9999/blazegraph/namespace/$namespace/sparql"
    QUAD_COUNT=$(curl -s -X POST "$BLAZEGRAPH_URL" \
      -H "Accept: text/tab-separated-values" \
      --data-urlencode 'query=SELECT (COUNT(*) AS ?total) WHERE { GRAPH ?g { ?s ?p ?o } }' \
      | tail -n 1)

    if ! [[ "$QUAD_COUNT" =~ ^[0-9]+$ ]]; then
        echo "Error: Failed to get valid count from Blazegraph" >&2
        return 1
    fi

    echo "$QUAD_COUNT"
    return 0
}

get_old_count() {
    local old_count_file=$1
    if [ ! -f "$old_count_file" ]; then
        echo "Error: $old_count_file not found" >&2
        return 1
    fi
    cat "$old_count_file"
}

get_uninserted_count() {
    local namespace=$1
    local chunks_dir="${namespace}/chunks"

    if [ ! -d "$chunks_dir" ]; then
        echo "Error: Chunks directory not found at $chunks_dir" >&2
        return 1
    fi

    local total_lines=0
    for chunk_file in "$chunks_dir"/chunk*; do
        if [ -f "$chunk_file" ]; then
            local lines=$(wc -l < "$chunk_file")
            total_lines=$((total_lines + lines))
        fi
    done

    echo "$total_lines"
    return 0
}

check_quad_count() {
    local namespace=$1
    local old_count_file="OLD_QUAD_COUNT_${namespace}.txt"

    local old_count=$(get_old_count "$old_count_file") || return 1
    local repo_pw=$(get_mysql_password)
    local current_count=$(get_blazegraph_count "$namespace")
    local inserted_triples=$(get_inserted_triples_count "$repo_pw")

    local uninserted_count=0
    if uninserted=$(get_uninserted_count "$namespace"); then
        uninserted_count=$uninserted
        echo "[WARN] There are ${uninserted_count#-} uninserted quads in the chunks folder."
        echo "Feel free to run the import.sh script again."
        echo "*Note: Some chunks may need to be manually imported"
    fi

    local actual_count=$((current_count - inserted_triples + uninserted_count))
    local expected_total=$((old_count))

    percentage_diff=$(echo "scale=6; 100 * ($actual_count - $expected_total) / $expected_total" | bc)

    abs_diff=$(echo "$percentage_diff" | sed 's/-//')

    within_threshold=$(echo "$abs_diff <= 0.05" | bc)

    if [ "$within_threshold" -eq 1 ]; then
        if [ $uninserted_count -eq 0 ]; then
            echo "[SUCCESS] The migration has been completed successfully! There are no uninserted quads."
        else
            echo "[SUCCESS] The migration has been completed successfully thus far."
        fi
        return 0
    else
        local difference=$((actual_count - expected_total))
        if [ $difference -gt 0 ]; then
            echo "[ERROR] There are $difference more quads than expected"
            echo "*Note: Errors can happen during importing, if this number is of a small value, it can be ignored"
        else
            echo "[ERROR] There are ${difference#-} fewer quads than expected"
            echo "*Note: Errors can happen during importing, if this number is of a small value, it can be ignored"
        fi
        return 1
    fi
}

check_quad_count "dkg"


================================================
FILE: blazegraph-migration/export.sh
================================================
#!/bin/bash

set -e

# Configs
BLAZEGRAPH_JAR="blazegraph.jar"

if [ "$#" -lt 2 ]; then
  echo "Usage: $0 <base_dir> <namespace1> [namespace2 ...]"
  exit 1
fi

BASE_DIR="$1"
shift

log() {
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}

# Ensure Blazegraph and Otnode are started on script exit (success or error)
cleanup() {
  log "Ensuring Blazegraph service is running..."
  sudo systemctl start blazegraph.service
  log "Ensuring Otnode service is running..."
  sudo systemctl restart otnode.service
}
trap cleanup EXIT

log "Stopping otnode service..."
sudo systemctl stop otnode.service
sleep 10

for NAMESPACE in "$@"; do
  FOLDER_NAME=$(echo "$NAMESPACE" | tr '-' '_')
  EXPORT_DIR="$BASE_DIR/$FOLDER_NAME"
  EXPORT_FILE="$EXPORT_DIR/$FOLDER_NAME/data.nq.gz"
  QUAD_COUNT_FILE="OLD_QUAD_COUNT_${NAMESPACE}.txt"
  PROPERTIES_FILE="$EXPORT_DIR/${NAMESPACE}.properties"
  BLAZEGRAPH_URL="http://localhost:9999/blazegraph/namespace/$NAMESPACE/sparql"

  log "Processing namespace: $NAMESPACE"

  log "Querying quad count from Blazegraph..."
  QUAD_COUNT=$(curl -s -X POST "$BLAZEGRAPH_URL" \
    -H "Accept: text/tab-separated-values" \
    --data-urlencode 'query=SELECT (COUNT(*) AS ?total) WHERE { GRAPH ?g { ?s ?p ?o } }' \
    | tail -n 1)

  if ! [[ "$QUAD_COUNT" =~ ^[0-9]+$ ]]; then
    log "❌ Invalid quad count received: '$QUAD_COUNT'"
    exit 1
  fi

  echo "$QUAD_COUNT" > "$QUAD_COUNT_FILE"
  log "Quad count: $QUAD_COUNT (saved to $QUAD_COUNT_FILE)"

  log "Stopping blazegraph service..."
  sudo systemctl stop blazegraph.service
  sleep 10

  log "Creating properties file for $NAMESPACE..."
  mkdir -p "$EXPORT_DIR"
  cat > "$PROPERTIES_FILE" <<EOF
com.bigdata.namespace.${NAMESPACE}.spo.com.bigdata.btree.BTree.branchingFactor=1024
com.bigdata.rdf.store.AbstractTripleStore.textIndex=false
com.bigdata.rdf.store.AbstractTripleStore.justify=false
com.bigdata.rdf.store.AbstractTripleStore.statementIdentifiers=false
com.bigdata.rdf.store.AbstractTripleStore.axiomsClass=com.bigdata.rdf.axioms.NoAxioms
com.bigdata.rdf.sail.namespace=${NAMESPACE}
com.bigdata.rdf.store.AbstractTripleStore.quads=true
com.bigdata.namespace.${NAMESPACE}.lex.com.bigdata.btree.BTree.branchingFactor=400
com.bigdata.rdf.store.AbstractTripleStore.geoSpatial=false
com.bigdata.journal.Journal.groupCommit=false
com.bigdata.rdf.sail.isolatableIndices=false
com.bigdata.rdf.store.AbstractTripleStore.enableRawRecordsSupport=false
com.bigdata.rdf.store.AbstractTripleStore.Options.inlineTextLiterals=true
com.bigdata.rdf.store.AbstractTripleStore.Options.maxInlineTextLength=128
com.bigdata.rdf.store.AbstractTripleStore.Options.blobsThreshold=256
com.bigdata.journal.AbstractJournal.file=${BASE_DIR}/blazegraph.jnl
EOF

  log "Exporting KB to N-Quads..."
  java -Xmx6g -cp "$BLAZEGRAPH_JAR" \
    com.bigdata.rdf.sail.ExportKB \
    -outdir "$EXPORT_DIR" \
    -format N-Quads \
    "$PROPERTIES_FILE" "$NAMESPACE" > "$EXPORT_DIR/output.log" 2>&1

  log "Export complete. Output should be in $EXPORT_FILE"

  if [ ! -f "$EXPORT_FILE" ]; then
    log "❌ Export file not found: $EXPORT_FILE"
    exit 1
  fi

  log "Validating line count..."
  LINE_COUNT=$(zcat "$EXPORT_FILE" | wc -l)

  if [ "$LINE_COUNT" -eq "$QUAD_COUNT" ]; then
    log "✅ Line count matches quad count: $LINE_COUNT lines"
  else
    log "❌ MISMATCH for $NAMESPACE: exported $LINE_COUNT lines, expected $QUAD_COUNT"
    exit 1
  fi

  log "Starting blazegraph service..."
  sudo systemctl start blazegraph.service
  until nc -z localhost 9999; do
    sleep 1
  done
done

log "Stopping blazegraph service to remove old journal..."
sudo systemctl stop blazegraph.service
sleep 10
log "Removing old Blazegraph journal..."
rm -f "${BASE_DIR}/blazegraph.jnl"

log "Creating new journal on blazegraph start..."
sudo systemctl start blazegraph.service

log "Resetting triple log in MySQL..."
REPO_PW=$(grep ^REPOSITORY_PASSWORD= "$BASE_DIR/current/.env" | cut -d '=' -f2)
mysql -u root -p"$REPO_PW" operationaldb -e "UPDATE triples_insert_count SET count = 0 WHERE id = 1;"

log "✅ Migration completed for all namespaces."

================================================
FILE: blazegraph-migration/import.sh
================================================
#!/bin/bash

LOG_FILE="migration_import_$(date +%Y%m%d_%H%M%S).log"
CURL_TIMEOUT=300
MAX_RETRIES=3
CHUNK_DELAY=2

log_message() {
    local level="$1"
    local message="$2"
    local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
    echo "[$timestamp] [$level] $message" | tee -a "$LOG_FILE"
}

convert_namespace() {
    local input="$1"
    echo "${input//_/-}"
}

find_target_folders() {
    local folders=()

    if [ -d "dkg" ]; then
        folders+=("dkg")
    fi

    for folder in paranet*; do
        if [ -d "$folder" ]; then
            folders+=("$folder")
        fi
    done
    echo "${folders[@]}"
}

split_into_chunks() {
    local input_dir="$1"
    local chunk_size="$2"
    local input_file="$input_dir/$input_dir/data.nq.gz"
    local output_dir="$input_dir/chunks"
    mkdir -p "$output_dir"

    log_message "INFO" "Starting file split for $input_file"
    gunzip -c "$input_file" | split -l "$chunk_size" --additional-suffix=.nq - "${output_dir}/chunk_"
    log_message "INFO" "File split completed. Output directory: $output_dir"
}

process_chunk() {
    local chunk_file="$1"
    local chunk_num="$2"
    local blazegraph_url="$3"
    local total_chunks="$4"
    local retry_count=0
    local success=false

    while [ $retry_count -lt $MAX_RETRIES ] && [ "$success" = false ]; do
        if [ $retry_count -gt 0 ]; then
            log_message "INFO" "Retry $retry_count for chunk $chunk_num"
        fi

        local chunk_lines=$(wc -l < "$chunk_file")
        local response=$(curl -s --max-time $CURL_TIMEOUT -X POST \
             -H "Content-Type: text/x-nquads" \
             --data-binary @"$chunk_file" \
             "$blazegraph_url" 2>&1)

        if [[ $response == *"<?xml version=\"1.0\"?><data modified="* ]]; then
            local modified=$(echo "$response" | grep -o 'modified="[0-9]*"' | cut -d'"' -f2)

            if [ "$chunk_lines" -eq "$modified" ]; then
                success=true
                log_message "INFO" "Successfully processed chunk $chunk_num/$total_chunks"
                rm "$chunk_file"
            else
                log_message "ERROR" "Chunk $chunk_num processing failed: line count mismatch (expected: $chunk_lines, modified: $modified)"
                retry_count=$((retry_count + 1))
            fi
        else
            log_message "ERROR" "Chunk $chunk_num processing failed: $response"
            retry_count=$((retry_count + 1))
        fi

        if [ $retry_count -lt $MAX_RETRIES ] && [ "$success" = false ]; then
            sleep 5
        fi
    done

    if [ "$success" = false ]; then
        log_message "ERROR" "Failed to process chunk $chunk_num after $MAX_RETRIES attempts"
        sleep 5
        return 1
    fi

    sleep 10
    return 0
}

process_chunks() {
    local input_dir="$1"
    local chunk_dir="$input_dir/chunks"
    local processed_chunks=0
    local failed_chunks=0
    local namespace=$(convert_namespace "$(basename "$input_dir")")
    local blazegraph_url="http://localhost:9999/blazegraph/namespace/$namespace/sparql"

    if [ ! -d "$chunk_dir" ]; then
        log_message "ERROR" "Chunks directory not found: $chunk_dir"
        return 1
    fi

    local chunks=("$chunk_dir"/*.nq)
    total_chunks=${#chunks[@]}

    if [ $total_chunks -eq 0 ]; then
        log_message "ERROR" "No .nq files found in chunks directory: $chunk_dir"
        return 1
    fi

    log_message "INFO" "Starting chunk processing for namespace: $namespace"
    log_message "INFO" "Total chunks to process: $total_chunks"

    local chunk_num=1
    for chunk in "${chunks[@]}"; do
        job_pool_run process_chunk "$chunk" "$chunk_num" "$blazegraph_url" "$total_chunks"
        chunk_num=$((chunk_num + 1))
    done

    job_pool_wait

    local remaining_chunks=("$chunk_dir"/*.nq)
    local remaining_chunks_count=${#remaining_chunks[@]}

    log_message "INFO" "Chunk processing completed for namespace: $namespace"

    if [ $remaining_chunks_count -eq 1 ]; then
        log_message "INFO" "All chunks processed successfully."
        return 0
    else
        log_message "ERROR" "Some chunks were not processed. Remaining chunks: $remaining_chunks_count"
        return 1
    fi
}

. ./current/blazegraph-migration/job_pool.sh

job_pool_init 5 0

chunk_size=50000
target_folders=($(find_target_folders))

if [ ${#target_folders[@]} -eq 0 ]; then
    log_message "ERROR" "No target folders found (dkg or paranet*)"
    exit 1
fi

log_message "INFO" "Found ${#target_folders[@]} target folders: ${target_folders[*]}"

for folder in "${target_folders[@]}"; do
    log_message "INFO" "Processing folder: $folder"
    if [ ! -f "$folder/$folder/data.nq.gz" ]; then
        log_message "ERROR" "Required file not found: $folder/$folder/data.nq.gz"
        continue
    fi

    if [ ! -d "$folder/chunks" ]; then
        split_into_chunks "$folder" "$chunk_size"
    else
        log_message "INFO" "Using existing chunks directory: $folder/chunks"
    fi

    process_chunks "$folder"
done

log_message "INFO" "Migration process completed"

job_pool_shutdown


================================================
FILE: blazegraph-migration/job_pool.sh
================================================
# Job pooling for bash shell scripts
# This script provides a job pooling functionality where you can keep up to n
# processes/functions running in parallel so that you don't saturate a system
# with concurrent processes.
#
# Got inspiration from http://stackoverflow.com/questions/6441509/how-to-write-a-process-pool-bash-shell
#
# Copyright (c) 2012 Vince Tse
# with changes by Geoff Clements (c) 2014
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.

# end-of-jobs marker
job_pool_end_of_jobs="JOBPOOL_END_OF_JOBS"

# job queue used to send jobs to the workers
job_pool_job_queue=/tmp/job_pool_job_queue_$$

# where to run results to
job_pool_result_log=/tmp/job_pool_result_log_$$

# toggle command echoing
job_pool_echo_command=0

# number of parallel jobs allowed.  also used to determine if job_pool_init
# has been called when jobs are queued.
job_pool_pool_size=-1

# \brief variable to check for number of non-zero exits
job_pool_nerrors=0

################################################################################
# private functions
################################################################################

# \brief debug output
function _job_pool_echo()
{
    if [[ "${job_pool_echo_command}" == "1" ]]; then
        echo $@
    fi
}

# \brief cleans up
function _job_pool_cleanup()
{
    rm -f ${job_pool_job_queue} ${job_pool_result_log}
}

# \brief signal handler
function _job_pool_exit_handler()
{
    _job_pool_stop_workers
    _job_pool_cleanup
}

# \brief print the exit codes for each command
# \param[in] result_log  the file where the exit codes are written to
function _job_pool_print_result_log()
{
    job_pool_nerrors=$(grep ^ERROR "${job_pool_result_log}" | wc -l)
    cat "${job_pool_result_log}" | sed -e 's/^ERROR//'
}
                                                                                                                               # \brief the worker function that is called when we fork off worker processes
# \param[in] id  the worker ID
# \param[in] job_queue  the fifo to read jobs from
# \param[in] result_log  the temporary log file to write exit codes to
function _job_pool_worker()
{
    local id=$1
    local job_queue=$2
    local result_log=$3
    local cmd=
    local args=

    exec 7<> ${job_queue}
    while [[ "${cmd}" != "${job_pool_end_of_jobs}" && -e "${job_queue}" ]]; do
        # workers block on the exclusive lock to read the job queue
        flock --exclusive 7
        IFS=$'\v'
        read cmd args <${job_queue}
        set -- ${args}
        unset IFS
        flock --unlock 7
        # the worker should exit if it sees the end-of-job marker or run the
        # job otherwise and save its exit code to the result log.
        if [[ "${cmd}" == "${job_pool_end_of_jobs}" ]]; then
            # write it one more time for the next sibling so that everyone
            # will know we are exiting.
            echo "${cmd}" >&7
        else
            _job_pool_echo "### _job_pool_worker-${id}: ${cmd}"
            # run the job
            { ${cmd} "$@" ; }
            # now check the exit code and prepend "ERROR" to the result log entry
            # which we will use to count errors and then strip out later.
            local result=$?
            local status=
            if [[ "${result}" != "0" ]]; then
                status=ERROR
            fi
            # now write the error to the log, making sure multiple processes
            # don't trample over each other.
            exec 8<> ${result_log}
            flock --exclusive 8
            _job_pool_echo "${status}job_pool: exited ${result}: ${cmd} $@" >> ${result_log}
            flock --unlock 8
            exec 8>&-
            _job_pool_echo "### _job_pool_worker-${id}: exited ${result}: ${cmd} $@"
        fi
    done
    exec 7>&-
}

# \brief sends message to worker processes to stop
function _job_pool_stop_workers()
{
    # send message to workers to exit, and wait for them to stop before
    # doing cleanup.
    echo ${job_pool_end_of_jobs} >> ${job_pool_job_queue}
    wait
}

# \brief fork off the workers
# \param[in] job_queue  the fifo used to send jobs to the workers
# \param[in] result_log  the temporary log file to write exit codes to
function _job_pool_start_workers()
{
    local job_queue=$1
    local result_log=$2
    for ((i=0; i<${job_pool_pool_size}; i++)); do
        _job_pool_worker ${i} ${job_queue} ${result_log} &
    done
}

################################################################################
# public functions
################################################################################

# \brief initializes the job pool
# \param[in] pool_size  number of parallel jobs allowed
# \param[in] echo_command  1 to turn on echo, 0 to turn off
function job_pool_init()
{
    local pool_size=$1
    local echo_command=$2

    # set the global attibutes
    job_pool_pool_size=${pool_size:=1}
    job_pool_echo_command=${echo_command:=0}

    # create the fifo job queue and create the exit code log
    rm -rf ${job_pool_job_queue} ${job_pool_result_log}
    mkfifo ${job_pool_job_queue}
    touch ${job_pool_result_log}

    # fork off the workers
    _job_pool_start_workers ${job_pool_job_queue} ${job_pool_result_log}
}

# \brief waits for all queued up jobs to complete and shuts down the job pool
function job_pool_shutdown()
{
    _job_pool_stop_workers
    _job_pool_print_result_log
    _job_pool_cleanup
}

# \brief run a job in the job pool
function job_pool_run()
{
    if [[ "${job_pool_pool_size}" == "-1" ]]; then
        job_pool_init
    fi
    printf "%s\v" "$@" >> ${job_pool_job_queue}
    echo >> ${job_pool_job_queue}
}

# \brief waits for all queued up jobs to complete before starting new jobs
# This function actually fakes a wait by telling the workers to exit
# when done with the jobs and then restarting them.
function job_pool_wait()
{
    _job_pool_stop_workers
    _job_pool_start_workers ${job_pool_job_queue} ${job_pool_result_log}
}
#########################################
# End of Job Pool
#########################################


================================================
FILE: config/config.json
================================================
{
    "development": {
        "modules": {
            "autoUpdater": {
                "enabled": false,
                "implementation": {
                    "ot-auto-updater": {
                        "enabled": false,
                        "package": "./auto-updater/implementation/ot-auto-updater.js",
                        "config": {
                            "branch": "v8/develop"
                        }
                    }
                }
            },
            "httpClient": {
                "enabled": true,
                "implementation": {
                    "express-http-client": {
                        "enabled": true,
                        "package": "./http-client/implementation/express-http-client.js",
                        "config": {
                            "useSsl": false,
                            "port": 8900,
                            "sslKeyPath": "/root/certs/privkey.pem",
                            "sslCertificatePath": "/root/certs/fullchain.pem",
                            "rateLimiter": {
                                "timeWindowSeconds": 60,
                                "maxRequests": 10
                            }
                        }
                    }
                }
            },
            "network": {
                "enabled": true,
                "implementation": {
                    "libp2p-service": {
                        "enabled": true,
                        "package": "./network/implementation/libp2p-service.js",
                        "config": {
                            "dht": {
                                "kBucketSize": 20
                            },
                            "nat": {
                                "enabled": false,
                                "externalIp": null
                            },
                            "connectionManager": {
                                "autoDial": true,
                                "autoDialInterval": 10e3,
                                "dialTimeout": 2e3
                            },
                            "peerRouting": {
                                "refreshManager": {
                                    "enabled": true,
                                    "interval": 6e5,
                                    "bootDelay": 2e3
                                }
                            },
                            "port": 9100,
                            "bootstrap": []
                        }
                    }
                }
            },
            "repository": {
                "enabled": true,
                "implementation": {
                    "sequelize-repository": {
                        "enabled": true,
                        "package": "./repository/implementation/sequelize/sequelize-repository.js",
                        "config": {
                            "database": "operationaldb",
                            "user": "root",
                            "password": "",
                            "port": "3306",
                            "host": "localhost",
                            "dialect": "mysql",
                            "logging": false,
                            "pool": {
                                "max": 120,
                                "min": 0,
                                "acquire": 60000,
                                "idle": 10000,
                                "evict": 1000
                            }
                        }
                    }
                }
            },
            "tripleStore": {
                "enabled": true,
                "timeout": {
                    "query": 60000,
                    "get": 10000,
                    "batchGet": 10000,
                    "insert": 300000,
                    "ask": 10000
                },
                "implementation": {
                    "ot-blazegraph": {
                        "enabled": false,
                        "package": "./triple-store/implementation/ot-blazegraph/ot-blazegraph.js",
                        "config": {}
                    },
                    "ot-fuseki": {
                        "enabled": false,
                        "package": "./triple-store/implementation/ot-fuseki/ot-fuseki.js",
                        "config": {}
                    },
                    "ot-graphdb": {
                        "enabled": false,
                        "package": "./triple-store/implementation/ot-graphdb/ot-graphdb.js",
                        "config": {}
                    },
                    "ot-neptune": {
                        "enabled": false,
                        "package": "./triple-store/implementation/ot-neptune/ot-neptune.js",
                        "config": {}
                    }
                }
            },
            "validation": {
                "enabled": true,
                "implementation": {
                    "merkle-validation": {
                        "enabled": true,
                        "package": "./validation/implementation/merkle-validation.js",
                        "config": {}
                    }
                }
            },
            "blockchain": {
                "enabled": true,
                "implementation": {
                    "hardhat1:31337": {
                        "enabled": true,
                        "package": "./blockchain/implementation/hardhat/hardhat-service.js",
                        "config": {
                            "hubContractAddress": "0x5FbDB2315678afecb367f032d93F642f64180aa3",
                            "rpcEndpoints": ["http://localhost:8545"],
                            "evmManagementPublicKey": "0x1B420da5f7Be66567526E32bc68ab29F1A63765A",
                            "initialStakeAmount": 50000,
                            "initialAskAmount": 0.2,
                            "operatorFee": 0
                        }
                    },
                    "hardhat2:31337": {
                        "enabled": true,
                        "package": "./blockchain/implementation/hardhat/hardhat-service.js",
                        "config": {
                            "hubContractAddress": "0x5FbDB2315678afecb367f032d93F642f64180aa3",
                            "rpcEndpoints": ["http://localhost:9545"],
                            "evmManagementPublicKey": "0x1B420da5f7Be66567526E32bc68ab29F1A63765A",
                            "initialStakeAmount": 50000,
                            "initialAskAmount": 0.2,
                            "operatorFee": 0
                        }
                    }
                }
            },
            "telemetry": {
                "enabled": false,
                "implementation": {
                    "quest-telemetry": {
                        "enabled": true,
                        "package": "./telemetry/implementation/quest-telemetry.js",
                        "config": {
                            "localEndpoint": "http::addr=localhost:10000",
                            "signalingServiceEndpoint": "",
                            "sendToSignalingService": false
                        }
                    }
                }
            },
            "blockchainEvents": {
                "enabled": true,
                "implementation": {
                    "ot-ethers": {
                        "enabled": true,
                        "package": "./blockchain-events/implementation/ot-ethers/ot-ethers.js",
                        "config": {
                            "blockchains": ["hardhat1:31337", "hardhat2:31337"],
                            "rpcEndpoints": {
                                "hardhat1:31337": ["http://localhost:8545"],
                                "hardhat2:31337": ["http://localhost:9545"]
                            },
                            "hubContractAddress": {
                                "hardhat1:31337": "0x5FbDB2315678afecb367f032d93F642f64180aa3",
                                "hardhat2:31337": "0x5FbDB2315678afecb367f032d93F642f64180aa3"
                            }
                        }
                    }
                }
            }
        },
        "maximumAssertionSizeInKb": 500000,
        "commandExecutorVerboseLoggingEnabled": false,
        "appDataPath": "data",
        "logging": {
            "defaultLevel": "trace",
            "enableExperimentalScopes": true
        },
        "assetSync": {
            "syncDKG": {
                "enabled": true,
                "syncBatchSize": 5,
                "doneThreshold": 95
            },
            "syncParanets": []
        },
        "auth": {
            "ipBasedAuthEnabled": true,
            "tokenBasedAuthEnabled": false,
            "loggingEnabled": true,
            "ipWhitelist": ["::1", "127.0.0.1"],
            "publicOperations": [],
            "bothIpAndTokenAuthRequired": false
        }
    },
    "test": {
        "modules": {
            "autoUpdater": {
                "enabled": false,
                "implementation": {
                    "ot-auto-updater": {
                        "enabled": false,
                        "package": "./auto-updater/implementation/ot-auto-updater.js",
                        "config": {
                            "branch": "v8/develop"
                        }
                    }
                }
            },
            "httpClient": {
                "enabled": true,
                "implementation": {
                    "express-http-client": {
                        "enabled": true,
                        "package": "./http-client/implementation/express-http-client.js",
                        "config": {
                            "useSsl": false,
                            "sslKeyPath": "/root/certs/privkey.pem",
                            "sslCertificatePath": "/root/certs/fullchain.pem",
                            "rateLimiter": {
                                "timeWindowSeconds": 60,
                                "maxRequests": 10
                            }
                        }
                    }
                }
            },
            "network": {
                "enabled": true,
                "implementation": {
                    "libp2p-service": {
                        "enabled": true,
                        "package": "./network/implementation/libp2p-service.js",
                        "config": {
                            "dht": {
                                "kBucketSize": 20
                            },
                            "nat": {
                                "enabled": false,
                                "externalIp": null
                            },
                            "connectionManager": {
                                "autoDial": true,
                                "autoDialInterval": 10e3,
                                "dialTimeout": 2e3
                            },
                            "peerRouting": {
                                "refreshManager": {
                                    "enabled": true,
                                    "interval": 6e5,
                                    "bootDelay": 2e3
                                }
                            },
                            "port": 9000,
                            "bootstrap": [
                                "/ip4/0.0.0.0/tcp/9000/p2p/QmWyf3dtqJnhuCpzEDTNmNFYc5tjxTrXhGcUUmGHdg2gtj"
                            ]
                        }
                    }
                }
            },
            "validation": {
                "enabled": true,
                "implementation": {
                    "enabled": true,
                    "merkle-validation": {
                        "package": "./validation/implementation/merkle-validation.js",
                        "config": {}
                    }
                }
            },
            "repository": {
                "enabled": true,
                "implementation": {
                    "sequelize-repository": {
                        "enabled": true,
                        "package": "./repository/implementation/sequelize/sequelize-repository.js",
                        "config": {
                            "database": "operationaldb",
                            "user": "root",
                            "password": "",
                            "port": "3306",
                            "host": "localhost",
                            "dialect": "mysql",
                            "logging": false,
                            "pool": {
                                "max": 120,
                                "min": 0,
                                "acquire": 60000,
                                "idle": 10000,
                                "evict": 1000
                            }
                        }
                    }
                }
            },
            "blockchain": {
                "enabled": true,
                "implementation": {
                    "hardhat1:31337": {
                        "enabled": true,
                        "package": "./blockchain/implementation/hardhat/hardhat-service.js",
                        "config": {
                            "hubContractAddress": "0x5FbDB2315678afecb367f032d93F642f64180aa3",
                            "rpcEndpoints": ["http://localhost:8545"],
                            "initialStakeAmount": 50000,
                            "initialAskAmount": 0.2,
                            "operatorFee": 0
                        }
                    },
                    "hardhat2:31337": {
                        "enabled": true,
                        "package": "./blockchain/implementation/hardhat/hardhat-service.js",
                        "config": {
                            "hubContractAddress": "0x5FbDB2315678afecb367f032d93F642f64180aa3",
                            "rpcEndpoints": ["http://localhost:9545"],
                            "initialStakeAmount": 50000,
                            "initialAskAmount": 0.2,
                            "operatorFee": 0
                        }
                    }
                }
            },
            "tripleStore": {
                "enabled": true,
                "timeout": {
                    "query": 60000,
                    "get": 10000,
                    "batchGet": 10000,
                    "insert": 300000,
                    "ask": 10000
                },
                "implementation": {
                    "ot-blazegraph": {
                        "enabled": true,
                        "package": "./triple-store/implementation/ot-blazegraph/ot-blazegraph.js",
                        "config": {}
                    },
                    "ot-neptune": {
                        "enabled": false,
                        "package": "./triple-store/implementation/ot-neptune/ot-neptune.js",
                        "config": {}
                    }
                }
            },
            "telemetry": {
                "enabled": false,
                "implementation": {
                    "quest-telemetry": {
                        "enabled": true,
                        "package": "./telemetry/implementation/quest-telemetry.js",
                        "config": {
                            "localEndpoint": "http::addr=localhost:10000",
                            "signalingServiceEndpoint": "",
                            "sendToSignalingService": false
                        }
                    }
                }
            },
            "blockchainEvents": {
                "enabled": true,
                "implementation": {
                    "ot-ethers": {
                        "enabled": true,
                        "package": "./blockchain-events/implementation/ot-ethers/ot-ethers.js",
                        "config": {
                            "blockchains": ["hardhat1:31337", "hardhat2:31337"],
                            "rpcEndpoints": {
                                "hardhat1:31337": ["http://localhost:8545"],
                                "hardhat2:31337": ["http://localhost:9545"]
                            },
                            "hubContractAddress": {
                                "hardhat1:31337": "0x5FbDB2315678afecb367f032d93F642f64180aa3",
                                "hardhat2:31337": "0x5FbDB2315678afecb367f032d93F642f64180aa3"
                            }
                        }
                    }
                }
            }
        },
        "maximumAssertionSizeInKb": 500000,
        "commandExecutorVerboseLoggingEnabled": false,
        "appDataPath": "data",
        "logging": {
            "defaultLevel": "info",
            "enableExperimentalScopes": true
        },
        "assetSync": {
            "syncDKG": {
                "enabled": false,
                "syncBatchSize": 20,
                "doneThreshold": 95
            },
            "syncParanets": []
        },
        "auth": {
            "ipBasedAuthEnabled": true,
            "tokenBasedAuthEnabled": false,
            "loggingEnabled": true,
            "ipWhitelist": ["::1", "127.0.0.1"],
            "publicOperations": [],
            "bothIpAndTokenAuthRequired": false
        }
    },
    "testnet": {
        "modules": {
            "autoUpdater": {
                "enabled": true,
                "implementation": {
                    "ot-auto-updater": {
                        "enabled": true,
                        "package": "./auto-updater/implementation/ot-auto-updater.js",
                        "config": {
                            "branch": "v6/release/testnet"
                        }
                    }
                }
            },
            "network": {
                "enabled": true,
                "implementation": {
                    "libp2p-service": {
                        "enabled": true,
                        "package": "./network/implementation/libp2p-service.js",
                        "config": {
                            "dht": {
                                "kBucketSize": 20
                            },
                            "nat": {
                                "enabled": true,
                                "externalIp": null
                            },
                            "connectionManager": {
                                "autoDial": true,
                                "autoDialInterval": 10e3,
                                "dialTimeout": 2e3
                            },
                            "peerRouting": {
                                "refreshManager": {
                                    "enabled": true,
                                    "interval": 6e5,
                                    "bootDelay": 2e3
                                }
                            },
                            "port": 9000,
                            "bootstrap": [
                                "/ip4/164.92.138.30/tcp/9000/p2p/QmbiZQm18JefDizrQwbRhPgkaLykTLyrUEpeMWuKJHXuUM",
                                "/ip4/139.59.145.152/tcp/9000/p2p/Qme2oF6afixBjLYjF5CYeC73d5dygsTq8P7BPQp31NVkye"
                            ]
                        }
                    }
                }
            },
            "httpClient": {
                "enabled": true,
                "implementation": {
                    "express-http-client": {
                        "enabled": true,
                        "package": "./http-client/implementation/express-http-client.js",
                        "config": {
                            "useSsl": false,
                            "port": 8900,
                            "sslKeyPath": "/root/certs/privkey.pem",
                            "sslCertificatePath": "/root/certs/fullchain.pem",
                            "rateLimiter": {
                                "timeWindowSeconds": 60,
                                "maxRequests": 10
                            }
                        }
                    }
                }
            },
            "repository": {
                "enabled": true,
                "implementation": {
                    "sequelize-repository": {
                        "enabled": true,
                        "package": "./repository/implementation/sequelize/sequelize-repository.js",
                        "config": {
                            "database": "operationaldb",
                            "user": "root",
                            "password": "password",
                            "port": "3306",
                            "host": "localhost",
                            "dialect": "mysql",
                            "logging": false,
                            "pool": {
                                "max": 120,
                                "min": 0,
                                "acquire": 60000,
                                "idle": 10000,
                                "evict": 1000
                            }
                        }
                    }
                }
            },
            "blockchain": {
                "enabled": true,
                "implementation": {
                    "otp:20430": {
                        "enabled": false,
                        "package": "./blockchain/implementation/ot-parachain/ot-parachain-service.js",
                        "config": {
                            "hubContractAddress": "0xe233b5b78853a62b1e11ebe88bf083e25b0a57a6",
                            "rpcEndpoints": [
                                "https://lofar-testnet.origin-trail.network",
                                "https://lofar-testnet.origintrail.network"
                            ],
                            "operatorFee": 0
                        }
                    },
                    "gnosis:10200": {
                        "enabled": false,
                        "package": "./blockchain/implementation/gnosis/gnosis-service.js",

                        "config": {
                            "hubContractAddress": "0x2c08AC4B630c009F709521e56Ac385A6af70650f",
                            "gasPriceOracleLink": "https://blockscout.chiadochain.net/api/v1/gas-price-oracle",
                            "rpcEndpoints": ["https://rpc.chiadochain.net"],
                            "operatorFee": 0
                        }
                    },
                    "base:84532": {
                        "enabled": false,
                        "package": "./blockchain/implementation/base/base-service.js",

                        "config": {
                            "hubContractAddress": "0xf21CE8f8b01548D97DCFb36869f1ccB0814a4e05",
                            "rpcEndpoints": ["https://sepolia.base.org"],
                            "operatorFee": 0
                        }
                    }
                }
            },
            "validation": {
                "enabled": true,
                "implementation": {
                    "merkle-validation": {
                        "enabled": true,
                        "package": "./validation/implementation/merkle-validation.js",
                        "config": {}
                    }
                }
            },
            "tripleStore": {
                "enabled": true,
                "timeout": {
                    "query": 60000,
                    "get": 10000,
                    "batchGet": 10000,
                    "insert": 300000,
                    "ask": 10000
                },
                "implementation": {
                    "ot-blazegraph": {
                        "enabled": false,
                        "package": "./triple-store/implementation/ot-blazegraph/ot-blazegraph.js",
                        "config": {}
                    },
                    "ot-fuseki": {
                        "enabled": false,
                        "package": "./triple-store/implementation/ot-fuseki/ot-fuseki.js",
                        "config": {}
                    },
                    "ot-graphdb": {
                        "enabled": false,
                        "package": "./triple-store/implementation/ot-graphdb/ot-graphdb.js",
                        "config": {}
                    },
                    "ot-neptune": {
                        "enabled": false,
                        "package": "./triple-store/implementation/ot-neptune/ot-neptune.js",
                        "config": {}
                    }
                }
            },
            "telemetry": {
                "enabled": false,
                "implementation": {
                    "quest-telemetry": {
                        "enabled": true,
                        "package": "./telemetry/implementation/quest-telemetry.js",
                        "config": {
                            "localEndpoint": "http::addr=localhost:10000",
                            "signalingServiceEndpoint": "",
                            "sendToSignalingService": false
                        }
                    }
                }
            },
            "blockchainEvents": {
                "enabled": true,
                "implementation": {
                    "ot-ethers": {
                        "enabled": true,
                        "package": "./blockchain-events/implementation/ot-ethers/ot-ethers.js",
                        "config": {
                            "blockchains": ["otp:20430", "gnosis:10200", "base:84532"],
                            "rpcEndpoints": {
                                "base:84532": ["https://sepolia.base.org"],
                                "otp:20430": [
                                    "https://lofar-testnet.origin-trail.network",
                                    "https://lofar-testnet.origintrail.network"
                                ],
                                "gnosis:10200": ["https://rpc.chiadochain.net"]
                            },
                            "hubContractAddress": {
                                "base:84532": "0xf21CE8f8b01548D97DCFb36869f1ccB0814a4e05",
                                "otp:20430": "0xe233b5b78853a62b1e11ebe88bf083e25b0a57a6",
                                "gnosis:10200": "0x2c08AC4B630c009F709521e56Ac385A6af70650f"
                            }
                        }
                    }
                }
            }
        },
        "maximumAssertionSizeInKb": 500000,
        "commandExecutorVerboseLoggingEnabled": false,
        "appDataPath": "data",
        "logging": {
            "defaultLevel": "trace",
            "enableExperimentalScopes": true
        },
        "assetSync": {
            "syncDKG": {
                "enabled": false,
                "syncBatchSize": 20,
                "doneThreshold": 95
            },
            "syncParanets": []
        },
        "auth": {
            "ipBasedAuthEnabled": true,
            "tokenBasedAuthEnabled": false,
            "loggingEnabled": true,
            "ipWhitelist": ["::1", "127.0.0.1"],
            "publicOperations": [],
            "bothIpAndTokenAuthRequired": false
        }
    },
    "devnet": {
        "modules": {
            "autoUpdater": {
                "enabled": true,
                "implementation": {
                    "ot-auto-updater": {
                        "enabled": true,
                        "package": "./auto-updater/implementation/ot-auto-updater.js",
                        "config": {
                            "branch": "v8/develop"
                        }
                    }
                }
            },
            "network": {
                "enabled": true,
                "implementation": {
                    "libp2p-service": {
                        "enabled": true,
                        "package": "./network/implementation/libp2p-service.js",
                        "config": {
                            "dht": {
                                "kBucketSize": 20
                            },
                            "nat": {
                                "enabled": true,
                                "externalIp": null
                            },
                            "connectionManager": {
                                "autoDial": true,
                                "autoDialInterval": 10e3,
                                "dialTimeout": 2e3
                            },
                            "peerRouting": {
                                "refreshManager": {
                                    "enabled": true,
                                    "interval": 6e5,
                                    "bootDelay": 2e3
                                }
                            },
                            "port": 9000,
                            "bootstrap": [
                                "/ip4/64.225.99.151/tcp/9000/p2p/QmawsTRqaLPyLQ5PfStpFcpQW4bvNQ59zV1by2G5aJHuVn"
                            ]
                        }
                    }
                }
            },
            "httpClient": {
                "enabled": true,
                "implementation": {
                    "express-http-client": {
                        "enabled": true,
                        "package": "./http-client/implementation/express-http-client.js",
                        "config": {
                            "useSsl": false,
                            "port": 8900,
                            "sslKeyPath": "/root/certs/privkey.pem",
                            "sslCertificatePath": "/root/certs/fullchain.pem",
                            "rateLimiter": {
                                "timeWindowSeconds": 60,
                                "maxRequests": 10
                            }
                        }
                    }
                }
            },
            "repository": {
                "enabled": true,
                "implementation": {
                    "sequelize-repository": {
                        "enabled": true,
                        "package": "./repository/implementation/sequelize/sequelize-repository.js",
                        "config": {
                            "database": "operationaldb",
                            "user": "root",
                            "password": "password",
                            "port": "3306",
                            "host": "localhost",
                            "dialect": "mysql",
                            "logging": false,
                            "pool": {
                                "max": 120,
                                "min": 0,
                                "acquire": 60000,
                                "idle": 10000,
                                "evict": 1000
                            }
                        }
                    }
                }
            },
            "blockchain": {
                "enabled": true,
                "implementation": {
                    "base:84532": {
                        "enabled": false,
                        "package": "./blockchain/implementation/base/base-service.js",

                        "config": {
                            "hubContractAddress": "0xE043daF4cC8ae2c720ef95fc82574a37a429c40A",
                            "rpcEndpoints": ["https://sepolia.base.org"],
                            "operatorFee": 0
                        }
                    }
                }
            },
            "validation": {
                "enabled": true,
                "implementation": {
                    "merkle-validation": {
                        "enabled": true,
                        "package": "./validation/implementation/merkle-validation.js",
                        "config": {}
                    }
                }
            },
            "tripleStore": {
                "enabled": true,
                "timeout": {
                    "query": 60000,
                    "get": 10000,
                    "batchGet": 10000,
                    "insert": 300000,
                    "ask": 10000
                },
                "implementation": {
                    "ot-blazegraph": {
                        "enabled": false,
                        "package": "./triple-store/implementation/ot-blazegraph/ot-blazegraph.js",
                        "config": {}
                    },
                    "ot-fuseki": {
                        "enabled": false,
                        "package": "./triple-store/implementation/ot-fuseki/ot-fuseki.js",
                        "config": {}
                    },
                    "ot-graphdb": {
                        "enabled": false,
                        "package": "./triple-store/implementation/ot-graphdb/ot-graphdb.js",
                        "config": {}
                    },
                    "ot-neptune": {
                        "enabled": false,
                        "package": "./triple-store/implementation/ot-neptune/ot-neptune.js",
                        "config": {}
                    }
                }
            },
            "telemetry": {
                "enabled": false,
                "implementation": {
                    "quest-telemetry": {
                        "enabled": true,
                        "package": "./telemetry/implementation/quest-telemetry.js",
                        "config": {
                            "localEndpoint": "http::addr=localhost:10000",
                            "signalingServiceEndpoint": "",
                            "sendToSignalingService": false
                        }
                    }
                }
            },
            "blockchainEvents": {
                "enabled": true,
                "implementation": {
                    "ot-ethers": {
                        "enabled": true,
                        "package": "./blockchain-events/implementation/ot-ethers/ot-ethers.js",
                        "config": {
                            "blockchains": ["base:84532"],
                            "rpcEndpoints": {
                                "base:84532": ["https://sepolia.base.org"]
                            },
                            "hubContractAddress": {
                                "base:84532": "0xE043daF4cC8ae2c720ef95fc82574a37a429c40A"
                            }
                        }
                    }
                }
            }
        },
        "maximumAssertionSizeInKb": 500000,
        "commandExecutorVerboseLoggingEnabled": false,
        "appDataPath": "data",
        "logging": {
            "defaultLevel": "trace",
            "enableExperimentalScopes": false
        },
        "assetSync": {
            "syncDKG": {
                "enabled": false,
                "syncBatchSize": 20,
                "doneThreshold": 95
            },
            "syncParanets": []
        },
        "auth": {
            "ipBasedAuthEnabled": true,
            "tokenBasedAuthEnabled": false,
            "loggingEnabled": true,
            "ipWhitelist": ["::1", "127.0.0.1"],
            "publicOperations": [],
            "bothIpAndTokenAuthRequired": false
        }
    },
    "mainnet": {
        "modules": {
            "autoUpdater": {
                "enabled": true,
                "implementation": {
                    "ot-auto-updater": {
                        "enabled": true,
                        "package": "./auto-updater/implementation/ot-auto-updater.js",
                        "config": {
                            "branch": "v6/release/mainnet"
                        }
                    }
                }
            },
            "network": {
                "enabled": true,
                "implementation": {
                    "libp2p-service": {
                        "enabled": true,
                        "package": "./network/implementation/libp2p-service.js",
                        "config": {
                            "dht": {
                                "kBucketSize": 20
                            },
                            "nat": {
                                "enabled": true,
                                "externalIp": null
                            },
                            "connectionManager": {
                                "autoDial": true,
                                "autoDialInterval": 10e3,
                                "dialTimeout": 2e3
                            },
                            "peerRouting": {
                                "refreshManager": {
                                    "enabled": true,
                                    "interval": 6e5,
                                    "bootDelay": 2e3
                                }
                            },
                            "port": 9000,
                            "bootstrap": [
                                "/ip4/157.230.96.194/tcp/9000/p2p/QmZFcns6eGUosD96beHyevKu1jGJ1bA56Reg2f1J4q59Jt",
                                "/ip4/18.132.135.102/tcp/9000/p2p/QmemqyXyvrTAm7PwrcTcFiEEFx69efdR92GSZ1oQprbdja"
                            ]
                        }
                    }
                }
            },
            "httpClient": {
                "enabled": true,
                "implementation": {
                    "express-http-client": {
                        "enabled": true,
                        "package": "./http-client/implementation/express-http-client.js",
                        "config": {
                            "useSsl": false,
                            "port": 8900,
                            "sslKeyPath": "/root/certs/privkey.pem",
                            "sslCertificatePath": "/root/certs/fullchain.pem",
                            "rateLimiter": {
                                "timeWindowSeconds": 60,
                                "maxRequests": 10
                            }
                        }
                    }
                }
            },
            "repository": {
                "enabled": true,
                "implementation": {
                    "sequelize-repository": {
                        "enabled": true,
                        "package": "./repository/implementation/sequelize/sequelize-repository.js",
                        "config": {
                            "database": "operationaldb",
                            "user": "root",
                            "password": "password",
                            "port": "3306",
                            "host": "localhost",
                            "dialect": "mysql",
                            "logging": false,
                            "pool": {
                                "max": 120,
                                "min": 0,
                                "acquire": 60000,
                                "idle": 10000,
                                "evict": 1000
                            }
                        }
                    }
                }
            },
            "blockchain": {
                "enabled": true,
                "defaultImplementation": "otp:2043",
                "implementation": {
                    "otp:2043": {
                        "enabled": false,
                        "package": "./blockchain/implementation/ot-parachain/ot-parachain-service.js",
                        "config": {
                            "hubContractAddress": "0x0957e25BD33034948abc28204ddA54b6E1142D6F",
                            "rpcEndpoints": [
                                "https://astrosat-parachain-rpc.origin-trail.network",
                                "https://astrosat.origintrail.network/",
                                "https://astrosat-2.origintrail.network/"
                            ],
                            "operatorFee": 0
                        }
                    },
                    "gnosis:100": {
                        "enabled": false,
                        "package": "./blockchain/implementation/gnosis/gnosis-service.js",
                        "config": {
                            "hubContractAddress": "0x882D0BF07F956b1b94BBfe9E77F47c6fc7D4EC8f",
                            "gasPriceOracleLink": "https://gnosis.blockscout.com/api/v1/gas-price-oracle",
                            "operatorFee": 0
                        }
                    },
                    "base:8453": {
                        "enabled": false,
                        "package": "./blockchain/implementation/base/base-service.js",

                        "config": {
                            "hubContractAddress": "0x99Aa571fD5e681c2D27ee08A7b7989DB02541d13",
                            "operatorFee": 0
                        }
                    }
                }
            },
            "tripleStore": {
                "enabled": true,
                "timeout": {
                    "query": 60000,
                    "get": 10000,
                    "batchGet": 10000,
                    "insert": 300000,
                    "ask": 10000
                },
                "implementation": {
                    "ot-blazegraph": {
                        "enabled": false,
                        "package": "./triple-store/implementation/ot-blazegraph/ot-blazegraph.js",
                        "config": {}
                    },
                    "ot-fuseki": {
                        "enabled": false,
                        "package": "./triple-store/implementation/ot-fuseki/ot-fuseki.js",
                        "config": {}
                    },
                    "ot-graphdb": {
                        "enabled": false,
                        "package": "./triple-store/implementation/ot-graphdb/ot-graphdb.js",
                        "config": {}
                    },
                    "ot-neptune": {
                        "enabled": false,
                        "package": "./triple-store/implementation/ot-neptune/ot-neptune.js",
                        "config": {}
                    }
                }
            },
            "validation": {
                "enabled": true,
                "implementation": {
                    "merkle-validation": {
                        "enabled": true,
                        "package": "./validation/implementation/merkle-validation.js",
                        "config": {}
                    }
                }
            },
            "telemetry": {
                "enabled": false,
                "implementation": {
                    "quest-telemetry": {
                        "enabled": true,
                        "package": "./telemetry/implementation/quest-telemetry.js",
                        "config": {
                            "localEndpoint": "http::addr=localhost:10000",
                            "signalingServiceEndpoint": "",
                            "sendToSignalingService": false
                        }
                    }
                }
            },
            "blockchainEvents": {
                "enabled": true,
                "implementation": {
                    "ot-ethers": {
                        "enabled": true,
                        "package": "./blockchain-events/implementation/ot-ethers/ot-ethers.js",
                        "config": {
                            "blockchains": ["otp:2043", "gnosis:100", "base:8453"],
                            "rpcEndpoints": {
                                "otp:2043": [
                                    "https://astrosat-parachain-rpc.origin-trail.network",
                                    "https://astrosat.origintrail.network/",
                                    "https://astrosat-2.origintrail.network/"
                                ]
                            },
                            "hubContractAddress": {
                                "otp:2043": "0x0957e25BD33034948abc28204ddA54b6E1142D6F",
                                "gnosis:100": "0x882D0BF07F956b1b94BBfe9E77F47c6fc7D4EC8f",
                                "base:8453": "0x99Aa571fD5e681c2D27ee08A7b7989DB02541d13"
                            }
                        }
                    }
                }
            }
        },
        "maximumAssertionSizeInKb": 500000,
        "commandExecutorVerboseLoggingEnabled": false,
        "appDataPath": "data",
        "logging": {
            "defaultLevel": "trace",
            "enableExperimentalScopes": false
        },
        "assetSync": {
            "syncDKG": {
                "enabled": false,
                "syncBatchSize": 20,
                "doneThreshold": 95
            },
            "syncParanets": []
        },
        "auth": {
            "ipBasedAuthEnabled": true,
            "tokenBasedAuthEnabled": false,
            "loggingEnabled": true,
            "ipWhitelist": ["::1", "127.0.0.1"],
            "publicOperations": [],
            "bothIpAndTokenAuthRequired": false
        }
    }
}


================================================
FILE: config/papertrail.yml
================================================
files:
  - /ot-node/complete-node.log
destination:
  host: logs4.papertrailapp.com
  port: 39178
  protocol: tls


================================================
FILE: cucumber.js
================================================
export default {
    retry: 1,
    failFast: false,
    backtrace: true,
};


================================================
FILE: dependencies.md
================================================
# OT-node dependencies

## dev dependencies

##### [@cucumber/cucumber](https://www.npmjs.com/package/@cucumber/cucumber)

-   **version**: ^8.5.2
-   **description**: used to execute bdd tests

##### [chai](https://www.npmjs.com/package/chai)

-   **version**: ^4.3.6
-   **description**: assertion library for bdd tests

##### [dkg.js](https://www.npmjs.com/package/dkg.js)

-   **version**: ^6.0.2
-   **description**: dkg client used in bdd tests

##### [eslint](https://www.npmjs.com/package/eslint)

-   **version**: ^8.23.0
-   **description**: code linter

##### [eslint-config-airbnb](https://www.npmjs.com/package/eslint-config-airbnb)

-   **version**: ^19.0.4
-   **description**: linter plugin

##### [eslint-config-prettier](https://www.npmjs.com/package/eslint-config-prettier)

-   **version**: ^8.5.0
-   **description**: linter plugin

##### [husky](https://www.npmjs.com/package/husky)

-   **version**: ^8.0.1
-   **description**: used to run lint-staged as pre commit

##### [lint-staged](https://www.npmjs.com/package/lint-staged)

-   **version**: ^13.0.3
-   **description**: code linter for pre commits

##### [mocha](https://www.npmjs.com/package/mocha)

-   **version**: ^10.0.0
-   **description**: test framework used in unit tests

##### [nyc](https://www.npmjs.com/package/nyc)

-   **version**: ^15.1.0
-   **description**: command line interface used for running mocha

##### [prettier](https://www.npmjs.com/package/prettier)

-   **version**: ^2.7.1
-   **description**: code formatter

##### [sinon](https://www.npmjs.com/package/sinon)

-   **version**: ^14.0.0
-   **description**: used to create sandboxes in unit tests

##### [slugify](https://www.npmjs.com/package/slugify)

-   **version**: ^1.6.5
-   **description**: used to stringify cucumber test scenarios

## dependencies

##### [@comunica/query-sparql](https://www.npmjs.com/package/@comunica/query-sparql)

-   **version**: ^2.4.3
-   **description**: sparql query engine

##### [@ethersproject/bytes](https://www.npmjs.com/package/@ethersproject/bytes)

-   **version**: ^5.7.0
-   **description**: Used for creating substrate and evm accounts mapping signatures in `create-account-mapping-signature.js`

##### [@ethersproject/hash](https://www.npmjs.com/package/@ethersproject/hash)

-   **version**: ^5.7.0
-   **description**: Used for creating substrate and evm accounts mapping signatures in `create-account-mapping-signature.js`

##### [@ethersproject/wallet](https://www.npmjs.com/package/@ethersproject/wallet)

-   **version**: ^5.7.0
-   **description**: Used for creating substrate and evm accounts mapping signatures in `create-account-mapping-signature.js`

##### [@polkadot/api](https://www.npmjs.com/package/@polkadot/api)

-   **version**: ^9.3.2
-   **description**: used to interact with substrate nodes

##### [@polkadot/keyring](https://www.npmjs.com/package/@polkadot/keyring)

-   **version**: ^10.1.7
-   **description**: Used for creating substrate and evm accounts mapping signatures in `create-account-mapping-signature.js`

##### [@polkadot/util](https://www.npmjs.com/package/@polkadot/util)

-   **version**: ^10.1.7
-   **description**: Used for creating substrate and evm accounts mapping signatures in `create-account-mapping-signature.js`

##### [@polkadot/util-crypto](https://www.npmjs.com/package/@polkadot/util-crypto)

-   **version**: ^10.1.7
-   **description**: Used for creating substrate and evm accounts mapping signatures in `create-account-mapping-signature.js`

##### [app-root-path](https://www.npmjs.com/package/app-root-path)

-   **version**: ^3.1.0
-   **description**: used to determine root path

##### [assertion-tools](https://www.npmjs.com/package/assertion-tools)

-   **version**: ^2.0.2
-   **description**: various functions used by both dkg.js and ot-node

##### [async](https://www.npmjs.com/package/async)

-   **version**: ^3.2.4
-   **description**: used in `command-executor.js` to create an async queue to manage commands

##### [async-mutex](https://www.npmjs.com/package/async-mutex)

-   **version**: ^0.3.2
-   **description**: used to avoid race conditions when updating sql repository

##### [awilix](https://www.npmjs.com/package/awilix)

-   **version**: ^7.0.3
-   **description**: dependency injection container

##### [axios](https://www.npmjs.com/package/axios)

-   **version**: ^0.27.2
-   **description**: http client used to make http requests

##### [cors](https://www.npmjs.com/package/cors)

-   **version**: ^2.8.5
-   **description**: cors express middleware

##### [deep-extend](https://www.npmjs.com/package/deep-extend)

-   **version**: ^0.6.0
-   **description**: used to merge users config and default config

##### [dkg-evm-module](https://www.npmjs.com/package/dkg-evm-module)

-   **version**: ^4.0.5
-   **description**: used to import latest ot-node smart contracts abis

##### [dotenv](https://www.npmjs.com/package/dotenv)

-   **version**: ^16.0.1
-   **description**: used for NODE_ENV variable

##### [ethers](https://www.npmjs.com/package/ethers)

-   **version**: ^5.7.2
-   **description**: used to interact with blockchain nodes

##### [express](https://www.npmjs.com/package/express)

-   **version**: ^4.18.1
-   **description**: used to handle http requests

##### [express-fileupload](https://www.npmjs.com/package/express-fileupload)

-   **version**: ^1.4.0
-   **description**: express middleware **review required**

##### [express-rate-limit](https://www.npmjs.com/package/express-rate-limit)

-   **version**: ^6.5.2
-   **description**: used to rate limit rpc requests

##### [fs-extra](https://www.npmjs.com/package/fs-extra)

-   **version**: ^10.1.0
-   **description**: used for file system methods

##### [graphdb](https://www.npmjs.com/package/graphdb)

-   **version**: ^2.0.2
-   **description**: used to create graphdb repositories if they don't exist

##### [ip](https://www.npmjs.com/package/ip)

-   **version**: ^1.1.8
-   **description**: used to compare ip addresses

##### [it-length-prefixed](https://www.npmjs.com/package/it-length-prefixed)

-   **version**: ^5.0.3
-   **description**: used to encode and decode streamed buffers in libp2p

##### [it-map](https://www.npmjs.com/package/it-map)

-   **version**: ^1.0.6
-   **description**: used to map values received yielded by libp2p async iterators

##### [it-pipe](https://www.npmjs.com/package/it-pipe)

-   **version**: ^1.1.0
-   **description**: stream pipeline that supports libp2p duplex streams. Used for streaming messages between nodes

##### [jsonld](https://www.npmjs.com/package/jsonld)

-   **version**: ^8.1.0
-   **description**: used to canonize n-quads retrieved from db. **Should be moved to assertion-tools dependency**

##### [jsonschema](https://www.npmjs.com/package/jsonschema)

-   **version**: ^1.4.1
-   **description**: used to validate ot-node rpc requests' bodies

##### [jsonwebtoken](https://www.npmjs.com/package/jsonwebtoken)

-   **version**: ^9.0.0
-   **description**: used to generate, validate and decode JWTs

##### [libp2p](https://www.npmjs.com/package/libp2p)

-   **version**: ^0.32.4
-   **description**: used for p2p network communication

##### [libp2p-bootstrap](https://www.npmjs.com/package/libp2p-bootstrap)

-   **version**: ^0.13.0
-   **description**: used to define libp2p bootstrap nodes

##### [libp2p-kad-dht](https://www.npmjs.com/package/libp2p-kad-dht)

-   **version**: ^0.24.2
-   **description**: used for libp2p kad dht initialisation

##### [libp2p-mplex](https://www.npmjs.com/package/libp2p-mplex)

-   **version**: ^0.10.7
-   **description**: used for libp2p mplex initialisation

##### [libp2p-noise](https://www.npmjs.com/package/libp2p-noise)

-   **version**: ^4.0.0
-   **description**: used for libp2p message encription

##### [libp2p-tcp](https://www.npmjs.com/package/libp2p-tcp)

-   **version**: ^0.17.2
-   **description**: used for libp2p tcp communication

##### [minimist](https://www.npmjs.com/package/minimist)

-   **version**: ^1.2.7
-   **description**: used to parse process arguments

##### [ms](https://www.npmjs.com/package/ms)

-   **version**: ^2.1.3
-   **description**: convert expiration time to milliseconds in `token-generation.js`

##### [mysql2](https://www.npmjs.com/package/mysql2)

-   **version**: ^3.3.0
-   **description**:

##### [peer-id](https://www.npmjs.com/package/peer-id)

-   **version**: ^0.15.3
-   **description**: used to create network id

##### [pino](https://www.npmjs.com/package/pino)

-   **version**: ^8.4.2
-   **description**: ot-node logger implementation

##### [pino-pretty](https://www.npmjs.com/package/pino-pretty)

-   **version**: ^9.1.0
-   **description**: prettifier for pino logger

##### [rc](https://www.npmjs.com/package/rc)

-   **version**: ^1.2.8
-   **description**: configuration loader

##### [rolling-rate-limiter](https://www.npmjs.com/package/rolling-rate-limiter)

-   **version**: ^0.2.13
-   **description**: used to limit network requests

##### [semver](https://www.npmjs.com/package/semver)

-   **version**: ^7.3.7
-   **description**: used to compare ot-node versions during auto update

##### [sequelize](https://www.npmjs.com/package/sequelize)

-   **version**: ^6.29.0
-   **description**: used to communicate with sql repository

##### [timeout-abort-controller](https://www.npmjs.com/package/timeout-abort-controller)

-   **version**: ^3.0.0
-   **description**: timeout network messages

##### [toobusy-js](https://www.npmjs.com/package/toobusy-js)

-   **version**: ^0.5.1
-   **description**: used to check nodejs event loop lag

##### [uint8arrays](https://www.npmjs.com/package/uint8arrays)

-   **version**: ^3.1.0
-   **description**: used to convert from string to buffer and from buffer to string

##### [umzug](https://www.npmjs.com/package/umzug)

-   **version**: ^3.2.1
-   **description**: sequelize migration tool

##### [unzipper](https://www.npmjs.com/package/unzipper)

-   **version**: ^0.10.11
-   **description**: unzip file during autoupdate

##### [uuid](https://www.npmjs.com/package/uuid)

-   **version**: ^8.3.2
-   **description**: uuid generation


================================================
FILE: docker/docker-compose-alpine-blazegraph.yaml
================================================
version: '3'

services:
  blazegraph:
    container_name: blazegraph
    image: origintrail/ot-node:blazegraph
    network_mode: host


  mysql:
    container_name: mysql
    image: mysql:8.0.17
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: 1
      MYSQL_ROOT_PASSWORD: null
      MYSQL_DATABASE: operationaldb
    expose:
      - 3306
    network_mode: host

  ot-node:
    container_name: ot-node
    image: origintrail/ot-node:v6.0.0-beta.1-alpine
    depends_on:
      - blazegraph
      - mysql
    expose:
      - 8900
      - 9000
    command:
      - '/bin/sh'
      - '-c'
      - '/bin/sleep 25 && forever index.js'
                   
        
    volumes:
      - ${PWD}/.origintrail_noderc:/ot-node/.origintrail_noderc
      - ~/certs/:/root/certs/
    network_mode: host

================================================
FILE: docker/docker-compose-alpine-graphdb.yaml
================================================
version: '3'

services:
  graphdb:
    container_name: graphdb
    image: khaller/graphdb-free:latest
    network_mode: host


  mysql:
    container_name: mysql
    image: mysql:8.0.17
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: 1
      MYSQL_ROOT_PASSWORD: null
      MYSQL_DATABASE: operationaldb
    expose:
      - 3306
    network_mode: host

  ot-node:
    container_name: ot-node
    image: origintrail/ot-node:v6.0.0-beta.1-alpine
    depends_on:
      - graphdb
      - mysql
    expose:
      - 8900
      - 9000
    command:
      - '/bin/sh'
      - '-c'
      - '/bin/sleep 25 && forever index.js'
                   
        
    volumes:
      - ${PWD}/.origintrail_noderc:/ot-node/.origintrail_noderc
      - ~/certs/:/root/certs/
    network_mode: host

================================================
FILE: docker/docker-compose-debian-blazegraph.yaml
================================================
version: '3.8'
services:
  blazegraph:
    container_name: blazegraph
    image: origintrail/ot-node:blazegraph
    network_mode: host

  ot-node:
    container_name: ot-node
    image: origintrail/ot-node:v6.0.0-beta.1-debian
    depends_on:
      - blazegraph
    expose:
      - 8900
      - 9000
    command: >
       bash -c "
        /bin/sleep 30
        service mariadb start &&
        forever index.js
        "
    volumes:
      - ${PWD}/.origintrail_noderc:/ot-node/.origintrail_noderc
      - ~/certs/:/root/certs/
    network_mode: host

================================================
FILE: docker/docker-compose-debian-graphdb.yaml
================================================
version: '3.8'
services:
  graphdb:
    container_name: graphdb
    image: khaller/graphdb-free:latest
    network_mode: host

  ot-node:
    container_name: ot-node
    image: origintrail/ot-node:v6.0.0-beta.1-debian
    depends_on:
      - graphdb
    expose:
      - 8900
      - 9000
    command: >
       bash -c "
        /bin/sleep 30
        service mariadb start &&
        forever index.js
        "
    volumes:
      - ${PWD}/.origintrail_noderc:/ot-node/.origintrail_noderc
      - ~/certs/:/root/certs/
    network_mode: host


================================================
FILE: docker/docker-compose-ubuntu-blazegraph.yaml
================================================
version: '3.8'
services:
  blazegraph:
    container_name: blazegraph
    image: origintrail/ot-node:blazegraph
    network_mode: host

  ot-node:
    container_name: ot-node
    image: origintrail/ot-node:v6.0.0-beta.1-ubuntu
    depends_on:
      - blazegraph
    expose:
      - 8900
      - 9000
    command: >
       bash -c "
        /bin/sleep 35
        service mysql restart && 
        forever index.js                
        "
    volumes:
      - ${PWD}/.origintrail_noderc:/ot-node/.origintrail_noderc
      - ~/certs/:/root/certs/
    network_mode: host
    


================================================
FILE: docker/docker-compose-ubuntu-graphdb.yaml
================================================
version: '3.8'
services:
  graphdb:
    container_name: graphdb
    image: khaller/graphdb-free:latest
    network_mode: host

  ot-node:
    container_name: ot-node
    image: origintrail/ot-node:v6.0.0-beta.1-ubuntu
    depends_on:
      - graphdb
    expose:
      - 8900
      - 9000
    command: >
       bash -c "
        /bin/sleep 35
        service mysql restart && 
        forever index.js                
        "
    volumes:
      - ${PWD}/.origintrail_noderc:/ot-node/.origintrail_noderc
      - ~/certs/:/root/certs/
    network_mode: host
    


================================================
FILE: docs/openapi/DKGv8.yaml
================================================
openapi: 3.0.3
info:
  title: DKGv8
  description: DKG V8 API Collection.
  version: 1.0.0
  contact: {}
servers:
  - url: localhost
paths:
  /info:
    get:
      tags:
        - old
      summary: Node Info
      description: Get the node information.
      operationId: nodeInfo
      responses:
        '200':
          description: Node Info
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
                example: '*'
            Connection:
              schema:
                type: string
                example: keep-alive
            Content-Length:
              schema:
                type: string
                example: '20'
            Date:
              schema:
                type: string
                example: Thu, 17 Aug 2023 12:43:07 GMT
            ETag:
              schema:
                type: string
                example: W/"14-Rq/28W5aGKCGXmXfM1+eW1LAbb4"
            Keep-Alive:
              schema:
                type: string
                example: timeout=5
            X-Powered-By:
              schema:
                type: string
                example: Express
          content:
            application/json:
              schema:
                type: object
                properties:
                  version:
                    type: string
                    example: 6.0.13
              examples:
                Node Info:
                  value:
                    version: 6.0.13
  /bid-suggestion:
    get:
      tags:
        - old
      summary: Get Bid Suggestion
      description: Get bid suggestion based on provided parameters.
      operationId: getBidSuggestion
      parameters:
        - name: blockchain
          in: query
          schema:
            type: string
            example: hardhat
        - name: epochsNumber
          in: query
          schema:
            type: string
            example: '5'
        - name: assertionSize
          in: query
          schema:
            type: string
            example: '299'
        - name: contentAssetStorageAddress
          in: query
          schema:
            type: string
            example: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
        - name: firstAssertionId
          in: query
          schema:
            type: string
            example: '0xe3a6733d7b999ca6f0d141afe3e38ac59223a4dfde7a5458932d2094ed4193cf'
        - name: hashFunctionId
          in: query
          schema:
            type: string
            example: '1'
      requestBody:
        content:
          text/plain:
            example: ''
      responses:
        '200':
          description: Get Bid Suggestion
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
                example: '*'
            Connection:
              schema:
                type: string
                example: keep-alive
            Content-Length:
              schema:
                type: string
                example: '38'
            Date:
              schema:
                type: string
                example: Thu, 17 Aug 2023 12:42:31 GMT
            ETag:
              schema:
                type: string
                example: W/"26-UrjseieOcIBnowM9obJae/FG7xc"
            Keep-Alive:
              schema:
                type: string
                example: timeout=5
            X-Powered-By:
              schema:
                type: string
                example: Express
          content:
            application/json:
              schema:
                type: object
                properties:
                  bidSuggestion:
                    type: string
                    example: '903051579928002449'
              examples:
                Get Bid Suggestion:
                  value:
                    bidSuggestion: '903051579928002449'
  /local-store:
    post:
      tags:
        - old
      summary: Local Store
      description: Store locally.
      operationId: localStore
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
                properties:
                  assertion:
                    type: array
                    items:
                      type: string
                      example: <uuid:1> <http://schema.org/city> <uuid:belgrade> .
                    example:
                      - <uuid:1> <http://schema.org/city> <uuid:belgrade> .
                      - <uuid:1> <http://schema.org/company> 'OT' .
                      - <uuid:1> <http://schema.org/user> <uuid:user:1> .
                      - >-
                        _:c14n0
                        <https://ontology.origintrail.io/dkg/1.0#privateAssertionID>
                        '0xcfab2d364fe01757d7a83d3b32284395d87b1c379adabb1e28a16666e0a4fca9'
                        .
                  assertionId:
                    type: string
                    example: >-
                      0xe3a6733d7b999ca6f0d141afe3e38ac59223a4dfde7a5458932d2094ed4193cf
                  blockchain:
                    type: string
                    example: hardhat
                  contract:
                    type: string
                    example: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
                  storeType:
                    type: string
                    example: TRIPLE
                  tokenId:
                    type: number
                    example: 0
              example:
                - assertion:
                    - <uuid:1> <http://schema.org/city> <uuid:belgrade> .
                    - <uuid:1> <http://schema.org/company> 'OT' .
                    - <uuid:1> <http://schema.org/user> <uuid:user:1> .
                    - >-
                      _:c14n0
                      <https://ontology.origintrail.io/dkg/1.0#privateAssertionID>
                      '0xcfab2d364fe01757d7a83d3b32284395d87b1c379adabb1e28a16666e0a4fca9'
                      .
                  assertionId: >-
                    0xe3a6733d7b999ca6f0d141afe3e38ac59223a4dfde7a5458932d2094ed4193cf
                  blockchain: hardhat
                  contract: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
                  storeType: TRIPLE
                  tokenId: 0
                - assertion:
                    - <uuid:belgrade> <http://schema.org/postCode> '11000' .
                    - <uuid:belgrade> <http://schema.org/title> 'Belgrade' .
                    - <uuid:user:1> <http://schema.org/lastname> 'Smith' .
                    - <uuid:user:1> <http://schema.org/name> 'Adam' .
                  assertionId: >-
                    0xcfab2d364fe01757d7a83d3b32284395d87b1c379adabb1e28a16666e0a4fca9
                  blockchain: hardhat
                  contract: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
                  storeType: TRIPLE
                  tokenId: 0
            example:
              - assertion:
                  - <uuid:1> <http://schema.org/city> <uuid:belgrade> .
                  - <uuid:1> <http://schema.org/company> 'OT' .
                  - <uuid:1> <http://schema.org/user> <uuid:user:1> .
                  - >-
                    _:c14n0
                    <https://ontology.origintrail.io/dkg/1.0#privateAssertionID>
                    '0xcfab2d364fe01757d7a83d3b32284395d87b1c379adabb1e28a16666e0a4fca9'
                    .
                assertionId: >-
                  0xe3a6733d7b999ca6f0d141afe3e38ac59223a4dfde7a5458932d2094ed4193cf
                blockchain: hardhat
                contract: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
                storeType: TRIPLE
                tokenId: 0
              - assertion:
                  - <uuid:belgrade> <http://schema.org/postCode> '11000' .
                  - <uuid:belgrade> <http://schema.org/title> 'Belgrade' .
                  - <uuid:user:1> <http://schema.org/lastname> 'Smith' .
                  - <uuid:user:1> <http://schema.org/name> 'Adam' .
                assertionId: >-
                  0xcfab2d364fe01757d7a83d3b32284395d87b1c379adabb1e28a16666e0a4fca9
                blockchain: hardhat
                contract: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
                storeType: TRIPLE
                tokenId: 0
      responses:
        '202':
          description: Local Store
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
                example: '*'
            Connection:
              schema:
                type: string
                example: keep-alive
            Content-Length:
              schema:
                type: string
                example: '54'
            Date:
              schema:
                type: string
                example: Thu, 17 Aug 2023 12:49:45 GMT
            ETag:
              schema:
                type: string
                example: W/"36-uF3l7SNXwSBVObRCAJxOmp8OJGc"
            Keep-Alive:
              schema:
                type: string
                example: timeout=5
            X-Powered-By:
              schema:
                type: string
                example: Express
          content:
            application/json:
              schema:
                type: object
                properties:
                  operationId:
                    type: string
                    example: 7d499975-ce42-4d84-9092-0ac2a62f5151
              examples:
                Local Store:
                  value:
                    operationId: 7d499975-ce42-4d84-9092-0ac2a62f5151
  /publish:
    post:
      tags:
        - old
      summary: Publish Knowledge Asset
      description: Publish assertion.
      operationId: publishKnowledgeAsset
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                assertion:
                  type: array
                  items:
                    type: string
                    example: <uuid:1> <http://schema.org/city> <uuid:belgrade> .
                  example:
                    - <uuid:1> <http://schema.org/city> <uuid:belgrade> .
                    - <uuid:1> <http://schema.org/company> 'OT' .
                    - <uuid:1> <http://schema.org/user> <uuid:user:1> .
                    - >-
                      _:c14n0
                      <https://ontology.origintrail.io/dkg/1.0#privateAssertionID>
                      '0xcfab2d364fe01757d7a83d3b32284395d87b1c379adabb1e28a16666e0a4fca9'
                      .
                assertionId:
                  type: string
                  example: >-
                    0xe3a6733d7b999ca6f0d141afe3e38ac59223a4dfde7a5458932d2094ed4193cf
                blockchain:
                  type: string
                  example: hardhat
                contract:
                  type: string
                  example: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
                hashFunctionId:
                  type: number
                  example: 1
                tokenId:
                  type: number
                  example: 0
            example:
              assertion:
                - <uuid:1> <http://schema.org/city> <uuid:belgrade> .
                - <uuid:1> <http://schema.org/company> 'OT' .
                - <uuid:1> <http://schema.org/user> <uuid:user:1> .
                - >-
                  _:c14n0
                  <https://ontology.origintrail.io/dkg/1.0#privateAssertionID>
                  '0xcfab2d364fe01757d7a83d3b32284395d87b1c379adabb1e28a16666e0a4fca9'
                  .
              assertionId: >-
                0xe3a6733d7b999ca6f0d141afe3e38ac59223a4dfde7a5458932d2094ed4193cf
              blockchain: hardhat
              contract: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
              hashFunctionId: 1
              tokenId: 0
      responses:
        '202':
          description: Publish Knowledge Asset
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
                example: '*'
            Connection:
              schema:
                type: string
                example: keep-alive
            Content-Length:
              schema:
                type: string
                example: '54'
            Date:
              schema:
                type: string
                example: Thu, 17 Aug 2023 13:07:57 GMT
            ETag:
              schema:
                type: string
                example: W/"36-SQS1f7vf+HLSUHZ6wvE9UUwksSY"
            Keep-Alive:
              schema:
                type: string
                example: timeout=5
            RateLimit-Limit:
              schema:
                type: string
                example: '10'
            RateLimit-Remaining:
              schema:
                type: string
                example: '9'
            RateLimit-Reset:
              schema:
                type: string
                example: '22'
            X-Powered-By:
              schema:
                type: string
                example: Express
          content:
            application/json:
              schema:
                type: object
                properties:
                  operationId:
                    type: string
                    example: 8270c131-91b8-4573-a69e-504ff388a8b6
              examples:
                Publish Knowledge Asset:
                  value:
                    operationId: 8270c131-91b8-4573-a69e-504ff388a8b6
  /get:
    post:
      tags:
        - old
      summary: Get Knowledge Asset
      description: Get an assertion.
      operationId: getKnowledgeAsset
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                hashFunctionId:
                  type: number
                  example: 1
                id:
                  type: string
                  example: did:dkg:hardhat/0xb0d4afd8879ed9f52b28595d31b441d079b2ca07/0
                state:
                  type: string
                  example: LATEST
            example:
              hashFunctionId: 1
              id: did:dkg:hardhat/0xb0d4afd8879ed9f52b28595d31b441d079b2ca07/0
              state: LATEST
      responses:
        '202':
          description: Get Knowledge Asset
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
                example: '*'
            Connection:
              schema:
                type: string
                example: keep-alive
            Content-Length:
              schema:
                type: string
                example: '54'
            Date:
              schema:
                type: string
                example: Thu, 17 Aug 2023 13:16:39 GMT
            ETag:
              schema:
                type: string
                example: W/"36-tXDgcL88Mx02VotKK9H3zPuWwf8"
            Keep-Alive:
              schema:
                type: string
                example: timeout=5
            RateLimit-Limit:
              schema:
                type: string
                example: '10'
            RateLimit-Remaining:
              schema:
                type: string
                example: '9'
            RateLimit-Reset:
              schema:
                type: string
                example: '12'
            X-Powered-By:
              schema:
                type: string
                example: Express
          content:
            application/json:
              schema:
                type: object
                properties:
                  operationId:
                    type: string
                    example: 3a6df062-b3ce-4cac-aefa-77b1e8b9a4db
              examples:
                Get Knowledge Asset:
                  value:
                    operationId: 3a6df062-b3ce-4cac-aefa-77b1e8b9a4db
  /update:
    post:
      tags:
        - old
      summary: Update Knowledge Asset
      description: Update assertion.
      operationId: updateKnowledgeAsset
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                assertion:
                  type: array
                  items:
                    type: string
                    example: <uuid:1> <http://schema.org/city> <uuid:Nis> .
                  example:
                    - <uuid:1> <http://schema.org/city> <uuid:Nis> .
                    - <uuid:1> <http://schema.org/company> 'TL' .
                    - <uuid:1> <http://schema.org/user> <uuid:user:2> .
                    - >-
                      _:c14n0
                      <https://ontology.origintrail.io/dkg/1.0#privateAssertionID>
                      '0xa3acb6d57097f316b973e9e33d303cf411b8d62d7d589576e348d0d7049e3b63'
                      .
                assertionId:
                  type: string
                  example: >-
                    0xef0adc464c3dcb1d353567db5972de8d47f44d6621326645324f9730f2c83cf0
                blockchain:
                  type: string
                  example: hardhat
                contract:
                  type: string
                  example: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
                hashFunctionId:
                  type: number
                  example: 1
                tokenId:
                  type: number
                  example: 0
            example:
              assertion:
                - <uuid:1> <http://schema.org/city> <uuid:Nis> .
                - <uuid:1> <http://schema.org/company> 'TL' .
                - <uuid:1> <http://schema.org/user> <uuid:user:2> .
                - >-
                  _:c14n0
                  <https://ontology.origintrail.io/dkg/1.0#privateAssertionID>
                  '0xa3acb6d57097f316b973e9e33d303cf411b8d62d7d589576e348d0d7049e3b63'
                  .
              assertionId: >-
                0xef0adc464c3dcb1d353567db5972de8d47f44d6621326645324f9730f2c83cf0
              blockchain: hardhat
              contract: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
              hashFunctionId: 1
              tokenId: 0
      responses:
        '202':
          description: Update Knowledge Asset
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
                example: '*'
            Connection:
              schema:
                type: string
                example: keep-alive
            Content-Length:
              schema:
                type: string
                example: '54'
            Date:
              schema:
                type: string
                example: Thu, 17 Aug 2023 13:17:54 GMT
            ETag:
              schema:
                type: string
                example: W/"36-CjvPRlFINYIIcvR2H5gFBcOkNH8"
            Keep-Alive:
              schema:
                type: string
                example: timeout=5
            RateLimit-Limit:
              schema:
                type: string
                example: '10'
            RateLimit-Remaining:
              schema:
                type: string
                example: '9'
            RateLimit-Reset:
              schema:
                type: string
                example: '57'
            X-Powered-By:
              schema:
                type: string
                example: Express
          content:
            application/json:
              schema:
                type: object
                properties:
                  operationId:
                    type: string
                    example: 0d4c3efc-0f0b-435d-b9a3-402748dbbb2f
              examples:
                Update Knowledge Asset:
                  value:
                    operationId: 0d4c3efc-0f0b-435d-b9a3-402748dbbb2f
  /query:
    post:
      tags:
        - old
      summary: Query DKG
      description: Execute a query.
      operationId: queryDkg
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                query:
                  type: string
                  example: >-
                    CONSTRUCT { ?s ?p ?o } WHERE {{GRAPH
                    <assertion:0xcfab2d364fe01757d7a83d3b32284395d87b1c379adabb1e28a16666e0a4fca9>
                    { ?s ?p ?o . }}}
                repository:
                  type: string
                  example: privateCurrent
                type:
                  type: string
                  example: CONSTRUCT
            example:
              query: >-
                CONSTRUCT { ?s ?p ?o } WHERE {{GRAPH
                <assertion:0xcfab2d364fe01757d7a83d3b32284395d87b1c379adabb1e28a16666e0a4fca9>
                { ?s ?p ?o . }}}
              repository: privateCurrent
              type: CONSTRUCT
      responses:
        '202':
          description: Query DKG
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
                example: '*'
            Connection:
              schema:
                type: string
                example: keep-alive
            Content-Length:
              schema:
                type: string
                example: '54'
            Date:
              schema:
                type: string
                example: Thu, 17 Aug 2023 13:20:16 GMT
            ETag:
              schema:
                type: string
                example: W/"36-WRBDN6AcKKCbVi3DGfI6FvESm5w"
            Keep-Alive:
              schema:
                type: string
                example: timeout=5
            X-Powered-By:
              schema:
                type: string
                example: Express
          content:
            application/json:
              schema:
                type: object
                properties:
                  operationId:
                    type: string
                    example: 746992ba-e607-4858-8deb-5cffc2541859
              examples:
                Query DKG:
                  value:
                    operationId: 746992ba-e607-4858-8deb-5cffc2541859
  /{operation}/{operationId}:
    get:
      tags:
        - v0
      summary: '[v0] Get Operation Result'
      description: Get result of a specific operation by its ID.
      operationId: v0GetOperationResult
      responses:
        '200':
          description: ''
    parameters:
      - name: operation
        in: path
        required: true
        schema:
          type: string
      - name: operationId
        in: path
        required: true
        schema:
          type: string
  /v0/info:
    get:
      tags:
        - v0
      summary: '[v0] Node Info'
      description: Get the node information.
      operationId: v0NodeInfo
      responses:
        '200':
          description: '[v0] Node Info'
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
                example: '*'
            Connection:
              schema:
                type: string
                example: keep-alive
            Content-Length:
              schema:
                type: string
                example: '20'
            Date:
              schema:
                type: string
                example: Thu, 17 Aug 2023 13:27:58 GMT
            ETag:
              schema:
                type: string
                example: W/"14-Rq/28W5aGKCGXmXfM1+eW1LAbb4"
            Keep-Alive:
              schema:
                type: string
                example: timeout=5
            X-Powered-By:
              schema:
                type: string
                example: Express
          content:
            application/json:
              schema:
                type: object
                properties:
                  version:
                    type: string
                    example: 6.0.13
              examples:
                '[v0] Node Info':
                  value:
                    version: 6.0.13
  /v0/bid-suggestion:
    get:
      tags:
        - v0
      summary: '[v0] Get Bid Suggestion'
      description: Get bid suggestion based on provided parameters.
      operationId: v0GetBidSuggestion
      parameters:
        - name: blockchain
          in: query
          schema:
            type: string
            example: hardhat
        - name: epochsNumber
          in: query
          schema:
            type: string
            example: '5'
        - name: assertionSize
          in: query
          schema:
            type: string
            example: '299'
        - name: contentAssetStorageAddress
          in: query
          schema:
            type: string
            example: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
        - name: firstAssertionId
          in: query
          schema:
            type: string
            example: '0xe3a6733d7b999ca6f0d141afe3e38ac59223a4dfde7a5458932d2094ed4193cf'
        - name: hashFunctionId
          in: query
          schema:
            type: string
            example: '1'
      requestBody:
        content:
          text/plain:
            example: ''
      responses:
        '200':
          description: '[v0] Get Bid Suggestion'
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
                example: '*'
            Connection:
              schema:
                type: string
                example: keep-alive
            Content-Length:
              schema:
                type: string
                example: '39'
            Date:
              schema:
                type: string
                example: Thu, 17 Aug 2023 13:59:02 GMT
            ETag:
              schema:
                type: string
                example: W/"27-ieFm/6t4DZwm0kFCMq71s37uy/g"
            Keep-Alive:
              schema:
                type: string
                example: timeout=5
            X-Powered-By:
              schema:
                type: string
                example: Express
          content:
            application/json:
              schema:
                type: object
                properties:
                  bidSuggestion:
                    type: string
                    example: '1122511549276000025'
              examples:
                '[v0] Get Bid Suggestion':
                  value:
                    bidSuggestion: '1122511549276000025'
  /v0/local-store:
    post:
      tags:
        - v0
      summary: '[v0] Local Store'
      description: Store locally.
      operationId: v0LocalStore
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
                properties:
                  assertion:
                    type: array
                    items:
                      type: string
                      example: <uuid:1> <http://schema.org/city> <uuid:belgrade> .
                    example:
                      - <uuid:1> <http://schema.org/city> <uuid:belgrade> .
                      - <uuid:1> <http://schema.org/company> 'OT' .
                      - <uuid:1> <http://schema.org/user> <uuid:user:1> .
                      - >-
                        _:c14n0
                        <https://ontology.origintrail.io/dkg/1.0#privateAssertionID>
                        '0xcfab2d364fe01757d7a83d3b32284395d87b1c379adabb1e28a16666e0a4fca9'
                        .
                  assertionId:
                    type: string
                    example: >-
                      0xe3a6733d7b999ca6f0d141afe3e38ac59223a4dfde7a5458932d2094ed4193cf
                  blockchain:
                    type: string
                    example: hardhat
                  contract:
                    type: string
                    example: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
                  storeType:
                    type: string
                    example: TRIPLE
                  tokenId:
                    type: number
                    example: 0
              example:
                - assertion:
                    - <uuid:1> <http://schema.org/city> <uuid:belgrade> .
                    - <uuid:1> <http://schema.org/company> 'OT' .
                    - <uuid:1> <http://schema.org/user> <uuid:user:1> .
                    - >-
                      _:c14n0
                      <https://ontology.origintrail.io/dkg/1.0#privateAssertionID>
                      '0xcfab2d364fe01757d7a83d3b32284395d87b1c379adabb1e28a16666e0a4fca9'
                      .
                  assertionId: >-
                    0xe3a6733d7b999ca6f0d141afe3e38ac59223a4dfde7a5458932d2094ed4193cf
                  blockchain: hardhat
                  contract: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
                  storeType: TRIPLE
                  tokenId: 0
                - assertion:
                    - <uuid:belgrade> <http://schema.org/postCode> '11000' .
                    - <uuid:belgrade> <http://schema.org/title> 'Belgrade' .
                    - <uuid:user:1> <http://schema.org/lastname> 'Smith' .
                    - <uuid:user:1> <http://schema.org/name> 'Adam' .
                  assertionId: >-
                    0xcfab2d364fe01757d7a83d3b32284395d87b1c379adabb1e28a16666e0a4fca9
                  blockchain: hardhat
                  contract: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
                  storeType: TRIPLE
                  tokenId: 0
            example:
              - assertion:
                  - <uuid:1> <http://schema.org/city> <uuid:belgrade> .
                  - <uuid:1> <http://schema.org/company> 'OT' .
                  - <uuid:1> <http://schema.org/user> <uuid:user:1> .
                  - >-
                    _:c14n0
                    <https://ontology.origintrail.io/dkg/1.0#privateAssertionID>
                    '0xcfab2d364fe01757d7a83d3b32284395d87b1c379adabb1e28a16666e0a4fca9'
                    .
                assertionId: >-
                  0xe3a6733d7b999ca6f0d141afe3e38ac59223a4dfde7a5458932d2094ed4193cf
                blockchain: hardhat
                contract: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
                storeType: TRIPLE
                tokenId: 0
              - assertion:
                  - <uuid:belgrade> <http://schema.org/postCode> '11000' .
                  - <uuid:belgrade> <http://schema.org/title> 'Belgrade' .
                  - <uuid:user:1> <http://schema.org/lastname> 'Smith' .
                  - <uuid:user:1> <http://schema.org/name> 'Adam' .
                assertionId: >-
                  0xcfab2d364fe01757d7a83d3b32284395d87b1c379adabb1e28a16666e0a4fca9
                blockchain: hardhat
                contract: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
                storeType: TRIPLE
                tokenId: 0
      responses:
        '202':
          description: '[v0] Local Store'
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
                example: '*'
            Connection:
              schema:
                type: string
                example: keep-alive
            Content-Length:
              schema:
                type: string
                example: '54'
            Date:
              schema:
                type: string
                example: Thu, 17 Aug 2023 13:59:11 GMT
            ETag:
              schema:
                type: string
                example: W/"36-fpQtTlhbbWO7tqbMGm3CkKmOqaI"
            Keep-Alive:
              schema:
                type: string
                example: timeout=5
            X-Powered-By:
              schema:
                type: string
                example: Express
          content:
            application/json:
              schema:
                type: object
                properties:
                  operationId:
                    type: string
                    example: 0a4ee669-95bb-41cd-a2e8-3382361e80d9
              examples:
                '[v0] Local Store':
                  value:
                    operationId: 0a4ee669-95bb-41cd-a2e8-3382361e80d9
  /v0/publish:
    post:
      tags:
        - v0
      summary: '[v0] Publish Knowledge Asset'
      description: Publish assertion.
      operationId: v0PublishKnowledgeAsset
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                assertion:
                  type: array
                  items:
                    type: string
                    example: <uuid:1> <http://schema.org/city> <uuid:belgrade> .
                  example:
                    - <uuid:1> <http://schema.org/city> <uuid:belgrade> .
                    - <uuid:1> <http://schema.org/company> 'OT' .
                    - <uuid:1> <http://schema.org/user> <uuid:user:1> .
                    - >-
                      _:c14n0
                      <https://ontology.origintrail.io/dkg/1.0#privateAssertionID>
                      '0xcfab2d364fe01757d7a83d3b32284395d87b1c379adabb1e28a16666e0a4fca9'
                      .
                assertionId:
                  type: string
                  example: >-
                    0xe3a6733d7b999ca6f0d141afe3e38ac59223a4dfde7a5458932d2094ed4193cf
                blockchain:
                  type: string
                  example: hardhat
                contract:
                  type: string
                  example: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
                hashFunctionId:
                  type: number
                  example: 1
                tokenId:
                  type: number
                  example: 0
            example:
              assertion:
                - <uuid:1> <http://schema.org/city> <uuid:belgrade> .
                - <uuid:1> <http://schema.org/company> 'OT' .
                - <uuid:1> <http://schema.org/user> <uuid:user:1> .
                - >-
                  _:c14n0
                  <https://ontology.origintrail.io/dkg/1.0#privateAssertionID>
                  '0xcfab2d364fe01757d7a83d3b32284395d87b1c379adabb1e28a16666e0a4fca9'
                  .
              assertionId: >-
                0xe3a6733d7b999ca6f0d141afe3e38ac59223a4dfde7a5458932d2094ed4193cf
              blockchain: hardhat
              contract: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
              hashFunctionId: 1
              tokenId: 0
      responses:
        '202':
          description: '[v0] Publish Knowledge Asset'
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
                example: '*'
            Connection:
              schema:
                type: string
                example: keep-alive
            Content-Length:
              schema:
                type: string
                example: '54'
            Date:
              schema:
                type: string
                example: Thu, 17 Aug 2023 13:59:54 GMT
            ETag:
              schema:
                type: string
                example: W/"36-wKIhHpa0/tdVYh1Y8D2yINolruA"
            Keep-Alive:
              schema:
                type: string
                example: timeout=5
            RateLimit-Limit:
              schema:
                type: string
                example: '10'
            RateLimit-Remaining:
              schema:
                type: string
                example: '9'
            RateLimit-Reset:
              schema:
                type: string
                example: '52'
            X-Powered-By:
              schema:
                type: string
                example: Express
          content:
            application/json:
              schema:
                type: object
                properties:
                  operationId:
                    type: string
                    example: 476fb996-db1a-47b8-8da4-80d71411feb3
              examples:
                '[v0] Publish Knowledge Asset':
                  value:
                    operationId: 476fb996-db1a-47b8-8da4-80d71411feb3
  /v0/get:
    post:
      tags:
        - v0
      summary: '[v0] Get Knowledge Asset'
      description: Get an assertion.
      operationId: v0GetKnowledgeAsset
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                hashFunctionId:
                  type: number
                  example: 1
                id:
                  type: string
                  example: did:dkg:hardhat/0xb0d4afd8879ed9f52b28595d31b441d079b2ca07/0
                state:
                  type: string
                  example: LATEST
            example:
              hashFunctionId: 1
              id: did:dkg:hardhat/0xb0d4afd8879ed9f52b28595d31b441d079b2ca07/0
              state: LATEST
      responses:
        '202':
          description: '[v0] Get Knowledge Asset'
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
                example: '*'
            Connection:
              schema:
                type: string
                example: keep-alive
            Content-Length:
              schema:
                type: string
                example: '54'
            Date:
              schema:
                type: string
                example: Thu, 17 Aug 2023 14:00:02 GMT
            ETag:
              schema:
                type: string
                example: W/"36-/27PH/ZH74wwVBrYDxWSzCk4yA0"
            Keep-Alive:
              schema:
                type: string
                example: timeout=5
            RateLimit-Limit:
              schema:
                type: string
                example: '10'
            RateLimit-Remaining:
              schema:
                type: string
                example: '9'
            RateLimit-Reset:
              schema:
                type: string
                example: '44'
            X-Powered-By:
              schema:
                type: string
                example: Express
          content:
            application/json:
              schema:
                type: object
                properties:
                  operationId:
                    type: string
                    example: 5b34c048-2d08-4696-b3c4-c37c831b89ce
              examples:
                '[v0] Get Knowledge Asset':
                  value:
                    operationId: 5b34c048-2d08-4696-b3c4-c37c831b89ce
  /v0/update:
    post:
      tags:
        - v0
      summary: '[v0] Update Knowledge Asset'
      description: Update assertion.
      operationId: v0UpdateKnowledgeAsset
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                assertion:
                  type: array
                  items:
                    type: string
                    example: <uuid:1> <http://schema.org/city> <uuid:Nis> .
                  example:
                    - <uuid:1> <http://schema.org/city> <uuid:Nis> .
                    - <uuid:1> <http://schema.org/company> 'TL' .
                    - <uuid:1> <http://schema.org/user> <uuid:user:2> .
                    - >-
                      _:c14n0
                      <https://ontology.origintrail.io/dkg/1.0#privateAssertionID>
                      '0xa3acb6d57097f316b973e9e33d303cf411b8d62d7d589576e348d0d7049e3b63'
                      .
                assertionId:
                  type: string
                  example: >-
                    0xef0adc464c3dcb1d353567db5972de8d47f44d6621326645324f9730f2c83cf0
                blockchain:
                  type: string
                  example: hardhat
                contract:
                  type: string
                  example: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
                hashFunctionId:
                  type: number
                  example: 1
                tokenId:
                  type: number
                  example: 0
            example:
              assertion:
                - <uuid:1> <http://schema.org/city> <uuid:Nis> .
                - <uuid:1> <http://schema.org/company> 'TL' .
                - <uuid:1> <http://schema.org/user> <uuid:user:2> .
                - >-
                  _:c14n0
                  <https://ontology.origintrail.io/dkg/1.0#privateAssertionID>
                  '0xa3acb6d57097f316b973e9e33d303cf411b8d62d7d589576e348d0d7049e3b63'
                  .
              assertionId: >-
                0xef0adc464c3dcb1d353567db5972de8d47f44d6621326645324f9730f2c83cf0
              blockchain: hardhat
              contract: '0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07'
              hashFunctionId: 1
              tokenId: 0
      responses:
        '202':
          description: '[v0] Update Knowledge Asset'
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
                example: '*'
            Connection:
              schema:
                type: string
                example: keep-alive
            Content-Length:
              schema:
                type: string
                example: '54'
            Date:
              schema:
                type: string
                example: Thu, 17 Aug 2023 14:00:09 GMT
            ETag:
              schema:
                type: string
                example: W/"36-77qAdgCc/SEN47aETAww86PM04w"
            Keep-Alive:
              schema:
                type: string
                example: timeout=5
            RateLimit-Limit:
              schema:
                type: string
                example: '10'
            RateLimit-Remaining:
              schema:
                type: string
                example: '9'
            RateLimit-Reset:
              schema:
                type: string
                example: '38'
            X-Powered-By:
              schema:
                type: string
                example: Express
          content:
            application/json:
              schema:
                type: object
                properties:
                  operationId:
                    type: string
                    example: f0d34032-6910-49b4-a2a8-71c9f58feb58
              examples:
                '[v0] Update Knowledge Asset':
                  value:
                    operationId: f0d34032-6910-49b4-a2a8-71c9f58feb58
  /v0/query:
    post:
      tags:
        - v0
      summary: '[v0] Query DKG'
      description: Execute a query.
      operationId: v0QueryDkg
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                query:
                  type: string
                  example: >-
                    CONSTRUCT { ?s ?p ?o } WHERE {{GRAPH
                    <assertion:0xcfab2d364fe01757d7a83d3b32284395d87b1c379adabb1e28a16666e0a4fca9>
                    { ?s ?p ?o . }}}
                repository:
                  type: string
                  example: privateCurrent
                type:
                  type: string
                  example: CONSTRUCT
            example:
              query: >-
                CONSTRUCT { ?s ?p ?o } WHERE {{GRAPH
                <assertion:0xcfab2d364fe01757d7a83d3b32284395d87b1c379adabb1e28a16666e0a4fca9>
                { ?s ?p ?o . }}}
              repository: privateCurrent
              type: CONSTRUCT
      responses:
        '202':
          description: '[v0] Query DKG'
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
                example: '*'
            Connection:
              schema:
                type: string
                example: keep-alive
            Content-Length:
              schema:
                type: string
                example: '54'
            Date:
              schema:
                type: string
                example: Thu, 17 Aug 2023 14:00:19 GMT
            ETag:
              schema:
                type: string
                example: W/"36-kqaRe64EoJygoEadXJWRekiCs4s"
            Keep-Alive:
              schema:
                type: string
                example: timeout=5
            X-Powered-By:
              schema:
                type: string
                example: Express
          content:
            application/json:
              schema:
                type: object
                properties:
                  operationId:
                    type: string
                    example: 4d371ffb-a620-452f-8d16-3e427bafeae2
              examples:
                '[v0] Query DKG':
                  value:
                    operationId: 4d371ffb-a620-452f-8d16-3e427bafeae2
tags:
  - name: old
  - name: v0


================================================
FILE: docs/postman/DKGv8.postman_collection.json
================================================
{
	"info": {
		"_postman_id": "550b0443-cd47-482a-9c56-2b1229422426",
		"name": "DKGv8",
		"description": "DKG V8 API Collection.",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
	},
	"item": [
		{
			"name": "old",
			"item": [
				{
					"name": "Node Info",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{authToken}}"
							}
						],
						"url": {
							"raw": "{{host}}:{{port}}/info",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"info"
							]
						},
						"description": "Get the node information."
					},
					"response": [
						{
							"name": "Node Info",
							"originalRequest": {
								"method": "GET",
								"header": [
									{
										"key": "Authorization",
										"value": "Bearer {{authToken}}"
									}
								],
								"url": {
									"raw": "{{host}}:{{port}}/info",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"info"
									]
								}
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "X-Powered-By",
									"value": "Express"
								},
								{
									"key": "Access-Control-Allow-Origin",
									"value": "*"
								},
								{
									"key": "Content-Type",
									"value": "application/json; charset=utf-8"
								},
								{
									"key": "Content-Length",
									"value": "20"
								},
								{
									"key": "ETag",
									"value": "W/\"14-Rq/28W5aGKCGXmXfM1+eW1LAbb4\""
								},
								{
									"key": "Date",
									"value": "Thu, 17 Aug 2023 12:43:07 GMT"
								},
								{
									"key": "Connection",
									"value": "keep-alive"
								},
								{
									"key": "Keep-Alive",
									"value": "timeout=5"
								}
							],
							"cookie": [],
							"body": "{\n    \"version\": \"6.0.13\"\n}"
						}
					]
				},
				{
					"name": "Get Bid Suggestion",
					"protocolProfileBehavior": {
						"disableBodyPruning": true
					},
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{authToken}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": ""
						},
						"url": {
							"raw": "{{host}}:{{port}}/bid-suggestion?blockchain={{blockchain}}&epochsNumber={{epochsNumber}}&assertionSize={
Download .txt
gitextract_wywppseo/

├── .codex/
│   ├── review-prompt.md
│   └── review-schema.json
├── .eslintrc.cjs
├── .github/
│   ├── CODEOWNERS
│   ├── ISSUE_TEMPLATE/
│   │   └── bug_report_v8.md
│   ├── actions/
│   │   └── setup/
│   │       └── action.yml
│   ├── pull_request_template.md
│   ├── release-drafter-template.yml
│   └── workflows/
│       ├── check-package-lock.yml
│       ├── checks.yml
│       ├── codex-review.yml
│       ├── release-drafter-config.yml
│       └── update-cache.yml
├── .gitignore
├── .husky/
│   ├── .gitignore
│   └── pre-commit
├── .lintstagedrc.json
├── .prettierrc
├── Alpine.Dockerfile
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Debian.Dockerfile
├── LICENSE
├── README.md
├── Ubuntu.Dockerfile
├── bin/
│   ├── darwin/
│   │   ├── arm64/
│   │   │   └── .gitkeep
│   │   └── x64/
│   │       └── .gitkeep
│   ├── linux/
│   │   ├── arm64/
│   │   │   └── .gitkeep
│   │   └── x64/
│   │       └── .gitkeep
│   └── win32/
│       └── x64/
│           └── .gitkeep
├── blazegraph-migration/
│   ├── README.md
│   ├── check_quad_num.sh
│   ├── export.sh
│   ├── import.sh
│   └── job_pool.sh
├── config/
│   ├── config.json
│   └── papertrail.yml
├── cucumber.js
├── dependencies.md
├── docker/
│   ├── docker-compose-alpine-blazegraph.yaml
│   ├── docker-compose-alpine-graphdb.yaml
│   ├── docker-compose-debian-blazegraph.yaml
│   ├── docker-compose-debian-graphdb.yaml
│   ├── docker-compose-ubuntu-blazegraph.yaml
│   └── docker-compose-ubuntu-graphdb.yaml
├── docs/
│   ├── openapi/
│   │   └── DKGv8.yaml
│   └── postman/
│       └── DKGv8.postman_collection.json
├── index.js
├── installer/
│   ├── README.md
│   └── installer.sh
├── ot-node.js
├── package.json
├── scripts/
│   ├── copy-assertions.js
│   ├── set-ask.js
│   ├── set-operator-fee.js
│   ├── set-stake.js
│   └── utils.js
├── src/
│   ├── commands/
│   │   ├── blockchain-event-listener/
│   │   │   ├── blockchain-event-listener-command.js
│   │   │   └── event-listener-command.js
│   │   ├── cleaners/
│   │   │   ├── ask-cleaner-command.js
│   │   │   ├── ask-response-cleaner-command.js
│   │   │   ├── batch-get-cleaner-command.js
│   │   │   ├── blockchain-event-cleaner-command.js
│   │   │   ├── cleaner-command.js
│   │   │   ├── commands-cleaner-command.js
│   │   │   ├── finality-cleaner-command.js
│   │   │   ├── finality-response-cleaner-command.js
│   │   │   ├── get-cleaner-command.js
│   │   │   ├── get-response-cleaner-command.js
│   │   │   ├── operation-id-cleaner-command.js
│   │   │   ├── pending-storage-cleaner-command.js
│   │   │   ├── publish-cleaner-command.js
│   │   │   ├── publish-response-cleaner-command.js
│   │   │   ├── update-cleaner-command.js
│   │   │   └── update-response-cleaner-command.js
│   │   ├── command-executor.js
│   │   ├── command-resolver.js
│   │   ├── command.js
│   │   ├── common/
│   │   │   ├── dial-peers-command.js
│   │   │   ├── log-public-addresses-command.js
│   │   │   ├── otnode-update-command.js
│   │   │   ├── send-telemetry-command.js
│   │   │   ├── send-transaction-command.js
│   │   │   ├── sharding-table-check-command.js
│   │   │   └── validate-asset-command.js
│   │   ├── paranet/
│   │   │   ├── paranet-sync-command.js
│   │   │   └── start-paranet-sync-commands.js
│   │   ├── protocols/
│   │   │   ├── ask/
│   │   │   │   ├── receiver/
│   │   │   │   │   └── v1.0.0/
│   │   │   │   │       └── v1-0-0-handle-ask-request-command.js
│   │   │   │   └── sender/
│   │   │   │       ├── ask-find-shard-command.js
│   │   │   │       ├── ask-schedule-messages-command.js
│   │   │   │       ├── network-ask-command.js
│   │   │   │       └── v1.0.0/
│   │   │   │           └── v1-0-0-ask-request-command.js
│   │   │   ├── common/
│   │   │   │   ├── find-curated-paranet-nodes-command.js
│   │   │   │   ├── find-shard-command.js
│   │   │   │   ├── handle-protocol-message-command.js
│   │   │   │   ├── network-protocol-command.js
│   │   │   │   ├── protocol-message-command.js
│   │   │   │   ├── protocol-request-command.js
│   │   │   │   ├── protocol-schedule-messages-command.js
│   │   │   │   └── validate-assertion-metadata-command.js
│   │   │   ├── finality/
│   │   │   │   ├── receiver/
│   │   │   │   │   ├── publish-finality-save-ack-command.js
│   │   │   │   │   └── v1.0.0/
│   │   │   │   │       └── v1-0-0-handle-finality-request-command.js
│   │   │   │   └── sender/
│   │   │   │       ├── finality-schedule-messages-command.js
│   │   │   │       ├── find-publisher-node-command.js
│   │   │   │       ├── network-finality-command.js
│   │   │   │       └── v1.0.0/
│   │   │   │           └── v1-0-0-finality-request-command.js
│   │   │   ├── get/
│   │   │   │   ├── receiver/
│   │   │   │   │   └── v1.0.0/
│   │   │   │   │       ├── v1-0-0-handle-batch-get-request-command.js
│   │   │   │   │       └── v1-0-0-handle-get-request-command.js
│   │   │   │   └── sender/
│   │   │   │       ├── batch-get-command.js
│   │   │   │       └── get-command.js
│   │   │   ├── publish/
│   │   │   │   ├── publish-finalization-command.js
│   │   │   │   ├── receiver/
│   │   │   │   │   └── v1.0.0/
│   │   │   │   │       └── v1-0-0-handle-store-request-command.js
│   │   │   │   └── sender/
│   │   │   │       └── publish-replication-command.js
│   │   │   └── update/
│   │   │       ├── receiver/
│   │   │       │   └── v1.0.0/
│   │   │       │       └── v1-0-0-handle-update-request-command.js
│   │   │       ├── sender/
│   │   │       │   ├── network-update-command.js
│   │   │       │   ├── update-find-shard-command.js
│   │   │       │   ├── update-schedule-messages-command.js
│   │   │       │   ├── update-validate-asset-command.js
│   │   │       │   └── v1.0.0/
│   │   │       │       └── v1-0-0-update-request-command.js
│   │   │       ├── update-assertion-command.js
│   │   │       └── update-validate-assertion-metadata-command.js
│   │   └── query/
│   │       └── query-command.js
│   ├── constants/
│   │   └── constants.js
│   ├── controllers/
│   │   ├── http-api/
│   │   │   ├── base-http-api-controller.js
│   │   │   ├── http-api-router.js
│   │   │   ├── v0/
│   │   │   │   ├── bid-suggestion-http-api-controller-v0.js
│   │   │   │   ├── get-http-api-controller-v0.js
│   │   │   │   ├── info-http-api-controller-v0.js
│   │   │   │   ├── local-store-http-api-controller-v0.js
│   │   │   │   ├── publish-http-api-controller-v0.js
│   │   │   │   ├── query-http-api-controller-v0.js
│   │   │   │   ├── request-schema/
│   │   │   │   │   ├── bid-suggestion-schema-v0.js
│   │   │   │   │   ├── get-schema-v0.js
│   │   │   │   │   ├── local-store-schema-v0.js
│   │   │   │   │   ├── publish-schema-v0.js
│   │   │   │   │   ├── query-schema-v0.js
│   │   │   │   │   └── update-schema-v0.js
│   │   │   │   ├── result-http-api-controller-v0.js
│   │   │   │   └── update-http-api-controller-v0.js
│   │   │   └── v1/
│   │   │       ├── .gitkeep
│   │   │       ├── ask-http-api-controller-v1.js
│   │   │       ├── direct-query-http-api-controller-v1.js
│   │   │       ├── finality-http-api-controller-v1.js
│   │   │       ├── get-http-api-controller-v1.js
│   │   │       ├── info-http-api-controller-v1.js
│   │   │       ├── local-store-http-api-controller-v1.js
│   │   │       ├── publish-http-api-controller-v1.js
│   │   │       ├── query-http-api-controller-v1.js
│   │   │       ├── request-schema/
│   │   │       │   ├── .gitkeep
│   │   │       │   ├── ask-schema-v1.js
│   │   │       │   ├── direct-query-schema-v1.js
│   │   │       │   ├── finality-schema-v1.js
│   │   │       │   ├── get-schema-v1.js
│   │   │       │   ├── local-store-schema-v1.js
│   │   │       │   ├── publish-schema-v1.js
│   │   │       │   └── query-schema-v1.js
│   │   │       └── result-http-api-controller-v1.js
│   │   └── rpc/
│   │       ├── ask-rpc-controller.js
│   │       ├── base-rpc-controller.js
│   │       ├── batch-get-rpc-controller.js
│   │       ├── finality-rpc-controller.js
│   │       ├── get-rpc-controller.js
│   │       ├── publish-rpc-controller.js
│   │       ├── rpc-router.js
│   │       └── update-rpc-controller.js
│   ├── logger/
│   │   └── logger.js
│   ├── migration/
│   │   ├── base-migration.js
│   │   ├── migration-executor.js
│   │   ├── redis-setup-migration.js
│   │   └── triple-store-user-configuration-migration.js
│   ├── modules/
│   │   ├── auto-updater/
│   │   │   ├── auto-updater-module-manager.js
│   │   │   └── implementation/
│   │   │       └── ot-auto-updater.js
│   │   ├── base-module-manager.js
│   │   ├── blockchain/
│   │   │   ├── blockchain-module-manager.js
│   │   │   └── implementation/
│   │   │       ├── base/
│   │   │       │   └── base-service.js
│   │   │       ├── eth/
│   │   │       │   └── eth-service.js
│   │   │       ├── gnosis/
│   │   │       │   └── gnosis-service.js
│   │   │       ├── hardhat/
│   │   │       │   └── hardhat-service.js
│   │   │       ├── ot-parachain/
│   │   │       │   └── ot-parachain-service.js
│   │   │       ├── polygon/
│   │   │       │   └── polygon-service.js
│   │   │       ├── web3-service-validator.js
│   │   │       └── web3-service.js
│   │   ├── blockchain-events/
│   │   │   ├── blockchain-events-module-manager.js
│   │   │   └── implementation/
│   │   │       ├── blockchain-events-service.js
│   │   │       └── ot-ethers/
│   │   │           └── ot-ethers.js
│   │   ├── http-client/
│   │   │   ├── http-client-module-manager.js
│   │   │   └── implementation/
│   │   │       ├── express-http-client.js
│   │   │       └── middleware/
│   │   │           ├── authentication-middleware.js
│   │   │           ├── authorization-middleware.js
│   │   │           ├── blockchain-id-midleware.js
│   │   │           ├── rate-limiter-middleware.js
│   │   │           └── request-validation-middleware.js
│   │   ├── module-config-validation.js
│   │   ├── network/
│   │   │   ├── implementation/
│   │   │   │   └── libp2p-service.js
│   │   │   └── network-module-manager.js
│   │   ├── repository/
│   │   │   ├── implementation/
│   │   │   │   └── sequelize/
│   │   │   │       ├── migrations/
│   │   │   │       │   ├── 20211117005500-create-commands.js
│   │   │   │       │   ├── 20211117005504-create-operation_ids.js
│   │   │   │       │   ├── 20220620100000-create-publish.js
│   │   │   │       │   ├── 20220620100005-create-publish-response.js
│   │   │   │       │   ├── 20220623125000-create-get.js
│   │   │   │       │   ├── 20220623125001-create-get-response.js
│   │   │   │       │   ├── 20220624020509-create-event.js
│   │   │   │       │   ├── 20220624103229-create-ability.js
│   │   │   │       │   ├── 20220624103610-create-role.js
│   │   │   │       │   ├── 20220624103615-create-user.js
│   │   │   │       │   ├── 20220624103658-create-token.js
│   │   │   │       │   ├── 20220624113659-create-role-ability.js
│   │   │   │       │   ├── 20220628113824-add-predefined-auth-entities.js
│   │   │   │       │   ├── 20221025120253-create-blockchain-event.js
│   │   │   │       │   ├── 20221025212800-create-shard.js
│   │   │   │       │   ├── 20221028125900-create-blockchain.js
│   │   │   │       │   ├── 20221114115524-update-publish-add-agreement-data.js
│   │   │   │       │   ├── 20221206183634-update-shard-types.js
│   │   │   │       │   ├── 20221214110050-update-commands-types.js
│   │   │   │       │   ├── 20221215130500-update-event-types.js
│   │   │   │       │   ├── 20230216112400-add-abilities.js
│   │   │   │       │   ├── 20230227094500-create-update.js
│   │   │   │       │   ├── 20230303131200-update-publish-remove-agreement-data.js
│   │   │   │       │   ├── 20230303131400-create-update-response.js
│   │   │   │       │   ├── 20230413194400-update-command-period-type.js
│   │   │   │       │   ├── 20230419140000-create-service-agreements.js
│   │   │   │       │   ├── 20230502110300-add-blockchain-event-index.js
│   │   │   │       │   ├── 20231201140100-event-add-blockchain-id.js
│   │   │   │       │   ├── 20231221131300-update-abilities.js
│   │   │   │       │   ├── 20233010122500-update-blockchain-id.js
│   │   │   │       │   ├── 20233011121700-remove-blockchain-info.js
│   │   │   │       │   ├── 20240126120000-shard-add-sha256blobl.js
│   │   │   │       │   ├── 20240201100000-remove-sha256Blob.js
│   │   │   │       │   ├── 20240221162000-add-service-agreement-data-source.js
│   │   │   │       │   ├── 20240429083058-create-paranet.js
│   │   │   │       │   ├── 20240529070000-create-missed-paranet-asset.js
│   │   │   │       │   ├── 20240923195000-create-publish-paranet.js
│   │   │   │       │   ├── 20240924161700-create-paranet-synced-asset.js
│   │   │   │       │   ├── 20240924205500-create-publish-paranet-response.js
│   │   │   │       │   ├── 20240927110000-change-paranet-synced-asset-nullable-assertions.js
│   │   │   │       │   ├── 20240930113000-add-error-message.js
│   │   │   │       │   ├── 20241011112100-remove-knowledge-asset-id.js
│   │   │   │       │   ├── 20241014164500-paranet-synced-asset-optional-fileds.js
│   │   │   │       │   ├── 20241023170300-add-synced-data-source.js
│   │   │   │       │   ├── 20241105150000-change-data-source-col-type-in-paranet-synced-asset.js
│   │   │   │       │   ├── 20241105160000-add-indexes-to-tables.js
│   │   │   │       │   ├── 20241125151200-rename-keyword-column-to-datasetroot-in-responses.js
│   │   │   │       │   ├── 20241126114400-add-commands-priority.js
│   │   │   │       │   ├── 20241129120000-add-commands-is_blocking.js
│   │   │   │       │   ├── 20241129125800-remove-datasetroot-response-table.js
│   │   │   │       │   ├── 20241201152000-update-blockchain-events.js
│   │   │   │       │   ├── 20241202214500-update-blockchain-table.js
│   │   │   │       │   ├── 20241203125000-create-finality.js
│   │   │   │       │   ├── 20241203125001-create-finality-response.js
│   │   │   │       │   ├── 20241211204400-rename-ask.js
│   │   │   │       │   ├── 20241211205400-create-finality-response.js
│   │   │   │       │   ├── 20241211205400-create-finality-status.js
│   │   │   │       │   ├── 20241211205400-create-finality.js
│   │   │   │       │   ├── 20241212122200-add-min-acks-reached-column.js
│   │   │   │       │   ├── 20241215122200-create-paranet-kc.js
│   │   │   │       │   ├── 20241226151800-prune-commands.js
│   │   │   │       │   ├── 20250401123500-truncate-commands-table.js
│   │   │   │       │   ├── 20250401155600-create-random-sampling-chanalage.js
│   │   │   │       │   ├── 20250408164300-create-triples-inserted-count-table.js
│   │   │   │       │   ├── 20250422150500-add-tx-hash-blockchain-event.js
│   │   │   │       │   ├── 20250509142900-create-batch-get.js
│   │   │   │       │   ├── 20250509142901-create-latest-synced-kc.js
│   │   │   │       │   └── 20250509142902-create-sync-missed-kc.js
│   │   │   │       ├── models/
│   │   │   │       │   ├── ability.js
│   │   │   │       │   ├── ask-response.js
│   │   │   │       │   ├── ask.js
│   │   │   │       │   ├── base-sync-missed-kc.js
│   │   │   │       │   ├── batch-get.js
│   │   │   │       │   ├── blockchain-event.js
│   │   │   │       │   ├── blockchain.js
│   │   │   │       │   ├── commands.js
│   │   │   │       │   ├── event.js
│   │   │   │       │   ├── finality-response.js
│   │   │   │       │   ├── finality-status.js
│   │   │   │       │   ├── finality.js
│   │   │   │       │   ├── get-response.js
│   │   │   │       │   ├── get.js
│   │   │   │       │   ├── gnosis-sync-missed-kc.js
│   │   │   │       │   ├── hardhat1-sync-missed-kc.js
│   │   │   │       │   ├── hardhat2-sync-missed-kc.js
│   │   │   │       │   ├── latest-synced-kc.js
│   │   │   │       │   ├── missed-paranet-asset.js
│   │   │   │       │   ├── operation_ids.js
│   │   │   │       │   ├── otp-sync-missed-kc.js
│   │   │   │       │   ├── paranet-kc.js
│   │   │   │       │   ├── paranet-synced-asset.js
│   │   │   │       │   ├── paranet.js
│   │   │   │       │   ├── publish-paranet-response.js
│   │   │   │       │   ├── publish-paranet.js
│   │   │   │       │   ├── publish-response.js
│   │   │   │       │   ├── publish.js
│   │   │   │       │   ├── random-sampling-challenge.js
│   │   │   │       │   ├── role-ability.js
│   │   │   │       │   ├── role.js
│   │   │   │       │   ├── shard.js
│   │   │   │       │   ├── token.js
│   │   │   │       │   ├── triples-inserted-count.js
│   │   │   │       │   ├── update-response.js
│   │   │   │       │   ├── update.js
│   │   │   │       │   └── user.js
│   │   │   │       ├── repositories/
│   │   │   │       │   ├── blockchain-event-repository.js
│   │   │   │       │   ├── blockchain-missed-kc-repository.js
│   │   │   │       │   ├── blockchain-repository.js
│   │   │   │       │   ├── command-repository.js
│   │   │   │       │   ├── event-repository.js
│   │   │   │       │   ├── finality-status-repository.js
│   │   │   │       │   ├── inserted-triples-repository.js
│   │   │   │       │   ├── latest-synced-kc-repository.js
│   │   │   │       │   ├── missed-paranet-asset-repository.js
│   │   │   │       │   ├── operation-id-repository.js
│   │   │   │       │   ├── operation-repository.js
│   │   │   │       │   ├── operation-response.js
│   │   │   │       │   ├── paranet-kc-repository.js
│   │   │   │       │   ├── paranet-repository.js
│   │   │   │       │   ├── paranet-synced-asset-repository.js
│   │   │   │       │   ├── random-sampling-challenge-repository.js
│   │   │   │       │   ├── shard-repository.js
│   │   │   │       │   ├── token-repository.js
│   │   │   │       │   └── user-repository.js
│   │   │   │       ├── sequelize-migrator.js
│   │   │   │       └── sequelize-repository.js
│   │   │   └── repository-module-manager.js
│   │   ├── telemetry/
│   │   │   ├── implementation/
│   │   │   │   └── quest-telemetry.js
│   │   │   └── telemetry-module-manager.js
│   │   ├── triple-store/
│   │   │   ├── implementation/
│   │   │   │   ├── ot-blazegraph/
│   │   │   │   │   └── ot-blazegraph.js
│   │   │   │   ├── ot-fuseki/
│   │   │   │   │   └── ot-fuseki.js
│   │   │   │   ├── ot-graphdb/
│   │   │   │   │   └── ot-graphdb.js
│   │   │   │   ├── ot-neptune/
│   │   │   │   │   └── ot-neptune.js
│   │   │   │   └── ot-triple-store.js
│   │   │   └── triple-store-module-manager.js
│   │   └── validation/
│   │       ├── implementation/
│   │       │   └── merkle-validation.js
│   │       └── validation-module-manager.js
│   └── service/
│       ├── ask-service.js
│       ├── auth-service.js
│       ├── batch-get-service.js
│       ├── blockchain-events-service.js
│       ├── claim-rewards-service.js
│       ├── crypto-service.js
│       ├── dependency-injection.js
│       ├── file-service.js
│       ├── finality-service.js
│       ├── get-service.js
│       ├── json-schema-service.js
│       ├── messaging-service.js
│       ├── operation-id-service.js
│       ├── operation-service.js
│       ├── paranet-service.js
│       ├── pending-storage-service.js
│       ├── proofing-service.js
│       ├── protocol-service.js
│       ├── publish-service.js
│       ├── sharding-table-service.js
│       ├── signature-service.js
│       ├── sync-service.js
│       ├── triple-store-service.js
│       ├── ual-service.js
│       ├── update-service.js
│       ├── util/
│       │   ├── jwt-util.js
│       │   └── string-util.js
│       └── validation-service.js
├── test/
│   ├── assertions/
│   │   └── assertions.js
│   ├── bdd/
│   │   ├── features/
│   │   │   ├── bid-suggestion.feature
│   │   │   ├── get-errors.feature
│   │   │   ├── publish-errors.feature
│   │   │   ├── publish.feature
│   │   │   ├── smoke.feature
│   │   │   └── update-errors.feature
│   │   ├── run-bdd.sh
│   │   └── steps/
│   │       ├── api/
│   │       │   ├── bid-suggestion.mjs
│   │       │   ├── get.mjs
│   │       │   ├── info.mjs
│   │       │   ├── publish.mjs
│   │       │   ├── resolve.mjs
│   │       │   └── update.mjs
│   │       ├── blockchain.mjs
│   │       ├── common.mjs
│   │       ├── hooks.mjs
│   │       └── lib/
│   │           ├── local-blockchain.mjs
│   │           └── ot-node-process.mjs
│   ├── modules/
│   │   └── telemetry/
│   │       ├── config.json
│   │       └── telemetry.js
│   ├── unit/
│   │   ├── api/
│   │   │   └── http-api-router.test.js
│   │   ├── commands/
│   │   │   └── operation-id-cleaner-command.test.js
│   │   ├── controllers/
│   │   │   └── publish-http-api-controller-v1.test.js
│   │   ├── middleware/
│   │   │   ├── authentication-middleware.test.js
│   │   │   └── authorization-middleware.test.js
│   │   ├── mock/
│   │   │   ├── blockchain-module-manager-mock.js
│   │   │   ├── command-executor-mock.js
│   │   │   ├── event-emitter-mock.js
│   │   │   ├── http-client-module-manager-mock.js
│   │   │   ├── json-schema-service-mock.js
│   │   │   ├── network-module-manager-mock.js
│   │   │   ├── operation-id-service-mock.js
│   │   │   ├── repository-module-manager-mock.js
│   │   │   └── validation-module-manager-mock.js
│   │   ├── modules/
│   │   │   ├── repository/
│   │   │   │   ├── config.json
│   │   │   │   └── repository.test.js
│   │   │   ├── triple-store/
│   │   │   │   ├── config.json
│   │   │   │   └── triple-store.test.js
│   │   │   └── validation/
│   │   │       ├── config.json
│   │   │       └── validation-module-manager.test.js
│   │   ├── service/
│   │   │   ├── auth-service.test.js
│   │   │   ├── get-service.test.js
│   │   │   ├── operation-id-service-cache.test.js
│   │   │   ├── operation-service.test.js
│   │   │   ├── publish-service.test.js
│   │   │   ├── sharding-table-service.test.js
│   │   │   ├── update-service.test.js
│   │   │   ├── util/
│   │   │   │   └── jwt-util.test.js
│   │   │   └── validation-service.test.js
│   │   └── sparlql-query-service.test.js
│   └── utilities/
│       ├── dkg-client-helper.mjs
│       ├── http-api-helper.mjs
│       ├── steps-utils.mjs
│       └── utilities.js
├── tools/
│   ├── local-network-setup/
│   │   ├── .origintrail_noderc_template.json
│   │   ├── README.md
│   │   ├── generate-config-files.js
│   │   ├── run-local-blockchain.js
│   │   ├── setup-linux-environment.sh
│   │   └── setup-macos-environment.sh
│   ├── ot-parachain-account-mapping/
│   │   └── create-account-mapping-signature.js
│   ├── substrate-accounts-mapping/
│   │   ├── README.md
│   │   └── accounts-mapping.js
│   └── token-generation.js
└── v8-data-migration/
    ├── abi/
    │   ├── ContentAssetStorage.json
    │   └── ContentAssetStorageV2.json
    ├── blockchain-utils.js
    ├── constants.js
    ├── logger.js
    ├── run-data-migration.sh
    ├── sqlite-utils.js
    ├── triple-store-utils.js
    ├── v8-data-migration-utils.js
    ├── v8-data-migration.js
    └── validation.js
Download .txt
SYMBOL INDEX (2051 symbols across 282 files)

FILE: ot-node.js
  class OTNode (line 19) | class OTNode {
    method constructor (line 20) | constructor(config) {
    method start (line 32) | async start() {
    method checkNodeVersion (line 81) | checkNodeVersion() {
    method initializeLogger (line 93) | initializeLogger() {
    method initializeFileService (line 97) | initializeFileService() {
    method initializeAutoUpdaterModule (line 101) | initializeAutoUpdaterModule() {
    method initializeConfiguration (line 109) | initializeConfiguration(userConfig) {
    method initializeDependencyContainer (line 123) | async initializeDependencyContainer() {
    method initializeModules (line 131) | async initializeModules() {
    method initializeEventEmitter (line 148) | initializeEventEmitter() {
    method initializeRouters (line 155) | async initializeRouters() {
    method createProfiles (line 182) | async createProfiles() {
    method initializeCommandExecutor (line 254) | async initializeCommandExecutor() {
    method resumeCommandExecutor (line 270) | resumeCommandExecutor() {
    method startNetworkModule (line 283) | async startNetworkModule() {
    method initializeShardingTableService (line 288) | async initializeShardingTableService() {
    method initializeBlockchainEventsService (line 301) | initializeBlockchainEventsService() {
    method removeUpdateFile (line 314) | async removeUpdateFile() {
    method checkForUpdate (line 322) | async checkForUpdate() {
    method initializeParanets (line 333) | async initializeParanets() {
    method initializeProofing (line 416) | async initializeProofing() {
    method initializeClaimRewards (line 421) | async initializeClaimRewards() {
    method initializeSyncService (line 426) | async initializeSyncService() {
    method stop (line 431) | stop(code = 0) {
    method handleExit (line 436) | async handleExit() {

FILE: scripts/copy-assertions.js
  function getAssertions (line 45) | async function getAssertions(implementation, repository) {
  function logPercentage (line 58) | function logPercentage(index, max) {

FILE: scripts/set-ask.js
  function getGasPrice (line 19) | async function getGasPrice(gasPriceOracleLink, hubContractAddress, provi...
  function setAsk (line 44) | async function setAsk(rpcEndpoint, ask, walletPrivateKey, hubContractAdd...

FILE: scripts/set-operator-fee.js
  function setOperatorFee (line 19) | async function setOperatorFee(rpcEndpoint, operatorFee, walletPrivateKey...

FILE: scripts/set-stake.js
  function getGasPrice (line 31) | async function getGasPrice(gasPriceOracleLink, hubContractAddress, provi...
  function setStake (line 63) | async function setStake(

FILE: scripts/utils.js
  function validateArguments (line 1) | function validateArguments(received, expected) {

FILE: src/commands/blockchain-event-listener/blockchain-event-listener-command.js
  class BlockchainEventListenerCommand (line 13) | class BlockchainEventListenerCommand extends Command {
    method constructor (line 14) | constructor(ctx) {
    method execute (line 29) | async execute(command) {
    method fetchAndHandleBlockchainEvents (line 51) | async fetchAndHandleBlockchainEvents(blockchainId, repositoryTransacti...
    method isIndependentEvent (line 132) | isIndependentEvent(contractName, eventName) {
    method processIndependentEvents (line 137) | async processIndependentEvents(currentBlock, repositoryTransaction) {
    method processDependentEvents (line 145) | async processDependentEvents(currentBlock, repositoryTransaction) {
    method processEvent (line 200) | async processEvent(event, currentBlock, repositoryTransaction) {
    method handleParameterChangedEvent (line 218) | async handleParameterChangedEvent(event) {
    method handleNewContractEvent (line 237) | async handleNewContractEvent(event, currentBlock, repositoryTransactio...
    method handleContractChangedEvent (line 298) | async handleContractChangedEvent(event, currentBlock, repositoryTransa...
    method handleNewAssetStorageEvent (line 359) | async handleNewAssetStorageEvent(event, currentBlock, repositoryTransa...
    method handleAssetStorageChangedEvent (line 419) | async handleAssetStorageChangedEvent(event, currentBlock, repositoryTr...
    method handleKnowledgeCollectionCreatedEvent (line 479) | async handleKnowledgeCollectionCreatedEvent(event) {
    method handleAssetUpdatedEvent (line 492) | async handleAssetUpdatedEvent(event) {
    method recover (line 542) | async recover() {
    method default (line 551) | default(map) {

FILE: src/commands/blockchain-event-listener/event-listener-command.js
  class EventListenerCommand (line 10) | class EventListenerCommand extends Command {
    method constructor (line 11) | constructor(ctx) {
    method calculateCommandPeriod (line 19) | calculateCommandPeriod() {
    method execute (line 29) | async execute() {
    method recover (line 60) | async recover(command) {
    method default (line 71) | default(map) {

FILE: src/commands/cleaners/ask-cleaner-command.js
  class AskCleanerCommand (line 10) | class AskCleanerCommand extends CleanerCommand {
    method deleteRows (line 11) | async deleteRows(nowTimestamp) {
    method default (line 24) | default(map) {

FILE: src/commands/cleaners/ask-response-cleaner-command.js
  class AskResponseCleanerCommand (line 10) | class AskResponseCleanerCommand extends CleanerCommand {
    method deleteRows (line 11) | async deleteRows(nowTimestamp) {
    method default (line 24) | default(map) {

FILE: src/commands/cleaners/batch-get-cleaner-command.js
  class BatchGetCleanerCommand (line 10) | class BatchGetCleanerCommand extends CleanerCommand {
    method deleteRows (line 11) | async deleteRows(nowTimestamp) {
    method default (line 24) | default(map) {

FILE: src/commands/cleaners/blockchain-event-cleaner-command.js
  class BlockchainEventCleanerCommand (line 9) | class BlockchainEventCleanerCommand extends CleanerCommand {
    method deleteRows (line 10) | async deleteRows(nowTimestamp) {
    method default (line 22) | default(map) {

FILE: src/commands/cleaners/cleaner-command.js
  class CleanerCommand (line 4) | class CleanerCommand extends Command {
    method constructor (line 5) | constructor(ctx) {
    method execute (line 14) | async execute() {
    method deleteRows (line 27) | async deleteRows(nowTimestamp) {
    method recover (line 36) | async recover(command) {

FILE: src/commands/cleaners/commands-cleaner-command.js
  class CommandsCleanerCommand (line 8) | class CommandsCleanerCommand extends CleanerCommand {
    method deleteRows (line 9) | async deleteRows(nowTimestamp) {
    method default (line 21) | default(map) {

FILE: src/commands/cleaners/finality-cleaner-command.js
  class FinalityCleanerCommand (line 10) | class FinalityCleanerCommand extends CleanerCommand {
    method deleteRows (line 11) | async deleteRows(nowTimestamp) {
    method default (line 24) | default(map) {

FILE: src/commands/cleaners/finality-response-cleaner-command.js
  class FinalityResponseCleanerCommand (line 10) | class FinalityResponseCleanerCommand extends CleanerCommand {
    method deleteRows (line 11) | async deleteRows(nowTimestamp) {
    method default (line 24) | default(map) {

FILE: src/commands/cleaners/get-cleaner-command.js
  class GetCleanerCommand (line 10) | class GetCleanerCommand extends CleanerCommand {
    method deleteRows (line 11) | async deleteRows(nowTimestamp) {
    method default (line 24) | default(map) {

FILE: src/commands/cleaners/get-response-cleaner-command.js
  class GetResponseCleanerCommand (line 10) | class GetResponseCleanerCommand extends CleanerCommand {
    method deleteRows (line 11) | async deleteRows(nowTimestamp) {
    method default (line 24) | default(map) {

FILE: src/commands/cleaners/operation-id-cleaner-command.js
  class OperationIdCleanerCommand (line 14) | class OperationIdCleanerCommand extends Command {
    method constructor (line 15) | constructor(ctx) {
    method execute (line 26) | async execute() {
    method recover (line 78) | async recover(command) {
    method default (line 88) | default(map) {

FILE: src/commands/cleaners/pending-storage-cleaner-command.js
  class PendingStorageCleanerCommand (line 12) | class PendingStorageCleanerCommand extends Command {
    method constructor (line 13) | constructor(ctx) {
    method execute (line 23) | async execute() {
    method recover (line 42) | async recover(command) {
    method default (line 52) | default(map) {

FILE: src/commands/cleaners/publish-cleaner-command.js
  class PublishCleanerCommand (line 10) | class PublishCleanerCommand extends CleanerCommand {
    method deleteRows (line 11) | async deleteRows(nowTimestamp) {
    method default (line 24) | default(map) {

FILE: src/commands/cleaners/publish-response-cleaner-command.js
  class PublishResponseCleanerCommand (line 10) | class PublishResponseCleanerCommand extends CleanerCommand {
    method deleteRows (line 11) | async deleteRows(nowTimestamp) {
    method default (line 24) | default(map) {

FILE: src/commands/cleaners/update-cleaner-command.js
  class UpdateCleanerCommand (line 10) | class UpdateCleanerCommand extends CleanerCommand {
    method deleteRows (line 11) | async deleteRows(nowTimestamp) {
    method default (line 24) | default(map) {

FILE: src/commands/cleaners/update-response-cleaner-command.js
  class UpdateResponseCleanerCommand (line 10) | class UpdateResponseCleanerCommand extends CleanerCommand {
    method deleteRows (line 11) | async deleteRows(nowTimestamp) {
    method default (line 24) | default(map) {

FILE: src/commands/command-executor.js
  class CommandExecutor (line 14) | class CommandExecutor {
    method constructor (line 15) | constructor(ctx) {
    method addDefaultCommands (line 190) | async addDefaultCommands() {
    method resumeCommandExecutor (line 199) | async resumeCommandExecutor() {
    method pauseCommandExecutor (line 212) | async pauseCommandExecutor() {
    method _addDefaultCommand (line 226) | async _addDefaultCommand(name) {
    method removePeriodicCommand (line 249) | async removePeriodicCommand(commandNames) {
    method add (line 266) | async add(addCommand, addDelay) {
    method commandExecutorShutdown (line 292) | async commandExecutorShutdown() {

FILE: src/commands/command-resolver.js
  class CommandResolver (line 4) | class CommandResolver {
    method constructor (line 5) | constructor(ctx) {
    method resolve (line 15) | resolve(name) {

FILE: src/commands/command.js
  class Command (line 6) | class Command {
    method constructor (line 7) | constructor(ctx) {
    method execute (line 17) | async execute() {
    method recover (line 26) | async recover(command) {
    method expired (line 36) | async expired() {
    method pack (line 44) | pack(data) {
    method unpack (line 52) | unpack(data) {
    method continueSequence (line 62) | continueSequence(data, sequence, opts) {
    method build (line 93) | build(name, data, sequence, opts) {
    method retryFinished (line 106) | async retryFinished(command) {
    method handleError (line 118) | async handleError(operationId, blockchain, errorMessage, errorName, ma...
    method default (line 135) | default() {
    method empty (line 143) | static empty() {
    method repeat (line 153) | static repeat() {
    method retry (line 163) | static retry() {

FILE: src/commands/common/dial-peers-command.js
  class DialPeersCommand (line 9) | class DialPeersCommand extends Command {
    method constructor (line 10) | constructor(ctx) {
    method execute (line 20) | async execute() {
    method recover (line 41) | async recover(command) {
    method default (line 51) | default(map) {

FILE: src/commands/common/log-public-addresses-command.js
  class LogPublicAddressesCommand (line 5) | class LogPublicAddressesCommand extends Command {
    method constructor (line 6) | constructor(ctx) {
    method execute (line 17) | async execute() {
    method recover (line 63) | async recover(command) {
    method default (line 73) | default(map) {

FILE: src/commands/common/otnode-update-command.js
  class OtnodeUpdateCommand (line 5) | class OtnodeUpdateCommand extends Command {
    method constructor (line 6) | constructor(ctx) {
    method execute (line 18) | async execute() {
    method recover (line 55) | async recover(command) {
    method handleError (line 61) | async handleError(errorMessage) {
    method default (line 70) | default(map) {

FILE: src/commands/common/send-telemetry-command.js
  class SendTelemetryCommand (line 11) | class SendTelemetryCommand extends Command {
    method constructor (line 12) | constructor(ctx) {
    method execute (line 27) | async execute() {
    method recover (line 83) | async recover(command) {
    method handleError (line 89) | async handleError(errorMessage) {
    method default (line 98) | default(map) {
    method getUnpublishedEvents (line 111) | async getUnpublishedEvents() {
    method removePublishedEvents (line 115) | async removePublishedEvents(events) {

FILE: src/commands/common/send-transaction-command.js
  class SendTransactionCommand (line 4) | class SendTransactionCommand extends Command {
    method sendTransactionAndHandleResult (line 5) | async sendTransactionAndHandleResult(transactionCompletePromise, data,...
    method default (line 143) | default(map) {

FILE: src/commands/common/sharding-table-check-command.js
  class ShardingTableCheckCommand (line 7) | class ShardingTableCheckCommand extends Command {
    method constructor (line 8) | constructor(ctx) {
    method execute (line 22) | async execute() {
    method recover (line 55) | async recover(command) {
    method handleError (line 61) | async handleError(errorMessage) {
    method default (line 70) | default(map) {

FILE: src/commands/common/validate-asset-command.js
  class ValidateAssetCommand (line 9) | class ValidateAssetCommand extends Command {
    method constructor (line 10) | constructor(ctx) {
    method execute (line 25) | async execute(command) {
    method retryFinished (line 170) | async retryFinished(command) {
    method default (line 187) | default(map) {

FILE: src/commands/paranet/paranet-sync-command.js
  class ParanetSyncCommand (line 21) | class ParanetSyncCommand extends Command {
    method constructor (line 22) | constructor(ctx) {
    method execute (line 36) | async execute(command) {
    method syncKcState (line 134) | async syncKcState(
    method syncKc (line 289) | async syncKc(paranetUAL, ual, paranetId, paranetNodesAccessPolicy, ope...
    method recover (line 341) | async recover(command) {
    method default (line 352) | default(map) {

FILE: src/commands/paranet/start-paranet-sync-commands.js
  class StartParanetSyncCommands (line 9) | class StartParanetSyncCommands extends Command {
    method constructor (line 10) | constructor(ctx) {
    method execute (line 21) | async execute() {
    method recover (line 78) | async recover(command) {
    method default (line 89) | default(map) {

FILE: src/commands/protocols/ask/receiver/v1.0.0/v1-0-0-handle-ask-request-command.js
  class HandleAskRequestCommand (line 8) | class HandleAskRequestCommand extends HandleProtocolMessageCommand {
    method constructor (line 9) | constructor(ctx) {
    method prepareMessage (line 21) | async prepareMessage(commandData) {
    method default (line 66) | default(map) {

FILE: src/commands/protocols/ask/sender/ask-find-shard-command.js
  class AskFindShardCommand (line 4) | class AskFindShardCommand extends FindShardCommand {
    method constructor (line 5) | constructor(ctx) {
    method getOperationCommandSequence (line 15) | getOperationCommandSequence(nodePartOfShard, commandData) {
    method default (line 24) | default(map) {

FILE: src/commands/protocols/ask/sender/ask-schedule-messages-command.js
  class AskScheduleMessagesCommand (line 4) | class AskScheduleMessagesCommand extends ProtocolScheduleMessagesCommand {
    method constructor (line 5) | constructor(ctx) {
    method getNextCommandData (line 14) | getNextCommandData(command) {
    method default (line 28) | default(map) {

FILE: src/commands/protocols/ask/sender/network-ask-command.js
  class NetworkAskCommand (line 4) | class NetworkAskCommand extends NetworkProtocolCommand {
    method constructor (line 5) | constructor(ctx) {
    method default (line 18) | default(map) {

FILE: src/commands/protocols/ask/sender/v1.0.0/v1-0-0-ask-request-command.js
  class AskRequestCommand (line 9) | class AskRequestCommand extends ProtocolRequestCommand {
    method constructor (line 10) | constructor(ctx) {
    method shouldSendMessage (line 18) | async shouldSendMessage(command) {
    method prepareMessage (line 33) | async prepareMessage(command) {
    method messageTimeout (line 44) | messageTimeout() {
    method handleAck (line 48) | async handleAck(command, responseData) {
    method default (line 67) | default(map) {

FILE: src/commands/protocols/common/find-curated-paranet-nodes-command.js
  class FindCuratedParanetNodesCommand (line 4) | class FindCuratedParanetNodesCommand extends Command {
    method constructor (line 5) | constructor(ctx) {
    method execute (line 19) | async execute(command) {
    method findNodes (line 69) | async findNodes(blockchainId, operationId, paranetId) {
    method default (line 113) | default(map) {

FILE: src/commands/protocols/common/find-shard-command.js
  class FindShardCommand (line 4) | class FindShardCommand extends Command {
    method constructor (line 5) | constructor(ctx) {
    method getOperationCommandSequence (line 15) | getOperationCommandSequence(nodePartOfShard, commandData) {
    method execute (line 23) | async execute(command) {
    method findShardNodes (line 101) | async findShardNodes(blockchainId) {
    method default (line 122) | default(map) {

FILE: src/commands/protocols/common/handle-protocol-message-command.js
  class HandleProtocolMessageCommand (line 4) | class HandleProtocolMessageCommand extends Command {
    method constructor (line 5) | constructor(ctx) {
    method execute (line 22) | async execute(command) {
    method prepareMessage (line 56) | async prepareMessage() {
    method validateShard (line 60) | async validateShard(blockchain) {
    method validateAssertionId (line 70) | async validateAssertionId(blockchain, contract, tokenId, assertionId, ...
    method validateReceivedData (line 84) | async validateReceivedData(operationId, datasetRoot, dataset, blockcha...
    method handleError (line 113) | async handleError(errorMessage, command) {

FILE: src/commands/protocols/common/network-protocol-command.js
  class NetworkProtocolCommand (line 4) | class NetworkProtocolCommand extends Command {
    method constructor (line 5) | constructor(ctx) {
    method execute (line 17) | async execute(command) {
    method getBatchSize (line 45) | getBatchSize() {
    method getMinAckResponses (line 49) | getMinAckResponses() {
    method default (line 58) | default(map) {

FILE: src/commands/protocols/common/protocol-message-command.js
  class ProtocolMessageCommand (line 4) | class ProtocolMessageCommand extends Command {
    method constructor (line 5) | constructor(ctx) {
    method executeProtocolMessageCommand (line 10) | async executeProtocolMessageCommand(command, messageType) {
    method shouldSendMessage (line 20) | async shouldSendMessage() {
    method prepareMessage (line 24) | async prepareMessage() {
    method sendProtocolMessage (line 28) | async sendProtocolMessage(command, message, messageType) {
    method messageTimeout (line 58) | messageTimeout() {
    method handleAck (line 62) | async handleAck(command) {
    method handleBusy (line 66) | async handleBusy() {
    method handleNack (line 70) | async handleNack(command, responseData) {
    method recover (line 78) | async recover(command) {
    method markResponseAsFailed (line 86) | async markResponseAsFailed(command, errorMessage) {
    method retryFinished (line 92) | async retryFinished(command) {

FILE: src/commands/protocols/common/protocol-request-command.js
  class ProtocolRequestCommand (line 5) | class ProtocolRequestCommand extends ProtocolMessageCommand {
    method execute (line 6) | async execute(command) {
    method handleAck (line 15) | async handleAck(command, responseData) {

FILE: src/commands/protocols/common/protocol-schedule-messages-command.js
  class ProtocolScheduleMessagesCommand (line 4) | class ProtocolScheduleMessagesCommand extends Command {
    method constructor (line 5) | constructor(ctx) {
    method execute (line 18) | async execute(command) {
    method getNextCommandData (line 78) | getNextCommandData(command) {
    method default (line 91) | default(map) {

FILE: src/commands/protocols/common/validate-assertion-metadata-command.js
  class ValidateAssertionMetadataCommand (line 4) | class ValidateAssertionMetadataCommand extends Command {
    method constructor (line 5) | constructor(ctx) {
    method execute (line 14) | async execute(command) {
    method default (line 67) | default(map) {

FILE: src/commands/protocols/finality/receiver/publish-finality-save-ack-command.js
  class PublishFinalitySaveAckCommand (line 8) | class PublishFinalitySaveAckCommand extends Command {
    method constructor (line 9) | constructor(ctx) {
    method execute (line 22) | async execute(command) {
    method default (line 71) | default(map) {

FILE: src/commands/protocols/finality/receiver/v1.0.0/v1-0-0-handle-finality-request-command.js
  class HandleFinalityRequestCommand (line 9) | class HandleFinalityRequestCommand extends HandleProtocolMessageCommand {
    method constructor (line 10) | constructor(ctx) {
    method prepareMessage (line 28) | async prepareMessage(commandData) {
    method execute (line 32) | async execute(command) {
    method default (line 92) | default(map) {

FILE: src/commands/protocols/finality/sender/finality-schedule-messages-command.js
  class FinalityScheduleMessagesCommand (line 8) | class FinalityScheduleMessagesCommand extends ProtocolScheduleMessagesCo...
    method constructor (line 9) | constructor(ctx) {
    method getNextCommandData (line 20) | getNextCommandData(command) {
    method default (line 33) | default(map) {

FILE: src/commands/protocols/finality/sender/find-publisher-node-command.js
  class FindPublisherNodeCommand (line 4) | class FindPublisherNodeCommand extends Command {
    method constructor (line 5) | constructor(ctx) {
    method execute (line 14) | async execute(command) {
    method default (line 35) | default(map) {

FILE: src/commands/protocols/finality/sender/network-finality-command.js
  class NetworkFinalityCommand (line 9) | class NetworkFinalityCommand extends NetworkProtocolCommand {
    method constructor (line 10) | constructor(ctx) {
    method execute (line 18) | async execute(command) {
    method default (line 35) | default(map) {

FILE: src/commands/protocols/finality/sender/v1.0.0/v1-0-0-finality-request-command.js
  class FinalityRequestCommand (line 10) | class FinalityRequestCommand extends ProtocolRequestCommand {
    method constructor (line 11) | constructor(ctx) {
    method prepareMessage (line 19) | async prepareMessage(command) {
    method handleAck (line 25) | async handleAck(command) {
    method handleNack (line 35) | async handleNack(command, responseData) {
    method messageTimeout (line 49) | messageTimeout() {
    method default (line 58) | default(map) {

FILE: src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-batch-get-request-command.js
  class HandleBatchGetRequestCommand (line 15) | class HandleBatchGetRequestCommand extends HandleProtocolMessageCommand {
    method constructor (line 16) | constructor(ctx) {
    method prepareMessage (line 35) | async prepareMessage(commandData) {
    method default (line 130) | default(map) {

FILE: src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-request-command.js
  class HandleGetRequestCommand (line 11) | class HandleGetRequestCommand extends HandleProtocolMessageCommand {
    method constructor (line 12) | constructor(ctx) {
    method prepareMessage (line 27) | async prepareMessage(commandData) {
    method default (line 195) | default(map) {

FILE: src/commands/protocols/get/sender/batch-get-command.js
  class BatchGetCommand (line 20) | class BatchGetCommand extends Command {
    method constructor (line 21) | constructor(ctx) {
    method handleError (line 45) | async handleError(operationId, blockchain, errorMessage, errorType) {
    method execute (line 65) | async execute(command) {
    method validateUALs (line 424) | async validateUALs(operationId, blockchain, uals) {
    method findShardNodes (line 558) | async findShardNodes(operationId, blockchain, currentPeerId) {
    method sendMessage (line 589) | async sendMessage(node, operationId, message) {
    method validateBatchResponse (line 603) | async validateBatchResponse(
    method default (line 679) | default(map) {

FILE: src/commands/protocols/get/sender/get-command.js
  class GetCommand (line 18) | class GetCommand extends Command {
    method constructor (line 19) | constructor(ctx) {
    method handleError (line 36) | async handleError(operationId, blockchain, errorMessage, errorType) {
    method execute (line 54) | async execute(command) {
    method _tryCacheFallback (line 463) | async _tryCacheFallback(
    method _filterAssertionByContentType (line 543) | _filterAssertionByContentType(assertion, contentType) {
    method validateUAL (line 554) | async validateUAL(operationId, blockchain, contract, knowledgeCollecti...
    method validateParanet (line 582) | async validateParanet(
    method findShardNodes (line 651) | async findShardNodes(operationId, blockchain, currentPeerId) {
    method sendMessage (line 682) | async sendMessage(node, operationId, message) {
    method validateResponse (line 696) | async validateResponse(
    method default (line 797) | default(map) {

FILE: src/commands/protocols/publish/publish-finalization-command.js
  class PublishFinalizationCommand (line 13) | class PublishFinalizationCommand extends Command {
    method constructor (line 14) | constructor(ctx) {
    method execute (line 29) | async execute(command) {
    method validatePublishData (line 198) | async validatePublishData(merkleRoot, cachedMerkleRoot, byteSize, asse...
    method readWithRetries (line 216) | async readWithRetries(publishOperationId) {
    method default (line 250) | default(map) {

FILE: src/commands/protocols/publish/receiver/v1.0.0/v1-0-0-handle-store-request-command.js
  class HandleStoreRequestCommand (line 10) | class HandleStoreRequestCommand extends HandleProtocolMessageCommand {
    method constructor (line 11) | constructor(ctx) {
    method prepareMessage (line 29) | async prepareMessage(commandData) {
    method default (line 102) | default(map) {

FILE: src/commands/protocols/publish/sender/publish-replication-command.js
  class PublishReplicationCommand (line 16) | class PublishReplicationCommand extends Command {
    method constructor (line 17) | constructor(ctx) {
    method execute (line 32) | async execute(command) {
    method sendAndHandleMessage (line 206) | async sendAndHandleMessage(node, operationId, message, command) {
    method findShardNodes (line 272) | async findShardNodes(blockchainId) {
    method createSignatures (line 288) | async createSignatures(blockchain, nodePartOfShard, datasetRoot, opera...
    method default (line 336) | default(map) {

FILE: src/commands/protocols/update/receiver/v1.0.0/v1-0-0-handle-update-request-command.js
  class HandleUpdateRequestCommand (line 9) | class HandleUpdateRequestCommand extends HandleProtocolMessageCommand {
    method constructor (line 10) | constructor(ctx) {
    method prepareMessage (line 24) | async prepareMessage(commandData) {
    method default (line 78) | default(map) {

FILE: src/commands/protocols/update/sender/network-update-command.js
  class NetworkUpdateCommand (line 4) | class NetworkUpdateCommand extends NetworkProtocolCommand {
    method constructor (line 5) | constructor(ctx) {
    method default (line 18) | default(map) {

FILE: src/commands/protocols/update/sender/update-find-shard-command.js
  class UpdateFindShardCommand (line 4) | class UpdateFindShardCommand extends FindShardCommand {
    method constructor (line 5) | constructor(ctx) {
    method getOperationCommandSequence (line 13) | getOperationCommandSequence(nodePartOfShard) {
    method default (line 29) | default(map) {

FILE: src/commands/protocols/update/sender/update-schedule-messages-command.js
  class UpdateScheduleMessagesCommand (line 4) | class UpdateScheduleMessagesCommand extends ProtocolScheduleMessagesComm...
    method constructor (line 5) | constructor(ctx) {
    method default (line 20) | default(map) {

FILE: src/commands/protocols/update/sender/update-validate-asset-command.js
  class UpdateValidateAssetCommand (line 4) | class UpdateValidateAssetCommand extends ValidateAssetCommand {
    method constructor (line 5) | constructor(ctx) {
    method handleError (line 11) | async handleError(operationId, blockchain, errorMessage, errorType) {
    method execute (line 24) | async execute(command) {
    method default (line 53) | default(map) {

FILE: src/commands/protocols/update/sender/v1.0.0/v1-0-0-update-request-command.js
  class PublishRequestCommand (line 8) | class PublishRequestCommand extends ProtocolRequestCommand {
    method constructor (line 9) | constructor(ctx) {
    method prepareMessage (line 17) | async prepareMessage(command) {
    method messageTimeout (line 32) | messageTimeout() {
    method handleAck (line 36) | async handleAck(command, responseData) {
    method default (line 57) | default(map) {

FILE: src/commands/protocols/update/update-assertion-command.js
  class UpdateAssertionCommand (line 10) | class UpdateAssertionCommand extends Command {
    method constructor (line 11) | constructor(ctx) {
    method execute (line 22) | async execute(command) {
    method validateCurrentData (line 54) | async validateCurrentData(ual) {
    method default (line 79) | default(map) {

FILE: src/commands/protocols/update/update-validate-assertion-metadata-command.js
  class UpdateValidateAssertionMetadataCommand (line 4) | class UpdateValidateAssertionMetadataCommand extends ValidateAssertionMe...
    method constructor (line 5) | constructor(ctx) {
    method default (line 21) | default(map) {

FILE: src/commands/query/query-command.js
  class QueryCommand (line 10) | class QueryCommand extends Command {
    method constructor (line 11) | constructor(ctx) {
    method execute (line 21) | async execute(command) {
    method validateRepositoryName (line 114) | validateRepositoryName(repository) {
    method default (line 139) | default(map) {

FILE: src/constants/constants.js
  constant WS_RPC_PROVIDER_PRIORITY (line 4) | const WS_RPC_PROVIDER_PRIORITY = 2;
  constant HTTP_RPC_PROVIDER_PRIORITY (line 6) | const HTTP_RPC_PROVIDER_PRIORITY = 1;
  constant FALLBACK_PROVIDER_QUORUM (line 8) | const FALLBACK_PROVIDER_QUORUM = 1;
  constant PUBLISH_BATCH_SIZE (line 10) | const PUBLISH_BATCH_SIZE = 20;
  constant PUBLISH_MIN_NUM_OF_NODE_REPLICATIONS (line 12) | const PUBLISH_MIN_NUM_OF_NODE_REPLICATIONS = 3;
  constant GET_BATCH_SIZE (line 14) | const GET_BATCH_SIZE = 2;
  constant GET_MIN_NUM_OF_NODE_REPLICATIONS (line 16) | const GET_MIN_NUM_OF_NODE_REPLICATIONS = 1;
  constant FINALITY_BATCH_SIZE (line 18) | const FINALITY_BATCH_SIZE = 1;
  constant FINALITY_MIN_NUM_OF_NODE_REPLICATIONS (line 20) | const FINALITY_MIN_NUM_OF_NODE_REPLICATIONS = 1;
  constant ASK_BATCH_SIZE (line 22) | const ASK_BATCH_SIZE = 20;
  constant RPC_PROVIDER_STALL_TIMEOUT (line 24) | const RPC_PROVIDER_STALL_TIMEOUT = 60 * 1000;
  constant SIX_HOURS_IN_MS (line 26) | const SIX_HOURS_IN_MS = 6 * 60 * 60 * 1000;
  constant UINT256_MAX_BN (line 28) | const UINT256_MAX_BN = ethers.constants.MaxUint256;
  constant UINT128_MAX_BN (line 30) | const UINT128_MAX_BN = BigNumber.from(2).pow(128).sub(1);
  constant UINT64_MAX_BN (line 32) | const UINT64_MAX_BN = BigNumber.from(2).pow(64).sub(1);
  constant UINT40_MAX_BN (line 34) | const UINT40_MAX_BN = BigNumber.from(2).pow(40).sub(1);
  constant UINT32_MAX_BN (line 36) | const UINT32_MAX_BN = BigNumber.from(2).pow(32).sub(1);
  constant ONE_ETHER (line 38) | const ONE_ETHER = BigNumber.from('1000000000000000000');
  constant HASH_RING_SIZE (line 40) | const HASH_RING_SIZE = ethers.constants.MaxUint256;
  constant STAKE_UINT256_MULTIPLIER_BN (line 42) | const STAKE_UINT256_MULTIPLIER_BN = UINT256_MAX_BN.div(500000000);
  constant UINT256_UINT32_DIVISOR_BN (line 44) | const UINT256_UINT32_DIVISOR_BN = UINT256_MAX_BN.div(UINT32_MAX_BN);
  constant ZERO_PREFIX (line 46) | const ZERO_PREFIX = '0x';
  constant ZERO_BYTES32 (line 48) | const ZERO_BYTES32 = ethers.constants.HashZero;
  constant ZERO_ADDRESS (line 50) | const ZERO_ADDRESS = ethers.constants.AddressZero;
  constant SCHEMA_CONTEXT (line 52) | const SCHEMA_CONTEXT = 'http://schema.org/';
  constant PRIVATE_ASSERTION_PREDICATE (line 54) | const PRIVATE_ASSERTION_PREDICATE =
  constant TRIPLE_ANNOTATION_LABEL_PREDICATE (line 57) | const TRIPLE_ANNOTATION_LABEL_PREDICATE = 'https://ontology.origintrail....
  constant PRIVATE_RESOURCE_PREDICATE (line 59) | const PRIVATE_RESOURCE_PREDICATE =
  constant DKG_METADATA_PREDICATES (line 62) | const DKG_METADATA_PREDICATES = {
  constant PRIVATE_HASH_SUBJECT_PREFIX (line 70) | const PRIVATE_HASH_SUBJECT_PREFIX = 'https://ontology.origintrail.io/dkg...
  constant UAL_PREDICATE (line 72) | const UAL_PREDICATE = '<https://ontology.origintrail.io/dkg/1.0#UAL>';
  constant COMMIT_BLOCK_DURATION_IN_BLOCKS (line 74) | const COMMIT_BLOCK_DURATION_IN_BLOCKS = 5;
  constant COMMITS_DELAY_BETWEEN_NODES_IN_BLOCKS (line 76) | const COMMITS_DELAY_BETWEEN_NODES_IN_BLOCKS = 5;
  constant TRANSACTION_POLLING_TIMEOUT_MILLIS (line 78) | const TRANSACTION_POLLING_TIMEOUT_MILLIS = 300 * 1000;
  constant SOLIDITY_ERROR_STRING_PREFIX (line 80) | const SOLIDITY_ERROR_STRING_PREFIX = '0x08c379a0';
  constant SOLIDITY_PANIC_CODE_PREFIX (line 82) | const SOLIDITY_PANIC_CODE_PREFIX = '0x4e487b71';
  constant SOLIDITY_PANIC_REASONS (line 84) | const SOLIDITY_PANIC_REASONS = {
  constant LIBP2P_KEY_DIRECTORY (line 96) | const LIBP2P_KEY_DIRECTORY = 'libp2p';
  constant LIBP2P_KEY_FILENAME (line 98) | const LIBP2P_KEY_FILENAME = 'privateKey';
  constant BLS_KEY_DIRECTORY (line 100) | const BLS_KEY_DIRECTORY = 'bls';
  constant BLS_KEY_FILENAME (line 102) | const BLS_KEY_FILENAME = 'secretKey';
  constant TRIPLE_STORE_CONNECT_MAX_RETRIES (line 104) | const TRIPLE_STORE_CONNECT_MAX_RETRIES = 10;
  constant COMMAND_PRIORITY (line 106) | const COMMAND_PRIORITY = {
  constant DEFAULT_COMMAND_PRIORITY (line 114) | const DEFAULT_COMMAND_PRIORITY = COMMAND_PRIORITY.MEDIUM;
  constant DEFAULT_BLOCKCHAIN_EVENT_SYNC_PERIOD_IN_MILLS (line 116) | const DEFAULT_BLOCKCHAIN_EVENT_SYNC_PERIOD_IN_MILLS = 15 * 24 * 60 * 60 ...
  constant MAX_BLOCKCHAIN_EVENT_SYNC_OF_HISTORICAL_BLOCKS_IN_MILLS (line 118) | const MAX_BLOCKCHAIN_EVENT_SYNC_OF_HISTORICAL_BLOCKS_IN_MILLS = 60 * 60 ...
  constant MAXIMUM_NUMBERS_OF_BLOCKS_TO_FETCH (line 120) | const MAXIMUM_NUMBERS_OF_BLOCKS_TO_FETCH = 50;
  constant TRANSACTION_QUEUE_CONCURRENCY (line 122) | const TRANSACTION_QUEUE_CONCURRENCY = 1;
  constant TRIPLE_STORE_CONNECT_RETRY_FREQUENCY (line 124) | const TRIPLE_STORE_CONNECT_RETRY_FREQUENCY = 10;
  constant MAX_FILE_SIZE (line 126) | const MAX_FILE_SIZE = 10000000;
  constant GET_STATES (line 128) | const GET_STATES = { LATEST: 'LATEST', FINALIZED: 'LATEST_FINALIZED' };
  constant BYTES_IN_KILOBYTE (line 130) | const BYTES_IN_KILOBYTE = 1024;
  constant BYTES_IN_MEGABYTE (line 132) | const BYTES_IN_MEGABYTE = BYTES_IN_KILOBYTE * BYTES_IN_KILOBYTE;
  constant PUBLISH_TYPES (line 134) | const PUBLISH_TYPES = { ASSERTION: 'assertion', ASSET: 'asset', INDEX: '...
  constant DEFAULT_GET_STATE (line 136) | const DEFAULT_GET_STATE = GET_STATES.LATEST;
  constant PEER_OFFLINE_LIMIT (line 138) | const PEER_OFFLINE_LIMIT = 24 * 60 * 60 * 1000;
  constant CONTENT_ASSET_HASH_FUNCTION_ID (line 140) | const CONTENT_ASSET_HASH_FUNCTION_ID = 1;
  constant CHUNK_BYTE_SIZE (line 142) | const CHUNK_BYTE_SIZE = 32;
  constant PARANET_SYNC_KA_COUNT (line 144) | const PARANET_SYNC_KA_COUNT = 50;
  constant PARANET_SYNC_RETRIES_LIMIT (line 145) | const PARANET_SYNC_RETRIES_LIMIT = 3;
  constant PARANET_SYNC_RETRY_DELAY_MS (line 146) | const PARANET_SYNC_RETRY_DELAY_MS = 60 * 1000;
  constant PARANET_ACCESS_POLICY (line 148) | const PARANET_ACCESS_POLICY = {
  constant TRIPLE_STORE_REPOSITORIES (line 153) | const TRIPLE_STORE_REPOSITORIES = {
  constant BASE_NAMED_GRAPHS (line 159) | const BASE_NAMED_GRAPHS = {
  constant REQUIRED_MODULES (line 166) | const REQUIRED_MODULES = [
  constant MEDIA_TYPES (line 180) | const MEDIA_TYPES = {
  constant XML_DATA_TYPES (line 191) | const XML_DATA_TYPES = {
  constant MIN_NODE_VERSION (line 199) | const MIN_NODE_VERSION = 16;
  constant NETWORK_API_RATE_LIMIT (line 201) | const NETWORK_API_RATE_LIMIT = {
  constant NETWORK_API_SPAM_DETECTION (line 206) | const NETWORK_API_SPAM_DETECTION = {
  constant NETWORK_API_BLACK_LIST_TIME_WINDOW_MINUTES (line 211) | const NETWORK_API_BLACK_LIST_TIME_WINDOW_MINUTES = 60;
  constant HIGH_TRAFFIC_OPERATIONS_NUMBER_PER_HOUR (line 213) | const HIGH_TRAFFIC_OPERATIONS_NUMBER_PER_HOUR = 16000;
  constant SHARDING_TABLE_CHECK_COMMAND_FREQUENCY_MILLS (line 215) | const SHARDING_TABLE_CHECK_COMMAND_FREQUENCY_MILLS = 10 * 1000;
  constant PARANET_SYNC_FREQUENCY_MILLS (line 217) | const PARANET_SYNC_FREQUENCY_MILLS = 1 * 60 * 1000;
  constant SEND_TELEMETRY_COMMAND_FREQUENCY_MINUTES (line 219) | const SEND_TELEMETRY_COMMAND_FREQUENCY_MINUTES = 15;
  constant PEER_RECORD_UPDATE_DELAY (line 221) | const PEER_RECORD_UPDATE_DELAY = 30 * 60 * 1000;
  constant DEFAULT_COMMAND_CLEANUP_TIME_MILLS (line 223) | const DEFAULT_COMMAND_CLEANUP_TIME_MILLS = 4 * 24 * 60 * 60 * 1000;
  constant REMOVE_SESSION_COMMAND_DELAY (line 225) | const REMOVE_SESSION_COMMAND_DELAY = 2 * 60 * 1000;
  constant OPERATION_IDS_COMMAND_CLEANUP_TIME_MILLS (line 227) | const OPERATION_IDS_COMMAND_CLEANUP_TIME_MILLS = 24 * 60 * 60 * 1000;
  constant GET_LATEST_SERVICE_AGREEMENT_FREQUENCY_MILLS (line 229) | const GET_LATEST_SERVICE_AGREEMENT_FREQUENCY_MILLS = 30 * 1000;
  constant DIAL_PEERS_COMMAND_FREQUENCY_MILLS (line 231) | const DIAL_PEERS_COMMAND_FREQUENCY_MILLS = 30 * 1000;
  constant DIAL_PEERS_CONCURRENCY (line 233) | const DIAL_PEERS_CONCURRENCY = 10;
  constant MIN_DIAL_FREQUENCY_MILLIS (line 235) | const MIN_DIAL_FREQUENCY_MILLIS = 60 * 60 * 1000;
  constant PERMANENT_COMMANDS (line 237) | const PERMANENT_COMMANDS = [
  constant MAX_COMMAND_DELAY_IN_MILLS (line 259) | const MAX_COMMAND_DELAY_IN_MILLS = 14400 * 60 * 1000;
  constant DEFAULT_COMMAND_REPEAT_INTERVAL_IN_MILLS (line 261) | const DEFAULT_COMMAND_REPEAT_INTERVAL_IN_MILLS = 5000;
  constant DEFAULT_COMMAND_DELAY_IN_MILLS (line 263) | const DEFAULT_COMMAND_DELAY_IN_MILLS = 60 * 1000;
  constant TRANSACTION_PRIORITY (line 265) | const TRANSACTION_PRIORITY = {
  constant V0_PRIVATE_ASSERTION_PREDICATE (line 273) | const V0_PRIVATE_ASSERTION_PREDICATE =
  constant DKG_PREDICATE (line 276) | const DKG_PREDICATE = 'https://ontology.origintrail.io/dkg/1.0#';
  constant HAS_NAMED_GRAPH_SUFFIX (line 277) | const HAS_NAMED_GRAPH_SUFFIX = 'hasNamedGraph';
  constant HAS_KNOWLEDGE_ASSET_SUFFIX (line 278) | const HAS_KNOWLEDGE_ASSET_SUFFIX = 'hasKnowledgeAsset';
  constant CONTRACT_FUNCTION_PRIORITY (line 304) | const CONTRACT_FUNCTION_PRIORITY = {};
  constant COMMAND_RETRIES (line 306) | const COMMAND_RETRIES = {};
  constant SIMPLE_ASSET_SYNC_PARAMETERS (line 308) | const SIMPLE_ASSET_SYNC_PARAMETERS = {
  constant PARANET_SYNC_PARAMETERS (line 313) | const PARANET_SYNC_PARAMETERS = {
  constant COMMAND_TX_GAS_INCREASE_FACTORS (line 318) | const COMMAND_TX_GAS_INCREASE_FACTORS = {
  constant MIGRATION_FLAG_PATH (line 324) | const MIGRATION_FLAG_PATH = '.enrichment_migration_done_dkg';
  constant CONTRACT_FUNCTION_GAS_LIMIT_INCREASE_FACTORS (line 326) | const CONTRACT_FUNCTION_GAS_LIMIT_INCREASE_FACTORS = {};
  constant GNOSIS_DEFAULT_GAS_PRICE (line 328) | const GNOSIS_DEFAULT_GAS_PRICE = {
  constant NEURO_DEFAULT_GAS_PRICE (line 333) | const NEURO_DEFAULT_GAS_PRICE = {
  constant CONTRACT_FUNCTION_FIXED_GAS_PRICE (line 338) | const CONTRACT_FUNCTION_FIXED_GAS_PRICE = {};
  constant WEBSOCKET_PROVIDER_OPTIONS (line 340) | const WEBSOCKET_PROVIDER_OPTIONS = {
  constant TRIPLE_STORE_IMPLEMENTATION (line 352) | const TRIPLE_STORE_IMPLEMENTATION = {
  constant NETWORK_MESSAGE_TYPES (line 359) | const NETWORK_MESSAGE_TYPES = {
  constant PARANET_NODES_ACCESS_POLICIES (line 370) | const PARANET_NODES_ACCESS_POLICIES = ['OPEN', 'PERMISSIONED'];
  constant NETWORK_MESSAGE_TIMEOUT_MILLS (line 372) | const NETWORK_MESSAGE_TIMEOUT_MILLS = {
  constant MAX_OPEN_SESSIONS (line 393) | const MAX_OPEN_SESSIONS = 10;
  constant ERROR_TYPE (line 395) | const ERROR_TYPE = {
  constant OPERATION_ID_STATUS (line 491) | const OPERATION_ID_STATUS = {
  constant OPERATIONS (line 684) | const OPERATIONS = {
  constant SERVICE_AGREEMENT_START_TIME_DELAY_FOR_COMMITS_SECONDS (line 693) | const SERVICE_AGREEMENT_START_TIME_DELAY_FOR_COMMITS_SECONDS = {
  constant EXPECTED_TRANSACTION_ERRORS (line 701) | const EXPECTED_TRANSACTION_ERRORS = {
  constant OPERATION_ID_COMMAND_CLEANUP_TIME_MILLS (line 733) | const OPERATION_ID_COMMAND_CLEANUP_TIME_MILLS = 24 * 60 * 60 * 1000;
  constant OPERATION_ID_MEMORY_CLEANUP_TIME_MILLS (line 738) | const OPERATION_ID_MEMORY_CLEANUP_TIME_MILLS = 60 * 60 * 1000;
  constant PUBLISH_STORAGE_MEMORY_CLEANUP_COMMAND_CLEANUP_TIME_MILLS (line 744) | const PUBLISH_STORAGE_MEMORY_CLEANUP_COMMAND_CLEANUP_TIME_MILLS = 12 * 6...
  constant PUBLISH_STORAGE_FILE_CLEANUP_COMMAND_CLEANUP_TIME_MILLS (line 745) | const PUBLISH_STORAGE_FILE_CLEANUP_COMMAND_CLEANUP_TIME_MILLS = 12 * 60 ...
  constant FINALIZED_COMMAND_CLEANUP_TIME_MILLS (line 747) | const FINALIZED_COMMAND_CLEANUP_TIME_MILLS = 1 * 60 * 60 * 1000;
  constant FINALIZED_COMMAND_CLEANUP_TIME_DELAY (line 748) | const FINALIZED_COMMAND_CLEANUP_TIME_DELAY = 1 * 60 * 60 * 1000;
  constant GET_CLEANUP_TIME_MILLS (line 750) | const GET_CLEANUP_TIME_MILLS = 12 * 60 * 60 * 1000;
  constant GET_CLEANUP_TIME_DELAY (line 751) | const GET_CLEANUP_TIME_DELAY = 24 * 60 * 60 * 1000;
  constant GET_RESPONSE_CLEANUP_TIME_MILLS (line 752) | const GET_RESPONSE_CLEANUP_TIME_MILLS = 12 * 60 * 60 * 1000;
  constant GET_RESPONSE_CLEANUP_TIME_DELAY (line 753) | const GET_RESPONSE_CLEANUP_TIME_DELAY = 24 * 60 * 60 * 1000;
  constant PUBLISH_CLEANUP_TIME_MILLS (line 755) | const PUBLISH_CLEANUP_TIME_MILLS = 1 * 60 * 60 * 1000;
  constant PUBLISH_CLEANUP_TIME_DELAY (line 756) | const PUBLISH_CLEANUP_TIME_DELAY = 1 * 60 * 60 * 1000;
  constant PUBLISH_RESPONSE_CLEANUP_TIME_MILLS (line 757) | const PUBLISH_RESPONSE_CLEANUP_TIME_MILLS = 1 * 60 * 60 * 1000;
  constant PUBLISH_RESPONSE_CLEANUP_TIME_DELAY (line 758) | const PUBLISH_RESPONSE_CLEANUP_TIME_DELAY = 1 * 60 * 60 * 1000;
  constant UPDATE_CLEANUP_TIME_MILLS (line 760) | const UPDATE_CLEANUP_TIME_MILLS = 1 * 60 * 60 * 1000;
  constant UPDATE_CLEANUP_TIME_DELAY (line 761) | const UPDATE_CLEANUP_TIME_DELAY = 1 * 60 * 60 * 1000;
  constant UPDATE_RESPONSE_CLEANUP_TIME_MILLS (line 762) | const UPDATE_RESPONSE_CLEANUP_TIME_MILLS = 1 * 60 * 60 * 1000;
  constant UPDATE_RESPONSE_CLEANUP_TIME_DELAY (line 763) | const UPDATE_RESPONSE_CLEANUP_TIME_DELAY = 1 * 60 * 60 * 1000;
  constant ASK_CLEANUP_TIME_MILLS (line 765) | const ASK_CLEANUP_TIME_MILLS = 12 * 60 * 60 * 1000;
  constant ASK_CLEANUP_TIME_DELAY (line 766) | const ASK_CLEANUP_TIME_DELAY = 24 * 60 * 60 * 1000;
  constant ASK_RESPONSE_CLEANUP_TIME_MILLS (line 767) | const ASK_RESPONSE_CLEANUP_TIME_MILLS = 12 * 60 * 60 * 1000;
  constant ASK_RESPONSE_CLEANUP_TIME_DELAY (line 768) | const ASK_RESPONSE_CLEANUP_TIME_DELAY = 24 * 60 * 60 * 1000;
  constant FINALITY_CLEANUP_TIME_MILLS (line 770) | const FINALITY_CLEANUP_TIME_MILLS = 12 * 60 * 60 * 1000;
  constant FINALITY_CLEANUP_TIME_DELAY (line 771) | const FINALITY_CLEANUP_TIME_DELAY = 24 * 60 * 60 * 1000;
  constant FINALITY_RESPONSE_CLEANUP_TIME_MILLS (line 772) | const FINALITY_RESPONSE_CLEANUP_TIME_MILLS = 12 * 60 * 60 * 1000;
  constant FINALITY_RESPONSE_CLEANUP_TIME_DELAY (line 773) | const FINALITY_RESPONSE_CLEANUP_TIME_DELAY = 24 * 60 * 60 * 1000;
  constant PROCESSED_BLOCKCHAIN_EVENTS_CLEANUP_TIME_MILLS (line 775) | const PROCESSED_BLOCKCHAIN_EVENTS_CLEANUP_TIME_MILLS = 1 * 60 * 60 * 1000;
  constant PROCESSED_BLOCKCHAIN_EVENTS_CLEANUP_TIME_DELAY (line 776) | const PROCESSED_BLOCKCHAIN_EVENTS_CLEANUP_TIME_DELAY = 1 * 60 * 60 * 1000;
  constant COMMAND_STATUS (line 782) | const COMMAND_STATUS = {
  constant PENDING_STORAGE_FILES_FOR_REMOVAL_MAX_NUMBER (line 792) | const PENDING_STORAGE_FILES_FOR_REMOVAL_MAX_NUMBER = 100_000;
  constant OPERATION_ID_FILES_FOR_REMOVAL_MAX_NUMBER (line 794) | const OPERATION_ID_FILES_FOR_REMOVAL_MAX_NUMBER = 100;
  constant REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER (line 796) | const REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER = 50_000;
  constant MIGRATION_FOLDER (line 798) | const MIGRATION_FOLDER = 'migrations';
  constant PUBLISHER_NODE_SIGNATURES_FOLDER (line 800) | const PUBLISHER_NODE_SIGNATURES_FOLDER = 'publisher';
  constant NETWORK_SIGNATURES_FOLDER (line 802) | const NETWORK_SIGNATURES_FOLDER = 'network';
  constant GENERAL_COMMAND_QUEUE_PARALLELISM (line 808) | const GENERAL_COMMAND_QUEUE_PARALLELISM = 100;
  constant BATCH_GET_COMMAND_QUEUE_PARALLELISM (line 810) | const BATCH_GET_COMMAND_QUEUE_PARALLELISM = 20;
  constant GET_LATEST_SERVICE_AGREEMENT_BATCH_SIZE (line 812) | const GET_LATEST_SERVICE_AGREEMENT_BATCH_SIZE = 50;
  constant GET_ASSERTION_IDS_MAX_RETRY_COUNT (line 814) | const GET_ASSERTION_IDS_MAX_RETRY_COUNT = 5;
  constant GET_ASSERTION_IDS_RETRY_DELAY_IN_SECONDS (line 816) | const GET_ASSERTION_IDS_RETRY_DELAY_IN_SECONDS = 2;
  constant GET_LATEST_SERVICE_AGREEMENT_EXCLUDE_LATEST_TOKEN_ID (line 818) | const GET_LATEST_SERVICE_AGREEMENT_EXCLUDE_LATEST_TOKEN_ID = 1;
  constant HTTP_API_ROUTES (line 824) | const HTTP_API_ROUTES = {
  constant NETWORK_PROTOCOLS (line 925) | const NETWORK_PROTOCOLS = {
  constant OPERATION_STATUS (line 934) | const OPERATION_STATUS = {
  constant AGREEMENT_STATUS (line 940) | const AGREEMENT_STATUS = {
  constant OPERATION_REQUEST_STATUS (line 945) | const OPERATION_REQUEST_STATUS = {
  constant QUERY_TYPES (line 954) | const QUERY_TYPES = {
  constant LOCAL_STORE_TYPES (line 963) | const LOCAL_STORE_TYPES = {
  constant CONTRACTS (line 972) | const CONTRACTS = {
  constant MONITORED_CONTRACT_EVENTS (line 984) | const MONITORED_CONTRACT_EVENTS = {
  constant MONITORED_CONTRACTS (line 990) | const MONITORED_CONTRACTS = Object.keys(MONITORED_CONTRACT_EVENTS);
  constant MONITORED_EVENTS (line 992) | const MONITORED_EVENTS = Object.values(MONITORED_CONTRACT_EVENTS).flatMap(
  constant CONTRACT_INDEPENDENT_EVENTS (line 996) | const CONTRACT_INDEPENDENT_EVENTS = {};
  constant NODE_ENVIRONMENTS (line 998) | const NODE_ENVIRONMENTS = {
  constant MAXIMUM_FETCH_EVENTS_FAILED_COUNT (line 1006) | const MAXIMUM_FETCH_EVENTS_FAILED_COUNT = 1000;
  constant CONTRACT_EVENT_FETCH_INTERVALS (line 1008) | const CONTRACT_EVENT_FETCH_INTERVALS = {
  constant TRANSACTION_CONFIRMATIONS (line 1013) | const TRANSACTION_CONFIRMATIONS = 1;
  constant SERVICE_AGREEMENT_SOURCES (line 1015) | const SERVICE_AGREEMENT_SOURCES = {
  constant CACHE_DATA_TYPES (line 1022) | const CACHE_DATA_TYPES = {
  constant PARANET_SYNC_SOURCES (line 1027) | const PARANET_SYNC_SOURCES = {
  constant CACHED_FUNCTIONS (line 1039) | const CACHED_FUNCTIONS = {
  constant LOW_BID_SUGGESTION (line 1059) | const LOW_BID_SUGGESTION = 'low';
  constant MED_BID_SUGGESTION (line 1060) | const MED_BID_SUGGESTION = 'med';
  constant HIGH_BID_SUGGESTION (line 1061) | const HIGH_BID_SUGGESTION = 'high';
  constant ALL_BID_SUGGESTION (line 1062) | const ALL_BID_SUGGESTION = 'all';
  constant BID_SUGGESTION_RANGE_ENUM (line 1063) | const BID_SUGGESTION_RANGE_ENUM = [
  constant LOW_BID_SUGGESTION_OFFSET (line 1069) | const LOW_BID_SUGGESTION_OFFSET = 9;
  constant MED_BID_SUGGESTION_OFFSET (line 1070) | const MED_BID_SUGGESTION_OFFSET = 11;
  constant HIGH_BID_SUGGESTION_OFFSET (line 1071) | const HIGH_BID_SUGGESTION_OFFSET = 14;
  constant LOCAL_INSERT_FOR_ASSET_SYNC_MAX_ATTEMPTS (line 1073) | const LOCAL_INSERT_FOR_ASSET_SYNC_MAX_ATTEMPTS = 5;
  constant LOCAL_INSERT_FOR_ASSET_SYNC_RETRY_DELAY (line 1074) | const LOCAL_INSERT_FOR_ASSET_SYNC_RETRY_DELAY = 1000;
  constant LOCAL_INSERT_FOR_CURATED_PARANET_MAX_ATTEMPTS (line 1076) | const LOCAL_INSERT_FOR_CURATED_PARANET_MAX_ATTEMPTS = 5;
  constant LOCAL_INSERT_FOR_CURATED_PARANET_RETRY_DELAY (line 1077) | const LOCAL_INSERT_FOR_CURATED_PARANET_RETRY_DELAY = 1000;
  constant MAX_RETRIES_READ_CACHED_PUBLISH_DATA (line 1079) | const MAX_RETRIES_READ_CACHED_PUBLISH_DATA = 5;
  constant RETRY_DELAY_READ_CACHED_PUBLISH_DATA (line 1080) | const RETRY_DELAY_READ_CACHED_PUBLISH_DATA = 5 * 1000;
  constant TRIPLE_STORE_REPOSITORY (line 1082) | const TRIPLE_STORE_REPOSITORY = {
  constant TRIPLES_VISIBILITY (line 1087) | const TRIPLES_VISIBILITY = {
  constant V6_CONTENT_STORAGE_MAP (line 1093) | const V6_CONTENT_STORAGE_MAP = {
  constant PROOFING_INTERVAL (line 1105) | const PROOFING_INTERVAL = 5 * 60 * 1000;
  constant PROOFING_MAX_ATTEMPTS (line 1106) | const PROOFING_MAX_ATTEMPTS = 120;
  constant REORG_PROOFING_BUFFER (line 1107) | const REORG_PROOFING_BUFFER = 60 * 1000;
  constant CHUNK_SIZE (line 1108) | const CHUNK_SIZE = 32;
  constant CLAIM_REWARDS_INTERVAL (line 1110) | const CLAIM_REWARDS_INTERVAL = 60 * 60 * 1000;
  constant CLAIM_REWARDS_BATCH_SIZE (line 1111) | const CLAIM_REWARDS_BATCH_SIZE = 10;
  constant BATCH_GET_BATCH_SIZE (line 1113) | const BATCH_GET_BATCH_SIZE = 2;
  constant BATCH_GET_UAL_MAX_LIMIT (line 1114) | const BATCH_GET_UAL_MAX_LIMIT = 1000;
  constant SYNC_INTERVAL (line 1116) | const SYNC_INTERVAL = 12 * 1000;
  constant SYNC_BATCH_GET_WAIT_TIME (line 1117) | const SYNC_BATCH_GET_WAIT_TIME = 1000;
  constant SYNC_BATCH_GET_MAX_ATTEMPTS (line 1118) | const SYNC_BATCH_GET_MAX_ATTEMPTS = 15 * 60;
  constant MAX_TOKEN_ID_PER_GET_PAGE (line 1120) | const MAX_TOKEN_ID_PER_GET_PAGE = 50;
  constant BLAZEGRAPH_HEALTH_INTERVAL (line 1122) | const BLAZEGRAPH_HEALTH_INTERVAL = 60 * 1000;
  constant MAX_COMMAND_LIFETIME (line 1124) | const MAX_COMMAND_LIFETIME = 15 * 60 * 1000;

FILE: src/controllers/http-api/base-http-api-controller.js
  class BaseController (line 1) | class BaseController {
    method constructor (line 2) | constructor(ctx) {
    method returnResponse (line 7) | returnResponse(res, status, data) {

FILE: src/controllers/http-api/http-api-router.js
  class HttpApiRouter (line 4) | class HttpApiRouter {
    method constructor (line 5) | constructor(ctx) {
    method initialize (line 31) | async initialize() {
    method initializeBeforeMiddlewares (line 39) | initializeBeforeMiddlewares() {
    method initializeVersionedListeners (line 44) | async initializeVersionedListeners() {
    method initializeRouters (line 80) | initializeRouters() {
    method initializeAfterMiddlewares (line 89) | initializeAfterMiddlewares() {

FILE: src/controllers/http-api/v0/bid-suggestion-http-api-controller-v0.js
  class BidSuggestionController (line 5) | class BidSuggestionController extends BaseController {
    method constructor (line 6) | constructor(ctx) {
    method handleRequest (line 11) | async handleRequest(req, res) {

FILE: src/controllers/http-api/v0/get-http-api-controller-v0.js
  class GetController (line 10) | class GetController extends BaseController {
    method constructor (line 11) | constructor(ctx) {
    method handleRequest (line 22) | async handleRequest(req, res) {

FILE: src/controllers/http-api/v0/info-http-api-controller-v0.js
  class InfoController (line 7) | class InfoController extends BaseController {
    method handleRequest (line 8) | handleRequest(_, res) {

FILE: src/controllers/http-api/v0/local-store-http-api-controller-v0.js
  class LocalStoreController (line 4) | class LocalStoreController extends BaseController {
    method constructor (line 5) | constructor(ctx) {
    method handleRequest (line 13) | async handleRequest(req, res) {

FILE: src/controllers/http-api/v0/publish-http-api-controller-v0.js
  class PublishController (line 9) | class PublishController extends BaseController {
    method constructor (line 10) | constructor(ctx) {
    method handleRequest (line 20) | async handleRequest(req, res) {

FILE: src/controllers/http-api/v0/query-http-api-controller-v0.js
  class QueryController (line 5) | class QueryController extends BaseController {
    method constructor (line 6) | constructor(ctx) {
    method handleRequest (line 13) | async handleRequest(req, res) {

FILE: src/controllers/http-api/v0/result-http-api-controller-v0.js
  class ResultController (line 4) | class ResultController extends BaseController {
    method constructor (line 5) | constructor(ctx) {
    method handleRequest (line 12) | async handleRequest(req, res) {

FILE: src/controllers/http-api/v0/update-http-api-controller-v0.js
  class UpdateController (line 9) | class UpdateController extends BaseController {
    method constructor (line 10) | constructor(ctx) {
    method handleRequest (line 18) | async handleRequest(req, res) {

FILE: src/controllers/http-api/v1/ask-http-api-controller-v1.js
  class AskController (line 4) | class AskController extends BaseController {
    method constructor (line 5) | constructor(ctx) {
    method handleRequest (line 16) | async handleRequest(req, res) {

FILE: src/controllers/http-api/v1/direct-query-http-api-controller-v1.js
  class DirectQueryController (line 9) | class DirectQueryController extends BaseController {
    method constructor (line 10) | constructor(ctx) {
    method handleRequest (line 21) | async handleRequest(req, res) {
    method validateRepositoryName (line 155) | validateRepositoryName(repository) {

FILE: src/controllers/http-api/v1/finality-http-api-controller-v1.js
  class FinalityController (line 3) | class FinalityController extends BaseController {
    method constructor (line 4) | constructor(ctx) {
    method handleRequest (line 14) | async handleRequest(req, res) {

FILE: src/controllers/http-api/v1/get-http-api-controller-v1.js
  class GetController (line 11) | class GetController extends BaseController {
    method constructor (line 12) | constructor(ctx) {
    method handleRequest (line 25) | async handleRequest(req, res) {

FILE: src/controllers/http-api/v1/info-http-api-controller-v1.js
  class InfoController (line 7) | class InfoController extends BaseController {
    method handleRequest (line 8) | handleRequest(_, res) {

FILE: src/controllers/http-api/v1/local-store-http-api-controller-v1.js
  class LocalStoreController (line 8) | class LocalStoreController extends BaseController {
    method constructor (line 9) | constructor(ctx) {
    method handleRequest (line 17) | async handleRequest(req, res) {
    method getKAUALs (line 95) | getKAUALs(dataset, UAL) {

FILE: src/controllers/http-api/v1/publish-http-api-controller-v1.js
  class PublishController (line 11) | class PublishController extends BaseController {
    method constructor (line 12) | constructor(ctx) {
    method handleRequest (line 23) | async handleRequest(req, res) {

FILE: src/controllers/http-api/v1/query-http-api-controller-v1.js
  class QueryController (line 5) | class QueryController extends BaseController {
    method constructor (line 6) | constructor(ctx) {
    method handleRequest (line 13) | async handleRequest(req, res) {

FILE: src/controllers/http-api/v1/result-http-api-controller-v1.js
  class ResultController (line 8) | class ResultController extends BaseController {
    method constructor (line 9) | constructor(ctx) {
    method handleRequest (line 17) | async handleRequest(req, res) {

FILE: src/controllers/rpc/ask-rpc-controller.js
  class AskController (line 4) | class AskController extends BaseController {
    method constructor (line 5) | constructor(ctx) {
    method v1_0_0HandleRequest (line 11) | async v1_0_0HandleRequest(message, remotePeerId, protocol) {

FILE: src/controllers/rpc/base-rpc-controller.js
  class BaseController (line 1) | class BaseController {
    method constructor (line 2) | constructor(ctx) {
    method returnResponse (line 7) | returnResponse(res, status, data) {
    method getCommandSequence (line 11) | getCommandSequence(protocol) {

FILE: src/controllers/rpc/batch-get-rpc-controller.js
  class BatchGetRpcController (line 4) | class BatchGetRpcController extends BaseController {
    method constructor (line 5) | constructor(ctx) {
    method v1_0_0HandleRequest (line 11) | async v1_0_0HandleRequest(message, remotePeerId, protocol) {

FILE: src/controllers/rpc/finality-rpc-controller.js
  class FinalityController (line 4) | class FinalityController extends BaseController {
    method constructor (line 5) | constructor(ctx) {
    method v1_0_0HandleRequest (line 11) | async v1_0_0HandleRequest(message, remotePeerId, protocol) {
    method getCommandSequence (line 39) | getCommandSequence(protocol) {

FILE: src/controllers/rpc/get-rpc-controller.js
  class GetController (line 8) | class GetController extends BaseController {
    method constructor (line 9) | constructor(ctx) {
    method v1_0_0HandleRequest (line 15) | async v1_0_0HandleRequest(message, remotePeerId, protocol) {

FILE: src/controllers/rpc/publish-rpc-controller.js
  class PublishController (line 4) | class PublishController extends BaseController {
    method constructor (line 5) | constructor(ctx) {
    method v1_0_0HandleRequest (line 12) | async v1_0_0HandleRequest(message, remotePeerId, protocol) {

FILE: src/controllers/rpc/rpc-router.js
  class RpcRouter (line 1) | class RpcRouter {
    method constructor (line 2) | constructor(ctx) {
    method initialize (line 17) | initialize() {
    method initializeListeners (line 21) | initializeListeners() {
    method modifyMessage (line 38) | modifyMessage(message, blockchainImplementations) {

FILE: src/controllers/rpc/update-rpc-controller.js
  class UpdateController (line 4) | class UpdateController extends BaseController {
    method constructor (line 5) | constructor(ctx) {
    method v1_0_0HandleRequest (line 12) | async v1_0_0HandleRequest(message, remotePeerId, protocol) {

FILE: src/logger/logger.js
  class Logger (line 7) | class Logger {
    method constructor (line 12) | constructor(logLevel = 'trace', pinoInstance = null) {
    method initialize (line 23) | initialize(logLevel) {
    method child (line 61) | child(bindings) {
    method restart (line 68) | restart() {
    method startTimer (line 80) | startTimer(label) {
    method endTimer (line 93) | endTimer(label) {
    method silent (line 114) | silent(obj) {
    method fatal (line 122) | fatal(obj) {
    method error (line 130) | error(obj) {
    method warn (line 138) | warn(obj) {
    method info (line 146) | info(obj) {
    method debug (line 154) | debug(obj) {
    method emit (line 162) | emit(obj) {
    method trace (line 171) | trace(obj) {
    method api (line 179) | api(obj) {
    method closeLogger (line 187) | closeLogger(closingMessage) {

FILE: src/migration/base-migration.js
  class BaseMigration (line 4) | class BaseMigration {
    method constructor (line 5) | constructor(migrationName, logger, config) {
    method migrationAlreadyExecuted (line 25) | async migrationAlreadyExecuted(migrationName = null) {
    method migrate (line 36) | async migrate(migrationPath = null) {
    method getMigrationInfo (line 55) | async getMigrationInfo(migrationName = null) {
    method saveMigrationInfo (line 68) | async saveMigrationInfo(migrationInfo) {
    method executeMigration (line 79) | async executeMigration() {

FILE: src/migration/migration-executor.js
  class MigrationExecutor (line 7) | class MigrationExecutor {
    method executeTripleStoreUserConfigurationMigration (line 8) | static async executeTripleStoreUserConfigurationMigration(container, l...
    method executeRedisSetupMigration (line 32) | static async executeRedisSetupMigration(container, logger, config) {
    method exitNode (line 50) | static exitNode(code = 0) {
    method migrationAlreadyExecuted (line 54) | static async migrationAlreadyExecuted(migrationName, fileService) {

FILE: src/migration/redis-setup-migration.js
  class RedisSetupMigration (line 5) | class RedisSetupMigration extends BaseMigration {
    method executeMigration (line 6) | async executeMigration() {
    method installRedis (line 34) | installRedis() {
    method updateRedisConfiguration (line 51) | updateRedisConfiguration() {
    method isRedisConfiguredCorrectly (line 79) | isRedisConfiguredCorrectly() {
    method isRedisInstalledAndRunning (line 112) | isRedisInstalledAndRunning() {
    method verifyRedisInstallation (line 125) | verifyRedisInstallation() {
    method run (line 151) | run(cmd, description) {
    method modifyRedisConf (line 163) | modifyRedisConf(pattern, replacement, description) {

FILE: src/migration/triple-store-user-configuration-migration.js
  class TripleStoreUserConfigurationMigration (line 5) | class TripleStoreUserConfigurationMigration extends BaseMigration {
    method executeMigration (line 6) | async executeMigration() {

FILE: src/modules/auto-updater/auto-updater-module-manager.js
  class AutoUpdaterModuleManager (line 3) | class AutoUpdaterModuleManager extends BaseModuleManager {
    method getName (line 4) | getName() {
    method compareVersions (line 17) | async compareVersions() {
    method update (line 28) | async update() {

FILE: src/modules/auto-updater/implementation/ot-auto-updater.js
  constant REPOSITORY_URL (line 10) | const REPOSITORY_URL = 'https://github.com/OriginTrail/dkg-engine';
  constant ARCHIVE_REPOSITORY_URL (line 11) | const ARCHIVE_REPOSITORY_URL = 'github.com/OriginTrail/dkg-engine/archiv...
  class OTAutoUpdater (line 13) | class OTAutoUpdater {
    method initialize (line 14) | async initialize(config, logger) {
    method compareVersions (line 21) | async compareVersions() {
    method update (line 51) | async update() {
    method removeOldVersions (line 84) | async removeOldVersions(currentVersion, newVersion) {
    method copyConfigFiles (line 107) | async copyConfigFiles(source, destination) {
    method readAppVersion (line 121) | async readAppVersion(appPath) {
    method promiseHttpsRequest (line 133) | promiseHttpsRequest(url, options) {
    method readRemoteVersion (line 155) | async readRemoteVersion() {
    method downloadUpdate (line 173) | downloadUpdate(destination) {
    method unzipFile (line 201) | unzipFile(destination, source) {
    method moveAndCleanExtractedData (line 218) | async moveAndCleanExtractedData(extractedDataPath, destinationPath) {
    method installDependencies (line 235) | installDependencies(destination) {

FILE: src/modules/base-module-manager.js
  class BaseModuleManager (line 4) | class BaseModuleManager {
    method constructor (line 5) | constructor(ctx) {
    method initialize (line 12) | async initialize() {
    method getName (line 70) | getName() {
    method getImplementation (line 74) | getImplementation(name = null) {
    method getImplementationNames (line 82) | getImplementationNames() {
    method removeImplementation (line 86) | removeImplementation(name = null) {
    method getModuleConfiguration (line 94) | getModuleConfiguration(name = null) {

FILE: src/modules/blockchain-events/blockchain-events-module-manager.js
  class BlockchainEventsModuleManager (line 3) | class BlockchainEventsModuleManager extends BaseModuleManager {
    method getContractAddress (line 4) | getContractAddress(implementationName, blockchain, contractName) {
    method updateContractAddress (line 13) | updateContractAddress(implementationName, blockchain, contractName, co...
    method getBlock (line 23) | async getBlock(implementationName, blockchain, tag) {
    method getPastEvents (line 29) | async getPastEvents(
    method getName (line 50) | getName() {

FILE: src/modules/blockchain-events/implementation/blockchain-events-service.js
  class BlockchainEventsService (line 1) | class BlockchainEventsService {
    method initialize (line 2) | async initialize(config, logger) {
    method getContractAddress (line 7) | getContractAddress() {
    method updateContractAddress (line 11) | updateContractAddress() {
    method getBlock (line 15) | async getBlock() {
    method getPastEvents (line 19) | async getPastEvents() {

FILE: src/modules/blockchain-events/implementation/ot-ethers/ot-ethers.js
  class OtEthers (line 13) | class OtEthers extends BlockchainEventsService {
    method initialize (line 14) | async initialize(config, logger) {
    method _initializeRpcProviders (line 21) | async _initializeRpcProviders() {
    method _getRandomProvider (line 50) | _getRandomProvider(blockchain) {
    method _getShuffledProviders (line 59) | _getShuffledProviders(blockchain) {
    method _sendWithFailover (line 72) | async _sendWithFailover(blockchain, method, params) {
    method _initializeContracts (line 91) | async _initializeContracts() {
    method getContractAddress (line 122) | getContractAddress(blockchain, contractName) {
    method updateContractAddress (line 126) | updateContractAddress(blockchain, contractName, contractAddress) {
    method getBlock (line 130) | async getBlock(blockchain, tag) {
    method getPastEvents (line 135) | async getPastEvents(blockchain, contractNames, eventsToFilter, lastChe...
    method _getMaxNumberOfHistoricalBlocksForSync (line 244) | async _getMaxNumberOfHistoricalBlocksForSync(blockchain) {
    method _getBlockTimeMillis (line 264) | async _getBlockTimeMillis(blockchain, blockRange = 1000) {

FILE: src/modules/blockchain/blockchain-module-manager.js
  class BlockchainModuleManager (line 3) | class BlockchainModuleManager extends BaseModuleManager {
    method getName (line 4) | getName() {
    method callImplementationFunction (line 8) | callImplementationFunction(blockchain, functionName, args = []) {
    method initializeTransactionQueues (line 14) | initializeTransactionQueues(blockchain, concurrency) {
    method getTotalTransactionQueueLength (line 20) | getTotalTransactionQueueLength(blockchain) {
    method initializeContracts (line 24) | async initializeContracts(blockchain) {
    method initializeAssetStorageContract (line 28) | initializeAssetStorageContract(blockchain, contractAddress) {
    method initializeContract (line 34) | initializeContract(blockchain, contractName, contractAddress) {
    method getContractAddress (line 41) | getContractAddress(blockchain, contractName) {
    method setContractCallCache (line 45) | setContractCallCache(blockchain, contractName, functionName, value) {
    method getPublicKeys (line 53) | getPublicKeys(blockchain) {
    method getManagementKey (line 57) | getManagementKey(blockchain) {
    method isAssetStorageContract (line 61) | async isAssetStorageContract(blockchain, contractAddress) {
    method getBlockNumber (line 67) | async getBlockNumber(blockchain) {
    method getIdentityId (line 71) | async getIdentityId(blockchain) {
    method identityIdExists (line 75) | async identityIdExists(blockchain) {
    method createProfile (line 79) | async createProfile(blockchain, peerId) {
    method getGasPrice (line 83) | async getGasPrice(blockchain) {
    method healthCheck (line 87) | async healthCheck(blockchain) {
    method restartService (line 91) | async restartService(blockchain) {
    method getKnowledgeCollectionMerkleRootByIndex (line 95) | async getKnowledgeCollectionMerkleRootByIndex(
    method getKnowledgeCollectionLatestMerkleRoot (line 108) | async getKnowledgeCollectionLatestMerkleRoot(
    method getLatestKnowledgeCollectionId (line 120) | async getLatestKnowledgeCollectionId(blockchain, assetStorageContractA...
    method getAssetStorageContractAddresses (line 126) | getAssetStorageContractAddresses(blockchain) {
    method getKnowledgeCollectionMerkleRoots (line 130) | async getKnowledgeCollectionMerkleRoots(
    method getLatestMerkleRootPublisher (line 148) | async getLatestMerkleRootPublisher(
    method getShardingTableHead (line 159) | async getShardingTableHead(blockchain) {
    method getShardingTableLength (line 163) | async getShardingTableLength(blockchain) {
    method getShardingTablePage (line 167) | async getShardingTablePage(blockchain, startingIdentityId, nodesNum) {
    method getKnowledgeCollectionSize (line 174) | async getKnowledgeCollectionSize(blockchain, knowledgeCollectionId) {
    method getKnowledgeAssetsRange (line 180) | async getKnowledgeAssetsRange(blockchain, assetStorageContractAddress,...
    method getParanetKnowledgeCollectionCount (line 187) | async getParanetKnowledgeCollectionCount(blockchain, paranetId) {
    method getParanetKnowledgeCollectionLocatorsWithPagination (line 193) | async getParanetKnowledgeCollectionLocatorsWithPagination(
    method getMinimumStake (line 206) | async getMinimumStake(blockchain) {
    method getMaximumStake (line 210) | async getMaximumStake(blockchain) {
    method getMinimumRequiredSignatures (line 214) | async getMinimumRequiredSignatures(blockchain) {
    method getLatestBlock (line 218) | async getLatestBlock(blockchain) {
    method getBlockchainTimestamp (line 222) | async getBlockchainTimestamp(blockchain) {
    method getParanetMetadata (line 226) | async getParanetMetadata(blockchain, paranetId) {
    method getParanetName (line 230) | async getParanetName(blockchain, paranetId) {
    method getDescription (line 234) | async getDescription(blockchain, paranetId) {
    method paranetExists (line 238) | async paranetExists(blockchain, paranetId) {
    method isPermissionedNode (line 242) | async isPermissionedNode(blockchain, paranetId, identityId) {
    method getNodesAccessPolicy (line 249) | async getNodesAccessPolicy(blockchain, paranetId) {
    method getPermissionedNodes (line 253) | async getPermissionedNodes(blockchain, paranetId) {
    method getNodeId (line 257) | async getNodeId(blockchain, identityId) {
    method signMessage (line 261) | async signMessage(blockchain, messageHash) {
    method getStakeWeightedAverageAsk (line 265) | async getStakeWeightedAverageAsk(blockchain) {
    method getTimeUntilNextEpoch (line 269) | async getTimeUntilNextEpoch(blockchain) {
    method getEpochLength (line 273) | async getEpochLength(blockchain) {
    method isKnowledgeCollectionRegistered (line 277) | async isKnowledgeCollectionRegistered(blockchain, paranetId, knowledge...
    method getActiveProofPeriodStatus (line 284) | async getActiveProofPeriodStatus(blockchain) {
    method createChallenge (line 288) | async createChallenge(blockchain) {
    method getNodeChallenge (line 292) | async getNodeChallenge(blockchain, nodeId) {
    method submitProof (line 296) | async submitProof(blockchain, chunk, merkleProof) {
    method getNodeEpochProofPeriodScore (line 300) | async getNodeEpochProofPeriodScore(blockchain, nodeId, epoch, proofPer...
    method getTransaction (line 308) | async getTransaction(blockchain, txHash) {
    method getBlockTimestamp (line 312) | async getBlockTimestamp(blockchain, blockNumber) {
    method getDelegators (line 316) | async getDelegators(blockchain, identityId) {
    method getLastClaimedEpoch (line 320) | async getLastClaimedEpoch(blockchain, identityId, address) {
    method hasEverDelegated (line 327) | async hasEverDelegated(blockchain, identityId, address) {
    method getCurrentEpoch (line 334) | async getCurrentEpoch(blockchain) {
    method batchClaimDelegatorRewards (line 338) | async batchClaimDelegatorRewards(blockchain, identityId, epochs, deleg...
    method getAssetStorageContractsAddress (line 346) | async getAssetStorageContractsAddress(blockchain) {
    method getLatestAssertionId (line 351) | async getLatestAssertionId(blockchain, assetContractAddress, tokenId) {
    method getImplementation (line 358) | getImplementation(name = null) {

FILE: src/modules/blockchain/implementation/base/base-service.js
  class BaseService (line 3) | class BaseService extends Web3Service {
    method constructor (line 4) | constructor(ctx) {
    method getGasPrice (line 11) | async getGasPrice() {

FILE: src/modules/blockchain/implementation/eth/eth-service.js
  class EthService (line 3) | class EthService extends Web3Service {
    method constructor (line 4) | constructor(ctx) {

FILE: src/modules/blockchain/implementation/gnosis/gnosis-service.js
  class GnosisService (line 6) | class GnosisService extends Web3Service {
    method constructor (line 7) | constructor(ctx) {
    method getGasPrice (line 21) | async getGasPrice() {
    method buildTransactionGasParams (line 54) | buildTransactionGasParams(gasPrice) {
    method healthCheck (line 73) | async healthCheck() {

FILE: src/modules/blockchain/implementation/hardhat/hardhat-service.js
  class HardhatService (line 4) | class HardhatService extends Web3Service {
    method constructor (line 5) | constructor(ctx) {
    method getBlockchainTimestamp (line 11) | async getBlockchainTimestamp() {
    method providerReady (line 16) | async providerReady() {
    method getGasPrice (line 20) | async getGasPrice() {

FILE: src/modules/blockchain/implementation/ot-parachain/ot-parachain-service.js
  constant NATIVE_TOKEN_DECIMALS (line 6) | const NATIVE_TOKEN_DECIMALS = 12;
  class OtParachainService (line 8) | class OtParachainService extends Web3Service {
    method constructor (line 9) | constructor(ctx) {
    method initialize (line 16) | async initialize(config, logger) {
    method checkEvmWallets (line 26) | async checkEvmWallets() {
    method checkEvmAccountMapping (line 52) | async checkEvmAccountMapping(walletPublicKey) {
    method callParachainExtrinsic (line 62) | async callParachainExtrinsic(keyring, extrinsic, method, args) {
    method queryParachainState (line 77) | async queryParachainState(state, method, args) {
    method initializeParachainProvider (line 92) | async initializeParachainProvider() {
    method getGasPrice (line 124) | async getGasPrice() {
    method handleParachainError (line 139) | async handleParachainError(error, method) {
    method getLatestTokenId (line 155) | async getLatestTokenId(assetContractAddress) {
    method restartParachainProvider (line 159) | async restartParachainProvider() {
    method getNativeTokenBalance (line 169) | async getNativeTokenBalance(wallet) {
    method getValidOperationalWallets (line 174) | getValidOperationalWallets() {

FILE: src/modules/blockchain/implementation/polygon/polygon-service.js
  class PolygonService (line 3) | class PolygonService extends Web3Service {
    method constructor (line 4) | constructor(ctx) {

FILE: src/modules/blockchain/implementation/web3-service-validator.js
  class Web3ServiceValidator (line 1) | class Web3ServiceValidator {
    method validateResult (line 2) | static validateResult(functionName, contractName, result, logger) {

FILE: src/modules/blockchain/implementation/web3-service.js
  class Web3Service (line 30) | class Web3Service {
    method initialize (line 31) | async initialize(config, logger) {
    method initializeTransactionQueues (line 42) | initializeTransactionQueues(concurrency = TRANSACTION_QUEUE_CONCURRENC...
    method queueTransaction (line 66) | queueTransaction(contractInstance, functionName, transactionArgs, call...
    method removeTransactionQueue (line 82) | removeTransactionQueue(walletAddress) {
    method getTotalTransactionQueueLength (line 86) | getTotalTransactionQueueLength() {
    method selectTransactionQueue (line 94) | selectTransactionQueue() {
    method getValidOperationalWallets (line 117) | getValidOperationalWallets() {
    method getRandomOperationalWallet (line 131) | getRandomOperationalWallet() {
    method initializeWeb3 (line 136) | async initializeWeb3() {
    method initializeContracts (line 189) | async initializeContracts() {
    method initializeProviderDebugging (line 228) | initializeProviderDebugging() {
    method maskRpcUrl (line 285) | maskRpcUrl(url) {
    method initializeAssetStorageContract (line 292) | initializeAssetStorageContract(assetStorageAddress) {
    method setContractCallCache (line 302) | setContractCallCache(contractName, functionName, value) {
    method getContractCallCache (line 318) | getContractCallCache(contractName, functionName) {
    method initializeContract (line 328) | initializeContract(contractName, contractAddress) {
    method getContractAddress (line 339) | getContractAddress(contractName) {
    method providerReady (line 349) | async providerReady() {
    method getPublicKeys (line 353) | getPublicKeys() {
    method getManagementKey (line 357) | getManagementKey() {
    method logBalances (line 361) | async logBalances() {
    method getNativeTokenBalance (line 373) | async getNativeTokenBalance(wallet) {
    method getTokenBalance (line 378) | async getTokenBalance(publicKey) {
    method getBlockNumber (line 385) | async getBlockNumber() {
    method getIdentityId (line 390) | async getIdentityId() {
    method identityIdExists (line 454) | async identityIdExists() {
    method createProfile (line 460) | async createProfile(peerId) {
    method getGasPrice (line 515) | async getGasPrice() {
    method buildTransactionGasParams (line 525) | buildTransactionGasParams(gasPrice) {
    method callContractFunction (line 529) | async callContractFunction(contractInstance, functionName, args, contr...
    method _executeContractFunction (line 561) | async _executeContractFunction(
    method _decodeEstimateGasError (line 728) | _decodeEstimateGasError(contractInstance, functionName, error, args) {
    method _decodeWaitForTxError (line 758) | _decodeWaitForTxError(contractInstance, functionName, error, args) {
    method _decodeContractCallError (line 787) | _decodeContractCallError(contractInstance, functionName, error, args) {
    method _getFunctionSighash (line 809) | _getFunctionSighash(contractInstance, functionName, args) {
    method _getErrorData (line 836) | _getErrorData(error) {
    method _decodeInputData (line 860) | _decodeInputData(inputData, contractInterface) {
    method _decodeErrorData (line 868) | _decodeErrorData(evmError, contractInterface) {
    method _decodeResultData (line 921) | _decodeResultData(fragment, resultData, contractInterface) {
    method _formatArgument (line 929) | _formatArgument(value) {
    method isAssetStorageContract (line 956) | async isAssetStorageContract(contractAddress) {
    method getKnowledgeCollectionMerkleRootByIndex (line 962) | async getKnowledgeCollectionMerkleRootByIndex(
    method getKnowledgeCollectionLatestMerkleRoot (line 978) | async getKnowledgeCollectionLatestMerkleRoot(
    method getLatestKnowledgeCollectionId (line 992) | async getLatestKnowledgeCollectionId(assetStorageContractAddress) {
    method getAssetStorageContractAddresses (line 1006) | getAssetStorageContractAddresses() {
    method getKnowledgeCollectionMerkleRoots (line 1010) | async getKnowledgeCollectionMerkleRoots(assetStorageContractAddress, t...
    method getLatestMerkleRootPublisher (line 1028) | async getLatestMerkleRootPublisher(assetStorageContractAddress, knowle...
    method getKnowledgeCollectionSize (line 1041) | async getKnowledgeCollectionSize(assetStorageContractAddress, knowledg...
    method getKnowledgeAssetsRange (line 1054) | async getKnowledgeAssetsRange(assetStorageContractAddress, knowledgeCo...
    method getMinimumStake (line 1085) | async getMinimumStake() {
    method getMaximumStake (line 1096) | async getMaximumStake() {
    method getMinimumRequiredSignatures (line 1107) | async getMinimumRequiredSignatures() {
    method getShardingTableHead (line 1116) | async getShardingTableHead() {
    method getShardingTableLength (line 1120) | async getShardingTableLength() {
    method getShardingTablePage (line 1129) | async getShardingTablePage(startingIdentityId, nodesNum) {
    method getBlockchainId (line 1137) | getBlockchainId() {
    method healthCheck (line 1141) | async healthCheck() {
    method restartService (line 1152) | async restartService() {
    method getBlockchainTimestamp (line 1157) | async getBlockchainTimestamp() {
    method getLatestBlock (line 1161) | async getLatestBlock() {
    method getParanetKnowledgeCollectionCount (line 1167) | async getParanetKnowledgeCollectionCount(paranetId) {
    method getParanetKnowledgeCollectionLocatorsWithPagination (line 1175) | async getParanetKnowledgeCollectionLocatorsWithPagination(paranetId, o...
    method getParanetMetadata (line 1183) | async getParanetMetadata(paranetId) {
    method getParanetName (line 1192) | async getParanetName(paranetId) {
    method getDescription (line 1201) | async getDescription(paranetId) {
    method paranetExists (line 1210) | async paranetExists(paranetId) {
    method isPermissionedNode (line 1219) | async isPermissionedNode(paranetId, identityId) {
    method getNodesAccessPolicy (line 1226) | async getNodesAccessPolicy(paranetId) {
    method getPermissionedNodes (line 1232) | async getPermissionedNodes(paranetId) {
    method getNodeId (line 1241) | async getNodeId(identityId) {
    method signMessage (line 1245) | async signMessage(messageHash) {
    method getStakeWeightedAverageAsk (line 1250) | async getStakeWeightedAverageAsk() {
    method getTimeUntilNextEpoch (line 1258) | async getTimeUntilNextEpoch() {
    method getEpochLength (line 1262) | async getEpochLength() {
    method isKnowledgeCollectionRegistered (line 1266) | async isKnowledgeCollectionRegistered(paranetId, knowledgeCollectionId) {
    method getActiveProofPeriodStatus (line 1274) | async getActiveProofPeriodStatus() {
    method createChallenge (line 1282) | async createChallenge() {
    method getNodeChallenge (line 1305) | async getNodeChallenge(nodeId) {
    method submitProof (line 1311) | async submitProof(chunk, merkleProof) {
    method getNodeEpochProofPeriodScore (line 1331) | async getNodeEpochProofPeriodScore(nodeId, epoch, proofPeriodStartBloc...
    method getTransaction (line 1339) | async getTransaction(txHash) {
    method getBlockTimestamp (line 1343) | async getBlockTimestamp(blockNumber) {
    method getDelegators (line 1348) | async getDelegators(identityId) {
    method hasEverDelegated (line 1354) | async hasEverDelegated(identityId, address) {
    method getCurrentEpoch (line 1361) | async getCurrentEpoch() {
    method getLastClaimedEpoch (line 1365) | async getLastClaimedEpoch(identityId, address) {
    method batchClaimDelegatorRewards (line 1372) | async batchClaimDelegatorRewards(identityId, epochs, delegators) {
    method getAssetStorageContractsAddress (line 1392) | async getAssetStorageContractsAddress() {
    method getLatestAssertionId (line 1397) | async getLatestAssertionId(assetContractAddress, tokenId) {

FILE: src/modules/http-client/http-client-module-manager.js
  class HttpClientModuleManager (line 3) | class HttpClientModuleManager extends BaseModuleManager {
    method constructor (line 4) | constructor(ctx) {
    method getName (line 9) | getName() {
    method get (line 13) | get(route, callback, options = {}) {
    method post (line 19) | post(route, callback, options = {}) {
    method use (line 25) | use(route, callback, options = {}) {
    method createRouterInstance (line 31) | createRouterInstance() {
    method sendResponse (line 37) | sendResponse(res, status, returnObject) {
    method listen (line 43) | async listen() {
    method selectMiddlewares (line 49) | selectMiddlewares(options) {
    method initializeBeforeMiddlewares (line 55) | initializeBeforeMiddlewares(blockchainImpelemntations) {
    method initializeAfterMiddlewares (line 64) | initializeAfterMiddlewares() {

FILE: src/modules/http-client/implementation/express-http-client.js
  class ExpressHttpClient (line 13) | class ExpressHttpClient {
    method initialize (line 14) | async initialize(config, logger) {
    method get (line 20) | get(route, callback, options) {
    method post (line 24) | post(route, callback, options) {
    method use (line 28) | use(route, callback, options) {
    method createRouterInstance (line 32) | createRouterInstance() {
    method sendResponse (line 36) | sendResponse(res, status, returnObject) {
    method listen (line 41) | async listen() {
    method selectMiddlewares (line 61) | selectMiddlewares(options) {
    method initializeBeforeMiddlewares (line 70) | initializeBeforeMiddlewares(authService, blockchainImplementations) {
    method initializeAfterMiddlewares (line 78) | initializeAfterMiddlewares() {
    method _initializeCorsMiddleware (line 82) | _initializeCorsMiddleware() {
    method _initializeBaseMiddlewares (line 92) | _initializeBaseMiddlewares() {

FILE: src/modules/http-client/implementation/middleware/blockchain-id-midleware.js
  function addBlockchainId (line 1) | function addBlockchainId(blockchain, blockchainImplementations) {
  function blockchainIdMiddleware (line 16) | function blockchainIdMiddleware(blockchainImplementations) {

FILE: src/modules/http-client/implementation/middleware/request-validation-middleware.js
  function preValidateProperty (line 5) | function preValidateProperty(object, key, schema, options, ctx) {
  function requestValidationMiddleware (line 22) | function requestValidationMiddleware(requestSchema) {

FILE: src/modules/module-config-validation.js
  class ModuleConfigValidation (line 3) | class ModuleConfigValidation {
    method constructor (line 4) | constructor(ctx) {
    method validateModule (line 9) | validateModule(name, config) {
    method validateAutoUpdater (line 19) | validateAutoUpdater() {
    method validateBlockchain (line 23) | validateBlockchain() {
    method validateHttpClient (line 27) | validateHttpClient() {
    method validateNetwork (line 31) | validateNetwork() {
    method validateRepository (line 35) | validateRepository() {
    method validateBlockchainEvents (line 39) | validateBlockchainEvents(config) {
    method validateTripleStore (line 97) | validateTripleStore(config) {
    method validateValidation (line 121) | validateValidation() {
    method validateRequiredModule (line 125) | validateRequiredModule(moduleName, moduleConfig) {
    method validateTelemetry (line 140) | validateTelemetry() {

FILE: src/modules/network/implementation/libp2p-service.js
  class Libp2pService (line 45) | class Libp2pService {
    method initialize (line 46) | async initialize(config, logger) {
    method start (line 113) | async start() {
    method onPeerConnected (line 119) | async onPeerConnected(listener) {
    method savePrivateKeyInFile (line 123) | async savePrivateKeyInFile(privateKey) {
    method getKeyPath (line 129) | getKeyPath() {
    method readPrivateKeyFromFile (line 146) | async readPrivateKeyFromFile() {
    method fileExists (line 154) | async fileExists(filePath) {
    method _initializeRateLimiters (line 163) | _initializeRateLimiters() {
    method getMultiaddrs (line 182) | getMultiaddrs() {
    method getProtocols (line 186) | getProtocols(peerIdObject) {
    method getAddresses (line 190) | getAddresses(peerIdObject) {
    method getPeers (line 194) | getPeers() {
    method getPeerId (line 198) | getPeerId() {
    method handleMessage (line 202) | handleMessage(protocol, handler) {
    method updateSessionStream (line 243) | updateSessionStream(operationId, peerIdString, stream) {
    method getSessionStream (line 264) | getSessionStream(operationId, peerIdString) {
    method createStreamMessage (line 274) | createStreamMessage(message, operationId, messageType) {
    method sendMessage (line 284) | async sendMessage(protocol, peerIdString, messageType, operationId, me...
    method sendMessageResponse (line 407) | async sendMessageResponse(protocol, peerIdString, messageType, operati...
    method _sendMessageToStream (line 422) | async _sendMessageToStream(stream, message) {
    method _readMessageFromStream (line 445) | async _readMessageFromStream(stream, isMessageValid, peerIdString) {
    method readMessageSink (line 458) | async readMessageSink(source, isMessageValid, peerIdString) {
    method isRequestValid (line 503) | async isRequestValid(header, peerIdString) {
    method sessionExists (line 521) | sessionExists() {
    method isResponseValid (line 525) | async isResponseValid() {
    method healthCheck (line 529) | healthCheck() {
    method limitRequest (line 536) | async limitRequest(header, peerIdString) {
    method isBusy (line 574) | isBusy() {
    method getPrivateKey (line 584) | getPrivateKey() {
    method getName (line 588) | getName() {
    method findPeer (line 592) | async findPeer(peerId) {
    method dial (line 596) | async dial(peerId) {
    method getPeerInfo (line 600) | async getPeerInfo(peerId) {
    method removeCachedSession (line 604) | removeCachedSession(operationId, peerIdString) {

FILE: src/modules/network/network-module-manager.js
  class NetworkModuleManager (line 3) | class NetworkModuleManager extends BaseModuleManager {
    method getName (line 4) | getName() {
    method start (line 8) | async start() {
    method onPeerConnected (line 14) | async onPeerConnected(listener) {
    method getMultiaddrs (line 20) | getMultiaddrs() {
    method getPeers (line 26) | getPeers() {
    method sendMessage (line 32) | async sendMessage(protocol, remotePeerId, messageType, operationId, me...
    method sendMessageResponse (line 45) | async sendMessageResponse(protocol, remotePeerId, messageType, operati...
    method handleMessage (line 57) | handleMessage(protocol, handler, options) {
    method getPeerId (line 63) | getPeerId() {
    method healthCheck (line 69) | async healthCheck() {
    method findPeer (line 75) | async findPeer(peerId) {
    method dial (line 81) | async dial(peerId) {
    method getPeerInfo (line 87) | async getPeerInfo(peerId) {
    method removeCachedSession (line 93) | removeCachedSession(operationId, remotePeerId) {

FILE: src/modules/repository/implementation/sequelize/migrations/20211117005504-create-operation_ids.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 31) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20220620100000-create-publish.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 28) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20220620100005-create-publish-response.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 36) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20220623125000-create-get.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 28) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20220623125001-create-get-response.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 36) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20220624020509-create-event.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 44) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20220624103229-create-ability.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 25) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20220624103610-create-role.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 25) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20220624103615-create-user.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 32) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20220624103658-create-token.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 40) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20220624113659-create-role-ability.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 35) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20220628113824-add-predefined-auth-entities.js
  function up (line 14) | async function up({ context: { queryInterface } }) {
  function down (line 71) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20221025120253-create-blockchain-event.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 44) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20221025212800-create-shard.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 35) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20221028125900-create-blockchain.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 23) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20221114115524-update-publish-add-agreement-data.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 10) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20221206183634-update-shard-types.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 10) | async function down({ context: { queryInterface, Sequelize } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20221214110050-update-commands-types.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 16) | async function down({ context: { queryInterface, Sequelize } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20221215130500-update-event-types.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 13) | async function down({ context: { queryInterface, Sequelize } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20230216112400-add-abilities.js
  function getRoleAbilities (line 3) | async function getRoleAbilities(names, queryInterface, transaction) {
  function removeAbilities (line 24) | async function removeAbilities(names, queryInterface, transaction) {
  function addAbilities (line 37) | async function addAbilities(names, queryInterface, transaction) {
  function up (line 50) | async function up({ context: { queryInterface } }) {
  function down (line 61) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20230227094500-create-update.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 28) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20230303131200-update-publish-remove-agreement-data.js
  function up (line 3) | async function up({ context: { queryInterface } }, logger) {
  function down (line 21) | async function down({ context: { queryInterface, Sequelize } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20230303131400-create-update-response.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 36) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20230413194400-update-command-period-type.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 7) | async function down({ context: { queryInterface, Sequelize } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20230502110300-add-blockchain-event-index.js
  function up (line 1) | async function up({ context: { queryInterface } }) {
  function down (line 6) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20231201140100-event-add-blockchain-id.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 7) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20231221131300-update-abilities.js
  function getAbilityIds (line 13) | async function getAbilityIds(names, queryInterface, transaction) {
  function getRoleIds (line 21) | async function getRoleIds(queryInterface, transaction) {
  function getRoleAbilities (line 32) | async function getRoleAbilities(names, queryInterface, transaction) {
  function removeAbilities (line 44) | async function removeAbilities(names, queryInterface, transaction) {
  function addAbilities (line 60) | async function addAbilities(names, queryInterface, transaction) {
  function up (line 73) | async function up({ context: { queryInterface } }) {
  function down (line 85) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20233010122500-update-blockchain-id.js
  constant CHAIN_IDS (line 1) | const CHAIN_IDS = {
  function up (line 10) | async function up({ context: { queryInterface } }) {
  function down (line 28) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20233011121700-remove-blockchain-info.js
  function up (line 3) | async function up({ context: { queryInterface } }) {
  function down (line 10) | async function down() {}

FILE: src/modules/repository/implementation/sequelize/migrations/20240126120000-shard-add-sha256blobl.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 11) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20240201100000-remove-sha256Blob.js
  function up (line 1) | async function up({ context: { queryInterface } }) {
  function down (line 9) | async function down({ context: { queryInterface, Sequelize } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20240221162000-add-service-agreement-data-source.js
  function up (line 3) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 9) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20240923195000-create-publish-paranet.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 28) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20240924205500-create-publish-paranet-response.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 36) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20240927110000-change-paranet-synced-asset-nullable-assertions.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 13) | async function down({ context: { queryInterface, Sequelize } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20240930113000-add-error-message.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 8) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241011112100-remove-knowledge-asset-id.js
  function up (line 1) | async function up({ context: { queryInterface } }) {
  function down (line 5) | async function down({ context: { queryInterface, Sequelize } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241014164500-paranet-synced-asset-optional-fileds.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 12) | async function down({ context: { queryInterface, Sequelize } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241023170300-add-synced-data-source.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 8) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241105150000-change-data-source-col-type-in-paranet-synced-asset.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 8) | async function down({ context: { queryInterface, Sequelize } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241105160000-add-indexes-to-tables.js
  function up (line 1) | async function up({ context: { queryInterface } }) {
  function down (line 94) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241125151200-rename-keyword-column-to-datasetroot-in-responses.js
  function up (line 1) | async function up({ context: { queryInterface } }) {
  function down (line 17) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241126114400-add-commands-priority.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 14) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241129120000-add-commands-is_blocking.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 14) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241129125800-remove-datasetroot-response-table.js
  function up (line 1) | async function up({ context: { queryInterface } }) {
  function down (line 16) | async function down({ context: { queryInterface, Sequelize } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241201152000-update-blockchain-events.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 39) | async function down({ context: { queryInterface, Sequelize } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241202214500-update-blockchain-table.js
  function up (line 1) | async function up({ context: { queryInterface } }) {
  function down (line 26) | async function down({ context: { queryInterface, Sequelize } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241203125000-create-finality.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 28) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241203125001-create-finality-response.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 32) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241211204400-rename-ask.js
  function up (line 1) | async function up({ context: { queryInterface } }) {
  function down (line 21) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241211205400-create-finality-response.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 32) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241211205400-create-finality-status.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 35) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241211205400-create-finality.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 28) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241212122200-add-min-acks-reached-column.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 7) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241215122200-create-paranet-kc.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 110) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20241226151800-prune-commands.js
  function up (line 1) | async function up({ context: { queryInterface } }) {
  function down (line 5) | async function down() {

FILE: src/modules/repository/implementation/sequelize/migrations/20250401123500-truncate-commands-table.js
  function up (line 1) | async function up({ context: { queryInterface } }) {
  function down (line 5) | async function down() {

FILE: src/modules/repository/implementation/sequelize/migrations/20250408164300-create-triples-inserted-count-table.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 16) | async function down() {

FILE: src/modules/repository/implementation/sequelize/migrations/20250422150500-add-tx-hash-blockchain-event.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 14) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20250509142900-create-batch-get.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 28) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20250509142901-create-latest-synced-kc.js
  function up (line 1) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 92) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/migrations/20250509142902-create-sync-missed-kc.js
  function up (line 4) | async function up({ context: { queryInterface, Sequelize } }) {
  function down (line 128) | async function down({ context: { queryInterface } }) {

FILE: src/modules/repository/implementation/sequelize/models/commands.js
  class commands (line 5) | class commands extends Model {
    method associate (line 6) | static associate(models) {

FILE: src/modules/repository/implementation/sequelize/repositories/blockchain-event-repository.js
  class BlockchainEventRepository (line 3) | class BlockchainEventRepository {
    method constructor (line 4) | constructor(models) {
    method insertBlockchainEvents (line 9) | async insertBlockchainEvents(events, options) {
    method getAllUnprocessedBlockchainEvents (line 41) | async getAllUnprocessedBlockchainEvents(blockchain, eventNames, option...
    method markAllBlockchainEventsAsProcessed (line 57) | async markAllBlockchainEventsAsProcessed(blockchain, options) {
    method removeEvents (line 67) | async removeEvents(ids, options) {
    method removeContractEventsAfterBlock (line 76) | async removeContractEventsAfterBlock(
    method findAndRemoveProcessedEvents (line 103) | async findAndRemoveProcessedEvents(timestamp, limit, options) {
    method findProcessedEvents (line 114) | async findProcessedEvents(timestamp, limit, options) {

FILE: src/modules/repository/implementation/sequelize/repositories/blockchain-missed-kc-repository.js
  class BlockchainMissedKcRepository (line 4) | class BlockchainMissedKcRepository {
    method constructor (line 5) | constructor(models) {
    method insertMissedKc (line 23) | async insertMissedKc(blockchain, records, error, options) {
    method getMissedKcForRetry (line 38) | async getMissedKcForRetry(blockchain, contractAddress, limit, options) {
    method incrementRetryCount (line 60) | async incrementRetryCount(blockchain, records, options) {
    method setSyncedToTrue (line 85) | async setSyncedToTrue(blockchain, records, options) {
    method getMissedKcForRetryCount (line 110) | async getMissedKcForRetryCount(blockchain, contractAddress, options) {

FILE: src/modules/repository/implementation/sequelize/repositories/blockchain-repository.js
  class BlockchainRepository (line 1) | class BlockchainRepository {
    method constructor (line 2) | constructor(models) {
    method getLastCheckedBlock (line 7) | async getLastCheckedBlock(blockchain, options) {
    method updateLastCheckedBlock (line 14) | async updateLastCheckedBlock(blockchain, currentBlock, timestamp, opti...

FILE: src/modules/repository/implementation/sequelize/repositories/command-repository.js
  class CommandRepository (line 4) | class CommandRepository {
    method constructor (line 5) | constructor(models) {
    method updateCommand (line 10) | async updateCommand(update, options) {
    method destroyCommand (line 14) | async destroyCommand(name, options) {
    method createCommand (line 23) | async createCommand(command, options) {
    method getCommandsWithStatus (line 27) | async getCommandsWithStatus(statusArray, excludeNameArray, options) {
    method getCommandWithId (line 39) | async getCommandWithId(id, options) {
    method removeCommands (line 48) | async removeCommands(ids, options) {
    method findFinalizedCommands (line 57) | async findFinalizedCommands(timestamp, limit, options) {
    method findAndRemoveFinalizedCommands (line 77) | async findAndRemoveFinalizedCommands(timestamp, limit, options) {
    method findUnfinalizedCommandsByName (line 101) | async findUnfinalizedCommandsByName(name, options) {

FILE: src/modules/repository/implementation/sequelize/repositories/event-repository.js
  class EventRepository (line 8) | class EventRepository {
    method constructor (line 9) | constructor(models) {
    method createEventRecord (line 14) | async createEventRecord(
    method getUnpublishedEvents (line 38) | async getUnpublishedEvents(options) {
    method destroyEvents (line 83) | async destroyEvents(ids, options) {

FILE: src/modules/repository/implementation/sequelize/repositories/finality-status-repository.js
  class FinalityStatusRepository (line 1) | class FinalityStatusRepository {
    method constructor (line 2) | constructor(models) {
    method getFinalityAcksCount (line 7) | async getFinalityAcksCount(ual, options) {
    method saveFinalityAck (line 14) | async saveFinalityAck(operationId, ual, peerId, options) {
    method getPublishOperationIdByUal (line 18) | async getPublishOperationIdByUal(ual, options) {

FILE: src/modules/repository/implementation/sequelize/repositories/inserted-triples-repository.js
  class TriplesInsertCountRepository (line 3) | class TriplesInsertCountRepository {
    method constructor (line 4) | constructor(models) {
    method getCount (line 8) | async getCount() {
    method increment (line 13) | async increment(by = 1, options = {}) {

FILE: src/modules/repository/implementation/sequelize/repositories/latest-synced-kc-repository.js
  class LatestSyncedKcRepository (line 1) | class LatestSyncedKcRepository {
    method constructor (line 2) | constructor(ctx) {
    method getKCStorageContracts (line 6) | async getKCStorageContracts(blockchainId) {
    method getSyncRecordForBlockchain (line 13) | getSyncRecordForBlockchain(blockchainId) {
    method addSyncContracts (line 19) | async addSyncContracts(blockchainId, contracts) {
    method updateLatestSyncedKc (line 28) | async updateLatestSyncedKc(blockchainId, contractAddress, latestSynced...

FILE: src/modules/repository/implementation/sequelize/repositories/missed-paranet-asset-repository.js
  class MissedParanetAssetRepository (line 3) | class MissedParanetAssetRepository {
    method constructor (line 4) | constructor(models) {
    method createMissedParanetAssetRecord (line 9) | async createMissedParanetAssetRecord(missedParanetAsset, options) {
    method getMissedParanetAssetsRecordsWithRetryCount (line 13) | async getMissedParanetAssetsRecordsWithRetryCount(
    method missedParanetAssetRecordExists (line 49) | async missedParanetAssetRecordExists(ual, options) {
    method removeMissedParanetAssetRecordsByUAL (line 58) | async removeMissedParanetAssetRecordsByUAL(ual, options) {
    method getCountOfMissedAssetsOfParanet (line 67) | async getCountOfMissedAssetsOfParanet(paranetUal, options) {
    method getFilteredCountOfMissedAssetsOfParanet (line 80) | async getFilteredCountOfMissedAssetsOfParanet(

FILE: src/modules/repository/implementation/sequelize/repositories/operation-id-repository.js
  class OperationIdRepository (line 3) | class OperationIdRepository {
    method constructor (line 4) | constructor(models) {
    method createOperationIdRecord (line 9) | async createOperationIdRecord(handlerData, options) {
    method getOperationIdRecord (line 13) | async getOperationIdRecord(operationId, options) {
    method updateOperationIdRecord (line 22) | async updateOperationIdRecord(data, operationId, options) {
    method removeOperationIdRecord (line 31) | async removeOperationIdRecord(timeToBeDeleted, statuses, options) {
    method updateMinAcksReached (line 41) | async updateMinAcksReached(operationId, minAcksReached, options) {

FILE: src/modules/repository/implementation/sequelize/repositories/operation-repository.js
  class OperationRepository (line 3) | class OperationRepository {
    method constructor (line 4) | constructor(models) {
    method createOperationRecord (line 17) | async createOperationRecord(operation, operationId, status, options) {
    method findAndRemoveProcessedOperationRecords (line 28) | async findAndRemoveProcessedOperationRecords(operation, timestamp, lim...
    method removeOperationRecords (line 40) | async removeOperationRecords(operation, ids, options) {
    method findProcessedOperations (line 50) | async findProcessedOperations(operation, timestamp, limit, options) {
    method getOperationStatus (line 63) | async getOperationStatus(operation, operationId, options) {
    method updateOperationStatus (line 74) | async updateOperationStatus(operation, operationId, status, options) {

FILE: src/modules/repository/implementation/sequelize/repositories/operation-response.js
  class OperationResponseRepository (line 3) | class OperationResponseRepository {
    method constructor (line 4) | constructor(models) {
    method createOperationResponseRecord (line 16) | async createOperationResponseRecord(status, operation, operationId, me...
    method getOperationResponsesStatuses (line 28) | async getOperationResponsesStatuses(operation, operationId, options) {
    method findProcessedOperationResponse (line 39) | async findProcessedOperationResponse(timestamp, limit, operation, opti...
    method findAndRemoveProcessedOperationResponse (line 52) | async findAndRemoveProcessedOperationResponse(operation, timestamp, li...
    method removeOperationResponse (line 63) | async removeOperationResponse(ids, operation, options) {

FILE: src/modules/repository/implementation/sequelize/repositories/paranet-kc-repository.js
  class ParanetKcRepository (line 3) | class ParanetKcRepository {
    method constructor (line 4) | constructor(models) {
    method createParanetKcRecords (line 9) | async createParanetKcRecords(paranetUal, blockchainId, uals, options =...
    method getCount (line 16) | async getCount(paranetUal, options = {}) {
    method getCountSynced (line 25) | async getCountSynced(paranetUal, options = {}) {
    method getCountUnsynced (line 35) | async getCountUnsynced(paranetUal, options = {}) {
    method getSyncBatch (line 45) | async getSyncBatch(paranetUal, maxRetries, delayInMs, limit = null, op...
    method incrementRetries (line 75) | async incrementRetries(paranetUal, ual, errorMessage = null, options =...
    method markAsSynced (line 93) | async markAsSynced(paranetUal, ual, options = {}) {

FILE: src/modules/repository/implementation/sequelize/repositories/paranet-repository.js
  class ParanetRepository (line 3) | class ParanetRepository {
    method constructor (line 4) | constructor(models) {
    method createParanetRecord (line 9) | async createParanetRecord(name, description, paranetId, blockchainId, ...
    method getParanet (line 25) | async getParanet(paranetId, blockchainId, options) {
    method addToParanetKaCount (line 35) | async addToParanetKaCount(paranetId, blockchainId, kaCount, options) {
    method paranetExists (line 50) | async paranetExists(paranetId, blockchainId, options) {
    method getParanetKnowledgeAssetsCount (line 61) | async getParanetKnowledgeAssetsCount(paranetId, blockchainId, options) {
    method incrementParanetKaCount (line 72) | async incrementParanetKaCount(paranetId, blockchainId, options) {
    method getParanetsBlockchains (line 87) | async getParanetsBlockchains(options) {

FILE: src/modules/repository/implementation/sequelize/repositories/paranet-synced-asset-repository.js
  class ParanetSyncedAssetRepository (line 2) | class ParanetSyncedAssetRepository {
    method constructor (line 3) | constructor(models) {
    method createParanetSyncedAssetRecord (line 8) | async createParanetSyncedAssetRecord(
    method getParanetSyncedAssetRecordByUAL (line 34) | async getParanetSyncedAssetRecordByUAL(ual, options) {
    method getParanetSyncedAssetRecordsCountByDataSource (line 41) | async getParanetSyncedAssetRecordsCountByDataSource(paranetUal, dataSo...
    method paranetSyncedAssetRecordExists (line 51) | async paranetSyncedAssetRecordExists(ual, options) {

FILE: src/modules/repository/implementation/sequelize/repositories/random-sampling-challenge-repository.js
  class RandomSamplingChallengeRepository (line 1) | class RandomSamplingChallengeRepository {
    method constructor (line 2) | constructor(models) {
    method createRandomSamplingChallengeRecord (line 7) | async createRandomSamplingChallengeRecord(randomSamplingChallenge, opt...
    method updateRandomSamplingChallengeRecord (line 11) | async updateRandomSamplingChallengeRecord(randomSamplingChallenge, opt...
    method setCompletedAndScoreRandomSamplingChallengeRecord (line 15) | async setCompletedAndScoreRandomSamplingChallengeRecord(
    method setCompletedAndFinalizedRandomSamplingChallengeRecord (line 27) | async setCompletedAndFinalizedRandomSamplingChallengeRecord(
    method getLatestRandomSamplingChallengeRecordForBlockchainId (line 39) | async getLatestRandomSamplingChallengeRecordForBlockchainId(blockchain...
    method deleteRandomSamplingChallengeRecord (line 48) | async deleteRandomSamplingChallengeRecord(id, options = {}) {
    method deleteRandomSamplingChallengeForBlockchainIdEpoch (line 55) | async deleteRandomSamplingChallengeForBlockchainIdEpoch(blockchainId, ...

FILE: src/modules/repository/implementation/sequelize/repositories/shard-repository.js
  class ShardRepository (line 3) | class ShardRepository {
    method constructor (line 4) | constructor(models) {
    method createManyPeerRecords (line 9) | async createManyPeerRecords(peerRecords, options) {
    method removeShardingTablePeerRecords (line 17) | async removeShardingTablePeerRecords(blockchainId, options) {
    method createPeerRecord (line 24) | async createPeerRecord(peerId, blockchainId, ask, stake, lastSeen, sha...
    method getAllPeerRecords (line 41) | async getAllPeerRecords(blockchainId, filterInactive, options) {
    method getPeerRecordsByIds (line 64) | async getPeerRecordsByIds(blockchainId, peerIds, options) {
    method getPeerRecord (line 76) | async getPeerRecord(peerId, blockchainId, options) {
    method getPeersCount (line 86) | async getPeersCount(blockchainId, options) {
    method getPeersToDial (line 95) | async getPeersToDial(limit, dialFrequencyMillis, options) {
    method updatePeerAsk (line 112) | async updatePeerAsk(peerId, blockchainId, ask, options) {
    method updatePeerStake (line 125) | async updatePeerStake(peerId, blockchainId, stake, options) {
    method updatePeerRecordLastDialed (line 138) | async updatePeerRecordLastDialed(peerId, timestamp, options) {
    method updatePeerRecordLastSeenAndLastDialed (line 150) | async updatePeerRecordLastSeenAndLastDialed(peerId, timestamp, options) {
    method removePeerRecord (line 163) | async removePeerRecord(blockchainId, peerId, options) {
    method cleanShardingTable (line 173) | async cleanShardingTable(blockchainId, options) {
    method isNodePartOfShard (line 180) | async isNodePartOfShard(blockchainId, peerId, options) {

FILE: src/modules/repository/implementation/sequelize/repositories/token-repository.js
  class TokenRepository (line 3) | class TokenRepository {
    method constructor (line 4) | constructor(models) {
    method saveToken (line 9) | async saveToken(tokenId, userId, tokenName, expiresAt, options) {
    method isTokenRevoked (line 21) | async isTokenRevoked(tokenId, options) {
    method getTokenAbilities (line 27) | async getTokenAbilities(tokenId, options) {

FILE: src/modules/repository/implementation/sequelize/repositories/user-repository.js
  class UserRepository (line 1) | class UserRepository {
    method constructor (line 2) | constructor(models) {
    method getUser (line 7) | async getUser(username, options) {

FILE: src/modules/repository/implementation/sequelize/sequelize-migrator.js
  function createMigrator (line 8) | function createMigrator(sequelize, config, logger) {

FILE: src/modules/repository/implementation/sequelize/sequelize-repository.js
  class SequelizeRepository (line 29) | class SequelizeRepository {
    method initialize (line 30) | async initialize(config, logger) {
    method initializeSequelize (line 63) | initializeSequelize() {
    method setEnvParameters (line 77) | setEnvParameters() {
    method createDatabaseIfNotExists (line 87) | async createDatabaseIfNotExists() {
    method dropDatabase (line 100) | async dropDatabase() {
    method runMigrations (line 111) | async runMigrations() {
    method loadModels (line 122) | async loadModels() {
    method transaction (line 142) | async transaction(execFn) {
    method getRepository (line 149) | getRepository(repositoryName) {
    method query (line 153) | async query(query, options) {
    method destroyAllRecords (line 157) | async destroyAllRecords(table, options) {

FILE: src/modules/repository/repository-module-manager.js
  class RepositoryModuleManager (line 3) | class RepositoryModuleManager extends BaseModuleManager {
    method getName (line 4) | getName() {
    method getRepository (line 8) | getRepository(repoName) {
    method transaction (line 15) | async transaction(execFn) {
    method dropDatabase (line 21) | async dropDatabase() {
    method query (line 27) | async query(query, options = {}) {
    method destroyAllRecords (line 33) | async destroyAllRecords(table, options = {}) {
    method updateCommand (line 39) | async updateCommand(update, options = {}) {
    method destroyCommand (line 43) | async destroyCommand(name, options = {}) {
    method createCommand (line 47) | async createCommand(command, options = {}) {
    method getCommandsWithStatus (line 51) | async getCommandsWithStatus(statusArray, excludeNameArray = [], option...
    method getCommandWithId (line 59) | async getCommandWithId(id, options = {}) {
    method removeCommands (line 63) | async removeCommands(ids, options = {}) {
    method findFinalizedCommands (line 67) | async findFinalizedCommands(timestamp, limit, options = {}) {
    method findAndRemoveFinalizedCommands (line 71) | async findAndRemoveFinalizedCommands(timestamp, limit, options = {}) {
    method findUnfinalizedCommandsByName (line 79) | async findUnfinalizedCommandsByName(limit, options = {}) {
    method createOperationIdRecord (line 83) | async createOperationIdRecord(handlerData, options = {}) {
    method updateOperationIdRecord (line 87) | async updateOperationIdRecord(data, operationId, options = {}) {
    method getOperationIdRecord (line 95) | async getOperationIdRecord(operationId, options = {}) {
    method removeOperationIdRecord (line 99) | async removeOperationIdRecord(timeToBeDeleted, statuses, options = {}) {
    method updateMinAcksReached (line 107) | async updateMinAcksReached(operationId, minAcksReached, options = {}) {
    method createOperationRecord (line 115) | async createOperationRecord(operation, operationId, status, options = ...
    method removeOperationRecords (line 124) | async removeOperationRecords(operation, ids, options = {}) {
    method findProcessedOperations (line 128) | async findProcessedOperations(operation, timestamp, limit, options = {...
    method findAndRemoveProcessedOperationRecords (line 137) | async findAndRemoveProcessedOperationRecords(operation, timestamp, lim...
    method getOperationStatus (line 146) | async getOperationStatus(operation, operationId, options = {}) {
    method updateOperationStatus (line 150) | async updateOperationStatus(operation, operationId, status, options = ...
    method createOperationResponseRecord (line 159) | async createOperationResponseRecord(status, operation, operationId, er...
    method getOperationResponsesStatuses (line 169) | async getOperationResponsesStatuses(operation, operationId, options = ...
    method findProcessedOperationResponse (line 177) | async findProcessedOperationResponse(timestamp, limit, operation, opti...
    method findAndRemoveProcessedOperationResponse (line 186) | async findAndRemoveProcessedOperationResponse(operation, timestamp, li...
    method removeOperationResponse (line 195) | async removeOperationResponse(ids, operation, options = {}) {
    method createManyPeerRecords (line 203) | async createManyPeerRecords(peers, options = {}) {
    method removeShardingTablePeerRecords (line 207) | async removeShardingTablePeerRecords(blockchain, options = {}) {
    method createPeerRecord (line 211) | async createPeerRecord(peerId, blockchain, ask, stake, lastSeen, sha25...
    method getPeerRecord (line 223) | async getPeerRecord(peerId, blockchain, options = {}) {
    method getAllPeerRecords (line 227) | async getAllPeerRecords(blockchain, filterInactive = false, options = ...
    method getPeerRecordsByIds (line 231) | async getPeerRecordsByIds(blockchain, peerIds, options = {}) {
    method getPeersCount (line 235) | async getPeersCount(blockchain, options = {}) {
    method getPeersToDial (line 239) | async getPeersToDial(limit, dialFrequencyMillis, options = {}) {
    method removePeerRecord (line 243) | async removePeerRecord(blockchain, peerId, options = {}) {
    method updatePeerRecordLastDialed (line 247) | async updatePeerRecordLastDialed(peerId, timestamp, options = {}) {
    method updatePeerRecordLastSeenAndLastDialed (line 251) | async updatePeerRecordLastSeenAndLastDialed(peerId, timestamp, options...
    method updatePeerAsk (line 259) | async updatePeerAsk(peerId, blockchainId, ask, options = {}) {
    method updatePeerStake (line 263) | async updatePeerStake(peerId, blockchainId, stake, options = {}) {
    method getNeighbourhood (line 267) | async getNeighbourhood(assertionId, r2, options = {}) {
    method cleanShardingTable (line 271) | async cleanShardingTable(blockchainId, options = {}) {
    method isNodePartOfShard (line 275) | async isNodePartOfShard(blockchainId, peerId, options = {}) {
    method destroyEvents (line 279) | async destroyEvents(ids, options = {}) {
    method getUser (line 283) | async getUser(username, options = {}) {
    method saveToken (line 287) | async saveToken(tokenId, userId, tokenName, expiresAt, options = {}) {
    method isTokenRevoked (line 297) | async isTokenRevoked(tokenId, options = {}) {
    method getTokenAbilities (line 301) | async getTokenAbilities(tokenId, options = {}) {
    method insertBlockchainEvents (line 305) | async insertBlockchainEvents(events, options = {}) {
    method getAllUnprocessedBlockchainEvents (line 309) | async getAllUnprocessedBlockchainEvents(blockchain, eventNames, option...
    method markAllBlockchainEventsAsProcessed (line 317) | async markAllBlockchainEventsAsProcessed(blockchain, options = {}) {
    method removeEvents (line 324) | async removeEvents(ids, options = {}) {
    method removeContractEventsAfterBlock (line 328) | async removeContractEventsAfterBlock(
    method findProcessedEvents (line 346) | async findProcessedEvents(timestamp, limit, options = {}) {
    method findAndRemoveProcessedEvents (line 354) | async findAndRemoveProcessedEvents(timestamp, limit, options = {}) {
    method getLastCheckedBlock (line 362) | async getLastCheckedBlock(blockchain, options = {}) {
    method updateLastCheckedBlock (line 366) | async updateLastCheckedBlock(blockchain, currentBlock, timestamp, opti...
    method addToParanetKaCount (line 375) | async addToParanetKaCount(paranetId, blockchainId, kaCount, options = ...
    method createParanetRecord (line 384) | async createParanetRecord(name, description, paranetId, blockchainId, ...
    method paranetExists (line 394) | async paranetExists(paranetId, blockchainId, options = {}) {
    method getParanet (line 398) | async getParanet(paranetId, blockchainId, options = {}) {
    method getParanetKnowledgeAssetsCount (line 402) | async getParanetKnowledgeAssetsCount(paranetId, blockchainId, options ...
    method getParanetsBlockchains (line 410) | async getParanetsBlockchains(options = {}) {
    method incrementParanetKaCount (line 414) | async incrementParanetKaCount(paranetId, blockchainId, options = {}) {
    method createParanetKcRecords (line 422) | async createParanetKcRecords(paranetUal, blockchainId, uals, options =...
    method getParanetKcCount (line 431) | async getParanetKcCount(paranetUal, options = {}) {
    method getParanetKcSyncedCount (line 435) | async getParanetKcSyncedCount(paranetUal, options = {}) {
    method getParanetKcUnsyncedCount (line 439) | async getParanetKcUnsyncedCount(paranetUal, options = {}) {
    method getParanetKcSyncBatch (line 443) | async getParanetKcSyncBatch(paranetUal, retriesMax, retryDelayMs, limi...
    method paranetKcIncrementRetries (line 453) | async paranetKcIncrementRetries(paranetUal, ual, errorMessage = null, ...
    method paranetKcMarkAsSynced (line 462) | async paranetKcMarkAsSynced(paranetUal, ual, options = {}) {
    method getFinalityAcksCount (line 466) | async getFinalityAcksCount(ual, options = {}) {
    method getPublishOperationIdByUal (line 470) | async getPublishOperationIdByUal(ual, options = {}) {
    method getLatestRandomSamplingChallengeRecordForBlockchainId (line 474) | async getLatestRandomSamplingChallengeRecordForBlockchainId(blockchain...
    method createRandomSamplingChallengeRecord (line 480) | async createRandomSamplingChallengeRecord(randomSamplingChallenge, opt...
    method updateRandomSamplingChallengeRecord (line 487) | async updateRandomSamplingChallengeRecord(randomSamplingChallenge, opt...
    method deleteRandomSamplingChallengeRecord (line 494) | async deleteRandomSamplingChallengeRecord(randomSamplingChallengeId, o...
    method setCompletedAndScoreRandomSamplingChallengeRecord (line 501) | async setCompletedAndScoreRandomSamplingChallengeRecord(
    method setCompletedAndFinalizedRandomSamplingChallengeRecord (line 517) | async setCompletedAndFinalizedRandomSamplingChallengeRecord(
    method saveFinalityAck (line 533) | async saveFinalityAck(publishOperationId, ual, peerId, options = {}) {
    method incrementInsertedTriples (line 542) | async incrementInsertedTriples(count) {
    method getKCStorageContracts (line 546) | async getKCStorageContracts(blockchainId) {
    method getSyncRecordForBlockchain (line 550) | async getSyncRecordForBlockchain(blockchainId) {
    method addSyncContracts (line 554) | async addSyncContracts(blockchainId, contracts) {
    method insertMissedKc (line 558) | async insertMissedKc(blockchainId, records, error, options = {}) {
    method getMissedKcForRetry (line 567) | async getMissedKcForRetry(blockchain, contractAddress, limit, options) {
    method updateLatestSyncedKc (line 576) | async updateLatestSyncedKc(blockchainId, contractAddress, latestSynced...
    method incrementRetryCount (line 585) | async incrementRetryCount(blockchain, records, options) {
    method setSyncedToTrue (line 593) | async setSyncedToTrue(blockchain, records, options) {
    method getMissedKcForRetryCount (line 601) | async getMissedKcForRetryCount(blockchain, contractAddress, options) {

FILE: src/modules/telemetry/implementation/quest-telemetry.js
  class QuestTelemetry (line 3) | class QuestTelemetry {
    method initialize (line 4) | async initialize(config, logger) {
    method listenOnEvents (line 13) | listenOnEvents(eventEmitter, onEventReceived) {
    method sendTelemetryData (line 17) | async sendTelemetryData(

FILE: src/modules/telemetry/telemetry-module-manager.js
  class TelemetryModuleManager (line 3) | class TelemetryModuleManager extends BaseModuleManager {
    method constructor (line 4) | constructor(ctx) {
    method getName (line 9) | getName() {
    method initialize (line 13) | async initialize() {
    method listenOnEvents (line 29) | listenOnEvents(onEventReceived) {
    method sendTelemetryData (line 38) | async sendTelemetryData(operationId, timestamp, blockchainId, name, va...

FILE: src/modules/triple-store/implementation/ot-blazegraph/ot-blazegraph.js
  class OtBlazegraph (line 5) | class OtBlazegraph extends OtTripleStore {
    method initialize (line 6) | async initialize(config, logger) {
    method createRepository (line 18) | async createRepository(repository) {
    method initializeSparqlEndpoints (line 48) | initializeSparqlEndpoints(repository) {
    method getRepositoryUrl (line 56) | getRepositoryUrl(repository) {
    method hasUnicodeCodePoints (line 60) | hasUnicodeCodePoints(input) {
    method decodeUnicodeCodePoints (line 64) | decodeUnicodeCodePoints(input) {
    method utfConverter (line 73) | utfConverter(input) {
    method construct (line 77) | async construct(repository, query, timeout) {
    method select (line 81) | async select(repository, query, timeout) {
    method ask (line 86) | async ask(repository, query, timeout = 10000) {
    method _executeQuery (line 91) | async _executeQuery(repository, query, mediaType, timeout) {
    method healthCheck (line 164) | async healthCheck(repository) {
    method queryVoid (line 179) | async queryVoid(repository, query, timeout) {
    method deleteRepository (line 200) | async deleteRepository(repository) {
    method repositoryExists (line 219) | async repositoryExists(repository) {
    method getName (line 246) | getName() {

FILE: src/modules/triple-store/implementation/ot-fuseki/ot-fuseki.js
  class OtFuseki (line 4) | class OtFuseki extends OtTripleStore {
    method initialize (line 5) | async initialize(config, logger) {
    method createRepository (line 14) | async createRepository(repository) {
    method initializeSparqlEndpoints (line 30) | initializeSparqlEndpoints(repository) {
    method healthCheck (line 36) | async healthCheck(repository) {
    method deleteRepository (line 48) | async deleteRepository(repository) {
    method repositoryExists (line 67) | async repositoryExists(repository) {
    method getName (line 83) | getName() {

FILE: src/modules/triple-store/implementation/ot-graphdb/ot-graphdb.js
  class OtGraphdb (line 7) | class OtGraphdb extends OtTripleStore {
    method initialize (line 8) | async initialize(config, logger) {
    method createRepository (line 18) | async createRepository(repository) {
    method initializeSparqlEndpoints (line 58) | initializeSparqlEndpoints(repository) {
    method healthCheck (line 66) | async healthCheck(repository) {
    method deleteRepository (line 93) | async deleteRepository(repository) {
    method repositoryExists (line 115) | async repositoryExists(repository) {
    method getName (line 129) | getName() {
    method queryVoid (line 133) | async queryVoid(repository, query) {
    method ask (line 150) | async ask(repository, query) {
    method construct (line 168) | async construct(repository, query, accept = 'application/n-triples') {
    method select (line 184) | async select(repository, query) {
    method _executeQuery (line 192) | async _executeQuery(repository, query, mediaType, accept = 'applicatio...

FILE: src/modules/triple-store/implementation/ot-neptune/ot-neptune.js
  class OtNeptune (line 4) | class OtNeptune extends OtTripleStore {
    method initialize (line 5) | async initialize(config, logger) {
    method createRepository (line 10) | async createRepository(repository) {
    method initializeSparqlEndpoints (line 14) | initializeSparqlEndpoints(repository) {
    method deleteRepository (line 22) | async deleteRepository(repository) {
    method healthCheck (line 26) | async healthCheck(repository) {
    method getName (line 38) | getName() {

FILE: src/modules/triple-store/implementation/ot-triple-store.js
  class OtTripleStore (line 19) | class OtTripleStore {
    method initialize (line 20) | async initialize(config, logger) {
    method initializeRepositories (line 29) | initializeRepositories() {
    method initializeParanetRepository (line 35) | async initializeParanetRepository(repository) {
    method repositoryInitilized (line 49) | repositoryInitilized(repository) {
    method createRepository (line 53) | async createRepository() {
    method initializeSparqlEndpoints (line 57) | initializeSparqlEndpoints() {
    method deleteRepository (line 61) | async deleteRepository() {
    method initializeContexts (line 65) | initializeContexts() {
    method ensureConnections (line 91) | async ensureConnections() {
    method insertAssertionBatch (line 117) | async insertAssertionBatch(
    method deleteUniqueKnowledgeCollectionTriplesFromUnifiedGraph (line 162) | async deleteUniqueKnowledgeCollectionTriplesFromUnifiedGraph(repositor...
    method getKnowledgeCollectionFromUnifiedGraph (line 192) | async getKnowledgeCollectionFromUnifiedGraph(repository, namedGraph, u...
    method getKnowledgeCollectionPublicFromUnifiedGraph (line 208) | async getKnowledgeCollectionPublicFromUnifiedGraph(repository, namedGr...
    method knowledgeCollectionExistsInUnifiedGraph (line 227) | async knowledgeCollectionExistsInUnifiedGraph(repository, namedGraph, ...
    method deleteUniqueKnowledgeAssetTriplesFromUnifiedGraph (line 241) | async deleteUniqueKnowledgeAssetTriplesFromUnifiedGraph(repository, na...
    method getKnowledgeAssetFromUnifiedGraph (line 270) | async getKnowledgeAssetFromUnifiedGraph(repository, namedGraph, ual) {
    method getKnowledgeAssetPublicFromUnifiedGraph (line 284) | async getKnowledgeAssetPublicFromUnifiedGraph(repository, namedGraph, ...
    method knowledgeAssetExistsInUnifiedGraph (line 301) | async knowledgeAssetExistsInUnifiedGraph(repository, namedGraph, ual) {
    method createKnowledgeCollectionNamedGraphs (line 314) | async createKnowledgeCollectionNamedGraphs(
    method createParanetKnoledgeCollectionConnection (line 368) | async createParanetKnoledgeCollectionConnection(
    method insertMetadataTriples (line 408) | async insertMetadataTriples(repository, kcUAL, kaUALs, visibility, tim...
    method deleteKnowledgeCollectionNamedGraphs (line 441) | async deleteKnowledgeCollectionNamedGraphs(repository, namedGraphs) {
    method getKnowledgeCollectionNamedGraphsOld (line 449) | async getKnowledgeCollectionNamedGraphsOld(repository, ual, tokenIds, ...
    method getKnowledgeCollectionNamedGraphsOldInBatch (line 498) | async getKnowledgeCollectionNamedGraphsOldInBatch(
    method checkIfKnowledgeAssetExists (line 549) | async checkIfKnowledgeAssetExists(repository, kaUAL, timeout = 10000) {
    method getKnowledgeCollectionNamedGraphs (line 564) | async getKnowledgeCollectionNamedGraphs(
    method getMetadataInBatch (line 643) | async getMetadataInBatch(repository, uals) {
    method knowledgeCollectionNamedGraphsExist (line 661) | async knowledgeCollectionNamedGraphsExist(repository, ual) {
    method deleteKnowledgeAssetNamedGraph (line 673) | async deleteKnowledgeAssetNamedGraph(repository, ual) {
    method getKnowledgeAssetNamedGraph (line 681) | async getKnowledgeAssetNamedGraph(repository, ual, visibility, timeout) {
    method knowledgeAssetNamedGraphExists (line 753) | async knowledgeAssetNamedGraphExists(repository, name) {
    method insertKnowledgeCollectionMetadata (line 765) | async insertKnowledgeCollectionMetadata(repository, metadataNQuads, ti...
    method deleteKnowledgeCollectionMetadata (line 778) | async deleteKnowledgeCollectionMetadata(repository, uals) {
    method deletePublishTimestampMetadata (line 794) | async deletePublishTimestampMetadata(repository, ual) {
    method getKnowledgeCollectionMetadata (line 806) | async getKnowledgeCollectionMetadata(repository, ual, timeout) {
    method getKnowledgeAssetMetadata (line 821) | async getKnowledgeAssetMetadata(repository, ual, timeout) {
    method knowledgeCollectionMetadataExists (line 834) | async knowledgeCollectionMetadataExists(repository, ual) {
    method findAllNamedGraphsByUAL (line 847) | async findAllNamedGraphsByUAL(repository, ual) {
    method findAllSubjectsWithGraphNames (line 860) | async findAllSubjectsWithGraphNames(repository, ual) {
    method getLatestAssertionId (line 872) | async getLatestAssertionId(repository, ual) {
    method construct (line 889) | async construct(repository, query) {
    method select (line 893) | async select(repository, query) {
    method queryVoid (line 901) | async queryVoid(repository, query) {
    method ask (line 905) | async ask(repository, query) {
    method healthCheck (line 909) | async healthCheck() {
    method _executeQuery (line 913) | async _executeQuery(repository, query, mediaType) {
    method reinitialize (line 929) | async reinitialize() {
    method cleanEscapeCharacter (line 942) | cleanEscapeCharacter(query) {
    method getV6Assertion (line 946) | async getV6Assertion(repository, assertionId) {

FILE: src/modules/triple-store/triple-store-module-manager.js
  class TripleStoreModuleManager (line 3) | class TripleStoreModuleManager extends BaseModuleManager {
    method initializeParanetRepository (line 4) | initializeParanetRepository(repository) {
    method repositoryInitilized (line 8) | repositoryInitilized(repository) {
    method getRepositoryUrl (line 12) | getRepositoryUrl(implementationName, repository) {
    method deleteUniqueKnowledgeCollectionTriplesFromUnifiedGraph (line 18) | async deleteUniqueKnowledgeCollectionTriplesFromUnifiedGraph(
    method getKnowledgeCollectionFromUnifiedGraph (line 35) | async getKnowledgeCollectionFromUnifiedGraph(
    method getKnowledgeCollectionPublicFromUnifiedGraph (line 49) | async getKnowledgeCollectionPublicFromUnifiedGraph(
    method knowledgeCollectionExistsInUnifiedGraph (line 68) | async knowledgeCollectionExistsInUnifiedGraph(implementationName, repo...
    method deleteUniqueKnowledgeAssetTriplesFromUnifiedGraph (line 76) | async deleteUniqueKnowledgeAssetTriplesFromUnifiedGraph(
    method getKnowledgeAssetFromUnifiedGraph (line 89) | async getKnowledgeAssetFromUnifiedGraph(implementationName, repository...
    method getKnowledgeAssetPublicFromUnifiedGraph (line 97) | async getKnowledgeAssetPublicFromUnifiedGraph(implementationName, repo...
    method knowledgeAssetExistsInUnifiedGraph (line 105) | async knowledgeAssetExistsInUnifiedGraph(implementationName, repositor...
    method createKnowledgeCollectionNamedGraphs (line 113) | async createKnowledgeCollectionNamedGraphs(
    method createParanetKnoledgeCollectionConnection (line 134) | async createParanetKnoledgeCollectionConnection(
    method insertMetadataTriples (line 155) | async insertMetadataTriples(implementationName, repository, kcUal, ual...
    method deleteKnowledgeCollectionNamedGraphs (line 167) | async deleteKnowledgeCollectionNamedGraphs(implementationName, reposit...
    method getKnowledgeCollectionNamedGraphs (line 175) | async getKnowledgeCollectionNamedGraphs(
    method getKnowledgeCollectionNamedGraphsInBatch (line 196) | async getKnowledgeCollectionNamedGraphsInBatch(
    method getKnowledgeCollectionNamedGraphsOld (line 209) | async getKnowledgeCollectionNamedGraphsOld(
    method checkIfKnowledgeAssetExists (line 230) | async checkIfKnowledgeAssetExists(implementationName, repository, kaUA...
    method getKnowledgeCollectionNamedGraphsOldInBatch (line 239) | async getKnowledgeCollectionNamedGraphsOldInBatch(
    method getMetadataInBatch (line 258) | async getMetadataInBatch(implementationName, repository, uals) {
    method knowledgeCollectionNamedGraphsExist (line 267) | async knowledgeCollectionNamedGraphsExist(implementationName, reposito...
    method deleteKnowledgeAssetNamedGraph (line 275) | async deleteKnowledgeAssetNamedGraph(implementationName, repository, u...
    method getKnowledgeAssetNamedGraph (line 284) | async getKnowledgeAssetNamedGraph(implementationName, repository, ual,...
    method knowledgeAssetNamedGraphExists (line 295) | async knowledgeAssetNamedGraphExists(implementationName, repository, n...
    method insertKnowledgeCollectionMetadata (line 304) | async insertKnowledgeCollectionMetadata(
    method deleteKnowledgeCollectionMetadata (line 317) | async deleteKnowledgeCollectionMetadata(implementationName, repository...
    method deletePublishTimestampMetadata (line 325) | async deletePublishTimestampMetadata(implementationName, repository, u...
    method getKnowledgeCollectionMetadata (line 334) | async getKnowledgeCollectionMetadata(implementationName, repository, u...
    method getKnowledgeAssetMetadata (line 344) | async getKnowledgeAssetMetadata(implementationName, repository, ual, t...
    method knowledgeCollectionMetadataExists (line 354) | async knowledgeCollectionMetadataExists(implementationName, repository...
    method getLatestAssertionId (line 362) | async getLatestAssertionId(implementationName, repository, ual) {
    method construct (line 371) | async construct(implementationName, repository, query, timeout) {
    method select (line 381) | async select(implementationName, repository, query, timeout) {
    method queryVoid (line 391) | async queryVoid(implementationName, repository, query) {
    method deleteRepository (line 397) | async deleteRepository(implementationName, repository) {
    method findAllNamedGraphsByUAL (line 403) | async findAllNamedGraphsByUAL(implementationName, repository, ual) {
    method findAllSubjectsWithGraphNames (line 412) | async findAllSubjectsWithGraphNames(implementationName, repository, ua...
    method ask (line 422) | async ask(implementationName, repository, query) {
    method insertAssertionBatch (line 428) | async insertAssertionBatch(
    method getName (line 449) | getName() {
    method getV6Assertion (line 455) | async getV6Assertion(implementationName, repository, assertionId) {

FILE: src/modules/validation/implementation/merkle-validation.js
  class MerkleValidation (line 3) | class MerkleValidation {
    method initialize (line 4) | async initialize(config, logger) {
    method calculateRoot (line 9) | async calculateRoot(assertion) {

FILE: src/modules/validation/validation-module-manager.js
  class ValidationModuleManager (line 3) | class ValidationModuleManager extends BaseModuleManager {
    method getName (line 4) | getName() {
    method calculateRoot (line 8) | async calculateRoot(assertion) {

FILE: src/service/ask-service.js
  class AskService (line 11) | class AskService extends OperationService {
    method constructor (line 12) | constructor(ctx) {
    method processResponse (line 25) | async processResponse(command, responseStatus, responseData) {
    method getBatchSize (line 104) | getBatchSize(batchSize = null) {

FILE: src/service/auth-service.js
  class AuthService (line 4) | class AuthService {
    method constructor (line 5) | constructor(ctx) {
    method authenticate (line 17) | async authenticate(ip, token) {
    method isAuthorized (line 47) | async isAuthorized(token, systemOperation) {
    method isPublicOperation (line 85) | isPublicOperation(operationName) {
    method _isTokenValid (line 103) | async _isTokenValid(token) {
    method _isIpWhitelisted (line 128) | _isIpWhitelisted(reqIp) {
    method _isTokenRevoked (line 157) | _isTokenRevoked(token) {
    method _logMessage (line 172) | _logMessage(message) {

FILE: src/service/batch-get-service.js
  class BatchGetService (line 9) | class BatchGetService extends OperationService {
    method constructor (line 10) | constructor(ctx) {

FILE: src/service/blockchain-events-service.js
  class BlockchainEventsService (line 1) | class BlockchainEventsService {
    method constructor (line 2) | constructor(ctx) {
    method initializeBlockchainEventsServices (line 9) | initializeBlockchainEventsServices() {
    method getContractAddress (line 20) | getContractAddress(blockchain, contractName) {
    method updateContractAddress (line 28) | updateContractAddress(blockchain, contractName, contractAddress) {
    method getBlock (line 37) | async getBlock(blockchain, tag = 'latest') {
    method getPastEvents (line 45) | async getPastEvents(

FILE: src/service/claim-rewards-service.js
  class ClaimRewardsService (line 3) | class ClaimRewardsService {
    method constructor (line 4) | constructor(ctx) {
    method initialize (line 16) | async initialize() {
    method claimRewardsMechanism (line 29) | async claimRewardsMechanism(blockchainId) {
    method claimRewards (line 95) | async claimRewards(blockchainId) {

FILE: src/service/crypto-service.js
  class CryptoService (line 3) | class CryptoService {
    method constructor (line 4) | constructor(ctx) {
    method toBigNumber (line 9) | toBigNumber(value) {
    method keccak256 (line 13) | keccak256(data) {
    method sha256 (line 21) | sha256(data) {
    method encodePacked (line 29) | encodePacked(types, values) {
    method keccak256EncodePacked (line 33) | keccak256EncodePacked(types, values) {
    method sha256EncodePacked (line 37) | sha256EncodePacked(types, values) {
    method convertUint8ArrayToHex (line 41) | convertUint8ArrayToHex(uint8Array) {
    method convertAsciiToHex (line 45) | convertAsciiToHex(string) {
    method convertHexToAscii (line 49) | convertHexToAscii(hexString) {
    method convertBytesToUint8Array (line 53) | convertBytesToUint8Array(bytesLikeData) {
    method convertToWei (line 57) | convertToWei(value, fromUnit = 'ether') {
    method convertFromWei (line 61) | convertFromWei(value, toUnit = 'ether') {
    method splitSignature (line 65) | splitSignature(flatSignature) {

FILE: src/service/dependency-injection.js
  class DependencyInjection (line 3) | class DependencyInjection {
    method initialize (line 4) | static async initialize() {
    method registerValue (line 31) | static registerValue(container, valueName, value) {

FILE: src/service/file-service.js
  class FileService (line 22) | class FileService {
    method constructor (line 23) | constructor(ctx) {
    method getFileExtension (line 28) | getFileExtension(filePath) {
    method writeContentsToFile (line 39) | async writeContentsToFile(directory, filename, data, log = true, flag ...
    method appendContentsToFile (line 49) | async appendContentsToFile(directory, filename, data, log = true) {
    method readDirectory (line 61) | async readDirectory(dirPath) {
    method stat (line 73) | async stat(filePath) {
    method pathExists (line 77) | async pathExists(fileOrDirPath) {
    method readFile (line 89) | async readFile(filePath, convertToJSON = false) {
    method removeFile (line 102) | async removeFile(filePath) {
    method removeFolder (line 117) | async removeFolder(folderPath) {
    method getBinariesFolderPath (line 131) | getBinariesFolderPath() {
    method getBinaryPath (line 135) | getBinaryPath(binary) {
    method makeBinaryExecutable (line 143) | async makeBinaryExecutable(binary) {
    method getBLSSecretKeyFolderPath (line 155) | getBLSSecretKeyFolderPath() {
    method getBLSSecretKeyPath (line 159) | getBLSSecretKeyPath() {
    method getDataFolderPath (line 163) | getDataFolderPath() {
    method getUpdateFilePath (line 174) | getUpdateFilePath() {
    method getMigrationFolderPath (line 178) | getMigrationFolderPath() {
    method getOperationIdCachePath (line 182) | getOperationIdCachePath() {
    method getOperationIdDocumentPath (line 186) | getOperationIdDocumentPath(operationId) {
    method getPendingStorageCachePath (line 190) | getPendingStorageCachePath() {
    method getPendingStorageDocumentPath (line 194) | getPendingStorageDocumentPath(operationId) {
    method getSignatureStorageCachePath (line 198) | getSignatureStorageCachePath() {
    method getSignatureStorageFolderPath (line 202) | getSignatureStorageFolderPath(folderName) {
    method getSignatureStorageDocumentPath (line 206) | getSignatureStorageDocumentPath(folderName, operationId) {
    method getParentDirectory (line 210) | getParentDirectory(filePath) {

FILE: src/service/finality-service.js
  class FinalityService (line 12) | class FinalityService extends OperationService {
    method constructor (line 13) | constructor(ctx) {
    method processResponse (line 30) | async processResponse(operationId, blockchain, responseStatus, respons...
    method getBatchSize (line 71) | getBatchSize(batchSize = null) {
    method getMinAckResponses (line 75) | getMinAckResponses(minimumNumberOfNodeReplications = null) {

FILE: src/service/get-service.js
  class GetService (line 12) | class GetService extends OperationService {
    method constructor (line 13) | constructor(ctx) {
    method processResponse (line 26) | async processResponse(command, responseStatus, responseData) {
    method getBatchSize (line 96) | getBatchSize(batchSize = null) {
    method getMinAckResponses (line 100) | getMinAckResponses(minimumNumberOfNodeReplications = null) {

FILE: src/service/json-schema-service.js
  class JsonSchemaService (line 4) | class JsonSchemaService {
    method constructor (line 5) | constructor(ctx) {
    method loadSchema (line 9) | async loadSchema(version, schemaName, argumentsObject = {}) {
    method bidSuggestionSchema (line 24) | async bidSuggestionSchema(version) {
    method publishSchema (line 40) | async publishSchema(version) {
    method updateSchema (line 56) | async updateSchema(version) {
    method getSchema (line 72) | async getSchema(version) {
    method querySchema (line 86) | async querySchema(version) {
    method localStoreSchema (line 100) | async localStoreSchema(version) {
    method finalitySchema (line 116) | async finalitySchema(version) {
    method askSchema (line 131) | async askSchema(version) {

FILE: src/service/messaging-service.js
  class MessagingService (line 3) | class MessagingService {
    method constructor (line 4) | constructor(ctx) {
    method sendProtocolMessage (line 8) | async sendProtocolMessage(node, operationId, message, messageType, tim...
    method handleProtocolResponse (line 22) | async handleProtocolResponse(response, operationService, blockchain, o...
    method handleBusyResponse (line 45) | async handleBusyResponse() {
    method handleAckResponse (line 49) | async handleAckResponse(operationService, blockchain, operationId, res...
    method handleNackResponse (line 59) | async handleNackResponse(operationService, blockchain, operationId, re...
    method handleUnknownResponse (line 71) | async handleUnknownResponse(operationService, blockchain, operationId) {

FILE: src/service/operation-id-service.js
  class OperationIdService (line 4) | class OperationIdService {
    method constructor (line 5) | constructor(ctx) {
    method generateId (line 14) | generateId() {
    method generateOperationId (line 18) | async generateOperationId(status, blockchain, previousOperationId = nu...
    method getOperationIdRecord (line 28) | async getOperationIdRecord(operationId) {
    method operationIdInRightFormat (line 35) | operationIdInRightFormat(operationId) {
    method updateOperationIdStatusWithValues (line 39) | async updateOperationIdStatusWithValues(
    method updateOperationIdStatus (line 58) | async updateOperationIdStatus(
    method emitChangeEvent (line 83) | emitChangeEvent(
    method cacheOperationIdDataToMemory (line 107) | async cacheOperationIdDataToMemory(operationId, data) {
    method cacheOperationIdDataToFile (line 113) | async cacheOperationIdDataToFile(operationId, data) {
    method getCachedOperationIdData (line 124) | async getCachedOperationIdData(operationId) {
    method removeOperationIdCache (line 141) | async removeOperationIdCache(operationId) {
    method removeOperationIdMemoryCache (line 148) | removeOperationIdMemoryCache(operationId) {
    method getOperationIdMemoryCacheSizeBytes (line 153) | getOperationIdMemoryCacheSizeBytes() {
    method getOperationIdFileCacheSizeBytes (line 162) | async getOperationIdFileCacheSizeBytes() {
    method removeExpiredOperationIdMemoryCache (line 180) | async removeExpiredOperationIdMemoryCache(expiredTimeout) {
    method removeExpiredOperationIdFileCache (line 193) | async removeExpiredOperationIdFileCache(expiredTimeout, batchSize) {

FILE: src/service/operation-service.js
  constant MUTEX_TTL_MS (line 8) | const MUTEX_TTL_MS = 5 * 60 * 1000;
  constant MUTEX_SWEEP_INTERVAL_MS (line 9) | const MUTEX_SWEEP_INTERVAL_MS = 5 * 60 * 1000;
  class OperationService (line 11) | class OperationService {
    method constructor (line 12) | constructor(ctx) {
    method _getOperationMutex (line 26) | _getOperationMutex(operationId) {
    method _markOperationTerminal (line 33) | _markOperationTerminal(operationId) {
    method _isOperationTerminal (line 37) | _isOperationTerminal(operationId) {
    method _sweepStaleMutexes (line 41) | _sweepStaleMutexes() {
    method getOperationName (line 51) | getOperationName() {
    method getNetworkProtocols (line 55) | getNetworkProtocols() {
    method getOperationStatus (line 59) | async getOperationStatus(operationId) {
    method getResponsesStatuses (line 66) | async getResponsesStatuses(responseStatus, errorMessage, operationId) {
    method markOperationAsCompleted (line 101) | async markOperationAsCompleted(
    method markOperationAsFailed (line 141) | async markOperationAsFailed(operationId, blockchain, message, errorTyp...
    method scheduleOperationForLeftoverNodes (line 162) | async scheduleOperationForLeftoverNodes(commandData, leftoverNodes) {
    method logResponsesSummary (line 171) | logResponsesSummary(completedNumber, failedNumber) {
    method getBatchSize (line 179) | getBatchSize() {
    method getMinAckResponses (line 183) | getMinAckResponses() {

FILE: src/service/paranet-service.js
  class ParanetService (line 1) | class ParanetService {
    method constructor (line 2) | constructor(ctx) {
    method initializeParanetRecord (line 9) | async initializeParanetRecord(blockchain, paranetId) {
    method constructParanetId (line 28) | constructParanetId(contract, knowledgeCollectionId, knowledgeAssetId) {
    method constructKnowledgeAssetId (line 35) | constructKnowledgeAssetId(contract, tokenId) {
    method getParanetRepositoryName (line 42) | getParanetRepositoryName(paranetUAL) {
    method getParanetIdFromUAL (line 52) | getParanetIdFromUAL(paranetUAL) {

FILE: src/service/pending-storage-service.js
  class PendingStorageService (line 7) | class PendingStorageService {
    method constructor (line 8) | constructor(ctx) {
    method cacheDataset (line 16) | async cacheDataset(operationId, datasetRoot, dataset, remotePeerId) {
    method getOperationIdByMerkleRoot (line 34) | getOperationIdByMerkleRoot(merkleRoot) {
    method getCachedDataset (line 38) | async getCachedDataset(operationId) {
    method removeExpiredFileCache (line 54) | async removeExpiredFileCache(expirationTimeMillis, maxRemovalCount) {
    method getCachedAssertion (line 140) | async getCachedAssertion(repository, blockchain, contract, tokenId, as...
    method removeCachedAssertion (line 159) | async removeCachedAssertion(repository, blockchain, contract, tokenId,...
    method _removeMerkleRootIndexEntry (line 190) | _removeMerkleRootIndexEntry(operationId) {
    method getPendingState (line 199) | async getPendingState(operationId) {

FILE: src/service/proofing-service.js
  class ProofingService (line 13) | class ProofingService {
    method constructor (line 14) | constructor(ctx) {
    method initialize (line 27) | async initialize() {
    method proofingMechanism (line 40) | async proofingMechanism(blockchainId) {
    method runProofing (line 84) | async runProofing(blockchainId) {
    method prepareAndSendProof (line 229) | async prepareAndSendProof(blockchainId, identityId) {
    method getAndPersistNewChallenge (line 279) | async getAndPersistNewChallenge(blockchainId, identityId) {
    method fetchAndProcessAssertion (line 343) | async fetchAndProcessAssertion(blockchainId, ual) {
    method calculateAndSubmitProof (line 407) | async calculateAndSubmitProof(data, challenge, blockchainId) {
    method generateOperationId (line 484) | generateOperationId(blockchainId, epoch, activeProofPeriodStartBlock) {
    method cleanup (line 489) | cleanup() {

FILE: src/service/protocol-service.js
  class ProtocolService (line 3) | class ProtocolService {
    method constructor (line 4) | constructor(ctx) {
    method toAwilixVersion (line 8) | toAwilixVersion(protocol) {
    method resolveProtocol (line 13) | resolveProtocol(protocol) {
    method getProtocols (line 18) | getProtocols() {
    method toOperation (line 22) | toOperation(protocol) {
    method getReceiverCommandSequence (line 34) | getReceiverCommandSequence(protocol) {
    method getSenderCommandSequence (line 44) | getSenderCommandSequence(protocol) {

FILE: src/service/publish-service.js
  class PublishService (line 12) | class PublishService extends OperationService {
    method constructor (line 13) | constructor(ctx) {
    method processResponse (line 27) | async processResponse(command, responseStatus, responseData, errorMess...
    method getBatchSize (line 134) | getBatchSize(batchSize = null) {
    method getMinAckResponses (line 138) | getMinAckResponses(minimumNumberOfNodeReplications = null) {

FILE: src/service/sharding-table-service.js
  class ShardingTableService (line 3) | class ShardingTableService {
    method constructor (line 4) | constructor(ctx) {
    method initialize (line 14) | async initialize() {
    method pullBlockchainShardingTable (line 24) | async pullBlockchainShardingTable(blockchainId, transaction = null) {
    method findShard (line 80) | async findShard(blockchainId, filterInactive = false) {
    method isNodePartOfShard (line 89) | async isNodePartOfShard(blockchainId, peerId) {
    method calculateBidSuggestion (line 94) | calculateBidSuggestion(askOffset, sorted, blockchainId, kbSize, epochs...
    method findEligibleNodes (line 107) | async findEligibleNodes(neighbourhood, bid, r1, r0) {
    method dial (line 111) | async dial(peerId) {
    method updatePeerRecordLastSeenAndLastDialed (line 129) | async updatePeerRecordLastSeenAndLastDialed(peerId) {
    method updatePeerRecordLastDialed (line 155) | async updatePeerRecordLastDialed(peerId) {
    method findPeerAddressAndProtocols (line 175) | async findPeerAddressAndProtocols(peerId) {

FILE: src/service/signature-service.js
  class SignatureService (line 1) | class SignatureService {
    method constructor (line 2) | constructor(ctx) {
    method signMessage (line 11) | async signMessage(blockchain, messageHash) {
    method addSignatureToStorage (line 20) | async addSignatureToStorage(folderName, operationId, identityId, v, r,...
    method getSignaturesFromStorage (line 28) | async getSignaturesFromStorage(folderName, operationId) {

FILE: src/service/sync-service.js
  class SyncService (line 13) | class SyncService {
    method constructor (line 15) | constructor(ctx) {
    method initialize (line 30) | async initialize() {
    method syncMechanism (line 82) | async syncMechanism(blockchainId) {
    method runSyncNewKc (line 177) | async runSyncNewKc(blockchainId, syncRecords) {
    method runSyncMissed (line 260) | async runSyncMissed(blockchainId, contractAddress) {
    method syncNewKc (line 278) | async syncNewKc(blockchainId, contractAddress, syncObject) {
    method syncMissedKc (line 401) | async syncMissedKc(blockchainId, contract) {
    method callBatchGet (line 545) | async callBatchGet(uals, blockchainId) {
    method cleanup (line 588) | cleanup() {

FILE: src/service/triple-store-service.js
  class TripleStoreService (line 17) | class TripleStoreService {
    method constructor (line 18) | constructor(ctx) {
    method initializeRepositories (line 34) | initializeRepositories() {
    method insertKnowledgeCollection (line 45) | async insertKnowledgeCollection(
    method insertKnowledgeCollectionBatch (line 350) | async insertKnowledgeCollectionBatch(repository, KCs) {
    method deletePublishTimestampMetadata (line 409) | async deletePublishTimestampMetadata(repository, ual) {
    method checkIfKnowledgeCollectionExistsInUnifiedGraph (line 417) | async checkIfKnowledgeCollectionExistsInUnifiedGraph(
    method getAssertion (line 432) | async getAssertion(
    method getAssertionsInBatch (line 571) | async getAssertionsInBatch(
    method getV6Assertion (line 617) | async getV6Assertion(repository, assertionId) {
    method checkIfKnowledgeAssetExists (line 642) | async checkIfKnowledgeAssetExists(repository, kaUAL) {
    method getAssertionMetadata (line 652) | async getAssertionMetadata(
    method getAssertionMetadataBatch (line 685) | async getAssertionMetadataBatch(uals) {
    method getLatestAssertionId (line 706) | async getLatestAssertionId(repository, ual) {
    method construct (line 716) | async construct(query, repository = TRIPLE_STORE_REPOSITORY.DKG, timeo...
    method getKnowledgeAssetNamedGraph (line 726) | async getKnowledgeAssetNamedGraph(repository, ual, visibility, timeout) {
    method select (line 736) | async select(query, repository = TRIPLE_STORE_REPOSITORY.DKG, timeout ...
    method ask (line 746) | async ask(query, repository = TRIPLE_STORE_REPOSITORY.DKG) {
    method getRepositorySparqlEndpoint (line 755) | getRepositorySparqlEndpoint(repository) {

FILE: src/service/ual-service.js
  class UALService (line 1) | class UALService {
    method constructor (line 2) | constructor(ctx) {
    method deriveUAL (line 10) | deriveUAL(blockchain, contract, knowledgeCollectionId, knowledgeAssetI...
    method isUAL (line 16) | isUAL(ual) {
    method resolveUAL (line 47) | resolveUAL(ual) {
    method isContract (line 128) | isContract(contract) {
    method calculateLocationKeyword (line 134) | async calculateLocationKeyword(
    method getUalWithoutChainId (line 154) | getUalWithoutChainId(ual, blockchain) {

FILE: src/service/update-service.js
  class UpdateService (line 10) | class UpdateService extends OperationService {
    method constructor (line 11) | constructor(ctx) {
    method processResponse (line 26) | async processResponse(command, responseStatus, responseData, errorMess...

FILE: src/service/util/jwt-util.js
  class JwtUtil (line 5) | class JwtUtil {
    method constructor (line 6) | constructor() {
    method generateJWT (line 16) | generateJWT(uuid, expiresIn = null) {
    method validateJWT (line 37) | validateJWT(token) {
    method getPayload (line 52) | getPayload(token) {
    method decode (line 61) | decode(token) {

FILE: src/service/util/string-util.js
  class StringUtil (line 1) | class StringUtil {
    method toCamelCase (line 2) | toCamelCase(str) {
    method capitalize (line 6) | capitalize(str) {

FILE: src/service/validation-service.js
  class ValidationService (line 9) | class ValidationService {
    method constructor (line 10) | constructor(ctx) {
    method validateUal (line 17) | async validateUal(blockchain, contract, tokenId) {
    method validateUalV6 (line 39) | async validateUalV6(blockchain, contract, tokenId) {
    method validateAssertion (line 61) | async validateAssertion(assertionId, blockchain, assertion) {
    method validateDatasetRootOnBlockchain (line 69) | async validateDatasetRootOnBlockchain(
    method validateDatasetOnBlockchain (line 90) | async validateDatasetOnBlockchain(
    method validateDatasetRoot (line 108) | async validateDatasetRoot(dataset, datasetRoot) {
    method validatePrivateMerkleRoot (line 118) | async validatePrivateMerkleRoot(publicAssertion, privateAssertion) {
    method validateGetResponse (line 131) | async validateGetResponse(

FILE: test/assertions/assertions.js
  function createTestGraph (line 3) | function createTestGraph(id, type, values) {

FILE: test/bdd/steps/blockchain.mjs
  constant BLOCKCHAIN_CONFIGS (line 5) | const BLOCKCHAIN_CONFIGS = [

FILE: test/bdd/steps/hooks.mjs
  constant PORT_RELEASE_DELAY_MS (line 12) | const PORT_RELEASE_DELAY_MS = 2500;

FILE: test/bdd/steps/lib/local-blockchain.mjs
  class LocalBlockchain (line 25) | class LocalBlockchain {
    method initialize (line 26) | async initialize(port, _console = console, version = '') {
    method _waitForContracts (line 61) | async _waitForContracts(port, _console) {
    method stop (line 83) | async stop() {
    method getWallets (line 89) | getWallets() {
    method setParametersStorageParams (line 93) | async setParametersStorageParams(params) {
    method setR0 (line 111) | async setR0(r0) {
    method setR1 (line 120) | async setR1(r1) {
    method setFinalizationCommitsNumber (line 129) | async setFinalizationCommitsNumber(commitsNumber) {

FILE: test/modules/telemetry/telemetry.js
  method on (line 22) | on(eventName, callback) {
  method emit (line 29) | emit(eventName, ...args) {
  function onEventReceived (line 38) | function onEventReceived() {

FILE: test/unit/controllers/publish-http-api-controller-v1.test.js
  method status (line 11) | status(code) {
  method json (line 15) | json(payload) {
  method send (line 19) | send(payload) {

FILE: test/unit/mock/blockchain-module-manager-mock.js
  class BlockchainModuleManagerMock (line 3) | class BlockchainModuleManagerMock {
    method getR2 (line 4) | getR2() {
    method getR1 (line 8) | getR1() {
    method getR0 (line 12) | getR0() {
    method encodePacked (line 16) | encodePacked(blockchain, types, values) {
    method convertBytesToUint8Array (line 20) | convertBytesToUint8Array(blockchain, bytesLikeData) {
    method convertToWei (line 24) | convertToWei(blockchainId, value) {
    method toBigNumber (line 28) | toBigNumber(blockchain, value) {
    method getAssertionSize (line 32) | getAssertionSize(blockchain, assertionId) {
    method getAssertionTriplesNumber (line 36) | getAssertionTriplesNumber(blockchain, assertionId) {
    method getAssertionChunksNumber (line 40) | getAssertionChunksNumber(blockchain, assertionId) {

FILE: test/unit/mock/command-executor-mock.js
  class CommandExecutorMock (line 1) | class CommandExecutorMock {
    method add (line 2) | add(addCommand) {}

FILE: test/unit/mock/event-emitter-mock.js
  class EventEmitterMock (line 1) | class EventEmitterMock {}

FILE: test/unit/mock/http-client-module-manager-mock.js
  class HttpClientModuleManagerMock (line 3) | class HttpClientModuleManagerMock {
    method createRouterInstance (line 4) | createRouterInstance() {
    method initializeBeforeMiddlewares (line 8) | initializeBeforeMiddlewares() {}
    method listen (line 10) | async listen() {}
    method use (line 12) | use(path, callback) {}
    method selectMiddlewares (line 14) | selectMiddlewares(options) {
    method initializeAfterMiddlewares (line 18) | initializeAfterMiddlewares() {}

FILE: test/unit/mock/json-schema-service-mock.js
  class JsonSchemaServiceMock (line 1) | class JsonSchemaServiceMock {}

FILE: test/unit/mock/network-module-manager-mock.js
  class NetworkModuleManagerMock (line 1) | class NetworkModuleManagerMock {
    method getPeerId (line 2) | getPeerId() {

FILE: test/unit/mock/operation-id-service-mock.js
  class OperationIdServiceMock (line 1) | class OperationIdServiceMock {
    method constructor (line 2) | constructor(ctx) {
    method cacheOperationIdDataToFile (line 6) | cacheOperationIdDataToFile(operationId, data) {}
    method cacheOperationIdDataToMemory (line 8) | cacheOperationIdDataToMemory(operationId, data) {}
    method updateOperationIdStatus (line 10) | async updateOperationIdStatus(

FILE: test/unit/mock/repository-module-manager-mock.js
  class RepositoryModuleManagerMock (line 1) | class RepositoryModuleManagerMock {
    method getAllPeerRecords (line 14) | getAllPeerRecords() {
    method getAllResponseStatuses (line 109) | getAllResponseStatuses() {
    method getOperationResponsesStatuses (line 113) | async getOperationResponsesStatuses(operation, operationId) {
    method updateOperationIdRecord (line 117) | async updateOperationIdRecord(data, operationId) {
    method updateOperationStatus (line 125) | async updateOperationStatus(operation, operationId, status) {
    method createOperationResponseRecord (line 133) | async createOperationResponseRecord(status, operation, operationId, er...

FILE: test/unit/mock/validation-module-manager-mock.js
  class ValidationModuleManagerMock (line 3) | class ValidationModuleManagerMock {
    method callHashFunction (line 4) | callHashFunction(data) {
    method getHashFunctionName (line 9) | getHashFunctionName() {
    method calculateRoot (line 13) | calculateRoot(assertion) {

FILE: test/unit/modules/repository/repository.test.js
  function insertLoadTestAgreements (line 371) | async function insertLoadTestAgreements(numAgreements) {

FILE: test/unit/modules/validation/validation-module-manager.test.js
  function testInvalidValues (line 145) | async function testInvalidValues() {
  function testInvalidValues (line 162) | async function testInvalidValues() {

FILE: test/unit/service/operation-id-service-cache.test.js
  method pathExists (line 32) | async pathExists(p) {

FILE: test/utilities/dkg-client-helper.mjs
  class DkgClientHelper (line 4) | class DkgClientHelper {
    method constructor (line 5) | constructor(config) {
    method info (line 9) | async info() {
    method publish (line 13) | async publish(data, userOptions = {}) {
    method get (line 27) | async get(ual, state, userOptions = {}) {
    method query (line 38) | async query(query) {

FILE: test/utilities/http-api-helper.mjs
  constant TERMINAL_STATUSES (line 4) | const TERMINAL_STATUSES = ['COMPLETED', 'FAILED'];
  class HttpApiHelper (line 6) | class HttpApiHelper {
    method info (line 7) | async info(nodeRpcUrl) {
    method get (line 11) | async get(nodeRpcUrl, requestBody) {
    method getOperationResult (line 15) | async getOperationResult(nodeRpcUrl, operationName, operationId) {
    method publish (line 19) | async publish(nodeRpcUrl, requestBody) {
    method update (line 23) | async update(nodeRpcUrl, requestBody) {
    method pollOperationResult (line 37) | async pollOperationResult(nodeRpcUrl, operationName, operationId, { in...
    method _sendRequest (line 54) | async _sendRequest(method, url, data) {

FILE: test/utilities/steps-utils.mjs
  constant BOOTSTRAP_LIBP2P_PRIVATE_KEY (line 10) | const BOOTSTRAP_LIBP2P_PRIVATE_KEY =
  constant BOOTSTRAP_NETWORK_PORT (line 15) | const BOOTSTRAP_NETWORK_PORT = 19000;
  constant BOOTSTRAP_RPC_PORT (line 16) | const BOOTSTRAP_RPC_PORT = 18900;
  constant BOOTSTRAP_PEER_MULTIADDR (line 23) | const BOOTSTRAP_PEER_MULTIADDR = `/ip4/127.0.0.1/tcp/${BOOTSTRAP_NETWORK...
  class StepsUtils (line 25) | class StepsUtils {
    method forkNode (line 26) | forkNode(nodeConfiguration) {
    method createNodeConfiguration (line 46) | createNodeConfiguration(

FILE: test/utilities/utilities.js
  class Utilities (line 3) | class Utilities {
    method unpackRawTableToArray (line 4) | static unpackRawTableToArray(rawTable) {
    method unpackRawTable (line 12) | static unpackRawTable(rawTable) {
    method deleteTripleStoreRepositories (line 58) | static async deleteTripleStoreRepositories(config, logger) {

FILE: tools/local-network-setup/generate-config-files.js
  function generateNodeConfig (line 54) | async function generateNodeConfig(nodeIndex) {
  function generateTripleStoreConfig (line 90) | function generateTripleStoreConfig(templateTripleStoreConfig, nodeIndex) {
  function generateBlockchainConfig (line 108) | function generateBlockchainConfig(templateBlockchainConfig, nodeIndex) {
  function generateHttpClientConfig (line 173) | function generateHttpClientConfig(templateHttpClientConfig, nodeIndex) {
  function generateNetworkConfig (line 181) | function generateNetworkConfig(templateNetworkConfig, nodeIndex) {
  function generateRepositoryConfig (line 193) | function generateRepositoryConfig(templateRepositoryConfig, nodeIndex) {
  function dropDatabase (line 203) | async function dropDatabase(name, config) {
  function deleteTripleStoreRepositories (line 220) | async function deleteTripleStoreRepositories(config) {
  function fileExists (line 234) | async function fileExists(filePath) {
  function removeFile (line 243) | async function removeFile(filePath) {
  function deleteDataFolder (line 247) | async function deleteDataFolder(config) {

FILE: tools/ot-parachain-account-mapping/create-account-mapping-signature.js
  constant PRIVATE_ETH_KEY (line 25) | const PRIVATE_ETH_KEY = process.argv[2];
  constant PUBLIC_SUBSTRATE_ADDRESS (line 26) | const PUBLIC_SUBSTRATE_ADDRESS = process.argv[3];
  constant HEX_SUBSTRATE_ADDRESS (line 27) | const HEX_SUBSTRATE_ADDRESS = u8aToHex(decodeAddress(PUBLIC_SUBSTRATE_AD...
  function sign (line 31) | async function sign() {

FILE: tools/substrate-accounts-mapping/accounts-mapping.js
  constant WALLETS_PATH (line 20) | const WALLETS_PATH = path.join(appRootPath.path, 'tools/substrate-accoun...
  constant TOKEN_ADDRESS (line 31) | const TOKEN_ADDRESS = '0xffffffff00000000000000000000000000000001';
  constant HTTPS_ENDPOINT (line 32) | const HTTPS_ENDPOINT = 'https://astrosat-parachain-rpc.origin-trail.netw...
  constant NUMBER_OF_ACCOUNTS (line 34) | const NUMBER_OF_ACCOUNTS = 32;
  constant OTP_AMOUNT (line 36) | const OTP_AMOUNT = 50 * 1e12;
  constant OTP_CHAIN_ID (line 37) | const OTP_CHAIN_ID = '2043';
  constant OTP_GENESIS_HASH (line 38) | const OTP_GENESIS_HASH = '0xe7e0962324a3b86c83404dbea483f25fb5dab4c22479...
  constant GAS_PRICE (line 40) | const GAS_PRICE = 20;
  constant GAS_LIMIT (line 41) | const GAS_LIMIT = 60000;
  constant TRACE_AMOUNT (line 42) | const TRACE_AMOUNT = '0.000000001';
  class AccountsMapping (line 44) | class AccountsMapping {
    method initialize (line 45) | async initialize() {
    method mapAccounts (line 57) | async mapAccounts() {
    method generateWallets (line 154) | async generateWallets() {
    method generateSubstrateAccount (line 164) | async generateSubstrateAccount() {
    method generateEVMAccount (line 178) | async generateEVMAccount() {
    method mapWallet (line 183) | async mapWallet(evmPublicKey, evmPrivateKey, substratePublicKey, subst...
    method fundAccountsWithOtp (line 198) | async fundAccountsWithOtp(substratePublicKey) {
    method fundAccountsWithTrac (line 208) | async fundAccountsWithTrac(evmWallet, nonce) {
    method accountMapped (line 216) | async accountMapped(wallet) {
    method callParachainExtrinsic (line 221) | async callParachainExtrinsic(keyring, extrinsic, method, args) {
    method queryParachainState (line 228) | async queryParachainState(state, method, args) {
    method sleepForMilliseconds (line 232) | async sleepForMilliseconds(milliseconds) {
    method sign (line 236) | async sign(publicAccountKey, privateEthKey) {

FILE: v8-data-migration/blockchain-utils.js
  function maskRpcUrl (line 12) | function maskRpcUrl(url) {
  function initializeRpc (line 25) | async function initializeRpc(rpcEndpoint) {
  function getStorageContractAndAddress (line 48) | async function getStorageContractAndAddress(
  function getContentAssetStorageContract (line 76) | async function getContentAssetStorageContract(provider, blockchainDetail...

FILE: v8-data-migration/constants.js
  constant SCHEMA_CONTEXT (line 4) | const SCHEMA_CONTEXT = 'http://schema.org/';
  constant METADATA_NAMED_GRAPH (line 5) | const METADATA_NAMED_GRAPH = 'metadata:graph';
  constant PRIVATE_ASSERTION_ONTOLOGY (line 6) | const PRIVATE_ASSERTION_ONTOLOGY =
  constant TRIPLE_STORE_CONNECT_MAX_RETRIES (line 8) | const TRIPLE_STORE_CONNECT_MAX_RETRIES = 10;
  constant TRIPLE_STORE_CONNECT_RETRY_FREQUENCY (line 9) | const TRIPLE_STORE_CONNECT_RETRY_FREQUENCY = 10;
  constant N_QUADS (line 10) | const N_QUADS = 'application/n-quads';
  constant OT_BLAZEGRAPH (line 11) | const OT_BLAZEGRAPH = 'ot-blazegraph';
  constant OT_FUSEKI (line 12) | const OT_FUSEKI = 'ot-fuseki';
  constant OT_GRAPHDB (line 13) | const OT_GRAPHDB = 'ot-graphdb';
  constant PRIVATE_CURRENT (line 14) | const PRIVATE_CURRENT = 'privateCurrent';
  constant PUBLIC_CURRENT (line 15) | const PUBLIC_CURRENT = 'publicCurrent';
  constant DKG_REPOSITORY (line 16) | const DKG_REPOSITORY = 'dkg';
  constant VISIBILITY (line 17) | const VISIBILITY = {
  constant BATCH_SIZE (line 21) | const BATCH_SIZE = 50;
  constant MAIN_DIR (line 23) | const MAIN_DIR = '/root';
  constant DEFAULT_CONFIG_PATH (line 24) | const DEFAULT_CONFIG_PATH = `${MAIN_DIR}/ot-node/current/config/config.j...
  constant NODERC_CONFIG_PATH (line 25) | const NODERC_CONFIG_PATH = `${MAIN_DIR}/ot-node/.origintrail_noderc`;
  constant DATA_MIGRATION_DIR (line 26) | const DATA_MIGRATION_DIR = `${MAIN_DIR}/ot-node/data/data-migration`;
  constant LOG_DIR (line 27) | const LOG_DIR = `${MAIN_DIR}/ot-node/data/data-migration/logs`;
  constant ENV_PATH (line 28) | const ENV_PATH = `${MAIN_DIR}/ot-node/current/.env`;
  constant MIGRATION_DIR (line 29) | const MIGRATION_DIR = `${MAIN_DIR}/ot-node/data/migrations/`;
  constant MIGRATION_PROGRESS_FILE (line 30) | const MIGRATION_PROGRESS_FILE = 'v8DataMigration';
  constant DB_URLS (line 32) | const DB_URLS = {
  constant BLOCKCHAINS (line 43) | const BLOCKCHAINS = {
  constant CONTENT_ASSET_STORAGE_CONTRACT (line 94) | const CONTENT_ASSET_STORAGE_CONTRACT = 'ContentAssetStorage';

FILE: v8-data-migration/logger.js
  method time (line 51) | time(label) {
  method timeEnd (line 54) | timeEnd(label) {

FILE: v8-data-migration/sqlite-utils.js
  class SqliteDatabase (line 7) | class SqliteDatabase {
    method constructor (line 8) | constructor() {
    method initialize (line 12) | async initialize() {
    method checkIntegrity (line 30) | async checkIntegrity() {
    method getTableExists (line 47) | async getTableExists(blockchainName) {
    method getBatchOfUnprocessedTokenIds (line 59) | async getBatchOfUnprocessedTokenIds(blockchainName, batchSize) {
    method markRowsAsProcessed (line 85) | async markRowsAsProcessed(blockchainName, tokenIds) {
    method getHighestTokenId (line 100) | async getHighestTokenId(blockchainName) {
    method getUnprocessedCount (line 108) | async getUnprocessedCount(blockchainName) {
    method insertAssertion (line 120) | async insertAssertion(blockchainName, tokenId, ual, assertionId) {
    method close (line 136) | async close() {
    method _validateConnection (line 143) | _validateConnection() {
    method _validateBlockchainName (line 150) | _validateBlockchainName(blockchainName) {

FILE: v8-data-migration/triple-store-utils.js
  function getTripleStoreData (line 31) | function getTripleStoreData(tripleStoreConfig) {
  function initializeSparqlEndpoints (line 62) | function initializeSparqlEndpoints(tripleStoreRepositories, repository, ...
  function initializeRepositories (line 101) | function initializeRepositories(tripleStoreRepositories, tripleStoreImpl...
  function initializeContexts (line 119) | function initializeContexts(tripleStoreRepositories) {
  function healthCheck (line 148) | async function healthCheck(tripleStoreRepositories, repository, tripleSt...
  function ensureConnections (line 217) | async function ensureConnections(tripleStoreRepositories, tripleStoreImp...
  function hasUnicodeCodePoints (line 256) | function hasUnicodeCodePoints(input) {
  function decodeUnicodeCodePoints (line 262) | function decodeUnicodeCodePoints(input) {
  function _executeQuery (line 272) | async function _executeQuery(
  function construct (line 314) | async function construct(
  function cleanEscapeCharacter (line 335) | function cleanEscapeCharacter(query) {
  function getAssertion (line 339) | async function getAssertion(
  function extractPrivateAssertionId (line 365) | function extractPrivateAssertionId(publicAssertion) {
  function getAssertionFromV6TripleStore (line 383) | async function getAssertionFromV6TripleStore(
  function processContent (line 475) | function processContent(str) {
  function ask (line 482) | async function ask(tripleStoreRepositories, repository, query) {
  function getKnowledgeCollectionNamedGraphsExist (line 509) | async function getKnowledgeCollectionNamedGraphsExist(
  function queryVoid (line 551) | async function queryVoid(tripleStoreRepositories, repository, query) {
  function hasSpecialCharactersInIRI (line 564) | function hasSpecialCharactersInIRI(assertion) {
  function insertAssertionsIntoV8UnifiedRepository (line 584) | async function insertAssertionsIntoV8UnifiedRepository(
  function knowledgeCollectionNamedGraphExists (line 654) | async function knowledgeCollectionNamedGraphExists(
  function knowledgeAssetMetadataExists (line 682) | async function knowledgeAssetMetadataExists(tripleStoreRepositories, rep...

FILE: v8-data-migration/v8-data-migration-utils.js
  function initializeConfig (line 12) | function initializeConfig() {
  function initializeDefaultConfig (line 19) | function initializeDefaultConfig() {
  function ensureDirectoryExists (line 26) | function ensureDirectoryExists(dirPath) {
  function ensureMigrationProgressFileExists (line 40) | function ensureMigrationProgressFileExists() {
  function markMigrationAsSuccessfull (line 63) | function markMigrationAsSuccessfull() {
  function deleteFile (line 77) | function deleteFile(filePath) {

FILE: v8-data-migration/v8-data-migration.js
  function processAndInsertNewerAssertions (line 44) | async function processAndInsertNewerAssertions(
  function processAndInsertAssertions (line 160) | async function processAndInsertAssertions(
  function getAssertionsInBatch (line 232) | async function getAssertionsInBatch(
  function downloadDb (line 267) | async function downloadDb(dbFilePath) {
  function main (line 330) | async function main() {

FILE: v8-data-migration/validation.js
  function validateConfig (line 3) | function validateConfig(config) {
  function validateBlockchainName (line 12) | function validateBlockchainName(blockchainName) {
  function validateBlockchainDetails (line 21) | function validateBlockchainDetails(blockchainDetails) {
  function validateTokenId (line 37) | function validateTokenId(tokenId) {
  function validateUal (line 46) | function validateUal(ual) {
  function validateTripleStoreRepositories (line 53) | function validateTripleStoreRepositories(tripleStoreRepositories) {
  function validateTripleStoreImplementation (line 62) | function validateTripleStoreImplementation(tripleStoreImplementation) {
  function validateTripleStoreConfig (line 71) | function validateTripleStoreConfig(tripleStoreConfig) {
  function validateRepository (line 80) | function validateRepository(repository) {
  function validateQuery (line 89) | function validateQuery(query) {
  function validateAssertionId (line 98) | function validateAssertionId(assertionId) {
  function validateAssertion (line 107) | function validateAssertion(assertion) {
  function validateProvider (line 117) | function validateProvider(provider) {
  function validateStorageContractAddress (line 126) | function validateStorageContractAddress(storageContractAddress) {
  function validateStorageContractName (line 135) | function validateStorageContractName(storageContractName) {
  function validateStorageContractAbi (line 144) | function validateStorageContractAbi(storageContractAbi) {
  function validateBatchData (line 153) | function validateBatchData(batchData) {
Condensed preview — 436 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,738K chars).
[
  {
    "path": ".codex/review-prompt.md",
    "chars": 11423,
    "preview": "# PR Review Instructions\n\nYou are a senior code reviewer for the OriginTrail DKG Engine (ot-node). Your job is to review"
  },
  {
    "path": ".codex/review-schema.json",
    "chars": 975,
    "preview": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"summary\": {\n      \"type\": \"string\",\n      \"description\": \"Brief overall ass"
  },
  {
    "path": ".eslintrc.cjs",
    "chars": 895,
    "preview": "module.exports = {\n    env: {\n        es6: true,\n        node: true,\n    },\n    extends: ['airbnb/base', 'prettier'],\n  "
  },
  {
    "path": ".github/CODEOWNERS",
    "chars": 41,
    "preview": "* @branarakic @u-hubar @Mihajlo-Pavlovic\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report_v8.md",
    "chars": 648,
    "preview": "---\nname: Bug report for V8 ot-node\nabout: Create an issue report\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n## Issue desc"
  },
  {
    "path": ".github/actions/setup/action.yml",
    "chars": 1281,
    "preview": "name: setup\n\nruns:\n  using: composite\n  steps:\n    - name: Setup NodeJS\n      id: nodejs\n      uses: actions/setup-node@"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 1303,
    "preview": "# Description\n\nPlease include a summary of the change and which issue is fixed. Please also include relevant motivation "
  },
  {
    "path": ".github/release-drafter-template.yml",
    "chars": 467,
    "preview": "name-template: 'OriginTrail Release $NEXT_PATCH_VERSION'\ntag-template: \"$NEXT_PATCH_VERSION\"\nversion-template: \"v$MAJOR."
  },
  {
    "path": ".github/workflows/check-package-lock.yml",
    "chars": 2358,
    "preview": "name: Check Package Lock File\n\npermissions:\n  contents: read\n\nconcurrency:\n  group: check-package-lock-${{ github.ref }}"
  },
  {
    "path": ".github/workflows/checks.yml",
    "chars": 4168,
    "preview": "name: checks\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize]\n  push:\n    branches:\n      - '**'\n\npermiss"
  },
  {
    "path": ".github/workflows/codex-review.yml",
    "chars": 5615,
    "preview": "name: Codex PR Review\n\non:\n  pull_request:\n    types: [opened, synchronize, reopened]\n\nconcurrency:\n  group: codex-revie"
  },
  {
    "path": ".github/workflows/release-drafter-config.yml",
    "chars": 497,
    "preview": "name: release-drafter\n\non:\n  push:\n    branches:\n      - develop\n\njobs:\n  update_release_draft:\n    runs-on: ubuntu-late"
  },
  {
    "path": ".github/workflows/update-cache.yml",
    "chars": 369,
    "preview": "name: update-cache\n\non:\n  push:\n    branches:\n      - v8/develop\n\nconcurrency:\n  group: update-cache-${{ github.ref }}\n "
  },
  {
    "path": ".gitignore",
    "chars": 2175,
    "preview": "# Logs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n.idea\n.origintrail_noderc\n.*_origintrail_no"
  },
  {
    "path": ".husky/.gitignore",
    "chars": 2,
    "preview": "_\n"
  },
  {
    "path": ".husky/pre-commit",
    "chars": 62,
    "preview": "#!/bin/sh\n. \"$(dirname \"$0\")/_/husky.sh\"\n\nnpm run lint-staged\n"
  },
  {
    "path": ".lintstagedrc.json",
    "chars": 53,
    "preview": "{\n  \"*.{js, json}\": [\"prettier --write\", \"eslint\"]\n}\n"
  },
  {
    "path": ".prettierrc",
    "chars": 159,
    "preview": "{\n  \"semi\": true,\n  \"printWidth\": 100,\n  \"singleQuote\": true,\n  \"trailingComma\": \"all\",\n  \"arrowParens\": \"always\",\n  \"ta"
  },
  {
    "path": "Alpine.Dockerfile",
    "chars": 489,
    "preview": "FROM node:14-alpine3.15\n\nLABEL maintainer=\"OriginTrail\"\nENV NODE_ENV=testnet\n\n#Install Papertrail\nRUN wget https://githu"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 5223,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participa"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1666,
    "preview": "# Contributing\n\n## Rules\n\nThere are a few basic ground-rules for contributors (including the maintainer(s) of the projec"
  },
  {
    "path": "Debian.Dockerfile",
    "chars": 1455,
    "preview": "#base image\nFROM node:14.18.3-bullseye\n\nMAINTAINER OriginTrail\nLABEL maintainer=\"OriginTrail\"\nENV NODE_ENV=testnet\n\n\n#My"
  },
  {
    "path": "LICENSE",
    "chars": 11341,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "README.md",
    "chars": 11155,
    "preview": "<a name=\"readme-top\"></a>\n\n---\n\n<br />\n<div align=\"center\">\n  <a href=\"https://github.com/OriginTrail/ot-node\">\n    <img"
  },
  {
    "path": "Ubuntu.Dockerfile",
    "chars": 1309,
    "preview": "#base image\nFROM ubuntu:20.04\n\nMAINTAINER OriginTrail\nLABEL maintainer=\"OriginTrail\"\nENV NODE_ENV=testnet\n\n#Install git,"
  },
  {
    "path": "bin/darwin/arm64/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "bin/darwin/x64/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "bin/linux/arm64/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "bin/linux/x64/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "bin/win32/x64/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "blazegraph-migration/README.md",
    "chars": 1304,
    "preview": "The migration is manual and split into two scripts: export and import, which you must run yourself. Your node will be of"
  },
  {
    "path": "blazegraph-migration/check_quad_num.sh",
    "chars": 3435,
    "preview": "#!/bin/bash\n\nget_mysql_password() {\n    local base_dir=$(dirname \"$0\")\n    grep ^REPOSITORY_PASSWORD= \"./current/.env\" |"
  },
  {
    "path": "blazegraph-migration/export.sh",
    "chars": 4081,
    "preview": "#!/bin/bash\n\nset -e\n\n# Configs\nBLAZEGRAPH_JAR=\"blazegraph.jar\"\n\nif [ \"$#\" -lt 2 ]; then\n  echo \"Usage: $0 <base_dir> <na"
  },
  {
    "path": "blazegraph-migration/import.sh",
    "chars": 5063,
    "preview": "#!/bin/bash\n\nLOG_FILE=\"migration_import_$(date +%Y%m%d_%H%M%S).log\"\nCURL_TIMEOUT=300\nMAX_RETRIES=3\nCHUNK_DELAY=2\n\nlog_me"
  },
  {
    "path": "blazegraph-migration/job_pool.sh",
    "chars": 7094,
    "preview": "# Job pooling for bash shell scripts\n# This script provides a job pooling functionality where you can keep up to n\n# pro"
  },
  {
    "path": "config/config.json",
    "chars": 45568,
    "preview": "{\n    \"development\": {\n        \"modules\": {\n            \"autoUpdater\": {\n                \"enabled\": false,\n             "
  },
  {
    "path": "config/papertrail.yml",
    "chars": 113,
    "preview": "files:\n  - /ot-node/complete-node.log\ndestination:\n  host: logs4.papertrailapp.com\n  port: 39178\n  protocol: tls\n"
  },
  {
    "path": "cucumber.js",
    "chars": 76,
    "preview": "export default {\n    retry: 1,\n    failFast: false,\n    backtrace: true,\n};\n"
  },
  {
    "path": "dependencies.md",
    "chars": 10139,
    "preview": "# OT-node dependencies\n\n## dev dependencies\n\n##### [@cucumber/cucumber](https://www.npmjs.com/package/@cucumber/cucumber"
  },
  {
    "path": "docker/docker-compose-alpine-blazegraph.yaml",
    "chars": 789,
    "preview": "version: '3'\n\nservices:\n  blazegraph:\n    container_name: blazegraph\n    image: origintrail/ot-node:blazegraph\n    netwo"
  },
  {
    "path": "docker/docker-compose-alpine-graphdb.yaml",
    "chars": 777,
    "preview": "version: '3'\n\nservices:\n  graphdb:\n    container_name: graphdb\n    image: khaller/graphdb-free:latest\n    network_mode: "
  },
  {
    "path": "docker/docker-compose-debian-blazegraph.yaml",
    "chars": 551,
    "preview": "version: '3.8'\nservices:\n  blazegraph:\n    container_name: blazegraph\n    image: origintrail/ot-node:blazegraph\n    netw"
  },
  {
    "path": "docker/docker-compose-debian-graphdb.yaml",
    "chars": 540,
    "preview": "version: '3.8'\nservices:\n  graphdb:\n    container_name: graphdb\n    image: khaller/graphdb-free:latest\n    network_mode:"
  },
  {
    "path": "docker/docker-compose-ubuntu-blazegraph.yaml",
    "chars": 574,
    "preview": "version: '3.8'\nservices:\n  blazegraph:\n    container_name: blazegraph\n    image: origintrail/ot-node:blazegraph\n    netw"
  },
  {
    "path": "docker/docker-compose-ubuntu-graphdb.yaml",
    "chars": 562,
    "preview": "version: '3.8'\nservices:\n  graphdb:\n    container_name: graphdb\n    image: khaller/graphdb-free:latest\n    network_mode:"
  },
  {
    "path": "docs/openapi/DKGv8.yaml",
    "chars": 45418,
    "preview": "openapi: 3.0.3\ninfo:\n  title: DKGv8\n  description: DKG V8 API Collection.\n  version: 1.0.0\n  contact: {}\nservers:\n  - ur"
  },
  {
    "path": "docs/postman/DKGv8.postman_collection.json",
    "chars": 45881,
    "preview": "{\n\t\"info\": {\n\t\t\"_postman_id\": \"550b0443-cd47-482a-9c56-2b1229422426\",\n\t\t\"name\": \"DKGv8\",\n\t\t\"description\": \"DKG V8 API Co"
  },
  {
    "path": "index.js",
    "chars": 5705,
    "preview": "/* eslint-disable no-console */\nimport 'dotenv/config';\nimport fs from 'fs-extra';\nimport OTNode from './ot-node.js';\nim"
  },
  {
    "path": "installer/README.md",
    "chars": 346,
    "preview": "Installs the V8 Node\n\n2. Login to the server as root. You __cannot__ use sudo and run this script. The command \"npm inst"
  },
  {
    "path": "installer/installer.sh",
    "chars": 34268,
    "preview": "#!/bin/bash\n\nOTNODE_DIR=\"/root/ot-node\"\n\ntext_color() {\n    GREEN='\\033[0;32m'\n    BGREEN='\\033[1;32m'\n    RED='\\033[0;3"
  },
  {
    "path": "ot-node.js",
    "chars": 18111,
    "preview": "import DeepExtend from 'deep-extend';\nimport rc from 'rc';\nimport EventEmitter from 'events';\nimport { createRequire } f"
  },
  {
    "path": "package.json",
    "chars": 5051,
    "preview": "{\n    \"name\": \"origintrail_node\",\n    \"version\": \"8.2.6\",\n    \"description\": \"OTNode V8\",\n    \"main\": \"index.js\",\n    \"t"
  },
  {
    "path": "scripts/copy-assertions.js",
    "chars": 5728,
    "preview": "import 'dotenv/config';\nimport fs from 'fs-extra';\nimport rc from 'rc';\nimport appRootPath from 'app-root-path';\nimport "
  },
  {
    "path": "scripts/set-ask.js",
    "chars": 3450,
    "preview": "/* eslint-disable no-console */\nimport { ethers } from 'ethers';\nimport axios from 'axios';\nimport { createRequire } fro"
  },
  {
    "path": "scripts/set-operator-fee.js",
    "chars": 2503,
    "preview": "/* eslint-disable no-console */\nimport { ethers } from 'ethers';\nimport { createRequire } from 'module';\nimport {\n    NO"
  },
  {
    "path": "scripts/set-stake.js",
    "chars": 5138,
    "preview": "/* eslint-disable no-console */\nimport { ethers } from 'ethers';\nimport { createRequire } from 'module';\nimport axios fr"
  },
  {
    "path": "scripts/utils.js",
    "chars": 189,
    "preview": "export default function validateArguments(received, expected) {\n    for (const arg of expected) {\n        if (!received["
  },
  {
    "path": "src/commands/blockchain-event-listener/blockchain-event-listener-command.js",
    "chars": 20578,
    "preview": "import Command from '../command.js';\nimport {\n    CONTRACTS,\n    MONITORED_CONTRACT_EVENTS,\n    CONTRACT_INDEPENDENT_EVE"
  },
  {
    "path": "src/commands/blockchain-event-listener/event-listener-command.js",
    "chars": 2513,
    "preview": "import Command from '../command.js';\nimport {\n    CONTRACT_EVENT_FETCH_INTERVALS,\n    NODE_ENVIRONMENTS,\n    ERROR_TYPE,"
  },
  {
    "path": "src/commands/cleaners/ask-cleaner-command.js",
    "chars": 1023,
    "preview": "import CleanerCommand from './cleaner-command.js';\nimport {\n    REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER,\n    OPERATIONS,\n"
  },
  {
    "path": "src/commands/cleaners/ask-response-cleaner-command.js",
    "chars": 1084,
    "preview": "import CleanerCommand from './cleaner-command.js';\nimport {\n    REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER,\n    OPERATIONS,\n"
  },
  {
    "path": "src/commands/cleaners/batch-get-cleaner-command.js",
    "chars": 1044,
    "preview": "import CleanerCommand from './cleaner-command.js';\nimport {\n    REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER,\n    OPERATIONS,\n"
  },
  {
    "path": "src/commands/cleaners/blockchain-event-cleaner-command.js",
    "chars": 1101,
    "preview": "import {\n    PROCESSED_BLOCKCHAIN_EVENTS_CLEANUP_TIME_MILLS,\n    REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER,\n    PROCESSED_B"
  },
  {
    "path": "src/commands/cleaners/cleaner-command.js",
    "chars": 1161,
    "preview": "import { REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER } from '../../constants/constants.js';\nimport Command from '../command.j"
  },
  {
    "path": "src/commands/cleaners/commands-cleaner-command.js",
    "chars": 973,
    "preview": "import {\n    FINALIZED_COMMAND_CLEANUP_TIME_MILLS,\n    FINALIZED_COMMAND_CLEANUP_TIME_DELAY,\n    REPOSITORY_ROWS_FOR_REM"
  },
  {
    "path": "src/commands/cleaners/finality-cleaner-command.js",
    "chars": 1063,
    "preview": "import CleanerCommand from './cleaner-command.js';\nimport {\n    REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER,\n    OPERATIONS,\n"
  },
  {
    "path": "src/commands/cleaners/finality-response-cleaner-command.js",
    "chars": 1124,
    "preview": "import CleanerCommand from './cleaner-command.js';\nimport {\n    REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER,\n    OPERATIONS,\n"
  },
  {
    "path": "src/commands/cleaners/get-cleaner-command.js",
    "chars": 1023,
    "preview": "import CleanerCommand from './cleaner-command.js';\nimport {\n    REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER,\n    OPERATIONS,\n"
  },
  {
    "path": "src/commands/cleaners/get-response-cleaner-command.js",
    "chars": 1084,
    "preview": "import CleanerCommand from './cleaner-command.js';\nimport {\n    REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER,\n    OPERATIONS,\n"
  },
  {
    "path": "src/commands/cleaners/operation-id-cleaner-command.js",
    "chars": 3371,
    "preview": "import Command from '../command.js';\nimport {\n    BYTES_IN_KILOBYTE,\n    OPERATION_ID_FILES_FOR_REMOVAL_MAX_NUMBER,\n    "
  },
  {
    "path": "src/commands/cleaners/pending-storage-cleaner-command.js",
    "chars": 1919,
    "preview": "import Command from '../command.js';\nimport {\n    PUBLISH_STORAGE_MEMORY_CLEANUP_COMMAND_CLEANUP_TIME_MILLS,\n    PUBLISH"
  },
  {
    "path": "src/commands/cleaners/publish-cleaner-command.js",
    "chars": 1055,
    "preview": "import CleanerCommand from './cleaner-command.js';\nimport {\n    REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER,\n    OPERATIONS,\n"
  },
  {
    "path": "src/commands/cleaners/publish-response-cleaner-command.js",
    "chars": 1116,
    "preview": "import CleanerCommand from './cleaner-command.js';\nimport {\n    REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER,\n    OPERATIONS,\n"
  },
  {
    "path": "src/commands/cleaners/update-cleaner-command.js",
    "chars": 1047,
    "preview": "import CleanerCommand from './cleaner-command.js';\nimport {\n    REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER,\n    OPERATIONS,\n"
  },
  {
    "path": "src/commands/cleaners/update-response-cleaner-command.js",
    "chars": 1108,
    "preview": "import CleanerCommand from './cleaner-command.js';\nimport {\n    REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER,\n    OPERATIONS,\n"
  },
  {
    "path": "src/commands/command-executor.js",
    "chars": 10051,
    "preview": "import { Queue, Worker } from 'bullmq';\nimport {\n    PERMANENT_COMMANDS,\n    DEFAULT_COMMAND_DELAY_IN_MILLS,\n    GENERAL"
  },
  {
    "path": "src/commands/command-resolver.js",
    "chars": 497,
    "preview": "/**\n * Resolves command handlers based on command names\n */\nclass CommandResolver {\n    constructor(ctx) {\n        this."
  },
  {
    "path": "src/commands/command.js",
    "chars": 4129,
    "preview": "import { OPERATION_ID_STATUS } from '../constants/constants.js';\n\n/**\n * Describes one command handler\n */\nclass Command"
  },
  {
    "path": "src/commands/common/dial-peers-command.js",
    "chars": 1722,
    "preview": "import Command from '../command.js';\nimport {\n    DIAL_PEERS_COMMAND_FREQUENCY_MILLS,\n    DIAL_PEERS_CONCURRENCY,\n    MI"
  },
  {
    "path": "src/commands/common/log-public-addresses-command.js",
    "chars": 2691,
    "preview": "import ip from 'ip';\nimport Command from '../command.js';\nimport { NODE_ENVIRONMENTS } from '../../constants/constants.j"
  },
  {
    "path": "src/commands/common/otnode-update-command.js",
    "chars": 2722,
    "preview": "import semver from 'semver';\nimport Command from '../command.js';\nimport { COMMAND_PRIORITY } from '../../constants/cons"
  },
  {
    "path": "src/commands/common/send-telemetry-command.js",
    "chars": 4401,
    "preview": "import { createRequire } from 'module';\nimport Command from '../command.js';\nimport {\n    SEND_TELEMETRY_COMMAND_FREQUEN"
  },
  {
    "path": "src/commands/common/send-transaction-command.js",
    "chars": 6455,
    "preview": "import Command from '../command.js';\nimport { EXPECTED_TRANSACTION_ERRORS, OPERATION_ID_STATUS } from '../../constants/c"
  },
  {
    "path": "src/commands/common/sharding-table-check-command.js",
    "chars": 2835,
    "preview": "import Command from '../command.js';\nimport {\n    COMMAND_PRIORITY,\n    SHARDING_TABLE_CHECK_COMMAND_FREQUENCY_MILLS,\n} "
  },
  {
    "path": "src/commands/common/validate-asset-command.js",
    "chars": 7090,
    "preview": "import Command from '../command.js';\nimport {\n    ERROR_TYPE,\n    OPERATION_ID_STATUS,\n    LOCAL_STORE_TYPES,\n    PARANE"
  },
  {
    "path": "src/commands/paranet/paranet-sync-command.js",
    "chars": 13718,
    "preview": "/* eslint-disable no-await-in-loop */\nimport { setTimeout } from 'timers/promises';\nimport Command from '../command.js';"
  },
  {
    "path": "src/commands/paranet/start-paranet-sync-commands.js",
    "chars": 2997,
    "preview": "import Command from '../command.js';\nimport {\n    ERROR_TYPE,\n    PARANET_SYNC_FREQUENCY_MILLS,\n    OPERATION_ID_STATUS,"
  },
  {
    "path": "src/commands/protocols/ask/receiver/v1.0.0/v1-0-0-handle-ask-request-command.js",
    "chars": 2742,
    "preview": "import HandleProtocolMessageCommand from '../../../common/handle-protocol-message-command.js';\nimport {\n    ERROR_TYPE,\n"
  },
  {
    "path": "src/commands/protocols/ask/sender/ask-find-shard-command.js",
    "chars": 1061,
    "preview": "import FindShardCommand from '../../common/find-shard-command.js';\nimport { ERROR_TYPE, OPERATION_ID_STATUS } from '../."
  },
  {
    "path": "src/commands/protocols/ask/sender/ask-schedule-messages-command.js",
    "chars": 1288,
    "preview": "import ProtocolScheduleMessagesCommand from '../../common/protocol-schedule-messages-command.js';\nimport { OPERATION_ID_"
  },
  {
    "path": "src/commands/protocols/ask/sender/network-ask-command.js",
    "chars": 787,
    "preview": "import NetworkProtocolCommand from '../../common/network-protocol-command.js';\nimport { ERROR_TYPE } from '../../../../c"
  },
  {
    "path": "src/commands/protocols/ask/sender/v1.0.0/v1-0-0-ask-request-command.js",
    "chars": 2116,
    "preview": "import ProtocolRequestCommand from '../../../common/protocol-request-command.js';\nimport {\n    NETWORK_MESSAGE_TIMEOUT_M"
  },
  {
    "path": "src/commands/protocols/common/find-curated-paranet-nodes-command.js",
    "chars": 4157,
    "preview": "import Command from '../../command.js';\nimport { OPERATION_ID_STATUS } from '../../../constants/constants.js';\n\nclass Fi"
  },
  {
    "path": "src/commands/protocols/common/find-shard-command.js",
    "chars": 4235,
    "preview": "import Command from '../../command.js';\nimport { OPERATION_ID_STATUS, ERROR_TYPE } from '../../../constants/constants.js"
  },
  {
    "path": "src/commands/protocols/common/handle-protocol-message-command.js",
    "chars": 5175,
    "preview": "import Command from '../../command.js';\nimport { NETWORK_MESSAGE_TYPES, OPERATION_ID_STATUS } from '../../../constants/c"
  },
  {
    "path": "src/commands/protocols/common/network-protocol-command.js",
    "chars": 1911,
    "preview": "import Command from '../../command.js';\nimport { ERROR_TYPE } from '../../../constants/constants.js';\n\nclass NetworkProt"
  },
  {
    "path": "src/commands/protocols/common/protocol-message-command.js",
    "chars": 3081,
    "preview": "import Command from '../../command.js';\nimport { NETWORK_MESSAGE_TYPES, OPERATION_REQUEST_STATUS } from '../../../consta"
  },
  {
    "path": "src/commands/protocols/common/protocol-request-command.js",
    "chars": 772,
    "preview": "import Command from '../../command.js';\nimport ProtocolMessageCommand from './protocol-message-command.js';\nimport { NET"
  },
  {
    "path": "src/commands/protocols/common/protocol-schedule-messages-command.js",
    "chars": 3137,
    "preview": "import Command from '../../command.js';\nimport { OPERATION_ID_STATUS } from '../../../constants/constants.js';\n\nclass Pr"
  },
  {
    "path": "src/commands/protocols/common/validate-assertion-metadata-command.js",
    "chars": 2798,
    "preview": "import Command from '../../command.js';\nimport { OPERATION_ID_STATUS } from '../../../constants/constants.js';\n\nclass Va"
  },
  {
    "path": "src/commands/protocols/finality/receiver/publish-finality-save-ack-command.js",
    "chars": 2618,
    "preview": "import {\n    COMMAND_PRIORITY,\n    NETWORK_MESSAGE_TYPES,\n    OPERATION_ID_STATUS,\n} from '../../../../constants/constan"
  },
  {
    "path": "src/commands/protocols/finality/receiver/v1.0.0/v1-0-0-handle-finality-request-command.js",
    "chars": 3650,
    "preview": "import HandleProtocolMessageCommand from '../../../common/handle-protocol-message-command.js';\nimport {\n    ERROR_TYPE,\n"
  },
  {
    "path": "src/commands/protocols/finality/sender/finality-schedule-messages-command.js",
    "chars": 1473,
    "preview": "import ProtocolScheduleMessagesCommand from '../../common/protocol-schedule-messages-command.js';\nimport {\n    OPERATION"
  },
  {
    "path": "src/commands/protocols/finality/sender/find-publisher-node-command.js",
    "chars": 1293,
    "preview": "import { COMMAND_PRIORITY } from '../../../../constants/constants.js';\nimport Command from '../../../command.js';\n\nclass"
  },
  {
    "path": "src/commands/protocols/finality/sender/network-finality-command.js",
    "chars": 1317,
    "preview": "import Command from '../../../command.js';\nimport NetworkProtocolCommand from '../../common/network-protocol-command.js'"
  },
  {
    "path": "src/commands/protocols/finality/sender/v1.0.0/v1-0-0-finality-request-command.js",
    "chars": 2151,
    "preview": "import Command from '../../../../command.js';\nimport ProtocolRequestCommand from '../../../common/protocol-request-comma"
  },
  {
    "path": "src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-batch-get-request-command.js",
    "chars": 4701,
    "preview": "import fs from 'fs/promises';\nimport path from 'path';\nimport HandleProtocolMessageCommand from '../../../common/handle-"
  },
  {
    "path": "src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-request-command.js",
    "chars": 7750,
    "preview": "import HandleProtocolMessageCommand from '../../../common/handle-protocol-message-command.js';\nimport {\n    ERROR_TYPE,\n"
  },
  {
    "path": "src/commands/protocols/get/sender/batch-get-command.js",
    "chars": 25280,
    "preview": "import { kcTools } from 'assertion-tools';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport Command from '."
  },
  {
    "path": "src/commands/protocols/get/sender/get-command.js",
    "chars": 27980,
    "preview": "import { kcTools } from 'assertion-tools';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport Command from '."
  },
  {
    "path": "src/commands/protocols/publish/publish-finalization-command.js",
    "chars": 10333,
    "preview": "import Command from '../../command.js';\nimport {\n    OPERATION_ID_STATUS,\n    ERROR_TYPE,\n    MAX_RETRIES_READ_CACHED_PU"
  },
  {
    "path": "src/commands/protocols/publish/receiver/v1.0.0/v1-0-0-handle-store-request-command.js",
    "chars": 4015,
    "preview": "import HandleProtocolMessageCommand from '../../../common/handle-protocol-message-command.js';\n\nimport {\n    NETWORK_MES"
  },
  {
    "path": "src/commands/protocols/publish/sender/publish-replication-command.js",
    "chars": 12930,
    "preview": "import { Semaphore } from 'async-mutex';\nimport {\n    OPERATION_ID_STATUS,\n    ERROR_TYPE,\n    OPERATION_REQUEST_STATUS,"
  },
  {
    "path": "src/commands/protocols/update/receiver/v1.0.0/v1-0-0-handle-update-request-command.js",
    "chars": 3135,
    "preview": "import HandleProtocolMessageCommand from '../../../common/handle-protocol-message-command.js';\n\nimport {\n    NETWORK_MES"
  },
  {
    "path": "src/commands/protocols/update/sender/network-update-command.js",
    "chars": 875,
    "preview": "import NetworkProtocolCommand from '../../common/network-protocol-command.js';\nimport { ERROR_TYPE } from '../../../../c"
  },
  {
    "path": "src/commands/protocols/update/sender/update-find-shard-command.js",
    "chars": 1255,
    "preview": "import FindShardCommand from '../../common/find-shard-command.js';\nimport { OPERATION_ID_STATUS, ERROR_TYPE } from '../."
  },
  {
    "path": "src/commands/protocols/update/sender/update-schedule-messages-command.js",
    "chars": 1148,
    "preview": "import ProtocolScheduleMessagesCommand from '../../common/protocol-schedule-messages-command.js';\nimport { OPERATION_ID_"
  },
  {
    "path": "src/commands/protocols/update/sender/update-validate-asset-command.js",
    "chars": 1984,
    "preview": "import ValidateAssetCommand from '../../../common/validate-asset-command.js';\nimport { OPERATION_ID_STATUS, ERROR_TYPE }"
  },
  {
    "path": "src/commands/protocols/update/sender/v1.0.0/v1-0-0-update-request-command.js",
    "chars": 1919,
    "preview": "import ProtocolRequestCommand from '../../../common/protocol-request-command.js';\nimport {\n    NETWORK_MESSAGE_TIMEOUT_M"
  },
  {
    "path": "src/commands/protocols/update/update-assertion-command.js",
    "chars": 3097,
    "preview": "import { kcTools } from 'assertion-tools';\nimport Command from '../../command.js';\nimport {\n    // OPERATION_ID_STATUS,\n"
  },
  {
    "path": "src/commands/protocols/update/update-validate-assertion-metadata-command.js",
    "chars": 1199,
    "preview": "import ValidateAssertionMetadataCommand from '../common/validate-assertion-metadata-command.js';\nimport { OPERATION_ID_S"
  },
  {
    "path": "src/commands/query/query-command.js",
    "chars": 5277,
    "preview": "import Command from '../command.js';\nimport {\n    TRIPLE_STORE_REPOSITORIES,\n    QUERY_TYPES,\n    OPERATION_ID_STATUS,\n "
  },
  {
    "path": "src/constants/constants.js",
    "chars": 38950,
    "preview": "import { BigNumber, ethers } from 'ethers';\nimport { createRequire } from 'module';\n\nexport const WS_RPC_PROVIDER_PRIORI"
  },
  {
    "path": "src/controllers/http-api/base-http-api-controller.js",
    "chars": 240,
    "preview": "class BaseController {\n    constructor(ctx) {\n        this.config = ctx.config;\n        this.logger = ctx.logger;\n    }\n"
  },
  {
    "path": "src/controllers/http-api/http-api-router.js",
    "chars": 3609,
    "preview": "import stringUtil from '../../service/util/string-util.js';\nimport { HTTP_API_ROUTES } from '../../constants/constants.j"
  },
  {
    "path": "src/controllers/http-api/v0/bid-suggestion-http-api-controller-v0.js",
    "chars": 1805,
    "preview": "import { BigNumber } from 'ethers';\nimport BaseController from '../base-http-api-controller.js';\nimport { ONE_ETHER } fr"
  },
  {
    "path": "src/controllers/http-api/v0/get-http-api-controller-v0.js",
    "chars": 4065,
    "preview": "import {\n    OPERATION_ID_STATUS,\n    OPERATION_STATUS,\n    ERROR_TYPE,\n    TRIPLES_VISIBILITY,\n    V6_CONTENT_STORAGE_M"
  },
  {
    "path": "src/controllers/http-api/v0/info-http-api-controller-v0.js",
    "chars": 395,
    "preview": "import { createRequire } from 'module';\nimport BaseController from '../base-http-api-controller.js';\n\nconst require = cr"
  },
  {
    "path": "src/controllers/http-api/v0/local-store-http-api-controller-v0.js",
    "chars": 3382,
    "preview": "import BaseController from '../base-http-api-controller.js';\nimport { OPERATION_ID_STATUS } from '../../../constants/con"
  },
  {
    "path": "src/controllers/http-api/v0/publish-http-api-controller-v0.js",
    "chars": 3352,
    "preview": "import BaseController from '../base-http-api-controller.js';\nimport {\n    ERROR_TYPE,\n    OPERATION_ID_STATUS,\n    OPERA"
  },
  {
    "path": "src/controllers/http-api/v0/query-http-api-controller-v0.js",
    "chars": 1844,
    "preview": "import BaseController from '../base-http-api-controller.js';\n\nimport { OPERATION_ID_STATUS, TRIPLE_STORE_REPOSITORIES } "
  },
  {
    "path": "src/controllers/http-api/v0/request-schema/bid-suggestion-schema-v0.js",
    "chars": 1235,
    "preview": "import { BID_SUGGESTION_RANGE_ENUM } from '../../../../constants/constants.js';\n\nexport default (argumentsObject) => ({\n"
  },
  {
    "path": "src/controllers/http-api/v0/request-schema/get-schema-v0.js",
    "chars": 437,
    "preview": "export default () => ({\n    type: 'object',\n    required: ['id'],\n    properties: {\n        id: {\n            type: 'str"
  },
  {
    "path": "src/controllers/http-api/v0/request-schema/local-store-schema-v0.js",
    "chars": 2440,
    "preview": "import { LOCAL_STORE_TYPES } from '../../../../constants/constants.js';\n\nexport default (argumentsObject) => ({\n    type"
  },
  {
    "path": "src/controllers/http-api/v0/request-schema/publish-schema-v0.js",
    "chars": 819,
    "preview": "export default (argumentsObject) => ({\n    type: 'object',\n    required: ['assertionId', 'assertion', 'blockchain', 'con"
  },
  {
    "path": "src/controllers/http-api/v0/request-schema/query-schema-v0.js",
    "chars": 389,
    "preview": "import { QUERY_TYPES } from '../../../../constants/constants.js';\n\nexport default () => ({\n    type: 'object',\n    requi"
  },
  {
    "path": "src/controllers/http-api/v0/request-schema/update-schema-v0.js",
    "chars": 819,
    "preview": "export default (argumentsObject) => ({\n    type: 'object',\n    required: ['assertionId', 'assertion', 'blockchain', 'con"
  },
  {
    "path": "src/controllers/http-api/v0/result-http-api-controller-v0.js",
    "chars": 2740,
    "preview": "import { OPERATION_ID_STATUS } from '../../../constants/constants.js';\nimport BaseController from '../base-http-api-cont"
  },
  {
    "path": "src/controllers/http-api/v0/update-http-api-controller-v0.js",
    "chars": 3008,
    "preview": "import BaseController from '../base-http-api-controller.js';\nimport {\n    ERROR_TYPE,\n    OPERATION_ID_STATUS,\n    OPERA"
  },
  {
    "path": "src/controllers/http-api/v1/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/controllers/http-api/v1/ask-http-api-controller-v1.js",
    "chars": 2906,
    "preview": "import { OPERATION_ID_STATUS, OPERATION_STATUS, ERROR_TYPE } from '../../../constants/constants.js';\nimport BaseControll"
  },
  {
    "path": "src/controllers/http-api/v1/direct-query-http-api-controller-v1.js",
    "chars": 7123,
    "preview": "import BaseController from '../base-http-api-controller.js';\n\nimport {\n    OPERATION_ID_STATUS,\n    TRIPLE_STORE_REPOSIT"
  },
  {
    "path": "src/controllers/http-api/v1/finality-http-api-controller-v1.js",
    "chars": 948,
    "preview": "import BaseController from '../base-http-api-controller.js';\n\nclass FinalityController extends BaseController {\n    cons"
  },
  {
    "path": "src/controllers/http-api/v1/get-http-api-controller-v1.js",
    "chars": 4184,
    "preview": "import {\n    OPERATION_ID_STATUS,\n    OPERATION_STATUS,\n    ERROR_TYPE,\n    TRIPLES_VISIBILITY,\n    COMMAND_PRIORITY,\n} "
  },
  {
    "path": "src/controllers/http-api/v1/info-http-api-controller-v1.js",
    "chars": 395,
    "preview": "import { createRequire } from 'module';\nimport BaseController from '../base-http-api-controller.js';\n\nconst require = cr"
  },
  {
    "path": "src/controllers/http-api/v1/local-store-http-api-controller-v1.js",
    "chars": 5610,
    "preview": "import { kcTools } from 'assertion-tools';\nimport BaseController from '../base-http-api-controller.js';\nimport {\n    PRI"
  },
  {
    "path": "src/controllers/http-api/v1/publish-http-api-controller-v1.js",
    "chars": 5018,
    "preview": "import BaseController from '../base-http-api-controller.js';\nimport {\n    ERROR_TYPE,\n    OPERATION_ID_STATUS,\n    OPERA"
  },
  {
    "path": "src/controllers/http-api/v1/query-http-api-controller-v1.js",
    "chars": 1884,
    "preview": "import BaseController from '../base-http-api-controller.js';\n\nimport { OPERATION_ID_STATUS, TRIPLE_STORE_REPOSITORIES } "
  },
  {
    "path": "src/controllers/http-api/v1/request-schema/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/controllers/http-api/v1/request-schema/ask-schema-v1.js",
    "chars": 574,
    "preview": "export default (argumentsObject) => ({\n    type: 'object',\n    required: ['ual', 'blockchain', 'minimumNumberOfNodeRepli"
  },
  {
    "path": "src/controllers/http-api/v1/request-schema/direct-query-schema-v1.js",
    "chars": 319,
    "preview": "import { QUERY_TYPES } from '../../../../constants/constants.js';\n\nexport default () => ({\n    type: 'object',\n    requi"
  },
  {
    "path": "src/controllers/http-api/v1/request-schema/finality-schema-v1.js",
    "chars": 150,
    "preview": "export default () => ({\n    type: 'object',\n    required: ['ual'],\n    properties: {\n        ual: {\n            type: 's"
  },
  {
    "path": "src/controllers/http-api/v1/request-schema/get-schema-v1.js",
    "chars": 348,
    "preview": "export default () => ({\n    type: 'object',\n    required: ['id'],\n    properties: {\n        id: {\n            type: 'str"
  },
  {
    "path": "src/controllers/http-api/v1/request-schema/local-store-schema-v1.js",
    "chars": 964,
    "preview": "export default (argumentsObject) => ({\n    type: 'object',\n    required: ['datasetRoot', 'dataset', 'blockchain'],\n    p"
  },
  {
    "path": "src/controllers/http-api/v1/request-schema/publish-schema-v1.js",
    "chars": 910,
    "preview": "export default (argumentsObject) => ({\n    type: 'object',\n    required: ['datasetRoot', 'dataset', 'blockchain'],\n    p"
  },
  {
    "path": "src/controllers/http-api/v1/request-schema/query-schema-v1.js",
    "chars": 319,
    "preview": "import { QUERY_TYPES } from '../../../../constants/constants.js';\n\nexport default () => ({\n    type: 'object',\n    requi"
  },
  {
    "path": "src/controllers/http-api/v1/result-http-api-controller-v1.js",
    "chars": 4846,
    "preview": "import {\n    NETWORK_SIGNATURES_FOLDER,\n    OPERATION_ID_STATUS,\n    PUBLISHER_NODE_SIGNATURES_FOLDER,\n} from '../../../"
  },
  {
    "path": "src/controllers/rpc/ask-rpc-controller.js",
    "chars": 1288,
    "preview": "import { NETWORK_MESSAGE_TYPES } from '../../constants/constants.js';\nimport BaseController from './base-rpc-controller."
  },
  {
    "path": "src/controllers/rpc/base-rpc-controller.js",
    "chars": 374,
    "preview": "class BaseController {\n    constructor(ctx) {\n        this.logger = ctx.logger;\n        this.protocolService = ctx.proto"
  },
  {
    "path": "src/controllers/rpc/batch-get-rpc-controller.js",
    "chars": 1355,
    "preview": "import { NETWORK_MESSAGE_TYPES } from '../../constants/constants.js';\nimport BaseController from './base-rpc-controller."
  },
  {
    "path": "src/controllers/rpc/finality-rpc-controller.js",
    "chars": 1529,
    "preview": "import { NETWORK_MESSAGE_TYPES } from '../../constants/constants.js';\nimport BaseController from './base-rpc-controller."
  },
  {
    "path": "src/controllers/rpc/get-rpc-controller.js",
    "chars": 1866,
    "preview": "import {\n    DEFAULT_GET_STATE,\n    NETWORK_MESSAGE_TYPES,\n    TRIPLE_STORE_REPOSITORY,\n} from '../../constants/constant"
  },
  {
    "path": "src/controllers/rpc/publish-rpc-controller.js",
    "chars": 1914,
    "preview": "import BaseController from './base-rpc-controller.js';\nimport { NETWORK_MESSAGE_TYPES, COMMAND_PRIORITY } from '../../co"
  },
  {
    "path": "src/controllers/rpc/rpc-router.js",
    "chars": 2056,
    "preview": "class RpcRouter {\n    constructor(ctx) {\n        this.networkModuleManager = ctx.networkModuleManager;\n        this.bloc"
  },
  {
    "path": "src/controllers/rpc/update-rpc-controller.js",
    "chars": 2013,
    "preview": "import BaseController from './base-rpc-controller.js';\nimport { NETWORK_MESSAGE_TYPES } from '../../constants/constants."
  },
  {
    "path": "src/logger/logger.js",
    "chars": 5205,
    "preview": "import { pino } from 'pino';\nimport pretty from 'pino-pretty';\n\n/**\n * Class for logging messages.\n */\nclass Logger {\n  "
  },
  {
    "path": "src/migration/base-migration.js",
    "chars": 2972,
    "preview": "import path from 'path';\nimport FileService from '../service/file-service.js';\n\nclass BaseMigration {\n    constructor(mi"
  },
  {
    "path": "src/migration/migration-executor.js",
    "chars": 2207,
    "preview": "import path from 'path';\n\nimport { NODE_ENVIRONMENTS } from '../constants/constants.js';\nimport TripleStoreUserConfigura"
  },
  {
    "path": "src/migration/redis-setup-migration.js",
    "chars": 6967,
    "preview": "import { execSync } from 'child_process';\nimport BaseMigration from './base-migration.js';\nimport { NODE_ENVIRONMENTS } "
  },
  {
    "path": "src/migration/triple-store-user-configuration-migration.js",
    "chars": 1684,
    "preview": "import appRootPath from 'app-root-path';\nimport path from 'path';\nimport BaseMigration from './base-migration.js';\n\nclas"
  },
  {
    "path": "src/modules/auto-updater/auto-updater-module-manager.js",
    "chars": 1273,
    "preview": "import BaseModuleManager from '../base-module-manager.js';\n\nclass AutoUpdaterModuleManager extends BaseModuleManager {\n "
  },
  {
    "path": "src/modules/auto-updater/implementation/ot-auto-updater.js",
    "chars": 10818,
    "preview": "import path from 'path';\nimport fs from 'fs-extra';\nimport { exec } from 'child_process';\nimport https from 'https';\nimp"
  },
  {
    "path": "src/modules/base-module-manager.js",
    "chars": 3460,
    "preview": "import ModuleConfigValidation from './module-config-validation.js';\nimport { REQUIRED_MODULES } from '../constants/const"
  },
  {
    "path": "src/modules/blockchain/blockchain-module-manager.js",
    "chars": 12237,
    "preview": "import BaseModuleManager from '../base-module-manager.js';\n\nclass BlockchainModuleManager extends BaseModuleManager {\n  "
  },
  {
    "path": "src/modules/blockchain/implementation/base/base-service.js",
    "chars": 317,
    "preview": "import Web3Service from '../web3-service.js';\n\nclass BaseService extends Web3Service {\n    constructor(ctx) {\n        su"
  },
  {
    "path": "src/modules/blockchain/implementation/eth/eth-service.js",
    "chars": 238,
    "preview": "import Web3Service from '../web3-service.js';\n\nclass EthService extends Web3Service {\n    constructor(ctx) {\n        sup"
  },
  {
    "path": "src/modules/blockchain/implementation/gnosis/gnosis-service.js",
    "chars": 2999,
    "preview": "import axios from 'axios';\nimport ethers from 'ethers';\nimport Web3Service from '../web3-service.js';\nimport { GNOSIS_DE"
  },
  {
    "path": "src/modules/blockchain/implementation/hardhat/hardhat-service.js",
    "chars": 583,
    "preview": "import ethers from 'ethers';\nimport Web3Service from '../web3-service.js';\n\nclass HardhatService extends Web3Service {\n "
  },
  {
    "path": "src/modules/blockchain/implementation/ot-parachain/ot-parachain-service.js",
    "chars": 7126,
    "preview": "import { ApiPromise, WsProvider, HttpProvider } from '@polkadot/api';\nimport { ethers } from 'ethers';\nimport { NEURO_DE"
  },
  {
    "path": "src/modules/blockchain/implementation/polygon/polygon-service.js",
    "chars": 249,
    "preview": "import Web3Service from '../web3-service.js';\n\nclass PolygonService extends Web3Service {\n    constructor(ctx) {\n       "
  },
  {
    "path": "src/modules/blockchain/implementation/web3-service-validator.js",
    "chars": 472,
    "preview": "class Web3ServiceValidator {\n    static validateResult(functionName, contractName, result, logger) {\n        if (Web3Ser"
  },
  {
    "path": "src/modules/blockchain/implementation/web3-service.js",
    "chars": 52166,
    "preview": "/* eslint-disable no-await-in-loop */\nimport { ethers, BigNumber } from 'ethers';\nimport axios from 'axios';\nimport asyn"
  },
  {
    "path": "src/modules/blockchain-events/blockchain-events-module-manager.js",
    "chars": 1704,
    "preview": "import BaseModuleManager from '../base-module-manager.js';\n\nclass BlockchainEventsModuleManager extends BaseModuleManage"
  },
  {
    "path": "src/modules/blockchain-events/implementation/blockchain-events-service.js",
    "chars": 540,
    "preview": "class BlockchainEventsService {\n    async initialize(config, logger) {\n        this.logger = logger;\n        this.config"
  },
  {
    "path": "src/modules/blockchain-events/implementation/ot-ethers/ot-ethers.js",
    "chars": 10678,
    "preview": "/* eslint-disable no-await-in-loop */\nimport { ethers } from 'ethers';\nimport BlockchainEventsService from '../blockchai"
  },
  {
    "path": "src/modules/http-client/http-client-module-manager.js",
    "chars": 1919,
    "preview": "import BaseModuleManager from '../base-module-manager.js';\n\nclass HttpClientModuleManager extends BaseModuleManager {\n  "
  },
  {
    "path": "src/modules/http-client/implementation/express-http-client.js",
    "chars": 3447,
    "preview": "import express from 'express';\nimport https from 'https';\nimport fs from 'fs-extra';\nimport fileUpload from 'express-fil"
  },
  {
    "path": "src/modules/http-client/implementation/middleware/authentication-middleware.js",
    "chars": 968,
    "preview": "const parseIp = (req) => {\n    let xForwardedFor;\n    let socketRemoteAddress;\n\n    if (req.socket) {\n        socketRemo"
  },
  {
    "path": "src/modules/http-client/implementation/middleware/authorization-middleware.js",
    "chars": 766,
    "preview": "const getToken = (req) => {\n    if (req.headers.authorization && req.headers.authorization.startsWith('Bearer ')) {\n    "
  },
  {
    "path": "src/modules/http-client/implementation/middleware/blockchain-id-midleware.js",
    "chars": 1023,
    "preview": "function addBlockchainId(blockchain, blockchainImplementations) {\n    let updatedBlockchain = blockchain;\n\n    if (block"
  },
  {
    "path": "src/modules/http-client/implementation/middleware/rate-limiter-middleware.js",
    "chars": 446,
    "preview": "import rateLimiter from 'express-rate-limit';\n\nexport default (config) =>\n    rateLimiter({\n        windowMs: config.tim"
  },
  {
    "path": "src/modules/http-client/implementation/middleware/request-validation-middleware.js",
    "chars": 1378,
    "preview": "import { Validator } from 'jsonschema';\n\nconst v = new Validator();\n\nfunction preValidateProperty(object, key, schema, o"
  },
  {
    "path": "src/modules/module-config-validation.js",
    "chars": 4700,
    "preview": "import { REQUIRED_MODULES, TRIPLE_STORE_REPOSITORIES } from '../constants/constants.js';\n\nclass ModuleConfigValidation {"
  },
  {
    "path": "src/modules/network/implementation/libp2p-service.js",
    "chars": 20762,
    "preview": "import appRootPath from 'app-root-path';\nimport libp2p from 'libp2p';\nimport KadDHT from 'libp2p-kad-dht';\nimport { join"
  },
  {
    "path": "src/modules/network/network-module-manager.js",
    "chars": 2604,
    "preview": "import BaseModuleManager from '../base-module-manager.js';\n\nclass NetworkModuleManager extends BaseModuleManager {\n    g"
  },
  {
    "path": "src/modules/repository/implementation/sequelize/migrations/20211117005500-create-commands.js",
    "chars": 1933,
    "preview": "export const up = async ({ context: { queryInterface, Sequelize } }) => {\n    await queryInterface.createTable('commands"
  },
  {
    "path": "src/modules/repository/implementation/sequelize/migrations/20211117005504-create-operation_ids.js",
    "chars": 942,
    "preview": "export async function up({ context: { queryInterface, Sequelize } }) {\n    return queryInterface.createTable('operation_"
  },
  {
    "path": "src/modules/repository/implementation/sequelize/migrations/20220620100000-create-publish.js",
    "chars": 863,
    "preview": "export async function up({ context: { queryInterface, Sequelize } }) {\n    await queryInterface.createTable('publish', {"
  },
  {
    "path": "src/modules/repository/implementation/sequelize/migrations/20220620100005-create-publish-response.js",
    "chars": 1070,
    "preview": "export async function up({ context: { queryInterface, Sequelize } }) {\n    await queryInterface.createTable('publish_res"
  },
  {
    "path": "src/modules/repository/implementation/sequelize/migrations/20220623125000-create-get.js",
    "chars": 855,
    "preview": "export async function up({ context: { queryInterface, Sequelize } }) {\n    await queryInterface.createTable('get', {\n   "
  }
]

// ... and 236 more files (download for full content)

About this extraction

This page contains the full source code of the OriginTrail/ot-node GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 436 files (1.5 MB), approximately 360.8k tokens, and a symbol index with 2051 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!