Skip to content

Subaccords

A specialized Juror pool. Permissionless to create; one per (creator, risk_type).

create_subaccord params

Param Type Notes
risk_type [u8; 32] Immutable identity hash. != [0;32]. Namespaces the PDA.
evidence_spec [u8; 32] Immutable evidence-format hash. ADR-0006
staking_token Pubkey SPL mint for juror capital. ADR-0002
min_stake u64 Draw eligibility threshold (in staking_token).
jurors_per_dispute u32 Round-0 panel size.
alpha_bps u16 Slash factor in bps. loss = alpha_bps · min_stake / 10_000.
review_window u64 seconds
commit_window u64 seconds
reveal_window u64 seconds
max_appeals u8 ≤ MAX_APPEALS (3).
fee_per_juror u64 in staking_token.
authority Pubkey Pubkey::default() ⇒ immutable. Else signs propose/execute.
evidence_operator Pubkey ADR-0006 re-encryption service.

PDA

["subaccord", creator, risk_type]

Mutability

  • Immutable: risk_type, evidence_spec.
  • Mutable only via 48h timelock (propose_subaccord_updateexecute_subaccord_update): min_stake, jurors_per_dispute, alpha_bps, review/commit/reveal_window, max_appeals, fee_per_juror, authority, evidence_operator.
  • authority == Pubkey::default()propose_subaccord_update reverts with ImmutableSubaccord.
accord::create_subaccord(
    ctx,
    risk_type, evidence_spec, staking_token, min_stake,
    jurors_per_dispute, alpha_bps,
    review_window, commit_window, reveal_window,
    max_appeals, fee_per_juror,
    authority,                  // Pubkey::default() => immutable
    evidence_operator,
)?;
import { createSubaccord, findSubaccordPda } from "@accord/sdk";

const [subaccord] = await findSubaccordPda(
  accord.PROGRAM_ID,
  creator,
  riskType, // 32-byte hash
);
await createSubaccord(accord.adapter, accord.PROGRAM_ID, {
  creator,
  riskType,
  evidenceSpec,
  stakingToken,
  minStake,
  jurorsPerDispute,
  alphaBps,
  reviewWindow,
  commitWindow,
  revealWindow,
  maxAppeals,
  feePerJuror,
  authority,
  evidenceOperator,
});

Why: ADR-0005. Param update flow: ADR-0005, instructions.