Compromise a gateway
You get a traffic router with no chain keys and no signing authority.
A Smart Engines deployment is not one program. It’s three cooperating applications, layered so that the dangerous part — the cryptography and the chain keys — lives in exactly one place and everything else delegates to it. This separation is a security decision, not just an organizational one. The three tiers are the permanent architecture of the network.
| Tier | Signs or submits chain transactions? | Holds chain key material? |
|---|---|---|
| Validator | Yes — the only tier that does | Yes — its shares of DKG keys plus its own key for each chain; never enough to sign for an entity alone |
| Host | No — delegates to the validator | No |
| Gateway | No | No |
The validator is the only tier that signs and submits chain transactions. It holds the chain adapters — Hedera and XRPL today — runs DKG ceremonies, participates in TSS signing, and stores its cryptographic shares encrypted at rest. Every chain operation — create an account, mint a token, sign a transaction — funnels through here.
Validators run in a cluster of N nodes. They coordinate ceremonies over an internal message bus and publish governance and rules to Hedera HCS for a tamper-evident audit trail.
The host turns validators into a usable Backend-as-a-Service. It provides wallet-based auth, a database layer with trustless Merkle proofs, IPFS-backed storage, sandboxed functions, and real-time messaging. If the validator is the low-level chain runtime, the host is the “Firebase for blockchain apps” built on top of it.
The host holds no chain keys and signs no chain transactions. It reads some public ledger state directly, such as a customer’s subscription NFTs on XRPL. Any chain operation that needs a signature — preparing or submitting a transaction — it requests from the validator.
The gateway is a thin routing layer in front of the host/validator clusters. It terminates TLS, discovers hosts, and load-balances requests across healthy, verified hosts. Certificate automation for custom domains is built, not yet enabled.
Host discovery is gossip, and gossip is only a hint: before a host gets any traffic, the gateway sends it a challenge that the host must sign with its identity key, and it repeats that check every 24 hours.
%%{init: {'flowchart':{'htmlLabels':true,'curve':'basis'}}}%%
flowchart TD
Client["Client<br/>SDK / dApp"]
subgraph Cluster["One Smart Engines cluster"]
Gateway["smart-gateway<br/>TLS · load-balancing<br/>host discovery"]
Host["smart-host<br/>auth · database · storage<br/>functions · messaging"]
Validator["smart-validator<br/>DKG · TSS · chain adapters<br/>governance · subscriptions"]
subgraph Adapters["Chain adapters (validator only)"]
CH["Hedera (live)"]
CX["XRPL (live)"]
CO["Solana · Polkadot · Stellar · Bitcoin<br/>(coming next)"]
end
subgraph Infra["Per-cluster infrastructure"]
Bus{{"Message bus<br/>DKG · TSS · gossip"}}
DB[("Database<br/>encrypted shares")]
Cache[("Cache")]
IPFS[("IPFS storage")]
end
end
Client --> Gateway --> Host --> Validator
Validator --> CH & CX
Validator -.-> CO
Validator -.-> Bus
Validator -.-> DB
Validator -.-> Cache
Host -.-> IPFS
Host -.-> DB
Gateway -.-> Bus
CH --> HN[("Hedera")]
CX --> XN[("XRPL")]
There are two distinct conversations happening.
A request flows down the tiers and a result flows back up.
%%{init: {'sequence':{'showSequenceNumbers':true}}}%%
sequenceDiagram
participant C as Client
participant G as Gateway
participant H as Host
participant V as Validator
participant Chain as Blockchain
C->>G: HTTPS request
G->>G: resolve which host (load-balance)
G->>H: route to healthy host
H->>H: authenticate, check subscription
H->>V: delegate chain operation
V->>V: collect threshold signatures (TSS)
V->>Chain: submit signed transaction
Chain-->>V: receipt
V-->>H: result
H-->>G: response
G-->>C: HTTPS response
Validators don’t sign alone — a quorum coordinates over the cluster’s internal message bus. The same bus carries DKG ceremony messages, TSS partial-signature collection, and the gossip that tells gateways which hosts exist. Gossip is not trusted: a gateway routes to a host only after the host has passed the gateway’s signed challenge.
The gateway picks a host using one of several load-balancing strategies — round-robin, weighted, geographic, least-connections, random, or IP-hash. It learns about hosts from gossip rather than a static config, then verifies each one itself before routing to it.
The tier boundary is a blast-radius boundary:
Compromise a gateway
You get a traffic router with no chain keys and no signing authority.
Compromise a host
You get a BaaS frontend with no chain keys and no signing authority.
Compromise one validator
You get single shares, and one member key per chain — below the threshold, so useless on their own (see DKG & TSS).
There is no single machine anywhere in the stack that, if breached, lets an attacker forge a signature.