diff --git a/contrib/teamcity/build-configurations.yml b/contrib/teamcity/build-configurations.yml
--- a/contrib/teamcity/build-configurations.yml
+++ b/contrib/teamcity/build-configurations.yml
@@ -889,6 +889,7 @@
       - modules/mock-chronik-client/
     env:
       JS_PROJECT_ROOT: modules/mock-chronik-client
+      DEPENDS_ECASHADDRJS: "true"
     templates:
       - js-mocha
 
diff --git a/mock-chronik-client.Dockerfile b/mock-chronik-client.Dockerfile
new file mode 100644
--- /dev/null
+++ b/mock-chronik-client.Dockerfile
@@ -0,0 +1,31 @@
+# Copyright (c) 2024 The Bitcoin developers
+# Distributed under the MIT software license, see the accompanying
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+# Node image for running npm publish
+
+FROM node:20-buster-slim
+
+# Build all local dependencies
+
+# ecashaddrjs
+WORKDIR /app/modules/ecashaddrjs
+COPY modules/ecashaddrjs/ .
+RUN npm ci
+RUN npm run build
+
+# Build mock-chronik-client
+
+WORKDIR /app/modules/mock-chronik-client
+
+# Copy only the package files and install necessary dependencies.
+# This reduces cache busting when source files are changed.
+COPY modules/mock-chronik-client/package.json .
+COPY modules/mock-chronik-client/package-lock.json .
+RUN npm ci
+
+# Copy the rest of the project files
+COPY . .
+
+# Publish the module
+CMD [ "npm", "publish" ]
diff --git a/modules/mock-chronik-client/package-lock.json b/modules/mock-chronik-client/package-lock.json
--- a/modules/mock-chronik-client/package-lock.json
+++ b/modules/mock-chronik-client/package-lock.json
@@ -9,7 +9,7 @@
             "version": "1.8.0",
             "license": "MIT",
             "dependencies": {
-                "ecashaddrjs": "^1.5.2"
+                "ecashaddrjs": "file:../ecashaddrjs"
             },
             "devDependencies": {
                 "mocha": "^10.2.0",
@@ -17,6 +17,32 @@
                 "nyc": "^15.1.0"
             }
         },
+        "../ecashaddrjs": {
+            "version": "1.5.6",
+            "license": "MIT",
+            "dependencies": {
+                "big-integer": "1.6.36",
+                "bs58check": "^3.0.1"
+            },
+            "devDependencies": {
+                "@babel/cli": "^7.21.0",
+                "@babel/core": "^7.21.3",
+                "@babel/preset-env": "^7.20.2",
+                "babel-loader": "^9.1.2",
+                "buffer": "^6.0.3",
+                "chai": "^4.3.7",
+                "debug": "^4.3.4",
+                "eslint": "^8.37.0",
+                "jsdoc": "^4.0.2",
+                "mocha": "^10.2.0",
+                "mocha-junit-reporter": "^2.2.0",
+                "mocha-suppress-logs": "^0.3.1",
+                "nyc": "^15.1.0",
+                "random-js": "^2.1.0",
+                "webpack": "^5.76.2",
+                "webpack-cli": "^5.0.1"
+            }
+        },
         "node_modules/@ampproject/remapping": {
             "version": "2.2.1",
             "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
@@ -607,17 +633,6 @@
                 "@jridgewell/sourcemap-codec": "^1.4.14"
             }
         },
-        "node_modules/@noble/hashes": {
-            "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz",
-            "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==",
-            "engines": {
-                "node": ">= 16"
-            },
-            "funding": {
-                "url": "https://paulmillr.com/funding/"
-            }
-        },
         "node_modules/aggregate-error": {
             "version": "3.1.0",
             "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
@@ -707,19 +722,6 @@
             "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
             "dev": true
         },
-        "node_modules/base-x": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz",
-            "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw=="
-        },
-        "node_modules/big-integer": {
-            "version": "1.6.36",
-            "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.36.tgz",
-            "integrity": "sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==",
-            "engines": {
-                "node": ">=0.6"
-            }
-        },
         "node_modules/binary-extensions": {
             "version": "2.2.0",
             "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
@@ -788,23 +790,6 @@
                 "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
             }
         },
