diff --git a/.github/actions/docker/action.yaml b/.github/actions/docker/action.yaml index 459a3fe6c4c..5501a609135 100644 --- a/.github/actions/docker/action.yaml +++ b/.github/actions/docker/action.yaml @@ -21,7 +21,7 @@ inputs: description: Push tags to registry or digest only default: "false" target: - description: "Target stage within Dockerfile: dapi, drive-abci, dashmate-helper, test-suite" + description: "Target stage within Dockerfile: drive-abci, rs-dapi, dashmate-helper, test-suite" platform: description: Platform to build for. i.e linux/amd64 or linux/arm64 required: true diff --git a/.github/actions/local-network/action.yaml b/.github/actions/local-network/action.yaml index 58e12f4c8a7..b3403903a30 100644 --- a/.github/actions/local-network/action.yaml +++ b/.github/actions/local-network/action.yaml @@ -82,8 +82,8 @@ runs: docker pull ${{ inputs.image_org }}/dashmate-helper:$SHA_TAG docker tag ${{ inputs.image_org }}/dashmate-helper:$SHA_TAG dashpay/dashmate-helper:$VERSION - # Replace Drive, DAPI, and RS-DAPI images with new org and tag in dashmate config - sed -i -E "s/dashpay\/(drive|dapi|rs-dapi):[^\"]+/${{ inputs.image_org }}\/\1:${SHA_TAG}/g" ${{ env.HOME }}/.dashmate/config.json + # Replace Drive and RS-DAPI images with new org and tag in dashmate config + sed -i -E "s/dashpay\/(drive|rs-dapi):[^\"]+/${{ inputs.image_org }}\/\1:${SHA_TAG}/g" ${{ env.HOME }}/.dashmate/config.json cat ${{ env.HOME }}/.dashmate/config.json diff --git a/.github/workflows/release-docker-image.yml b/.github/workflows/release-docker-image.yml index ec2afed138c..68c0af43984 100644 --- a/.github/workflows/release-docker-image.yml +++ b/.github/workflows/release-docker-image.yml @@ -7,7 +7,7 @@ on: required: true image_name: type: string - description: Image name. i.e. drive, dapi + description: Image name. i.e. drive, rs-dapi required: true image_org: type: string @@ -15,7 +15,7 @@ on: required: true target: type: string - description: Image target. i.e. drive-abci, dapi + description: Image target. i.e. drive-abci, rs-dapi required: true tag: type: string diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a9d1b82fe02..e9f3992c6b9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -179,18 +179,6 @@ jobs: cargo_profile: dev tag: ${{ inputs.tag || github.event.release.tag_name }}-debug - release-dapi-image: - name: Release DAPI image - if: ${{ !inputs.only_drive }} - secrets: inherit - uses: ./.github/workflows/release-docker-image.yml - with: - name: DAPI - image_org: dashpay - image_name: dapi - target: dapi - tag: ${{ inputs.tag || github.event.release.tag_name }} - release-rs-dapi-image: name: Release RS-DAPI image if: ${{ !inputs.only_drive }} diff --git a/.github/workflows/tests-dashmate.yml b/.github/workflows/tests-dashmate.yml index 576287ed166..3203a796897 100644 --- a/.github/workflows/tests-dashmate.yml +++ b/.github/workflows/tests-dashmate.yml @@ -62,11 +62,6 @@ jobs: docker pull $DOCKER_HUB_ORG/drive:$SHA_TAG docker tag $DOCKER_HUB_ORG/drive:$SHA_TAG $DRIVE_IMAGE_AND_VERSION - # DAPI - DAPI_IMAGE_AND_VERSION=$(yarn dashmate config get --config=local platform.dapi.api.docker.image) - docker pull $DOCKER_HUB_ORG/dapi:$SHA_TAG - docker tag $DOCKER_HUB_ORG/dapi:$SHA_TAG $DAPI_IMAGE_AND_VERSION - # RS-DAPI RS_DAPI_IMAGE_AND_VERSION=$(yarn dashmate config get --config=local platform.dapi.rsDapi.docker.image) docker pull $DOCKER_HUB_ORG/rs-dapi:$SHA_TAG diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 88f8da3453b..d4b67b8f5a0 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -78,9 +78,6 @@ jobs: - name: Drive image_name: drive target: drive-abci - - name: DAPI - image_name: dapi - target: dapi - name: RS-DAPI image_name: rs-dapi target: rs-dapi diff --git a/Cargo.lock b/Cargo.lock index 5f9dd978ffa..1d5f0bf615b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -889,7 +889,7 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "check-features" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "toml", ] @@ -1361,7 +1361,7 @@ dependencies = [ [[package]] name = "dapi-grpc" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "dapi-grpc-macros", "futures-core", @@ -1379,7 +1379,7 @@ dependencies = [ [[package]] name = "dapi-grpc-macros" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "dapi-grpc", "heck 0.5.0", @@ -1424,7 +1424,7 @@ dependencies = [ [[package]] name = "dash-context-provider" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "dpp", "drive", @@ -1458,7 +1458,7 @@ dependencies = [ [[package]] name = "dash-platform-balance-checker" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "anyhow", "clap", @@ -1474,7 +1474,7 @@ dependencies = [ [[package]] name = "dash-sdk" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "arc-swap", "assert_matches", @@ -1740,7 +1740,7 @@ dependencies = [ [[package]] name = "dashpay-contract" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "platform-value", "platform-version", @@ -1750,7 +1750,7 @@ dependencies = [ [[package]] name = "data-contracts" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "dashpay-contract", "dpns-contract", @@ -1897,7 +1897,7 @@ checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" [[package]] name = "dpns-contract" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "platform-value", "platform-version", @@ -1907,7 +1907,7 @@ dependencies = [ [[package]] name = "dpp" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "anyhow", "assert_matches", @@ -1963,7 +1963,7 @@ dependencies = [ [[package]] name = "drive" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "arc-swap", "assert_matches", @@ -2004,7 +2004,7 @@ dependencies = [ [[package]] name = "drive-abci" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "arc-swap", "assert_matches", @@ -2058,7 +2058,7 @@ dependencies = [ [[package]] name = "drive-proof-verifier" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "bincode 2.0.0-rc.3", "dapi-grpc", @@ -2312,7 +2312,7 @@ checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "feature-flags-contract" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "platform-value", "platform-version", @@ -3489,7 +3489,7 @@ dependencies = [ [[package]] name = "json-schema-compatibility-validator" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "assert_matches", "json-patch", @@ -3647,7 +3647,7 @@ dependencies = [ [[package]] name = "keyword-search-contract" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "base58", "platform-value", @@ -3799,7 +3799,7 @@ dependencies = [ [[package]] name = "masternode-reward-shares-contract" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "platform-value", "platform-version", @@ -4505,7 +4505,7 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "platform-serialization" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "bincode 2.0.0-rc.3", "platform-version", @@ -4513,7 +4513,7 @@ dependencies = [ [[package]] name = "platform-serialization-derive" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "proc-macro2", "quote", @@ -4523,7 +4523,7 @@ dependencies = [ [[package]] name = "platform-value" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "base64 0.22.1", "bincode 2.0.0-rc.3", @@ -4542,7 +4542,7 @@ dependencies = [ [[package]] name = "platform-value-convertible" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "quote", "syn 2.0.106", @@ -4550,7 +4550,7 @@ dependencies = [ [[package]] name = "platform-version" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "bincode 2.0.0-rc.3", "grovedb-version", @@ -4561,7 +4561,7 @@ dependencies = [ [[package]] name = "platform-versioning" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "proc-macro2", "quote", @@ -4570,7 +4570,7 @@ dependencies = [ [[package]] name = "platform-wallet" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "dashcore 0.40.0 (git+https://github.com/dashpay/rust-dashcore?tag=v0.40.0)", "dpp", @@ -5350,7 +5350,7 @@ dependencies = [ [[package]] name = "rs-dapi" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "async-trait", "axum 0.8.4", @@ -5399,7 +5399,7 @@ dependencies = [ [[package]] name = "rs-dapi-client" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "backon", "chrono", @@ -5426,7 +5426,7 @@ dependencies = [ [[package]] name = "rs-dash-event-bus" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "metrics", "tokio", @@ -5435,7 +5435,7 @@ dependencies = [ [[package]] name = "rs-sdk-ffi" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "bincode 2.0.0-rc.3", "bs58", @@ -5464,7 +5464,7 @@ dependencies = [ [[package]] name = "rs-sdk-trusted-context-provider" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "arc-swap", "async-trait", @@ -6155,7 +6155,7 @@ checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "simple-signer" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "base64 0.22.1", "bincode 2.0.0-rc.3", @@ -6252,7 +6252,7 @@ dependencies = [ [[package]] name = "strategy-tests" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "bincode 2.0.0-rc.3", "dpp", @@ -6649,7 +6649,7 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "token-history-contract" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "platform-value", "platform-version", @@ -7357,7 +7357,7 @@ dependencies = [ [[package]] name = "wallet-utils-contract" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "platform-value", "platform-version", @@ -7496,7 +7496,7 @@ dependencies = [ [[package]] name = "wasm-dpp" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "anyhow", "async-trait", @@ -7520,7 +7520,7 @@ dependencies = [ [[package]] name = "wasm-drive-verify" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "base64 0.22.1", "bincode 2.0.0-rc.3", @@ -7555,7 +7555,7 @@ dependencies = [ [[package]] name = "wasm-sdk" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "base64 0.22.1", "bip39", @@ -8106,7 +8106,7 @@ checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "withdrawals-contract" -version = "2.1.2" +version = "2.2.0-dev.1" dependencies = [ "num_enum 0.5.11", "platform-value", diff --git a/Cargo.toml b/Cargo.toml index b567fa36245..e820bd61810 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -44,5 +44,5 @@ members = [ [workspace.package] -version = "2.1.2" +version = "2.2.0-dev.1" rust-version = "1.89" diff --git a/Dockerfile b/Dockerfile index d08c0d28cb9..591c26cd12e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ # - deps - all deps, including wasm-bindgen-cli; built on top of either deps-base or deps-sccache # - build-planner - image used to prepare build plan for rs-drive-abci # - build-* - actual build process of given image -# - drive-abci, dashmate-helper, test-suite, dapi - final images +# - drive-abci, dashmate-helper, test-suite, rs-dapi - final images # # The following build arguments can be provided using --build-arg: # - CARGO_BUILD_PROFILE - set to `release` to build final binary, without debugging information @@ -740,44 +740,6 @@ EXPOSE 2500 2501 2510 USER node ENTRYPOINT ["/platform/packages/platform-test-suite/bin/test.sh"] -# -# STAGE: DAPI BUILD -# -FROM build-js AS build-dapi - -COPY packages/dapi packages/dapi - -# Install Test Suite specific dependencies using previous -# node_modules directory to reuse built binaries -RUN yarn workspaces focus --production @dashevo/dapi - -# -# STAGE: FINAL DAPI IMAGE -# -FROM node:20-alpine${ALPINE_VERSION} AS dapi - -LABEL maintainer="Dash Developers " -LABEL description="DAPI Node.JS" - -# Install ZMQ shared library -RUN apk add --no-cache zeromq-dev - -WORKDIR /platform/packages/dapi - -# TODO: Do one COPY with --parents -COPY --from=build-dapi /platform/.yarn /platform/.yarn -COPY --from=build-dapi /platform/package.json /platform/yarn.lock /platform/.yarnrc.yml /platform/.pnp* /platform/ -# List of required dependencies. Based on: -# yarn run ultra --info --filter '@dashevo/dapi' | sed -E 's/.*@dashevo\/(.*)/COPY --from=build-dapi \/platform\/packages\/\1 \/platform\/packages\/\1/' -COPY --from=build-dapi /platform/packages/dapi /platform/packages/dapi -COPY --from=build-dapi /platform/packages/dapi-grpc /platform/packages/dapi-grpc -COPY --from=build-dapi /platform/packages/js-grpc-common /platform/packages/js-grpc-common -COPY --from=build-dapi /platform/packages/wasm-dpp /platform/packages/wasm-dpp -COPY --from=build-dapi /platform/packages/token-history-contract /platform/packages/token-history-contract -COPY --from=build-dapi /platform/packages/keyword-search-contract /platform/packages/keyword-search-contract - -RUN cp /platform/packages/dapi/.env.example /platform/packages/dapi/.env - EXPOSE 2500 2501 2510 USER node diff --git a/package.json b/package.json index 496129fb392..1335d96eed9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/platform", - "version": "2.1.2", + "version": "2.2.0-dev.1", "private": true, "scripts": { "setup": "yarn install && yarn run build && yarn run configure", diff --git a/packages/bench-suite/package.json b/packages/bench-suite/package.json index f485fb990a0..5f7a07893fc 100644 --- a/packages/bench-suite/package.json +++ b/packages/bench-suite/package.json @@ -1,7 +1,7 @@ { "name": "@dashevo/bench-suite", "private": true, - "version": "2.1.2", + "version": "2.2.0-dev.1", "description": "Dash Platform benchmark tool", "scripts": { "bench": "node ./bin/bench.js", diff --git a/packages/dapi-grpc/package.json b/packages/dapi-grpc/package.json index c6c2a5fc894..06fb0cd4812 100644 --- a/packages/dapi-grpc/package.json +++ b/packages/dapi-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/dapi-grpc", - "version": "2.1.2", + "version": "2.2.0-dev.1", "description": "DAPI GRPC definition file and generated clients", "browser": "browser.js", "main": "node.js", diff --git a/packages/dapi/package.json b/packages/dapi/package.json index 358be8f0f43..417f0a6f67d 100644 --- a/packages/dapi/package.json +++ b/packages/dapi/package.json @@ -1,7 +1,7 @@ { "name": "@dashevo/dapi", "private": true, - "version": "2.1.2", + "version": "2.2.0-dev.1", "description": "A decentralized API for the Dash network", "scripts": { "api": "node scripts/api.js", diff --git a/packages/dash-spv/package.json b/packages/dash-spv/package.json index 218a3310833..3fe29dfdbdc 100644 --- a/packages/dash-spv/package.json +++ b/packages/dash-spv/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/dash-spv", - "version": "3.1.2", + "version": "3.2.0-dev.1", "description": "Repository containing SPV functions used by @dashevo", "main": "index.js", "scripts": { diff --git a/packages/dashmate/configs/defaults/getBaseConfigFactory.js b/packages/dashmate/configs/defaults/getBaseConfigFactory.js index a385e8b31f0..f8ae0e710b0 100644 --- a/packages/dashmate/configs/defaults/getBaseConfigFactory.js +++ b/packages/dashmate/configs/defaults/getBaseConfigFactory.js @@ -160,10 +160,7 @@ export default function getBaseConfigFactory() { driveGrpc: { maxRequests: 100, }, - dapiApi: { - maxRequests: 100, - }, - dapiCoreStreams: { + rsDapi: { maxRequests: 100, }, dapiJsonRpc: { @@ -230,27 +227,6 @@ export default function getBaseConfigFactory() { }, }, dapi: { - // Controls whether to use the deprecated JS DAPI stack - // If enabled = true -> use old DAPI (JS) - // If enabled = false -> use rs-dapi (Rust) [default] - deprecated: { - enabled: false, - }, - api: { - docker: { - image: `dashpay/dapi:${dockerImageVersion}`, - deploy: { - replicas: 1, - }, - build: { - enabled: false, - context: path.join(PACKAGE_ROOT_DIR, '..', '..'), - dockerFile: path.join(PACKAGE_ROOT_DIR, '..', '..', 'Dockerfile'), - target: 'dapi', - }, - }, - waitForStResultTimeout: 120000, - }, rsDapi: { docker: { image: `dashpay/rs-dapi:${dockerImageVersion}`, @@ -275,6 +251,7 @@ export default function getBaseConfigFactory() { accessLogPath: null, accessLogFormat: 'combined', }, + waitForStResultTimeout: 120000, }, }, drive: { diff --git a/packages/dashmate/configs/getConfigFileMigrationsFactory.js b/packages/dashmate/configs/getConfigFileMigrationsFactory.js index 735eacb86a4..b1d423cc364 100644 --- a/packages/dashmate/configs/getConfigFileMigrationsFactory.js +++ b/packages/dashmate/configs/getConfigFileMigrationsFactory.js @@ -70,7 +70,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) options.platform.drive.abci.docker.image = base.get('platform.drive.abci.docker.image'); - options.platform.dapi.api.docker.image = base.get('platform.dapi.api.docker.image'); + if (options.platform?.dapi?.api && base.has('platform.dapi.api.docker.image')) { + options.platform.dapi.api.docker.image = base.get('platform.dapi.api.docker.image'); + } options.platform.gateway.docker.image = base.get('platform.gateway.docker.image'); }); @@ -123,7 +125,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) .forEach(([, options]) => { options.platform.gateway.docker = base.get('platform.gateway.docker'); - options.platform.dapi.api.docker.build = base.get('platform.dapi.api.docker.build'); + if (options.platform?.dapi?.api && base.has('platform.dapi.api.docker.build')) { + options.platform.dapi.api.docker.build = base.get('platform.dapi.api.docker.build'); + } options.platform.drive.abci.docker.build = base.get('platform.drive.abci.docker.build'); @@ -182,7 +186,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) if (options.network !== NETWORK_MAINNET) { options.core.docker.image = base.get('core.docker.image'); - options.platform.dapi.api.docker.image = base.get('platform.dapi.api.docker.image'); + if (options.platform?.dapi?.api && base.has('platform.dapi.api.docker.image')) { + options.platform.dapi.api.docker.image = base.get('platform.dapi.api.docker.image'); + } options.platform.drive.abci.docker.image = base.get('platform.drive.abci.docker.image'); options.platform.drive.tenderdash.docker.image = base.get('platform.drive.tenderdash.docker.image'); } @@ -267,7 +273,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) options.platform.drive.abci.epochTime = testnet.get('platform.drive.abci.epochTime'); } options.platform.drive.abci.docker.image = base.get('platform.drive.abci.docker.image'); - options.platform.dapi.api.docker.image = base.get('platform.dapi.api.docker.image'); + if (options.platform?.dapi?.api && base.has('platform.dapi.api.docker.image')) { + options.platform.dapi.api.docker.image = base.get('platform.dapi.api.docker.image'); + } }); return configFile; @@ -442,7 +450,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) '0.25.22': (configFile) => { Object.entries(configFile.configs) .forEach(([, options]) => { - options.platform.dapi.api.docker.deploy = base.get('platform.dapi.api.docker.deploy'); + if (options.platform?.dapi?.api && base.has('platform.dapi.api.docker.deploy')) { + options.platform.dapi.api.docker.deploy = base.get('platform.dapi.api.docker.deploy'); + } }); return configFile; @@ -505,7 +515,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) options.platform.drive.tenderdash.genesis = genesis[name]; } - options.platform.dapi.api.docker.deploy = base.get('platform.dapi.api.docker.deploy'); + if (options.platform?.dapi?.api && base.has('platform.dapi.api.docker.deploy')) { + options.platform.dapi.api.docker.deploy = base.get('platform.dapi.api.docker.deploy'); + } let baseConfigName = name; if (options.group !== null && defaultConfigs.has(options.group)) { @@ -820,7 +832,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) .forEach(([, options]) => { options.core.indexes = []; options.platform.drive.abci.docker.image = 'dashpay/drive:1'; - options.platform.dapi.api.docker.image = 'dashpay/dapi:1'; + if (options.platform?.dapi?.api) { + options.platform.dapi.api.docker.image = 'dashpay/dapi:1'; + } }); return configFile; }, @@ -868,10 +882,12 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) } options.platform.drive.abci.docker.image = 'dashpay/drive:1-dev'; - options.platform.dapi.api.docker.image = 'dashpay/dapi:1-dev'; + if (options.platform?.dapi?.api) { + options.platform.dapi.api.docker.image = 'dashpay/dapi:1-dev'; + options.platform.dapi.api.waitForStResultTimeout = 120000; + } options.platform.gateway.listeners.dapiAndDrive.waitForStResultTimeout = '125s'; - options.platform.dapi.api.waitForStResultTimeout = 120000; options.platform.drive.tenderdash.p2p.maxConnections = 64; options.platform.drive.tenderdash.p2p.maxOutgoingConnections = 30; @@ -889,7 +905,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) Object.entries(configFile.configs) .forEach(([name, options]) => { options.platform.drive.abci.docker.image = 'dashpay/drive:1'; - options.platform.dapi.api.docker.image = 'dashpay/dapi:1'; + if (options.platform?.dapi?.api) { + options.platform.dapi.api.docker.image = 'dashpay/dapi:1'; + } if (options.network === NETWORK_TESTNET) { options.platform.drive.abci.proposer = { @@ -944,7 +962,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) Object.entries(configFile.configs) .forEach(([, options]) => { options.platform.drive.abci.docker.image = 'dashpay/drive:1-dev'; - options.platform.dapi.api.docker.image = 'dashpay/dapi:1-dev'; + if (options.platform?.dapi?.api) { + options.platform.dapi.api.docker.image = 'dashpay/dapi:1-dev'; + } // Update core log settings options.core.log.filePath = null; @@ -985,7 +1005,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) .forEach(([, options]) => { options.platform.drive.tenderdash.docker.image = 'dashpay/tenderdash:1.3'; options.platform.drive.abci.docker.image = 'dashpay/drive:1'; - options.platform.dapi.api.docker.image = 'dashpay/dapi:1'; + if (options.platform?.dapi?.api) { + options.platform.dapi.api.docker.image = 'dashpay/dapi:1'; + } }); return configFile; }, @@ -994,7 +1016,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) .forEach(([, options]) => { options.platform.drive.tenderdash.docker.image = 'dashpay/tenderdash:1.3'; options.platform.drive.abci.docker.image = 'dashpay/drive:1-dev'; - options.platform.dapi.api.docker.image = 'dashpay/dapi:1-dev'; + if (options.platform?.dapi?.api) { + options.platform.dapi.api.docker.image = 'dashpay/dapi:1-dev'; + } }); return configFile; }, @@ -1015,7 +1039,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) Object.entries(configFile.configs) .forEach(([, options]) => { options.platform.drive.abci.docker.image = 'dashpay/drive:1'; - options.platform.dapi.api.docker.image = 'dashpay/dapi:1'; + if (options.platform?.dapi?.api) { + options.platform.dapi.api.docker.image = 'dashpay/dapi:1'; + } }); return configFile; }, @@ -1036,7 +1062,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) Object.entries(configFile.configs) .forEach(([, options]) => { options.platform.drive.abci.docker.image = 'dashpay/drive:1-dev'; - options.platform.dapi.api.docker.image = 'dashpay/dapi:1-dev'; + if (options.platform?.dapi?.api) { + options.platform.dapi.api.docker.image = 'dashpay/dapi:1-dev'; + } }); return configFile; }, @@ -1044,7 +1072,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) Object.entries(configFile.configs) .forEach(([, options]) => { options.platform.drive.abci.docker.image = 'dashpay/drive:1'; - options.platform.dapi.api.docker.image = 'dashpay/dapi:1'; + if (options.platform?.dapi?.api) { + options.platform.dapi.api.docker.image = 'dashpay/dapi:1'; + } }); return configFile; }, @@ -1062,7 +1092,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) delete options.core.miner.mediantime; options.platform.drive.abci.docker.image = 'dashpay/drive:1'; - options.platform.dapi.api.docker.image = 'dashpay/dapi:1'; + if (options.platform?.dapi?.api) { + options.platform.dapi.api.docker.image = 'dashpay/dapi:1'; + } }); return configFile; }, @@ -1072,7 +1104,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) delete options.core.miner.mediantime; options.platform.drive.abci.docker.image = 'dashpay/drive:2-dev'; - options.platform.dapi.api.docker.image = 'dashpay/dapi:2-dev'; + if (options.platform?.dapi?.api) { + options.platform.dapi.api.docker.image = 'dashpay/dapi:2-dev'; + } }); return configFile; }, @@ -1082,7 +1116,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) delete options.core.miner.mediantime; options.platform.drive.abci.docker.image = 'dashpay/drive:2-rc'; - options.platform.dapi.api.docker.image = 'dashpay/dapi:2-rc'; + if (options.platform?.dapi?.api) { + options.platform.dapi.api.docker.image = 'dashpay/dapi:2-rc'; + } }); return configFile; }, @@ -1092,7 +1128,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) delete options.core.miner.mediantime; options.platform.drive.abci.docker.image = 'dashpay/drive:2'; - options.platform.dapi.api.docker.image = 'dashpay/dapi:2'; + if (options.platform?.dapi?.api) { + options.platform.dapi.api.docker.image = 'dashpay/dapi:2'; + } }); return configFile; }, @@ -1114,7 +1152,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) } options.platform.drive.abci.docker.image = 'dashpay/drive:2-dev'; - options.platform.dapi.api.docker.image = 'dashpay/dapi:2-dev'; + if (options.platform?.dapi?.api) { + options.platform.dapi.api.docker.image = 'dashpay/dapi:2-dev'; + } options.platform.drive.tenderdash.docker.image = 'dashpay/tenderdash:1-dev'; }); return configFile; @@ -1124,12 +1164,6 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) .forEach(([name, options]) => { const defaultConfig = getDefaultConfigByNameOrGroup(name, options.group); - if (!options.platform.dapi.deprecated) { - options.platform.dapi.deprecated = defaultConfig.get('platform.dapi.deprecated'); - } else if (typeof options.platform.dapi.deprecated.enabled === 'undefined') { - options.platform.dapi.deprecated.enabled = defaultConfig.get('platform.dapi.deprecated.enabled'); - } - if (!options.platform.dapi.rsDapi) { options.platform.dapi.rsDapi = lodash.cloneDeep(defaultConfig.get('platform.dapi.rsDapi')); return; @@ -1184,8 +1218,10 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) .forEach(([name, options]) => { const defaultConfig = getDefaultConfigByNameOrGroup(name, options.group); - options.platform.dapi.api.docker.image = defaultConfig - .get('platform.dapi.api.docker.image'); + if (options.platform?.dapi?.api && defaultConfig.has('platform.dapi.api.docker.image')) { + options.platform.dapi.api.docker.image = defaultConfig + .get('platform.dapi.api.docker.image'); + } options.platform.drive.abci.docker.image = defaultConfig .get('platform.drive.abci.docker.image'); @@ -1209,7 +1245,9 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) Object.entries(configFile.configs) .forEach(([, options]) => { options.platform.drive.abci.docker.image = 'dashpay/drive:2-rc'; - options.platform.dapi.api.docker.image = 'dashpay/dapi:2-rc'; + if (options.platform?.dapi?.api) { + options.platform.dapi.api.docker.image = 'dashpay/dapi:2-rc'; + } options.platform.dapi.rsDapi.docker.image = 'dashpay/rs-dapi:2-rc'; options.platform.drive.tenderdash.docker.image = 'dashpay/tenderdash:1.5'; }); @@ -1220,13 +1258,15 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) Object.entries(configFile.configs) .forEach(([, options]) => { options.platform.drive.abci.docker.image = 'dashpay/drive:2'; - options.platform.dapi.api.docker.image = 'dashpay/dapi:2'; + if (options.platform?.dapi?.api) { + options.platform.dapi.api.docker.image = 'dashpay/dapi:2'; + } options.platform.dapi.rsDapi.docker.image = 'dashpay/rs-dapi:2'; }); return configFile; }, - '2.2.0-dev.1': (configFile) => { + '2.2.0-dev.0': (configFile) => { Object.entries(configFile.configs) .forEach(([name, options]) => { const defaultConfig = getDefaultConfigByNameOrGroup(name, options.group); @@ -1235,9 +1275,6 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) } const defaultMetrics = defaultConfig.get('platform.dapi.rsDapi.metrics'); - const defaultZmqPort = defaultConfig.get('core.zmq.port'); - const baseMetricsPort = base.get('platform.dapi.rsDapi.metrics.port'); - const baseZmqPort = base.get('core.zmq.port'); if (!options.platform.dapi.rsDapi.metrics) { options.platform.dapi.rsDapi.metrics = lodash.cloneDeep(defaultMetrics); @@ -1261,27 +1298,95 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) options.platform.dapi.rsDapi.metrics.port = defaultMetrics.port; } - const targetMetricsPort = Number(defaultMetrics.port); - const targetZmqPort = Number(defaultZmqPort); const configuredMetricsPort = Number(options.platform.dapi.rsDapi.metrics.port); const configuredZmqPort = Number(options.core.zmq.port); - const baseMetricsPortNumber = Number(baseMetricsPort); - const baseZmqPortNumber = Number(baseZmqPort); - - if ( - !Number.isNaN(targetMetricsPort) - && targetMetricsPort !== configuredMetricsPort - && configuredMetricsPort === baseMetricsPortNumber - ) { - options.platform.dapi.rsDapi.metrics.port = targetMetricsPort; - } - - if ( - !Number.isNaN(targetZmqPort) - && targetZmqPort !== configuredZmqPort - && (configuredZmqPort === baseZmqPortNumber || configuredZmqPort === 29998) - ) { - options.core.zmq.port = targetZmqPort; + const isLocal = options.network === NETWORK_LOCAL || name === 'local'; + const isTestnet = options.network === NETWORK_TESTNET || name === 'testnet'; + + if (isLocal && configuredMetricsPort === 9091) { + options.platform.dapi.rsDapi.metrics.port = 29091; + } else if (isTestnet && configuredMetricsPort === 9091) { + options.platform.dapi.rsDapi.metrics.port = 19091; + } + + if (isLocal && configuredZmqPort === 29998) { + options.core.zmq.port = 49998; + } else if (isTestnet && configuredZmqPort === 29998) { + options.core.zmq.port = 39998; + } + }); + + return configFile; + }, + '2.2.0-dev.1': (configFile) => { + Object.entries(configFile.configs) + .forEach(([name, options]) => { + const defaultConfig = getDefaultConfigByNameOrGroup(name, options.group); + + if (options.platform?.dapi?.deprecated) { + delete options.platform.dapi.deprecated; + } + + if (options.platform?.gateway?.upstreams) { + const { upstreams } = options.platform.gateway; + const defaultUpstreams = defaultConfig.get('platform.gateway.upstreams'); + + if (!upstreams.rsDapi) { + const { dapiApi, dapiCoreStreams } = upstreams; + const dapiApiMax = dapiApi?.maxRequests; + const dapiCoreStreamsMax = dapiCoreStreams?.maxRequests; + + const candidates = [ + typeof dapiApiMax === 'number' ? dapiApiMax : null, + typeof dapiCoreStreamsMax === 'number' ? dapiCoreStreamsMax : null, + ].filter((value) => value !== null); + + if (candidates.length > 0) { + upstreams.rsDapi = { + maxRequests: Math.max(...candidates), + }; + } else { + upstreams.rsDapi = lodash.cloneDeep(defaultUpstreams.rsDapi); + } + } + + delete upstreams.dapiApi; + delete upstreams.dapiCoreStreams; + } + + if (!options.platform?.dapi) { + return; + } + + if (!options.platform.dapi.rsDapi) { + options.platform.dapi.rsDapi = lodash.cloneDeep(defaultConfig.get('platform.dapi.rsDapi')); + } + + const { rsDapi } = options.platform.dapi; + + if (options.platform.dapi.api) { + const { waitForStResultTimeout } = options.platform.dapi.api; + + if (typeof waitForStResultTimeout === 'number' + && typeof rsDapi.waitForStResultTimeout === 'undefined') { + rsDapi.waitForStResultTimeout = waitForStResultTimeout; + } + + delete options.platform.dapi.api; + } + + if (typeof rsDapi.waitForStResultTimeout === 'undefined') { + rsDapi.waitForStResultTimeout = defaultConfig.get('platform.dapi.rsDapi.waitForStResultTimeout'); + } + + if (options.platform?.drive?.abci?.docker + && defaultConfig.has('platform.drive.abci.docker.image')) { + options.platform.drive.abci.docker.image = defaultConfig.get('platform.drive.abci.docker.image'); + } + + if (options.platform.dapi?.rsDapi?.docker + && defaultConfig.has('platform.dapi.rsDapi.docker.image')) { + options.platform.dapi.rsDapi.docker.image = defaultConfig.get('platform.dapi.rsDapi.docker.image'); } }); diff --git a/packages/dashmate/docker-compose.build.dapi_api.yml b/packages/dashmate/docker-compose.build.dapi_api.yml deleted file mode 100644 index 3403b6ac3c0..00000000000 --- a/packages/dashmate/docker-compose.build.dapi_api.yml +++ /dev/null @@ -1,22 +0,0 @@ ---- - -services: - dapi_api: - build: - context: ${PLATFORM_DAPI_API_DOCKER_BUILD_CONTEXT:?err} - dockerfile: ${PLATFORM_DAPI_API_DOCKER_BUILD_DOCKER_FILE:?err} - target: ${PLATFORM_DAPI_API_DOCKER_BUILD_TARGET} - args: - RUSTC_WRAPPER: ${RUSTC_WRAPPER} - SCCACHE_MEMCACHED: ${SCCACHE_MEMCACHED} - SCCACHE_GHA_ENABLED: ${SCCACHE_GHA_ENABLED} - ACTIONS_CACHE_URL: ${ACTIONS_CACHE_URL} - ACTIONS_RUNTIME_TOKEN: ${ACTIONS_RUNTIME_TOKEN} - SCCACHE_BUCKET: ${SCCACHE_BUCKET} - SCCACHE_REGION: ${SCCACHE_REGION} - SCCACHE_S3_KEY_PREFIX: ${SCCACHE_S3_KEY_PREFIX} - cache_from: - - ${CACHE_DAPI_API_FROM:-${PLATFORM_DAPI_API_DOCKER_IMAGE}} - cache_to: - - ${CACHE_DAPI_API_TO:-type=inline} - image: dapi:local diff --git a/packages/dashmate/docker-compose.build.dapi_core_streams.yml b/packages/dashmate/docker-compose.build.dapi_core_streams.yml deleted file mode 100644 index fa9bce52651..00000000000 --- a/packages/dashmate/docker-compose.build.dapi_core_streams.yml +++ /dev/null @@ -1,22 +0,0 @@ ---- - -services: - dapi_core_streams: - build: - context: ${PLATFORM_DAPI_API_DOCKER_BUILD_CONTEXT:?err} - dockerfile: ${PLATFORM_DAPI_API_DOCKER_BUILD_DOCKER_FILE:?err} - target: ${PLATFORM_DAPI_API_DOCKER_BUILD_TARGET} - args: - RUSTC_WRAPPER: ${RUSTC_WRAPPER} - SCCACHE_MEMCACHED: ${SCCACHE_MEMCACHED} - SCCACHE_GHA_ENABLED: ${SCCACHE_GHA_ENABLED} - ACTIONS_CACHE_URL: ${ACTIONS_CACHE_URL} - ACTIONS_RUNTIME_TOKEN: ${ACTIONS_RUNTIME_TOKEN} - SCCACHE_BUCKET: ${SCCACHE_BUCKET} - SCCACHE_REGION: ${SCCACHE_REGION} - SCCACHE_S3_KEY_PREFIX: ${SCCACHE_S3_KEY_PREFIX} - cache_from: - - ${CACHE_DAPI_API_FROM:-${PLATFORM_DAPI_API_DOCKER_IMAGE}} - cache_to: - - ${CACHE_DAPI_API_TO:-type=inline} - image: dapi:local diff --git a/packages/dashmate/docker-compose.yml b/packages/dashmate/docker-compose.yml index 5ca9175d830..9346e398257 100644 --- a/packages/dashmate/docker-compose.yml +++ b/packages/dashmate/docker-compose.yml @@ -127,71 +127,7 @@ services: profiles: - platform - dapi_api: - image: ${PLATFORM_DAPI_API_DOCKER_IMAGE:?err} - labels: - org.dashmate.service.title: "DAPI API" - restart: unless-stopped - logging: *default-logging - deploy: - mode: replicated - replicas: ${PLATFORM_DAPI_API_DOCKER_DEPLOY_REPLICAS:-1} - depends_on: - - drive_tenderdash - environment: - - API_JSON_RPC_PORT=3004 - - API_GRPC_PORT=3005 - - DASHCORE_RPC_HOST=core - - DASHCORE_RPC_PORT=${CORE_RPC_PORT:?err} - - DASHCORE_RPC_USER=dapi - - DASHCORE_RPC_PASS=${CORE_RPC_USERS_DAPI_PASSWORD:?err} - - DASHCORE_ZMQ_HOST=core - - DASHCORE_ZMQ_PORT=${CORE_ZMQ_PORT:?err} - - NETWORK=${NETWORK:?err} - - TENDERMINT_RPC_HOST=drive_tenderdash - - TENDERMINT_RPC_PORT=${PLATFORM_DRIVE_TENDERDASH_RPC_PORT:?err} - - NODE_ENV=${ENVIRONMENT:?err} - - DRIVE_RPC_HOST=drive_abci - - DRIVE_RPC_PORT=26670 - - WAIT_FOR_ST_RESULT_TIMEOUT=${PLATFORM_DAPI_API_WAIT_FOR_ST_RESULT_TIMEOUT:?err} - command: yarn run api - stop_grace_period: 10s - expose: - - 3004 - - 3005 - profiles: - - platform-dapi-deprecated - - dapi_core_streams: - image: ${PLATFORM_DAPI_API_DOCKER_IMAGE:?err} - labels: - org.dashmate.service.title: "DAPI Transactions Filter Stream" - restart: unless-stopped - logging: *default-logging - deploy: - mode: replicated - replicas: ${PLATFORM_DAPI_API_DOCKER_DEPLOY_REPLICAS:-1} - environment: - - TX_FILTER_STREAM_GRPC_PORT=3006 - - DASHCORE_RPC_HOST=core - - DASHCORE_RPC_PORT=${CORE_RPC_PORT:?err} - - DASHCORE_RPC_USER=dapi - - DASHCORE_RPC_PASS=${CORE_RPC_USERS_DAPI_PASSWORD:?err} - - DASHCORE_ZMQ_HOST=core - - DASHCORE_ZMQ_PORT=${CORE_ZMQ_PORT:?err} - - NETWORK=${NETWORK:?err} - - TENDERMINT_RPC_HOST=drive_tenderdash - - TENDERMINT_RPC_PORT=26657 - - DRIVE_RPC_HOST=drive_abci - - DRIVE_RPC_PORT=26670 - expose: - - 3006 - command: yarn run core-streams - stop_grace_period: 10s - profiles: - - platform-dapi-deprecated - - # Uses existing configuration variables but deploys on different port (3010) + # rs-dapi service rs_dapi: image: ${PLATFORM_DAPI_RS_DAPI_DOCKER_IMAGE:?err} labels: @@ -199,17 +135,14 @@ services: restart: unless-stopped logging: *default-logging deploy: - replicas: ${PLATFORM_DAPI_API_DOCKER_DEPLOY_REPLICAS:-1} + replicas: ${PLATFORM_DAPI_RS_DAPI_DOCKER_DEPLOY_REPLICAS:-1} depends_on: - drive_tenderdash environment: - # Use same configuration as JS DAPI but different gRPC port for parallel deployment - DAPI_GRPC_SERVER_PORT=3010 - DAPI_JSON_RPC_PORT=3009 - - DAPI_REST_GATEWAY_PORT=8080 - DAPI_METRICS_PORT=${PLATFORM_DAPI_RS_DAPI_METRICS_PORT:?err} - DAPI_BIND_ADDRESS=0.0.0.0 - - DAPI_ENABLE_REST=false - DAPI_DRIVE_URI=http://drive_abci:26670 - DAPI_TENDERDASH_URI=http://drive_tenderdash:${PLATFORM_DRIVE_TENDERDASH_RPC_PORT:?err} - DAPI_TENDERDASH_WEBSOCKET_URI=ws://drive_tenderdash:${PLATFORM_DRIVE_TENDERDASH_RPC_PORT:?err}/websocket @@ -217,7 +150,7 @@ services: - DAPI_CORE_RPC_URL=http://core:${CORE_RPC_PORT:?err} - DAPI_CORE_RPC_USER=dapi - DAPI_CORE_RPC_PASS=${CORE_RPC_USERS_DAPI_PASSWORD:?err} - - DAPI_STATE_TRANSITION_WAIT_TIMEOUT=${PLATFORM_DAPI_API_WAIT_FOR_ST_RESULT_TIMEOUT:?err} + - DAPI_STATE_TRANSITION_WAIT_TIMEOUT=${PLATFORM_DAPI_RS_DAPI_WAIT_FOR_ST_RESULT_TIMEOUT:?err} - DAPI_LOGGING_LEVEL=${PLATFORM_DAPI_RS_DAPI_LOGS_LEVEL:-info} - DAPI_LOGGING_JSON_FORMAT=${PLATFORM_DAPI_RS_DAPI_LOGS_JSON_FORMAT:-false} - DAPI_LOGGING_ACCESS_LOG_PATH=${PLATFORM_DAPI_RS_DAPI_LOGS_ACCESS_LOG_PATH:-} @@ -230,7 +163,7 @@ services: - 3009 # JSON-RPC - 3010 # gRPC (different from current DAPI to avoid conflict) profiles: - - platform-dapi-rs + - platform gateway: image: ${PLATFORM_GATEWAY_DOCKER_IMAGE:?err} diff --git a/packages/dashmate/docs/config/dapi.md b/packages/dashmate/docs/config/dapi.md index 7c6a7d90fd4..0b0e01aa0f4 100644 --- a/packages/dashmate/docs/config/dapi.md +++ b/packages/dashmate/docs/config/dapi.md @@ -1,39 +1,6 @@ # DAPI Configuration -DAPI provides API services for Dash Platform, allowing external applications to interact with the platform. - -## Docker - -| Option | Description | Default | Example | -|--------|-------------|---------|-------------------------| -| `platform.dapi.api.docker.image` | Docker image for DAPI | `dashpay/dapi:${version}` | `dashpay/dapi:latest` | -| `platform.dapi.api.docker.build.enabled` | Enable custom build | `false` | `true` | -| `platform.dapi.api.docker.build.context` | Build context directory | `null` | `"/path/to/context"` | -| `platform.dapi.api.docker.build.dockerFile` | Path to Dockerfile | `null` | `"/path/to/Dockerfile"` | -| `platform.dapi.api.docker.build.target` | Target build stage in multi-stage builds | `null` | `"dapi"` | -| `platform.dapi.api.docker.deploy.replicas` | Number of DAPI replicas | `1` | `3` | - -The `docker.build` object allows for custom build settings: -```json -{ - "build": { - "enabled": true, - "context": "/path/to/build/context", - "dockerFile": "/path/to/Dockerfile", - "target": "dapi" - } -} -``` - -These settings allow you to build the DAPI API Docker image from source. If `enabled` is set to `true`, Dashmate will build the Docker image using the specified context directory and Dockerfile. - -## Other - -| Option | Description | Default | Example | -|--------|-------------|---------|---------| -| `platform.dapi.api.waitForStResultTimeout` | Timeout for state transitions (ms) | `120000` | `240000` | - -This timeout setting controls how long DAPI will wait for state transition results before returning a timeout error to the client. It is specified in milliseconds. +Dashmate runs the Rust implementation of DAPI (`rs-dapi`) to expose gRPC, gRPC-Web, JSON-RPC, and streaming endpoints for Dash Platform. ## rs-dapi (Rust) @@ -67,3 +34,11 @@ Dashmate offsets the default metrics port per preset (mainnet 9091, testnet 1909 | `platform.dapi.rsDapi.logs.jsonFormat` | Enable structured JSON application logs (`true`) or human-readable logs (`false`) | `false` | `true` | | `platform.dapi.rsDapi.logs.accessLogPath` | Absolute path for HTTP/gRPC access logs. Empty or `null` disables access logging | `null` | `"/var/log/rs-dapi/access.log"` | | `platform.dapi.rsDapi.logs.accessLogFormat` | Access log output format | `combined` | `json` | + +## Timeouts + +| Option | Description | Default | Example | +|--------|-------------|---------|---------| +| `platform.dapi.rsDapi.waitForStResultTimeout` | Timeout for state transition results (ms) | `120000` | `240000` | + +This timeout controls how long rs-dapi waits for Drive to report the outcome of a state transition before returning a timeout error to the client. diff --git a/packages/dashmate/docs/config/gateway.md b/packages/dashmate/docs/config/gateway.md index ef782969ed9..7588602a9d9 100644 --- a/packages/dashmate/docs/config/gateway.md +++ b/packages/dashmate/docs/config/gateway.md @@ -39,8 +39,7 @@ The upstreams configuration controls connections to backend services: | Option | Description | Default | Example | |--------|-------------|---------|---------| | `platform.gateway.upstreams.driveGrpc.maxRequests` | Maximum parallel requests to Drive gRPC | `100` | `200` | -| `platform.gateway.upstreams.dapiApi.maxRequests` | Maximum parallel requests to DAPI API | `100` | `200` | -| `platform.gateway.upstreams.dapiCoreStreams.maxRequests` | Maximum parallel requests to DAPI Core streams | `100` | `200` | +| `platform.gateway.upstreams.rsDapi.maxRequests` | Maximum parallel requests to rs-dapi gRPC | `100` | `200` | | `platform.gateway.upstreams.dapiJsonRpc.maxRequests` | Maximum parallel requests to DAPI JSON-RPC | `100` | `200` | ## Metrics diff --git a/packages/dashmate/docs/services/gateway.md b/packages/dashmate/docs/services/gateway.md index 499c18cc492..b017372cbf8 100644 --- a/packages/dashmate/docs/services/gateway.md +++ b/packages/dashmate/docs/services/gateway.md @@ -24,18 +24,18 @@ It uses Envoy, a high-performance proxy, to route HTTP requests to the appropria ┌───────────────────┬┴─────────────┐ │ │ │ │ │ │ Rate Limiter │ │ │ │ │ Redis Storage │ - ┌──────▼─────┐ ┌──────▼─────┐ ┌─────▼─────┐ └───────────────────┘ - │ │ │ │ │ │ - │ DAPI API │ │ DAPI Core │ │ Drive ABCI│ - │ │ │ Streams │ │ │ - └────────────┘ └────────────┘ └───────────┘ + ┌──────▼─────┐ ┌─────▼─────┐ └───────────────────┘ + │ │ │ │ + │ rs-dapi │ │ Drive ABCI│ + │ │ │ │ + └────────────┘ └───────────┘ ``` ## Overview The Gateway service performs several key functions: -1. **Request Routing**: Directs incoming API requests to the appropriate backend services (DAPI API, DAPI Core Streams, Drive gRPC) +1. **Request Routing**: Directs incoming API requests to the appropriate backend services (rs-dapi, Drive gRPC) 2. **Protocol Support**: Handles HTTP/1.1, HTTP/2, and gRPC-Web protocols 3. **Connection Management**: Controls connection timeouts, idle timeouts, and concurrent stream limits 4. **Load Protection**: Implements circuit breaking, rate limiting, and resource monitoring @@ -58,9 +58,8 @@ Listeners define how the Gateway accepts connections: Clusters define the backend services the Gateway connects to: -- **dapi_api**: Handles general DAPI requests -- **dapi_core_streams**: Handles streaming Core endpoints -- **dapi_json_rpc**: Handles JSON-RPC requests +- **rs_dapi**: Handles gRPC/gRPC-Web and streaming endpoints +- **rs_dapi_json_rpc**: Handles JSON-RPC requests - **drive_grpc**: Handles Platform requests - **ratelimit_service**: Optional service for rate limiting - **admin**: Internal administrative interface @@ -69,11 +68,12 @@ Clusters define the backend services the Gateway connects to: The Gateway routes requests to different backend services based on URL path: -- Core streaming endpoints (`/org.dash.platform.dapi.v0.Core/subscribeTo*`): routed to `dapi_core_streams` -- Other Core endpoints (`/org.dash.platform.dapi.v0.Core*`): routed to `dapi_api` -- Platform waitForStateTransitionResult (`/org.dash.platform.dapi.v0.Platform/waitForStateTransitionResult`): routed to `dapi_api` with extended timeout -- Platform endpoints (`/org.dash.platform.dapi.v0.Platform*`): routed to `drive_grpc` -- JSON-RPC endpoints (`/`): routed to `dapi_json_rpc` +- Core streaming endpoints (`/org.dash.platform.dapi.v0.Core/subscribeTo*`): routed to `rs_dapi` +- Other Core endpoints (`/org.dash.platform.dapi.v0.Core*`): routed to `rs_dapi` +- Platform streaming endpoints (`/org.dash.platform.dapi.v0.Platform/subscribePlatformEvents`): routed to `rs_dapi` with extended timeout +- Platform waitForStateTransitionResult (`/org.dash.platform.dapi.v0.Platform/waitForStateTransitionResult`): routed to `rs_dapi` with extended timeout +- Other Platform endpoints (`/org.dash.platform.dapi.v0.Platform*`): routed to `rs_dapi` +- JSON-RPC endpoints (`/`): routed to `rs_dapi_json_rpc` ## Configuration Options @@ -125,9 +125,8 @@ circuit_breakers: Each backend service has its own circuit breaker configuration with a default of 100 max requests. **Config options**: -- DAPI API: `platform.gateway.upstreams.dapiApi.maxRequests` -- DAPI Core Streams: `platform.gateway.upstreams.dapiCoreStreams.maxRequests` -- DAPI JSON-RPC: `platform.gateway.upstreams.dapiJsonRpc.maxRequests` +- rs-dapi gRPC: `platform.gateway.upstreams.rsDapi.maxRequests` +- rs-dapi JSON-RPC: `platform.gateway.upstreams.dapiJsonRpc.maxRequests` - Drive gRPC: `platform.gateway.upstreams.driveGrpc.maxRequests` ### Resource Monitoring and Overload Protection diff --git a/packages/dashmate/docs/services/platform.md b/packages/dashmate/docs/services/platform.md index d0d5e4e7ef1..5b260011f35 100644 --- a/packages/dashmate/docs/services/platform.md +++ b/packages/dashmate/docs/services/platform.md @@ -113,47 +113,30 @@ Tenderdash is the consensus engine that provides Byzantine Fault Tolerant (BFT) ## DAPI Services -### 5. DAPI API +### 5. rs-dapi (Rust) -**Service Name**: `dapi_api` +**Service Name**: `rs_dapi` -**Description**: The API service for Dash Platform that exposes JSON-RPC and gRPC interfaces. +**Description**: Rust implementation of DAPI that serves all Platform client traffic (gRPC, gRPC-Web, JSON-RPC, streaming, metrics). **Responsibilities**: -- Provide JSON-RPC API -- Provide gRPC API -- Connect clients to platform services - -**Communication**: -- Connects to Core via RPC -- Connects to Drive ABCI via gRPC -- Connects to Tenderdash via RPC -- Served to external clients via Gateway - -### 6. DAPI Core Streams - -**Service Name**: `dapi_core_streams` - -**Description**: Provides streaming services for Dash Platform transactions. - -**Responsibilities**: -- Stream blockchain events -- Filter transactions -- Provide real-time updates +- Provide JSON-RPC, gRPC, and gRPC-Web APIs +- Stream Core and Platform events +- Proxy client traffic to Drive ABCI, Tenderdash, and Core +- Expose health checks and Prometheus metrics **Communication**: - Connects to Core via RPC and ZMQ - Connects to Drive ABCI via gRPC -- Connects to Tenderdash via RPC -- Served to external clients via Gateway +- Connects to Tenderdash via RPC and WebSockets +- Served to external clients via the Gateway -**DAPI Exposed Ports and Configuration**: +**rs-dapi Ports and Configuration**: -| Service | Port Purpose | Default Value | Config Path | Default Host Binding | Host Config Path | -|---------------------------|----------------------|---------------|--------------------------------------------------|---------------------|-----------------| -| **DAPI API** | JSON-RPC | 3004 | (fixed internal) | (internal) | - | -| | gRPC | 3005 | (fixed internal) | (internal) | - | -| **DAPI Core Streams** | gRPC Streaming | 3006 | (fixed internal) | (internal) | - | -| **rs-dapi (Rust)** | Health + Metrics | 9091 (mainnet), 19091 (testnet), 29091 (local) | `platform.dapi.rsDapi.metrics.port` | 127.0.0.1 | `platform.dapi.rsDapi.metrics.host` | +| Service | Port Purpose | Default Value | Config Path | Default Host Binding | Host Config Path | +|----------------------|------------------|---------------|-------------------------------------------------|----------------------|------------------| +| **rs-dapi (Rust)** | JSON-RPC | 3009 | (fixed internal) | (internal) | - | +| | gRPC / gRPC-Web | 3010 | (fixed internal) | (internal) | - | +| | Metrics & Health | 9091 (mainnet), 19091 (testnet), 29091 (local)| `platform.dapi.rsDapi.metrics.port` | 127.0.0.1 | `platform.dapi.rsDapi.metrics.host` | The rs-dapi metrics server exposes health endpoints alongside Prometheus data on `/metrics` from the same port. Dashmate applies network-specific defaults (mainnet 9091, testnet 19091, local 29091) so multiple presets can coexist on a host without conflicts. diff --git a/packages/dashmate/docs/update.md b/packages/dashmate/docs/update.md index 257005d0d65..a0638ad1284 100644 --- a/packages/dashmate/docs/update.md +++ b/packages/dashmate/docs/update.md @@ -29,7 +29,7 @@ $ dashmate update ║ Core │ dashpay/dashd:19.1.0 │ up to date ║ ║ Drive ABCI │ dashpay/drive:0.24 │ updated ║ ║ Drive Tenderdash │ dashpay/tenderdash:0.11.2 │ up to date ║ -║ DAPI API │ dashpay/dapi:0.24 │ updated ║ +║ rs-dapi │ dashpay/rs-dapi:0.24 │ updated ║ ║ Gateway │ dashpay/envoy:0.24 │ updated ║ ║ Dashmate Helper │ dashpay/dashmate-helper:0.24 │ updated ║ ╚══════════════════╧══════════════════════════════╧════════════╝ @@ -39,8 +39,48 @@ $ dashmate start You can also use JSON format for programmatic access: ```bash -$ dashmate update --format=json -[{"name":"core","title":"Core","updated":false,"image":"dashpay/dashd:19.2.0"},{"name":"drive_abci","title":"Drive ABCI","pulled":false,"image":"dashpay/drive:0.24"},{"name":"drive_tenderdash","title":"Drive Tenderdash","pulled":true,"image":"dashpay/tenderdash:0.11.2"},{"name":"dapi_api","title":"DAPI API","pulled":false,"image":"dashpay/dapi:0.24"},{"name":"gateway","title":"Gateway","pulled":false,"image":"dashpay/envoy:0.24"},{"name":"dashmate_helper","title":"Dashmate Helper","pulled":false,"image":"dashpay/dashmate-helper:0.24"}] +$ dashmate update --format=json --config local_1 | jq +``` + +```json +[ + { + "name": "dashmate_helper", + "title": "Dashmate Helper", + "updated": "error", + "image": "dashpay/dashmate-helper:2.2.0-dev.1" + }, + { + "name": "core", + "title": "Core", + "updated": "up to date", + "image": "dashpay/dashd:22" + }, + { + "name": "drive_abci", + "title": "Drive ABCI", + "updated": "error", + "image": "drive:local" + }, + { + "name": "drive_tenderdash", + "title": "Drive Tenderdash", + "updated": "up to date", + "image": "dashpay/tenderdash:1.5" + }, + { + "name": "rs_dapi", + "title": "rs-dapi (Rust DAPI)", + "updated": "error", + "image": "rs-dapi:local" + }, + { + "name": "gateway", + "title": "Gateway", + "updated": "up to date", + "image": "dashpay/envoy:1.30.2-impr.1" + } +] ``` ## Major Updates with Platform Reset @@ -68,4 +108,4 @@ Before applying an upgrade to a local network, the network should be stopped and ## Notes on Compatibility -When upgrading between major versions, always check the release notes for any breaking changes or special upgrade instructions. \ No newline at end of file +When upgrading between major versions, always check the release notes for any breaking changes or special upgrade instructions. diff --git a/packages/dashmate/package.json b/packages/dashmate/package.json index 5a763051ee4..f29fd6b6a98 100644 --- a/packages/dashmate/package.json +++ b/packages/dashmate/package.json @@ -1,6 +1,6 @@ { "name": "dashmate", - "version": "2.1.2", + "version": "2.2.0-dev.1", "description": "Distribution package for Dash node installation", "scripts": { "lint": "eslint .", diff --git a/packages/dashmate/src/config/configJsonSchema.js b/packages/dashmate/src/config/configJsonSchema.js index 8c391cb9525..0b257184eb9 100644 --- a/packages/dashmate/src/config/configJsonSchema.js +++ b/packages/dashmate/src/config/configJsonSchema.js @@ -527,10 +527,7 @@ export default { required: ['maxRequests'], additionalProperties: false, }, - dapiApi: { - $ref: 'gatewayUpstream', - }, - dapiCoreStreams: { + rsDapi: { $ref: 'gatewayUpstream', }, dapiJsonRpc: { @@ -538,7 +535,7 @@ export default { }, }, additionalProperties: false, - required: ['driveGrpc', 'dapiApi', 'dapiCoreStreams', 'dapiJsonRpc'], + required: ['driveGrpc', 'rsDapi', 'dapiJsonRpc'], }, metrics: { $ref: '#/definitions/enabledHostPort', @@ -804,53 +801,6 @@ export default { dapi: { type: 'object', properties: { - deprecated: { - type: 'object', - properties: { - enabled: { - type: 'boolean', - }, - }, - required: ['enabled'], - additionalProperties: false, - }, - api: { - type: 'object', - properties: { - docker: { - type: 'object', - properties: { - image: { - type: 'string', - minLength: 1, - }, - deploy: { - type: 'object', - properties: { - replicas: { - type: 'integer', - minimum: 0, - }, - }, - additionalProperties: false, - required: ['replicas'], - }, - build: { - $ref: '#/definitions/dockerBuild', - }, - }, - required: ['image', 'build', 'deploy'], - additionalProperties: false, - }, - waitForStResultTimeout: { - type: 'integer', - minimum: 1, - description: 'How many millis to wait for state transition result before timeout', - }, - }, - required: ['docker', 'waitForStResultTimeout'], - additionalProperties: false, - }, rsDapi: { type: 'object', properties: { @@ -908,12 +858,17 @@ export default { required: ['level', 'jsonFormat', 'accessLogPath', 'accessLogFormat'], additionalProperties: false, }, + waitForStResultTimeout: { + type: 'integer', + minimum: 1, + description: 'How many millis to wait for state transition result before timeout', + }, }, - required: ['docker', 'metrics', 'logs'], + required: ['docker', 'metrics', 'logs', 'waitForStResultTimeout'], additionalProperties: false, }, }, - required: ['api', 'rsDapi'], + required: ['rsDapi'], additionalProperties: false, }, drive: { diff --git a/packages/dashmate/src/config/generateEnvsFactory.js b/packages/dashmate/src/config/generateEnvsFactory.js index 5da58368fec..50f88fb5753 100644 --- a/packages/dashmate/src/config/generateEnvsFactory.js +++ b/packages/dashmate/src/config/generateEnvsFactory.js @@ -41,10 +41,6 @@ export default function generateEnvsFactory(configFile, homeDir, getConfigProfil dockerComposeFiles.push('docker-compose.build.drive_abci.yml'); } - if (config.get('platform.dapi.api.docker.build.enabled')) { - dockerComposeFiles.push('docker-compose.build.dapi_api.yml'); - dockerComposeFiles.push('docker-compose.build.dapi_core_streams.yml'); - } if (config.get('platform.dapi.rsDapi.docker.build.enabled')) { dockerComposeFiles.push('docker-compose.build.rs-dapi.yml'); } diff --git a/packages/dashmate/src/config/getConfigProfilesFactory.js b/packages/dashmate/src/config/getConfigProfilesFactory.js index 655386979aa..dfb9928fa29 100644 --- a/packages/dashmate/src/config/getConfigProfilesFactory.js +++ b/packages/dashmate/src/config/getConfigProfilesFactory.js @@ -8,24 +8,13 @@ export default function getConfigProfilesFactory() { * @param {{ includeAll?: boolean }} [options] * @returns {string[]} */ - function getConfigProfiles(config, { includeAll = false } = {}) { + function getConfigProfiles(config) { const profiles = []; profiles.push('core'); if (config.get('platform.enable')) { profiles.push('platform'); - - const deprecatedEnabled = config.get('platform.dapi.deprecated.enabled'); - - if (includeAll) { - profiles.push('platform-dapi-deprecated'); - profiles.push('platform-dapi-rs'); - } else if (deprecatedEnabled) { - profiles.push('platform-dapi-deprecated'); - } else { - profiles.push('platform-dapi-rs'); - } } return Array.from(new Set(profiles)); diff --git a/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js index 23b460f0b31..a0b618272a4 100644 --- a/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js @@ -4,11 +4,6 @@ import { Observable } from 'rxjs'; import { NETWORK_LOCAL } from '../../constants.js'; import isServiceBuildRequired from '../../util/isServiceBuildRequired.js'; -const DAPI_PROFILE_SERVICES = { - 'platform-dapi-deprecated': ['dapi_api', 'dapi_core_streams'], - 'platform-dapi-rs': ['rs_dapi'], -}; - /** * * @param {DockerCompose} dockerCompose @@ -118,28 +113,23 @@ export default function startNodeTaskFactory( task: () => buildServicesTask(config), }, { - title: 'Remove inactive DAPI stack', + title: 'Remove legacy DAPI stack', enabled: () => config.get('platform.enable'), task: async () => { - const deprecatedEnabled = config.has('platform.dapi.deprecated.enabled') - ? config.get('platform.dapi.deprecated.enabled') - : false; - - const inactiveProfile = deprecatedEnabled - ? 'platform-dapi-rs' - : 'platform-dapi-deprecated'; - - const serviceNames = DAPI_PROFILE_SERVICES[inactiveProfile] ?? []; - - if (serviceNames.length === 0) { - return; + const legacyServiceNames = ['dapi_api', 'dapi_core_streams']; + + for (const serviceName of legacyServiceNames) { + try { + await dockerCompose.rm(config, { + serviceNames: [serviceName], + force: true, + }); + } catch (e) { + if (!/No such service/i.test(e.message)) { + throw e; + } + } } - - await dockerCompose.rm(config, { - serviceNames, - profiles: [inactiveProfile], - force: true, - }); }, }, { diff --git a/packages/dashmate/src/util/isServiceBuildRequired.js b/packages/dashmate/src/util/isServiceBuildRequired.js index 8ff858d8f00..5b44178cce8 100644 --- a/packages/dashmate/src/util/isServiceBuildRequired.js +++ b/packages/dashmate/src/util/isServiceBuildRequired.js @@ -8,7 +8,7 @@ export default function isServiceBuildRequired(config) { const isDashmateBuildRequired = config.get('dashmate.helper.docker.build.enabled'); const isDriveBuildRequired = config.get('platform.enable') && config.get('platform.drive.abci.docker.build.enabled'); - const isDapiBuildRequired = config.get('platform.enable') && config.get('platform.dapi.api.docker.build.enabled'); + const isDapiBuildRequired = config.get('platform.enable') && config.get('platform.dapi.rsDapi.docker.build.enabled'); return isDashmateBuildRequired || isDriveBuildRequired diff --git a/packages/dashmate/templates/platform/gateway/envoy.yaml.dot b/packages/dashmate/templates/platform/gateway/envoy.yaml.dot index e9ceb7953ec..bef1f4dcfce 100644 --- a/packages/dashmate/templates/platform/gateway/envoy.yaml.dot +++ b/packages/dashmate/templates/platform/gateway/envoy.yaml.dot @@ -1,4 +1,3 @@ -{{ useDeprecated = it.platform.dapi.deprecated && it.platform.dapi.deprecated.enabled; }} !ignore filters: &filters - name: envoy.http_connection_manager typed_config: @@ -112,91 +111,6 @@ - name: http_services domains: [ "*" ] routes: - {{? useDeprecated }} - # DAPI core streaming endpoints - - match: - prefix: "/org.dash.platform.dapi.v0.Core/subscribeTo" - route: - cluster: dapi_core_streams - idle_timeout: 300s - # Upstream response timeout - timeout: 600s - max_stream_duration: - # Entire stream/request timeout - max_stream_duration: 600s - grpc_timeout_header_max: 600s - # Other DAPI Core endpoints - - match: - prefix: "/org.dash.platform.dapi.v0.Core" - route: - cluster: dapi_api - # Upstream response timeout - timeout: 15s - # DAPI waitForStateTransitionResult endpoint with bigger timeout - - match: - path: "/org.dash.platform.dapi.v0.Platform/waitForStateTransitionResult" - route: - cluster: dapi_api - idle_timeout: {{= it.platform.gateway.listeners.dapiAndDrive.waitForStResultTimeout }} - # Upstream response timeout - timeout: {{= it.platform.gateway.listeners.dapiAndDrive.waitForStResultTimeout }} - max_stream_duration: - # Entire stream/request timeout - max_stream_duration: {{= it.platform.gateway.listeners.dapiAndDrive.waitForStResultTimeout }} - grpc_timeout_header_max: {{= it.platform.gateway.listeners.dapiAndDrive.waitForStResultTimeout }} - # DAPI getConsensusParams endpoint - - match: - path: "/org.dash.platform.dapi.v0.Platform/getConsensusParams" - route: - cluster: dapi_api - # Upstream response timeout - timeout: 10s - # DAPI broadcastStateTransition endpoint - - match: - path: "/org.dash.platform.dapi.v0.Platform/broadcastStateTransition" - route: - cluster: dapi_api - # Upstream response timeout - timeout: 10s - # DAPI broadcastStateTransition endpoint - - match: - path: "/org.dash.platform.dapi.v0.Platform/getStatus" - route: - cluster: dapi_api - # Upstream response timeout - timeout: 10s - # Drive gRPC endpoints - - match: - prefix: "/org.dash.platform.dapi.v0.Platform" - route: - cluster: drive_grpc - # Upstream response timeout - timeout: 10s - # Static responses of unsupported api versions - # core static response - - match: - safe_regex: - regex: "\/org\\.dash\\.platform\\.dapi\\.v[1-9]+\\." - response_headers_to_add: - - header: - key: "Content-Type" - value: "application/grpc-web+proto" - - header: - key: "grpc-status" - value: "12" - - header: - key: "grpc-message" - value: "Specified service version is not supported" - direct_response: - status: 204 - # JSON RPC endpoints - - match: - path: "/" - route: - cluster: dapi_json_rpc - # Upstream response timeout - timeout: 10s - {{??}} # Core streaming endpoints - match: prefix: "/org.dash.platform.dapi.v0.Core/subscribeTo" @@ -271,7 +185,6 @@ cluster: rs_dapi_json_rpc # Upstream response timeout timeout: 10s - {{?}} {{? it.platform.gateway.rateLimiter.enabled }} rate_limits: - actions: @@ -378,7 +291,7 @@ static_resources: thresholds: - priority: DEFAULT # The maximum number of parallel requests - max_requests: {{= it.platform.gateway.upstreams.dapiApi.maxRequests }} + max_requests: {{= it.platform.gateway.upstreams.rsDapi.maxRequests }} upstream_connection_options: tcp_keepalive: keepalive_probes: 3 @@ -394,74 +307,6 @@ static_resources: address: rs_dapi port_value: 3010 - # Depcreated DAPI - - name: dapi_api - type: STRICT_DNS - per_connection_buffer_limit_bytes: 32768 # 32 KiB - typed_extension_protocol_options: - envoy.extensions.upstreams.http.v3.HttpProtocolOptions: - "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions - explicit_http_config: - http2_protocol_options: - initial_stream_window_size: 65536 # 64 KiB - initial_connection_window_size: 1048576 # 1 MiB - circuit_breakers: - thresholds: - - priority: DEFAULT - # The maximum number of parallel requests - max_requests: {{= it.platform.gateway.upstreams.dapiApi.maxRequests }} - load_assignment: - cluster_name: dapi_api - endpoints: - - lb_endpoints: - - endpoint: - address: - socket_address: - address: dapi_api - port_value: 3005 - - name: dapi_core_streams - type: STRICT_DNS - per_connection_buffer_limit_bytes: 32768 # 32 KiB - typed_extension_protocol_options: - envoy.extensions.upstreams.http.v3.HttpProtocolOptions: - "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions - explicit_http_config: - http2_protocol_options: - initial_stream_window_size: 65536 # 64 KiB - initial_connection_window_size: 1048576 # 1 MiB - circuit_breakers: - thresholds: - - priority: DEFAULT - max_requests: {{= it.platform.gateway.upstreams.dapiCoreStreams.maxRequests }} - load_assignment: - cluster_name: dapi_core_streams - endpoints: - - lb_endpoints: - - endpoint: - address: - socket_address: - address: dapi_core_streams - port_value: 3006 - - name: dapi_json_rpc - type: STRICT_DNS - per_connection_buffer_limit_bytes: 32768 # 32 KiB - circuit_breakers: - thresholds: - - priority: DEFAULT - # The maximum number of parallel connections - max_connections: {{= it.platform.gateway.upstreams.dapiJsonRpc.maxRequests }} - # The maximum number of parallel requests - max_requests: {{= it.platform.gateway.upstreams.dapiJsonRpc.maxRequests }} - load_assignment: - cluster_name: dapi_json_rpc - endpoints: - - lb_endpoints: - - endpoint: - address: - socket_address: - address: dapi_api - port_value: 3004 - # rs-dapi JSON-RPC cluster - name: rs_dapi_json_rpc type: STRICT_DNS diff --git a/packages/dashmate/test/e2e/localNetwork.spec.js b/packages/dashmate/test/e2e/localNetwork.spec.js index 157debb5dd0..b45306c5613 100644 --- a/packages/dashmate/test/e2e/localNetwork.spec.js +++ b/packages/dashmate/test/e2e/localNetwork.spec.js @@ -45,7 +45,6 @@ describe('Local Network', function main() { if (process.env.DASHMATE_E2E_TESTS_SKIP_IMAGE_BUILD !== 'true') { localConfig.set('dashmate.helper.docker.build.enabled', true); localConfig.set('platform.drive.abci.docker.build.enabled', true); - localConfig.set('platform.dapi.api.docker.build.enabled', true); localConfig.set('platform.dapi.rsDapi.docker.build.enabled', true); } diff --git a/packages/dashmate/test/e2e/testnetEvonode.spec.js b/packages/dashmate/test/e2e/testnetEvonode.spec.js index 29aea34b1a2..fe998ac3428 100644 --- a/packages/dashmate/test/e2e/testnetEvonode.spec.js +++ b/packages/dashmate/test/e2e/testnetEvonode.spec.js @@ -87,7 +87,6 @@ describe('Testnet Evonode', function main() { if (process.env.DASHMATE_E2E_TESTS_SKIP_IMAGE_BUILD !== 'true') { config.set('dashmate.helper.docker.build.enabled', true); config.set('platform.drive.abci.docker.build.enabled', true); - config.set('platform.dapi.api.docker.build.enabled', true); config.set('platform.dapi.rsDapi.docker.build.enabled', true); } diff --git a/packages/dashmate/test/e2e/testnetFullnode.spec.js b/packages/dashmate/test/e2e/testnetFullnode.spec.js index 5ac3493429e..af35e14e398 100644 --- a/packages/dashmate/test/e2e/testnetFullnode.spec.js +++ b/packages/dashmate/test/e2e/testnetFullnode.spec.js @@ -84,7 +84,6 @@ describe('Testnet Fullnode', function main() { if (process.env.DASHMATE_E2E_TESTS_SKIP_IMAGE_BUILD !== 'true') { config.set('dashmate.helper.docker.build.enabled', true); config.set('platform.drive.abci.docker.build.enabled', true); - config.set('platform.dapi.api.docker.build.enabled', true); config.set('platform.dapi.rsDapi.docker.build.enabled', true); } diff --git a/packages/dashpay-contract/package.json b/packages/dashpay-contract/package.json index d0c354c1b2f..11a8e7528d3 100644 --- a/packages/dashpay-contract/package.json +++ b/packages/dashpay-contract/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/dashpay-contract", - "version": "2.1.2", + "version": "2.2.0-dev.1", "description": "Reference contract of the DashPay DPA on Dash Evolution", "scripts": { "lint": "eslint .", diff --git a/packages/dpns-contract/package.json b/packages/dpns-contract/package.json index 0cba3a54701..973ccb3ecbd 100644 --- a/packages/dpns-contract/package.json +++ b/packages/dpns-contract/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/dpns-contract", - "version": "2.1.2", + "version": "2.2.0-dev.1", "description": "A contract and helper scripts for DPNS DApp", "scripts": { "lint": "eslint .", diff --git a/packages/feature-flags-contract/package.json b/packages/feature-flags-contract/package.json index 894d215eb51..283b008ae08 100644 --- a/packages/feature-flags-contract/package.json +++ b/packages/feature-flags-contract/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/feature-flags-contract", - "version": "2.1.2", + "version": "2.2.0-dev.1", "description": "Data Contract to store Dash Platform feature flags", "scripts": { "build": "", diff --git a/packages/js-dapi-client/package.json b/packages/js-dapi-client/package.json index a919584bcad..3d4ec888dc9 100644 --- a/packages/js-dapi-client/package.json +++ b/packages/js-dapi-client/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/dapi-client", - "version": "2.1.2", + "version": "2.2.0-dev.1", "description": "Client library used to access Dash DAPI endpoints", "main": "lib/index.js", "contributors": [ diff --git a/packages/js-dash-sdk/package.json b/packages/js-dash-sdk/package.json index 5838da728d8..9ce26d17242 100644 --- a/packages/js-dash-sdk/package.json +++ b/packages/js-dash-sdk/package.json @@ -1,6 +1,6 @@ { "name": "dash", - "version": "5.1.2", + "version": "5.2.0-dev.1", "description": "Dash library for JavaScript/TypeScript ecosystem (Wallet, DAPI, Primitives, BLS, ...)", "main": "build/index.js", "unpkg": "dist/dash.min.js", diff --git a/packages/js-evo-sdk/package.json b/packages/js-evo-sdk/package.json index cb1813defee..3d267699957 100644 --- a/packages/js-evo-sdk/package.json +++ b/packages/js-evo-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/evo-sdk", - "version": "2.1.2", + "version": "2.2.0-dev.1", "type": "module", "main": "./dist/evo-sdk.module.js", "types": "./dist/sdk.d.ts", diff --git a/packages/js-grpc-common/package.json b/packages/js-grpc-common/package.json index 62b17da0d00..aa1016f7954 100644 --- a/packages/js-grpc-common/package.json +++ b/packages/js-grpc-common/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/grpc-common", - "version": "2.1.2", + "version": "2.2.0-dev.1", "description": "Common GRPC library", "main": "index.js", "scripts": { diff --git a/packages/keyword-search-contract/package.json b/packages/keyword-search-contract/package.json index 6d5f6e6d044..b77746e2719 100644 --- a/packages/keyword-search-contract/package.json +++ b/packages/keyword-search-contract/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/keyword-search-contract", - "version": "2.1.2", + "version": "2.2.0-dev.1", "description": "A contract that allows searching for contracts", "scripts": { "lint": "eslint .", diff --git a/packages/masternode-reward-shares-contract/package.json b/packages/masternode-reward-shares-contract/package.json index 559e5f87fc9..4f3cae29eef 100644 --- a/packages/masternode-reward-shares-contract/package.json +++ b/packages/masternode-reward-shares-contract/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/masternode-reward-shares-contract", - "version": "2.1.2", + "version": "2.2.0-dev.1", "description": "A contract and helper scripts for reward sharing", "scripts": { "lint": "eslint .", diff --git a/packages/platform-test-suite/package.json b/packages/platform-test-suite/package.json index c55aafdbbc1..f2f2dc5459c 100644 --- a/packages/platform-test-suite/package.json +++ b/packages/platform-test-suite/package.json @@ -1,7 +1,7 @@ { "name": "@dashevo/platform-test-suite", "private": true, - "version": "2.1.2", + "version": "2.2.0-dev.1", "description": "Dash Network end-to-end tests", "scripts": { "test": "yarn exec bin/test.sh", diff --git a/packages/token-history-contract/package.json b/packages/token-history-contract/package.json index e0de64d6c14..4c773408880 100644 --- a/packages/token-history-contract/package.json +++ b/packages/token-history-contract/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/token-history-contract", - "version": "2.1.2", + "version": "2.2.0-dev.1", "description": "The token history contract", "scripts": { "lint": "eslint .", diff --git a/packages/wallet-lib/package.json b/packages/wallet-lib/package.json index 1d51d6efd8f..7aa8cd8797e 100644 --- a/packages/wallet-lib/package.json +++ b/packages/wallet-lib/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/wallet-lib", - "version": "9.1.2", + "version": "9.2.0-dev.1", "description": "Light wallet library for Dash", "main": "src/index.js", "unpkg": "dist/wallet-lib.min.js", diff --git a/packages/wallet-utils-contract/package.json b/packages/wallet-utils-contract/package.json index 70b935882d0..f35494cf317 100644 --- a/packages/wallet-utils-contract/package.json +++ b/packages/wallet-utils-contract/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/wallet-utils-contract", - "version": "2.1.2", + "version": "2.2.0-dev.1", "description": "A contract and helper scripts for Wallet DApp", "scripts": { "lint": "eslint .", diff --git a/packages/wasm-dpp/package.json b/packages/wasm-dpp/package.json index 9d9ccba5d11..bc12a2eb91e 100644 --- a/packages/wasm-dpp/package.json +++ b/packages/wasm-dpp/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/wasm-dpp", - "version": "2.1.2", + "version": "2.2.0-dev.1", "description": "The JavaScript implementation of the Dash Platform Protocol", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/wasm-drive-verify/package.json b/packages/wasm-drive-verify/package.json index 4cebbcb255c..95bd4c48eaf 100644 --- a/packages/wasm-drive-verify/package.json +++ b/packages/wasm-drive-verify/package.json @@ -3,7 +3,7 @@ "collaborators": [ "Dash Core Group " ], - "version": "2.1.2", + "version": "2.2.0-dev.1", "license": "MIT", "description": "WASM bindings for Drive verify functions", "repository": { diff --git a/packages/wasm-sdk/package.json b/packages/wasm-sdk/package.json index 8c3bd9d33bc..240c98a60ab 100644 --- a/packages/wasm-sdk/package.json +++ b/packages/wasm-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/wasm-sdk", - "version": "2.1.2", + "version": "2.2.0-dev.1", "type": "module", "main": "./dist/sdk.js", "types": "./dist/sdk.d.ts", diff --git a/packages/withdrawals-contract/package.json b/packages/withdrawals-contract/package.json index 40b2ca89765..06541a8bc65 100644 --- a/packages/withdrawals-contract/package.json +++ b/packages/withdrawals-contract/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/withdrawals-contract", - "version": "2.1.2", + "version": "2.2.0-dev.1", "description": "Data Contract to manipulate and track withdrawals", "scripts": { "build": "", diff --git a/scripts/configure_dashmate.sh b/scripts/configure_dashmate.sh index 86156b47d1d..284b857ef33 100755 --- a/scripts/configure_dashmate.sh +++ b/scripts/configure_dashmate.sh @@ -14,7 +14,6 @@ ROOT_PATH=$(dirname "$DIR_PATH") #yarn dashmate config set --config=${CONFIG_NAME} docker.baseImage.build.enabled true #yarn dashmate config set --config=${CONFIG_NAME} docker.baseImage.build.target deps yarn dashmate config set --config=${CONFIG_NAME} platform.drive.abci.docker.build.enabled true -yarn dashmate config set --config=${CONFIG_NAME} platform.dapi.api.docker.build.enabled true yarn dashmate config set --config=${CONFIG_NAME} platform.dapi.rsDapi.docker.build.enabled true yarn dashmate config set --config=${CONFIG_NAME} dashmate.helper.docker.build.enabled true