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

Quest Badgepaused

Issues an EVM attestation when a Solana quest completes. Paused by its owner for a schema change.

quest.badge.v1v1.1.0Arbitrumby Demo author: quest-board
Executions · 7d10
Success rate90.0%
Median latency23.5s
Calling apps1

Interface

ISSUE_BADGE

15–25s to receipt

Issue a badge attestation.

Inputs

questIdstringQuest identifier.
holderaddressRecipient.

Outputs

attestationIdbytes32Attestation UID.
example payload
{
  "questId": "season-3/bridge-101",
  "holder": "0x9d3e7a1c5b8f2d4e6a0c3b7f1e5d9a2c8b4f6e0d"
}

Usage

@wormhook/sdk
simulated
quest-issue_badge.ts
import { WormHookClient } from "@wormhook/sdk";

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

const call = await client.prepareCall({
  hookId: "quest.badge.v1",
  action: "ISSUE_BADGE",
  payload: {
    "questId": "season-3/bridge-101",
    "holder": "0x9d3e7a1c5b8f2d4e6a0c3b7f1e5d9a2c8b4f6e0d"
  },
  ttl: 900,
});

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

Registration

hook id
quest.badge.v1
version
1.1.0
destination
Arbitrum
permissions
Allowlist
spend cap
none (no value moved)
author
Demo author: quest-board0x6910cd…b86f

Routes

  • Solana→Arbitrumdisabled
  • Wormhole 1 → 23 · receipt returns on the same route

Adapter

integration pending
kind
Custom
contract
AttestAdapter0x6a927f…6b16
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/example/quest-board (demo)
commit
5e2f8b0
audit
not audited

Risk notes

  • Paused. New calls are rejected with WH-304.

Versions

  1. 1.1.0current2026-08-25Holder field added.

Allowlisted apps

Execution history

latest 10
All →