-        "node_modules/bs58": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz",
-            "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==",
-            "dependencies": {
-                "base-x": "^4.0.0"
-            }
-        },
-        "node_modules/bs58check": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-3.0.1.tgz",
-            "integrity": "sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==",
-            "dependencies": {
-                "@noble/hashes": "^1.2.0",
-                "bs58": "^5.0.0"
-            }
-        },
         "node_modules/caching-transform": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz",
@@ -1049,13 +1034,8 @@
             }
         },
         "node_modules/ecashaddrjs": {
-            "version": "1.5.2",
-            "resolved": "https://registry.npmjs.org/ecashaddrjs/-/ecashaddrjs-1.5.2.tgz",
-            "integrity": "sha512-zzpDxdVR6SmIym/s1OUo5gEzkH86ztHKbdzuFGet8vUpV0nIejOcW8JiTiq74PHAcIKVb9bQ7ZU7F1Ryw6F6xA==",
-            "dependencies": {
-                "big-integer": "1.6.36",
-                "bs58check": "^3.0.1"
-            }
+            "resolved": "../ecashaddrjs",
+            "link": true
         },
         "node_modules/electron-to-chromium": {
             "version": "1.4.504",
@@ -3219,11 +3199,6 @@
                 "@jridgewell/sourcemap-codec": "^1.4.14"
             }
         },
-        "@noble/hashes": {
-            "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz",
-            "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ=="
-        },
         "aggregate-error": {
             "version": "3.1.0",
             "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
@@ -3292,16 +3267,6 @@
             "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
             "dev": true
         },
-        "base-x": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz",
-            "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw=="
-        },
-        "big-integer": {
-            "version": "1.6.36",
-            "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.36.tgz",
-            "integrity": "sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg=="
-        },
         "binary-extensions": {
             "version": "2.2.0",
             "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
@@ -3344,23 +3309,6 @@
                 "update-browserslist-db": "^1.0.11"
             }
         },
-        "bs58": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz",
-            "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==",
-            "requires": {
-                "base-x": "^4.0.0"
-            }
-        },
-        "bs58check": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-3.0.1.tgz",
-            "integrity": "sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==",
-            "requires": {
-                "@noble/hashes": "^1.2.0",
-                "bs58": "^5.0.0"
-            }
-        },
         "caching-transform": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz",
@@ -3534,12 +3482,26 @@
             "dev": true
         },
         "ecashaddrjs": {
-            "version": "1.5.2",
-            "resolved": "https://registry.npmjs.org/ecashaddrjs/-/ecashaddrjs-1.5.2.tgz",
-            "integrity": "sha512-zzpDxdVR6SmIym/s1OUo5gEzkH86ztHKbdzuFGet8vUpV0nIejOcW8JiTiq74PHAcIKVb9bQ7ZU7F1Ryw6F6xA==",
+            "version": "file:../ecashaddrjs",
             "requires": {
+                "@babel/cli": "^7.21.0",
+                "@babel/core": "^7.21.3",
+                "@babel/preset-env": "^7.20.2",
+                "babel-loader": "^9.1.2",
                 "big-integer": "1.6.36",
-                "bs58check": "^3.0.1"
+                "bs58check": "^3.0.1",
+                "buffer": "^6.0.3",
+                "chai": "^4.3.7",
+                "debug": "^4.3.4",
+                "eslint": "^8.37.0",
+                "jsdoc": "^4.0.2",
+                "mocha": "^10.2.0",
+                "mocha-junit-reporter": "^2.2.0",
+                "mocha-suppress-logs": "^0.3.1",
+                "nyc": "^15.1.0",
+                "random-js": "^2.1.0",
+                "webpack": "^5.76.2",
+                "webpack-cli": "^5.0.1"
             }
         },
         "electron-to-chromium": {
diff --git a/modules/mock-chronik-client/package.json b/modules/mock-chronik-client/package.json
--- a/modules/mock-chronik-client/package.json
+++ b/modules/mock-chronik-client/package.json
@@ -1,6 +1,6 @@
 {
     "dependencies": {
-        "ecashaddrjs": "^1.5.2"
+        "ecashaddrjs": "file:../ecashaddrjs"
     },
     "name": "mock-chronik-client",
     "description": "Testing utility to mock the Chronik indexer client and support unit tests that need to mock chronik related API calls.",