Skip to content
Mainnet Live. All executions, addresses and hashes are live.
WORMHOOK

IMD Researchactive

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.

imd.research.v1v1.2.0Ethereumby IMD
Executions · 7d30
Success rate96.6%
Median latency41.1s
Calling apps1

Interface

START_RESEARCH

35–50s to receipt

Queue a research job. Budget is reserved up to maxSpend and only the used portion is spent.

Inputs

querystringResearch prompt. 2,000 characters max.
depth"quick" | "standard" | "deep"Work tier. Deeper tiers use more budget.
budgetdecimal stringUpper bound in IMD. Must be ≤ HookCall.maxSpend.
tag?stringOpaque caller tag echoed in the receipt.

Outputs

jobIdbytes8IMD job identifier.
acceptedboolWhether the job was queued.
estimatedSeconds?uint32Queue estimate at acceptance time.
example payload
{
  "query": "Summarise validator client diversity on Solana mainnet, Q3 2026",
  "depth": "standard",
  "budget": "40",
  "tag": "imdhooks:session-77"
}

CANCEL_RESEARCH

35–50s to receipt

Cancel a queued job and release unused budget.

Inputs

jobIdbytes8Job returned by START_RESEARCH.

Outputs

refundeddecimal stringBudget released, in IMD.
example payload
{
  "jobId": "0x5c1e09a2d4f7b311"
}

Usage

@wormhook/sdk
simulated
imd-start_research.ts
import { WormHookClient } from "@wormhook/sdk";

const client = new WormHookClient({ network: "devnet", appId: YOUR_APP_ID });

const call = await client.prepareCall({
  hookId: "imd.research.v1",
  action: "START_RESEARCH",
  payload: {
    "query": "Summarise validator client diversity on Solana mainnet, Q3 2026",
    "depth": "standard",
    "budget": "40",
    "tag": "imdhooks:session-77"
  },
  maxSpend: "250", // ≤ per-call cap (250 IMD)
  ttl: 900,
});

const execution = await client.simulate(call);
const receipt = await execution.waitForReceipt();

Registration

hook id
imd.research.v1
version
1.2.0
destination
Ethereum
permissions
Allowlist
spend cap
250 IMD / call
author
IMD0x35167b…3957

Routes

  • Solana→Ethereumenabled
  • Wormhole 1 → 2 · receipt returns on the same route

Adapter

integration pending
kind
IMD
contract
IMDAdapter0xe864ac…8518
IWormHookAdapter.solconceptual
// Conceptual: final interface is defined in phase 2 (CORE_TECH_PLAN.md §Adapters)
interface IWormHookAdapter {
    function execute(
        bytes32 callId,
        bytes calldata payload
    ) external returns (bytes memory output);
}

Source & audit

repository
github.com/imd/wormhook-adapters (placeholder)
commit
a4c91e0
audit
audit planned

Risk notes

  • Budget is reserved at execution and settled when the job completes. The receipt reports the reserved-then-spent amount, not a final invoice.
  • Output hash commits to the job result, not to its correctness.
  • Adapter is upgradeable by the IMD admin key during the pilot (planned: timelock).

Versions

  1. 1.2.0current2026-09-18Adds optional tag echo in receipt.
  2. 1.1.02026-08-30CANCEL_RESEARCH action.
  3. 1.0.02026-08-02Initial registration.

Allowlisted apps

Execution history

latest 10
All →