Skip to content

Oracle Integrations

Ashen ships reference oracle contracts in contracts/ that verify external attestations on-chain. These are Zig contracts intended as production-grade starting points:

  • Pyth: ed25519 publisher attestations
  • RedStone: secp256k1 data package attestations
  • Chainlink OCR2: multi-signature report verification

Each contract manages its own signer set, threshold, and replay protection.

Terminal window
# Build (Zig)
cd contracts/<oracle_contract>
zig build -Doptimize=ReleaseSmall
# Bundle + deploy
node contract bundle \
--elf contracts/<oracle_contract>/zig-out/bin/<oracle_contract> \
--idl contracts/<oracle_contract>/<oracle_contract>.idl \
--out ./oracle.bundle
node contract deploy --bundle ./oracle.bundle --key $ASHEN_PRIVATE_KEY --wait

Contract: contracts/pyth_oracle_v1

Capabilities:

  • Publisher set management with threshold
  • Attestation parsing and median aggregation
  • Timestamp validity window (5 minutes)
  • Replay protection

Attestation format (per contract comments):

  • magic(4) = "PYTH" + version(1) + num_attestations(1)
  • Each attestation: publisher pubkey (32) + signature (64) + feed_id (32) + price (i64 BE) + confidence (u64 BE) + exponent (i32 BE) + publish_time (i64 BE)

Flow:

  1. Initialize owner + threshold
  2. Update publisher set
  3. Submit attestations for verification

Contract: contracts/redstone_oracle_v1

Capabilities:

  • Signer set management with threshold
  • RedStone data package parsing
  • secp256k1 signature verification (EIP-191)
  • Median aggregation
  • Timestamp validity window (15 minutes)
  • Replay protection

Flow:

  1. Initialize owner + threshold
  2. Update signer set (sorted addresses)
  3. Submit RedStone packages for verification

Contract: contracts/chainlink_ocr2_v1

Capabilities:

  • OCR2 report verification
  • Config management (signer set, f)
  • Replay protection
  • Supports up to 31 signers

Flow:

  1. Initialize owner
  2. Set signer configuration (f, signer set)
  3. Verify OCR2 reports
  • Keep signer sets up to date: stale keys will fail verification.
  • Validate timestamps: on-chain windows are strict.
  • Use replay protection: each contract enforces it; don’t reuse packets.
  • Simulate first: use tx_simulate before submission.
  • /contracts/examples/ for oracle contract references
  • /guides/tx-simulation/ for simulation workflow
  • /reference/precompiles/ for crypto syscall details