Cross-chain execution protocol
WORMHOOK
Cross-chain execution for hooks.
Bring hooks to Solana. Powered by IMD.
Solana applications invoke registered EVM and IMD hooks through Wormhole and get an execution receipt back on Solana. Every call has an ID, and every stage has evidence.
- SOLANA8Qs…a91
- HookCall #18291
- WORMHOLEmessage verified
- executor delivery
- ETHEREUMimd.research.v1
- IMDAdapter
- EXECUTEDtx 0x9f3c…a61b
- receipt · return path
- RECEIPT RETURNED ✓status success · 41.2s
Recent executions
newest first| Status | Call ID | Hook | Route | Created | Latency | Receipt |
|---|---|---|---|---|---|---|
| Pending | 0x39f594…2128#17594 | imd.research.v1START_RESEARCH | SOL→ETH | 8s ago | in flight | pending |
| Relaying | 0x69e85b…8508#17461 | demo.echo.v1ECHO | SOL→BASE | 19s ago | in flight | pending |
| Returning | 0xc83719…dbee#17595 | imd.pool4.v1CONTRIBUTE | SOL→ETH | 31s ago | in flight | pending |
| Success | 0x2a8aec…eefa#17445 | nft.mint-mirror.v2MINT_MIRROR | SOL→BASE | 44s ago | 25.6s | ✓ returned |
| Relaying· delayed | 0xf582c9…ff86#17597 | imd.build.v1START_BUILD | SOL→ETH | 3m ago | in flight | pending |
| Success | 0x9aebee…fbce#18291 | imd.research.v1START_RESEARCH | SOL→ETH | 4m ago | 39.7s | ✓ returned |
| Success | 0x9c62a5…5c67#17484 | imd.swarm.v1DISPATCH_SWARM | SOL→ETH | 26m ago | 44.1s | ✓ returned |
| Success | 0xeecd26…2323#17456 | demo.echo.v1ECHO | SOL→BASE | 34m ago | 27.4s | ✓ returned |
- Pending8s agoimd.research.v1SOL→ETH0x39f59474…8d2128 · #17594in flight
- Relaying19s agodemo.echo.v1SOL→BASE0x69e85ba8…4b8508 · #17461in flight
- Returning31s agoimd.pool4.v1SOL→ETH0xc8371908…a7dbee · #17595in flight
- Success44s agonft.mint-mirror.v2SOL→BASE0x2a8aec54…a8eefa · #1744525.6s
- Relaying· delayed3m agoimd.build.v1SOL→ETH0xf582c98b…84ff86 · #17597in flight
- Success4m agoimd.research.v1SOL→ETH0x9aebeef7…c3fbce · #1829139.7s
- Success26m agoimd.swarm.v1SOL→ETH0x9c62a55d…0a5c67 · #1748444.1s
- Success34m agodemo.echo.v1SOL→BASE0xeecd26f2…292323 · #1745627.4s
Routes
24h- Solana→Ethereumdegradedp50 41.3sok 90%33 calls
- Solana→Baseoperationalp50 26.4sok 94%19 calls
- Solana→Arbitrumoperationalp50 22.6sok 100%1 calls
- Ethereum→Solanaplanned
EVM-initiated calls into Solana. Not in v1 scope.
Registry
Registered hooks
Every hook has a namespaced ID, a version, an adapter, declared actions, permissions and a spend policy. Breaking changes ship as a new ID.
Starts an IMD research job from a Solana app. The call carries the research query and a capped budget; the receipt returns the job ID and an output hash the app can verify against the published result.
Submits a build job (spec → artifact) to IMD. Returns a job ID and the artifact hash once the job is accepted.
Dispatches a task to a swarm of IMD workers. Sub-jobs can be accepted independently, so this hook can return partial receipts.
Routes contributions into POOL4 with CappedBurn semantics. The cap is enforced on the destination; the receipt reports the amount actually burned.
Reference hook maintained by WORMHOOK. Returns the payload hash and block number. Use it to test routes end to end without spending anything.
Rebalances an EVM-side vault to target weights. Demo custom hook showing an allowlisted, spend-capped integration.
SDK
Three calls from Solana to a receipt.
Prepare a HookCall, send it, wait for the receipt. In the skeleton, simulate() runs the full ten-stage lifecycle locally, so you can build against the final API today.
- 01
prepareCall()Builds the HookCall, hashes the payload, and derives the call ID and expiry.
- 02
simulate()Plays every stage: source tx, VAA, delivery, verification, execution and receipt.
- 03
waitForReceipt()Resolves with success, partial or failed. Every outcome is a receipt.
import { WormHookClient } from "@wormhook/sdk";
const client = new WormHookClient({ network: "devnet", appId: IMDHOOKS_APP_ID });
const call = await client.prepareCall({
hookId: "imd.research.v1",
action: "START_RESEARCH",
payload: { query: "Validator client diversity, Q3 2026", depth: "standard", budget: "40" },
maxSpend: "40",
});
const execution = await client.simulate(call); // local simulation in the skeleton
const receipt = await execution.waitForReceipt(); // { status: "success", outputHash, ... }Architecture
Wormhole carries the message. WORMHOOK defines what happens at each end.
A router on Solana validates the caller and posts a message. Guardians sign it, an executor delivers it, and a gateway on EVM verifies it and runs the registered hook through its adapter. The receipt goes home on the same rails.
- HookCalleryour program / client
- plannedWormHookRoutervalidates caller · posts message
- Wormhole Coremessage posted
- Guardians13/19 signatures → VAA
- Executordelivery to destination
- plannedWormHookGatewayverify · replay · expiry · caps
- plannedHookRegistryhookId → adapter, permissions
- plannedAdapterIMD · POOL4 · Custom
- Hookexecutes action
Powered by IMD
IMD is the first set of hooks.
IMD runs research, build and swarm jobs and operates POOL4. WORMHOOK makes those capabilities callable from Solana: IMDHOOKS is the Solana app, and the imd.* hooks are the destination.
The protocol is hook-agnostic. Anyone can register a custom adapter, and IMD gets no special path through the gateway.
- imd.research.v1
Starts an IMD research job from a Solana app.
START_RESEARCH · CANCEL_RESEARCH
- imd.build.v1
Submits a build job (spec → artifact) to IMD.
START_BUILD
- imd.swarm.v1
Dispatches a task to a swarm of IMD workers.
DISPATCH_SWARM
- imd.pool4.v1
Routes contributions into POOL4 with CappedBurn semantics.
CONTRIBUTE · CAPPED_BURN
Security preview
What the gateway will enforce, and what isn't real yet.
These are design commitments for phase 2, not shipped guarantees. Nothing here is audited.
Call IDs are derived from source app, nonce and payload hash. The gateway rejects a consumed ID (WH-302).
Every HookCall carries an expiry. Late deliveries are refused, never executed late (WH-201).
maxSpend is bounded by both the hook's per-call cap and the app's daily cap (WH-306).
Reverts are caught at the gateway and returned as failed receipts, so Solana state never hangs.