Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
ea7e8ef
public submodule update (#747)
EugeneDrpc Dec 1, 2025
080d92a
update public (#748)
a10zn8 Dec 2, 2025
4871055
Add fetch-tags: true.
mikedrpc Dec 2, 2025
2d4be14
Set fetch-depth: 0.
mikedrpc Dec 2, 2025
e1ea287
Remove fetch tuning.
mikedrpc Dec 2, 2025
19ba1a8
Add Shibarium Bor bridge RPC methods to allowlist and selector (#749)
artemrootman Dec 3, 2025
34b9676
remove cache for hyperliquid (#750)
msizov Dec 4, 2025
f0ae40a
add blobs methods (#751)
a10zn8 Dec 4, 2025
dbbbdef
Fix optimism state bound (#752)
KirillPamPam Dec 8, 2025
0f42f34
Update pub (#753)
KirillPamPam Dec 9, 2025
17751ff
New monad method (#754)
KirillPamPam Dec 9, 2025
4e8487b
add NEAR_PROTOCOL_CONFIG defauld method (#757)
AlexVarin2001 Dec 16, 2025
4f2959a
Perf improvements (#758)
KirillPamPam Dec 17, 2025
77ae38e
add eth_baseFee to avax (#760)
msizov Dec 18, 2025
757febc
Forward HTTP response headers from upstream to gRPC client for Beacon…
tonatoz Dec 18, 2025
3e845bc
Support '<' and '>' operations for client routing on key (#755)
filinvadim Dec 18, 2025
b944aa8
add custom headers as upstream settings (#761)
Termina1 Dec 18, 2025
d76ab32
Pass an error as is (#763)
KirillPamPam Dec 23, 2025
9d4f4a1
add tempo tesnet and update xlayer testnet (#764)
tonatoz Dec 24, 2025
6193499
Fix ripple tx broadcast (#765)
KirillPamPam Dec 24, 2025
c5e1436
make version range inclusive in selector (#766)
artemrootman Dec 30, 2025
536c663
Update dependencies (#767)
KirillPamPam Jan 6, 2026
8dec46f
New btc methods (#768)
KirillPamPam Jan 7, 2026
4a9de83
New chains (#769)
KirillPamPam Jan 8, 2026
a5320bd
Add WebSocket subscription support for Ripple and migrate to ledger_c…
tonatoz Jan 14, 2026
7f9e350
add more logs to doge upstream (#773)
EugeneDrpc Jan 14, 2026
be77e4c
Fid monad gas detection (#771)
KirillPamPam Jan 15, 2026
236f560
Support “network” field of compatible clients config bans (#774)
tonatoz Jan 15, 2026
d61eda2
New state error (#775)
KirillPamPam Jan 16, 2026
cd57300
Solana Head Detection: slotSubscribe (#772)
tonatoz Jan 19, 2026
01c51a6
blob detector npe fix, other detectors fix 404 scenario (#776)
EugeneDrpc Jan 20, 2026
40fdabe
add tempo moderato testnet (#778)
msizov Jan 21, 2026
897d98d
MegaETH support (#779)
KirillPamPam Jan 23, 2026
f3ecbda
Lower bounds fixes (#777)
KirillPamPam Jan 23, 2026
2e4c99b
Fix Hyperliquid native tx detection on testnet (#780)
artemrootman Jan 26, 2026
3b5940c
Integrate rx/receipts gold bounds (#781)
KirillPamPam Jan 28, 2026
5b4e888
Handle 429 error (#782)
filinvadim Jan 28, 2026
28108a1
Update grpc (#783)
filinvadim Jan 29, 2026
1168070
Add tempo support (#784)
filinvadim Jan 29, 2026
4d4a2ed
add aztec networks (#785)
artemrootman Jan 30, 2026
21d36f0
update chains.yaml (#786)
artemrootman Jan 30, 2026
1b12d83
update proto (#787)
a10zn8 Feb 1, 2026
9b5e7ca
Timeouts for http server (#788)
KirillPamPam Feb 4, 2026
1c4b0e9
feat: add Moca mainnet and testnet chain (#789)
tonatoz Feb 5, 2026
ee72ca3
Update saigon chain id (#790)
filinvadim Feb 5, 2026
b375fd3
Update saigon chain id (#791)
tonatoz Feb 5, 2026
15047c7
Fix Flux.merge() concurrency limit in SubscribeChainStatus (#792)
tonatoz Feb 6, 2026
9108f89
Use external prom server (#793)
KirillPamPam Feb 18, 2026
1dc5535
New prune err (#796)
KirillPamPam Feb 26, 2026
7d73099
New pub (#797)
KirillPamPam Feb 26, 2026
fc85b68
New pub (#798)
KirillPamPam Mar 2, 2026
b9d0a8c
New sei errors (#799)
KirillPamPam Mar 3, 2026
9a72a32
Introduce Morph chain (#802)
filinvadim Mar 13, 2026
d259c39
update polygon's chains.yaml entry (#803)
msizov Mar 17, 2026
56f6bb3
Add Robinhood and TAC Chains (#804)
tonatoz Mar 17, 2026
cbf6ae9
fix(beacon): forward Content-Type header from upstream responses (#806)
tonatoz Mar 20, 2026
93b8ad0
Fix aztec (#807)
KirillPamPam Mar 31, 2026
2432e25
Fix sol head detection (#808)
KirillPamPam Apr 7, 2026
f38bc66
update public repo (#809)
msizov Apr 16, 2026
e823223
add lower bound cronos (#810)
msizov Apr 16, 2026
25dbc7c
response signing with auth key (#811)
a10zn8 Apr 21, 2026
aa40578
Add safe error parsing for REST HTTP responses (#812)
filinvadim Apr 21, 2026
5414e06
Add support for Algorand Virtual Machine (AVM) blockchain (#813)
filinvadim Apr 23, 2026
ed7cfdc
Add client_type label to upstream lag and availability metrics (#815)
artemrootman Apr 23, 2026
24d54d3
Update chains (#814)
filinvadim Apr 23, 2026
08713ce
Add orderly support (#816)
filinvadim Apr 24, 2026
06ce692
Add abcore (#817)
filinvadim Apr 28, 2026
aeebca7
Handle unescaped control chars in web3_clientVersion responses (#818)
filinvadim Apr 30, 2026
c653cd9
Allow unescaped control chars at the JSON-RPC response parser (#819)
filinvadim Apr 30, 2026
c78dc7f
Add 'state is not available' as non-retryable for proof lower bound (…
tonatoz May 1, 2026
34e12da
Add Aztec upstream settings detection and improve node validation (#822)
filinvadim May 4, 2026
aec4418
Complete Algorand support: real lower-bound detection, settings detec…
filinvadim May 5, 2026
5f454f5
Feat/autodetect trace rawtx and storage values (#825)
a10zn8 May 5, 2026
43b9d50
Add B² Network mainnet support (#826)
a10zn8 May 8, 2026
3c4fe89
Update submodules (#828)
EugeneDrpc May 13, 2026
b99b74f
Sig nonce fix (#829)
EugeneDrpc May 13, 2026
6bf8680
implement lowerbound fix (#830)
EugeneDrpc May 15, 2026
0e97897
chore: add Dependabot configuration (#831)
a10zn8 May 18, 2026
7ee5375
Bump com.palantir.git-version from 0.12.3 to 5.0.0 (#842)
dependabot[bot] May 18, 2026
f4a821e
Bump eclipse-temurin from 21 to 25 (#832)
dependabot[bot] May 18, 2026
08763f3
Bump com.squareup:kotlinpoet from 1.14.2 to 2.3.0 in /buildSrc (#833)
dependabot[bot] May 18, 2026
e56bfae
Bump org.yaml:snakeyaml from 1.24 to 2.6 in /buildSrc (#834)
dependabot[bot] May 18, 2026
fada5a2
Bump actions/setup-java from 4 to 5 (#835)
dependabot[bot] May 18, 2026
aae179d
Bump actions/checkout from 4 to 6 (#836)
dependabot[bot] May 18, 2026
0266af2
Bump svenstaro/upload-release-action from 1.pre.release to 2 (#837)
dependabot[bot] May 18, 2026
4da5bc5
Bump gradle/gradle-build-action from 2 to 3 (#838)
dependabot[bot] May 18, 2026
91d2745
Bump the gradle-minor-and-patch group in /foundation with 3 updates (…
dependabot[bot] May 18, 2026
e865173
Fix silent stalls in native_subscribe WS subscriptions (Solana, eth p…
a10zn8 May 18, 2026
14c0e13
Bump org.mockito:mockito-inline from 4.0.0 to 5.2.0 (#850)
dependabot[bot] May 18, 2026
a215f77
Bump io.lettuce:lettuce-core from 5.2.2.RELEASE to 7.5.2.RELEASE (#849)
dependabot[bot] May 18, 2026
f9244cf
Bump nl.jqno.equalsverifier:equalsverifier from 3.10.1 to 4.5 (#848)
dependabot[bot] May 18, 2026
b33e439
Bump net.logstash.logback:logstash-logback-encoder from 7.2 to 9.0 (#…
dependabot[bot] May 18, 2026
612231e
Bump org.yaml:snakeyaml from 1.24 to 2.6 (#847)
dependabot[bot] May 18, 2026
afa254d
Bump org.yaml:snakeyaml from 1.24 to 2.6 in /foundation (#840)
dependabot[bot] May 18, 2026
ca08c8f
adi update (#854)
EugeneDrpc May 18, 2026
52beea3
Bump the gradle-minor-and-patch group across 1 directory with 65 upda…
dependabot[bot] May 18, 2026
e897706
chore: remove unused dshackle-cli Node.js tool (#855)
a10zn8 May 18, 2026
c4502ce
Add chains (#856)
KirillPamPam May 19, 2026
4b5524d
Fix java flag (#858)
KirillPamPam May 19, 2026
47dcf9a
Botanix (#859)
KirillPamPam May 22, 2026
f93f350
Add method label to upstream.rpc.conn metric (#863)
a10zn8 May 26, 2026
998e1ac
newPedningTransactions validator (#864)
KirillPamPam May 26, 2026
6dd2ee5
add kite mainnet, robinhood mainnet (#865)
msizov May 29, 2026
2ddd9c8
Update emerald-grpc and foundation submodule references (#866)
filinvadim Jun 2, 2026
634291b
Fix hl (#869)
filinvadim Jun 5, 2026
2b79458
Add node_getChainTips fallback for Aztec v5 (#873)
a10zn8 Jun 25, 2026
f2c1bd0
Update deps (#877)
KirillPamPam Jun 30, 2026
481c8f1
Add bearer token authorization for upstreams (#878)
a10zn8 Jul 3, 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
79 changes: 79 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# Dependabot configuration
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
version: 2

updates:
# Gradle — main module
- package-ecosystem: "gradle"
directory: "/"
schedule:
interval: "weekly"
target-branch: "master"
open-pull-requests-limit: 10
labels:
- "dependencies"
- "gradle"
groups:
gradle-minor-and-patch:
update-types:
- "minor"
- "patch"

# Gradle — foundation module
- package-ecosystem: "gradle"
directory: "/foundation"
schedule:
interval: "weekly"
target-branch: "master"
open-pull-requests-limit: 5
labels:
- "dependencies"
- "gradle"
groups:
gradle-minor-and-patch:
update-types:
- "minor"
- "patch"

# Gradle — buildSrc (build logic / plugins)
- package-ecosystem: "gradle"
directory: "/buildSrc"
schedule:
interval: "weekly"
target-branch: "master"
open-pull-requests-limit: 5
labels:
- "dependencies"
- "gradle"
groups:
gradle-minor-and-patch:
update-types:
- "minor"
- "patch"

# Docker — base image in Dockerfile
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "weekly"
target-branch: "master"
open-pull-requests-limit: 5
labels:
- "dependencies"
- "docker"

# GitHub Actions — workflow action versions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
target-branch: "master"
open-pull-requests-limit: 5
labels:
- "dependencies"
- "github-actions"
groups:
actions-minor-and-patch:
update-types:
- "minor"
- "patch"
14 changes: 7 additions & 7 deletions .github/workflows/publish.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,17 @@ jobs:
publish-docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
ref: ${{ github.ref }}
submodules: recursive
- name: Set up JDK
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 21
- name: Setup gradle
uses: gradle/gradle-build-action@v2
uses: gradle/gradle-build-action@v3
- name: Upload to Docker
run: make jib
env:
Expand All @@ -28,22 +28,22 @@ jobs:
publish-github:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
ref: ${{ github.ref }}
submodules: recursive
- name: Set up JDK
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 21
- name: Setup gradle
uses: gradle/gradle-build-action@v2
uses: gradle/gradle-build-action@v3
- name: Build zip
run: make distZip
- name: Upload Release
id: upload-release-asset
uses: svenstaro/upload-release-action@v1-release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ github.ref }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/static.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: asciidoctor-ghpages
uses: manoelcampos/asciidoctor-ghpages-action@v2
env:
Expand Down
8 changes: 5 additions & 3 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,24 @@ jobs:
unit-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 0
submodules: recursive
- name: Set up JDK
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 21

- name: Install System Libs
run: sudo apt-get install -y openssl libapr1

- name: Setup gradle
uses: gradle/gradle-build-action@v2
uses: gradle/gradle-build-action@v3
with:
github-token: ${{ secrets.GITHUB_TOKEN }}

- name: Check
run: make test
env:
Expand Down
10 changes: 9 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,17 @@ env
/test*
/test/
Test*.kt
*_test.sh

# http-client config
http-client.env.json

.DS_Store
mise.toml
mise.toml
.claude/

# demo sandbox (local-only, regenerate with demo/response-signing/generate-keys.sh + protoc)
/demo/response-signing/

# superpowers scratch: specs and plans live locally only for now
/docs/superpowers/
2 changes: 2 additions & 0 deletions .sdkmanrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
gradle=9.2.0
java=21.0.11.fx-librca
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
FROM eclipse-temurin:21
FROM eclipse-temurin:25

RUN apt-get update -y && apt-get install -y libcurl4-openssl-dev libcjson-dev
3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ all: build-foundation build-main
build-foundation:
cd foundation && ../gradlew build publishToMavenLocal

run-main:
./gradlew run

build-main:
./gradlew build

Expand Down
13 changes: 6 additions & 7 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ buildscript {
gradlePluginPortal()
}
dependencies {
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.9.1'
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.10.0'
}
}

Expand Down Expand Up @@ -71,20 +71,18 @@ dependencies {
implementation(libs.reactor.grpc.stub)
implementation(libs.grpc.proto.util)

implementation libs.prom.exporter.server
implementation libs.micrometer.registry.prometheus
implementation libs.micrometer.ctx.prop
implementation libs.lettuce.core

implementation(libs.spring.cloud.starter.sleuth) {
exclude module: 'spring-security-rsa'
}
implementation libs.brave.instrumentation.grpc
implementation libs.brave.ctx.slf4j

implementation libs.logstash.encoder

implementation libs.janino

implementation libs.spring.cloud.sleuth.zipkin

implementation libs.bitcoinj

implementation libs.snake.yaml
Expand All @@ -97,6 +95,7 @@ dependencies {
implementation libs.javax.annotations

implementation libs.auth0.jwt
implementation libs.semver4j

testImplementation libs.cglib.nodep
testImplementation libs.spockframework.core
Expand Down Expand Up @@ -184,7 +183,7 @@ jib {
}
container {
creationTime = 'USE_CURRENT_TIMESTAMP'
jvmFlags = ['-XX:+UseG1GC', '-XX:+ExitOnOutOfMemoryError', '-Xms1024M', '-XX:NativeMemoryTracking=summary', '-XX:+UnlockDiagnosticVMOptions', '-XX:GCLockerRetryAllocationCount=10', '--enable-preview']
jvmFlags = ['-XX:+UseG1GC', '-XX:+ExitOnOutOfMemoryError', '-Xms1024M', '-XX:NativeMemoryTracking=summary', '-XX:+UnlockDiagnosticVMOptions', '--enable-preview']
mainClass = 'io.emeraldpay.dshackle.StarterKt'
args = []
ports = ['2448', '2449', '8545']
Expand Down
4 changes: 2 additions & 2 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ repositories {
}

dependencies {
implementation("org.yaml:snakeyaml:1.24")
implementation("org.yaml:snakeyaml:2.6")
implementation("dshackle:foundation:1.0.0")
implementation("com.squareup:kotlinpoet:1.14.2")
implementation("com.squareup:kotlinpoet:2.3.0")
}
4 changes: 4 additions & 0 deletions buildSrc/src/main/kotlin/chainsconfig.codegen.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ open class CodeGen(private val config: ChainsConfig) {

private fun type(type: String): String {
return when(type) {
"aztec" -> "BlockchainType.AZTEC"
"eth" -> "BlockchainType.ETHEREUM"
"bitcoin" -> "BlockchainType.BITCOIN"
"starknet" -> "BlockchainType.STARKNET"
Expand All @@ -139,6 +140,9 @@ open class CodeGen(private val config: ChainsConfig) {
"cosmos" -> "BlockchainType.COSMOS"
"ripple" -> "BlockchainType.RIPPLE"
"kadena" -> "BlockchainType.KADENA"
"avm" -> "BlockchainType.AVM"
"app" -> "BlockchainType.ETHEREUM"
"aptos" -> "BlockchainType.ETHEREUM"
else -> throw IllegalArgumentException("unknown blockchain type $type")
}
}
Expand Down
35 changes: 35 additions & 0 deletions docs/04-upstream-config.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,41 @@ In case of rpc and ws connection we can specify different modes of works togethe

You can specify this modes through `connector-mode` parameter in connection config.

=== Custom Headers

Dshackle allows you to add custom HTTP headers to all requests sent to an upstream.
This is useful when connecting to providers that require API keys, authentication tokens, or other custom headers.

Custom headers are configured at the upstream level and will be added to:

- All HTTP JSON RPC requests
- WebSocket connection handshakes (initial HTTP upgrade request)

NOTE: Custom headers are supported for all connection types except gRPC connections.

==== Configuration

Custom headers are specified using the `custom-headers` parameter in your upstream configuration:

[source,yaml]
----
version: v1

upstreams:
- id: my-ethereum-node
chain: ethereum
custom-headers:
X-API-Key: "your-api-key-here"
X-Custom-Header: "custom-value"
Authorization: "Bearer your-token"
connection:
generic:
rpc:
url: "https://api.example.com/rpc"
ws:
url: "wss://api.example.com/ws"
----

=== Bitcoin Methods

.By default an ethereum upstream allows call to the following JSON RPC methods:
Expand Down
Loading