Files
dshackle/docs
a10zn8 25dbc7c388 response signing with auth key (#811)
* docs: spec for unifying response signing with auth key

Design для замены отдельной SignatureConfig на подпись ответов
RSA-ключом, взятым из auth.server.provider-private-key.

Made-with: Cursor

* docs: implementation plan for auth-based response signing

План реализации по спеке 2026-04-20-response-signing-with-auth-key-design.md.
Разбит на 9 задач: новые RsaSigner/DisabledSigner по TDD, переработка фабрики
под AuthorizationConfig, удаление SignatureConfig/signed-response, снятие
cache-гейта в EthereumLocalReader, обновление документации.

Made-with: Cursor

* feat(signature): add RsaSigner using SHA256withRSA

Made-with: Cursor

* feat(signature): add DisabledSigner that throws on sign()

Made-with: Cursor

* refactor(signature): ResponseSigner.sign returns non-null Signature

Made-with: Cursor

* refactor(signature): build signer from AuthorizationConfig

Made-with: Cursor

* refactor(config): remove signed-response YAML section and SignatureConfig

Made-with: Cursor

* refactor(signature): remove EcdsaSigner and NoSigner

Remove the obsolete ECDSA signer and the transitional NoSigner stub.
Replace NoSigner usages in tests with DisabledSigner, and pass
DisabledSigner to BroadcastReader in tests (signer is now non-null).

Made-with: Cursor

* refactor(local-reader): serve cached results for requests with nonce

Made-with: Cursor

* docs: replace signed-response with auth section incl. response signing

Made-with: Cursor

* docs: correct auth section YAML and expand Response Signing note

- docs/reference-configuration.adoc: fix the YAML shape of the auth
  section (server.keys.{provider-private-key,external-public-key} and
  publicKeyOwner) to match AuthorizationConfigReader, and expand the
  Response Signing subsection with the actual signed-message format.
- .gitignore: ignore /demo/response-signing/ (local sandbox with keys
  and generated gRPC stubs — regenerate with generate-keys.sh + protoc)
  and /docs/superpowers/ (specs/plans kept local-only for now). Any
  previously tracked files under these paths are untracked here.

Made-with: Cursor

* feat(upstream): auto-inject secure-signed label when signing is enabled

Expose ResponseSigner.enabled and thread the bean through UpstreamCreator
so Generic/Ethereum/Bitcoin creators can enrich each upstream's labels
with secure-signed=true whenever auth-backed response signing is active.
A user-provided value for the label is preserved.

Made-with: Cursor
2026-04-21 10:33:37 +03:00
..
2023-11-23 00:08:01 +03:00
2024-01-26 14:58:05 +02:00
2024-01-26 14:11:43 +02:00
2024-05-22 11:19:50 +02:00
2023-12-22 11:53:16 +04:00
2023-07-13 14:13:57 +04:00
2023-11-23 00:08:01 +03:00
2024-07-16 11:16:27 +03:00
2024-05-22 11:19:50 +02:00

= Dshackle Documentation

== What is Dshackle

Dshackle is a L7 Load Balancer for Blockchain APIs with automatic discovery, health checking, secure access, TLS with
client authentication, and many other features.It can be configured as an edge proxy, middle proxy or API gateway.

Dshackle provided a high level aggregated API on top of several underlying upstreams (blockchain nodes or providers,
such as DRPC, etc), automatically verifies their availability and the current status of the network,
it routes requests to available node, and makes sure the response is consistent and/or data successfully broadcasted to
the networks.

Example use cases:

- Query for a _transaction_ (block, etc) tries to find it on different nodes and/or retry until it's found or there is
a consistent answer from upstreams
- Getting _nonce_ to send a transaction makes sure it's larges value over several nodes
- Sending _transaction_ distributes it to several nodes in parallel

Availability and fault tolerance:

- Dshackle connects to several upstreams via JSON RPC, Websockets or gRPC protocols
- It verifies if a node ("upstream") is fully synchronized (not in initial sync mode), has enough peers and its height
is not behind other nodes
- If an upstream lags behind, lost peers, started to resync, or simply goes down then Dshackle temporarily excludes it from
routing and returns back when the the upstream's problem is fixed

Main goals:

- stable and fault tolerant access to blockchain nodes
- secure connections and authentication
- allow to build scalable APIs with nodes distributed over multiple data centers

== Table of Content

. xref:01-architecture-intro.adoc[Architecture Overview]
. xref:02-quick-start.adoc[Quick Start]
. xref:03-server-config.adoc[Server Configuration]
. xref:04-upstream-config.adoc[Upstreams Configuration]
. xref:05-start.adoc[How to launch a server]
. xref:06-monitoring.adoc[Logging & Monitoring]
. xref:07-methods.adoc[API methods]
. xref:08-authentication.adoc[Authentication]
. xref:09-quorum-and-selectors.adoc[Quorum and Selectors]
. xref:10-caching.adoc[Caching]

== List of supported chains

Can be found here:  https://drpcorg.github.io/dshackle/networks.html

== Reference

. xref:reference-configuration.adoc[Configuration Reference]

== Chat

Join our https://drpc.org/discord[Discord]

== Links

- Github: https://github.com/drpcorg/dshackle