IRONQ

SDK Installation

Install and use the ironq-sdk TypeScript package

The ironq-sdk package provides TypeScript types, PDA derivation helpers, and constants for integrating with IronQ.

Install

npm install ironq-sdk
# or
yarn add ironq-sdk

Peer dependencies: @coral-xyz/anchor >=0.30.0, @solana/web3.js >=1.90.0

Usage with Anchor

import { Program } from "@coral-xyz/anchor";
import { Ironq } from "../target/types/ironq";
import idl from "../target/idl/ironq.json";

// Initialize the program client
const program = new Program<Ironq>(idl, provider);

// Create a job
await program.methods
  .createJob(rewardAmount, dataHash, priority, maxRetries)
  .accountsPartial({
    creator,
    queue,
    job,
    creatorTokenAccount,
    vault,
    tokenProgram,
    systemProgram,
  })
  .rpc();

// Fetch a job account (fully typed)
const job = await program.account.job.fetch(jobPDA);
console.log(job.status); // { open: {} } | { claimed: {} } | ...

Types

import type { QueueConfig, Job, Worker, JobResult, JobStatus } from "ironq-sdk";

JobStatus

type JobStatus =
  | { open: {} }
  | { claimed: {} }
  | { submitted: {} }
  | { completed: {} }
  | { disputed: {} }
  | { expired: {} }
  | { cancelled: {} };

QueueConfig

interface QueueConfig {
  version: number;
  authority: PublicKey;
  rewardMint: PublicKey;
  arbiter: PublicKey;
  vault: PublicKey;
  minWorkerStake: BN;
  jobTimeout: BN;
  slashRateBps: number;
  crankRewardBps: number;
  totalJobsCreated: BN;
  totalActiveWorkers: number;
  isPaused: boolean;
  maxConcurrentJobs: number;
  pendingAuthority: PublicKey | null;
  bump: number;
}

Job

interface Job {
  version: number;
  queue: PublicKey;
  jobId: BN;
  creator: PublicKey;
  worker: PublicKey;
  status: JobStatus;
  rewardAmount: BN;
  dataHash: number[];
  createdAt: BN;
  claimedAt: BN;
  deadline: BN;
  priority: number;
  maxRetries: number;
  retryCount: number;
  bump: number;
}

Worker

interface Worker {
  version: number;
  queue: PublicKey;
  wallet: PublicKey;
  stakeAmount: BN;
  jobsCompleted: number;
  jobsFailed: number;
  totalEarned: BN;
  activeJobs: number;
  maxConcurrentJobs: number;
  isActive: boolean;
  registeredAt: BN;
  bump: number;
}

JobResult

interface JobResult {
  version: number;
  job: PublicKey;
  worker: PublicKey;
  resultHash: number[];
  submittedAt: BN;
  bump: number;
}

Constants

import { PROGRAM_ID, SEEDS } from "ironq-sdk";

PROGRAM_ID; // PublicKey: J6GjTDeKugyMhFEuTYnEbsBCVSHsPimmbHcURbJ3wtrQ
SEEDS.QUEUE;   // Buffer.from("queue")
SEEDS.VAULT;   // Buffer.from("vault")
SEEDS.JOB;     // Buffer.from("job")
SEEDS.WORKER;  // Buffer.from("worker")
SEEDS.RESULT;  // Buffer.from("result")