Register a condition. The oracle signs a Schnorr attestation when that condition is met. Verifiable offline against the oracle’s x-only pubkey — no trust in this server required.
Two products:
DEAD attestation. Counterparties can verify months later.RELEASED attestation when the condition is confirmed.# 1. Get a PoW challenge
curl https://attest.powforge.dev/api/v1/switch/challenge
# 2. Mine it (sha256(challenge + nonce) must have 18 leading zero bits)
# Use: https://github.com/powforge/pow-attest-client (coming soon)
# Or mine manually in Node:
# node -e "const c=require('crypto'); let n=0;
# while(true){ const h=c.createHash('sha256').update('CHALLENGE'+n).digest('hex');
# if(h.startsWith('0000')){console.log(n);break;} n++; }"
# 3. Register a switch
curl -X POST https://attest.powforge.dev/api/v1/switch \
-H 'Content-Type: application/json' \
-d '{"owner_pubkey":"<64-hex x-only pubkey>","checkin_interval_hours":24,
"pow_challenge":"<challenge>","pow_nonce":"<nonce>"}'
# 4. Check in (prove alive) every interval
curl -X POST https://attest.powforge.dev/api/v1/switch/SWITCH_ID/checkin \
-H 'Content-Type: application/json' \
-d '{"sig":"<128-hex BIP-340 schnorr sig>"}'
# 5. Anyone can read the attestation
curl https://attest.powforge.dev/api/v1/switch/SWITCH_ID
2bc78390c94d8bbb96ac3e6940462ba2812418d871e701c1a845fdb1dfd4a0e5
Attestations signed with this key are verifiable offline using BIP-340 Schnorr verify against DLC/oracle/attestation/v0 tagged hash.
GET /api/v1/info Service manifest + oracle pubkey GET /api/v1/switch/challenge PoW challenge (free) POST /api/v1/switch Register switch (PoW-gated) POST /api/v1/switch/:id/checkin Prove alive (Schnorr-gated) GET /api/v1/switch/:id Read attestation (ALIVE or DEAD) POST /api/v1/bounty Register bug bounty (PoW-gated) GET /api/v1/bounty/:id/announcement Oracle announcement JSON (nonce, pubkey, outcome hash) GET /api/v1/bounty/:id/announcement.tlv OracleAnnouncement binary TLV (dlcspecs type 55332) GET /api/v1/bounty/:id/status Check condition + sign RELEASED if met GET /api/v1/bounty/:id Read bounty record
The /announcement endpoint returns the oracle’s pre-committed nonce (nonce_pubkey = R) and pre-computed outcome_hash. Counterparties can compute the DLC adaptor point T = R + H(R||P||outcome)·P at registration time and sign CET adaptors before the GitHub event occurs. Settlement is trustless: the oracle’s Schnorr scalar s (revealed in the attestation) is the discrete log of T.
Uses dlcspecs BIP-340 attestation format. Compatible with rust-dlc schnorrsig_compute_sig_point.
Full JSON manifest: /api/v1/info — test vectors
Built by PowForge — Bitcoin PoW primitives