Skip to content

Solana Program IDs

DFPN is composed of five on-chain programs deployed to Solana. This page lists the program IDs, PDA derivation seeds, and the Anchor framework version used.


Anchor Version

All programs are built with Anchor 0.30.1.


Devnet Program IDs

These addresses are used on both localnet and devnet during development.

Program ID
Content Registry GokivDYuQXPZCWRkwMhdH2h91KpDQXBEmpgBgs55bnpH
Analysis Marketplace 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin
Model Registry Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS
Worker Registry HmbTLCmaGvZhKnn1Zfa1JVnp7vkMV4DYVxPLWBVoN65L
Rewards 4uQeVj5tqViQh7yWWGStvkEG1Zmhx6uasJtWCJziofM

Testnet and Mainnet

Program IDs will differ on testnet and mainnet once those deployments are live. Check the Roadmap for deployment timelines.


PDA Seeds

DFPN uses Program Derived Addresses (PDAs) to create deterministic, program-owned accounts. Each PDA is derived from a set of seeds and the owning program's ID.

Content Registry

Account Type Seeds Program
Content "content" + content_hash Content Registry
Provenance Claim "content" + content_hash + attestor Content Registry

Analysis Marketplace

Account Type Seeds Program
Request "request" + content_hash + nonce Analysis Marketplace
Fee Vault (Request) "fee_vault" + "request" + content_hash + nonce Analysis Marketplace
Commit "commit" + request_key + operator_key Analysis Marketplace
Reveal "reveal" + request_key + operator_key Analysis Marketplace
Dispute "dispute" + request_key + reveal_key Analysis Marketplace
Fee Vault (Dispute) "fee_vault" + "dispute" + request_key + reveal_key Analysis Marketplace

Worker Registry

Account Type Seeds Program
Worker "worker" + operator_key Worker Registry
Stake Vault "stake_vault" + "worker" Worker Registry

Model Registry

Account Type Seeds Program
Model "model" + developer_key + model_id Model Registry
Stake Vault "stake_vault" + "model" Model Registry

Rewards

Account Type Seeds Program
Treasury "treasury" Rewards
Fee Vault "fee_vault" Rewards
Reward Account "reward" + claimant_key Rewards
Epoch Config "epoch" + treasury_key Rewards

Deriving PDAs in Code

TypeScript (SDK)

import { PublicKey } from '@solana/web3.js';

const PROGRAM_ID = new PublicKey('HmbTLCmaGvZhKnn1Zfa1JVnp7vkMV4DYVxPLWBVoN65L');

// Derive a worker PDA
const [workerPda, bump] = PublicKey.findProgramAddressSync(
  [Buffer.from('worker'), operatorPublicKey.toBuffer()],
  PROGRAM_ID,
);

Rust (Anchor)

use anchor_lang::prelude::*;
use dfpn_shared::seeds;

// In an Anchor account constraint:
#[account(
    seeds = [seeds::WORKER, operator.key().as_ref()],
    bump = worker_account.bump,
)]
pub worker_account: Account<'info, WorkerAccount>,

Seed Constants

All seed strings are defined in the dfpn-shared crate:

Constant Value Used By
CONTENT b"content" Content Registry
REQUEST b"request" Analysis Marketplace
COMMIT b"commit" Analysis Marketplace
REVEAL b"reveal" Analysis Marketplace
WORKER b"worker" Worker Registry
MODEL b"model" Model Registry
TREASURY b"treasury" Rewards
REWARD b"reward" Rewards
STAKE_VAULT b"stake_vault" Worker Registry, Model Registry
FEE_VAULT b"fee_vault" Analysis Marketplace, Rewards
DISPUTE b"dispute" Analysis Marketplace
EPOCH b"epoch" Rewards