Files
pezkuwichain d270504c9a fix: handle pruned RPC state in SubQuery node
Substrate nodes prune historical state by default (~256 blocks).
When SubQuery restarts and tries to fetch runtime version for old
blocks, it crashes with "State already discarded". This patch adds
a fallback to current runtime version when historical state is
unavailable, preventing crash loops on pruned RPC endpoints.

Also removes --pull from deploy workflow to avoid unnecessary
full rebuilds on every push.
2026-02-19 02:22:52 +03:00

50 lines
2.3 KiB
Docker

FROM node:20-alpine
WORKDIR /app
# Install @subql/node with @polkadot aliased to @pezkuwi
RUN npm init -y && \
npm install @subql/node \
@polkadot/api@npm:@pezkuwi/api@^16.5.36 \
@polkadot/api-augment@npm:@pezkuwi/api-augment@^16.5.36 \
@polkadot/api-derive@npm:@pezkuwi/api-derive@^16.5.36 \
@polkadot/types@npm:@pezkuwi/types@^16.5.36 \
@polkadot/types-augment@npm:@pezkuwi/types-augment@^16.5.36 \
@polkadot/types-codec@npm:@pezkuwi/types-codec@^16.5.36 \
@polkadot/types-create@npm:@pezkuwi/types-create@^16.5.36 \
@polkadot/types-known@npm:@pezkuwi/types-known@^16.5.36 \
@polkadot/rpc-core@npm:@pezkuwi/rpc-core@^16.5.36 \
@polkadot/rpc-provider@npm:@pezkuwi/rpc-provider@^16.5.36 \
@polkadot/rpc-augment@npm:@pezkuwi/rpc-augment@^16.5.36 \
@polkadot/util@npm:@pezkuwi/util@^14.0.25 \
@polkadot/util-crypto@npm:@pezkuwi/util-crypto@^14.0.25 \
@polkadot/keyring@npm:@pezkuwi/keyring@^14.0.25 \
@polkadot/networks@npm:@pezkuwi/networks@^14.0.25 \
@polkadot/wasm-crypto@npm:@pezkuwi/wasm-crypto@^7.5.18 \
@polkadot/wasm-crypto-wasm@npm:@pezkuwi/wasm-crypto-wasm@^7.5.17 \
@polkadot/wasm-util@npm:@pezkuwi/wasm-util@^7.5.17 \
@polkadot/wasm-bridge@npm:@pezkuwi/wasm-bridge@^7.5.17 \
@polkadot/wasm-crypto-asmjs@npm:@pezkuwi/wasm-crypto-asmjs@^7.5.17 \
@polkadot/wasm-crypto-init@npm:@pezkuwi/wasm-crypto-init@^7.5.17
# @subql/node requires '@polkadot/api-augment/substrate' but @pezkuwi uses
# chain-specific paths (./pezkuwi, ./bizinikiwi). Patch the exports map in
# package.json to add ./substrate pointing to pezkuwi augmentation.
RUN node -e " \
const fs = require('fs'); \
const p = '/app/node_modules/@polkadot/api-augment/package.json'; \
const pkg = JSON.parse(fs.readFileSync(p, 'utf8')); \
pkg.exports['./substrate'] = { \
require: './cjs/pezkuwi/index.js', \
default: './pezkuwi/index.js' \
}; \
fs.writeFileSync(p, JSON.stringify(pkg, null, 2)); \
"
# Patch: handle pruned blockchain state gracefully.
# Without this, SubQuery crashes when RPC nodes have pruned old block state.
COPY docker/patches/pruned-state-fallback.js /tmp/pruned-state-fallback.js
RUN node /tmp/pruned-state-fallback.js && rm /tmp/pruned-state-fallback.js
ENTRYPOINT ["/app/node_modules/.bin/subql-node"]