Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
bdf0f94
build(bitcoin-cash-node): v29.0.0
rnbrady May 7, 2026
f1d7516
Fixes #72
rnbrady May 7, 2026
a91e50a
Backfill historic mempool orhpans to history table #72
rnbrady May 7, 2026
59fb42b
test(e2e): reproduce missing block transaction ingestion bug
rnbrady May 9, 2026
f0e3567
fix(agent): save block transactions despite cache hit if db = false
rnbrady May 9, 2026
f89be63
fix(agent): self-heal incomplete block transactions #74
rnbrady May 10, 2026
e0fa7f0
test(e2e): reproduce block.encoded_hex bug (#75 item 1)
rnbrady May 10, 2026
abb6d4b
fix(sql): encode block transaction count correctly (#75 item 1)
rnbrady May 10, 2026
b6c1b4a
test(e2e): reproduce invalid SQL bug in recordNodeValidation (#75 ite…
rnbrady May 10, 2026
7c4a30e
fix(agent): invalid SQL bug in recordNodeValidation (#75 item 2)
rnbrady May 10, 2026
b940626
fix(agent): make node_transaction inserts idempotent
rnbrady May 10, 2026
236253e
test(e2e): reproduce data_carrier_outputs empty bytecode bug (#75 ite…
rnbrady May 10, 2026
bbdb8fb
fix(sql): handle empty bytecode in data_carrier_outputs (#75 item 3)
rnbrady May 10, 2026
767d3a4
test(e2e): reproduce coinbase-only value aggregate bug (#75 item 4)
rnbrady May 10, 2026
e6527e0
fix(sql): handle coinbase-only value aggregates (#75 item 4)
rnbrady May 10, 2026
4a6f4b3
fix(agent): make backwards compatible if db schema lagging (#74)
rnbrady May 10, 2026
d9bff00
fix(sql): add node_transaction_history primary key (#75 item 5)
rnbrady May 10, 2026
be5e686
test(e2e): reproduce zero-length PUSHDATA pattern bug (#75 item 6)
rnbrady May 10, 2026
54c0716
fix(sql): preserve zero-length PUSHDATA length bytes (#75 item 6)
rnbrady May 10, 2026
c4218a3
fix: spelling
rnbrady May 10, 2026
4928b9a
test(e2e): reproduce redeem bytecode parser bugs (#75 item 7)
rnbrady May 10, 2026
cf64c67
fix(sql): harden redeem bytecode parser (fixes #75 item 7, fixes #55)
rnbrady May 10, 2026
48e3092
test(e2e): reproduce mempool transaction expiry bug (#73)
rnbrady May 10, 2026
6533d31
fix(agent): expire stale mempool transactions (#73)
rnbrady May 10, 2026
1f32bc0
fix(agent): archive confirmed txns stuck in mempool table before proc…
rnbrady May 10, 2026
12402f8
fix(agent): DatabaseError: null value violates not-null constraint
rnbrady May 10, 2026
3b1684f
fix(sql): add token category index
rnbrady May 10, 2026
6199504
feat(agent): log db insert times
rnbrady May 11, 2026
1f75cea
test(agent): reproduce slow header catch-up sync state path
rnbrady May 13, 2026
535e41b
fix(agent): make header catch-up sync state linear
rnbrady May 13, 2026
a270c0c
test(agent): new block saved after reorg (#77)
rnbrady Jun 12, 2026
31b7891
fix(agent): save replacement block on reorg (fixes #77)
rnbrady Jun 12, 2026
253207f
fix(chart): use Recreate strategy for agent deployment
rnbrady Jul 23, 2026
b9a0c3b
feat(hasura): upgrade hasura to v2.49.5
rnbrady Jul 23, 2026
aba2803
fix(agent): speed up block hash restore and correct its startup warning
rnbrady Jul 23, 2026
35883a8
fix(agent): phase-aware node initialization warnings with restore timing
rnbrady Jul 23, 2026
c09fb71
build(agent): upgrade Node 18 to 24 LTS in agent image and engines
rnbrady Jul 23, 2026
c5cd4da
build: upgrade pg 8.8 to 8.22 and @types/pg to 8.20
rnbrady Jul 23, 2026
b19783b
fix(chart): tighten agent readiness probe, keep liveness coarse
rnbrady Jul 23, 2026
d7a41b7
test(sql): search_output must match locking bytecode of any length ex…
rnbrady Oct 4, 2026
702ef28
fix(sql): make search_output exact for locking bytecode of any length
rnbrady Oct 4, 2026
f728f79
test(sql): search_output_prefix must treat prefix bytes literally
rnbrady Oct 4, 2026
23e9788
fix(sql): match search_output_prefix bytes literally and beyond 25 bytes
rnbrady Oct 4, 2026
72e813f
fix(db): bound mempool cleanup conflict lookups to current outpoints
rnbrady Sep 10, 2026
704aa3b
test(sql): assert search_output uses output_search_index
rnbrady Oct 6, 2026
80ed197
fix(db): never expire a mempool transaction already accepted by a block
rnbrady Oct 12, 2026
6749fef
test(sql): accept either copy of output_search_index in the search pl…
rnbrady Oct 11, 2026
740672b
fix(db): serialize mempool expiry so a stale mempool cannot deadlock
rnbrady Oct 13, 2026
624a2de
ci: use current major versions of GitHub actions
rnbrady Oct 19, 2026
cd4d0e5
style(e2e): format the re-org test
rnbrady Oct 19, 2026
8625fce
test(e2e): check reorg block acceptance in the database, not the save…
rnbrady Oct 19, 2026
3829406
Merge pull request #24 from ParyonUSD/ci/bump-actions-master
rnbrady Oct 19, 2026
90b164e
Merge branch 'master' into fix/mempool-expiry-race
rnbrady Oct 19, 2026
9f079e0
Merge branch 'master' into test/deflake-reorg-6-master
rnbrady Oct 19, 2026
5abe69c
Merge pull request #25 from ParyonUSD/test/deflake-reorg-6-master
rnbrady Oct 19, 2026
da228c9
Merge branch 'master' into test/deflake-search-index-plan
rnbrady Oct 19, 2026
017cda5
Merge branch 'master' into fix/mempool-expiry-race
rnbrady Oct 19, 2026
0ded082
fix(db): pass node ids to the expiry statement as integer[]
rnbrady Oct 19, 2026
6b988ff
fix(db): archive expired descendants with the earliest ancestor expir…
rnbrady Oct 19, 2026
9f0b5ca
Merge pull request #19 from ParyonUSD/test/deflake-search-index-plan
rnbrady Oct 19, 2026
a21af66
fix(db): treat a conflict in a block with a NULL accepted_at as a rep…
rnbrady Oct 19, 2026
04da44d
fix(db): take the expiry locks in separate commands before the archiv…
rnbrady Oct 19, 2026
2e8ce67
Merge branch 'master' into fix/mempool-expiry-race
rnbrady Oct 19, 2026
c3278df
fix(db): retry expiry when a walked descendant is deleted before its …
rnbrady Oct 19, 2026
570ff54
Merge pull request #18 from ParyonUSD/fix/mempool-expiry-race
rnbrady Oct 20, 2026
3764c67
fix(agent): survive Postgres restarts instead of crashing (#17)
rnbrady Oct 21, 2026
b4d10d9
fix(agent): do not treat already-known headers as stale on deep reorg…
rnbrady Oct 21, 2026
efdfad8
fix(agent): resync node mempools after reorgs and on connect (fixes #…
rnbrady Oct 21, 2026
e3acbd4
perf(agent): stop re-serialising blocks/transactions during conversio…
rnbrady Oct 21, 2026
c620bab
perf(agent): skip already-audited blocks in startup repair scan; line…
rnbrady Oct 21, 2026
9bcbdb8
perf(agent): optional binary COPY write path (CHAINGRAPH_WRITE_PATH=c…
rnbrady Oct 21, 2026
0c2ed86
Keep mempool expiry linear when statistics are outdated; fix three fl…
rnbrady Oct 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@
"peerready",
"peersendheaders",
"pgadmin",
"PGCOPY",
"pghero",
"pino",
"pkey",
Expand All @@ -97,12 +98,17 @@
"sendheaders",
"statefulset",
"statefulsets",
"subquery",
"symlinks",
"templating",
"txindex",
"unintuitive",
"unnest",
"unpruned",
"upserting",
"UTXO",
"UTXOs",
"varint",
"verack",
"xprivkey",
"xpubkey"
Expand Down
21 changes: 14 additions & 7 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@ on: [push, pull_request]
jobs:
e2e-tests:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
write-path: [sql, copy]
name: e2e-tests (write path ${{ matrix.write-path }})
env:
CHAINGRAPH_WRITE_PATH: ${{ matrix.write-path }}
services:
postgres:
image: postgres:14
Expand All @@ -20,36 +27,36 @@ jobs:
- 5432:5432
steps:
- name: Check out repository code
uses: actions/checkout@v3
uses: actions/checkout@v7
with:
submodules: 'true'
- name: Install Node.js
uses: actions/setup-node@v3
uses: actions/setup-node@v7
with:
node-version: '18'
- run: yarn install --immutable --immutable-cache
- run: yarn test
- run: yarn cov:lcov
- name: Upload test coverage
uses: codecov/codecov-action@v3
uses: codecov/codecov-action@v7
with:
token: ${{ secrets.CODECOV_TOKEN }}
- name: Save E2E test logs
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v7
if: always()
with:
name: e2e-test-log
name: e2e-test-log-${{ matrix.write-path }}
path: data/chaingraph/log-e2e.ndjson

check-yarn-cache:
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v3
uses: actions/checkout@v7
with:
submodules: 'true'
- name: Install Node.js
uses: actions/setup-node@v3
uses: actions/setup-node@v7
with:
node-version: '18'
- run: yarn install --immutable --immutable-cache --check-cache
8 changes: 4 additions & 4 deletions .github/workflows/image-agent.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,23 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
uses: docker/setup-buildx-action@v4
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v7
with:
submodules: 'true'
- name: Get tag
run: |
echo "::set-output name=commit::$(git rev-parse --short HEAD)"
id: get_tag
- name: Login to DockerHub
uses: docker/login-action@v2
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Build, tag, push
id: docker_build
uses: docker/build-push-action@v3
uses: docker/build-push-action@v7
with:
context: .
file: images/agent/Dockerfile
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/image-bchn.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,21 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
uses: docker/setup-buildx-action@v4
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v7
- name: Get version
run: |
echo "::set-output name=version::$(grep -F 'ENV BITCOIN_VERSION' images/bitcoin-cash-node/Dockerfile | grep -oE '[0-9.]+')"
id: get_version
- name: Login to DockerHub
uses: docker/login-action@v2
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Build, tag, push
id: docker_build
uses: docker/build-push-action@v3
uses: docker/build-push-action@v7
with:
context: images/bitcoin-cash-node
push: true
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/image-hasura.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,21 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
uses: docker/setup-buildx-action@v4
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v7
- name: Get tag
run: |
echo "::set-output name=commit::$(git rev-parse --short HEAD)"
id: get_tag
- name: Login to DockerHub
uses: docker/login-action@v2
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Build, tag, push
id: docker_build
uses: docker/build-push-action@v3
uses: docker/build-push-action@v7
with:
context: images/hasura
push: true
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release-chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Configure Git
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
- name: Install Helm
uses: azure/setup-helm@v3
uses: azure/setup-helm@v5
- name: Run chart-releaser
uses: helm/chart-releaser-action@v1.5.0
with:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ package-lock.json
data
.env
client/generated
.scratch
20 changes: 17 additions & 3 deletions charts/chaingraph/templates/agent.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,14 @@ metadata:
{{- include "chaingraph.labels" . | nindent 4 }}
spec:
replicas: 1
# The agent is a singleton writer: never run two concurrently. Recreate
# terminates the old pod before starting its replacement, at the cost of a
# brief indexing gap (the agent catches up on restart).
strategy:
type: Recreate
# Explicit null clears the server-defaulted rollingUpdate block left by
# previous RollingUpdate deployments (Helm three-way merge).
rollingUpdate: null
selector:
matchLabels:
app: chaingraph-agent
Expand Down Expand Up @@ -41,6 +49,8 @@ spec:
value: {{ .Values.agent.synchronousCommit | quote }}
- name: CHAINGRAPH_BLOCK_BUFFER_TARGET_SIZE_MB
value: {{ .Values.agent.blockBufferTargetSizeMb | quote }}
- name: CHAINGRAPH_INCOMPLETE_BLOCK_REPAIR_BATCH_SIZE
value: {{ .Values.agent.repairBlocksBatchSize | quote }}
- name: CHAINGRAPH_GENESIS_BLOCKS
value: {{ .Values.agent.genesisBlocks | quote }}
- name: CHAINGRAPH_TRUSTED_NODES
Expand Down Expand Up @@ -68,13 +78,17 @@ spec:
timeoutSeconds: 15
successThreshold: 1
failureThreshold: 3
# Readiness is tight so rollouts report Ready seconds after the
# internal API is up. Liveness (above) stays coarse on purpose: a
# CPU-bound catch-up can block the event loop (and /health-check),
# and a twitchy liveness probe would kill the agent mid-recovery.
readinessProbe:
httpGet:
path: /health-check
port: {{ .Values.agent.port }}
initialDelaySeconds: 30
periodSeconds: 60
timeoutSeconds: 15
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 3
resources: {}
Expand Down
7 changes: 5 additions & 2 deletions charts/chaingraph/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,15 @@ agent:
# The maximum number of connections the agent should maintain to the database.
# For best performance, this should be set to the number of CPUs available to Postgres. If not set, Chaingraph will assume that Postgres is running on hardware equivalent to its own. (This is ideal if Postgres is running on either the same machine or an equivalent one from a homogenous Kubernetes node pool.)
maxConnections: ''
# If set to false, the Postgres database will be configured to use "synchronous_commit = off" during initial sync.
# In real-world testing, this usually reduces the speed of Chaingraph's initial sync, so Chaingraph leaves "synchronous_commit = on" by default.
# If set to false, the Postgres database will be configured to use "synchronous_commit = off" during initial sync.
# In real-world testing, this usually reduces the speed of Chaingraph's initial sync, so Chaingraph leaves "synchronous_commit = on" by default.
synchronousCommit: true
# The target size (in MB) of the buffer which holds downloaded blocks waiting to be saved to the database. This primarily affects memory usage during the initial chain sync.
# For best performance, this should be around `maxConnections * maximum block size`, while leaving enough memory available to the host machine. If left unset (recommended), Chaingraph will measure free memory at startup and attempt to select a reasonable value.
blockBufferTargetSizeMb: ''
# Self-healing for https://github.com/bitauth/chaingraph/issues/74: after initial sync, the agent scans saved blocks in batches to find blocks whose linked transactions don't match the saved block size, then repairs those blocks by re-requesting them from trusted nodes.
# Set to 0 to disable the startup repair task. Completed scans are recorded per node in the incomplete_block_audit table, so later startups only audit blocks saved since the last completed scan; delete its rows to force a full re-audit.
repairBlocksBatchSize: 10000
# A mapping of network magic bytes to hex-encoded genesis blocks.
# Format: `NETWORK_MAGIC:RAW_GENESIS_BLOCK_HEX`, comma separated.
# E.g. CHAINGRAPH_GENESIS_BLOCKS=e3e1f3e8:rawblockhex,deadbeef:rawblockhex
Expand Down
33 changes: 33 additions & 0 deletions defaults.env
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,43 @@ CHAINGRAPH_POSTGRES_MAX_CONNECTIONS=
# In real-world testing, this usually reduces the speed of Chaingraph's initial sync, so Chaingraph leaves "synchronous_commit = on" by default.
CHAINGRAPH_POSTGRES_SYNCHRONOUS_COMMIT=true

# How block data is written to Postgres: `sql` sends each block as multi-row `INSERT … VALUES` statements; `copy` streams the rows with binary `COPY` into per-connection temporary staging tables and inserts from there (same constraints and `ON CONFLICT DO NOTHING` semantics, much less SQL text to build, send, parse and plan).
CHAINGRAPH_WRITE_PATH=sql

# The target size (in MB) of the buffer which holds downloaded blocks waiting to be saved to the database. This primarily affects memory usage during the initial chain sync.
# For best performance, this should be around `CHAINGRAPH_POSTGRES_MAX_CONNECTIONS * maximum block size`, while leaving enough memory available to the host machine. If not set, Chaingraph will measure free memory at startup and attempt to select a reasonable value.
CHAINGRAPH_BLOCK_BUFFER_TARGET_SIZE_MB=

# Self-healing for https://github.com/bitauth/chaingraph/issues/74: after
# initial sync, the agent scans saved blocks in batches to find blocks whose
# linked transactions don't match the saved block size, then repairs those
# blocks by re-requesting them from trusted nodes. Set to 0 to disable the
# startup repair task. Completed scans are recorded per node in the
# incomplete_block_audit table, so later startups only audit blocks saved since
# the last completed scan; delete its rows to force a full re-audit.
CHAINGRAPH_INCOMPLETE_BLOCK_REPAIR_BATCH_SIZE=10000

# BCHN expires transactions from the mempool after 336 hours but does not announce
# those expirations. At initial sync and periodically thereafter the agent scans for
# node_transaction rows expiring soon and schedules each row to be archived to
# node_transaction_history at its exact expiry time. The existing mempool
# invalidation cascade archives same-node descendants. See bitauth/chaingraph#73.
CHAINGRAPH_MEMPOOL_TRANSACTION_EXPIRATION_MS=1209600000
CHAINGRAPH_MEMPOOL_TRANSACTION_EXPIRATION_SCAN_INTERVAL_MS=3600000

# BCHN does not re-announce transactions that a re-organization returns to its
# mempool. When enabled, the agent sends each trusted node a BIP35 `mempool`
# request after mempool tracking is enabled, after the node reconnects, and
# after each re-organization reported by that node, so the answering `inv`
# re-records `node_transaction` rows. Replies only add rows. Requests to each
# node are rate-limited to one per CHAINGRAPH_MEMPOOL_RESYNC_MIN_INTERVAL_MS;
# requests during that window are coalesced into one request when it ends.
# The node must answer `mempool` requests: BCHN does when NODE_BLOOM is enabled
# (`-peerbloomfilters`, the default) or the agent has the `mempool` permission
# (e.g. `-whitelist=mempool@<agent-ip>`). See bitauth/chaingraph#81.
CHAINGRAPH_MEMPOOL_RESYNC=true
CHAINGRAPH_MEMPOOL_RESYNC_MIN_INTERVAL_MS=30000

# A mapping of network magic bytes to hex-encoded genesis blocks.
# Format: `NETWORK_MAGIC:RAW_GENESIS_BLOCK_HEX`, comma separated.
# E.g. CHAINGRAPH_GENESIS_BLOCKS=e3e1f3e8:rawblockhex,deadbeef:rawblockhex
Expand Down
4 changes: 2 additions & 2 deletions images/agent/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM node:18-alpine AS build-stage
FROM node:24-alpine AS build-stage
WORKDIR /chaingraph
COPY package.json yarn.lock .yarnrc.yml ./
COPY .yarn .yarn
Expand All @@ -10,7 +10,7 @@ RUN yarn build
# Use Yarn plugin-production-install to copy only production dependencies (https://gitlab.com/Larry1123/yarn-contrib/-/tree/master/packages/plugin-production-install)
RUN yarn prod-install ./production-dependencies

FROM node:18-alpine AS production
FROM node:24-alpine AS production
WORKDIR /chaingraph
COPY --from=build-stage /chaingraph/production-dependencies ./
COPY --from=build-stage /chaingraph/defaults.env ./
Expand Down
6 changes: 3 additions & 3 deletions images/bitcoin-cash-node/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ RUN set -ex \
&& apt-get install -qq --no-install-recommends ca-certificates gosu wget \
&& rm -rf /var/lib/apt/lists/*

ENV BITCOIN_VERSION 28.0.2
ENV BITCOIN_URL https://download.bitcoincashnode.org/misc/builds/upgrade12_temp/linux/bitcoin-cash-node-28.0.2-x86_64-linux-gnu.tar.gz
ENV BITCOIN_SHA256 140b44fd76a4f9428354bfbec4800d58fd39fb723320e761a035f15c2dd43596
ENV BITCOIN_VERSION 29.0.0
ENV BITCOIN_URL https://github.com/bitcoin-cash-node/bitcoin-cash-node/releases/download/v29.0.0/bitcoin-cash-node-29.0.0-x86_64-linux-gnu.tar.gz
ENV BITCOIN_SHA256 6125d1cbecc1db476f2b6b7b91da5acde92d2311b8e738124e3db64ca84b33e1

# install bitcoin binaries
RUN set -ex \
Expand Down
7 changes: 6 additions & 1 deletion images/hasura/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@

FROM hasura/graphql-engine:v2.16.1.cli-migrations-v3
# Multi-arch tag; digest of the manifest list as of 2026-07-20:
# sha256:da573f6420bfbc330023dd4b816c1e6fcb50ab6a00fd3e1d8c70088532d5fa7f
# NOTE: first startup against an existing database performs a ONE-WAY
# metadata catalog upgrade (47 -> current). Snapshot/backup hdb_catalog
# before deploying to an instance you may want to roll back.
FROM hasura/graphql-engine:v2.49.5.cli-migrations-v3

COPY hasura-data /hasura-data

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
DROP TRIGGER IF EXISTS trigger_public_node_transaction_history_insert ON node_transaction_history;
DROP FUNCTION IF EXISTS trigger_node_transaction_history_insert();
Loading