/** * Program IDL in camelCase format in order to be used in JS/TS. * * Note that this is only a type helper and is not the actual IDL. The original * IDL can be found at `@tetsuo-ai/protocol/idl/agenc_coordination.json`. */ type AgencCoordination = { "address": "HJsZ53Zb27b8QMRbQpuDngE44AdwCGxvEZr61Zmxw1xK"; "metadata": { "name": "agencCoordination"; "version": "0.1.0"; "spec": "0.1.0"; "description": "AgenC Decentralized Agent Coordination Protocol for Solana"; "repository": "https://github.com/tetsuo-ai/agenc-protocol"; }; "instructions": [ { "name": "acceptBid"; "docs": [ "Accept a Marketplace V2 bid and convert it into a normal task claim." ]; "discriminator": [ 196, 191, 1, 229, 144, 172, 122, 227 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "claim"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "bidder"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "bidBook"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100, 95, 98, 111, 111, 107 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "bid"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "bidder"; } ]; }; }, { "name": "bidderMarketState"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100, 100, 101, 114, 95, 109, 97, 114, 107, 101, 116 ]; }, { "kind": "account"; "path": "bidder"; } ]; }; }, { "name": "bidder"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "bidder.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "taskJobSpec"; "docs": [ "Published, moderation-gated job spec for this task (PDA [\"task_job_spec\", task]).", "Required so a bid can only be accepted for work that passed moderation at", "publish time — `set_task_job_spec` is the only way this account can exist and", "it hard-requires a publishable `task_moderation`. This gates `accept_bid`", "before InProgress (spec §6) at parity with `claim_task_with_job_spec`, which", "makes the legacy no-job-spec assignment path unreachable." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 106, 111, 98, 95, 115, 112, 101, 99 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "moderationBlock"; "docs": [ "Canonical content-hash BLOCK floor, rechecked at assignment time so a", "takedown recorded after the bid was created prevents acceptance." ]; }, { "name": "creator"; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "expectedBidTermsHash"; "type": { "array": [ "u8", 32 ]; }; } ]; }, { "name": "acceptTaskResult"; "docs": [ "Accept a creator-reviewed submission and settle rewards." ]; "discriminator": [ 89, 230, 51, 25, 0, 219, 5, 137 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "claim"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "worker"; } ]; }; }, { "name": "escrow"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 101, 115, 99, 114, 111, 119 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskValidationConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 118, 97, 108, 105, 100, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskSubmission"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 115, 117, 98, 109, 105, 115, 115, 105, 111, 110 ]; }, { "kind": "account"; "path": "claim"; } ]; }; }, { "name": "worker"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "worker.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "treasury"; "writable": true; }, { "name": "creator"; "docs": [ "this signer becomes the permissionless timeout crank after review_deadline_at;", "the actual creator/rent recipient is then carried in the otherwise-unused", "writable `operator` slot and revalidated in the handler." ]; "writable": true; "signer": true; }, { "name": "workerAuthority"; "writable": true; }, { "name": "hireRecord"; "docs": [ "direct tasks pass the empty system-owned PDA. Requiring the address prevents", "legacy hired tasks from omitting their unstamped operator/referrer fee terms." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 104, 105, 114, 101 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "operator"; "docs": [ "when the task carries a non-zero operator fee (a listing hire); receives the", "operator fee leg in SOL." ]; "writable": true; "optional": true; }, { "name": "referrer"; "docs": [ "4-way split). Required only when the task carries a non-zero referrer fee;", "receives the referrer fee leg in SOL." ]; "writable": true; "optional": true; }, { "name": "creatorCompletionBond"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, 95, 98, 111, 110, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "creator"; } ]; }; }, { "name": "workerCompletionBond"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, 95, 98, 111, 110, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "workerAuthority"; } ]; }; }, { "name": "tokenEscrowAta"; "writable": true; "optional": true; }, { "name": "workerTokenAccount"; "writable": true; "optional": true; }, { "name": "treasuryTokenAccount"; "writable": true; "optional": true; }, { "name": "rewardMint"; "optional": true; }, { "name": "tokenProgram"; "optional": true; "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": []; }, { "name": "applyDisputeSlash"; "docs": [ "Apply slashing to a worker after losing a dispute." ]; "discriminator": [ 195, 168, 20, 83, 250, 122, 11, 187 ]; "accounts": [ { "name": "dispute"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 100, 105, 115, 112, 117, 116, 101 ]; }, { "kind": "account"; "path": "dispute.dispute_id"; "account": "dispute"; } ]; }; }, { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "workerClaim"; "docs": [ "The losing worker's claim. resolve_dispute deliberately DEFERS closing this when a", "slash is pending (fix #838) so this finalizer can re-validate it; this instruction", "is the designated finalizer, so it closes the claim and returns its rent to the", "worker authority (audit: previously left read-only, permanently stranding the rent", "the non-slash path returns)." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "worker_claim.worker"; "account": "taskClaim"; } ]; }; }, { "name": "workerAgent"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "worker_agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "workerAuthority"; "docs": [ "against worker_agent.authority so the rent cannot be redirected." ]; "writable": true; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "treasury"; "writable": true; }, { "name": "authority"; "signer": true; }, { "name": "escrow"; "docs": [ "Escrow PDA for the disputed task (kept open until slash for token disputes)" ]; "writable": true; "optional": true; }, { "name": "tokenEscrowAta"; "docs": [ "Token escrow ATA holding deferred slash amount" ]; "writable": true; "optional": true; }, { "name": "treasuryTokenAccount"; "docs": [ "Treasury token ATA receiving slashed tokens" ]; "writable": true; "optional": true; }, { "name": "rewardMint"; "docs": [ "SPL mint for task rewards (must match task.reward_mint)" ]; "optional": true; }, { "name": "tokenProgram"; "docs": [ "SPL Token program" ]; "optional": true; "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; }, { "name": "creator"; "docs": [ "settlement path (the creator funded both at create_task; EVERY other close", "path in the program returns this rent to the creator — resolve_dispute,", "cancel_task, expire_dispute, close_task, reject_frozen_exits). Required", "whenever the settlement branch runs; validated against task.creator.", "Optional in the IDL so SOL-task callers can omit it." ]; "writable": true; "optional": true; } ]; "args": []; }, { "name": "applyInitiatorSlash"; "docs": [ "Apply slashing to a dispute initiator when their dispute is rejected.", "This provides symmetric slashing: workers are slashed for bad work,", "initiators are slashed for frivolous disputes." ]; "discriminator": [ 63, 59, 40, 189, 124, 61, 159, 168 ]; "accounts": [ { "name": "dispute"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 100, 105, 115, 112, 117, 116, 101 ]; }, { "kind": "account"; "path": "dispute.dispute_id"; "account": "dispute"; } ]; }; }, { "name": "initiatorAgent"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "initiator_agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "treasury"; "writable": true; }, { "name": "authority"; "signer": true; } ]; "args": []; }, { "name": "assignDisputeResolver"; "docs": [ "Assign a wallet to the dispute-resolver roster. The protocol authority proposes", "the change and the configured M-of-N owners approve it. The assigned wallet may", "then call `resolve_dispute` directly — no per-case vote tally or quorum." ]; "discriminator": [ 64, 252, 49, 0, 45, 0, 58, 14 ]; "accounts": [ { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "disputeResolver"; "docs": [ "Roster entry for `resolver`. `init` ⇒ assigning an already-assigned wallet fails." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 100, 105, 115, 112, 117, 116, 101, 95, 114, 101, 115, 111, 108, 118, 101, 114 ]; }, { "kind": "arg"; "path": "resolver"; } ]; }; }, { "name": "authority"; "docs": [ "Must be the protocol authority (the roster proposal is authority-bound;", "configured M-of-N approval arrives through remaining accounts)." ]; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "resolver"; "type": "pubkey"; } ]; }, { "name": "assignModerationAttestor"; "docs": [ "Assign a wallet to the moderation-attestor roster (authority-only, P6.8). The", "assigned wallet may then record moderation attestations", "(`record_task_moderation` / `record_listing_moderation`) in addition to the single", "global moderation authority. Registry MECHANISM only — the neutrality model is a", "separate [HUMAN] decision (`docs/MODERATION_NEUTRALITY.md`)." ]; "discriminator": [ 236, 52, 254, 148, 54, 97, 130, 25 ]; "accounts": [ { "name": "moderationConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 99, 111, 110, 102, 105, 103 ]; } ]; }; }, { "name": "moderationAttestor"; "docs": [ "Roster entry for `attestor`. `init` ⇒ assigning an already-assigned wallet fails." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 97, 116, 116, 101, 115, 116, 111, 114 ]; }, { "kind": "arg"; "path": "attestor"; } ]; }; }, { "name": "authority"; "docs": [ "Must be the moderation authority that owns the moderation config. Unlike the", "threshold-approved dispute-resolver roster, this moderation roster remains", "authority-managed under its separate trust model." ]; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "attestor"; "type": "pubkey"; } ]; }, { "name": "autoAcceptTaskResult"; "docs": [ "Permissionlessly auto-accept a creator-reviewed submission after timeout." ]; "discriminator": [ 217, 200, 76, 0, 144, 80, 23, 241 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "claim"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "worker"; } ]; }; }, { "name": "escrow"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 101, 115, 99, 114, 111, 119 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskValidationConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 118, 97, 108, 105, 100, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskSubmission"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 115, 117, 98, 109, 105, 115, 115, 105, 111, 110 ]; }, { "kind": "account"; "path": "claim"; } ]; }; }, { "name": "worker"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "worker.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "treasury"; "writable": true; }, { "name": "creator"; "writable": true; }, { "name": "workerAuthority"; "writable": true; }, { "name": "hireRecord"; "docs": [ "F-10). auto_accept is PERMISSIONLESS: taking this as an optional account let", "anyone (including the worker, self-cranking after the review window) skip the", "operator/referrer legs on a pre-stamp hired task by simply omitting it. A", "live (program-owned) record forces the legs; for a non-hired task the caller", "passes the empty, system-owned PDA. Live-vs-absent is decided by `owner` in", "the handler, exactly like resolve_dispute's always-required hire_record." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 104, 105, 114, 101 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "operator"; "docs": [ "when the task carries a non-zero operator fee; receives the operator leg (SOL)." ]; "writable": true; "optional": true; }, { "name": "referrer"; "docs": [ "4-way split). Required only when the task carries a non-zero referrer fee;", "receives the referrer leg (SOL)." ]; "writable": true; "optional": true; }, { "name": "creatorCompletionBond"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, 95, 98, 111, 110, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "creator"; } ]; }; }, { "name": "workerCompletionBond"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, 95, 98, 111, 110, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "workerAuthority"; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; }, { "name": "tokenEscrowAta"; "writable": true; "optional": true; }, { "name": "workerTokenAccount"; "writable": true; "optional": true; }, { "name": "treasuryTokenAccount"; "writable": true; "optional": true; }, { "name": "rewardMint"; "optional": true; }, { "name": "tokenProgram"; "optional": true; "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": []; }, { "name": "cancelBid"; "docs": [ "Cancel an open or parked Marketplace V2 bid." ]; "discriminator": [ 40, 243, 190, 217, 208, 253, 86, 206 ]; "accounts": [ { "name": "task"; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "bidBook"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100, 95, 98, 111, 111, 107 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "bid"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "bidder"; } ]; }; }, { "name": "bidderMarketState"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100, 100, 101, 114, 95, 109, 97, 114, 107, 101, 116 ]; }, { "kind": "account"; "path": "bidder"; } ]; }; }, { "name": "bidder"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "bidder.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; } ]; "args": []; }, { "name": "cancelDispute"; "docs": [ "Cancel a dispute before any votes are cast.", "Only the dispute initiator can cancel, and only if no arbiter has voted yet." ]; "discriminator": [ 23, 155, 220, 94, 76, 141, 231, 124 ]; "accounts": [ { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "dispute"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 100, 105, 115, 112, 117, 116, 101 ]; }, { "kind": "account"; "path": "dispute.dispute_id"; "account": "dispute"; } ]; }; }, { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "authority"; "docs": [ "Only the initiator's authority can cancel" ]; "signer": true; } ]; "args": []; }, { "name": "cancelProposal"; "docs": [ "Cancel a governance proposal before any votes are cast.", "Only the proposer's authority can cancel." ]; "discriminator": [ 106, 74, 128, 146, 19, 65, 39, 23 ]; "accounts": [ { "name": "proposal"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 112, 111, 115, 97, 108 ]; }, { "kind": "account"; "path": "proposal.proposer"; "account": "proposal"; }, { "kind": "account"; "path": "proposal.nonce"; "account": "proposal"; } ]; }; }, { "name": "authority"; "signer": true; } ]; "args": []; }, { "name": "cancelTask"; "docs": [ "Cancel an unclaimed or expired task and reclaim funds." ]; "discriminator": [ 69, 228, 134, 187, 134, 105, 238, 48 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "escrow"; "docs": [ "cancellation can surface protocol-specific errors before Anchor account loading." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 101, 115, 99, 114, 111, 119 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; }, { "name": "tokenEscrowAta"; "docs": [ "Token escrow ATA holding reward tokens (optional)" ]; "writable": true; "optional": true; }, { "name": "creatorTokenAccount"; "docs": [ "Creator's token account to receive refund (optional)" ]; "writable": true; "optional": true; }, { "name": "rewardMint"; "docs": [ "SPL token mint (optional, must match task.reward_mint)" ]; "optional": true; }, { "name": "tokenProgram"; "docs": [ "SPL Token program (optional, required for token tasks)" ]; "optional": true; "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; }, { "name": "creatorCompletionBond"; "docs": [ "(== authority); refunded on cancel by settle_completion_bond." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, 95, 98, 111, 110, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "authority"; } ]; }; }, { "name": "workerCompletionBond"; "docs": [ "Forfeited to the creator ONLY when that wallet is a live no-show claimant", "(audit F-1); otherwise refunded to the poster." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, 95, 98, 111, 110, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "workerBondAuthority"; } ]; }; }, { "name": "workerBondAuthority"; "docs": [ "== bond.party, and the no-show forfeit additionally binds it to a live claim", "(audit F-1)." ]; "writable": true; }, { "name": "creatorAgent"; "docs": [ "OPTIONAL (P6.6): the cancelling creator's own agent registration, used to key the", "track-record aggregate. Constrained to `authority` so a caller can only attribute", "the cancel to THEIR OWN agent (no record-poisoning of a third party). Pass together", "with `agent_stats`. Full-surface only — gated so the frozen canary account list for", "`cancel_task` is unchanged." ]; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "creator_agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "agentStats"; "docs": [ "OPTIONAL (P6.6): the creator agent's track-record aggregate. When supplied (with", "`creator_agent`), a cancel bumps `total_cancelled`. Bound to", "`[\"agent_stats\", creator_agent]`, created lazily on first write. Telemetry only." ]; "writable": true; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116, 95, 115, 116, 97, 116, 115 ]; }, { "kind": "account"; "path": "creatorAgent"; } ]; }; }, { "name": "treasury"; "docs": [ "Receives the FORFEITED contest entry-deposit surplus of every no-show", "claim drained by this cancel (never refunded to the squatter) — the same", "rule as expire_claim / reclaim_terminal_claim, so the deposit prices", "squatting on EVERY no-show exit. Required whenever a drained claim carries", "a deposit; enforced in the handler. Full-surface only — canary builds are", "contest-incapable, so the frozen canary account list is unchanged." ]; "writable": true; "optional": true; } ]; "args": []; }, { "name": "claimTask"; "docs": [ "Claim a task to signal intent to work on it.", "Agent must have required capabilities and task must be claimable." ]; "discriminator": [ 49, 222, 219, 238, 155, 68, 221, 136 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "claim"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "worker"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "worker"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "worker.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; "relations": [ "worker" ]; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": []; }, { "name": "claimTaskWithJobSpec"; "docs": [ "Claim a task only when its content-addressed job specification pointer exists." ]; "discriminator": [ 230, 40, 107, 109, 208, 228, 175, 31 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "taskJobSpec"; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 106, 111, 98, 95, 115, 112, 101, 99 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "hireRecord"; "docs": [ "owner, discriminator, task binding, and designated provider when live.", "A live record designates the only", "provider agent allowed to claim; a direct task supplies the empty system", "account at the same PDA. Full surface only because listing hires are not", "part of the canary program." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 104, 105, 114, 101 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "legacyListing"; "docs": [ "Legacy fallback for pre-hardening HireRecords whose former reserved field", "is zero. When needed, this must be the exact stored ServiceListing and the", "handler derives the designated provider from its immutable provider_agent." ]; "optional": true; }, { "name": "moderationBlock"; "docs": [ "Canonical content-hash BLOCK floor. Rechecked at assignment time so a", "takedown recorded after publication actually stops new work." ]; }, { "name": "claim"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "worker"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "worker"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "worker.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; "relations": [ "worker" ]; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": []; }, { "name": "clearModerationBlock"; "docs": [ "Clear a takedown block (P1.2 §5.2, multisig-gated). The block account stays", "open as the audit trail; the hash becomes consumable again at the gates." ]; "discriminator": [ 210, 192, 192, 105, 106, 74, 147, 252 ]; "accounts": [ { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "moderationBlock"; "docs": [ "Seeded by its own stored `content_hash` (canonical PDA). Stays open after the", "clear — the on-chain audit trail of the takedown." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 98, 108, 111, 99, 107 ]; }, { "kind": "account"; "path": "moderation_block.content_hash"; "account": "moderationBlock"; } ]; }; }, { "name": "authority"; "signer": true; } ]; "args": []; }, { "name": "closeStore"; "docs": [ "Close a store identity PDA (owner-only, P5.2), refunding rent + bond in", "full. No exit cooldown: nothing money-bearing consumes `Store` in v1." ]; "discriminator": [ 87, 18, 213, 192, 63, 136, 65, 205 ]; "accounts": [ { "name": "store"; "docs": [ "`close = owner` refunds rent + the bond (held as excess lamports on the", "PDA) to the owner in one step — never confiscatable, owner-only." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 116, 111, 114, 101 ]; }, { "kind": "account"; "path": "owner"; } ]; }; }, { "name": "owner"; "writable": true; "signer": true; "relations": [ "store" ]; } ]; "args": []; }, { "name": "closeTask"; "docs": [ "Clean supplied children of a terminal task while retaining the rent-exempt", "Task as a durable liveness anchor for any children not supplied." ]; "discriminator": [ 55, 234, 77, 69, 245, 208, 54, 167 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "taskJobSpec"; "docs": [ "Optional leftover job-spec pointer for this task. When provided it is closed", "alongside the task so its rent is reclaimed too. Bound to this task by seeds", "+ constraint so a caller cannot close another task's pointer." ]; "writable": true; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 106, 111, 98, 95, 115, 112, 101, 99 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "escrow"; "docs": [ "Optional already-settled escrow PDA. `resolve_dispute` can leave a token", "task's state escrow open after draining it and setting `is_closed = true`;", "provide it here to reclaim its rent. A pending token reserve is still marked", "open and is rejected until its slash finalizer runs. Bound to this task by", "seeds + constraint." ]; "writable": true; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 101, 115, 99, 114, 111, 119 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "hireRecord"; "docs": [ "Hire link PDA for this task. ALWAYS required — the caller passes the derived", "[\"hire\", task] address even for non-hired tasks (where it is an empty system", "account). close_task decides from the on-chain owner whether a live hire must", "be settled, so a caller cannot dodge the capacity decrement by omitting it.", "the handler, and a live record is deserialized + validated there." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 104, 105, 114, 101 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "listing"; "docs": [ "Source listing, required when a live hire link is present, so its `open_jobs`", "capacity counter can be decremented. Verified against `hire_record.listing`." ]; "writable": true; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 101, 114, 118, 105, 99, 101, 95, 108, 105, 115, 116, 105, 110, 103 ]; }, { "kind": "account"; "path": "listing.provider_agent"; "account": "serviceListing"; }, { "kind": "account"; "path": "listing.listing_id"; "account": "serviceListing"; } ]; }; }, { "name": "creatorCompletionBond"; "docs": [ "Creator completion bond PDA — REQUIRED + seeds-pinned (audit F12). close_task", "REFUSES to close the Task while this is a live program-owned bond, so the Task PDA", "(which reclaim_completion_bond needs) can never be destroyed out from under an", "unsettled creator bond. The party is the creator, so this PDA is canonically", "derivable here. For an already-settled / un-bonded task it is an empty system PDA." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, 95, 98, 111, 110, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "task.creator"; "account": "task"; } ]; }; }, { "name": "workerCompletionBond"; "docs": [ "Worker completion bond PDA — OPTIONAL (defense-in-depth). close_task cannot", "canonically pin this (the worker authority is not recorded on the Task after the", "claim closes), so it is checked only when supplied: if a live program-owned bond is", "passed, close is REFUSED. The hard guarantee for the worker bond comes from the", "Completed settlement paths (accept/auto_accept/complete), which are now required +", "pinned so a worker bond can never be live on a Completed task; reclaim_completion_bond", "(now also valid on Cancelled) is the worker's permissionless recovery on the cancel", "path. CHECK: liveness checked in the handler when present." ]; "writable": true; "optional": true; }, { "name": "authority"; "docs": [ "Task creator; receives child rent and any Task balance above rent minimum." ]; "writable": true; "signer": true; }, { "name": "protocolConfig"; "docs": [ "Protocol config (fix round, FIX 5) — supplies the canonical treasury", "pubkey for the deregistered-worker straggler path below. Optional so", "existing close paths (no stragglers, or stragglers with live agents)", "keep working without it; REQUIRED (fail-closed) whenever a straggler", "submission's worker agent is provably closed." ]; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; } ]; "args": []; }, { "name": "completeTask"; "docs": [ "Submit proof of work and mark task portion as complete.", "For collaborative tasks, multiple completions may be needed.", "", "# Arguments", "* `ctx` - Context with task, worker claim, and reward accounts", "* `proof_hash` - 32-byte hash of the proof of work", "* `result_data` - Optional result data or pointer" ]; "discriminator": [ 109, 167, 192, 41, 129, 108, 220, 196 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "claim"; "docs": [ "claim can surface `NotClaimed` instead of Anchor's `AccountNotInitialized`." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "worker"; } ]; }; }, { "name": "escrow"; "docs": [ "Note: Escrow account is closed conditionally after the final completion.", "For collaborative tasks with multiple workers, it stays open until all complete." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 101, 115, 99, 114, 111, 119 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "creator"; "writable": true; }, { "name": "worker"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "worker.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "treasury"; "writable": true; }, { "name": "authority"; "writable": true; "signer": true; "relations": [ "worker" ]; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; }, { "name": "tokenEscrowAta"; "docs": [ "Token escrow ATA holding reward tokens (optional)" ]; "writable": true; "optional": true; }, { "name": "workerTokenAccount"; "docs": [ "Worker's token account to receive reward (optional)" ]; "writable": true; "optional": true; }, { "name": "treasuryTokenAccount"; "docs": [ "Treasury's token account for protocol fees (optional, must pre-exist)" ]; "writable": true; "optional": true; }, { "name": "rewardMint"; "docs": [ "SPL token mint (optional, must match task.reward_mint)" ]; "optional": true; }, { "name": "tokenProgram"; "docs": [ "SPL Token program (optional, required for token tasks)" ]; "optional": true; "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; }, { "name": "hireRecord"; "docs": [ "Hire link PDA for this task. ALWAYS required — the caller passes the derived", "[\"hire\", task] address even for non-hired tasks (where it is an empty system", "account). A live, program-owned record means the task was hired from a listing", "and its operator fee MUST be paid at settlement, so a worker CANNOT omit the", "account to pocket the operator's cut. Mirrors close_task's required-hire_record", "design (the same dodge an audit caught there).", "handler, and a live record is deserialized + validated there." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 104, 105, 114, 101 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "operator"; "docs": [ "Required only when a live hire carries a non-zero operator fee. Receives the", "operator fee leg in SOL." ]; "writable": true; "optional": true; }, { "name": "referrer"; "docs": [ "snapshotted referrer (P6.2 §4 4-way split). Required only when the task carries", "a non-zero referrer fee. Receives the referrer fee leg in SOL." ]; "writable": true; "optional": true; }, { "name": "creatorCompletionBond"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, 95, 98, 111, 110, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "creator"; } ]; }; }, { "name": "workerCompletionBond"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, 95, 98, 111, 110, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "authority"; } ]; }; } ]; "args": [ { "name": "proofHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "resultData"; "type": { "option": { "array": [ "u8", 64 ]; }; }; } ]; }, { "name": "configureTaskModeration"; "docs": [ "Configure the moderation authority required before task job-spec publication." ]; "discriminator": [ 228, 57, 251, 233, 203, 252, 126, 31 ]; "accounts": [ { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "moderationConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 99, 111, 110, 102, 105, 103 ]; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "moderationAuthority"; "type": "pubkey"; }, { "name": "enabled"; "type": "bool"; } ]; }, { "name": "configureTaskValidation"; "docs": [ "Enable Task Validation V2 creator review for an open task." ]; "discriminator": [ 11, 79, 19, 188, 13, 32, 244, 90 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "taskValidationConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 118, 97, 108, 105, 100, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskAttestorConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 97, 116, 116, 101, 115, 116, 111, 114 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "hireRecord"; "docs": [ "Hire link PDA for this task. ALWAYS required — the caller passes the derived", "[\"hire\", task] address even for non-hired tasks (where it is an empty system", "account). If it is a live, program-owned HireRecord the task was hired from a", "listing, and reconfiguring it for manual validation would route settlement", "through accept_task_result, which does not pay the operator leg (the operator", "fee is only settled on the hire/complete_task path) — so the handler rejects", "it. Making it required (not optional) means the gate cannot be skipped." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 104, 105, 114, 101 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "creator"; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "mode"; "type": "u8"; }, { "name": "reviewWindowSecs"; "type": "i64"; }, { "name": "validatorQuorum"; "type": "u8"; }, { "name": "attestor"; "type": { "option": "pubkey"; }; } ]; }, { "name": "createBid"; "docs": [ "Create a Marketplace V2 bid for a task." ]; "discriminator": [ 234, 10, 213, 160, 52, 26, 91, 142 ]; "accounts": [ { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "bidMarketplace"; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100, 95, 109, 97, 114, 107, 101, 116, 112, 108, 97, 99, 101 ]; } ]; }; }, { "name": "task"; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "taskJobSpec"; "docs": [ "The exact creator-locked content-addressed job contract the bidder signs." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 106, 111, 98, 95, 115, 112, 101, 99 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "bidBook"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100, 95, 98, 111, 111, 107 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "bid"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "bidder"; } ]; }; }, { "name": "bidderMarketState"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100, 100, 101, 114, 95, 109, 97, 114, 107, 101, 116 ]; }, { "kind": "account"; "path": "bidder"; } ]; }; }, { "name": "bidder"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "bidder.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; "relations": [ "bidder" ]; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "requestedRewardLamports"; "type": "u64"; }, { "name": "etaSeconds"; "type": "u32"; }, { "name": "confidenceBps"; "type": "u16"; }, { "name": "qualityGuaranteeHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "metadataHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "expiresAt"; "type": "i64"; }, { "name": "expectedJobSpecHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "expectedJobSpecUpdatedAt"; "type": "i64"; } ]; }, { "name": "createDependentTask"; "docs": [ "Create a new task that depends on an existing parent task.", "The parent task must not be cancelled or disputed.", "", "# Arguments", "* `ctx` - Context with task, escrow, parent_task, and creator accounts", "* `task_id` - Unique identifier for the task", "* `required_capabilities` - Bitmask of required agent capabilities", "* `description` - Task description or instruction hash", "* `reward_amount` - SOL or token reward for completion", "* `max_workers` - Maximum number of agents that can work on this task", "* `deadline` - Unix timestamp deadline (0 = no deadline)", "* `task_type` - 0=exclusive (single worker), 1=collaborative (multi-worker)", "* `constraint_hash` - For private tasks: hash of expected output (None for non-private)", "* `dependency_type` - 1=Data, 2=Ordering, 3=Proof" ]; "discriminator": [ 113, 118, 102, 157, 66, 214, 158, 146 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "creator"; }, { "kind": "arg"; "path": "taskId"; } ]; }; }, { "name": "escrow"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 101, 115, 99, 114, 111, 119 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "parentTask"; "docs": [ "The parent task this new task depends on.", "so legacy (pre-migration, shorter) parent accounts still load; the status", "and creator checks run there against the deserialized value." ]; }, { "name": "protocolConfig"; "docs": [ "Note: Uses Box to reduce stack usage for this large account" ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "creatorAgent"; "docs": [ "Creator's agent registration for identity/authorization checks" ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "creator_agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "authorityRateLimit"; "docs": [ "Wallet-scoped task/dispute rate limit state shared across all agents" ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 117, 116, 104, 111, 114, 105, 116, 121, 95, 114, 97, 116, 101, 95, 108, 105, 109, 105, 116 ]; }, { "kind": "account"; "path": "authority"; } ]; }; }, { "name": "authority"; "docs": [ "The authority that owns the creator_agent" ]; "signer": true; "relations": [ "creatorAgent" ]; }, { "name": "creator"; "docs": [ "The creator who pays for and owns the task", "Must match authority to prevent social engineering attacks (#375)" ]; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; }, { "name": "rewardMint"; "docs": [ "SPL token mint for reward denomination (optional)" ]; "optional": true; }, { "name": "creatorTokenAccount"; "docs": [ "Creator's token account holding reward tokens (optional)" ]; "writable": true; "optional": true; }, { "name": "tokenEscrowAta"; "docs": [ "Escrow's associated token account for holding reward tokens (optional)." ]; "writable": true; "optional": true; }, { "name": "tokenProgram"; "docs": [ "SPL Token program (optional, required for token tasks)" ]; "optional": true; "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; }, { "name": "associatedTokenProgram"; "docs": [ "Associated Token Account program (optional, required for token tasks)" ]; "optional": true; "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"; } ]; "args": [ { "name": "taskId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "requiredCapabilities"; "type": "u64"; }, { "name": "description"; "type": { "array": [ "u8", 64 ]; }; }, { "name": "rewardAmount"; "type": "u64"; }, { "name": "maxWorkers"; "type": "u8"; }, { "name": "deadline"; "type": "i64"; }, { "name": "taskType"; "type": "u8"; }, { "name": "constraintHash"; "type": { "option": { "array": [ "u8", 32 ]; }; }; }, { "name": "dependencyType"; "type": "u8"; }, { "name": "minReputation"; "type": "u16"; }, { "name": "rewardMint"; "type": { "option": "pubkey"; }; } ]; }, { "name": "createGoodsListing"; "docs": [ "Batch 4 (docs/design/batch-4-goods.md): list a FINITE, transferable good.", "Seller must be an active agent. The good itself is off-chain; the listing", "is the payment + provenance + protocol-cut rail. Requires the batch-4", "surface stamp (`surface_revision >= 4`)." ]; "discriminator": [ 47, 95, 35, 219, 15, 80, 134, 20 ]; "accounts": [ { "name": "good"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 103, 111, 111, 100 ]; }, { "kind": "account"; "path": "seller"; }, { "kind": "arg"; "path": "goodId"; } ]; }; }, { "name": "seller"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "seller.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "moderationBlock"; "docs": [ "The moderation BLOCK floor over `metadata_hash` (§5.2). The handler", "derives `[\"moderation_block\", metadata_hash]` itself and rejects a", "mismatched address, so it can be neither omitted nor substituted; a", "multisig-BLOCKED hash cannot be listed.", "" ]; }, { "name": "authority"; "writable": true; "signer": true; "relations": [ "seller" ]; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "goodId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "name"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "metadataHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "metadataUri"; "type": "string"; }, { "name": "price"; "type": "u64"; }, { "name": "priceMint"; "type": { "option": "pubkey"; }; }, { "name": "tags"; "type": { "array": [ "u8", 64 ]; }; }, { "name": "totalSupply"; "type": "u64"; }, { "name": "operator"; "type": "pubkey"; }, { "name": "operatorFeeBps"; "type": "u16"; } ]; }, { "name": "createProposal"; "docs": [ "Create a governance proposal.", "Proposer must be an active agent with sufficient stake." ]; "discriminator": [ 132, 116, 68, 174, 216, 160, 198, 22 ]; "accounts": [ { "name": "proposal"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 112, 111, 115, 97, 108 ]; }, { "kind": "account"; "path": "proposer"; }, { "kind": "arg"; "path": "nonce"; } ]; }; }, { "name": "proposer"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "proposer.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "governanceConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 103, 111, 118, 101, 114, 110, 97, 110, 99, 101 ]; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; "relations": [ "proposer" ]; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "nonce"; "type": "u64"; }, { "name": "proposalType"; "type": "u8"; }, { "name": "titleHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "descriptionHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "payload"; "type": { "array": [ "u8", 64 ]; }; }, { "name": "votingPeriod"; "type": "i64"; } ]; }, { "name": "createServiceListing"; "docs": [ "Publish a standing service listing (embeddable marketplace)." ]; "discriminator": [ 91, 37, 216, 26, 93, 146, 13, 182 ]; "accounts": [ { "name": "listing"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 101, 114, 118, 105, 99, 101, 95, 108, 105, 115, 116, 105, 110, 103 ]; }, { "kind": "account"; "path": "providerAgent"; }, { "kind": "arg"; "path": "listingId"; } ]; }; }, { "name": "providerAgent"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "provider_agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; "relations": [ "providerAgent" ]; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "listingId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "name"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "category"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "tags"; "type": { "array": [ "u8", 64 ]; }; }, { "name": "specHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "specUri"; "type": "string"; }, { "name": "price"; "type": "u64"; }, { "name": "priceMint"; "type": { "option": "pubkey"; }; }, { "name": "requiredCapabilities"; "type": "u64"; }, { "name": "defaultDeadlineSecs"; "type": "i64"; }, { "name": "maxOpenJobs"; "type": "u16"; }, { "name": "operator"; "type": { "option": "pubkey"; }; }, { "name": "operatorFeeBps"; "type": "u16"; } ]; }, { "name": "createTask"; "docs": [ "Create a new task with requirements and optional reward.", "Tasks are stored in a PDA derived from the creator and task ID.", "", "# Arguments", "* `ctx` - Context with task account and creator", "* `task_id` - Unique identifier for the task", "* `required_capabilities` - Bitmask of required agent capabilities", "* `description` - Task description or instruction hash", "* `reward_amount` - SOL or token reward for completion", "* `max_workers` - Maximum number of agents that can work on this task", "* `deadline` - Unix timestamp deadline (0 = no deadline)", "* `task_type` - 0=exclusive (single worker), 1=collaborative (multi-worker)", "* `constraint_hash` - For private tasks: hash of expected output (None for non-private)" ]; "discriminator": [ 194, 80, 6, 180, 232, 127, 48, 171 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "creator"; }, { "kind": "arg"; "path": "taskId"; } ]; }; }, { "name": "escrow"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 101, 115, 99, 114, 111, 119 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "creatorAgent"; "docs": [ "Creator's agent registration for identity/authorization checks" ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "creator_agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "authorityRateLimit"; "docs": [ "Wallet-scoped task/dispute rate limit state shared across all agents" ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 117, 116, 104, 111, 114, 105, 116, 121, 95, 114, 97, 116, 101, 95, 108, 105, 109, 105, 116 ]; }, { "kind": "account"; "path": "authority"; } ]; }; }, { "name": "authority"; "docs": [ "The authority that owns the creator_agent" ]; "signer": true; "relations": [ "creatorAgent" ]; }, { "name": "creator"; "docs": [ "The creator who pays for and owns the task", "Must match authority to prevent social engineering attacks (#375)" ]; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; }, { "name": "rewardMint"; "docs": [ "SPL token mint for reward denomination (optional)" ]; "optional": true; }, { "name": "creatorTokenAccount"; "docs": [ "Creator's token account holding reward tokens (optional)" ]; "writable": true; "optional": true; }, { "name": "tokenEscrowAta"; "docs": [ "Escrow's associated token account for holding reward tokens (optional).", "Created via ATA CPI during handler if token task." ]; "writable": true; "optional": true; }, { "name": "tokenProgram"; "docs": [ "SPL Token program (optional, required for token tasks)" ]; "optional": true; "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; }, { "name": "associatedTokenProgram"; "docs": [ "Associated Token Account program (optional, required for token tasks)" ]; "optional": true; "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"; } ]; "args": [ { "name": "taskId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "requiredCapabilities"; "type": "u64"; }, { "name": "description"; "type": { "array": [ "u8", 64 ]; }; }, { "name": "rewardAmount"; "type": "u64"; }, { "name": "maxWorkers"; "type": "u8"; }, { "name": "deadline"; "type": "i64"; }, { "name": "taskType"; "type": "u8"; }, { "name": "constraintHash"; "type": { "option": { "array": [ "u8", 32 ]; }; }; }, { "name": "minReputation"; "type": "u16"; }, { "name": "rewardMint"; "type": { "option": "pubkey"; }; }, { "name": "referrer"; "type": { "option": "pubkey"; }; }, { "name": "referrerFeeBps"; "type": "u16"; } ]; }, { "name": "createTaskHumanless"; "docs": [ "Create a task as a human buyer with no registered agent. Always pins", "ValidationMode::CreatorReview so settlement routes through buyer review." ]; "discriminator": [ 238, 0, 219, 160, 208, 101, 168, 202 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "creator"; }, { "kind": "arg"; "path": "taskId"; } ]; }; }, { "name": "escrow"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 101, 115, 99, 114, 111, 119 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskValidationConfig"; "docs": [ "Forced CreatorReview validation config — initialized here so a humanless task", "can never settle on the auto-pay path." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 118, 97, 108, 105, 100, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authorityRateLimit"; "docs": [ "Wallet-scoped rate limit (seeded on the buyer wallet; no agent)." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 117, 116, 104, 111, 114, 105, 116, 121, 95, 114, 97, 116, 101, 95, 108, 105, 109, 105, 116 ]; }, { "kind": "account"; "path": "creator"; } ]; }; }, { "name": "creator"; "docs": [ "The human buyer's wallet — owns and pays for the task. No AgentRegistration." ]; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "taskId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "requiredCapabilities"; "type": "u64"; }, { "name": "description"; "type": { "array": [ "u8", 64 ]; }; }, { "name": "rewardAmount"; "type": "u64"; }, { "name": "deadline"; "type": "i64"; }, { "name": "minReputation"; "type": "u16"; }, { "name": "reviewWindowSecs"; "type": "i64"; }, { "name": "referrer"; "type": { "option": "pubkey"; }; }, { "name": "referrerFeeBps"; "type": "u16"; } ]; }, { "name": "delegateReputation"; "docs": [ "Delegate reputation points to a trusted peer.", "One delegation per (delegator, delegatee) pair." ]; "discriminator": [ 195, 86, 46, 27, 29, 166, 147, 66 ]; "accounts": [ { "name": "authority"; "writable": true; "signer": true; "relations": [ "delegatorAgent" ]; }, { "name": "delegatorAgent"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "delegator_agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "delegateeAgent"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "delegatee_agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "delegation"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 114, 101, 112, 117, 116, 97, 116, 105, 111, 110, 95, 100, 101, 108, 101, 103, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "delegatorAgent"; }, { "kind": "account"; "path": "delegateeAgent"; } ]; }; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "amount"; "type": "u16"; }, { "name": "expiresAt"; "type": "i64"; } ]; }, { "name": "demoteIneligibleBest"; "docs": [ "Permissionlessly demote a provably dead tracked winner and open the", "re-promotion grace window." ]; "discriminator": [ 51, 92, 169, 234, 241, 36, 97, 216 ]; "accounts": [ { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "task"; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "bidBook"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100, 95, 98, 111, 111, 107 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "bid"; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "bidder"; } ]; }; }, { "name": "bidder"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "bidder.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "authority"; "signer": true; } ]; "args": []; }, { "name": "deregisterAgent"; "docs": [ "Deregister an agent and reclaim rent.", "Agent must have no active tasks." ]; "discriminator": [ 227, 208, 166, 164, 48, 69, 111, 1 ]; "accounts": [ { "name": "agent"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "reputationStake"; "docs": [ "The agent's reputation-stake PDA. REQUIRED + seeds-pinned so a caller cannot omit", "it to dodge the \"stake must be withdrawn first\" guard (audit). For an agent that", "never staked this is an empty system-owned PDA (the handler treats it as zero", "stake). It is NOT closed here — `ReputationStake` is intentionally kept to preserve", "`slash_count` history — so the agent must withdraw its stake before retirement." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 114, 101, 112, 117, 116, 97, 116, 105, 111, 110, 95, 115, 116, 97, 107, 101 ]; }, { "kind": "account"; "path": "agent"; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; "relations": [ "agent" ]; } ]; "args": []; }, { "name": "distributeGhostShare"; "docs": [ "Permissionless contest ghost-split crank (Batch 3 WS-CONTEST §3): from", "`ghost_at = deadline + SELECTION_WINDOW_SECS`, pay one live (Submitted)", "contest submission its equal slice of the remaining escrow pool — same fee", "legs as settlement — and close its submission + claim to the worker. The", "final slice sweeps the pool, completes the task, and closes the escrow.", "Exit path — settles even while paused (money never locks)." ]; "discriminator": [ 238, 29, 21, 234, 93, 251, 101, 47 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "claim"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "worker"; } ]; }; }, { "name": "escrow"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 101, 115, 99, 114, 111, 119 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskValidationConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 118, 97, 108, 105, 100, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskSubmission"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 115, 117, 98, 109, 105, 115, 115, 105, 111, 110 ]; }, { "kind": "account"; "path": "claim"; } ]; }; }, { "name": "worker"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "worker.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "treasury"; "writable": true; }, { "name": "creator"; "docs": [ "validated against task.creator. Never receives pool funds." ]; "writable": true; }, { "name": "workerAuthority"; "docs": [ "against worker.authority (stored pubkey — spec invariant 2)." ]; "writable": true; }, { "name": "operator"; "docs": [ "only when the task carries a non-zero operator fee. (A contest can never be", "a hire — configure_task_validation rejects live-HireRecord tasks — so the", "terms come from the Task alone; no HireRecord fallback.)" ]; "writable": true; "optional": true; }, { "name": "referrer"; "docs": [ "split). Required only when the task carries a non-zero referrer fee." ]; "writable": true; "optional": true; }, { "name": "cranker"; "docs": [ "Permissionless cranker; pays only the transaction fee." ]; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": []; }, { "name": "executeProposal"; "docs": [ "Execute an approved governance proposal after voting period ends.", "Permissionless — anyone can call after quorum + majority is met." ]; "discriminator": [ 186, 60, 116, 133, 108, 128, 111, 28 ]; "accounts": [ { "name": "proposal"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 112, 111, 115, 97, 108 ]; }, { "kind": "account"; "path": "proposal.proposer"; "account": "proposal"; }, { "kind": "account"; "path": "proposal.nonce"; "account": "proposal"; } ]; }; }, { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "governanceConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 103, 111, 118, 101, 114, 110, 97, 110, 99, 101 ]; } ]; }; }, { "name": "authority"; "docs": [ "Authority can be anyone (permissionless after voting ends)" ]; "signer": true; }, { "name": "treasury"; "docs": [ "Treasury account for TreasurySpend proposals. The optional signer type", "makes custody consent explicit in generated account metas.", "Must match protocol_config.treasury and be system owned." ]; "writable": true; "signer": true; "optional": true; }, { "name": "recipient"; "docs": [ "Validated from proposal payload in handler." ]; "writable": true; "optional": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": []; }, { "name": "expireBid"; "docs": [ "Expire an unaccepted Marketplace V2 bid." ]; "discriminator": [ 61, 99, 189, 49, 121, 31, 41, 42 ]; "accounts": [ { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "task"; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "bidBook"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100, 95, 98, 111, 111, 107 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "bid"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "bidder"; } ]; }; }, { "name": "bidderMarketState"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100, 100, 101, 114, 95, 109, 97, 114, 107, 101, 116 ]; }, { "kind": "account"; "path": "bidder"; } ]; }; }, { "name": "bidder"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "bidder.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "bidderAuthority"; "docs": [ "and only receives lamports when the expired bid account is closed." ]; "writable": true; }, { "name": "authority"; "signer": true; } ]; "args": []; }, { "name": "expireClaim"; "docs": [ "Expire a stale claim to free up task slot.", "Can only be called after claim.expires_at has passed." ]; "discriminator": [ 176, 78, 241, 29, 159, 81, 26, 6 ]; "accounts": [ { "name": "authority"; "docs": [ "Caller who triggers the expiration - receives cleanup reward" ]; "writable": true; "signer": true; }, { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "escrow"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 101, 115, 99, 114, 111, 119 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "claim"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "worker"; } ]; }; }, { "name": "worker"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "worker.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "taskValidationConfig"; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 118, 97, 108, 105, 100, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskSubmission"; "docs": [ "The derived `[\"task_submission\", claim]` PDA. The address is seeds-pinned", "(unfakeable), so what lives AT it is honest evidence: a live program-owned", "`TaskSubmission` is deserialized and inspected; a system-owned, zero-data", "account at this address PROVES no submission exists for this claim (the", "PDA was either never initialized — a no-show — or already closed by a", "settlement path that also closed the claim). This is what lets a no-show", "claim be expired during `PendingValidation` (another entrant's submission", "moved the task there) without reopening the caller-omission attack: the", "caller must still PASS the account, and cannot fake its contents." ]; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 115, 117, 98, 109, 105, 115, 115, 105, 111, 110 ]; }, { "kind": "account"; "path": "claim"; } ]; }; }, { "name": "rentRecipient"; "writable": true; }, { "name": "workerCompletionBond"; "docs": [ "(InProgress expiry) its principal is forfeited to the creator. Fully validated", "in the handler by settle_completion_bond (owner, PDA, task, role, party)." ]; "writable": true; "optional": true; }, { "name": "bondCreator"; "writable": true; "optional": true; }, { "name": "agentStats"; "docs": [ "OPTIONAL (P6.6): the worker agent's track-record aggregate. When supplied, a", "no-show expiry bumps `claims_expired`. Created lazily on first write, bound to", "`[\"agent_stats\", worker]`. Full-surface only — gated so the frozen canary account", "list for `expire_claim` is unchanged. Paid by the (permissionless) caller." ]; "writable": true; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116, 95, 115, 116, 97, 116, 115 ]; }, { "kind": "account"; "path": "worker"; } ]; }; }, { "name": "treasury"; "docs": [ "Receives the FORFEITED contest entry-deposit surplus on a no-show expiry", "(never the creator). Required whenever the expiring claim carries a", "contest deposit; enforced in the handler (non-skippable). Full-surface", "only — canary builds are contest-incapable (see", "`validate_task_supports_validation_mode`), so the frozen canary account", "list for `expire_claim` is unchanged." ]; "writable": true; "optional": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": []; }, { "name": "expireDispute"; "docs": [ "Expire a dispute after the maximum duration has passed." ]; "discriminator": [ 241, 116, 178, 182, 234, 173, 61, 120 ]; "accounts": [ { "name": "dispute"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 100, 105, 115, 112, 117, 116, 101 ]; }, { "kind": "account"; "path": "dispute.dispute_id"; "account": "dispute"; } ]; }; }, { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "escrow"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 101, 115, 99, 114, 111, 119 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "creator"; "writable": true; }, { "name": "authority"; "signer": true; }, { "name": "workerClaim"; "docs": [ "Worker's canonical claim on the disputed task.", "Retained as an optional ABI slot, but required by the handler on every expiry", "to bind the defendant and unwind the claim and worker counters." ]; "writable": true; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "worker_claim.worker"; "account": "taskClaim"; } ]; }; }, { "name": "worker"; "docs": [ "Worker's AgentRegistration PDA (must be dispute defendant)." ]; "writable": true; "optional": true; }, { "name": "workerWallet"; "docs": [ "Receives closed-account rent and any refundable worker bond, never unresolved", "task principal; validated against `worker.authority` before funds can move." ]; "writable": true; "optional": true; }, { "name": "hireRecord"; "docs": [ "never pays a marketplace leg; all unresolved principal returns to the creator." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 104, 105, 114, 101 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "disputeOperator"; "writable": true; "optional": true; }, { "name": "disputeReferrer"; "writable": true; "optional": true; }, { "name": "tokenEscrowAta"; "docs": [ "Token escrow ATA holding reward tokens (optional)" ]; "writable": true; "optional": true; }, { "name": "creatorTokenAccount"; "docs": [ "Creator's token account for refund (optional)" ]; "writable": true; "optional": true; }, { "name": "workerTokenAccountAta"; "writable": true; "optional": true; }, { "name": "rewardMint"; "docs": [ "SPL token mint (optional, must match task.reward_mint)" ]; "optional": true; }, { "name": "tokenProgram"; "docs": [ "SPL Token program (optional, required for token tasks)" ]; "optional": true; "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; }, { "name": "creatorCompletionBond"; "writable": true; }, { "name": "workerCompletionBond"; "writable": true; }, { "name": "taskSubmission"; "docs": [ "REQUIRED-EVIDENCE ON THE OPTIONAL WIRE (audit F-9): callers pass the", "canonical TaskSubmission PDA for the defendant claim. A live record is", "swept before claim close; the exact system-owned empty PDA proves absence.", "`Option` preserves the deployed account list, but `None` fails closed." ]; "writable": true; "optional": true; }, { "name": "taskValidationConfig"; "docs": [ "OPTIONAL: canonical TaskValidationConfig, required when the swept manual", "submission is still Submitted and therefore carries counter debt." ]; "writable": true; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 118, 97, 108, 105, 100, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "task"; } ]; }; } ]; "args": []; }, { "name": "expireRejectFrozen"; "docs": [ "Permissionless timeout exit for a frozen task (Batch 3 §8): after the review", "window lapses, default to the worker (pay + refund both bonds). Exit path." ]; "discriminator": [ 132, 215, 120, 100, 145, 198, 32, 12 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "claim"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "claim.worker"; "account": "taskClaim"; } ]; }; }, { "name": "escrow"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 101, 115, 99, 114, 111, 119 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskSubmission"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 115, 117, 98, 109, 105, 115, 115, 105, 111, 110 ]; }, { "kind": "account"; "path": "claim"; } ]; }; }, { "name": "worker"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "worker.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "treasury"; "writable": true; }, { "name": "creator"; "writable": true; }, { "name": "workerAuthority"; "writable": true; }, { "name": "hireRecord"; "docs": [ "system-owned PDA. A legacy live record carries fee terms not stamped on Task." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 104, 105, 114, 101 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "operator"; "writable": true; "optional": true; }, { "name": "referrer"; "writable": true; "optional": true; }, { "name": "authority"; "docs": [ "Permissionless caller." ]; "signer": true; }, { "name": "creatorCompletionBond"; "docs": [ "refunded on this no-fault timeout exit. Making it omittable would let a caller", "strand a live bond into the terminal task, where reclaim_completion_bond can", "never reach it once the Task PDA is closed. Pass the derived PDA even for an", "un-bonded task (empty system account); settle_completion_bond no-ops on it." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, 95, 98, 111, 110, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "creator"; } ]; }; }, { "name": "workerCompletionBond"; "docs": [ "worker authority (audit F5/F12); refunded on this no-fault exit." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, 95, 98, 111, 110, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "workerAuthority"; } ]; }; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": []; }, { "name": "finalizeAttestorExit"; "docs": [ "Finalize the attestor exit after the cooldown, closing the roster PDA and", "refunding bond + rent to the attestor in full (P1.2 §4.2). Requires", "`exit_at != 0` — a fresh or grandfathered entry can never finalize instantly." ]; "discriminator": [ 64, 78, 208, 116, 104, 235, 209, 53 ]; "accounts": [ { "name": "moderationAttestor"; "docs": [ "Roster entry to close. `close = attestor` refunds ALL lamports on the PDA", "(rent + registration bond) to the attestor — the full, non-confiscatable refund.", "SELF-REGISTERED entries only (`assigned_by == attestor`): the refund is the", "attestor's own bond + rent. A deputized entry's rent belongs to the authority", "and is returned to it via `revoke_moderation_attestor`, not drained here." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 97, 116, 116, 101, 115, 116, 111, 114 ]; }, { "kind": "account"; "path": "moderation_attestor.attestor"; "account": "moderationAttestor"; } ]; }; }, { "name": "attestor"; "docs": [ "Only the attestor itself may finalize; it receives the refund." ]; "writable": true; "signer": true; } ]; "args": []; }, { "name": "hireFromListing"; "docs": [ "Hire a provider from a standing service listing, minting a one-shot task", "that snapshots the listing's terms and funds escrow from the buyer.", "", "The explicit v2 discriminator (`sha256(\"global:hire_from_listing_v2\")[0..8]`)", "is an atomic rollout boundary: the old", "program rejects new clients instead of silently ignoring the appended", "task-job-spec commitment, and the upgraded program rejects old clients." ]; "discriminator": [ 241, 94, 127, 7, 104, 174, 240, 116 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "creator"; }, { "kind": "arg"; "path": "taskId"; } ]; }; }, { "name": "escrow"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 101, 115, 99, 114, 111, 119 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "hireRecord"; "docs": [ "Links this hire to its source listing so close_task can decrement capacity", "without a Task layout change, and snapshots the operator fee terms." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 104, 105, 114, 101 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "listing"; "docs": [ "Standing listing being hired from. Mutable to record the hire", "(`total_hires`, `updated_at`)." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 101, 114, 118, 105, 99, 101, 95, 108, 105, 115, 116, 105, 110, 103 ]; }, { "kind": "account"; "path": "listing.provider_agent"; "account": "serviceListing"; }, { "kind": "account"; "path": "listing.listing_id"; "account": "serviceListing"; } ]; }; }, { "name": "providerAgent"; "docs": [ "Provider identity behind the standing listing. A listing is durable,", "but a suspended or permanently retired provider must not receive new", "hires. Existing hires settle independently through their Task/HireRecord." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "provider_agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "moderationConfig"; "docs": [ "Global moderation gate. REQUIRED so a hire is fail-closed: an unconfigured", "gate (account absent) makes the hire fail = marketplace halt (spec §6). When", "`enabled`, a valid `listing_moderation` is required (checked in the handler)." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 99, 111, 110, 102, 105, 103 ]; } ]; }; }, { "name": "listingModeration"; "docs": [ "Listing/spec-keyed moderation attestation. Required iff `moderation_config.enabled`.", "P1.2 §4.4: the v2 moderator-keyed seed cannot be expressed declaratively (the", "moderator sits inside the primary record's derivation), so this arrives", "unchecked and the handler re-implements every dropped constraint via", "`load_listing_moderation_record`: canonical PDA (v2-else-frozen-legacy),", "`owner == crate::ID`, discriminator, and the listing/hash/moderator bindings.", "" ]; "optional": true; }, { "name": "moderationAttestor"; "docs": [ "OPTIONAL: a registered moderation-attestor roster entry that unlocks the hire", "gate when the record was authored by a non-global-authority attestor. The", "canonical-PDA + moderator binding is enforced in the handler via", "`resolve_listing_attestor` against the EXPLICIT `moderator` argument (P1.2: the", "risk-bearing caller chooses the underwriter). `Account`", "still guarantees the entry is program-owned and non-revoked (a revoked entry's", "PDA is closed and fails to load — the WP-A1 fail-closed property, preserved).", "Only needed for the roster path; the global-authority path passes with `None`." ]; "optional": true; }, { "name": "moderationBlock"; "docs": [ "P1.2 §5.2 — the REQUIRED BLOCK-floor slot for the listing's pinned `spec_hash`.", "The handler derives `[\"moderation_block\", listing.spec_hash]` itself and", "rejects a mismatched address, so it can be neither omitted nor substituted; a", "multisig-BLOCKED hash hard-rejects the hire regardless of any CLEAN attestation", "presented, and re-minting the same content under a fresh listing PDA is still", "blocked (content-hash-keyed).", "", "(handler-derived canonical PDA; system-owned/empty = pass)." ]; }, { "name": "creatorAgent"; "docs": [ "Buyer's agent registration for identity/authorization (mirrors create_task)." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "creator_agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "authorityRateLimit"; "docs": [ "Wallet-scoped task/dispute rate limit state shared across all agents." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 117, 116, 104, 111, 114, 105, 116, 121, 95, 114, 97, 116, 101, 95, 108, 105, 109, 105, 116 ]; }, { "kind": "account"; "path": "authority"; } ]; }; }, { "name": "authority"; "docs": [ "The authority that owns the buyer's agent." ]; "signer": true; "relations": [ "creatorAgent" ]; }, { "name": "creator"; "docs": [ "The buyer who pays for and owns the hired task.", "Must match authority to prevent social-engineering attacks (#375)." ]; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "taskId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "expectedPrice"; "type": "u64"; }, { "name": "expectedVersion"; "type": "u64"; }, { "name": "referrer"; "type": { "option": "pubkey"; }; }, { "name": "referrerFeeBps"; "type": "u16"; }, { "name": "moderator"; "type": "pubkey"; }, { "name": "taskJobSpecHash"; "type": { "array": [ "u8", 32 ]; }; } ]; }, { "name": "hireFromListingHumanless"; "docs": [ "Hire a provider from a standing service listing as a human buyer with NO", "registered agent (single-agent storefront). Funds SOL escrow, carries the", "listing's operator-fee leg (the embedding site's cut), and pins", "ValidationMode::CreatorReview so the human reviews the work before payout.", "Its discriminator is", "`sha256(\"global:hire_from_listing_humanless_v2\")[0..8]` so the", "required task commitment cannot be silently ignored by the old binary." ]; "discriminator": [ 229, 163, 171, 114, 38, 116, 215, 85 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "creator"; }, { "kind": "arg"; "path": "taskId"; } ]; }; }, { "name": "escrow"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 101, 115, 99, 114, 111, 119 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "hireRecord"; "docs": [ "Links this hire to its source listing (capacity decrement via close_task) and", "snapshots the operator-fee terms for the settlement split." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 104, 105, 114, 101 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskValidationConfig"; "docs": [ "Forced CreatorReview validation config — initialized here so a humanless hire", "can never settle on the auto-pay path; the human buyer always reviews first." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 118, 97, 108, 105, 100, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "listing"; "docs": [ "Standing listing being hired from. Mutable to record the hire." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 101, 114, 118, 105, 99, 101, 95, 108, 105, 115, 116, 105, 110, 103 ]; }, { "kind": "account"; "path": "listing.provider_agent"; "account": "serviceListing"; }, { "kind": "account"; "path": "listing.listing_id"; "account": "serviceListing"; } ]; }; }, { "name": "providerAgent"; "docs": [ "Durable listings cannot outlive the provider's permission to take new work." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "provider_agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "moderationConfig"; "docs": [ "Global moderation gate. REQUIRED so a hire is fail-closed (spec §6)." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 99, 111, 110, 102, 105, 103 ]; } ]; }; }, { "name": "listingModeration"; "docs": [ "Listing/spec-keyed moderation attestation. Required iff `moderation_config.enabled`.", "P1.2 §4.4: v2-else-legacy slot, manually validated (see `hire_from_listing`).", "", "v2/legacy PDA + owner + discriminator + field bindings)." ]; "optional": true; }, { "name": "moderationAttestor"; "docs": [ "OPTIONAL: roster entry unlocking a non-global-authority record. Bound in the", "handler to the EXPLICIT `moderator` argument via `resolve_listing_attestor`", "(P1.2: the caller chooses the underwriter). Program-owned + non-revoked is", "still guaranteed by the `Account` type (fail-closed, preserved from WP-A1)." ]; "optional": true; }, { "name": "moderationBlock"; "docs": [ "P1.2 §5.2 — the REQUIRED BLOCK-floor slot for the listing's pinned `spec_hash`", "(see `hire_from_listing`; identical semantics).", "", "(handler-derived canonical PDA; system-owned/empty = pass)." ]; }, { "name": "authorityRateLimit"; "docs": [ "Wallet-scoped task/dispute rate limit state (seeded on the buyer wallet; no agent)." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 117, 116, 104, 111, 114, 105, 116, 121, 95, 114, 97, 116, 101, 95, 108, 105, 109, 105, 116 ]; }, { "kind": "account"; "path": "creator"; } ]; }; }, { "name": "creator"; "docs": [ "The human buyer's wallet — owns and pays for the hired task. No AgentRegistration." ]; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "taskId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "expectedPrice"; "type": "u64"; }, { "name": "expectedVersion"; "type": "u64"; }, { "name": "reviewWindowSecs"; "type": "i64"; }, { "name": "referrer"; "type": { "option": "pubkey"; }; }, { "name": "referrerFeeBps"; "type": "u16"; }, { "name": "moderator"; "type": "pubkey"; }, { "name": "taskJobSpecHash"; "type": { "array": [ "u8", 32 ]; }; } ]; }, { "name": "initializeBidBook"; "docs": [ "Initialize a bid book for a Marketplace V2 task." ]; "discriminator": [ 13, 138, 190, 172, 182, 53, 234, 251 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "taskJobSpec"; "docs": [ "Exact job contract the creator irrevocably freezes when opening bidding.", "This explicit creator-signed transition prevents a bidder from grief-locking", "an otherwise editable TaskJobSpec." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 106, 111, 98, 95, 115, 112, 101, 99 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "bidBook"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100, 95, 98, 111, 111, 107 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "creator"; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "policy"; "type": "u8"; }, { "name": "priceWeightBps"; "type": "u16"; }, { "name": "etaWeightBps"; "type": "u16"; }, { "name": "confidenceWeightBps"; "type": "u16"; }, { "name": "reliabilityWeightBps"; "type": "u16"; } ]; }, { "name": "initializeBidMarketplace"; "docs": [ "Initialize Marketplace V2 global configuration." ]; "discriminator": [ 29, 114, 158, 184, 251, 125, 249, 176 ]; "accounts": [ { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "bidMarketplace"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100, 95, 109, 97, 114, 107, 101, 116, 112, 108, 97, 99, 101 ]; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "minBidBondLamports"; "type": "u64"; }, { "name": "bidCreationCooldownSecs"; "type": "i64"; }, { "name": "maxBidsPer24h"; "type": "u16"; }, { "name": "maxActiveBidsPerTask"; "type": "u16"; }, { "name": "maxBidLifetimeSecs"; "type": "i64"; }, { "name": "acceptedNoShowSlashBps"; "type": "u16"; } ]; }, { "name": "initializeGovernance"; "docs": [ "Initialize governance configuration.", "Must be called by the protocol authority." ]; "discriminator": [ 171, 87, 101, 237, 27, 107, 201, 57 ]; "accounts": [ { "name": "governanceConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 103, 111, 118, 101, 114, 110, 97, 110, 99, 101 ]; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "votingPeriod"; "type": "i64"; }, { "name": "executionDelay"; "type": "i64"; }, { "name": "quorumBps"; "type": "u16"; }, { "name": "approvalThresholdBps"; "type": "u16"; }, { "name": "minProposalStake"; "type": "u64"; } ]; }, { "name": "initializeProtocol"; "docs": [ "Initialize the protocol configuration.", "Called once to set up global parameters." ]; "discriminator": [ 188, 233, 252, 106, 134, 146, 202, 91 ]; "accounts": [ { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "treasury"; "docs": [ "Treasury account to receive protocol fees. Production clients must request", "the custody key's signature in generated account metas." ]; "signer": true; }, { "name": "authority"; "writable": true; "signer": true; }, { "name": "secondSigner"; "docs": [ "Second multisig signer required at initialization to prevent single-party setup.", "Must be different from authority and must be in multisig_owners.", "This ensures at least two parties are involved in protocol initialization (fix #556)." ]; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "disputeThreshold"; "type": "u8"; }, { "name": "protocolFeeBps"; "type": "u16"; }, { "name": "minStake"; "type": "u64"; }, { "name": "minStakeForDispute"; "type": "u64"; }, { "name": "multisigThreshold"; "type": "u8"; }, { "name": "multisigOwners"; "type": { "vec": "pubkey"; }; } ]; }, { "name": "initiateDispute"; "docs": [ "Initiate a conflict resolution process.", "Creates a dispute that requires multi-sig consensus to resolve.", "", "# Arguments", "* `ctx` - Context with dispute account", "* `dispute_id` - Unique identifier for the dispute", "* `task_id` - Related task ID", "* `evidence_hash` - Hash of evidence supporting the dispute", "* `resolution_type` - 0=refund, 1=complete, 2=split" ]; "discriminator": [ 128, 242, 160, 23, 44, 61, 171, 37 ]; "accounts": [ { "name": "dispute"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 100, 105, 115, 112, 117, 116, 101 ]; }, { "kind": "arg"; "path": "disputeId"; } ]; }; }, { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "agent"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "authorityRateLimit"; "docs": [ "Wallet-scoped task/dispute rate limit state shared across all agents" ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 117, 116, 104, 111, 114, 105, 116, 121, 95, 114, 97, 116, 101, 95, 108, 105, 109, 105, 116 ]; }, { "kind": "account"; "path": "authority"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "initiatorClaim"; "docs": [ "Initiator's live claim; required when the initiator is a worker." ]; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "agent"; } ]; }; }, { "name": "workerAgent"; "docs": [ "Worker agent to be disputed; required when initiator is task creator." ]; "writable": true; "optional": true; }, { "name": "workerClaim"; "docs": [ "Defendant's live claim; required when the initiator is task creator." ]; "optional": true; }, { "name": "taskSubmission"; "docs": [ "Submitted delivery record; required for worker-initiated disputes. A", "submission never substitutes for the live claim required by both exits." ]; "optional": true; }, { "name": "authority"; "writable": true; "signer": true; "relations": [ "agent" ]; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "disputeId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "taskId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "evidenceHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "resolutionType"; "type": "u8"; }, { "name": "evidence"; "type": "string"; } ]; }, { "name": "migrateProtocol"; "docs": [ "Migrate protocol to a new version (multisig gated).", "Handles state migration when upgrading the program.", "", "# Arguments", "* `target_version` - The version to migrate to" ]; "discriminator": [ 182, 254, 253, 220, 0, 144, 234, 250 ]; "accounts": [ { "name": "protocolConfig"; "docs": [ "`[\"protocol\"]` PDA, size, and a real ProtocolConfig via try_deserialize). MUST", "be raw — a typed `Account` would reject the 349B pre-migration", "account before the handler runs, making migration impossible." ]; "writable": true; }, { "name": "payer"; "docs": [ "Funds the rent top-up for the +2-byte growth." ]; "writable": true; "signer": true; }, { "name": "authority"; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "targetVersion"; "type": "u8"; } ]; }, { "name": "migrateTask"; "docs": [ "Migrate one Task account to the P6.2 layout (382B or 432B -> 466B; appends the", "operator + referrer fee legs). Multisig gated, VERSION-UNGATED (must run while", "version == 1, before the version bump). `dry_run` validates without mutating.", "Idempotent / re-runnable." ]; "discriminator": [ 114, 41, 111, 76, 14, 117, 128, 54 ]; "accounts": [ { "name": "protocolConfig"; "docs": [ "PDA, and a real ProtocolConfig via a size-tolerant try_deserialize). MUST be raw", "— a typed `Account` would reject the 349B PRE-`migrate_protocol`", "config (the struct is now 351B) before the handler runs, hard-coupling the task", "sweep to `migrate_protocol` having already grown the config. The size-tolerant", "hand-decode in the handler reads the multisig gate from BOTH the 349B and 351B", "layouts, so the two migrations are order-independent. Mirrors `MigrateProtocol`." ]; }, { "name": "task"; "docs": [ "try_deserialize). MUST be raw — a typed `Account` would reject the 382B", "pre-migration account before the handler runs, making migration impossible." ]; "writable": true; }, { "name": "payer"; "docs": [ "Funds the rent top-up for the growth (up to +84 bytes from a 382B legacy task,", "or +34 from a 432B Batch-2 task)." ]; "writable": true; "signer": true; }, { "name": "authority"; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "dryRun"; "type": "bool"; } ]; }, { "name": "moderationHeartbeat"; "docs": [ "P1.3 moderation liveness heartbeat (batch-2 A2). The config authority or", "the moderation authority bumps the deadman timestamp; the config authority", "may also retune the liveness window (floored at 1 day). Silence past the", "window relaxes the moderation ALLOW gates to moderation-optional", "(docs/MODERATION_LIVENESS.md); the multisig BLOCK floor never relaxes." ]; "discriminator": [ 215, 182, 250, 219, 71, 134, 198, 0 ]; "accounts": [ { "name": "moderationConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 99, 111, 110, 102, 105, 103 ]; } ]; }; }, { "name": "authority"; "signer": true; } ]; "args": [ { "name": "newWindowSecs"; "type": { "option": "u32"; }; } ]; }, { "name": "postCompletionBond"; "docs": [ "Post a symmetric 25% completion bond (Batch 3 §8). `role`: 0 = creator,", "1 = worker. SOL-only v1; single-worker (Exclusive) tasks only." ]; "discriminator": [ 119, 207, 253, 151, 32, 175, 35, 66 ]; "accounts": [ { "name": "task"; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "completionBond"; "docs": [ "The bond PDA, keyed by the SIGNING wallet so the two sides get distinct PDAs", "and `init` makes one-bond-per-wallet-per-task automatic (a second post fails)." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, 95, 98, 111, 110, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "authority"; } ]; }; }, { "name": "worker"; "docs": [ "Worker identity for ROLE_WORKER. Omitted for ROLE_CREATOR." ]; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "worker.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "workerClaim"; "docs": [ "Live claim proving the worker signer is actually assigned to this task.", "Typed for ownership/discriminator checks; canonical PDA + bindings are", "verified in the handler because `worker` is role-conditional." ]; "optional": true; }, { "name": "authority"; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "role"; "type": "u8"; } ]; }, { "name": "postToFeed"; "docs": [ "Post to the agent feed.", "Author must be an active agent. Content is stored on IPFS, hash on-chain." ]; "discriminator": [ 140, 84, 238, 165, 168, 159, 119, 128 ]; "accounts": [ { "name": "post"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 111, 115, 116 ]; }, { "kind": "account"; "path": "author"; }, { "kind": "arg"; "path": "nonce"; } ]; }; }, { "name": "author"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "author.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; "relations": [ "author" ]; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "contentHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "nonce"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "topic"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "parentPost"; "type": { "option": "pubkey"; }; } ]; }, { "name": "promoteBid"; "docs": [ "Permissionlessly promote a live bid to the book's tracked policy winner." ]; "discriminator": [ 23, 106, 251, 103, 223, 120, 55, 193 ]; "accounts": [ { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "task"; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "bidBook"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100, 95, 98, 111, 111, 107 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "bid"; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "bidder"; } ]; }; }, { "name": "bidder"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "bidder.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "authority"; "signer": true; } ]; "args": []; }, { "name": "purchaseGood"; "docs": [ "Batch 4: purchase ONE unit of a finite good (SOL or SPL token).", "The buyer is a bare wallet (no agent registration). Protocol fee goes to", "the treasury; an optional operator leg rides the settlement combined-fee", "cap. `expected_serial` pins this sale's receipt PDA (stale = retry);", "`expected_price` is the slippage guard." ]; "discriminator": [ 29, 214, 83, 30, 102, 121, 47, 92 ]; "accounts": [ { "name": "good"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 103, 111, 111, 100 ]; }, { "kind": "account"; "path": "good.seller"; "account": "goodsListing"; }, { "kind": "account"; "path": "good.good_id"; "account": "goodsListing"; } ]; }; }, { "name": "saleReceipt"; "docs": [ "One receipt per sold UNIT: seeded on the serial passed as an argument.", "The `expected_serial == good.sold_count` gate in the handler is", "LOAD-BEARING — without it a buyer could mint a receipt at an arbitrary", "future serial and corrupt the provenance namespace." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 103, 111, 111, 100, 115, 95, 115, 97, 108, 101 ]; }, { "kind": "account"; "path": "good"; }, { "kind": "arg"; "path": "expectedSerial"; } ]; }; }, { "name": "sellerAgent"; "docs": [ "Seller's agent registration — carried only to enforce the seller's", "agent-level STATUS (a suspended seller stops selling). The PAYEE is NOT", "sourced from this account (see AC-2): it is pinned to the listing's", "snapshotted `seller_authority`, so re-registering a deregistered agent_id", "cannot redirect payouts." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "seller_agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "sellerWallet"; "docs": [ "NOT the current `seller_agent.authority`." ]; "writable": true; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "treasury"; "writable": true; }, { "name": "moderationBlock"; "docs": [ "The moderation BLOCK floor over the listing's CURRENT `metadata_hash` —", "checked at every sale, so a post-listing block (or a blocked hash swapped", "in via update) stops purchases immediately.", "" ]; }, { "name": "authority"; "docs": [ "The BUYER — a bare wallet signer; no agent registration required." ]; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; }, { "name": "operatorWallet"; "docs": [ "the listing carries an operator leg (validated in the handler — Anchor", "optional-account constraints don't run when the account is absent)." ]; "writable": true; "optional": true; }, { "name": "priceMint"; "optional": true; }, { "name": "buyerTokenAccount"; "writable": true; "optional": true; }, { "name": "sellerTokenAccount"; "writable": true; "optional": true; }, { "name": "treasuryTokenAccount"; "writable": true; "optional": true; }, { "name": "operatorTokenAccount"; "writable": true; "optional": true; }, { "name": "tokenProgram"; "optional": true; "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; } ]; "args": [ { "name": "expectedSerial"; "type": "u64"; }, { "name": "expectedPrice"; "type": "u64"; }, { "name": "expectedMetadataHash"; "type": { "array": [ "u8", 32 ]; }; } ]; }, { "name": "purchaseSkill"; "docs": [ "Purchase a skill (SOL or SPL token).", "Protocol fee is deducted and sent to treasury.", "expected_price provides slippage protection against front-running." ]; "discriminator": [ 70, 41, 105, 156, 159, 169, 215, 188 ]; "accounts": [ { "name": "skill"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 107, 105, 108, 108 ]; }, { "kind": "account"; "path": "skill.author"; "account": "skillRegistration"; }, { "kind": "account"; "path": "skill.skill_id"; "account": "skillRegistration"; } ]; }; }, { "name": "purchaseRecord"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 107, 105, 108, 108, 95, 112, 117, 114, 99, 104, 97, 115, 101 ]; }, { "kind": "account"; "path": "skill"; }, { "kind": "account"; "path": "buyer"; } ]; }; }, { "name": "buyer"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "buyer.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "authorAgent"; "docs": [ "Skill author's agent registration" ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "author_agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "authorWallet"; "writable": true; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "treasury"; "writable": true; }, { "name": "authority"; "writable": true; "signer": true; "relations": [ "buyer" ]; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; }, { "name": "priceMint"; "docs": [ "SPL token mint for price denomination (optional)" ]; "optional": true; }, { "name": "buyerTokenAccount"; "docs": [ "Buyer's token account (optional)" ]; "writable": true; "optional": true; }, { "name": "authorTokenAccount"; "docs": [ "Author's token account (optional)" ]; "writable": true; "optional": true; }, { "name": "treasuryTokenAccount"; "docs": [ "Treasury's token account (optional)" ]; "writable": true; "optional": true; }, { "name": "tokenProgram"; "docs": [ "SPL Token program (optional)" ]; "optional": true; "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; } ]; "args": [ { "name": "expectedPrice"; "type": "u64"; }, { "name": "expectedVersion"; "type": "u8"; }, { "name": "expectedContentHash"; "type": { "array": [ "u8", 32 ]; }; } ]; }, { "name": "rateHire"; "docs": [ "Rate a completed listing hire (P6.1). The task's recorded buyer", "(`task.creator`) scores the delivered work once the task is terminally", "`Completed`; one rating per hire is enforced by the init-once", "`[\"hire_rating\", task]` PDA. Folds the score into the source listing's", "`total_rating`/`rating_count` aggregate and emits `ListingRated`." ]; "discriminator": [ 31, 201, 148, 116, 69, 243, 201, 90 ]; "accounts": [ { "name": "task"; "docs": [ "The hired task being rated. Must be terminal `Completed` and its `creator`", "(the recorded buyer) must equal the signer (checked in the handler)." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "hireRecord"; "docs": [ "Links the task to its source listing (PDA `[\"hire\", task]`). Its existence", "proves this task was minted by a listing hire; `listing` here must match", "`hire_record.listing`." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 104, 105, 114, 101 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "listing"; "docs": [ "Source service listing whose rating aggregate is updated. Bound by its own", "canonical seeds AND matched to the hire record so it cannot be substituted." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 101, 114, 118, 105, 99, 101, 95, 108, 105, 115, 116, 105, 110, 103 ]; }, { "kind": "account"; "path": "listing.provider_agent"; "account": "serviceListing"; }, { "kind": "account"; "path": "listing.listing_id"; "account": "serviceListing"; } ]; }; }, { "name": "hireRating"; "docs": [ "One-rating-per-hire: `init` makes a second `rate_hire` on the same task fail." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 104, 105, 114, 101, 95, 114, 97, 116, 105, 110, 103 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "buyer"; "docs": [ "The buyer recorded on the task (`task.creator`). Must sign and pay rent.", "Buyer-equality is enforced in the handler against `task.creator`." ]; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "score"; "type": "u8"; }, { "name": "reviewHash"; "type": { "option": { "array": [ "u8", 32 ]; }; }; }, { "name": "reviewUri"; "type": "string"; } ]; }, { "name": "rateSkill"; "docs": [ "Rate a skill (1-5, reputation-weighted).", "One rating per agent per skill, enforced by PDA uniqueness." ]; "discriminator": [ 44, 124, 30, 253, 90, 244, 174, 75 ]; "accounts": [ { "name": "skill"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 107, 105, 108, 108 ]; }, { "kind": "account"; "path": "skill.author"; "account": "skillRegistration"; }, { "kind": "account"; "path": "skill.skill_id"; "account": "skillRegistration"; } ]; }; }, { "name": "ratingAccount"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 107, 105, 108, 108, 95, 114, 97, 116, 105, 110, 103 ]; }, { "kind": "account"; "path": "skill"; }, { "kind": "account"; "path": "rater"; } ]; }; }, { "name": "rater"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "rater.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "purchaseRecord"; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 107, 105, 108, 108, 95, 112, 117, 114, 99, 104, 97, 115, 101 ]; }, { "kind": "account"; "path": "skill"; }, { "kind": "account"; "path": "rater"; } ]; }; }, { "name": "authorAgent"; "docs": [ "Skill author's durable registration. Required so a legacy purchase made", "through another agent controlled by the same wallet cannot self-rate." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "author_agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; "relations": [ "rater" ]; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "rating"; "type": "u8"; }, { "name": "reviewHash"; "type": { "option": { "array": [ "u8", 32 ]; }; }; } ]; }, { "name": "reclaimCompletionBond"; "docs": [ "Permissionlessly refund a still-live completion bond to its poster once the", "task is Completed — recovers a bond stranded by a terminal exit that omitted", "the optional bond account (audit fix). `role`: 0 = creator, 1 = worker." ]; "discriminator": [ 199, 123, 80, 81, 92, 254, 10, 192 ]; "accounts": [ { "name": "task"; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "completionBond"; "docs": [ "validated by settle_completion_bond in the handler." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, 95, 98, 111, 110, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "party"; } ]; }; }, { "name": "party"; "writable": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "role"; "type": "u8"; } ]; }, { "name": "reclaimOrphanTaskChild"; "docs": [ "Return rent from a historical rent-only task child whose parent was", "destroyed by an older close_task implementation. The destination is", "derived from stored program state; the permissionless cranker cannot pick it." ]; "discriminator": [ 91, 115, 255, 0, 240, 58, 74, 223 ]; "accounts": [ { "name": "child"; "docs": [ "validated in the handler before any lamports move." ]; "writable": true; }, { "name": "parentTask"; "docs": [ "children, `TaskSubmission` for validation votes) and be a provably", "absent system-owned, zero-data account. The field name is ABI-stable." ]; }, { "name": "workerAgent"; "docs": [ "worker AgentRegistration and is fully deserialized/canonically verified." ]; }, { "name": "rentRecipient"; "docs": [ "writable. The cranker can never choose the rent destination." ]; "writable": true; }, { "name": "authority"; "docs": [ "Permissionless cranker. Its signature provides transaction accountability", "but grants no authority over the rent destination." ]; "signer": true; } ]; "args": []; }, { "name": "reclaimTerminalClaim"; "docs": [ "Permissionlessly reclaim an unsettled claim stranded on an already-terminal", "(Completed/Cancelled) task. The canonical submission PDA must prove an", "empty/no-submission record, a Rejected submission, or a still-Submitted", "Collaborative straggler after completion. Frees task/worker slot counters,", "returns eligible claim/submission balances to the worker, and forfeits any", "applicable no-show/rejection surplus to the treasury. Exit path — settles", "even while paused (money never locks)." ]; "discriminator": [ 224, 135, 44, 9, 88, 5, 32, 20 ]; "accounts": [ { "name": "authority"; "docs": [ "Permissionless caller; pays only the transaction fee." ]; "signer": true; }, { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "claim"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "worker"; } ]; }; }, { "name": "taskSubmission"; "docs": [ "The derived `[\"task_submission\", claim]` PDA — the unfakeable liveness", "probe. It must be system-owned with zero data (no submission was ever", "made for this claim, or it was already closed together with the claim by", "a settlement path — in which case THIS claim would not exist) OR hold a", "REJECTED submission (audit F-3 — then its rent is returned to the worker", "and it is tombstoned here, hence `mut`), OR hold a still-SUBMITTED", "Collaborative straggler after the task completed (its validation debt is", "settled here). A live program-owned submission in any other shape means", "the claim is still settleable by the normal paths and must not be", "short-circuited." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 115, 117, 98, 109, 105, 115, 115, 105, 111, 110 ]; }, { "kind": "account"; "path": "claim"; } ]; }; }, { "name": "taskValidationConfig"; "docs": [ "Validation counters for terminal cleanup of a still-Submitted", "Collaborative straggler. Omitted for the historical no-submission and", "Rejected-submission cleanup forms." ]; "writable": true; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 118, 97, 108, 105, 100, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "worker"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "worker.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "treasury"; "docs": [ "Receives the forfeited contest entry-deposit surplus (never the creator);", "0 lamports for non-contest claims." ]; "writable": true; }, { "name": "rentRecipient"; "docs": [ "Receives the eligible claim refund (rent minimum for an empty or Rejected", "record; full balance for a Submitted Collaborative straggler) and any", "closed submission balance. No caller-supplied-account trust." ]; "writable": true; } ]; "args": []; }, { "name": "recordAgentVerification"; "docs": [ "Record a domain-verification attestation for an agent (P7.3). A TRUSTED attestor", "(the global moderation authority OR a registered, non-revoked `ModerationAttestor`)", "records that operator domain `verified_domain` was proven to control the agent. The", "off-chain domain-control proof (TXT record / `.well-known` + signed challenge) is the", "attestor SERVICE's job; on-chain this only records the trusted verdict. `method`:", "0 = TxtRecord, 1 = WellKnown. `expires_at`: 0 = no expiry. Re-verification overwrites", "the `[\"agent_verification\", agent]` PDA in place." ]; "discriminator": [ 185, 60, 213, 195, 106, 238, 222, 56 ]; "accounts": [ { "name": "moderationConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 99, 111, 110, 102, 105, 103 ]; } ]; }; }, { "name": "agent"; "docs": [ "The agent being verified, pinned to its canonical `[\"agent\", agent_id]` PDA." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "agentVerification"; "docs": [ "Domain-verification attestation. `init_if_needed` so re-verification overwrites the", "same PDA in place. Keyed only by `agent` (one current verification per agent)." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116, 95, 118, 101, 114, 105, 102, 105, 99, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "agent"; } ]; }; }, { "name": "attestor"; "docs": [ "The recording signer. P1.2 §4.6: must be the GLOBAL moderation authority —", "the roster no longer authorizes domain verification (decoupled from the", "permissionless open roster; checked in the handler)." ]; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "verifiedDomain"; "type": "string"; }, { "name": "method"; "type": "u8"; }, { "name": "expiresAt"; "type": "i64"; } ]; }, { "name": "recordListingModeration"; "docs": [ "Record a moderation decision for a service listing's pinned job-spec hash,", "so `hire_from_listing` can gate at hire time. Moderation-authority only." ]; "discriminator": [ 83, 247, 2, 131, 91, 223, 49, 33 ]; "accounts": [ { "name": "moderationConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 99, 111, 110, 102, 105, 103 ]; } ]; }; }, { "name": "listing"; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 101, 114, 118, 105, 99, 101, 95, 108, 105, 115, 116, 105, 110, 103 ]; }, { "kind": "account"; "path": "listing.provider_agent"; "account": "serviceListing"; }, { "kind": "account"; "path": "listing.listing_id"; "account": "serviceListing"; } ]; }; }, { "name": "moderator"; "docs": [ "The recording signer. Authorization (global moderation authority OR a registered", "attestor) is checked in the handler, not as an account constraint here. Declared", "before `listing_moderation` so the v2 seed can reference it." ]; "writable": true; "signer": true; }, { "name": "listingModeration"; "docs": [ "P1.2 §4.3 — v2 MODERATOR-KEYED record (the listing mirror of", "`task_moderation_v2`): each attestor owns an exclusive slot; `init_if_needed`", "is self-re-review only; no cross-attestor overwrites. Post-upgrade, records are", "written ONLY under v2 seeds — legacy `[\"listing_moderation\", …]` PDAs are frozen." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 108, 105, 115, 116, 105, 110, 103, 95, 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 118, 50 ]; }, { "kind": "account"; "path": "listing"; }, { "kind": "arg"; "path": "jobSpecHash"; }, { "kind": "account"; "path": "moderator"; } ]; }; }, { "name": "moderationAttestor"; "docs": [ "OPTIONAL (P6.8): a registered moderation-attestor roster entry. When supplied (and", "`moderator == moderation_attestor.attestor`), authorizes a non-global-authority", "attestor to record. Bound to `[\"moderation_attestor\", moderator]` — Anchor enforces", "the canonical PDA, so a forged/mismatched entry fails account resolution, and a", "REVOKED attestor's PDA is closed and fails to load (cannot attest). This instruction", "is full-surface only, so this field carries no canary-surface implications." ]; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 97, 116, 116, 101, 115, 116, 111, 114 ]; }, { "kind": "account"; "path": "moderator"; } ]; }; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "jobSpecHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "status"; "type": "u8"; }, { "name": "riskScore"; "type": "u8"; }, { "name": "categoryMask"; "type": "u64"; }, { "name": "policyHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "scannerHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "expiresAt"; "type": "i64"; } ]; }, { "name": "recordTaskModeration"; "docs": [ "Record a moderation decision for a task/job-spec hash." ]; "discriminator": [ 156, 205, 56, 24, 136, 114, 93, 160 ]; "accounts": [ { "name": "moderationConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 99, 111, 110, 102, 105, 103 ]; } ]; }; }, { "name": "task"; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "moderator"; "docs": [ "The recording signer. Authorization is checked in the handler (NOT as an account", "constraint here) so the registered-attestor OR global-authority branch can be", "evaluated. In the canary build there is no attestor account, so the handler falls", "back to the global-authority-only check — the canary surface stays frozen.", "Declared BEFORE `task_moderation` in the full build so the v2 seed can reference", "it (an IDL account-order change for this batch's regenerated clients)." ]; "writable": true; "signer": true; }, { "name": "taskModeration"; "docs": [ "P1.2 §4.3 — v2 MODERATOR-KEYED record: each attestor owns an exclusive slot, so", "`init_if_needed` is self-re-review only. No attestor can overwrite another's", "verdict (flip a trusted BLOCKED→CLEAN or grief CLEAN→BLOCKED); a trusted", "attestor's BLOCKED verdict is un-erasable evidence. Post-upgrade, records are", "written ONLY under v2 seeds — legacy `[\"task_moderation\", …]` PDAs are frozen." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 118, 50 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "arg"; "path": "jobSpecHash"; }, { "kind": "account"; "path": "moderator"; } ]; }; }, { "name": "moderationAttestor"; "docs": [ "OPTIONAL (P6.8): a registered moderation-attestor roster entry. When supplied (and", "`moderator == moderation_attestor.attestor`), authorizes a non-global-authority", "attestor to record. Bound to `[\"moderation_attestor\", moderator]` — Anchor enforces", "the canonical PDA, so a forged or mismatched entry fails account resolution; a", "REVOKED attestor's PDA is closed and fails to load (cannot attest). Full-surface", "only — gated so the frozen canary account list for `record_task_moderation` is", "unchanged." ]; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 97, 116, 116, 101, 115, 116, 111, 114 ]; }, { "kind": "account"; "path": "moderator"; } ]; }; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "jobSpecHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "status"; "type": "u8"; }, { "name": "riskScore"; "type": "u8"; }, { "name": "categoryMask"; "type": "u64"; }, { "name": "policyHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "scannerHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "expiresAt"; "type": "i64"; } ]; }, { "name": "registerAgent"; "docs": [ "Register a new agent on-chain with its capabilities and metadata.", "Creates a unique PDA for the agent that serves as its on-chain identity.", "", "# Arguments", "* `ctx` - Context containing agent account and signer", "* `agent_id` - Unique 32-byte identifier for the agent", "* `capabilities` - Bitmask of agent capabilities (see AgentCapability)", "* `endpoint` - Network endpoint for off-chain communication", "* `metadata_uri` - Optional URI to extended metadata (IPFS/Arweave)" ]; "discriminator": [ 135, 157, 66, 195, 2, 113, 175, 30 ]; "accounts": [ { "name": "agent"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "arg"; "path": "agentId"; } ]; }; }, { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "agentId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "capabilities"; "type": "u64"; }, { "name": "endpoint"; "type": "string"; }, { "name": "metadataUri"; "type": { "option": "string"; }; }, { "name": "stakeAmount"; "type": "u64"; } ]; }, { "name": "registerModerationAttestor"; "docs": [ "Self-register onto the open moderation-attestor roster (P1.2 §4.1,", "permissionless). The signer pays rent + the hardcoded registration bond onto its", "own roster PDA; `assigned_by = self` marks the entry self-registered. The bond is", "an identity deposit — never confiscatable, refunded in full at exit-finalize." ]; "discriminator": [ 118, 194, 62, 4, 232, 60, 199, 142 ]; "accounts": [ { "name": "moderationAttestor"; "docs": [ "Roster entry for the self-registering signer. `init` ⇒ registering an", "already-rostered wallet fails (the desired \"already registered\" signal), and a", "re-register after exit re-inits a fresh entry." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 97, 116, 116, 101, 115, 116, 111, 114 ]; }, { "kind": "account"; "path": "attestor"; } ]; }; }, { "name": "attestor"; "docs": [ "The self-registering wallet. No authority constraint — this is the", "permissionless path. It pays rent AND the registration bond." ]; "writable": true; "signer": true; }, { "name": "protocolConfig"; "docs": [ "Emergency entry-control. A paused or version-incompatible protocol must", "not accept a fresh seven-day moderation bond while ordinary marketplace", "entry is disabled. Exit instructions intentionally do not carry this", "pause gate, so existing attestors can always recover their bond." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": []; }, { "name": "registerSkill"; "docs": [ "Register a new skill on-chain.", "Author must be an active agent." ]; "discriminator": [ 166, 249, 255, 189, 192, 197, 102, 2 ]; "accounts": [ { "name": "skill"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 107, 105, 108, 108 ]; }, { "kind": "account"; "path": "author"; }, { "kind": "arg"; "path": "skillId"; } ]; }; }, { "name": "author"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "author.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; "relations": [ "author" ]; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "skillId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "name"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "contentHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "price"; "type": "u64"; }, { "name": "priceMint"; "type": { "option": "pubkey"; }; }, { "name": "tags"; "type": { "array": [ "u8", 64 ]; }; } ]; }, { "name": "registerStore"; "docs": [ "Register a permissionless on-chain store identity (P5.2, batch 2). The", "signer pays rent + the hardcoded 0.05 SOL bond onto its own `[\"store\",", "owner]` PDA. The handle is display-only (NOT unique on-chain); fee fields", "are advertised defaults, not enforcement." ]; "discriminator": [ 63, 55, 152, 6, 167, 127, 89, 129 ]; "accounts": [ { "name": "store"; "docs": [ "`init` ⇒ one store per wallet (the live product invariant); registering", "twice fails at account creation, and a re-register after close re-inits a", "fresh entry." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 116, 111, 114, 101 ]; }, { "kind": "account"; "path": "owner"; } ]; }; }, { "name": "owner"; "docs": [ "The self-registering store owner. No authority constraint — this is the", "permissionless path. Pays rent AND the registration bond." ]; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "handle"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "metadataHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "metadataUri"; "type": "string"; }, { "name": "referrerFeeBps"; "type": "u16"; }, { "name": "operator"; "type": "pubkey"; }, { "name": "operatorFeeBps"; "type": "u16"; }, { "name": "domain"; "type": "string"; } ]; }, { "name": "rejectAndFreeze"; "docs": [ "Terminally reject a submission and freeze the task for review (Batch 3 §8).", "Settles only via resolve_reject_frozen / expire_reject_frozen." ]; "discriminator": [ 114, 109, 131, 41, 79, 109, 135, 18 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "claim"; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "claim.worker"; "account": "taskClaim"; } ]; }; }, { "name": "taskValidationConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 118, 97, 108, 105, 100, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskSubmission"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 115, 117, 98, 109, 105, 115, 115, 105, 111, 110 ]; }, { "kind": "account"; "path": "claim"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "creator"; "writable": true; "signer": true; }, { "name": "agentStats"; "docs": [ "OPTIONAL (P6.6): the worker agent's track-record aggregate. When supplied, this", "freeze-rejection bumps `tasks_rejected`. Bound to `[\"agent_stats\", claim.worker]`", "(the claim's worker is the worker AgentRegistration PDA), created lazily on first", "write. Telemetry only — never gates the freeze above." ]; "writable": true; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116, 95, 115, 116, 97, 116, 115 ]; }, { "kind": "account"; "path": "claim.worker"; "account": "taskClaim"; } ]; }; }, { "name": "systemProgram"; "docs": [ "Required only when `agent_stats` is supplied (for `init_if_needed`)." ]; "optional": true; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "rejectionHash"; "type": { "array": [ "u8", 32 ]; }; } ]; }, { "name": "rejectTaskResult"; "docs": [ "Reject a creator-reviewed submission and return the task to active work." ]; "discriminator": [ 144, 7, 58, 232, 157, 167, 85, 214 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "claim"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "claim.worker"; "account": "taskClaim"; } ]; }; }, { "name": "taskValidationConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 118, 97, 108, 105, 100, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskSubmission"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 115, 117, 98, 109, 105, 115, 115, 105, 111, 110 ]; }, { "kind": "account"; "path": "claim"; } ]; }; }, { "name": "worker"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "worker.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "creator"; "writable": true; "signer": true; }, { "name": "workerAuthority"; "writable": true; }, { "name": "agentStats"; "docs": [ "OPTIONAL (P6.6): the worker agent's track-record aggregate. When supplied, this", "rejection bumps `tasks_rejected`. Created lazily on first write (`init_if_needed`),", "bound to the canonical `[\"agent_stats\", worker]` PDA. Full-surface only — gated so", "the frozen canary account list for `reject_task_result` is unchanged." ]; "writable": true; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116, 95, 115, 116, 97, 116, 115 ]; }, { "kind": "account"; "path": "worker"; } ]; }; }, { "name": "systemProgram"; "docs": [ "Required only when `agent_stats` is supplied (for `init_if_needed`)." ]; "optional": true; "address": "11111111111111111111111111111111"; }, { "name": "workerCompletionBond"; "docs": [ "The rejected worker's completion bond is refunded at the same atomic", "boundary that closes their claim. Leaving it alive after the worker", "identity disappears from the Task made later cancel/close callers unable", "to prove which worker bond still existed and allowed permanent stranding." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, 95, 98, 111, 110, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "workerAuthority"; } ]; }; } ]; "args": [ { "name": "rejectionHash"; "type": { "array": [ "u8", 32 ]; }; } ]; }, { "name": "requestAttestorExit"; "docs": [ "Start the two-step attestor exit (P1.2 §4.2). Monotonic — a running exit clock", "cannot be reset. From this moment the attestor is rejected at the record and", "consumption gates (the window closes at REQUEST, not finalize)." ]; "discriminator": [ 94, 3, 20, 231, 175, 66, 101, 44 ]; "accounts": [ { "name": "moderationAttestor"; "docs": [ "Roster entry to exit. Seeded by its own stored `attestor` (canonical PDA).", "The exit path is for SELF-REGISTERED entries only (`assigned_by == attestor`):", "a deputized entry (`assigned_by == authority`, bond 0, rent paid by the", "authority) is authority-managed and comes off the roster via", "`revoke_moderation_attestor` (rent → authority), NOT here. Without this scope a", "deputy could self-remove outside the authority's control and `close = attestor`", "would redirect the authority-funded rent to the deputy (adversarial finding)." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 97, 116, 116, 101, 115, 116, 111, 114 ]; }, { "kind": "account"; "path": "moderation_attestor.attestor"; "account": "moderationAttestor"; } ]; }; }, { "name": "attestor"; "docs": [ "Only the attestor itself may start its exit." ]; "signer": true; } ]; "args": []; }, { "name": "requestChanges"; "docs": [ "Request free, non-terminal revisions on a submitted result (Batch 3 §8). Keeps", "the claim open for an in-place resubmit; bounded by MAX_REVISION_ROUNDS." ]; "discriminator": [ 136, 84, 241, 1, 189, 89, 226, 187 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "claim"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "claim.worker"; "account": "taskClaim"; } ]; }; }, { "name": "taskValidationConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 118, 97, 108, 105, 100, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskSubmission"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 115, 117, 98, 109, 105, 115, 115, 105, 111, 110 ]; }, { "kind": "account"; "path": "claim"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "creator"; "writable": true; "signer": true; } ]; "args": [ { "name": "changesHash"; "type": { "array": [ "u8", 32 ]; }; } ]; }, { "name": "resolveDispute"; "docs": [ "Resolve a dispute. A direct protocol-authority ruling requires configured", "M-of-N owner approval; an assigned resolver must have been seated through", "that same threshold-controlled roster. `approve` upholds the initiator's", "requested resolution_type; `!approve` refunds the creator. No per-case", "arbiter vote tally or quorum is consulted.", "", "P6.4 accountable rulings: a reasoned ruling is REQUIRED — `rationale_hash` (a", "32-byte content hash of the off-chain rationale) and a bounded `rationale_uri`.", "Both are persisted on the dispute alongside the deciding resolver, and the hash", "+ resolver are emitted in `DisputeResolved`." ]; "discriminator": [ 231, 6, 202, 6, 96, 103, 12, 230 ]; "accounts": [ { "name": "dispute"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 100, 105, 115, 112, 117, 116, 101 ]; }, { "kind": "account"; "path": "dispute.dispute_id"; "account": "dispute"; } ]; }; }, { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "escrow"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 101, 115, 99, 114, 111, 119 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "docs": [ "The resolver: EITHER the protocol authority with configured M-of-N approval in", "remaining accounts OR a wallet on the dispute-resolver roster. The OR is enforced", "in the handler against `resolver_assignment` below — a plain account constraint", "cannot express \"this key OR that account exists\".", "`mut` so it can pay rent for the optional `agent_stats` init (P6.6)." ]; "writable": true; "signer": true; }, { "name": "resolverAssignment"; "docs": [ "Optional roster entry proving `authority` is an assigned dispute resolver. A plain", "optional account (NOT seeds-derived) so the client can pass `None` when resolving as", "the protocol authority; when present it must be a program-owned `DisputeResolver`", "whose `resolver` equals the signer (enforced in the handler). Only an", "authority-proposed, configured M-of-N-approved `assign_dispute_resolver` can mint", "one, and the handler binds it to this signer, so the canonical", "[\"dispute_resolver\", signer] PDA is enforced transitively.", "", "`mut` (P6.4): when an assigned resolver decides the dispute, their case counters", "(`resolved_count`, `last_resolved_at`) are bumped on this account. The protocol", "authority resolving directly passes `None` plus M-of-N owner signers in remaining", "accounts (no per-resolver counter to bump)." ]; "writable": true; "optional": true; }, { "name": "creator"; "writable": true; }, { "name": "workerClaim"; "docs": [ "Worker's claim proving they worked on task (fix #59)", "Required for Complete/Split resolutions that pay a worker", "Made mutable to allow closing after dispute resolution (fix #439)" ]; "writable": true; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "worker_claim.worker"; "account": "taskClaim"; } ]; }; }, { "name": "worker"; "docs": [ "Worker agent account for the dispute defendant." ]; "writable": true; "optional": true; }, { "name": "agentStats"; "docs": [ "OPTIONAL (P6.6): the defendant worker's track-record aggregate. When supplied,", "resolution bumps `disputes_won` (worker prevailed) or `disputes_lost` (worker was", "slashed). Bound to `[\"agent_stats\", dispute.defendant]` (the handler validates", "`worker.key() == dispute.defendant`), created lazily on first write. The", "`disputes_lost` counter is the SDK slash-history signal. Telemetry only." ]; "writable": true; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116, 95, 115, 116, 97, 116, 115 ]; }, { "kind": "account"; "path": "dispute.defendant"; "account": "dispute"; } ]; }; }, { "name": "workerWallet"; "writable": true; "optional": true; }, { "name": "hireRecord"; "docs": [ "Hire link PDA ([\"hire\", task]) — ALWAYS required so a hired task's operator fee", "cannot be bypassed by settling through dispute resolution. A live (program-owned)", "record forces the operator leg; for a non-hired task the caller passes the empty,", "system-owned PDA. CHECK: live-vs-absent decided by `owner` in the handler; a live", "record is deserialized + validated there." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 104, 105, 114, 101 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "disputeOperator"; "docs": [ "HireRecord fallback); required only when those terms carry a non-zero operator fee.", "Receives the operator leg (SOL)." ]; "writable": true; "optional": true; }, { "name": "disputeReferrer"; "docs": [ "dispute exits honor the snapshotted referrer leg); required only when those terms", "carry a non-zero referrer fee. Receives the referrer leg (SOL)." ]; "writable": true; "optional": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; }, { "name": "tokenEscrowAta"; "docs": [ "Token escrow ATA holding reward tokens (optional)" ]; "writable": true; "optional": true; }, { "name": "creatorTokenAccount"; "docs": [ "Creator's token account for refund (optional)" ]; "writable": true; "optional": true; }, { "name": "workerTokenAccountAta"; "docs": [ "Worker's token account for payment (optional)" ]; "writable": true; "optional": true; }, { "name": "treasuryTokenAccount"; "docs": [ "Treasury's token account for protocol fees (optional)" ]; "writable": true; "optional": true; }, { "name": "rewardMint"; "docs": [ "SPL token mint (optional, must match task.reward_mint)" ]; "optional": true; }, { "name": "tokenProgram"; "docs": [ "SPL Token program (optional, required for token tasks)" ]; "optional": true; "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; }, { "name": "creatorCompletionBond"; "docs": [ "forfeited to the treasury. Fully validated by settle_completion_bond." ]; "writable": true; }, { "name": "workerCompletionBond"; "writable": true; }, { "name": "bondTreasury"; "writable": true; }, { "name": "taskSubmission"; "docs": [ "REQUIRED-EVIDENCE ON THE OPTIONAL WIRE (audit F-9): callers pass the", "canonical TaskSubmission PDA for the defendant claim. A live record is", "swept before claim close; the exact system-owned empty PDA proves absence.", "`Option` preserves the deployed account list, but `None` fails closed." ]; "writable": true; "optional": true; }, { "name": "taskValidationConfig"; "docs": [ "OPTIONAL: canonical TaskValidationConfig, required when the swept manual", "submission is still Submitted and therefore carries counter debt." ]; "writable": true; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 118, 97, 108, 105, 100, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "task"; } ]; }; } ]; "args": [ { "name": "approve"; "type": "bool"; }, { "name": "rationaleHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "rationaleUri"; "type": "string"; } ]; }, { "name": "resolveRejectFrozen"; "docs": [ "Multisig review decision on a frozen task (Batch 3 §8): pay the worker", "(approve_completion=true) or refund the creator (false), disposing both bonds.", "Exit path — settles even while paused (money never locks)." ]; "discriminator": [ 247, 17, 223, 213, 12, 193, 235, 127 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "claim"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "claim.worker"; "account": "taskClaim"; } ]; }; }, { "name": "escrow"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 101, 115, 99, 114, 111, 119 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskSubmission"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 115, 117, 98, 109, 105, 115, 115, 105, 111, 110 ]; }, { "kind": "account"; "path": "claim"; } ]; }; }, { "name": "worker"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "worker.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "treasury"; "writable": true; }, { "name": "creator"; "writable": true; }, { "name": "workerAuthority"; "writable": true; }, { "name": "hireRecord"; "docs": [ "system-owned PDA. A legacy live record carries fee terms not stamped on Task." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 104, 105, 114, 101 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "operator"; "writable": true; "optional": true; }, { "name": "referrer"; "writable": true; "optional": true; }, { "name": "authority"; "docs": [ "Multisig review authority; `remaining_accounts` carries the co-signers." ]; "signer": true; }, { "name": "creatorCompletionBond"; "docs": [ "cannot omit a live bond to dodge the forfeit (audit). settle no-ops if no bond", "was posted (the empty PDA). Forfeits go to `treasury` (== protocol_config.treasury)." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, 95, 98, 111, 110, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "creator"; } ]; }; }, { "name": "workerCompletionBond"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, 95, 98, 111, 110, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "workerAuthority"; } ]; }; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "approveCompletion"; "type": "bool"; } ]; }, { "name": "revokeAgentVerification"; "docs": [ "Revoke an agent's domain verification (P7.3), marking it `revoked = true` so the", "record stays readable. Same trusted-roster authorization as", "`record_agent_verification`." ]; "discriminator": [ 241, 39, 84, 1, 9, 216, 243, 66 ]; "accounts": [ { "name": "moderationConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 99, 111, 110, 102, 105, 103 ]; } ]; }; }, { "name": "agentVerification"; "docs": [ "The verification to revoke, pinned to its canonical PDA (seeded by the stored agent)." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116, 95, 118, 101, 114, 105, 102, 105, 99, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "agent_verification.agent"; "account": "agentVerification"; } ]; }; }, { "name": "attestor"; "docs": [ "The revoking signer. P1.2 §4.6: must be the GLOBAL moderation authority", "(checked in the handler; the roster no longer authorizes this)." ]; "writable": true; "signer": true; } ]; "args": []; }, { "name": "revokeDelegation"; "docs": [ "Permissionlessly retire a legacy reputation delegation without restoring", "slash-sheltered reputation. An identity-continuous record returns rent to", "its recorded authority; an orphan sends rent only to the canonical treasury.", "Orphan recovery appends exactly two accounts after the three fixed metas:", "`[canonical ProtocolConfig readonly, configured treasury writable]`." ]; "discriminator": [ 188, 92, 135, 67, 160, 181, 54, 62 ]; "accounts": [ { "name": "authority"; "docs": [ "recorded on `delegator_agent` and is the rent recipient. It deliberately", "need not sign: delegation is a retired, non-beneficial feature, and making", "the exit permissionless prevents an owner from blocking a mainnet cutover." ]; "writable": true; }, { "name": "delegatorAgent"; "docs": [ "in the handler. Unchecked is required because deployed revision 4 could", "close this PDA after creating a delegation." ]; "writable": true; }, { "name": "delegation"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 114, 101, 112, 117, 116, 97, 116, 105, 111, 110, 95, 100, 101, 108, 101, 103, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "delegatorAgent"; }, { "kind": "account"; "path": "delegation.delegatee"; "account": "reputationDelegation"; } ]; }; } ]; "args": []; }, { "name": "revokeDisputeResolver"; "docs": [ "Remove a wallet from the dispute-resolver roster after a protocol-authority", "proposal receives configured M-of-N approval, closing its assignment PDA." ]; "discriminator": [ 155, 111, 4, 156, 192, 155, 89, 134 ]; "accounts": [ { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "disputeResolver"; "docs": [ "Roster entry to remove. Seeded by its own stored `resolver`, so the canonical PDA", "is enforced; `close = authority` returns the rent to the protocol authority." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 100, 105, 115, 112, 117, 116, 101, 95, 114, 101, 115, 111, 108, 118, 101, 114 ]; }, { "kind": "account"; "path": "dispute_resolver.resolver"; "account": "disputeResolver"; } ]; }; }, { "name": "authority"; "docs": [ "Must be the protocol authority; configured M-of-N approval arrives through", "remaining accounts." ]; "writable": true; "signer": true; } ]; "args": []; }, { "name": "revokeModerationAttestor"; "docs": [ "Remove a wallet from the moderation-attestor roster (P1.2: scoped — the caller", "may remove only entries it itself created, so a self-registered attestor can be", "removed from chain by no one but itself), closing its assignment PDA." ]; "discriminator": [ 192, 141, 245, 60, 48, 104, 165, 105 ]; "accounts": [ { "name": "moderationConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 99, 111, 110, 102, 105, 103 ]; } ]; }; }, { "name": "moderationAttestor"; "docs": [ "Roster entry to remove. Seeded by its own stored `attestor`, so the canonical PDA", "is enforced; `close = authority` returns the rent to the moderation authority.", "P1.2 §4.7: `assigned_by` must be the revoking authority — a self-registered", "entry (`assigned_by == attestor`) can never be closed by the authority, so its", "bond can never be confiscated through this path." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 97, 116, 116, 101, 115, 116, 111, 114 ]; }, { "kind": "account"; "path": "moderation_attestor.attestor"; "account": "moderationAttestor"; } ]; }; }, { "name": "authority"; "docs": [ "Must be the moderation authority that owns the moderation config." ]; "writable": true; "signer": true; } ]; "args": []; }, { "name": "setDefaultTrustList"; "docs": [ "Update the on-chain default trusted-attestor list pointer (P1.2 §5.1,", "multisig-gated). Advisory display-layer curation — gates nothing on-chain;", "`version` is monotonic and `updated_at` is the deadman signal." ]; "discriminator": [ 134, 54, 111, 97, 148, 185, 102, 131 ]; "accounts": [ { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "defaultTrustList"; "docs": [ "Singleton pointer PDA; `init_if_needed` so the first update creates it." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 100, 101, 102, 97, 117, 108, 116, 95, 116, 114, 117, 115, 116, 95, 108, 105, 115, 116 ]; } ]; }; }, { "name": "authority"; "docs": [ "Fee payer / tx assembler. Approval authority is the multisig threshold over", "`remaining_accounts`, exactly like `update_protocol_fee`." ]; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "listHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "listUri"; "type": "string"; } ]; }, { "name": "setModerationBlock"; "docs": [ "Set (or re-set) the multisig-governed BLOCK-only takedown floor for a content", "hash (P1.2 §5.2). Requires `multisig_threshold` owner signatures in remaining", "accounts and an on-chain rationale. All three consumption gates hard-reject a", "blocked hash regardless of which CLEAN attestor the caller presents." ]; "discriminator": [ 212, 41, 81, 152, 230, 234, 217, 101 ]; "accounts": [ { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "moderationBlock"; "docs": [ "`init_if_needed`: a cleared block can be re-set (same PDA, audit trail intact)", "and a live block's rationale can be updated." ]; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 98, 108, 111, 99, 107 ]; }, { "kind": "arg"; "path": "contentHash"; } ]; }; }, { "name": "authority"; "docs": [ "Fee payer / tx assembler. Approval authority is the multisig threshold over", "`remaining_accounts`, exactly like `update_protocol_fee`." ]; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "contentHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "rationaleHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "rationaleUri"; "type": "string"; } ]; }, { "name": "setServiceListingState"; "docs": [ "Pause / reactivate / retire a service listing (provider-only). Reactivating", "to `Active` requires exactly one readonly remaining account: the listing's", "canonical provider `AgentRegistration`. Pausing or retiring requires no", "remaining accounts, so a closed provider identity cannot block safe exits." ]; "discriminator": [ 87, 136, 109, 167, 206, 112, 223, 72 ]; "accounts": [ { "name": "listing"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 101, 114, 118, 105, 99, 101, 95, 108, 105, 115, 116, 105, 110, 103 ]; }, { "kind": "account"; "path": "listing.provider_agent"; "account": "serviceListing"; }, { "kind": "account"; "path": "listing.listing_id"; "account": "serviceListing"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "signer": true; "relations": [ "listing" ]; } ]; "args": [ { "name": "newState"; "type": "u8"; } ]; }, { "name": "setTaskJobSpec"; "docs": [ "Attach or update a content-addressed off-chain job specification pointer for a", "task. P1.2 §4.4: `moderator` names the attestor whose moderation record the", "caller consumes (the record slot is v2-else-legacy; the required", "`moderation_block` account is the §5.2 takedown floor).", "Discriminator = sha256(\"global:set_task_job_spec_v2\")[0..8]." ]; "discriminator": [ 118, 9, 99, 58, 215, 87, 58, 59 ]; "accounts": [ { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "task"; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "moderationConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 99, 111, 110, 102, 105, 103 ]; } ]; }; }, { "name": "taskModeration"; "docs": [ "P1.2 §4.4 — the v2-else-legacy moderation record slot. The v2 seed carries the", "moderator INSIDE the primary record's derivation (circular for Anchor's", "declarative seeds), so this arrives unchecked and the handler re-implements", "every dropped constraint via `load_task_moderation_record`: canonical PDA", "(v2 first, frozen-legacy fallback), `owner == crate::ID`, discriminator, and", "the task/creator/hash/moderator bindings. A wrong-seed account fails CLOSED.", "", "v2/legacy PDA + owner + discriminator + field bindings)." ]; }, { "name": "moderationAttestor"; "docs": [ "OPTIONAL: a registered moderation-attestor roster entry that unlocks the", "publish gate when the moderation was authored by a non-global-authority", "attestor. P1.2: bound by seeds to the EXPLICIT `moderator` instruction argument", "(the caller chooses which attestor's verdict it consumes — §4.4), with", "`attestor == moderator`, so Anchor enforces the canonical roster PDA. A forged", "or mismatched entry fails account resolution; a REVOKED attestor's PDA is", "closed and fails to load (fail-closed, the WP-A1 property this refactor must", "not regress). Only needed when `moderator != moderation_authority`; the global", "authority path passes with this absent (`None`). Full-surface only." ]; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 97, 116, 116, 101, 115, 116, 111, 114 ]; }, { "kind": "arg"; "path": "moderator"; } ]; }; }, { "name": "moderationBlock"; "docs": [ "P1.2 §5.2 — the REQUIRED BLOCK-floor slot. The handler derives", "`[\"moderation_block\", job_spec_hash]` itself and rejects a mismatched address,", "so the caller can neither omit nor substitute it; a multisig-BLOCKED hash", "hard-rejects regardless of which CLEAN attestor is presented.", "", "(handler-derived canonical PDA; system-owned/empty = pass)." ]; }, { "name": "taskJobSpec"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 106, 111, 98, 95, 115, 112, 101, 99 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "creator"; "writable": true; "signer": true; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; }, { "name": "hireRecord"; "docs": [ "Canonical hire-link PDA. A program-owned record proves this task came", "from a listing and binds the published job spec to the immutable hash", "snapshotted in `Task.description[32..64]` at hire time. A direct task must", "supply the empty system-owned account at the same canonical address.", "", "bump, and immutable hash commitment are validated in the handler." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 104, 105, 114, 101 ]; }, { "kind": "account"; "path": "task"; } ]; }; } ]; "args": [ { "name": "jobSpecHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "jobSpecUri"; "type": "string"; }, { "name": "moderator"; "type": "pubkey"; } ]; }, { "name": "settleDisputeClaim"; "docs": [ "Permissionlessly settle one deferred collaborative peer claim after a", "dispute ruling (chunked settlement). The dispute reaches its recorded", "terminal status when the last peer settles." ]; "discriminator": [ 139, 155, 103, 84, 64, 11, 148, 6 ]; "accounts": [ { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "dispute"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 100, 105, 115, 112, 117, 116, 101 ]; }, { "kind": "account"; "path": "dispute.dispute_id"; "account": "dispute"; } ]; }; }, { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "claim"; "docs": [ "and binding to `worker` are all enforced by the shared bundle", "validation in the handler (identical to the retired monolithic path)." ]; "writable": true; }, { "name": "worker"; "docs": [ "the shared bundle validation; receives the closed claim's rent." ]; "writable": true; }, { "name": "taskSubmission"; "docs": [ "swept with counter conservation; the exact empty system-owned PDA", "proves absence. Non-skippable evidence, as on the retired path." ]; "writable": true; }, { "name": "taskValidationConfig"; "writable": true; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 118, 97, 108, 105, 100, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "authority"; "signer": true; } ]; "args": []; }, { "name": "stakeReputation"; "docs": [ "Stake SOL on agent reputation.", "Creates or adds to an existing reputation stake account." ]; "discriminator": [ 104, 250, 157, 87, 16, 190, 180, 238 ]; "accounts": [ { "name": "authority"; "writable": true; "signer": true; "relations": [ "agent" ]; }, { "name": "agent"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "reputationStake"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 114, 101, 112, 117, 116, 97, 116, 105, 111, 110, 95, 115, 116, 97, 107, 101 ]; }, { "kind": "account"; "path": "agent"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "amount"; "type": "u64"; } ]; }, { "name": "stampReleaseSurface"; "docs": [ "Atomically verify the reviewed mainnet release accounts and stamp the", "current surface revision while the protocol remains paused." ]; "discriminator": [ 20, 228, 18, 239, 43, 249, 247, 119 ]; "accounts": [ { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "bidMarketplaceConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100, 95, 109, 97, 114, 107, 101, 116, 112, 108, 97, 99, 101 ]; } ]; }; }, { "name": "moderationConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 109, 111, 100, 101, 114, 97, 116, 105, 111, 110, 95, 99, 111, 110, 102, 105, 103 ]; } ]; }; }, { "name": "programData"; "docs": [ "below before any state write. Read-only inclusion also takes the runtime", "account lock against a concurrent loader upgrade." ]; }, { "name": "anchorIdl"; }, { "name": "upgradeAuthorityCustody"; "docs": [ "reviewed arguments. Its read lock prevents a concurrent custody-policy", "mutation from crossing the stamp boundary." ]; }, { "name": "authority"; "signer": true; } ]; "args": [ { "name": "disabledTaskTypeMask"; "type": "u8"; }, { "name": "surfaceRevision"; "type": "u16"; }, { "name": "expectedProtocolConfigHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "expectedProgramDataSlot"; "type": "u64"; }, { "name": "expectedProgramDataPayloadLen"; "type": "u32"; }, { "name": "expectedUpgradeAuthority"; "type": "pubkey"; }, { "name": "expectedBidConfigHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "expectedModerationConfigHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "expectedIdlAccountHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "expectedCustodyAddress"; "type": "pubkey"; }, { "name": "expectedCustodyOwner"; "type": "pubkey"; }, { "name": "expectedCustodyAccountHash"; "type": { "array": [ "u8", 32 ]; }; } ]; }, { "name": "submitTaskResult"; "docs": [ "Submit a result for creator review before final settlement." ]; "discriminator": [ 39, 108, 74, 4, 66, 125, 157, 7 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "claim"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "worker"; } ]; }; }, { "name": "taskValidationConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 118, 97, 108, 105, 100, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskSubmission"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 115, 117, 98, 109, 105, 115, 115, 105, 111, 110 ]; }, { "kind": "account"; "path": "claim"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "worker"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "worker.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; "relations": [ "worker" ]; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "proofHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "resultData"; "type": { "option": { "array": [ "u8", 64 ]; }; }; } ]; }, { "name": "suspendAgent"; "docs": [ "Suspend an agent (protocol authority only, fix #819).", "Prevents the agent from claiming tasks or participating in disputes." ]; "discriminator": [ 242, 28, 54, 59, 247, 20, 59, 110 ]; "accounts": [ { "name": "agent"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "signer": true; "relations": [ "protocolConfig" ]; } ]; "args": []; }, { "name": "unsuspendAgent"; "docs": [ "Unsuspend an agent (protocol authority only, fix #819).", "Restores the agent to Inactive status." ]; "discriminator": [ 79, 75, 53, 57, 177, 142, 131, 149 ]; "accounts": [ { "name": "agent"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "signer": true; "relations": [ "protocolConfig" ]; } ]; "args": []; }, { "name": "updateAgent"; "docs": [ "Update an existing agent's registration data.", "Only the agent's authority can modify its registration." ]; "discriminator": [ 85, 2, 178, 9, 119, 139, 102, 164 ]; "accounts": [ { "name": "agent"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "authority"; "signer": true; "relations": [ "agent" ]; } ]; "args": [ { "name": "capabilities"; "type": { "option": "u64"; }; }, { "name": "endpoint"; "type": { "option": "string"; }; }, { "name": "metadataUri"; "type": { "option": "string"; }; }, { "name": "status"; "type": { "option": "u8"; }; } ]; }, { "name": "updateBid"; "docs": [ "Update an existing Marketplace V2 bid." ]; "discriminator": [ 30, 24, 210, 187, 71, 101, 78, 46 ]; "accounts": [ { "name": "task"; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "taskJobSpec"; "docs": [ "Current exact creator-locked job contract. A legacy unbound bid becomes", "accept-safe only after its bidder refreshes it through this instruction." ]; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 106, 111, 98, 95, 115, 112, 101, 99 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "bidBook"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100, 95, 98, 111, 111, 107 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "bid"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "bidder"; } ]; }; }, { "name": "bidder"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "bidder.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "authority"; "signer": true; "relations": [ "bidder" ]; }, { "name": "bidMarketplace"; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100, 95, 109, 97, 114, 107, 101, 116, 112, 108, 97, 99, 101 ]; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; } ]; "args": [ { "name": "requestedRewardLamports"; "type": "u64"; }, { "name": "etaSeconds"; "type": "u32"; }, { "name": "confidenceBps"; "type": "u16"; }, { "name": "qualityGuaranteeHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "metadataHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "expiresAt"; "type": "i64"; }, { "name": "expectedJobSpecHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "expectedJobSpecUpdatedAt"; "type": "i64"; } ]; }, { "name": "updateBidMarketplaceConfig"; "docs": [ "Update Marketplace V2 global configuration." ]; "discriminator": [ 188, 47, 195, 95, 22, 60, 246, 211 ]; "accounts": [ { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "bidMarketplace"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 98, 105, 100, 95, 109, 97, 114, 107, 101, 116, 112, 108, 97, 99, 101 ]; } ]; }; }, { "name": "authority"; "signer": true; } ]; "args": [ { "name": "minBidBondLamports"; "type": "u64"; }, { "name": "bidCreationCooldownSecs"; "type": "i64"; }, { "name": "maxBidsPer24h"; "type": "u16"; }, { "name": "maxActiveBidsPerTask"; "type": "u16"; }, { "name": "maxBidLifetimeSecs"; "type": "i64"; }, { "name": "acceptedNoShowSlashBps"; "type": "u16"; } ]; }, { "name": "updateGoodsListing"; "docs": [ "Batch 4: update a goods listing (seller only): price / active flag /", "metadata (hash+uri together) / tags / operator terms, and RESTOCK via", "additive delta only (never an absolute supply set)." ]; "discriminator": [ 241, 254, 37, 228, 78, 53, 110, 40 ]; "accounts": [ { "name": "good"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 103, 111, 111, 100 ]; }, { "kind": "account"; "path": "seller"; }, { "kind": "account"; "path": "good.good_id"; "account": "goodsListing"; } ]; }; }, { "name": "seller"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "seller.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "signer": true; "relations": [ "seller" ]; } ]; "args": [ { "name": "price"; "type": { "option": "u64"; }; }, { "name": "isActive"; "type": { "option": "bool"; }; }, { "name": "metadataHash"; "type": { "option": { "array": [ "u8", 32 ]; }; }; }, { "name": "metadataUri"; "type": { "option": "string"; }; }, { "name": "tags"; "type": { "option": { "array": [ "u8", 64 ]; }; }; }, { "name": "additionalSupply"; "type": { "option": "u64"; }; }, { "name": "operator"; "type": { "option": "pubkey"; }; }, { "name": "operatorFeeBps"; "type": { "option": "u16"; }; } ]; }, { "name": "updateLaunchControls"; "docs": [ "Update emergency launch controls (multisig gated).", "", "`protocol_paused` globally pauses version-gated mutable protocol paths.", "`disabled_task_type_mask` disables task types by `TaskType` repr bit index." ]; "discriminator": [ 156, 19, 63, 86, 117, 245, 196, 182 ]; "accounts": [ { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "signer": true; } ]; "args": [ { "name": "protocolPaused"; "type": "bool"; }, { "name": "disabledTaskTypeMask"; "type": "u8"; }, { "name": "surfaceRevision"; "type": "u16"; } ]; }, { "name": "updateMinVersion"; "docs": [ "Update minimum supported protocol version (multisig gated).", "Used to deprecate old versions after migration grace period.", "", "# Arguments", "* `new_min_version` - The new minimum supported version" ]; "discriminator": [ 149, 215, 23, 120, 114, 69, 110, 37 ]; "accounts": [ { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "signer": true; } ]; "args": [ { "name": "newMinVersion"; "type": "u8"; } ]; }, { "name": "updateMultisig"; "docs": [ "Rotate multisig owners/threshold (multisig gated).", "", "Hardening:", "- Allows signer rotation for key loss/compromise recovery.", "- Requires threshold of new-set signers in the same update transaction." ]; "discriminator": [ 152, 192, 112, 152, 120, 184, 150, 59 ]; "accounts": [ { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "signer": true; } ]; "args": [ { "name": "newThreshold"; "type": "u8"; }, { "name": "newOwners"; "type": { "vec": "pubkey"; }; } ]; }, { "name": "updateProtocolFee"; "docs": [ "Update the protocol fee (multisig gated)." ]; "discriminator": [ 170, 136, 6, 60, 43, 130, 81, 96 ]; "accounts": [ { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "signer": true; } ]; "args": [ { "name": "protocolFeeBps"; "type": "u16"; } ]; }, { "name": "updateRateLimits"; "docs": [ "Update rate limiting configuration (multisig gated).", "Parameters can be tuned post-deployment without program upgrade.", "", "# Arguments", "* `task_creation_cooldown` - Seconds between task creations (0 = disabled)", "* `max_tasks_per_24h` - Maximum tasks per agent per 24h (0 = unlimited)", "* `dispute_initiation_cooldown` - Seconds between disputes (0 = disabled)", "* `max_disputes_per_24h` - Maximum disputes per agent per 24h (0 = unlimited)", "* `min_stake_for_dispute` - Minimum stake required to initiate dispute" ]; "discriminator": [ 247, 36, 121, 254, 22, 16, 226, 1 ]; "accounts": [ { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "signer": true; } ]; "args": [ { "name": "taskCreationCooldown"; "type": "i64"; }, { "name": "maxTasksPer24h"; "type": "u8"; }, { "name": "disputeInitiationCooldown"; "type": "i64"; }, { "name": "maxDisputesPer24h"; "type": "u8"; }, { "name": "minStakeForDispute"; "type": "u64"; } ]; }, { "name": "updateServiceListing"; "docs": [ "Update a service listing's terms (provider-only)." ]; "discriminator": [ 15, 113, 16, 201, 165, 80, 182, 176 ]; "accounts": [ { "name": "listing"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 101, 114, 118, 105, 99, 101, 95, 108, 105, 115, 116, 105, 110, 103 ]; }, { "kind": "account"; "path": "listing.provider_agent"; "account": "serviceListing"; }, { "kind": "account"; "path": "listing.listing_id"; "account": "serviceListing"; } ]; }; }, { "name": "providerAgent"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "provider_agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "signer": true; "relations": [ "listing" ]; } ]; "args": [ { "name": "price"; "type": { "option": "u64"; }; }, { "name": "specHash"; "type": { "option": { "array": [ "u8", 32 ]; }; }; }, { "name": "specUri"; "type": { "option": "string"; }; }, { "name": "tags"; "type": { "option": { "array": [ "u8", 64 ]; }; }; }, { "name": "requiredCapabilities"; "type": { "option": "u64"; }; }, { "name": "defaultDeadlineSecs"; "type": { "option": "i64"; }; }, { "name": "maxOpenJobs"; "type": { "option": "u16"; }; }, { "name": "operator"; "type": { "option": "pubkey"; }; }, { "name": "operatorFeeBps"; "type": { "option": "u16"; }; } ]; }, { "name": "updateSkill"; "docs": [ "Update a skill's content, price, tags, or active status.", "Only the skill author can update." ]; "discriminator": [ 116, 142, 164, 86, 9, 27, 112, 227 ]; "accounts": [ { "name": "skill"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 107, 105, 108, 108 ]; }, { "kind": "account"; "path": "author"; }, { "kind": "account"; "path": "skill.skill_id"; "account": "skillRegistration"; } ]; }; }, { "name": "author"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "author.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "signer": true; "relations": [ "author" ]; } ]; "args": [ { "name": "contentHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "price"; "type": "u64"; }, { "name": "tags"; "type": { "option": { "array": [ "u8", 64 ]; }; }; }, { "name": "isActive"; "type": { "option": "bool"; }; } ]; }, { "name": "updateState"; "docs": [ "Update shared coordination state.", "Used for broadcasting state changes to other agents.", "", "# Arguments", "* `ctx` - Context with coordination PDA", "* `state_key` - Key identifying the state variable", "* `state_value` - New value for the state", "* `version` - Expected current version (for optimistic locking)" ]; "discriminator": [ 135, 112, 215, 75, 247, 185, 53, 176 ]; "accounts": [ { "name": "state"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 116, 97, 116, 101 ]; }, { "kind": "account"; "path": "authority"; }, { "kind": "arg"; "path": "stateKey"; } ]; }; }, { "name": "agent"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; "relations": [ "agent" ]; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "stateKey"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "stateValue"; "type": { "array": [ "u8", 64 ]; }; }, { "name": "version"; "type": "u64"; } ]; }, { "name": "updateStore"; "docs": [ "Update a store's advertised identity/terms (owner-only, P5.2). Bumps the", "monotonic `version` for indexer staleness/CAS." ]; "discriminator": [ 169, 49, 137, 251, 233, 234, 172, 103 ]; "accounts": [ { "name": "store"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 115, 116, 111, 114, 101 ]; }, { "kind": "account"; "path": "owner"; } ]; }; }, { "name": "owner"; "signer": true; "relations": [ "store" ]; } ]; "args": [ { "name": "handle"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "metadataHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "metadataUri"; "type": "string"; }, { "name": "referrerFeeBps"; "type": "u16"; }, { "name": "operator"; "type": "pubkey"; }, { "name": "operatorFeeBps"; "type": "u16"; }, { "name": "domain"; "type": "string"; } ]; }, { "name": "updateTreasury"; "docs": [ "Update protocol treasury destination (multisig gated).", "", "Hardening:", "- Allows treasury rotation/recovery.", "- New treasury must be program-owned, or a signer system account." ]; "discriminator": [ 60, 16, 243, 66, 96, 59, 254, 131 ]; "accounts": [ { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "newTreasury"; "docs": [ "Must be a system-owned signer. Production clients request the new custody", "key's signature through this typed account in generated account metas." ]; "signer": true; }, { "name": "authority"; "signer": true; } ]; "args": []; }, { "name": "upvotePost"; "docs": [ "Upvote a feed post.", "One vote per agent per post, enforced by PDA uniqueness." ]; "discriminator": [ 198, 186, 192, 175, 171, 226, 72, 252 ]; "accounts": [ { "name": "post"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 111, 115, 116 ]; }, { "kind": "account"; "path": "post.author"; "account": "feedPost"; }, { "kind": "account"; "path": "post.nonce"; "account": "feedPost"; } ]; }; }, { "name": "vote"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 117, 112, 118, 111, 116, 101 ]; }, { "kind": "account"; "path": "post"; }, { "kind": "account"; "path": "voter"; } ]; }; }, { "name": "voter"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "voter.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; "relations": [ "voter" ]; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": []; }, { "name": "validateTaskResult"; "docs": [ "Record a validator quorum vote or external attestation for a submission." ]; "discriminator": [ 141, 192, 86, 228, 233, 168, 41, 224 ]; "accounts": [ { "name": "task"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107 ]; }, { "kind": "account"; "path": "task.creator"; "account": "task"; }, { "kind": "account"; "path": "task.task_id"; "account": "task"; } ]; }; }, { "name": "claim"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 108, 97, 105, 109 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "worker"; } ]; }; }, { "name": "escrow"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 101, 115, 99, 114, 111, 119 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskValidationConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 118, 97, 108, 105, 100, 97, 116, 105, 111, 110 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskAttestorConfig"; "optional": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 97, 116, 116, 101, 115, 116, 111, 114 ]; }, { "kind": "account"; "path": "task"; } ]; }; }, { "name": "taskSubmission"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 115, 117, 98, 109, 105, 115, 115, 105, 111, 110 ]; }, { "kind": "account"; "path": "claim"; } ]; }; }, { "name": "taskValidationVote"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 116, 97, 115, 107, 95, 118, 97, 108, 105, 100, 97, 116, 105, 111, 110, 95, 118, 111, 116, 101 ]; }, { "kind": "account"; "path": "taskSubmission"; }, { "kind": "account"; "path": "reviewer"; } ]; }; }, { "name": "worker"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "worker.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "validatorAgent"; "docs": [ "Optional validator agent for validator-quorum mode, validated in handler.", "Writable because a quorum vote must lock the registration stake against", "immediate identity recycling (see `last_vote_timestamp` in the handler)." ]; "writable": true; "optional": true; }, { "name": "treasury"; "writable": true; }, { "name": "creator"; "writable": true; }, { "name": "workerAuthority"; "writable": true; }, { "name": "reviewer"; "writable": true; "signer": true; }, { "name": "tokenEscrowAta"; "writable": true; "optional": true; }, { "name": "workerTokenAccount"; "writable": true; "optional": true; }, { "name": "treasuryTokenAccount"; "writable": true; "optional": true; }, { "name": "rewardMint"; "optional": true; }, { "name": "tokenProgram"; "optional": true; "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; }, { "name": "creatorCompletionBond"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, 95, 98, 111, 110, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "creator"; } ]; }; }, { "name": "workerCompletionBond"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, 95, 98, 111, 110, 100 ]; }, { "kind": "account"; "path": "task"; }, { "kind": "account"; "path": "workerAuthority"; } ]; }; } ]; "args": [ { "name": "approved"; "type": "bool"; } ]; }, { "name": "voteProposal"; "docs": [ "Vote on a governance proposal.", "Voter must be an active agent. Double voting prevented by PDA uniqueness." ]; "discriminator": [ 247, 104, 114, 240, 237, 41, 200, 36 ]; "accounts": [ { "name": "proposal"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 112, 111, 115, 97, 108 ]; }, { "kind": "account"; "path": "proposal.proposer"; "account": "proposal"; }, { "kind": "account"; "path": "proposal.nonce"; "account": "proposal"; } ]; }; }, { "name": "vote"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 103, 111, 118, 101, 114, 110, 97, 110, 99, 101, 95, 118, 111, 116, 101 ]; }, { "kind": "account"; "path": "proposal"; }, { "kind": "account"; "path": "authority"; } ]; }; }, { "name": "voter"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "voter.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "protocolConfig"; "pda": { "seeds": [ { "kind": "const"; "value": [ 112, 114, 111, 116, 111, 99, 111, 108 ]; } ]; }; }, { "name": "authority"; "writable": true; "signer": true; "relations": [ "voter" ]; }, { "name": "systemProgram"; "address": "11111111111111111111111111111111"; } ]; "args": [ { "name": "approve"; "type": "bool"; } ]; }, { "name": "withdrawReputationStake"; "docs": [ "Withdraw SOL from reputation stake after cooldown period.", "Agent must have no pending disputes as defendant." ]; "discriminator": [ 234, 37, 157, 236, 80, 222, 40, 233 ]; "accounts": [ { "name": "authority"; "writable": true; "signer": true; "relations": [ "agent" ]; }, { "name": "agent"; "pda": { "seeds": [ { "kind": "const"; "value": [ 97, 103, 101, 110, 116 ]; }, { "kind": "account"; "path": "agent.agent_id"; "account": "agentRegistration"; } ]; }; }, { "name": "reputationStake"; "writable": true; "pda": { "seeds": [ { "kind": "const"; "value": [ 114, 101, 112, 117, 116, 97, 116, 105, 111, 110, 95, 115, 116, 97, 107, 101 ]; }, { "kind": "account"; "path": "agent"; } ]; }; } ]; "args": [ { "name": "amount"; "type": "u64"; } ]; } ]; "accounts": [ { "name": "agentRegistration"; "discriminator": [ 130, 53, 100, 103, 121, 77, 148, 19 ]; }, { "name": "agentStats"; "discriminator": [ 43, 192, 26, 112, 162, 176, 77, 164 ]; }, { "name": "agentVerification"; "discriminator": [ 128, 155, 95, 241, 66, 207, 166, 59 ]; }, { "name": "authorityRateLimit"; "discriminator": [ 155, 36, 149, 133, 58, 70, 81, 19 ]; }, { "name": "bidMarketplaceConfig"; "discriminator": [ 47, 42, 142, 40, 13, 39, 48, 107 ]; }, { "name": "bidderMarketState"; "discriminator": [ 169, 198, 7, 111, 52, 32, 197, 88 ]; }, { "name": "completionBond"; "discriminator": [ 77, 209, 12, 19, 44, 65, 93, 238 ]; }, { "name": "coordinationState"; "discriminator": [ 11, 232, 15, 241, 234, 143, 35, 252 ]; }, { "name": "defaultTrustList"; "discriminator": [ 142, 83, 121, 72, 66, 39, 149, 44 ]; }, { "name": "dispute"; "discriminator": [ 36, 49, 241, 67, 40, 36, 241, 74 ]; }, { "name": "disputeResolver"; "discriminator": [ 68, 124, 148, 26, 177, 224, 247, 53 ]; }, { "name": "feedPost"; "discriminator": [ 228, 215, 236, 73, 246, 181, 191, 228 ]; }, { "name": "feedVote"; "discriminator": [ 228, 56, 120, 128, 135, 128, 195, 19 ]; }, { "name": "goodsListing"; "discriminator": [ 120, 149, 179, 150, 220, 115, 129, 110 ]; }, { "name": "governanceConfig"; "discriminator": [ 81, 63, 124, 107, 210, 100, 145, 70 ]; }, { "name": "governanceVote"; "discriminator": [ 157, 104, 16, 111, 208, 31, 53, 132 ]; }, { "name": "hireRating"; "discriminator": [ 250, 116, 242, 149, 241, 55, 164, 63 ]; }, { "name": "hireRecord"; "discriminator": [ 104, 101, 55, 188, 219, 31, 76, 113 ]; }, { "name": "listingModeration"; "discriminator": [ 157, 129, 173, 120, 123, 143, 215, 24 ]; }, { "name": "moderationAttestor"; "discriminator": [ 52, 62, 194, 121, 157, 169, 40, 178 ]; }, { "name": "moderationBlock"; "discriminator": [ 90, 220, 89, 93, 67, 217, 235, 20 ]; }, { "name": "moderationConfig"; "discriminator": [ 20, 180, 54, 96, 191, 141, 52, 148 ]; }, { "name": "proposal"; "discriminator": [ 26, 94, 189, 187, 116, 136, 53, 33 ]; }, { "name": "protocolConfig"; "discriminator": [ 207, 91, 250, 28, 152, 179, 215, 209 ]; }, { "name": "purchaseRecord"; "discriminator": [ 239, 38, 40, 199, 4, 96, 209, 2 ]; }, { "name": "reputationDelegation"; "discriminator": [ 247, 166, 224, 123, 62, 95, 198, 71 ]; }, { "name": "reputationStake"; "discriminator": [ 226, 12, 248, 110, 109, 108, 99, 212 ]; }, { "name": "saleReceipt"; "discriminator": [ 114, 79, 236, 216, 212, 117, 80, 21 ]; }, { "name": "serviceListing"; "discriminator": [ 117, 173, 54, 52, 146, 147, 124, 211 ]; }, { "name": "skillRating"; "discriminator": [ 107, 74, 49, 243, 139, 30, 9, 244 ]; }, { "name": "skillRegistration"; "discriminator": [ 195, 23, 19, 205, 215, 225, 192, 254 ]; }, { "name": "store"; "discriminator": [ 130, 48, 247, 244, 182, 191, 30, 26 ]; }, { "name": "task"; "discriminator": [ 79, 34, 229, 55, 88, 90, 55, 84 ]; }, { "name": "taskAttestorConfig"; "discriminator": [ 103, 130, 20, 87, 207, 120, 111, 34 ]; }, { "name": "taskBid"; "discriminator": [ 173, 104, 90, 231, 189, 239, 133, 142 ]; }, { "name": "taskBidBook"; "discriminator": [ 65, 139, 202, 158, 184, 110, 242, 52 ]; }, { "name": "taskClaim"; "discriminator": [ 115, 77, 242, 98, 7, 81, 209, 137 ]; }, { "name": "taskEscrow"; "discriminator": [ 209, 72, 197, 54, 17, 55, 3, 187 ]; }, { "name": "taskJobSpec"; "discriminator": [ 249, 63, 211, 94, 228, 165, 3, 196 ]; }, { "name": "taskModeration"; "discriminator": [ 170, 214, 132, 159, 229, 119, 11, 43 ]; }, { "name": "taskSubmission"; "discriminator": [ 111, 64, 190, 132, 148, 33, 215, 63 ]; }, { "name": "taskValidationConfig"; "discriminator": [ 101, 204, 19, 0, 210, 2, 191, 0 ]; }, { "name": "taskValidationVote"; "discriminator": [ 48, 129, 51, 174, 154, 5, 68, 65 ]; } ]; "events": [ { "name": "agentDeregistered"; "discriminator": [ 132, 69, 246, 19, 135, 65, 28, 134 ]; }, { "name": "agentRegistered"; "discriminator": [ 191, 78, 217, 54, 232, 100, 189, 85 ]; }, { "name": "agentSuspended"; "discriminator": [ 219, 202, 177, 3, 116, 220, 164, 148 ]; }, { "name": "agentTrackRecordUpdated"; "discriminator": [ 145, 32, 166, 83, 3, 162, 237, 142 ]; }, { "name": "agentUnsuspended"; "discriminator": [ 26, 114, 30, 199, 235, 91, 134, 255 ]; }, { "name": "agentUpdated"; "discriminator": [ 210, 179, 162, 250, 123, 250, 210, 166 ]; }, { "name": "agentVerificationRevoked"; "discriminator": [ 67, 186, 43, 174, 149, 119, 196, 190 ]; }, { "name": "agentVerified"; "discriminator": [ 56, 159, 70, 162, 200, 46, 208, 1 ]; }, { "name": "attestorExitFinalized"; "discriminator": [ 22, 204, 34, 12, 13, 118, 232, 118 ]; }, { "name": "attestorExitRequested"; "discriminator": [ 24, 232, 80, 8, 224, 107, 213, 86 ]; }, { "name": "bidAccepted"; "discriminator": [ 19, 140, 36, 175, 195, 5, 55, 193 ]; }, { "name": "bidBookInitialized"; "discriminator": [ 38, 162, 188, 135, 56, 9, 20, 181 ]; }, { "name": "bidCancelled"; "discriminator": [ 175, 52, 76, 11, 201, 1, 205, 65 ]; }, { "name": "bidCreated"; "discriminator": [ 197, 135, 149, 136, 71, 130, 31, 39 ]; }, { "name": "bidExpired"; "discriminator": [ 116, 54, 204, 245, 160, 244, 77, 97 ]; }, { "name": "bidMarketplaceInitialized"; "discriminator": [ 88, 3, 13, 52, 255, 35, 211, 60 ]; }, { "name": "bidPromoted"; "discriminator": [ 253, 12, 26, 245, 103, 12, 146, 176 ]; }, { "name": "bidUpdated"; "discriminator": [ 70, 153, 25, 253, 224, 94, 198, 148 ]; }, { "name": "bidWinnerDemoted"; "discriminator": [ 38, 22, 88, 109, 239, 121, 146, 249 ]; }, { "name": "bondForfeited"; "discriminator": [ 141, 46, 102, 234, 31, 16, 129, 169 ]; }, { "name": "bondPosted"; "discriminator": [ 39, 196, 2, 142, 202, 74, 107, 205 ]; }, { "name": "bondRefunded"; "discriminator": [ 52, 32, 75, 36, 37, 139, 123, 17 ]; }, { "name": "contestDepositForfeited"; "discriminator": [ 30, 223, 26, 66, 255, 92, 100, 233 ]; }, { "name": "defaultTrustListUpdated"; "discriminator": [ 92, 58, 14, 174, 134, 120, 43, 80 ]; }, { "name": "dependentTaskCreated"; "discriminator": [ 82, 63, 46, 148, 85, 191, 122, 114 ]; }, { "name": "disputeCancelled"; "discriminator": [ 38, 80, 189, 225, 112, 190, 156, 178 ]; }, { "name": "disputeExpired"; "discriminator": [ 28, 47, 191, 124, 204, 113, 101, 116 ]; }, { "name": "disputeInitiated"; "discriminator": [ 150, 109, 93, 252, 198, 4, 183, 153 ]; }, { "name": "disputePeerClaimSettled"; "discriminator": [ 112, 40, 20, 152, 129, 236, 218, 127 ]; }, { "name": "disputeResolved"; "discriminator": [ 121, 64, 249, 153, 139, 128, 236, 187 ]; }, { "name": "disputeResolverAssigned"; "discriminator": [ 51, 132, 198, 221, 116, 105, 154, 12 ]; }, { "name": "disputeResolverRevoked"; "discriminator": [ 200, 244, 224, 246, 19, 222, 1, 100 ]; }, { "name": "ghostShareDistributed"; "discriminator": [ 196, 143, 138, 26, 168, 29, 111, 98 ]; }, { "name": "goodPurchased"; "discriminator": [ 232, 189, 14, 234, 45, 50, 89, 68 ]; }, { "name": "goodsListingCreated"; "discriminator": [ 140, 71, 233, 54, 133, 41, 64, 90 ]; }, { "name": "goodsListingUpdated"; "discriminator": [ 0, 112, 171, 44, 121, 241, 210, 34 ]; }, { "name": "governanceInitialized"; "discriminator": [ 41, 187, 103, 26, 42, 44, 30, 15 ]; }, { "name": "governanceVoteCast"; "discriminator": [ 223, 253, 198, 94, 141, 151, 78, 57 ]; }, { "name": "launchControlsUpdated"; "discriminator": [ 206, 194, 16, 155, 118, 69, 215, 151 ]; }, { "name": "listingModerationRecorded"; "discriminator": [ 117, 81, 203, 122, 217, 66, 50, 66 ]; }, { "name": "listingRated"; "discriminator": [ 177, 231, 150, 200, 14, 103, 122, 151 ]; }, { "name": "migrationCompleted"; "discriminator": [ 223, 45, 123, 192, 106, 249, 6, 241 ]; }, { "name": "moderationAttestorAssigned"; "discriminator": [ 86, 38, 30, 111, 174, 160, 24, 173 ]; }, { "name": "moderationAttestorRegistered"; "discriminator": [ 1, 244, 117, 105, 40, 179, 123, 71 ]; }, { "name": "moderationAttestorRevoked"; "discriminator": [ 70, 8, 149, 215, 27, 239, 16, 186 ]; }, { "name": "moderationBlockCleared"; "discriminator": [ 133, 81, 67, 83, 255, 146, 227, 32 ]; }, { "name": "moderationBlockSet"; "discriminator": [ 27, 98, 187, 114, 11, 28, 141, 209 ]; }, { "name": "moderationHeartbeatRecorded"; "discriminator": [ 25, 255, 220, 114, 183, 234, 227, 204 ]; }, { "name": "multisigUpdated"; "discriminator": [ 242, 206, 37, 59, 122, 197, 210, 72 ]; }, { "name": "operatorFeePaid"; "discriminator": [ 206, 102, 195, 120, 182, 242, 156, 32 ]; }, { "name": "orphanTaskChildReclaimed"; "discriminator": [ 165, 132, 90, 130, 152, 229, 223, 11 ]; }, { "name": "postCreated"; "discriminator": [ 209, 178, 232, 24, 158, 92, 77, 227 ]; }, { "name": "postUpvoted"; "discriminator": [ 85, 112, 248, 67, 90, 20, 117, 210 ]; }, { "name": "proposalCancelled"; "discriminator": [ 253, 59, 104, 46, 129, 78, 9, 14 ]; }, { "name": "proposalCreated"; "discriminator": [ 186, 8, 160, 108, 81, 13, 51, 206 ]; }, { "name": "proposalExecuted"; "discriminator": [ 92, 213, 189, 201, 101, 83, 111, 83 ]; }, { "name": "protocolConfigMigrated"; "discriminator": [ 30, 232, 133, 208, 55, 91, 175, 0 ]; }, { "name": "protocolFeeUpdated"; "discriminator": [ 172, 56, 83, 113, 219, 69, 69, 105 ]; }, { "name": "protocolInitialized"; "discriminator": [ 173, 122, 168, 254, 9, 118, 76, 132 ]; }, { "name": "protocolVersionUpdated"; "discriminator": [ 233, 202, 182, 241, 6, 134, 81, 48 ]; }, { "name": "rateLimitHit"; "discriminator": [ 157, 150, 77, 158, 30, 167, 242, 145 ]; }, { "name": "rateLimitsUpdated"; "discriminator": [ 32, 232, 72, 132, 73, 25, 219, 10 ]; }, { "name": "referrerFeePaid"; "discriminator": [ 127, 186, 248, 231, 123, 86, 255, 130 ]; }, { "name": "rejectFrozenExpired"; "discriminator": [ 154, 22, 194, 125, 2, 194, 188, 107 ]; }, { "name": "rejectFrozenResolved"; "discriminator": [ 175, 185, 212, 250, 143, 125, 229, 162 ]; }, { "name": "releaseSurfaceStamped"; "discriminator": [ 116, 104, 144, 233, 104, 150, 184, 17 ]; }, { "name": "reputationChanged"; "discriminator": [ 190, 190, 93, 65, 6, 39, 92, 250 ]; }, { "name": "reputationDelegationRetired"; "discriminator": [ 203, 239, 238, 102, 18, 140, 179, 89 ]; }, { "name": "reputationDelegationRevoked"; "discriminator": [ 130, 130, 191, 20, 81, 88, 109, 152 ]; }, { "name": "reputationStakeWithdrawn"; "discriminator": [ 189, 97, 237, 131, 201, 190, 121, 43 ]; }, { "name": "reputationStaked"; "discriminator": [ 12, 70, 73, 125, 30, 125, 6, 10 ]; }, { "name": "rewardDistributed"; "discriminator": [ 36, 65, 223, 38, 136, 162, 10, 30 ]; }, { "name": "serviceListingCreated"; "discriminator": [ 214, 51, 85, 39, 92, 202, 181, 120 ]; }, { "name": "serviceListingHired"; "discriminator": [ 225, 53, 144, 0, 179, 119, 21, 125 ]; }, { "name": "serviceListingStateChanged"; "discriminator": [ 206, 72, 52, 145, 37, 242, 21, 225 ]; }, { "name": "serviceListingUpdated"; "discriminator": [ 234, 45, 86, 218, 125, 0, 37, 210 ]; }, { "name": "skillPurchased"; "discriminator": [ 90, 255, 155, 123, 29, 16, 39, 75 ]; }, { "name": "skillRated"; "discriminator": [ 90, 85, 214, 124, 228, 179, 112, 13 ]; }, { "name": "skillRegistered"; "discriminator": [ 222, 131, 204, 34, 182, 68, 239, 64 ]; }, { "name": "skillUpdated"; "discriminator": [ 168, 10, 44, 211, 219, 5, 98, 98 ]; }, { "name": "stateUpdated"; "discriminator": [ 187, 220, 147, 37, 52, 210, 78, 173 ]; }, { "name": "storeClosed"; "discriminator": [ 184, 145, 107, 98, 153, 0, 214, 211 ]; }, { "name": "storeRegistered"; "discriminator": [ 8, 21, 234, 141, 147, 227, 16, 145 ]; }, { "name": "storeUpdated"; "discriminator": [ 218, 7, 142, 56, 57, 63, 185, 211 ]; }, { "name": "taskCancelled"; "discriminator": [ 158, 101, 220, 187, 16, 141, 141, 64 ]; }, { "name": "taskChangesRequested"; "discriminator": [ 58, 245, 186, 154, 25, 0, 137, 48 ]; }, { "name": "taskClaimed"; "discriminator": [ 208, 90, 243, 116, 80, 15, 228, 202 ]; }, { "name": "taskClosed"; "discriminator": [ 158, 183, 233, 176, 74, 66, 243, 77 ]; }, { "name": "taskCompleted"; "discriminator": [ 132, 223, 98, 152, 2, 9, 57, 128 ]; }, { "name": "taskCreated"; "discriminator": [ 49, 174, 6, 7, 71, 159, 69, 175 ]; }, { "name": "taskJobSpecSet"; "discriminator": [ 155, 2, 153, 121, 179, 90, 208, 183 ]; }, { "name": "taskMigrated"; "discriminator": [ 70, 83, 183, 151, 153, 220, 97, 166 ]; }, { "name": "taskModerationConfigUpdated"; "discriminator": [ 151, 82, 229, 50, 92, 30, 212, 75 ]; }, { "name": "taskModerationRecorded"; "discriminator": [ 12, 27, 87, 47, 129, 163, 73, 218 ]; }, { "name": "taskRejectFrozen"; "discriminator": [ 67, 18, 32, 203, 147, 38, 42, 59 ]; }, { "name": "taskResultAccepted"; "discriminator": [ 53, 41, 200, 102, 151, 116, 8, 45 ]; }, { "name": "taskResultRejected"; "discriminator": [ 83, 89, 77, 160, 227, 233, 11, 170 ]; }, { "name": "taskResultSubmitted"; "discriminator": [ 138, 65, 217, 42, 15, 246, 83, 32 ]; }, { "name": "taskResultValidationRecorded"; "discriminator": [ 191, 181, 62, 163, 174, 55, 13, 81 ]; }, { "name": "taskValidationConfigured"; "discriminator": [ 12, 0, 218, 201, 255, 123, 232, 163 ]; }, { "name": "terminalClaimReclaimed"; "discriminator": [ 211, 154, 175, 230, 62, 173, 108, 51 ]; }, { "name": "treasuryUpdated"; "discriminator": [ 80, 239, 54, 168, 43, 38, 85, 145 ]; } ]; "errors": [ { "code": 6000; "name": "agentAlreadyRegistered"; "msg": "Agent is already registered"; }, { "code": 6001; "name": "agentNotFound"; "msg": "Agent not found"; }, { "code": 6002; "name": "agentNotActive"; "msg": "Agent is not active"; }, { "code": 6003; "name": "insufficientCapabilities"; "msg": "Agent has insufficient capabilities"; }, { "code": 6004; "name": "invalidCapabilities"; "msg": "Agent capabilities bitmask cannot be zero"; }, { "code": 6005; "name": "maxActiveTasksReached"; "msg": "Agent has reached maximum active tasks"; }, { "code": 6006; "name": "agentHasActiveTasks"; "msg": "Agent has active tasks and cannot be deregistered"; }, { "code": 6007; "name": "unauthorizedAgent"; "msg": "Only the agent authority can perform this action"; }, { "code": 6008; "name": "creatorAuthorityMismatch"; "msg": "Creator must match authority to prevent social engineering"; }, { "code": 6009; "name": "invalidAgentId"; "msg": "Invalid agent ID: agent_id cannot be all zeros"; }, { "code": 6010; "name": "agentRegistrationRequired"; "msg": "Agent registration required to create tasks"; }, { "code": 6011; "name": "agentSuspended"; "msg": "Agent is suspended and cannot change status"; }, { "code": 6012; "name": "agentBusyWithTasks"; "msg": "Agent cannot set status to Active while having active tasks"; }, { "code": 6013; "name": "taskNotFound"; "msg": "Task not found"; }, { "code": 6014; "name": "taskNotOpen"; "msg": "Task is not open for claims"; }, { "code": 6015; "name": "taskFullyClaimed"; "msg": "Task has reached maximum workers"; }, { "code": 6016; "name": "taskExpired"; "msg": "Task has expired"; }, { "code": 6017; "name": "taskNotExpired"; "msg": "Task deadline has not passed"; }, { "code": 6018; "name": "deadlinePassed"; "msg": "Task deadline has passed"; }, { "code": 6019; "name": "taskNotInProgress"; "msg": "Task is not in progress"; }, { "code": 6020; "name": "taskAlreadyCompleted"; "msg": "Task is already completed"; }, { "code": 6021; "name": "taskCannotBeCancelled"; "msg": "Task cannot be cancelled"; }, { "code": 6022; "name": "unauthorizedTaskAction"; "msg": "Only the task creator can perform this action"; }, { "code": 6023; "name": "invalidCreator"; "msg": "Invalid creator"; }, { "code": 6024; "name": "invalidTaskId"; "msg": "Invalid task ID: cannot be zero"; }, { "code": 6025; "name": "invalidDescription"; "msg": "Invalid description: cannot be empty"; }, { "code": 6026; "name": "invalidMaxWorkers"; "msg": "Invalid max workers: must be between 1 and 4"; }, { "code": 6027; "name": "invalidTaskType"; "msg": "Invalid task type"; }, { "code": 6028; "name": "taskNotBidExclusive"; "msg": "Task is not a Marketplace V2 bid-exclusive task"; }, { "code": 6029; "name": "bidExclusiveRequiresSingleWorker"; "msg": "Bid-exclusive tasks must use max_workers = 1"; }, { "code": 6030; "name": "bidTaskSolOnly"; "msg": "Marketplace V2 bid tasks are SOL-only in v2"; }, { "code": 6031; "name": "bidTaskRequiresAcceptance"; "msg": "Bid-exclusive tasks require bid acceptance and cannot be claimed directly"; }, { "code": 6032; "name": "bidBookNotOpen"; "msg": "Bid book is not open"; }, { "code": 6033; "name": "bidBookNotAccepted"; "msg": "Bid book is not in accepted state"; }, { "code": 6034; "name": "bidSettlementAccountsRequired"; "msg": "Bid settlement accounts are required"; }, { "code": 6035; "name": "bidPriceExceedsTaskBudget"; "msg": "Bid price exceeds task budget"; }, { "code": 6036; "name": "invalidBidExpiry"; "msg": "Bid expiry is invalid"; }, { "code": 6037; "name": "invalidBidEta"; "msg": "Bid ETA must be greater than zero"; }, { "code": 6038; "name": "invalidBidConfidence"; "msg": "Bid confidence must be between 0 and 10000 basis points"; }, { "code": 6039; "name": "invalidMatchingPolicy"; "msg": "Invalid matching policy"; }, { "code": 6040; "name": "invalidWeightedScoreWeights"; "msg": "Weighted score weights must sum to 10000 basis points"; }, { "code": 6041; "name": "bidNotActive"; "msg": "Bid is not active"; }, { "code": 6042; "name": "bidAlreadyAccepted"; "msg": "Bid has already been accepted"; }, { "code": 6043; "name": "bidNotExpired"; "msg": "Bid has not expired and bid book is not closed"; }, { "code": 6044; "name": "bidBookCapacityReached"; "msg": "Bid book has reached its active bid capacity"; }, { "code": 6045; "name": "invalidDeadline"; "msg": "Invalid deadline: deadline must be greater than zero"; }, { "code": 6046; "name": "invalidReward"; "msg": "Invalid reward: reward must be greater than zero"; }, { "code": 6047; "name": "invalidRequiredCapabilities"; "msg": "Invalid required capabilities: required_capabilities cannot be zero"; }, { "code": 6048; "name": "competitiveTaskAlreadyWon"; "msg": "Competitive task already completed by another worker"; }, { "code": 6049; "name": "noWorkers"; "msg": "Task has no workers"; }, { "code": 6050; "name": "constraintHashMismatch"; "msg": "Proof constraint hash does not match task's stored constraint hash"; }, { "code": 6051; "name": "notPrivateTask"; "msg": "Task is not a private task (no constraint hash set)"; }, { "code": 6052; "name": "alreadyClaimed"; "msg": "Worker has already claimed this task"; }, { "code": 6053; "name": "notClaimed"; "msg": "Worker has not claimed this task"; }, { "code": 6054; "name": "claimAlreadyCompleted"; "msg": "Claim has already been completed"; }, { "code": 6055; "name": "claimNotExpired"; "msg": "Claim has not expired yet"; }, { "code": 6056; "name": "claimExpired"; "msg": "Claim has expired"; }, { "code": 6057; "name": "invalidExpiration"; "msg": "Invalid expiration: expires_at cannot be zero"; }, { "code": 6058; "name": "invalidProof"; "msg": "Invalid proof of work"; }, { "code": 6059; "name": "zkVerificationFailed"; "msg": "ZK proof verification failed"; }, { "code": 6060; "name": "invalidSealEncoding"; "msg": "Invalid RISC0 seal encoding"; }, { "code": 6061; "name": "invalidJournalLength"; "msg": "Invalid RISC0 journal length"; }, { "code": 6062; "name": "invalidJournalBinding"; "msg": "Invalid RISC0 journal binding"; }, { "code": 6063; "name": "invalidJournalTask"; "msg": "RISC0 journal task binding mismatch"; }, { "code": 6064; "name": "invalidJournalAuthority"; "msg": "RISC0 journal authority binding mismatch"; }, { "code": 6065; "name": "invalidImageId"; "msg": "Invalid RISC0 image ID"; }, { "code": 6066; "name": "trustedSelectorMismatch"; "msg": "RISC0 seal selector does not match trusted selector"; }, { "code": 6067; "name": "trustedVerifierProgramMismatch"; "msg": "RISC0 verifier program does not match trusted verifier"; }, { "code": 6068; "name": "routerAccountMismatch"; "msg": "RISC0 router account constraints failed"; }, { "code": 6069; "name": "invalidProofSize"; "msg": "Invalid proof size - expected 256 bytes for RISC Zero seal body"; }, { "code": 6070; "name": "invalidProofBinding"; "msg": "Invalid proof binding: expected_binding cannot be all zeros"; }, { "code": 6071; "name": "invalidOutputCommitment"; "msg": "Invalid output commitment: output_commitment cannot be all zeros"; }, { "code": 6072; "name": "invalidRentRecipient"; "msg": "Invalid rent recipient: must be worker authority"; }, { "code": 6073; "name": "gracePeriodNotPassed"; "msg": "Grace period not passed: only worker authority can expire claim within 60 seconds of expiry"; }, { "code": 6074; "name": "invalidProofHash"; "msg": "Invalid proof hash: proof_hash cannot be all zeros"; }, { "code": 6075; "name": "invalidResultData"; "msg": "Invalid result data: result_data cannot be all zeros when provided"; }, { "code": 6076; "name": "validationModeUnsupportedTaskType"; "msg": "Task Validation V2 is only supported for exclusive task flows"; }, { "code": 6077; "name": "invalidValidationMode"; "msg": "Invalid validation mode"; }, { "code": 6078; "name": "invalidReviewWindow"; "msg": "Invalid review window"; }, { "code": 6079; "name": "taskValidationConfigRequired"; "msg": "Task validation configuration required"; }, { "code": 6080; "name": "taskValidationAlreadyConfigured"; "msg": "Task already has validation configured"; }, { "code": 6081; "name": "taskValidationImmutableAfterClaim"; "msg": "Task validation cannot be reconfigured once work has started"; }, { "code": 6082; "name": "taskSubmissionRequired"; "msg": "Task submission is required"; }, { "code": 6083; "name": "taskAttestorConfigRequired"; "msg": "Task attestor configuration is required"; }, { "code": 6084; "name": "submissionAlreadyPending"; "msg": "Task submission already pending review"; }, { "code": 6085; "name": "submissionNotPending"; "msg": "Task submission is not pending review"; }, { "code": 6086; "name": "submissionAlreadyResolved"; "msg": "Task submission has already been resolved"; }, { "code": 6087; "name": "taskNotPendingValidation"; "msg": "Task is not pending validation"; }, { "code": 6088; "name": "manualValidationRequiresReviewFlow"; "msg": "Task uses creator-review validation and must submit through Task Validation V2"; }, { "code": 6089; "name": "manualValidationPrivateTaskUnsupported"; "msg": "Creator-review validation is not supported for private tasks yet"; }, { "code": 6090; "name": "validationModeMismatch"; "msg": "Validation instruction does not match the task's configured validation mode"; }, { "code": 6091; "name": "invalidValidatorQuorum"; "msg": "Validator quorum must be greater than zero"; }, { "code": 6092; "name": "invalidAttestor"; "msg": "External attestor must be a valid non-default wallet"; }, { "code": 6093; "name": "reviewWindowNotElapsed"; "msg": "Review window has not elapsed yet"; }, { "code": 6094; "name": "validationAlreadyRecorded"; "msg": "Validation for this submission round has already been recorded"; }, { "code": 6095; "name": "validatorAgentRequired"; "msg": "Validator agent account is required for validator-quorum mode"; }, { "code": 6096; "name": "unauthorizedTaskValidator"; "msg": "Reviewer is not authorized to validate this task result"; }, { "code": 6097; "name": "disputeNotActive"; "msg": "Dispute is not active"; }, { "code": 6098; "name": "votingEnded"; "msg": "Voting period has ended"; }, { "code": 6099; "name": "votingNotEnded"; "msg": "Voting period has not ended"; }, { "code": 6100; "name": "alreadyVoted"; "msg": "Already voted on this dispute"; }, { "code": 6101; "name": "notArbiter"; "msg": "Not authorized to vote (not an arbiter)"; }, { "code": 6102; "name": "insufficientVotes"; "msg": "Insufficient votes to resolve"; }, { "code": 6103; "name": "disputeAlreadyResolved"; "msg": "Dispute has already been resolved"; }, { "code": 6104; "name": "unauthorizedResolver"; "msg": "Only the protocol authority with configured M-of-N approval or an assigned dispute resolver can resolve disputes, and never the dispute initiator"; }, { "code": 6105; "name": "invalidDisputeResolver"; "msg": "Invalid dispute resolver: pubkey must be non-zero"; }, { "code": 6106; "name": "activeDisputeVotes"; "msg": "Agent has initiated dispute outcomes pending finalization"; }, { "code": 6107; "name": "recentVoteActivity"; "msg": "Agent must wait 24 hours after voting before deregistering"; }, { "code": 6108; "name": "authorityAlreadyVoted"; "msg": "Authority has already voted on this dispute"; }, { "code": 6109; "name": "insufficientEvidence"; "msg": "Insufficient dispute evidence provided"; }, { "code": 6110; "name": "evidenceTooLong"; "msg": "Dispute evidence exceeds maximum allowed length"; }, { "code": 6111; "name": "disputeNotExpired"; "msg": "Dispute has not expired"; }, { "code": 6112; "name": "slashAlreadyApplied"; "msg": "Dispute slashing already applied"; }, { "code": 6113; "name": "slashWindowExpired"; "msg": "Slash window expired: must apply slashing within 7 days of resolution"; }, { "code": 6114; "name": "disputeNotResolved"; "msg": "Dispute has not been resolved"; }, { "code": 6115; "name": "notTaskParticipant"; "msg": "Only task creator or workers can initiate disputes"; }, { "code": 6116; "name": "invalidEvidenceHash"; "msg": "Invalid evidence hash: cannot be all zeros"; }, { "code": 6117; "name": "arbiterIsDisputeParticipant"; "msg": "Arbiter cannot vote on disputes they are a participant in"; }, { "code": 6118; "name": "insufficientQuorum"; "msg": "Insufficient quorum: minimum number of voters not reached"; }, { "code": 6119; "name": "activeDisputesExist"; "msg": "Agent has active disputes as defendant and cannot deregister"; }, { "code": 6120; "name": "tooManyDisputeVoters"; "msg": "Dispute has reached maximum voter capacity"; }, { "code": 6121; "name": "workerAgentRequired"; "msg": "Worker agent account required when creator initiates dispute"; }, { "code": 6122; "name": "workerClaimRequired"; "msg": "Worker claim account required when creator initiates dispute"; }, { "code": 6123; "name": "workerNotInDispute"; "msg": "Worker was not involved in this dispute"; }, { "code": 6124; "name": "initiatorCannotResolve"; "msg": "Dispute initiator cannot resolve their own dispute"; }, { "code": 6125; "name": "versionMismatch"; "msg": "State version mismatch (concurrent modification)"; }, { "code": 6126; "name": "stateKeyExists"; "msg": "State key already exists"; }, { "code": 6127; "name": "stateNotFound"; "msg": "State not found"; }, { "code": 6128; "name": "invalidStateValue"; "msg": "Invalid state value: state_value cannot be all zeros"; }, { "code": 6129; "name": "stateOwnershipViolation"; "msg": "State ownership violation: only the creator agent can update this state"; }, { "code": 6130; "name": "invalidStateKey"; "msg": "Invalid state key: state_key cannot be all zeros"; }, { "code": 6131; "name": "protocolAlreadyInitialized"; "msg": "Protocol is already initialized"; }, { "code": 6132; "name": "protocolNotInitialized"; "msg": "Protocol is not initialized"; }, { "code": 6133; "name": "invalidProtocolFee"; "msg": "Invalid protocol fee (must be <= 1000 bps)"; }, { "code": 6134; "name": "invalidTreasury"; "msg": "Invalid treasury: treasury account cannot be default pubkey"; }, { "code": 6135; "name": "invalidDisputeThreshold"; "msg": "Invalid dispute threshold: must be 1-100 (percentage of votes required)"; }, { "code": 6136; "name": "insufficientStake"; "msg": "Insufficient registration stake"; }, { "code": 6137; "name": "multisigInvalidThreshold"; "msg": "Invalid multisig threshold"; }, { "code": 6138; "name": "multisigInvalidSigners"; "msg": "Invalid multisig signer configuration"; }, { "code": 6139; "name": "multisigNotEnoughSigners"; "msg": "Not enough multisig signers"; }, { "code": 6140; "name": "multisigDuplicateSigner"; "msg": "Duplicate multisig signer provided"; }, { "code": 6141; "name": "multisigDefaultSigner"; "msg": "Multisig signer cannot be default pubkey"; }, { "code": 6142; "name": "multisigSignerNotSystemOwned"; "msg": "Multisig signer account not owned by System Program"; }, { "code": 6143; "name": "invalidInput"; "msg": "Invalid input parameter"; }, { "code": 6144; "name": "arithmeticOverflow"; "msg": "Arithmetic overflow"; }, { "code": 6145; "name": "voteOverflow"; "msg": "Vote count overflow"; }, { "code": 6146; "name": "insufficientFunds"; "msg": "Insufficient funds"; }, { "code": 6147; "name": "rewardTooSmall"; "msg": "Reward too small: worker must receive at least 1 lamport"; }, { "code": 6148; "name": "corruptedData"; "msg": "Account data is corrupted"; }, { "code": 6149; "name": "stringTooLong"; "msg": "String too long"; }, { "code": 6150; "name": "invalidAccountOwner"; "msg": "Account owner validation failed: account not owned by this program"; }, { "code": 6151; "name": "rateLimitExceeded"; "msg": "Rate limit exceeded: maximum actions per 24h window reached"; }, { "code": 6152; "name": "cooldownNotElapsed"; "msg": "Cooldown period has not elapsed since last action"; }, { "code": 6153; "name": "updateTooFrequent"; "msg": "Agent update too frequent: must wait cooldown period"; }, { "code": 6154; "name": "invalidCooldown"; "msg": "Cooldown value cannot be negative"; }, { "code": 6155; "name": "cooldownTooLarge"; "msg": "Cooldown value exceeds maximum (24 hours)"; }, { "code": 6156; "name": "rateLimitTooHigh"; "msg": "Rate limit value exceeds maximum allowed (1000)"; }, { "code": 6157; "name": "cooldownTooLong"; "msg": "Cooldown value exceeds maximum allowed (1 week)"; }, { "code": 6158; "name": "insufficientStakeForDispute"; "msg": "Insufficient stake to initiate dispute"; }, { "code": 6159; "name": "insufficientStakeForCreatorDispute"; "msg": "Creator-initiated disputes require 2x the minimum stake"; }, { "code": 6160; "name": "versionMismatchProtocol"; "msg": "Protocol version mismatch: account version incompatible with current program"; }, { "code": 6161; "name": "accountVersionTooOld"; "msg": "Account version too old: migration required"; }, { "code": 6162; "name": "accountVersionTooNew"; "msg": "Account version too new: program upgrade required"; }, { "code": 6163; "name": "invalidMigrationSource"; "msg": "Migration not allowed: invalid source version"; }, { "code": 6164; "name": "invalidMigrationTarget"; "msg": "Migration not allowed: invalid target version"; }, { "code": 6165; "name": "unauthorizedUpgrade"; "msg": "Only upgrade authority can perform this action"; }, { "code": 6166; "name": "unauthorizedProtocolAuthority"; "msg": "Only protocol authority can perform this action"; }, { "code": 6167; "name": "invalidMinVersion"; "msg": "Minimum version cannot exceed current protocol version"; }, { "code": 6168; "name": "protocolConfigRequired"; "msg": "Protocol config account required: suspending an agent requires the protocol config PDA in remaining_accounts"; }, { "code": 6169; "name": "parentTaskCancelled"; "msg": "Parent task has been cancelled"; }, { "code": 6170; "name": "parentTaskDisputed"; "msg": "Parent task is in disputed state"; }, { "code": 6171; "name": "invalidDependencyType"; "msg": "Invalid dependency type"; }, { "code": 6172; "name": "parentTaskNotCompleted"; "msg": "Parent task must be completed before completing a proof-dependent task"; }, { "code": 6173; "name": "parentTaskAccountRequired"; "msg": "Parent task account required for proof-dependent task completion"; }, { "code": 6174; "name": "unauthorizedCreator"; "msg": "Parent task does not belong to the same creator"; }, { "code": 6175; "name": "nullifierAlreadySpent"; "msg": "Nullifier has already been spent - proof/knowledge reuse detected"; }, { "code": 6176; "name": "invalidNullifier"; "msg": "Invalid nullifier: nullifier value cannot be all zeros"; }, { "code": 6177; "name": "incompleteWorkerAccounts"; "msg": "All worker accounts must be provided when cancelling a task with active claims"; }, { "code": 6178; "name": "workerAccountsRequired"; "msg": "Worker accounts required when task has active workers"; }, { "code": 6179; "name": "duplicateArbiter"; "msg": "Duplicate arbiter provided in remaining_accounts"; }, { "code": 6180; "name": "insufficientEscrowBalance"; "msg": "Escrow has insufficient balance for reward transfer"; }, { "code": 6181; "name": "invalidStatusTransition"; "msg": "Invalid task status transition"; }, { "code": 6182; "name": "stakeTooLow"; "msg": "Stake value is below minimum required (0.001 SOL)"; }, { "code": 6183; "name": "invalidMinStake"; "msg": "min_stake_for_dispute must be greater than zero"; }, { "code": 6184; "name": "invalidSlashAmount"; "msg": "Slash amount must be greater than zero"; }, { "code": 6185; "name": "bondAmountTooLow"; "msg": "Bond amount too low"; }, { "code": 6186; "name": "bondAlreadyExists"; "msg": "Bond already exists"; }, { "code": 6187; "name": "bondNotFound"; "msg": "Bond not found"; }, { "code": 6188; "name": "bondNotMatured"; "msg": "Bond not yet matured"; }, { "code": 6189; "name": "insufficientReputation"; "msg": "Agent reputation below task minimum requirement"; }, { "code": 6190; "name": "invalidMinReputation"; "msg": "Invalid minimum reputation: must be <= 10000"; }, { "code": 6191; "name": "developmentKeyNotAllowed"; "msg": "Development verifying key detected (gamma == delta). ZK proofs are forgeable. Run MPC ceremony before use."; }, { "code": 6192; "name": "selfTaskNotAllowed"; "msg": "Cannot claim own task: worker authority matches task creator"; }, { "code": 6193; "name": "missingTokenAccounts"; "msg": "Token accounts not provided for token-denominated task"; }, { "code": 6194; "name": "invalidTokenEscrow"; "msg": "Token escrow ATA does not match expected derivation"; }, { "code": 6195; "name": "invalidTokenMint"; "msg": "Provided mint does not match task's reward_mint"; }, { "code": 6196; "name": "tokenTransferFailed"; "msg": "SPL token transfer CPI failed"; }, { "code": 6197; "name": "proposalNotActive"; "msg": "Proposal is not active"; }, { "code": 6198; "name": "proposalVotingNotEnded"; "msg": "Voting period has not ended"; }, { "code": 6199; "name": "proposalVotingEnded"; "msg": "Voting period has ended"; }, { "code": 6200; "name": "proposalAlreadyExecuted"; "msg": "Proposal has already been executed"; }, { "code": 6201; "name": "proposalInsufficientQuorum"; "msg": "Insufficient quorum for proposal execution"; }, { "code": 6202; "name": "proposalNotApproved"; "msg": "Proposal did not achieve majority"; }, { "code": 6203; "name": "proposalUnauthorizedCancel"; "msg": "Only the proposer can cancel this proposal"; }, { "code": 6204; "name": "proposalInsufficientStake"; "msg": "Insufficient stake to create a proposal"; }, { "code": 6205; "name": "invalidProposalPayload"; "msg": "Invalid proposal payload"; }, { "code": 6206; "name": "invalidProposalType"; "msg": "Invalid proposal type"; }, { "code": 6207; "name": "treasuryInsufficientBalance"; "msg": "Treasury spend amount exceeds available balance"; }, { "code": 6208; "name": "timelockNotElapsed"; "msg": "Execution timelock has not elapsed"; }, { "code": 6209; "name": "invalidGovernanceParam"; "msg": "Invalid governance configuration parameter"; }, { "code": 6210; "name": "treasuryNotProgramOwned"; "msg": "Treasury must be a program-owned PDA"; }, { "code": 6211; "name": "treasuryNotSpendable"; "msg": "Treasury must be a system-owned signer account"; }, { "code": 6212; "name": "skillInvalidId"; "msg": "Skill ID cannot be all zeros"; }, { "code": 6213; "name": "skillInvalidName"; "msg": "Skill name cannot be all zeros"; }, { "code": 6214; "name": "skillInvalidContentHash"; "msg": "Skill content hash cannot be all zeros"; }, { "code": 6215; "name": "skillNotActive"; "msg": "Skill is not active"; }, { "code": 6216; "name": "skillInvalidRating"; "msg": "Rating must be between 1 and 5"; }, { "code": 6217; "name": "skillSelfRating"; "msg": "Cannot rate own skill"; }, { "code": 6218; "name": "skillUnauthorizedUpdate"; "msg": "Only the skill author can update this skill"; }, { "code": 6219; "name": "skillSelfPurchase"; "msg": "Cannot purchase own skill"; }, { "code": 6220; "name": "feedInvalidContentHash"; "msg": "Feed content hash cannot be all zeros"; }, { "code": 6221; "name": "feedInvalidTopic"; "msg": "Feed topic cannot be all zeros"; }, { "code": 6222; "name": "feedPostNotFound"; "msg": "Feed post not found"; }, { "code": 6223; "name": "feedSelfUpvote"; "msg": "Cannot upvote own post"; }, { "code": 6224; "name": "reputationStakeAmountTooLow"; "msg": "Reputation stake amount must be greater than zero"; }, { "code": 6225; "name": "reputationStakeLocked"; "msg": "Reputation stake is locked: withdrawal before cooldown"; }, { "code": 6226; "name": "reputationStakeInsufficientBalance"; "msg": "Reputation stake has insufficient balance for withdrawal"; }, { "code": 6227; "name": "reputationDelegationAmountInvalid"; "msg": "Reputation delegation amount invalid: must be > 0, <= 10000, and >= MIN_DELEGATION_AMOUNT"; }, { "code": 6228; "name": "reputationCannotDelegateSelf"; "msg": "Cannot delegate reputation to self"; }, { "code": 6229; "name": "reputationDelegationExpired"; "msg": "Reputation delegation has expired"; }, { "code": 6230; "name": "reputationAgentNotActive"; "msg": "Agent must be Active to participate in reputation economy"; }, { "code": 6231; "name": "reputationDisputesPending"; "msg": "Agent has pending disputes as defendant: cannot withdraw stake"; }, { "code": 6232; "name": "privateTaskRequiresZkProof"; "msg": "Private tasks (non-zero constraint_hash) must use complete_task_private"; }, { "code": 6233; "name": "invalidTokenAccountOwner"; "msg": "Token account owner does not match expected authority"; }, { "code": 6234; "name": "insufficientSeedEntropy"; "msg": "Binding or nullifier seed has insufficient byte diversity (min 8 distinct bytes required)"; }, { "code": 6235; "name": "skillPriceBelowMinimum"; "msg": "Skill price below minimum required"; }, { "code": 6236; "name": "skillPriceChanged"; "msg": "Skill price changed since transaction was prepared"; }, { "code": 6237; "name": "delegationCooldownNotElapsed"; "msg": "Delegation must be active for minimum duration before revocation"; }, { "code": 6238; "name": "rateLimitBelowMinimum"; "msg": "Rate limit value below protocol minimum"; }, { "code": 6239; "name": "invalidTaskJobSpecHash"; "msg": "Invalid task job specification hash"; }, { "code": 6240; "name": "invalidTaskJobSpecUri"; "msg": "Invalid task job specification URI"; }, { "code": 6241; "name": "taskJobSpecTaskMismatch"; "msg": "Task job specification account does not belong to this task"; }, { "code": 6242; "name": "protocolPaused"; "msg": "Protocol is paused by multisig launch controls"; }, { "code": 6243; "name": "taskTypeDisabled"; "msg": "Task type is disabled by multisig launch controls"; }, { "code": 6244; "name": "taskModerationRequired"; "msg": "Task moderation is not configured or enabled"; }, { "code": 6245; "name": "invalidTaskModerationAuthority"; "msg": "Invalid task moderation authority"; }, { "code": 6246; "name": "unauthorizedTaskModerator"; "msg": "Only the configured moderation authority can record moderation decisions"; }, { "code": 6247; "name": "invalidTaskModerationStatus"; "msg": "Invalid task moderation status"; }, { "code": 6248; "name": "invalidTaskModerationRiskScore"; "msg": "Invalid task moderation risk score"; }, { "code": 6249; "name": "taskModerationTaskMismatch"; "msg": "Task moderation account does not belong to this task"; }, { "code": 6250; "name": "taskModerationHashMismatch"; "msg": "Task moderation account does not match this job specification hash"; }, { "code": 6251; "name": "taskModerationExpired"; "msg": "Task moderation decision is expired"; }, { "code": 6252; "name": "taskModerationRejected"; "msg": "Task moderation decision does not allow publishing this job specification"; }, { "code": 6253; "name": "taskJobSpecRequired"; "msg": "Task claim requires a moderated job specification pointer"; }, { "code": 6254; "name": "listingInvalidId"; "msg": "Service listing ID cannot be all zeros"; }, { "code": 6255; "name": "listingInvalidName"; "msg": "Service listing name cannot be all zeros"; }, { "code": 6256; "name": "listingInvalidSpec"; "msg": "Service listing spec hash/URI is invalid"; }, { "code": 6257; "name": "listingPriceTooLow"; "msg": "Service listing price is below the minimum"; }, { "code": 6258; "name": "listingCapabilitiesRequired"; "msg": "Service listing must declare at least one required capability"; }, { "code": 6259; "name": "listingOperatorFeeTooHigh"; "msg": "Operator fee exceeds the maximum allowed"; }, { "code": 6260; "name": "listingOperatorRequired"; "msg": "A non-zero operator fee requires an operator payee"; }, { "code": 6261; "name": "listingNotActive"; "msg": "Service listing is not active"; }, { "code": 6262; "name": "listingRetired"; "msg": "Service listing is retired and cannot be modified"; }, { "code": 6263; "name": "listingVersionMismatch"; "msg": "Service listing version does not match the expected version"; }, { "code": 6264; "name": "listingPriceMismatch"; "msg": "Service listing price does not match the expected price"; }, { "code": 6265; "name": "listingCapacityReached"; "msg": "Service listing has reached its maximum concurrent open hires"; }, { "code": 6266; "name": "listingInvalidStateTransition"; "msg": "Invalid service listing state transition"; }, { "code": 6267; "name": "taskNotClosable"; "msg": "Task can only be closed once it is in a terminal state with no active workers"; }, { "code": 6268; "name": "workerRewardBelowFloor"; "msg": "Worker reward would fall below the protocol-mandated floor"; }, { "code": 6269; "name": "invalidHireRecord"; "msg": "Supplied hire record does not match this task"; }, { "code": 6270; "name": "missingOperatorAccount"; "msg": "Operator payee account is required for this hire's operator fee"; }, { "code": 6271; "name": "invalidOperatorAccount"; "msg": "Operator payee account does not match the hire record operator"; }, { "code": 6272; "name": "hiredTaskValidationUnsupported"; "msg": "A hired task cannot be reconfigured for manual validation; it settles on the hire completion path"; }, { "code": 6273; "name": "operatorIsCreator"; "msg": "Operator payee cannot be the task creator (operator self-deal)"; }, { "code": 6274; "name": "taskNotMigratable"; "msg": "Task account is not a migratable size (expected the pre-Batch-2 layout)"; }, { "code": 6275; "name": "taskDiscriminatorMismatch"; "msg": "Task account discriminator does not match the Task type"; }, { "code": 6276; "name": "bondTaskMismatch"; "msg": "Completion bond does not belong to this task"; }, { "code": 6277; "name": "bondPartyMismatch"; "msg": "Completion bond party does not match the expected wallet"; }, { "code": 6278; "name": "bondRoleMismatch"; "msg": "Completion bond has the wrong role for this disposition"; }, { "code": 6279; "name": "bondAlreadyPosted"; "msg": "A completion bond has already been posted for this party and task"; }, { "code": 6280; "name": "missingCompletionBondAccount"; "msg": "A required completion bond account was not provided"; }, { "code": 6281; "name": "bondUnsupportedTaskType"; "msg": "Completion bonds are single-worker (Exclusive) only in v1"; }, { "code": 6282; "name": "maxRevisionRoundsExceeded"; "msg": "Maximum revision rounds exceeded; escalate to reject"; }, { "code": 6283; "name": "taskNotRejectFrozen"; "msg": "Task is not in the RejectFrozen state"; }, { "code": 6284; "name": "rejectFrozenTimeoutNotElapsed"; "msg": "RejectFrozen review timeout has not elapsed"; }, { "code": 6285; "name": "unauthorizedReviewDecision"; "msg": "Caller is not authorized to make this review decision"; }, { "code": 6286; "name": "taskFrozenCannotDispute"; "msg": "A frozen (rejected) task cannot be disputed"; }, { "code": 6287; "name": "rejectFrozenSingleWorkerOnly"; "msg": "RejectFrozen review is single-worker (Exclusive) only"; }, { "code": 6288; "name": "invalidRatingScore"; "msg": "Rating score must be in the range 1..=5"; }, { "code": 6289; "name": "taskNotCompletedForRating"; "msg": "Only a completed hired task can be rated"; }, { "code": 6290; "name": "ratingNotBuyer"; "msg": "Only the buyer (task creator) may rate this hire"; }, { "code": 6291; "name": "reviewUriTooLong"; "msg": "Review URI exceeds the maximum allowed length"; }, { "code": 6292; "name": "invalidModerationAttestor"; "msg": "Invalid moderation attestor: pubkey must be non-zero"; }, { "code": 6293; "name": "unauthorizedModerationAttestor"; "msg": "Signer is neither the moderation authority nor a registered attestor"; }, { "code": 6294; "name": "moderationAttestorMismatch"; "msg": "Supplied moderation attestor entry does not match the signing moderator"; }, { "code": 6295; "name": "rationaleUriTooLong"; "msg": "Dispute ruling rationale URI exceeds the maximum allowed length"; }, { "code": 6296; "name": "configNotMigratable"; "msg": "ProtocolConfig account is not a migratable size (expected the pre-P6.5 layout)"; }, { "code": 6297; "name": "invalidPda"; "msg": "Account is not the canonical PDA for this instruction"; }, { "code": 6298; "name": "invalidSurfaceRevision"; "msg": "Surface revision value is not a recognized surface"; }, { "code": 6299; "name": "referrerFeeTooHigh"; "msg": "Referrer fee in basis points exceeds the maximum allowed"; }, { "code": 6300; "name": "combinedFeeAboveCap"; "msg": "Combined protocol + operator + referrer fees leave the worker below the floor"; }, { "code": 6301; "name": "missingReferrerAccount"; "msg": "Referrer payee account is missing for a task that carries a referrer fee"; }, { "code": 6302; "name": "invalidReferrerAccount"; "msg": "Referrer payee account does not match the snapshotted referrer"; }, { "code": 6303; "name": "referrerIsCreator"; "msg": "Referrer must not be the task creator (no self-deal)"; }, { "code": 6304; "name": "invalidVerifiedDomain"; "msg": "Verified domain is empty, too long, or not a valid DNS name"; }, { "code": 6305; "name": "invalidAgentVerificationMethod"; "msg": "Unknown agent-verification method (expected TxtRecord or WellKnown)"; }, { "code": 6306; "name": "reputationStakeNotWithdrawn"; "msg": "Reputation stake must be fully withdrawn before the agent can be deregistered"; }, { "code": 6307; "name": "providerAgentNotActive"; "msg": "Provider agent must be Active for this listing operation"; }, { "code": 6308; "name": "taskHasLiveCompletionBond"; "msg": "Task has a live completion bond; reclaim it before closing the task"; }, { "code": 6309; "name": "attestorBondMissing"; "msg": "Attestor PDA is missing the registration bond after deposit"; }, { "code": 6310; "name": "attestorExitNotRequested"; "msg": "Attestor exit has not been requested (exit_at is zero)"; }, { "code": 6311; "name": "attestorExitAlreadyRequested"; "msg": "Attestor exit already requested; the exit clock cannot be reset"; }, { "code": 6312; "name": "attestorExitCooldownActive"; "msg": "Attestor exit cooldown has not elapsed"; }, { "code": 6313; "name": "attestorExiting"; "msg": "Attestor is in its exit window and can no longer moderate or unlock gates"; }, { "code": 6314; "name": "unauthorizedAttestorRevocation"; "msg": "Only the wallet that created a roster entry may revoke it"; }, { "code": 6315; "name": "attestorNotSelfRegistered"; "msg": "Only a self-registered (bonded) attestor may exit; deputized entries are removed via revoke"; }, { "code": 6316; "name": "contentBlocked"; "msg": "Content hash is blocked by the multisig takedown floor"; }, { "code": 6317; "name": "invalidModerationBlockAccount"; "msg": "Moderation block account is not the canonical PDA for this content hash"; }, { "code": 6318; "name": "invalidModerationRationale"; "msg": "Block rationale hash and URI are required (non-zero, non-empty, bounded)"; }, { "code": 6319; "name": "invalidTrustList"; "msg": "Trust list hash and URI are required (non-zero, non-empty, bounded)"; }, { "code": 6320; "name": "invalidModerationRecord"; "msg": "Moderation record account is not the canonical PDA, not program-owned, or not a moderation record"; }, { "code": 6321; "name": "invalidStoreHandle"; "msg": "Store handle must be 3-20 chars of lowercase [a-z0-9-], starting alphanumeric, zero-padded"; }, { "code": 6322; "name": "invalidStoreMetadataUri"; "msg": "Store metadata URI exceeds the maximum length"; }, { "code": 6323; "name": "invalidStoreDomain"; "msg": "Store domain is not a valid DNS name"; }, { "code": 6324; "name": "invalidStoreOperatorTerms"; "msg": "Store operator fee requires a non-default operator payee (and vice versa)"; }, { "code": 6325; "name": "storeBondMissing"; "msg": "Store PDA is missing the registration bond after deposit"; }, { "code": 6326; "name": "unauthorizedModerationHeartbeat"; "msg": "Only the moderation config authority or the moderation authority may heartbeat"; }, { "code": 6327; "name": "invalidModerationLivenessWindow"; "msg": "Moderation liveness window is outside the allowed [1 day, 400 day] range"; }, { "code": 6328; "name": "invalidStoreManifest"; "msg": "Store manifest hash and URI must be pinned together (both set or both empty)"; }, { "code": 6329; "name": "contestSolRewardOnly"; "msg": "Contest (schema-1 Competitive) tasks must use SOL rewards"; }, { "code": 6330; "name": "contestSelectionWindowElapsed"; "msg": "Selection window has closed; the contest settles via distribute_ghost_share"; }, { "code": 6331; "name": "contestAcceptRequiresSoleLiveSubmission"; "msg": "Reject every other live submission before accepting a contest winner"; }, { "code": 6332; "name": "contestAutoAcceptDisabled"; "msg": "Auto-accept is disabled for contest tasks; accept before ghost_at or crank distribute_ghost_share after"; }, { "code": 6333; "name": "contestGhostWindowNotReached"; "msg": "Ghost-split is not open yet; the creator's selection window is still active"; }, { "code": 6334; "name": "contestGhostShareUnavailable"; "msg": "distribute_ghost_share requires a schema-1 Competitive task pending validation"; }, { "code": 6335; "name": "contestHasLiveSubmissions"; "msg": "Contest tasks cannot be cancelled while live submissions exist"; }, { "code": 6336; "name": "contestFlowUnsupported"; "msg": "Dispute/freeze/revision flows are disabled for contest tasks"; }, { "code": 6337; "name": "submissionRentAccountsRequired"; "msg": "Straggler submission rent requires its worker agent + worker authority accounts (never paid to the creator)"; }, { "code": 6338; "name": "contestForfeitTreasuryRequired"; "msg": "Contest no-show forfeit requires the protocol treasury account"; }, { "code": 6339; "name": "claimReclaimRequiresTerminalTask"; "msg": "reclaim_terminal_claim requires a terminal (Completed/Cancelled) task"; }, { "code": 6340; "name": "claimReclaimRequiresNoSubmission"; "msg": "reclaim_terminal_claim requires a canonical empty, Rejected, or terminal Collaborative Submitted record"; }, { "code": 6341; "name": "goodsSurfaceNotEnabled"; "msg": "Goods market requires surface revision 4 to be stamped (update_launch_controls)"; }, { "code": 6342; "name": "goodsInvalidId"; "msg": "Good id must be non-zero"; }, { "code": 6343; "name": "goodsInvalidName"; "msg": "Good name must be non-zero"; }, { "code": 6344; "name": "goodsInvalidMetadata"; "msg": "Good metadata hash and URI must both be set (hash non-zero, URI non-empty, URI <= 256 bytes)"; }, { "code": 6345; "name": "goodsPriceBelowMinimum"; "msg": "Good price is below the minimum"; }, { "code": 6346; "name": "goodsInvalidSupply"; "msg": "Good supply must be positive (create: total_supply > 0; restock: additional_supply > 0)"; }, { "code": 6347; "name": "goodsSoldOut"; "msg": "Good is sold out"; }, { "code": 6348; "name": "goodsNotActive"; "msg": "Goods listing is not active"; }, { "code": 6349; "name": "goodsPriceChanged"; "msg": "Good price changed since preview; re-read the listing and retry"; }, { "code": 6350; "name": "goodsSerialStale"; "msg": "Stale sale serial: another purchase landed first; re-read sold_count and retry"; }, { "code": 6351; "name": "goodsSelfPurchase"; "msg": "A seller cannot purchase their own good"; }, { "code": 6352; "name": "goodsUnauthorizedUpdate"; "msg": "Only the seller can update a goods listing"; }, { "code": 6353; "name": "goodsInvalidOperatorTerms"; "msg": "Operator and operator_fee_bps must be set together, and the operator may not be the seller"; }, { "code": 6354; "name": "resolverConflictOfInterest"; "msg": "A dispute party or snapshotted settlement beneficiary cannot resolve the dispute"; }, { "code": 6355; "name": "completingAcceptRequiresSoleLiveSubmission"; "msg": "An accept that completes the task requires it to be the sole live submission (peer submissions would otherwise be orphaned)"; }, { "code": 6356; "name": "bondNotTiedToNoShowWorker"; "msg": "A forfeited worker completion bond must belong to a live no-show claimant of this task"; }, { "code": 6357; "name": "claimSlashPending"; "msg": "This claim's dispute was resolved but its slash has not been applied yet"; }, { "code": 6358; "name": "rejectFrozenSolOnly"; "msg": "Reject-and-freeze is SOL-only in v1 (the frozen exits cannot settle a token escrow)"; }, { "code": 6359; "name": "reputationDelegationWhileDefendant"; "msg": "An agent with active disputes as defendant cannot delegate reputation"; }, { "code": 6360; "name": "reputationDelegationIdentityMismatch"; "msg": "The delegator agent is not the same registration that created this delegation"; }, { "code": 6361; "name": "agentHasActiveBids"; "msg": "An agent with live bids cannot deregister (their withdrawal paths load this registration)"; }, { "code": 6362; "name": "reputationDelegationTooSoon"; "msg": "A freshly registered agent must wait at least one slot before delegating reputation"; }, { "code": 6363; "name": "disputeResolutionWindowExpired"; "msg": "The dispute resolution window has expired; use expire_dispute"; }, { "code": 6364; "name": "reputationDelegationDisabled"; "msg": "New reputation delegations are disabled; existing delegations may still be revoked"; }, { "code": 6365; "name": "taskChildRequiresDedicatedCleanup"; "msg": "Task child has live submission state and requires its dedicated cleanup path"; }, { "code": 6366; "name": "taskChildRentRecipientRequired"; "msg": "The stored task-child rent recipient must be supplied as a writable account"; }, { "code": 6367; "name": "invalidSlashPercentage"; "msg": "Slash percentage must be between 0 and 100"; }, { "code": 6368; "name": "taskNotRentExempt"; "msg": "Task must be rent exempt before terminal cleanup can preserve it"; }, { "code": 6369; "name": "invalidRationaleHash"; "msg": "Dispute resolution requires a non-zero rationale content hash"; }, { "code": 6370; "name": "tokenMintFreezeAuthorityEnabled"; "msg": "Token reward mints must have no freeze authority"; }, { "code": 6371; "name": "tokenEscrowFrozen"; "msg": "SPL token account must be initialized and not frozen"; }, { "code": 6372; "name": "orphanTaskParentStillLive"; "msg": "The referenced parent Task still exists; use its normal cleanup path"; }, { "code": 6373; "name": "orphanTaskChildUnsupported"; "msg": "This account type may carry principal or live state and cannot use orphan rent recovery"; }, { "code": 6374; "name": "bidJobSpecMismatch"; "msg": "Bid job-spec commitment does not match the current task job specification"; }, { "code": 6375; "name": "taskJobSpecBidLocked"; "msg": "Task job specification is permanently locked because its creator opened bidding"; }, { "code": 6376; "name": "bidJobSpecBindingRequired"; "msg": "Legacy unbound bid must be refreshed against the locked job specification before acceptance"; }, { "code": 6377; "name": "staleBidAcceptance"; "msg": "Selected bid terms changed since the creator signed acceptance"; }, { "code": 6378; "name": "goodsMetadataChanged"; "msg": "Good metadata changed since preview; re-read the listing and retry"; }, { "code": 6379; "name": "skillVersionChanged"; "msg": "Skill content version changed since preview; re-read the skill and retry"; }, { "code": 6380; "name": "skillContentChanged"; "msg": "Skill content hash changed since preview; re-read the skill and retry"; }, { "code": 6381; "name": "privateTaskCreationDisabled"; "msg": "Private task creation is disabled until an audited ZK guest and mainnet verifier are activated"; }, { "code": 6382; "name": "invalidBidMarketplaceConfig"; "msg": "Bid marketplace configuration exceeds protocol safety limits"; }, { "code": 6383; "name": "bidBookEnumerationMismatch"; "msg": "accept_bid must enumerate every other canonical open bid and matching bidder exactly once"; }, { "code": 6384; "name": "bidDoesNotSatisfyMatchingPolicy"; "msg": "The selected bid does not win the bid book's declared matching policy"; }, { "code": 6385; "name": "marketplacePayeeAccountAlias"; "msg": "A marketplace fee payee cannot alias the task or its escrow account"; }, { "code": 6386; "name": "lamportTransferAccountAlias"; "msg": "A positive lamport transfer requires distinct source and destination accounts"; }, { "code": 6387; "name": "reputationDelegationRecoveryAccountsRequired"; "msg": "Orphan delegation recovery requires the canonical protocol config and writable treasury"; }, { "code": 6388; "name": "releaseStampRequiresPaused"; "msg": "The reviewed release surface can only be stamped while the protocol is paused"; }, { "code": 6389; "name": "releaseBoundaryAccountMismatch"; "msg": "A release-boundary account does not match its reviewed identity or loader state"; }, { "code": 6390; "name": "releaseBoundaryDigestMismatch"; "msg": "A release-boundary account data digest changed before the atomic stamp"; }, { "code": 6391; "name": "releaseProgramDataNotSettled"; "msg": "The reviewed ProgramData upgrade slot has not settled before the release stamp"; }, { "code": 6392; "name": "releaseUnpauseRequiresCurrentSurface"; "msg": "The full production protocol can only be unpaused after the current release surface is atomically stamped"; }, { "code": 6393; "name": "hiredTaskJobSpecMismatch"; "msg": "The job specification does not match the commitment selected at hire time"; }, { "code": 6394; "name": "bidNotBookBest"; "msg": "Acceptance requires the bid book's tracked best bid"; }, { "code": 6395; "name": "bidRepromotionGraceActive"; "msg": "The bid book's re-promotion grace window has not elapsed"; }, { "code": 6396; "name": "bidLeaderRetreat"; "msg": "The tracked best bid can only update to equal-or-better terms"; }, { "code": 6397; "name": "bidWinnerStillEligible"; "msg": "The tracked best bid is still valid and eligible"; }, { "code": 6398; "name": "bidBookCacheMismatch"; "msg": "The bid book's cached winner terms do not match the bid account"; }, { "code": 6399; "name": "bidNotBetterThanTrackedBest"; "msg": "The presented bid does not beat the bid book's tracked best"; }, { "code": 6400; "name": "bidBookScoreWindowInvalid"; "msg": "The bid book requires a positive frozen scoring window"; }, { "code": 6401; "name": "disputePeerBundlesRetired"; "msg": "Dispute rulings no longer accept peer worker bundles; use settle_dispute_claim"; }, { "code": 6402; "name": "disputeSettlementNotPending"; "msg": "The dispute has no deferred worker settlement pending"; }, { "code": 6403; "name": "disputeDefendantNotPeer"; "msg": "The defendant claim settles through the ruling, not peer settlement"; }, { "code": 6404; "name": "disputeTerminalStatusCorrupt"; "msg": "The dispute's recorded terminal status is invalid"; } ]; "types": [ { "name": "agentDeregistered"; "docs": [ "Emitted when an agent deregisters" ]; "type": { "kind": "struct"; "fields": [ { "name": "agentId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "authority"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "agentRegistered"; "docs": [ "Emitted when a new agent registers" ]; "type": { "kind": "struct"; "fields": [ { "name": "agentId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "authority"; "type": "pubkey"; }, { "name": "capabilities"; "type": "u64"; }, { "name": "endpoint"; "type": "string"; }, { "name": "stakeAmount"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "agentRegistration"; "docs": [ "Agent registration account", "PDA seeds: [\"agent\", agent_id]" ]; "type": { "kind": "struct"; "fields": [ { "name": "agentId"; "docs": [ "Unique agent identifier" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "authority"; "docs": [ "Agent's signing authority" ]; "type": "pubkey"; }, { "name": "capabilities"; "docs": [ "Agent capabilities as a bitmask (u64).", "", "Each bit represents a specific capability the agent possesses.", "See [`capability`] module for defined bits:", "- Bits 0-9: Currently defined capabilities (COMPUTE, INFERENCE, etc.)", "- Bits 10-63: Reserved for future protocol extensions", "", "Agents can only claim tasks where they have all required capabilities:", "`(agent.capabilities & task.required_capabilities) == task.required_capabilities`" ]; "type": "u64"; }, { "name": "status"; "docs": [ "Agent status" ]; "type": { "defined": { "name": "agentStatus"; }; }; }, { "name": "endpoint"; "docs": [ "Network endpoint (max 256 chars)" ]; "type": "string"; }, { "name": "metadataUri"; "docs": [ "Extended metadata URI (max 128 chars)" ]; "type": "string"; }, { "name": "registeredAt"; "docs": [ "Registration timestamp" ]; "type": "i64"; }, { "name": "lastActive"; "docs": [ "Last activity timestamp" ]; "type": "i64"; }, { "name": "tasksCompleted"; "docs": [ "Total tasks completed (saturating telemetry)" ]; "type": "u64"; }, { "name": "totalEarned"; "docs": [ "Total SOL rewards earned, in lamports (excludes SPL-token base units;", "saturating telemetry)" ]; "type": "u64"; }, { "name": "reputation"; "docs": [ "Agent reputation score (0-10000)", "Initial value: 3000 (probationary starting point)", "Can be adjusted via protocol config in future versions" ]; "type": "u16"; }, { "name": "activeTasks"; "docs": [ "Active task count" ]; "type": "u16"; }, { "name": "stake"; "docs": [ "Slashable stake used for protocol eligibility and governance weight" ]; "type": "u64"; }, { "name": "bump"; "docs": [ "Bump seed" ]; "type": "u8"; }, { "name": "lastTaskCreated"; "docs": [ "Historical timestamp of last task creation" ]; "type": "i64"; }, { "name": "lastDisputeInitiated"; "docs": [ "Timestamp of last dispute initiated" ]; "type": "i64"; }, { "name": "taskCount24h"; "docs": [ "Historical agent-scoped task count" ]; "type": "u8"; }, { "name": "disputeCount24h"; "docs": [ "Historical agent-scoped dispute count" ]; "type": "u8"; }, { "name": "rateLimitWindowStart"; "docs": [ "Historical agent-scoped rate-limit window start" ]; "type": "i64"; }, { "name": "activeDisputeVotes"; "docs": [ "Number of disputes initiated by this agent whose initiator outcome has not", "yet been finalized by `apply_initiator_slash`.", "", "P6.3 retired the arbiter-vote model that originally used this byte. Reusing", "it as a pending-outcome counter preserves the deployed AgentRegistration", "layout while making deregistration wait for every initiator liability (or", "no-fault outcome) to be finalized. The historical field name is retained", "deliberately so account layouts and generated decoders remain compatible." ]; "type": "u8"; }, { "name": "lastVoteTimestamp"; "docs": [ "Governance registration-stake lock anchor. Governance voting stores the", "proposal voting deadline here; deregistration then enforces its 24-hour", "post-vote cooldown after that deadline. Legacy dispute-vote timestamps", "remain valid conservative anchors. The field is retained in place so the", "AgentRegistration layout does not change." ]; "type": "i64"; }, { "name": "lastStateUpdate"; "docs": [ "Timestamp of last state update" ]; "type": "i64"; }, { "name": "disputesAsDefendant"; "docs": [ "Active disputes where this agent is a defendant (can be slashed)" ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved bytes for future use.", "Note: Not validated on deserialization - may contain arbitrary data", "from previous versions. New fields should handle this gracefully." ]; "type": { "array": [ "u8", 4 ]; }; } ]; }; }, { "name": "agentStats"; "docs": [ "Negative / non-success track-record counters for an agent (P6.6).", "", "`AgentRegistration` only tracks success-side stats (`tasks_completed`,", "`total_earned`) and has just FOUR reserved bytes, so the negative counters", "(rejections, dispute outcomes, expirations, cancellations) do NOT fit there.", "Rather than a size-extending migration of every existing agent account,", "these live in a SEPARATE aggregate PDA `[\"agent_stats\", agent]` that is created", "lazily on first write (`init_if_needed`), keyed on the agent's", "`AgentRegistration` PDA. No `AgentRegistration` layout change / migration is", "introduced.", "", "These are reputation TELEMETRY, not a money-path account: they are never read to", "gate settlement, so the incrementing accounts are passed OPTIONALLY in the", "full-surface handlers (`reject_task_result`, `reject_and_freeze`, `expire_claim`,", "`resolve_dispute`, `cancel_task`). The counted party (worker / creator) is not the", "signer that decides whether the account is supplied, so it cannot self-omit.", "", "PDA seeds: [\"agent_stats\", agent]" ]; "type": { "kind": "struct"; "fields": [ { "name": "agent"; "docs": [ "The `AgentRegistration` PDA these counters belong to (also the seed)." ]; "type": "pubkey"; }, { "name": "tasksRejected"; "docs": [ "Times one of this agent's submissions was rejected for re-work", "(`reject_task_result`) or frozen for review (`reject_and_freeze`)." ]; "type": "u64"; }, { "name": "disputesWon"; "docs": [ "Disputes resolved in this agent's favor as the defendant worker." ]; "type": "u64"; }, { "name": "disputesLost"; "docs": [ "Disputes resolved against this agent as the defendant worker (a loss; the", "slash-history signal)." ]; "type": "u64"; }, { "name": "claimsExpired"; "docs": [ "Claims by this agent that expired (no-show / abandoned) via `expire_claim`." ]; "type": "u64"; }, { "name": "totalCancelled"; "docs": [ "Tasks created by this agent (as the creator/buyer) that were cancelled." ]; "type": "u64"; }, { "name": "lastUpdated"; "docs": [ "Last time any counter was updated (unix timestamp)." ]; "type": "i64"; }, { "name": "bump"; "docs": [ "PDA bump." ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future track-record counters (the per-agent rating rollup is", "deferred to P6.6, which will carve these bytes value-only with no migration).", "MUST stay zeroed." ]; "type": { "array": [ "u8", 32 ]; }; } ]; }; }, { "name": "agentStatus"; "docs": [ "Agent status" ]; "repr": { "kind": "rust"; }; "type": { "kind": "enum"; "variants": [ { "name": "inactive"; }, { "name": "active"; }, { "name": "busy"; }, { "name": "suspended"; } ]; }; }, { "name": "agentSuspended"; "docs": [ "Emitted when an agent is suspended by the protocol authority (fix #819)" ]; "type": { "kind": "struct"; "fields": [ { "name": "agentId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "authority"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "agentTrackRecordUpdated"; "docs": [ "Emitted whenever a track-record counter on `AgentStats` is incremented (P6.6).", "`new_value` is the post-increment counter so indexers can build a slash/outcome", "history from the event stream alone (feeds the SDK `getAgentTrackRecord`)." ]; "type": { "kind": "struct"; "fields": [ { "name": "agent"; "docs": [ "The `AgentRegistration` PDA whose track record changed." ]; "type": "pubkey"; }, { "name": "agentStats"; "docs": [ "The `AgentStats` PDA that was written." ]; "type": "pubkey"; }, { "name": "counter"; "docs": [ "Which counter was incremented." ]; "type": { "defined": { "name": "trackRecordCounter"; }; }; }, { "name": "newValue"; "docs": [ "The counter's value AFTER this increment." ]; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "agentUnsuspended"; "docs": [ "Emitted when an agent is unsuspended by the protocol authority (fix #819)" ]; "type": { "kind": "struct"; "fields": [ { "name": "agentId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "authority"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "agentUpdated"; "docs": [ "Emitted when an agent updates its registration" ]; "type": { "kind": "struct"; "fields": [ { "name": "agentId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "capabilities"; "type": "u64"; }, { "name": "status"; "type": "u8"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "agentVerification"; "docs": [ "On-chain domain-verification attestation for an agent (P7.3).", "", "The GLOBAL moderation authority (`ModerationConfig.moderation_authority`) records", "that operator domain `D` was proven to control agent `A`. The off-chain proof (a DNS", "`TXT` record or `.well-known` file containing the agent PDA + a signed challenge) is", "the attestor SERVICE's job; on-chain this account only records the authority's", "verdict so `verified` + domain is trustlessly readable. Re-verification overwrites", "the same PDA (`init_if_needed`); a revocation marks `revoked = true`.", "", "Authorization (P1.2 §4.6, DECOUPLED from the roster): `record_agent_verification` /", "`revoke_agent_verification` accept ONLY the global moderation authority — NOT", "`ModerationAttestor` roster entries. With permissionless roster registration", "(`register_moderation_attestor`), a bonded self-registered key could otherwise mint", "domain badges for domains it does not control and clobber the single per-agent", "`[\"agent_verification\", agent]` slot. Domain verification is a different trust", "question from content moderation and does not ride the open roster in v1.", "", "PDA seeds: [\"agent_verification\", agent]" ]; "type": { "kind": "struct"; "fields": [ { "name": "agent"; "docs": [ "The `AgentRegistration` PDA this verification applies to." ]; "type": "pubkey"; }, { "name": "verifiedDomain"; "docs": [ "The verified operator domain (DNS name, <= 253 octets). Lowercased ASCII." ]; "type": "string"; }, { "name": "method"; "docs": [ "Proof method: one of `agent_verification_method::*`." ]; "type": "u8"; }, { "name": "verifiedBy"; "docs": [ "The attestor/authority that recorded this verification." ]; "type": "pubkey"; }, { "name": "verifiedAt"; "docs": [ "When the verification was recorded." ]; "type": "i64"; }, { "name": "expiresAt"; "docs": [ "Optional expiry timestamp. Zero means no expiry." ]; "type": "i64"; }, { "name": "revoked"; "docs": [ "Whether this verification has been revoked (set by `revoke_agent_verification`)." ]; "type": "bool"; }, { "name": "bump"; "docs": [ "PDA bump." ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future verification metadata. MUST stay zeroed." ]; "type": { "array": [ "u8", 32 ]; }; } ]; }; }, { "name": "agentVerificationRevoked"; "docs": [ "Emitted when a trusted attestor revokes an agent's domain verification (P7.3)." ]; "type": { "kind": "struct"; "fields": [ { "name": "agent"; "type": "pubkey"; }, { "name": "revokedBy"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "agentVerified"; "docs": [ "Emitted when a trusted attestor records a domain-verification attestation for an", "agent (P7.3). `verified_by` is the recording attestor/authority." ]; "type": { "kind": "struct"; "fields": [ { "name": "agent"; "type": "pubkey"; }, { "name": "verifiedDomain"; "type": "string"; }, { "name": "method"; "type": "u8"; }, { "name": "verifiedBy"; "type": "pubkey"; }, { "name": "verifiedAt"; "type": "i64"; }, { "name": "expiresAt"; "type": "i64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "attestorExitFinalized"; "docs": [ "Emitted when an attestor exit finalizes and the roster PDA closes, refunding", "bond + rent to the attestor in full (P1.2 — never confiscatable)." ]; "type": { "kind": "struct"; "fields": [ { "name": "attestor"; "type": "pubkey"; }, { "name": "refundedLamports"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "attestorExitRequested"; "docs": [ "Emitted when an attestor starts its two-step exit (P1.2). From this moment the", "attestor is rejected at the record and consumption gates; the bond refunds at", "finalize after the cooldown." ]; "type": { "kind": "struct"; "fields": [ { "name": "attestor"; "type": "pubkey"; }, { "name": "exitAt"; "type": "i64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "authorityRateLimit"; "docs": [ "Wallet-scoped rate limit state.", "PDA seeds: [\"authority_rate_limit\", authority]" ]; "type": { "kind": "struct"; "fields": [ { "name": "authority"; "docs": [ "Authority wallet this rate limit state belongs to" ]; "type": "pubkey"; }, { "name": "lastTaskCreated"; "docs": [ "Timestamp of last task creation initiated by this authority" ]; "type": "i64"; }, { "name": "lastDisputeInitiated"; "docs": [ "Timestamp of last dispute initiated by this authority" ]; "type": "i64"; }, { "name": "taskCount24h"; "docs": [ "Number of tasks created in current 24h window" ]; "type": "u8"; }, { "name": "disputeCount24h"; "docs": [ "Number of disputes initiated in current 24h window" ]; "type": "u8"; }, { "name": "rateLimitWindowStart"; "docs": [ "Start of current rate limit window (unix timestamp)" ]; "type": "i64"; }, { "name": "bump"; "docs": [ "PDA bump seed" ]; "type": "u8"; } ]; }; }, { "name": "bidAccepted"; "docs": [ "Emitted when a bid is accepted." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "bid"; "type": "pubkey"; }, { "name": "bidder"; "type": "pubkey"; }, { "name": "bidBook"; "type": "pubkey"; }, { "name": "bookVersion"; "type": "u64"; }, { "name": "policy"; "type": "u8"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "bidBookInitialized"; "docs": [ "Emitted when a bid book is initialized for a task." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "bidBook"; "type": "pubkey"; }, { "name": "state"; "type": "u8"; }, { "name": "policy"; "type": "u8"; }, { "name": "bookVersion"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "bidBookState"; "docs": [ "Bid book state for Marketplace V2." ]; "repr": { "kind": "rust"; }; "type": { "kind": "enum"; "variants": [ { "name": "open"; }, { "name": "accepted"; }, { "name": "closed"; } ]; }; }, { "name": "bidCancelled"; "docs": [ "Emitted when a parked or open bid is cancelled." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "bid"; "type": "pubkey"; }, { "name": "bidder"; "type": "pubkey"; }, { "name": "bidBook"; "type": "pubkey"; }, { "name": "bookVersion"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "bidCreated"; "docs": [ "Emitted when a bid is created." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "bid"; "type": "pubkey"; }, { "name": "bidder"; "type": "pubkey"; }, { "name": "bidBook"; "type": "pubkey"; }, { "name": "bookVersion"; "type": "u64"; }, { "name": "requestedRewardLamports"; "type": "u64"; }, { "name": "etaSeconds"; "type": "u32"; }, { "name": "expiresAt"; "type": "i64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "bidExpired"; "docs": [ "Emitted when a bid is expired and cleaned up." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "bid"; "type": "pubkey"; }, { "name": "bidder"; "type": "pubkey"; }, { "name": "bidBook"; "type": "pubkey"; }, { "name": "bookVersion"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "bidMarketplaceConfig"; "docs": [ "Marketplace V2 configuration account", "PDA seeds: [\"bid_marketplace\"]" ]; "type": { "kind": "struct"; "fields": [ { "name": "authority"; "type": "pubkey"; }, { "name": "minBidBondLamports"; "type": "u64"; }, { "name": "bidCreationCooldownSecs"; "type": "i64"; }, { "name": "maxBidsPer24h"; "type": "u16"; }, { "name": "maxActiveBidsPerTask"; "type": "u16"; }, { "name": "maxBidLifetimeSecs"; "type": "i64"; }, { "name": "acceptedNoShowSlashBps"; "type": "u16"; }, { "name": "bump"; "type": "u8"; } ]; }; }, { "name": "bidMarketplaceInitialized"; "docs": [ "Emitted when Marketplace V2 configuration is initialized." ]; "type": { "kind": "struct"; "fields": [ { "name": "authority"; "type": "pubkey"; }, { "name": "minBidBondLamports"; "type": "u64"; }, { "name": "bidCreationCooldownSecs"; "type": "i64"; }, { "name": "maxBidsPer24h"; "type": "u16"; }, { "name": "maxActiveBidsPerTask"; "type": "u16"; }, { "name": "maxBidLifetimeSecs"; "type": "i64"; }, { "name": "acceptedNoShowSlashBps"; "type": "u16"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "bidPromoted"; "docs": [ "Emitted when a bid becomes the bid book's tracked policy winner — at", "creation, update, or through the permissionless `promote_bid` crank." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "bid"; "type": "pubkey"; }, { "name": "bidder"; "type": "pubkey"; }, { "name": "bidBook"; "type": "pubkey"; }, { "name": "bookVersion"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "bidUpdated"; "docs": [ "Emitted when a bid is updated." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "bid"; "type": "pubkey"; }, { "name": "bidder"; "type": "pubkey"; }, { "name": "bidBook"; "type": "pubkey"; }, { "name": "bookVersion"; "type": "u64"; }, { "name": "requestedRewardLamports"; "type": "u64"; }, { "name": "etaSeconds"; "type": "u32"; }, { "name": "expiresAt"; "type": "i64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "bidWinnerDemoted"; "docs": [ "Emitted when the tracked winner is removed (cancelled, expired, or proven", "ineligible) and the book enters the re-promotion grace window." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "bid"; "type": "pubkey"; }, { "name": "bidBook"; "type": "pubkey"; }, { "name": "bookVersion"; "type": "u64"; }, { "name": "winnerStaleSince"; "type": "i64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "bidderMarketState"; "docs": [ "Per-bidder bid-market activity state", "PDA seeds: [\"bidder_market\", bidder_agent]" ]; "type": { "kind": "struct"; "fields": [ { "name": "bidder"; "type": "pubkey"; }, { "name": "lastBidCreatedAt"; "type": "i64"; }, { "name": "bidWindowStartedAt"; "type": "i64"; }, { "name": "bidsCreatedInWindow"; "type": "u16"; }, { "name": "activeBidCount"; "type": "u16"; }, { "name": "totalBidsCreated"; "type": "u64"; }, { "name": "totalBidsAccepted"; "type": "u64"; }, { "name": "bump"; "type": "u8"; } ]; }; }, { "name": "bondForfeited"; "docs": [ "Emitted when a completion bond's principal is forfeited (to the creator or treasury)." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "party"; "type": "pubkey"; }, { "name": "role"; "type": "u8"; }, { "name": "amount"; "type": "u64"; }, { "name": "recipient"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "bondPosted"; "docs": [ "Emitted when a completion bond is posted (Batch 3 §8)." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "party"; "type": "pubkey"; }, { "name": "role"; "type": "u8"; }, { "name": "amount"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "bondRefunded"; "docs": [ "Emitted when a completion bond is refunded to its poster." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "party"; "type": "pubkey"; }, { "name": "role"; "type": "u8"; }, { "name": "amount"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "completionBond"; "docs": [ "Symmetric 25/25 completion bond (spec §8). Both the creator and the worker post", "a bond equal to 25% of the reward into their own PDA; the loser of a dispute", "forfeits theirs, the winner is refunded, and a no-show worker's bond is forfeited", "to the creator on `expire_claim`. Kept in a DEDICATED PDA (never on `TaskClaim`,", "which closes to the worker on exit and would auto-refund a no-show).", "SOL-only in v1. PDA seeds: [\"completion_bond\", task, party] where `party` is the", "SIGNING WALLET (creator wallet / worker authority), so the two sides get distinct", "PDAs and one-bond-per-wallet-per-task is automatic." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "docs": [ "Task this bond backs." ]; "type": "pubkey"; }, { "name": "party"; "docs": [ "Posting wallet (creator wallet for the creator bond, worker authority for the", "worker bond). Also the seed component and the rent/refund recipient." ]; "type": "pubkey"; }, { "name": "role"; "docs": [ "0 = creator bond, 1 = worker bond (see `ROLE_CREATOR` / `ROLE_WORKER`)." ]; "type": "u8"; }, { "name": "amount"; "docs": [ "Bonded principal in lamports (held as excess lamports on this PDA)." ]; "type": "u64"; }, { "name": "bondMint"; "docs": [ "Bond denomination. `None` = SOL (v1); SPL deferred behind a feature flag." ]; "type": { "option": "pubkey"; }; }, { "name": "postedAt"; "docs": [ "Post timestamp." ]; "type": "i64"; }, { "name": "bump"; "docs": [ "PDA bump." ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future bond metadata. MUST stay zeroed." ]; "type": { "array": [ "u8", 16 ]; }; } ]; }; }, { "name": "contestDepositForfeited"; "docs": [ "Emitted when `expire_claim` or `cancel_task` forfeits a contest entry deposit", "to the protocol treasury for a proven no-show. Terminal empty/Rejected claim", "cleanup reports the same forfeiture through", "[`TerminalClaimReclaimed::forfeited`] instead of emitting this event." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "claim"; "type": "pubkey"; }, { "name": "workerAgent"; "docs": [ "The proven no-show worker's `AgentRegistration` PDA." ]; "type": "pubkey"; }, { "name": "amount"; "docs": [ "Lamports forfeited to the treasury (the surplus above the claim's rent)." ]; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "coordinationState"; "docs": [ "Shared coordination state", "PDA seeds: [\"state\", owner, state_key]" ]; "type": { "kind": "struct"; "fields": [ { "name": "owner"; "docs": [ "Owner authority - namespaces state to prevent cross-user collisions" ]; "type": "pubkey"; }, { "name": "stateKey"; "docs": [ "State key" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "stateValue"; "docs": [ "State value" ]; "type": { "array": [ "u8", 64 ]; }; }, { "name": "lastUpdater"; "docs": [ "Last updater" ]; "type": "pubkey"; }, { "name": "version"; "docs": [ "Version for optimistic locking" ]; "type": "u64"; }, { "name": "updatedAt"; "docs": [ "Last update timestamp" ]; "type": "i64"; }, { "name": "bump"; "docs": [ "Bump seed" ]; "type": "u8"; } ]; }; }, { "name": "defaultTrustList"; "docs": [ "P1.2 §5.1 — on-chain, multisig-governed pointer to the default trusted-attestor", "list. A content-addressed pointer (hash + URI), NOT the list itself: the signed,", "versioned artifact ships in `@tetsuo-ai/marketplace-moderation` and is forkable by", "any surface. Governance is `require_multisig_threshold` (the live 2-of-3), never an", "npm publish key. `updated_at` is the deadman signal: a surface can observe staleness", "and fall back to its own list.", "", "PDA seeds: [\"default_trust_list\"]" ]; "type": { "kind": "struct"; "fields": [ { "name": "listHash"; "docs": [ "Content hash of the current list artifact." ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "listUri"; "docs": [ "URI of the list artifact." ]; "type": "string"; }, { "name": "version"; "docs": [ "Monotonic version, bumped on every update (rollback detection)." ]; "type": "u64"; }, { "name": "updatedAt"; "docs": [ "Deadman timestamp: when the list was last updated." ]; "type": "i64"; }, { "name": "updatedBy"; "docs": [ "The fee-paying signer of the last update." ]; "type": "pubkey"; }, { "name": "bump"; "docs": [ "PDA bump." ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future trust-list metadata. MUST stay zeroed." ]; "type": { "array": [ "u8", 16 ]; }; } ]; }; }, { "name": "defaultTrustListUpdated"; "docs": [ "Emitted when the multisig updates the on-chain default trusted-attestor list", "pointer (P1.2 §5.1). `version` is monotonic; `timestamp` doubles as the deadman." ]; "type": { "kind": "struct"; "fields": [ { "name": "listHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "listUri"; "type": "string"; }, { "name": "version"; "type": "u64"; }, { "name": "updatedBy"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "dependencyType"; "docs": [ "Task dependency type for speculative execution decisions" ]; "repr": { "kind": "rust"; }; "type": { "kind": "enum"; "variants": [ { "name": "none"; }, { "name": "data"; }, { "name": "ordering"; }, { "name": "proof"; } ]; }; }, { "name": "dependentTaskCreated"; "docs": [ "Emitted when a task with dependencies is created" ]; "type": { "kind": "struct"; "fields": [ { "name": "taskId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "creator"; "type": "pubkey"; }, { "name": "dependsOn"; "type": "pubkey"; }, { "name": "dependencyType"; "type": "u8"; }, { "name": "rewardMint"; "docs": [ "SPL token mint for reward denomination (None = SOL)" ]; "type": { "option": "pubkey"; }; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "dispute"; "docs": [ "Dispute account for conflict resolution", "PDA seeds: [\"dispute\", dispute_id]" ]; "type": { "kind": "struct"; "fields": [ { "name": "disputeId"; "docs": [ "Dispute identifier" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "task"; "docs": [ "Related task" ]; "type": "pubkey"; }, { "name": "initiator"; "docs": [ "Initiator (agent PDA)" ]; "type": "pubkey"; }, { "name": "initiatorAuthority"; "docs": [ "Initiator's authority wallet (for resolver constraint)" ]; "type": "pubkey"; }, { "name": "evidenceHash"; "docs": [ "Evidence hash" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "resolutionType"; "docs": [ "Proposed resolution type" ]; "type": { "defined": { "name": "resolutionType"; }; }; }, { "name": "status"; "docs": [ "Dispute status" ]; "type": { "defined": { "name": "disputeStatus"; }; }; }, { "name": "createdAt"; "docs": [ "Creation timestamp" ]; "type": "i64"; }, { "name": "resolvedAt"; "docs": [ "Resolution timestamp" ]; "type": "i64"; }, { "name": "votesFor"; "docs": [ "DEPRECATED (P6.3): arbiter vote tally retired. `vote_dispute` no longer exists,", "so no path increments these from voting. `resolve_dispute` now repurposes this", "pair as a 1-bit RULING RECORD so the permissionless `apply_dispute_slash` /", "`apply_initiator_slash` finalizers can read the resolver's approve/reject decision", "without a vote tally: a resolution writes `votes_for = 1, votes_against = 0` when", "the resolver APPROVED and `votes_for = 0, votes_against = 1` when REJECTED. The", "fields are NOT shrunk (a layout change would be a hazard); they are reinterpreted." ]; "type": "u64"; }, { "name": "votesAgainst"; "docs": [ "DEPRECATED (P6.3): see `votes_for`. Reused as the reject side of the ruling bit." ]; "type": "u64"; }, { "name": "totalVoters"; "docs": [ "DEPRECATED (P6.3): the arbiter vote/quorum model is retired. New disputes", "store `Dispute::INITIATOR_OUTCOME_COUNTER_MARKER` here to prove that their", "initiator's AgentRegistration pending-outcome counter was incremented.", "Historical disputes retain zero. No value represents an actual voter count.", "The field is retained (not shrunk) to keep the account layout stable." ]; "type": "u8"; }, { "name": "votingDeadline"; "docs": [ "Legacy voting deadline, now reused as the first liveness deadline: an", "authorized resolver may rule immediately, but permissionless expiry opens", "after this deadline plus `Dispute::VOTING_DEADLINE_GRACE`. Here authorized", "means a threshold-seated assigned resolver or the protocol authority with", "configured M-of-N approval." ]; "type": "i64"; }, { "name": "expiresAt"; "docs": [ "Hard dispute expiration; after this, only expire_dispute may unwind it.", "expires_at = created_at + max_dispute_duration", "Note: expires_at >= voting_deadline, allowing resolution after voting ends" ]; "type": "i64"; }, { "name": "slashApplied"; "docs": [ "Whether worker slashing has been applied" ]; "type": "bool"; }, { "name": "initiatorSlashApplied"; "docs": [ "Whether the initiator outcome finalizer has run. Rejected/cancelled", "outcomes apply a penalty; approved/expired outcomes are bookkeeping-only." ]; "type": "bool"; }, { "name": "workerStakeAtDispute"; "docs": [ "Snapshot of worker's stake at dispute initiation (prevents stake withdrawal attacks)" ]; "type": "u64"; }, { "name": "initiatedByCreator"; "docs": [ "Whether the dispute was initiated by the task creator (fix #407)", "Used to apply stricter requirements and different expiration behavior for creator disputes" ]; "type": "bool"; }, { "name": "bump"; "docs": [ "Bump seed" ]; "type": "u8"; }, { "name": "defendant"; "docs": [ "The defendant worker's agent PDA (fix #827)", "Binds slashing target at dispute initiation to prevent slashing wrong worker", "on collaborative tasks with multiple claimants." ]; "type": "pubkey"; }, { "name": "rationaleHash"; "docs": [ "P6.4 (accountable rulings) — APPENDED fields. The resolver MUST attach a", "reasoned ruling: a 32-byte content hash of the off-chain rationale plus a", "bounded pointer to it, and the deciding resolver's pubkey. All three are", "zero/empty on a dispute that has not been resolved through `resolve_dispute`", "(e.g. an expired dispute), which is a valid \"no ruling recorded\" state.", "", "LAYOUT NOTE: these fields were appended while mainnet still ran the", "25-instruction canary (which exposed no dispute instructions), before the", "full surface created mainnet Dispute accounts. The append remains pinned for", "any historical devnet/full-surface prefix; deployment preflight inventories", "every live account size and blocks an active legacy layout. See", "`test_dispute_size_p64_append`." ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "rationaleUri"; "docs": [ "Bounded off-chain pointer to the ruling rationale (e.g. `agenc://ruling/...`).", "Empty string = no URI (the hash may still carry the rationale)." ]; "type": "string"; }, { "name": "resolvedBy"; "docs": [ "The wallet that decided this dispute: either the threshold-approved protocol", "authority or a threshold-seated assigned resolver who signed", "`resolve_dispute`. Default pubkey until resolved." ]; "type": "pubkey"; }, { "name": "peerWorkersTotal"; "docs": [ "Chunked settlement — APPENDED fields. A ruling on a collaborative task", "records the peer count and defers each peer's sweep to the", "permissionless `settle_dispute_claim` crank (one worker per", "transaction), so ruling transactions are O(1) in accounts. Zero on", "single-worker disputes and on every dispute predating the redesign." ]; "type": "u8"; }, { "name": "peerWorkersSettled"; "docs": [ "Peers settled so far; the dispute reaches its recorded terminal status", "when this equals `peer_workers_total`." ]; "type": "u8"; }, { "name": "pendingTerminalStatus"; "docs": [ "Raw `DisputeStatus` discriminant (Resolved/Expired) to apply when the", "final peer settles. Only meaningful while `status == SettlementPending`." ]; "type": "u8"; } ]; }; }, { "name": "disputeCancelled"; "docs": [ "Emitted when a dispute is cancelled by its initiator (fix #587)" ]; "type": { "kind": "struct"; "fields": [ { "name": "disputeId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "task"; "type": "pubkey"; }, { "name": "initiator"; "type": "pubkey"; }, { "name": "cancelledAt"; "type": "i64"; } ]; }; }, { "name": "disputeExpired"; "docs": [ "Emitted when a dispute expires without resolution", "Updated in fix #418 to include fair distribution details" ]; "type": { "kind": "struct"; "fields": [ { "name": "disputeId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "taskId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "refundAmount"; "type": "u64"; }, { "name": "creatorAmount"; "docs": [ "Amount refunded to creator (fix #418)" ]; "type": "u64"; }, { "name": "workerAmount"; "docs": [ "Amount paid to worker (fix #418)" ]; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "disputeInitiated"; "docs": [ "Emitted when a dispute is initiated" ]; "type": { "kind": "struct"; "fields": [ { "name": "disputeId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "taskId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "initiator"; "type": "pubkey"; }, { "name": "defendant"; "docs": [ "The defendant worker's agent PDA (fix #827)" ]; "type": "pubkey"; }, { "name": "resolutionType"; "type": "u8"; }, { "name": "votingDeadline"; "type": "i64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "disputePeerClaimSettled"; "docs": [ "Emitted when the permissionless chunked-settlement crank sweeps one", "deferred collaborative peer claim after a dispute ruling. When", "`peers_remaining` reaches zero the dispute has transitioned to its", "recorded terminal status." ]; "type": { "kind": "struct"; "fields": [ { "name": "disputeId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "taskId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "worker"; "type": "pubkey"; }, { "name": "peersRemaining"; "type": "u8"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "disputeResolved"; "docs": [ "Emitted when a dispute is resolved", "", "The `outcome` field reflects the authorized resolver's binary ruling (P6.3 — the", "per-case arbiter vote/quorum model is retired):", "- 0 = Rejected (the resolver passed `approve = false` — creator refunded)", "- 1 = Approved (the resolver passed `approve = true` — initiator's resolution upheld)", "", "`votes_for`/`votes_against` are DEPRECATED: they are no longer a vote tally. P6.3", "reuses them as a 1-bit ruling record ((1,0)=approved, (0,1)=rejected) so the", "permissionless slash finalizers can read the decision; the fields are emitted as-is." ]; "type": { "kind": "struct"; "fields": [ { "name": "disputeId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "resolutionType"; "type": "u8"; }, { "name": "outcome"; "docs": [ "Resolution outcome: 0=Rejected, 1=Approved (P6.3: no more NoVoteDefault path)." ]; "type": "u8"; }, { "name": "votesFor"; "docs": [ "DEPRECATED (P6.3): ruling bit, not a vote tally — 1 when approved else 0." ]; "type": "u64"; }, { "name": "votesAgainst"; "docs": [ "DEPRECATED (P6.3): ruling bit, not a vote tally — 1 when rejected else 0." ]; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; }, { "name": "resolvedBy"; "docs": [ "P6.4 accountable rulings: the wallet that decided this dispute (the protocol", "authority with M-of-N approval OR the threshold-seated assigned resolver)." ]; "type": "pubkey"; }, { "name": "rationaleHash"; "docs": [ "P6.4: 32-byte content hash of the off-chain ruling rationale." ]; "type": { "array": [ "u8", 32 ]; }; } ]; }; }, { "name": "disputeResolver"; "docs": [ "Roster entry authorizing a specific wallet to resolve disputes (the assignable", "arbiter model). The protocol authority proposes roster changes via", "`assign_dispute_resolver` / `revoke_dispute_resolver`, and the configured M-of-N", "owners approve each change. The mere existence of this PDA authorizes its `resolver`", "to call `resolve_dispute`; closing it (revoke) removes the authorization. A single", "threshold-seated assigned resolver decides a dispute directly — there is no per-case", "arbiter vote tally or quorum on this path (that is the whole point of the model).", "PDA seeds: [\"dispute_resolver\", resolver]" ]; "type": { "kind": "struct"; "fields": [ { "name": "resolver"; "docs": [ "The wallet authorized to resolve disputes." ]; "type": "pubkey"; }, { "name": "assignedBy"; "docs": [ "The protocol authority that assigned this resolver (audit trail)." ]; "type": "pubkey"; }, { "name": "assignedAt"; "docs": [ "Unix timestamp the assignment was created." ]; "type": "i64"; }, { "name": "bump"; "docs": [ "PDA bump." ]; "type": "u8"; }, { "name": "resolvedCount"; "docs": [ "Disputes this resolver has decided through `resolve_dispute`." ]; "type": "u64"; }, { "name": "overturnedCount"; "docs": [ "Rulings later vacated/overturned. Has no on-chain incrementer yet: the", "challenge-window mechanism that would bump it (`execute_resolution` settling a", "pending outcome unless vacated) is the design-doc-only P6.4 step (3),", "`docs/DISPUTE_CHALLENGE_WINDOW.md`, gated `[HUMAN: approve before build]`. The", "field is reserved now so adding that mechanism later needs NO layout change." ]; "type": "u64"; }, { "name": "lastResolvedAt"; "docs": [ "Unix timestamp this resolver last decided a dispute (0 = never)." ]; "type": "i64"; }, { "name": "reserved"; "docs": [ "Reserved for future metadata. MUST stay zeroed." ]; "type": { "array": [ "u8", 8 ]; }; } ]; }; }, { "name": "disputeResolverAssigned"; "docs": [ "Emitted after an authority-proposed resolver assignment receives configured M-of-N", "approval." ]; "type": { "kind": "struct"; "fields": [ { "name": "resolver"; "type": "pubkey"; }, { "name": "assignedBy"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "disputeResolverRevoked"; "docs": [ "Emitted after an authority-proposed resolver revocation receives configured M-of-N", "approval." ]; "type": { "kind": "struct"; "fields": [ { "name": "resolver"; "type": "pubkey"; }, { "name": "revokedBy"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "disputeStatus"; "docs": [ "Dispute status" ]; "repr": { "kind": "rust"; }; "type": { "kind": "enum"; "variants": [ { "name": "active"; }, { "name": "resolved"; }, { "name": "expired"; }, { "name": "cancelled"; }, { "name": "settlementPending"; } ]; }; }, { "name": "feedPost"; "docs": [ "Agent feed post (content hash stored on-chain, content on IPFS)", "PDA seeds: [\"post\", author_agent_pda, nonce]" ]; "type": { "kind": "struct"; "fields": [ { "name": "author"; "docs": [ "Author agent PDA" ]; "type": "pubkey"; }, { "name": "contentHash"; "docs": [ "IPFS content hash (CIDv1 or SHA-256 of content)" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "topic"; "docs": [ "Topic identifier (application-level grouping)" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "parentPost"; "docs": [ "Optional parent post PDA (for replies/threads)" ]; "type": { "option": "pubkey"; }; }, { "name": "nonce"; "docs": [ "Unique nonce (client-generated UUID)" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "upvoteCount"; "docs": [ "Number of upvotes" ]; "type": "u32"; }, { "name": "createdAt"; "docs": [ "Creation timestamp" ]; "type": "i64"; }, { "name": "bump"; "docs": [ "Bump seed" ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future use" ]; "type": { "array": [ "u8", 8 ]; }; } ]; }; }, { "name": "feedVote"; "docs": [ "Feed upvote record (one per voter per post, prevents double voting)", "PDA seeds: [\"upvote\", post_pda, voter_agent_pda]" ]; "type": { "kind": "struct"; "fields": [ { "name": "post"; "docs": [ "Post PDA that was upvoted" ]; "type": "pubkey"; }, { "name": "voter"; "docs": [ "Voter agent PDA" ]; "type": "pubkey"; }, { "name": "timestamp"; "docs": [ "Vote timestamp" ]; "type": "i64"; }, { "name": "bump"; "docs": [ "Bump seed" ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future use" ]; "type": { "array": [ "u8", 4 ]; }; } ]; }; }, { "name": "ghostShareDistributed"; "docs": [ "Emitted by each `distribute_ghost_share` crank: an unjudged contest", "(schema-1 Competitive) submission was paid its equal slice of the remaining", "escrow worker pool after the selection window elapsed (`ghost_at`). The paid", "submission + claim are closed to the worker in the same instruction, so a", "submission can be ghost-paid at most once." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "docs": [ "The contest task being ghost-split." ]; "type": "pubkey"; }, { "name": "workerAgent"; "docs": [ "The paid submitter's `AgentRegistration` PDA." ]; "type": "pubkey"; }, { "name": "lamports"; "docs": [ "Lamports paid to the worker for this slice (net of the fee legs)." ]; "type": "u64"; }, { "name": "remaining"; "docs": [ "Live submissions REMAINING after this slice (0 = the contest is fully", "distributed and the task is Completed)." ]; "type": "u8"; } ]; }; }, { "name": "goodPurchased"; "docs": [ "Emitted on every unit sold — the indexer-facing provenance signal.", "Carries the full fee split so the protocol cut is auditable per sale." ]; "type": { "kind": "struct"; "fields": [ { "name": "listing"; "type": "pubkey"; }, { "name": "buyer"; "docs": [ "Buyer WALLET (bare signer)." ]; "type": "pubkey"; }, { "name": "seller"; "docs": [ "Seller's agent PDA." ]; "type": "pubkey"; }, { "name": "serial"; "docs": [ "This unit's receipt serial (== `sold_count` before the increment)." ]; "type": "u64"; }, { "name": "metadataHash"; "docs": [ "Snapshot of the listing's metadata hash at sale time." ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "pricePaid"; "type": "u64"; }, { "name": "protocolFee"; "type": "u64"; }, { "name": "operatorFee"; "type": "u64"; }, { "name": "remainingSupply"; "docs": [ "Units still available after this sale (`total_supply - sold_count`)." ]; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "goodsListing"; "docs": [ "A rivalrous goods listing: an agent selling a FINITE, transferable good.", "The good itself is OFF-CHAIN (no NFT — e.g. a row in an app's item ledger,", "pinned by `metadata_hash` + fetchable at `metadata_uri`); on-chain this is", "the payment + provenance + protocol-cut rail. Unlike `SkillRegistration`", "(reproducible: unlimited copies), supply is finite: `sold_count` burns down", "against `total_supply` and each sold unit mints its own `SaleReceipt`.", "", "There is deliberately NO close instruction (skills have none either):", "closing + re-creating the same `good_id` would reset `sold_count` while the", "buyers' receipt PDAs survive at serials `0..N-1`, bricking the re-listed", "good on its first purchase (`init` collision) and aliasing old-run receipts", "into new-run provenance. Soft-delist via `is_active = false`. Any future", "close MUST first add a per-listing-lifetime `generation` discriminator to", "the receipt seeds.", "", "PDA seeds: [\"good\", seller_agent_pda, good_id]" ]; "type": { "kind": "struct"; "fields": [ { "name": "seller"; "docs": [ "Seller's agent PDA" ]; "type": "pubkey"; }, { "name": "sellerAuthority"; "docs": [ "Seller's WALLET authority, SNAPSHOTTED at create. Payouts and updates pin", "to THIS, not to `seller_agent.authority` at sale time — so a seller who", "deregisters this agent_id cannot have an attacker re-register the same", "agent_id (same PDA) and hijack the listing's future payouts / controls", "(batch-4 adversarial review AC-2)." ]; "type": "pubkey"; }, { "name": "goodId"; "docs": [ "Unique good identifier (unique per seller; PDA seed)" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "name"; "docs": [ "Display name" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "metadataHash"; "docs": [ "Content hash of the off-chain good metadata (also the moderation", "BLOCK-floor key — `require_content_not_blocked` gates create + purchase)" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "metadataUri"; "docs": [ "Where the metadata pinned by `metadata_hash` can be fetched (display:", "name/description/image). Mirrors `ServiceListing.spec_uri`." ]; "type": "string"; }, { "name": "price"; "docs": [ "Price per unit in lamports (SOL) or token smallest units" ]; "type": "u64"; }, { "name": "priceMint"; "docs": [ "Optional SPL token mint for price denomination (None = SOL)" ]; "type": { "option": "pubkey"; }; }, { "name": "tags"; "docs": [ "Tags for discovery (encoded by client)" ]; "type": { "array": [ "u8", 64 ]; }; }, { "name": "initialSupply"; "docs": [ "Supply at creation (immutable — lets indexers render \"initial N,", "restocked K times\" honestly)" ]; "type": "u64"; }, { "name": "totalSupply"; "docs": [ "Current total supply ceiling; grows ONLY via the additive-delta restock", "in `update_goods_listing` (never set absolutely — a set would permit a", "scarcity rug and a `sold_count` underflow)" ]; "type": "u64"; }, { "name": "soldCount"; "docs": [ "Units sold; monotonic. Also the next sale's receipt serial.", "Remaining supply = `total_supply - sold_count`." ]; "type": "u64"; }, { "name": "restockCount"; "docs": [ "Number of restocks applied (transparency counter)" ]; "type": "u16"; }, { "name": "operator"; "docs": [ "Operator payee (the embedding site/store); `Pubkey::default()` = no", "operator leg. Mirrors `ServiceListing.operator`." ]; "type": "pubkey"; }, { "name": "operatorFeeBps"; "docs": [ "Operator fee in basis points; must be 0 iff `operator` is default.", "Bounded per-leg by `MAX_OPERATOR_FEE_BPS` and at purchase by the", "combined-fee cap (`calculate_combined_fees`)." ]; "type": "u16"; }, { "name": "isActive"; "docs": [ "Whether the listing is purchasable (soft delist toggle)" ]; "type": "bool"; }, { "name": "createdAt"; "docs": [ "Creation timestamp" ]; "type": "i64"; }, { "name": "updatedAt"; "docs": [ "Last update timestamp" ]; "type": "i64"; }, { "name": "bump"; "docs": [ "Bump seed" ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future use (rating rollups, generation discriminator, …)" ]; "type": { "array": [ "u8", 16 ]; }; } ]; }; }, { "name": "goodsListingCreated"; "docs": [ "Emitted when an agent lists a finite good for sale." ]; "type": { "kind": "struct"; "fields": [ { "name": "listing"; "type": "pubkey"; }, { "name": "seller"; "docs": [ "Seller's agent PDA." ]; "type": "pubkey"; }, { "name": "goodId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "name"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "metadataHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "price"; "type": "u64"; }, { "name": "priceMint"; "type": { "option": "pubkey"; }; }, { "name": "totalSupply"; "type": "u64"; }, { "name": "operator"; "docs": [ "Operator payee (`Pubkey::default()` = no operator leg)." ]; "type": "pubkey"; }, { "name": "operatorFeeBps"; "type": "u16"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "goodsListingUpdated"; "docs": [ "Emitted when a seller updates their goods listing (price / active /", "metadata / operator terms / additive restock)." ]; "type": { "kind": "struct"; "fields": [ { "name": "listing"; "type": "pubkey"; }, { "name": "seller"; "docs": [ "Seller's agent PDA." ]; "type": "pubkey"; }, { "name": "price"; "type": "u64"; }, { "name": "isActive"; "type": "bool"; }, { "name": "totalSupply"; "type": "u64"; }, { "name": "soldCount"; "type": "u64"; }, { "name": "restockCount"; "type": "u16"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "governanceConfig"; "docs": [ "Governance configuration account", "PDA seeds: [\"governance\"]" ]; "type": { "kind": "struct"; "fields": [ { "name": "authority"; "docs": [ "Protocol authority (must match ProtocolConfig.authority at init time)" ]; "type": "pubkey"; }, { "name": "minProposalStake"; "docs": [ "Minimum stake required to create a proposal" ]; "type": "u64"; }, { "name": "votingPeriod"; "docs": [ "Voting period in seconds for new proposals" ]; "type": "i64"; }, { "name": "executionDelay"; "docs": [ "Execution delay after voting ends (timelock) in seconds" ]; "type": "i64"; }, { "name": "quorumBps"; "docs": [ "Quorum in basis points of the bounded three-voter vote-weight capacity.", "New proposals also enforce `3 * min_voter_stake` as an absolute floor." ]; "type": "u16"; }, { "name": "approvalThresholdBps"; "docs": [ "Approval threshold in basis points (e.g., 5000 = simple majority)" ]; "type": "u16"; }, { "name": "totalProposals"; "docs": [ "Total proposals created (monotonic counter)" ]; "type": "u64"; }, { "name": "bump"; "docs": [ "Bump seed" ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future use" ]; "type": { "array": [ "u8", 64 ]; }; } ]; }; }, { "name": "governanceInitialized"; "docs": [ "Emitted when governance configuration is initialized" ]; "type": { "kind": "struct"; "fields": [ { "name": "authority"; "type": "pubkey"; }, { "name": "votingPeriod"; "type": "i64"; }, { "name": "executionDelay"; "type": "i64"; }, { "name": "quorumBps"; "type": "u16"; }, { "name": "approvalThresholdBps"; "type": "u16"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "governanceVote"; "docs": [ "Governance vote record", "PDA seeds: [\"governance_vote\", proposal, voter]" ]; "type": { "kind": "struct"; "fields": [ { "name": "proposal"; "docs": [ "Proposal being voted on" ]; "type": "pubkey"; }, { "name": "voter"; "docs": [ "Voter (agent PDA)" ]; "type": "pubkey"; }, { "name": "approved"; "docs": [ "Vote (true = approve, false = reject)" ]; "type": "bool"; }, { "name": "votedAt"; "docs": [ "Vote timestamp" ]; "type": "i64"; }, { "name": "voteWeight"; "docs": [ "Voter's effective vote weight (reputation * stake, capped)" ]; "type": "u64"; }, { "name": "bump"; "docs": [ "Bump seed" ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future use" ]; "type": { "array": [ "u8", 8 ]; }; } ]; }; }, { "name": "governanceVoteCast"; "docs": [ "Emitted when a vote is cast on a governance proposal" ]; "type": { "kind": "struct"; "fields": [ { "name": "proposal"; "type": "pubkey"; }, { "name": "voter"; "type": "pubkey"; }, { "name": "approved"; "type": "bool"; }, { "name": "voteWeight"; "type": "u64"; }, { "name": "votesFor"; "type": "u64"; }, { "name": "votesAgainst"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "hireRating"; "docs": [ "One-shot buyer rating of a completed listing hire (P6.1).", "", "Init-once on PDA `[\"hire_rating\", task]` so exactly ONE rating can ever be", "recorded per hired task — re-rating the same task fails at account `init`", "(the PDA already exists), which is the on-chain double-rate guard. The account", "is keyed solely on `task`, so its existence is the dedupe key regardless of who", "holds the buyer/listing accounts at call time.", "", "Written by `rate_hire`. The rating is authored by the task's recorded buyer", "(`task.creator`, which `hire_from_listing` constrains to equal the funding", "authority), and only after the task reaches the terminal `Completed` state, so", "a buyer can only rate work they paid for and that actually finished.", "", "PDA seeds: [\"hire_rating\", task]" ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "docs": [ "The completed hired task this rating is for (also the dedupe seed)." ]; "type": "pubkey"; }, { "name": "listing"; "docs": [ "Source service listing whose aggregate was updated by this rating." ]; "type": "pubkey"; }, { "name": "buyer"; "docs": [ "The buyer (task creator) that authored the rating." ]; "type": "pubkey"; }, { "name": "score"; "docs": [ "Score in [1, 5]." ]; "type": "u8"; }, { "name": "reviewHash"; "docs": [ "Optional off-chain review content hash (`None` = no written review)." ]; "type": { "option": { "array": [ "u8", 32 ]; }; }; }, { "name": "reviewUri"; "docs": [ "Optional bounded pointer to the off-chain review (e.g. agenc://review/...).", "Empty string = no URI." ]; "type": "string"; }, { "name": "ratedAt"; "docs": [ "When the rating was recorded." ]; "type": "i64"; }, { "name": "bump"; "docs": [ "PDA bump." ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future rating metadata. MUST stay zeroed." ]; "type": { "array": [ "u8", 32 ]; }; } ]; }; }, { "name": "hireRecord"; "docs": [ "Links a one-shot hire to its source `ServiceListing`.", "", "Created by `hire_from_listing` and closed by `close_task`. Its purpose is to", "let `close_task` decrement the listing's `open_jobs` capacity counter WITHOUT a", "`Task` layout change (no migration): the on-chain task<->listing link lives", "here instead of on `Task`. It also snapshots the operator fee terms at hire", "time so the Batch 2 settlement split can read them without touching `Task`.", "PDA seeds: [\"hire\", task]" ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "docs": [ "The one-shot task minted by this hire." ]; "type": "pubkey"; }, { "name": "listing"; "docs": [ "Source service listing whose `open_jobs` is decremented when the task closes." ]; "type": "pubkey"; }, { "name": "operator"; "docs": [ "Operator payee snapshot for the Batch 2 fee split (`Pubkey::default()` = none)." ]; "type": "pubkey"; }, { "name": "operatorFeeBps"; "docs": [ "Operator fee in basis points, snapshotted at hire time." ]; "type": "u16"; }, { "name": "bump"; "docs": [ "PDA bump." ]; "type": "u8"; }, { "name": "designatedProvider"; "docs": [ "The provider agent designated by the listing at hire time. Only this", "registration may claim the resulting one-shot task. This carves the", "original 32-byte reserved region without changing the account layout." ]; "type": "pubkey"; }, { "name": "referrer"; "docs": [ "Referrer (embedder) payee snapshot for the four-way split", "(`Pubkey::default()` = none)." ]; "type": "pubkey"; }, { "name": "referrerFeeBps"; "docs": [ "Referrer fee in basis points, snapshotted at hire time." ]; "type": "u16"; } ]; }; }, { "name": "launchControlsUpdated"; "docs": [ "Emitted when multisig launch controls are updated." ]; "type": { "kind": "struct"; "fields": [ { "name": "authority"; "type": "pubkey"; }, { "name": "protocolPaused"; "type": "bool"; }, { "name": "disabledTaskTypeMask"; "type": "u8"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "listingModeration"; "docs": [ "On-chain moderation attestation for a service listing's pinned job-spec hash.", "", "The task-bound `TaskModeration` PDA (`[\"task_moderation\", task, hash]`) cannot", "exist before a task is minted, so it can't gate `hire_from_listing` at hire", "time. This listing/spec-keyed attestation does: the moderation authority attests", "the listing's `spec_hash` once, and the hire checks it. Recorded by", "`record_listing_moderation`. Revision-5 writes use moderator-keyed PDA seeds:", "[\"listing_moderation_v2\", service_listing, job_spec_hash, moderator]. Frozen", "pre-P1.2 [\"listing_moderation\", service_listing, job_spec_hash] records remain", "read-only compatibility inputs and are never written by revision 5." ]; "type": { "kind": "struct"; "fields": [ { "name": "listing"; "docs": [ "Service listing this decision applies to." ]; "type": "pubkey"; }, { "name": "providerAgent"; "docs": [ "Provider agent of the listing at decision time." ]; "type": "pubkey"; }, { "name": "jobSpecHash"; "docs": [ "Job-spec hash approved/held/rejected." ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "status"; "docs": [ "One of `task_moderation_status::*`." ]; "type": "u8"; }, { "name": "riskScore"; "docs": [ "Normalized 0-100 risk score." ]; "type": "u8"; }, { "name": "categoryMask"; "docs": [ "Bitmask of scanner categories." ]; "type": "u64"; }, { "name": "policyHash"; "docs": [ "Hash of the moderation policy/threshold version." ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "scannerHash"; "docs": [ "Hash of the scanner/model version bundle." ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "recordedAt"; "docs": [ "When the decision was recorded." ]; "type": "i64"; }, { "name": "expiresAt"; "docs": [ "Optional expiry timestamp. Zero means no expiry." ]; "type": "i64"; }, { "name": "moderator"; "docs": [ "Signer that recorded the decision (the moderation authority)." ]; "type": "pubkey"; }, { "name": "bump"; "docs": [ "PDA bump." ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future attestation metadata." ]; "type": { "array": [ "u8", 7 ]; }; } ]; }; }, { "name": "listingModerationRecorded"; "docs": [ "Emitted when the moderation authority records a decision for a listing/spec hash." ]; "type": { "kind": "struct"; "fields": [ { "name": "listing"; "type": "pubkey"; }, { "name": "providerAgent"; "type": "pubkey"; }, { "name": "jobSpecHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "status"; "type": "u8"; }, { "name": "riskScore"; "type": "u8"; }, { "name": "expiresAt"; "type": "i64"; }, { "name": "moderator"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "listingRated"; "docs": [ "Emitted when a buyer rates a completed listing hire (P6.1). Carries the new", "listing aggregate so indexers can recompute the average without re-reading the", "account. The provider-agent rating aggregate is deferred to P6.6's `AgentStats`." ]; "type": { "kind": "struct"; "fields": [ { "name": "listing"; "docs": [ "Service listing whose aggregate was updated." ]; "type": "pubkey"; }, { "name": "task"; "docs": [ "The hired task that was rated." ]; "type": "pubkey"; }, { "name": "providerAgent"; "docs": [ "Provider agent of the listing." ]; "type": "pubkey"; }, { "name": "buyer"; "docs": [ "The buyer (task creator) that authored the rating." ]; "type": "pubkey"; }, { "name": "score"; "docs": [ "Score in [1, 5]." ]; "type": "u8"; }, { "name": "newTotalRating"; "docs": [ "`listing.total_rating` after this rating." ]; "type": "u64"; }, { "name": "newRatingCount"; "docs": [ "`listing.rating_count` after this rating." ]; "type": "u32"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "listingState"; "docs": [ "Lifecycle state of a service listing." ]; "repr": { "kind": "rust"; }; "type": { "kind": "enum"; "variants": [ { "name": "active"; }, { "name": "paused"; }, { "name": "retired"; } ]; }; }, { "name": "matchingPolicy"; "docs": [ "Matching policy declared on a bid book." ]; "repr": { "kind": "rust"; }; "type": { "kind": "enum"; "variants": [ { "name": "bestPrice"; }, { "name": "bestEta"; }, { "name": "weightedScore"; } ]; }; }, { "name": "migrationCompleted"; "docs": [ "Emitted when protocol migration is completed" ]; "type": { "kind": "struct"; "fields": [ { "name": "fromVersion"; "type": "u8"; }, { "name": "toVersion"; "type": "u8"; }, { "name": "authority"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "moderationAttestor"; "docs": [ "Roster entry authorizing a third-party / per-integrator moderation attestor (P6.8).", "", "Mirrors `DisputeResolver`: the protocol authority designates wallets that may record", "moderation attestations (`record_task_moderation` / `record_listing_moderation`) in", "addition to the single global `ModerationConfig.moderation_authority`. The PDA's mere", "existence authorizes its `attestor`; revoking closes the PDA, after which that wallet", "can no longer attest (the closed account fails to load). Re-assigning an already-listed", "attestor fails at `init` (the PDA already exists), the desired \"already assigned\" signal.", "", "NOTE: this is the registry MECHANISM only. The neutrality question (whether an", "authority-curated roster is the right trust model, vs. a moderation-optional tier or", "per-integrator attestor choice) is a deliberate, separate [HUMAN] decision documented in", "`docs/MODERATION_NEUTRALITY.md`. This struct deliberately builds none of those options.", "", "PDA seeds: [\"moderation_attestor\", attestor]" ]; "type": { "kind": "struct"; "fields": [ { "name": "attestor"; "docs": [ "The wallet authorized to record moderation attestations." ]; "type": "pubkey"; }, { "name": "assignedBy"; "docs": [ "The wallet that created this entry (audit trail). Authority-deputized entries", "carry the moderation authority; self-registered entries (P1.2) carry the", "attestor itself — `assigned_by == attestor` distinguishes the two." ]; "type": "pubkey"; }, { "name": "assignedAt"; "docs": [ "Unix timestamp the assignment was created." ]; "type": "i64"; }, { "name": "bump"; "docs": [ "PDA bump." ]; "type": "u8"; }, { "name": "bondLamports"; "docs": [ "Registration bond deposited on the PDA (`REGISTRATION_BOND_LAMPORTS` at", "self-registration; 0 for authority-deputized/legacy entries). Refunded in full", "at `finalize_attestor_exit` — never confiscatable." ]; "type": "u64"; }, { "name": "registeredAt"; "docs": [ "When the attestor self-registered (0 for authority-deputized/legacy entries)." ]; "type": "i64"; }, { "name": "exitAt"; "docs": [ "Exit-window start set by `request_attestor_exit` (0 = not exiting). While", "non-zero the attestor is rejected at the record AND consumption gates; the", "window closes at request, not finalize." ]; "type": "i64"; }, { "name": "reserved"; "docs": [ "Reserved for future metadata. MUST stay zeroed." ]; "type": { "array": [ "u8", 8 ]; }; } ]; }; }, { "name": "moderationAttestorAssigned"; "docs": [ "Emitted when the protocol authority assigns a wallet to the moderation-attestor roster (P6.8)." ]; "type": { "kind": "struct"; "fields": [ { "name": "attestor"; "type": "pubkey"; }, { "name": "assignedBy"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "moderationAttestorRegistered"; "docs": [ "Emitted when a wallet self-registers onto the open moderation-attestor roster", "(P1.2). `bond_lamports` is the hardcoded registration bond deposited on the PDA." ]; "type": { "kind": "struct"; "fields": [ { "name": "attestor"; "type": "pubkey"; }, { "name": "bondLamports"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "moderationAttestorRevoked"; "docs": [ "Emitted when the protocol authority revokes a wallet from the moderation-attestor roster (P6.8)." ]; "type": { "kind": "struct"; "fields": [ { "name": "attestor"; "type": "pubkey"; }, { "name": "revokedBy"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "moderationBlock"; "docs": [ "P1.2 §5.2 — the BLOCK-only global takedown floor.", "", "Keyed by CONTENT HASH alone (not task/listing) so a takedown cannot be evaded by", "re-minting the same content under a fresh task/listing PDA. REQUIRED on all three", "consumption gates (`set_task_job_spec`, `hire_from_listing`,", "`hire_from_listing_humanless`), which derive this address in-handler from the same", "hash they are already gating — the caller cannot substitute a different account.", "An absent (system-owned, empty) account means \"no block\" — the floor is a", "fail-OPEN blacklist: key-death preserves publishing; nothing can be gated *in*", "through it. Written only by the multisig-gated `set_moderation_block` /", "`clear_moderation_block` (never the single-key moderation-authority path).", "", "PDA seeds: [\"moderation_block\", content_hash]" ]; "type": { "kind": "struct"; "fields": [ { "name": "contentHash"; "docs": [ "The blocked job-spec/listing-spec content hash (the PDA seed, stored for gPA)." ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "status"; "docs": [ "One of `moderation_block_status::*`." ]; "type": "u8"; }, { "name": "rationaleHash"; "docs": [ "Hash of the written takedown rationale (REQUIRED — the `resolve_dispute`", "precedent; bounds the discretionary power with an auditable record)." ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "rationaleUri"; "docs": [ "URI of the rationale document." ]; "type": "string"; }, { "name": "setAt"; "docs": [ "When the block was first set." ]; "type": "i64"; }, { "name": "updatedAt"; "docs": [ "Last set/clear transition." ]; "type": "i64"; }, { "name": "updatedBy"; "docs": [ "The fee-paying signer of the last transition (the multisig approval itself is", "checked via `require_multisig_threshold` over remaining accounts)." ]; "type": "pubkey"; }, { "name": "bump"; "docs": [ "PDA bump." ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future takedown metadata. MUST stay zeroed." ]; "type": { "array": [ "u8", 16 ]; }; } ]; }; }, { "name": "moderationBlockCleared"; "docs": [ "Emitted when the multisig clears a takedown block (P1.2 §5.2). The account stays", "open as the audit trail; the hash is consumable again at the gates." ]; "type": { "kind": "struct"; "fields": [ { "name": "contentHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "updatedBy"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "moderationBlockSet"; "docs": [ "Emitted when the multisig sets (or re-sets) the BLOCK-only takedown floor for a", "content hash (P1.2 §5.2). The rationale is REQUIRED — the discretionary takedown", "lever is bounded by an auditable, content-addressed record." ]; "type": { "kind": "struct"; "fields": [ { "name": "contentHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "rationaleHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "rationaleUri"; "type": "string"; }, { "name": "updatedBy"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "moderationConfig"; "docs": [ "Global task moderation configuration.", "PDA seeds: [\"moderation_config\"]" ]; "type": { "kind": "struct"; "fields": [ { "name": "authority"; "docs": [ "Protocol authority that configured this moderation gate." ]; "type": "pubkey"; }, { "name": "moderationAuthority"; "docs": [ "Signer allowed to record moderation attestations." ]; "type": "pubkey"; }, { "name": "enabled"; "docs": [ "Whether task job-spec publication requires moderation attestations." ]; "type": "bool"; }, { "name": "createdAt"; "docs": [ "Creation timestamp." ]; "type": "i64"; }, { "name": "updatedAt"; "docs": [ "Last update timestamp. ALSO the P1.3 liveness heartbeat: bumped by", "`configure_task_moderation` and `moderation_heartbeat`; when it goes stale", "past the liveness window the consumption gates relax to moderation-optional", "(`docs/MODERATION_LIVENESS.md`)." ]; "type": "i64"; }, { "name": "bump"; "docs": [ "PDA bump." ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved bytes. `[0..4]` carry the P1.3 liveness window (LE `u32` seconds,", "0 = default 90 days) via the accessors below — the value-only,", "size-identical reserved-carve precedent (ModerationAttestor P1.2). `[4..6]`", "MUST stay zeroed." ]; "type": { "array": [ "u8", 6 ]; }; } ]; }; }, { "name": "moderationHeartbeatRecorded"; "docs": [ "Emitted on every `moderation_heartbeat` (P1.3 liveness deadman). Surfaces and", "indexers can watch this to display gate-armed status; silence past the window", "relaxes the consumption gates (docs/MODERATION_LIVENESS.md)." ]; "type": { "kind": "struct"; "fields": [ { "name": "by"; "docs": [ "The signer that heartbeated (config authority or moderation authority)." ]; "type": "pubkey"; }, { "name": "windowSecs"; "docs": [ "The EFFECTIVE liveness window after this call (seconds; the default is", "substituted when the stored value is 0)." ]; "type": "u32"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "multisigUpdated"; "docs": [ "Emitted when multisig signer set or threshold is updated." ]; "type": { "kind": "struct"; "fields": [ { "name": "oldThreshold"; "type": "u8"; }, { "name": "newThreshold"; "type": "u8"; }, { "name": "oldOwnerCount"; "type": "u8"; }, { "name": "newOwnerCount"; "type": "u8"; }, { "name": "updatedBy"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "operatorFeePaid"; "docs": [ "Emitted when an operator (embedding-site) fee leg is paid out of a settlement", "(spec §4 3-way split). Only emitted when the operator leg is non-zero." ]; "type": { "kind": "struct"; "fields": [ { "name": "taskId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "operator"; "type": "pubkey"; }, { "name": "amount"; "type": "u64"; }, { "name": "operatorFeeBps"; "type": "u16"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "orphanTaskChildReclaimed"; "docs": [ "Emitted when the recovery rail returns rent from a historical auxiliary", "child whose parent Task was destroyed by an older close_task implementation." ]; "type": { "kind": "struct"; "fields": [ { "name": "child"; "type": "pubkey"; }, { "name": "task"; "type": "pubkey"; }, { "name": "recipient"; "type": "pubkey"; }, { "name": "cranker"; "type": "pubkey"; }, { "name": "childKind"; "type": "u8"; }, { "name": "reclaimedLamports"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "postCreated"; "docs": [ "Emitted when an agent creates a feed post" ]; "type": { "kind": "struct"; "fields": [ { "name": "post"; "type": "pubkey"; }, { "name": "author"; "type": "pubkey"; }, { "name": "contentHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "topic"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "parentPost"; "type": { "option": "pubkey"; }; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "postUpvoted"; "docs": [ "Emitted when a feed post is upvoted" ]; "type": { "kind": "struct"; "fields": [ { "name": "post"; "type": "pubkey"; }, { "name": "voter"; "type": "pubkey"; }, { "name": "newUpvoteCount"; "type": "u32"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "proposal"; "docs": [ "Governance proposal account", "PDA seeds: [\"proposal\", proposer, nonce]" ]; "type": { "kind": "struct"; "fields": [ { "name": "proposer"; "docs": [ "Proposer's agent PDA" ]; "type": "pubkey"; }, { "name": "proposerAuthority"; "docs": [ "Proposer's authority wallet" ]; "type": "pubkey"; }, { "name": "nonce"; "docs": [ "Monotonic nonce per proposer (allows multiple proposals)" ]; "type": "u64"; }, { "name": "proposalType"; "docs": [ "Proposal type" ]; "type": { "defined": { "name": "proposalType"; }; }; }, { "name": "titleHash"; "docs": [ "Title hash (SHA256 of title string)" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "descriptionHash"; "docs": [ "Description hash (SHA256 of description/URI)" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "payload"; "docs": [ "Type-specific payload (64 bytes)", "FeeChange: new fee bps as u16 LE in bytes [0..2], rest zero", "TreasurySpend: recipient Pubkey [0..32] + amount u64 LE [32..40], rest zero", "ProtocolUpgrade: reserved for future parameter batch changes" ]; "type": { "array": [ "u8", 64 ]; }; }, { "name": "status"; "docs": [ "Current status" ]; "type": { "defined": { "name": "proposalStatus"; }; }; }, { "name": "createdAt"; "docs": [ "Creation timestamp" ]; "type": "i64"; }, { "name": "votingDeadline"; "docs": [ "Voting deadline (no new votes accepted after this)" ]; "type": "i64"; }, { "name": "executionAfter"; "docs": [ "Earliest timestamp at which the proposal can be executed (timelock)" ]; "type": "i64"; }, { "name": "executedAt"; "docs": [ "Execution timestamp (0 if not executed)" ]; "type": "i64"; }, { "name": "votesFor"; "docs": [ "Total stake-weighted votes for approval" ]; "type": "u64"; }, { "name": "votesAgainst"; "docs": [ "Total stake-weighted votes against" ]; "type": "u64"; }, { "name": "totalVoters"; "docs": [ "Number of individual voters" ]; "type": "u16"; }, { "name": "quorum"; "docs": [ "Required quorum (minimum total stake-weighted votes)" ]; "type": "u64"; }, { "name": "bump"; "docs": [ "Bump seed" ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future use" ]; "type": { "array": [ "u8", 64 ]; }; } ]; }; }, { "name": "proposalCancelled"; "docs": [ "Emitted when a governance proposal is cancelled" ]; "type": { "kind": "struct"; "fields": [ { "name": "proposal"; "type": "pubkey"; }, { "name": "proposer"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "proposalCreated"; "docs": [ "Emitted when a governance proposal is created" ]; "type": { "kind": "struct"; "fields": [ { "name": "proposer"; "type": "pubkey"; }, { "name": "proposalType"; "type": "u8"; }, { "name": "titleHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "votingDeadline"; "type": "i64"; }, { "name": "quorum"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "proposalExecuted"; "docs": [ "Emitted when a governance proposal is executed" ]; "type": { "kind": "struct"; "fields": [ { "name": "proposal"; "type": "pubkey"; }, { "name": "proposalType"; "type": "u8"; }, { "name": "votesFor"; "type": "u64"; }, { "name": "votesAgainst"; "type": "u64"; }, { "name": "totalVoters"; "type": "u16"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "proposalStatus"; "docs": [ "Governance proposal status" ]; "repr": { "kind": "rust"; }; "type": { "kind": "enum"; "variants": [ { "name": "active"; }, { "name": "executed"; }, { "name": "defeated"; }, { "name": "cancelled"; } ]; }; }, { "name": "proposalType"; "docs": [ "Governance proposal type" ]; "repr": { "kind": "rust"; }; "type": { "kind": "enum"; "variants": [ { "name": "protocolUpgrade"; }, { "name": "feeChange"; }, { "name": "treasurySpend"; }, { "name": "rateLimitChange"; } ]; }; }, { "name": "protocolConfig"; "docs": [ "Protocol configuration account", "PDA seeds: [\"protocol\"]" ]; "type": { "kind": "struct"; "fields": [ { "name": "authority"; "docs": [ "Protocol authority", "Note: Cannot be updated after initialization." ]; "type": "pubkey"; }, { "name": "treasury"; "docs": [ "Treasury address for protocol fees", "Can be updated via multisig-gated `update_treasury`." ]; "type": "pubkey"; }, { "name": "disputeThreshold"; "docs": [ "Approval-percentage threshold used to interpret persisted dispute outcomes.", "Current resolver rulings encode approved/rejected as 100%/0%; historical", "disputes may contain vote totals from the retired arbiter model." ]; "type": "u8"; }, { "name": "protocolFeeBps"; "docs": [ "Protocol fee in basis points (1/100th of a percent)" ]; "type": "u16"; }, { "name": "minArbiterStake"; "docs": [ "Governance vote-weight basis retained under its historical field name.", "Agent registration uses `min_agent_stake`." ]; "type": "u64"; }, { "name": "minAgentStake"; "docs": [ "Minimum stake required to register as agent" ]; "type": "u64"; }, { "name": "maxClaimDuration"; "docs": [ "Max duration (seconds) a claim can stay active without completion" ]; "type": "i64"; }, { "name": "maxDisputeDuration"; "docs": [ "Max duration (seconds) a dispute can remain active" ]; "type": "i64"; }, { "name": "totalAgents"; "docs": [ "Total registered agents" ]; "type": "u64"; }, { "name": "totalTasks"; "docs": [ "Total tasks created" ]; "type": "u64"; }, { "name": "completedTasks"; "docs": [ "Total tasks completed (saturating telemetry)" ]; "type": "u64"; }, { "name": "totalValueDistributed"; "docs": [ "Total SOL value distributed, in lamports (excludes SPL-token base units;", "saturating telemetry)" ]; "type": "u64"; }, { "name": "bump"; "docs": [ "Bump seed for PDA" ]; "type": "u8"; }, { "name": "multisigThreshold"; "docs": [ "Multisig threshold" ]; "type": "u8"; }, { "name": "multisigOwnersLen"; "docs": [ "Length of configured multisig owners" ]; "type": "u8"; }, { "name": "taskCreationCooldown"; "docs": [ "Minimum cooldown between task creations per authority wallet (seconds, 0 = disabled)" ]; "type": "i64"; }, { "name": "maxTasksPer24h"; "docs": [ "Maximum tasks an authority wallet can create per 24h window (0 = unlimited)" ]; "type": "u8"; }, { "name": "disputeInitiationCooldown"; "docs": [ "Minimum cooldown between dispute initiations per authority wallet (seconds, 0 = disabled)" ]; "type": "i64"; }, { "name": "maxDisputesPer24h"; "docs": [ "Maximum disputes an authority wallet can initiate per 24h window (0 = unlimited)" ]; "type": "u8"; }, { "name": "minStakeForDispute"; "docs": [ "Minimum stake required to initiate a dispute (griefing resistance)" ]; "type": "u64"; }, { "name": "slashPercentage"; "docs": [ "Percentage of stake slashed on losing dispute (0-100)" ]; "type": "u8"; }, { "name": "stateUpdateCooldown"; "docs": [ "Cooldown between state updates per agent (seconds, 0 = disabled) (fix #415)" ]; "type": "i64"; }, { "name": "votingPeriod"; "docs": [ "Initial resolver-action window for disputes in seconds (default: 24 hours).", "No dispute voting occurs on the current assigned-resolver path." ]; "type": "i64"; }, { "name": "protocolVersion"; "docs": [ "Current protocol version (for upgrades)" ]; "type": "u8"; }, { "name": "minSupportedVersion"; "docs": [ "Minimum supported version for backward compatibility" ]; "type": "u8"; }, { "name": "protocolPaused"; "docs": [ "Emergency global pause. When true, version-gated mutable protocol paths fail closed." ]; "type": "bool"; }, { "name": "disabledTaskTypeMask"; "docs": [ "Bitmask of disabled task types. Bit index matches `TaskType` repr." ]; "type": "u8"; }, { "name": "multisigOwners"; "docs": [ "Multisig owners for admin-gated protocol changes.", "", "Updated via multisig-gated `update_multisig` with strict validation:", "- owner keys must be unique and non-default", "- threshold must satisfy 0 < threshold < owners_len", "- update tx must include threshold signers from the new owner set", "", "Only the first `multisig_owners_len` entries are valid; remaining slots", "are always `Pubkey::default()`." ]; "type": { "array": [ "pubkey", 5 ]; }; }, { "name": "surfaceRevision"; "docs": [ "Deployed instruction-surface revision stamp.", "", "APPEND-ONLY: this is the only field after `multisig_owners`, so the 349-byte", "historical pre-P6.5 prefix stays valid. A legacy account is migrated up to", "the new size by `migrate_protocol` (realloc +", "zero-init), which lands this at `0` = \"surface not yet stamped\". An operator", "then establishes the current revision through the atomic", "`stamp_release_surface` release boundary. `update_launch_controls` may", "preserve the current value or select an older conservative revision, but", "cannot establish the current production revision. In the full production", "build, an older/unstamped revision must remain paused; unpausing requires", "that CURRENT was already established by the atomic stamp.", "", "Semantics:", "- `0` → surface unstamped (treat as the conservative canary surface;", "clients should fall back to capability probing).", "- `>0` → the operator-declared surface revision; the SDK maps it to a typed", "capability set (`SURFACE_REVISION_FULL` = full-surface stamp;", "historical Phase-9 count was 84 ix; live surface is later batches)." ]; "type": "u16"; } ]; }; }, { "name": "protocolConfigMigrated"; "docs": [ "Emitted when the ProtocolConfig account is reallocated to the P6.5", "surface-versioning layout (349B -> 351B, zero-init `surface_revision`)." ]; "type": { "kind": "struct"; "fields": [ { "name": "config"; "type": "pubkey"; }, { "name": "fromSize"; "type": "u32"; }, { "name": "toSize"; "type": "u32"; }, { "name": "authority"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "protocolFeeUpdated"; "docs": [ "Emitted when protocol fee is updated" ]; "type": { "kind": "struct"; "fields": [ { "name": "oldFeeBps"; "type": "u16"; }, { "name": "newFeeBps"; "type": "u16"; }, { "name": "updatedBy"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "protocolInitialized"; "docs": [ "Emitted when protocol is initialized" ]; "type": { "kind": "struct"; "fields": [ { "name": "authority"; "type": "pubkey"; }, { "name": "treasury"; "type": "pubkey"; }, { "name": "disputeThreshold"; "type": "u8"; }, { "name": "protocolFeeBps"; "type": "u16"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "protocolVersionUpdated"; "docs": [ "Emitted when protocol version is updated" ]; "type": { "kind": "struct"; "fields": [ { "name": "oldVersion"; "type": "u8"; }, { "name": "newVersion"; "type": "u8"; }, { "name": "minSupportedVersion"; "type": "u8"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "purchaseRecord"; "docs": [ "Purchase record (one per buyer per skill, prevents double purchase)", "PDA seeds: [\"skill_purchase\", skill_pda, buyer_agent_pda]" ]; "type": { "kind": "struct"; "fields": [ { "name": "skill"; "docs": [ "Skill purchased" ]; "type": "pubkey"; }, { "name": "buyer"; "docs": [ "Buyer's agent PDA" ]; "type": "pubkey"; }, { "name": "pricePaid"; "docs": [ "Price paid at time of purchase" ]; "type": "u64"; }, { "name": "timestamp"; "docs": [ "Purchase timestamp" ]; "type": "i64"; }, { "name": "bump"; "docs": [ "Bump seed" ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Purchase metadata carved from the existing reserved tail:", "`_reserved[0]` snapshots the purchased `SkillRegistration::version`;", "bytes `[1..4]` remain reserved and must stay zero." ]; "type": { "array": [ "u8", 4 ]; }; } ]; }; }, { "name": "rateLimitHit"; "docs": [ "Emitted when a rate limit is hit" ]; "type": { "kind": "struct"; "fields": [ { "name": "agentId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "actionType"; "type": "u8"; }, { "name": "limitType"; "type": "u8"; }, { "name": "currentCount"; "type": "u8"; }, { "name": "maxCount"; "type": "u8"; }, { "name": "cooldownRemaining"; "type": "i64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "rateLimitsUpdated"; "docs": [ "Emitted when rate limit configuration is updated" ]; "type": { "kind": "struct"; "fields": [ { "name": "taskCreationCooldown"; "type": "i64"; }, { "name": "maxTasksPer24h"; "type": "u8"; }, { "name": "disputeInitiationCooldown"; "type": "i64"; }, { "name": "maxDisputesPer24h"; "type": "u8"; }, { "name": "minStakeForDispute"; "type": "u64"; }, { "name": "updatedBy"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "referrerFeePaid"; "docs": [ "Emitted when a referrer (demand-side embedder) fee leg is paid out of a", "settlement (spec §4 4-way split, P6.2). Only emitted when the referrer leg is", "non-zero." ]; "type": { "kind": "struct"; "fields": [ { "name": "taskId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "referrer"; "type": "pubkey"; }, { "name": "amount"; "type": "u64"; }, { "name": "referrerFeeBps"; "type": "u16"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "rejectFrozenExpired"; "docs": [ "Emitted when a frozen task's review window expires and it defaults to the worker." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "workerPayout"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "rejectFrozenResolved"; "docs": [ "Emitted when a frozen task's review is resolved (Completed or Cancelled)." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "outcome"; "type": "u8"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "releaseSurfaceStamped"; "docs": [ "Emitted only after the atomic release-boundary instruction has locked and", "verified the reviewed executable metadata, IDL, singleton policy, and", "upgrade-custody images in the same transaction as the surface stamp." ]; "type": { "kind": "struct"; "fields": [ { "name": "authority"; "type": "pubkey"; }, { "name": "surfaceRevision"; "type": "u16"; }, { "name": "disabledTaskTypeMask"; "type": "u8"; }, { "name": "programDataSlot"; "type": "u64"; }, { "name": "protocolConfigHash"; "docs": [ "Full pre-stamp ProtocolConfig account-data hash." ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "bidConfigHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "moderationConfigHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "idlAccountHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "custodyAccountHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "reputationChanged"; "docs": [ "Emitted when an agent's reputation changes" ]; "type": { "kind": "struct"; "fields": [ { "name": "agentId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "oldReputation"; "type": "u16"; }, { "name": "newReputation"; "type": "u16"; }, { "name": "reason"; "docs": [ "Reason: 0=completion, 1=dispute_slash, 2=decay" ]; "type": "u8"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "reputationDelegation"; "docs": [ "Reputation delegation — agent delegates reputation points to a trusted peer.", "One delegation per (delegator, delegatee) pair. Revoke-and-redelegate pattern.", "PDA seeds: [\"reputation_delegation\", delegator_pda, delegatee_pda]" ]; "type": { "kind": "struct"; "fields": [ { "name": "delegator"; "docs": [ "Delegator agent PDA" ]; "type": "pubkey"; }, { "name": "delegatee"; "docs": [ "Delegatee agent PDA" ]; "type": "pubkey"; }, { "name": "amount"; "docs": [ "Reputation points delegated (0-10000 scale)" ]; "type": "u16"; }, { "name": "expiresAt"; "docs": [ "Expiration timestamp (0 = no expiry)" ]; "type": "i64"; }, { "name": "createdAt"; "docs": [ "Delegation creation timestamp" ]; "type": "i64"; }, { "name": "bump"; "docs": [ "Bump seed for PDA" ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future use" ]; "type": { "array": [ "u8", 8 ]; }; } ]; }; }, { "name": "reputationDelegationRetired"; "docs": [ "Emitted when revision 5 permanently retires a legacy delegation. Reputation", "is never restored because doing so after a slash would recreate the retired", "shelter primitive. Rent goes to the recorded authority only for an", "identity-continuous registration; otherwise it goes to the canonical treasury." ]; "type": { "kind": "struct"; "fields": [ { "name": "delegation"; "type": "pubkey"; }, { "name": "delegator"; "type": "pubkey"; }, { "name": "delegatee"; "type": "pubkey"; }, { "name": "discardedReputation"; "type": "u16"; }, { "name": "recoveredRent"; "type": "u64"; }, { "name": "rentRecipient"; "type": "pubkey"; }, { "name": "identityContinuous"; "type": "bool"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "reputationDelegationRevoked"; "docs": [ "Emitted when a reputation delegation is revoked" ]; "type": { "kind": "struct"; "fields": [ { "name": "delegator"; "type": "pubkey"; }, { "name": "delegatee"; "type": "pubkey"; }, { "name": "amount"; "type": "u16"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "reputationStake"; "docs": [ "Reputation stake account — agent stakes SOL on their reputation.", "SOL is stored as excess lamports on the PDA (same pattern as agent registration stake).", "Account is never closed to preserve slash_count history (prevents reset exploit).", "PDA seeds: [\"reputation_stake\", agent_pda]" ]; "type": { "kind": "struct"; "fields": [ { "name": "agent"; "docs": [ "Agent PDA this stake belongs to" ]; "type": "pubkey"; }, { "name": "stakedAmount"; "docs": [ "SOL lamports currently staked" ]; "type": "u64"; }, { "name": "lockedUntil"; "docs": [ "Timestamp before which withdrawals are blocked" ]; "type": "i64"; }, { "name": "slashCount"; "docs": [ "Historical count of slashes applied" ]; "type": "u8"; }, { "name": "createdAt"; "docs": [ "Account creation timestamp" ]; "type": "i64"; }, { "name": "bump"; "docs": [ "Bump seed for PDA" ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future use" ]; "type": { "array": [ "u8", 8 ]; }; } ]; }; }, { "name": "reputationStakeWithdrawn"; "docs": [ "Emitted when an agent withdraws staked SOL" ]; "type": { "kind": "struct"; "fields": [ { "name": "agent"; "type": "pubkey"; }, { "name": "amount"; "type": "u64"; }, { "name": "remainingStaked"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "reputationStaked"; "docs": [ "Emitted when an agent stakes SOL on their reputation" ]; "type": { "kind": "struct"; "fields": [ { "name": "agent"; "type": "pubkey"; }, { "name": "amount"; "type": "u64"; }, { "name": "totalStaked"; "type": "u64"; }, { "name": "lockedUntil"; "type": "i64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "resolutionType"; "docs": [ "Dispute resolution type" ]; "repr": { "kind": "rust"; }; "type": { "kind": "enum"; "variants": [ { "name": "refund"; }, { "name": "complete"; }, { "name": "split"; } ]; }; }, { "name": "rewardDistributed"; "docs": [ "Emitted for reward distribution" ]; "type": { "kind": "struct"; "fields": [ { "name": "taskId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "recipient"; "type": "pubkey"; }, { "name": "amount"; "type": "u64"; }, { "name": "protocolFee"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "saleReceipt"; "docs": [ "Per-UNIT sale receipt — the provenance witness for one sold good.", "Unlike the skill `PurchaseRecord` (seeded per-buyer: one purchase ever),", "the receipt is seeded on the sale SERIAL so a buyer can buy many units and", "every unit carries its own on-chain record. `metadata_hash` is SNAPSHOTTED", "at sale time so the receipt remains self-contained provenance even if the", "listing's metadata is later updated.", "", "PDA seeds: [\"goods_sale\", listing_pda, serial.to_le_bytes()]" ]; "type": { "kind": "struct"; "fields": [ { "name": "listing"; "docs": [ "The goods listing sold from" ]; "type": "pubkey"; }, { "name": "buyer"; "docs": [ "Buyer WALLET (bare signer — buyers need no agent registration)" ]; "type": "pubkey"; }, { "name": "serial"; "docs": [ "This unit's index in [0, total_supply) at sale time" ]; "type": "u64"; }, { "name": "metadataHash"; "docs": [ "Snapshot of the listing's `metadata_hash` at the moment of sale" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "pricePaid"; "docs": [ "Price paid (lamports or token smallest units)" ]; "type": "u64"; }, { "name": "protocolFee"; "docs": [ "Protocol fee taken (provenance of the cut)" ]; "type": "u64"; }, { "name": "operatorFee"; "docs": [ "Operator fee taken (0 when the listing has no operator leg)" ]; "type": "u64"; }, { "name": "timestamp"; "docs": [ "Sale timestamp" ]; "type": "i64"; }, { "name": "bump"; "docs": [ "Bump seed" ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future use" ]; "type": { "array": [ "u8", 8 ]; }; } ]; }; }, { "name": "serviceListing"; "docs": [ "A standing, embeddable service listing: a provider agent advertising a fixed-price", "service that buyers (humans or other agents) can hire on demand. The listing is", "never escrow-bearing or task-bearing itself — each hire mints an independent", "one-shot `Task` (see `hire_from_listing`).", "PDA seeds: [\"service_listing\", provider_agent_pda, listing_id]" ]; "type": { "kind": "struct"; "fields": [ { "name": "providerAgent"; "docs": [ "Provider's agent PDA (the maker / worker that fulfils hires)" ]; "type": "pubkey"; }, { "name": "authority"; "docs": [ "Provider's signing authority (owns the listing)" ]; "type": "pubkey"; }, { "name": "listingId"; "docs": [ "Unique listing identifier" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "name"; "docs": [ "Display name" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "category"; "docs": [ "Category (client-encoded)" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "tags"; "docs": [ "Tags for discovery (client-encoded)" ]; "type": { "array": [ "u8", 64 ]; }; }, { "name": "specHash"; "docs": [ "Content-addressed job-spec hash (sha256 of the spec)" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "specUri"; "docs": [ "Job-spec URI (e.g. agenc://job-spec/sha256/)" ]; "type": "string"; }, { "name": "price"; "docs": [ "Price in lamports (SOL) or token smallest units" ]; "type": "u64"; }, { "name": "priceMint"; "docs": [ "Optional SPL token mint for price denomination (None = SOL)" ]; "type": { "option": "pubkey"; }; }, { "name": "requiredCapabilities"; "docs": [ "Capability bitmask a worker must satisfy" ]; "type": "u64"; }, { "name": "defaultDeadlineSecs"; "docs": [ "Default task deadline in seconds from hire (0 = protocol default)" ]; "type": "i64"; }, { "name": "operator"; "docs": [ "Operator payee (the embedding site); `Pubkey::default()` = no operator.", "Carried here in Batch 1; the on-chain 3-way settlement split lands in", "Batch 2 with the `Task` layout change + migration." ]; "type": "pubkey"; }, { "name": "operatorFeeBps"; "docs": [ "Operator fee in basis points (applied at settlement once Batch 2 ships)" ]; "type": "u16"; }, { "name": "state"; "docs": [ "Lifecycle state" ]; "type": { "defined": { "name": "listingState"; }; }; }, { "name": "maxOpenJobs"; "docs": [ "Max concurrently-open hires (0 = unlimited)" ]; "type": "u16"; }, { "name": "openJobs"; "docs": [ "Open-hire count: incremented by `hire_from_listing`, decremented only by", "`close_task` (NOT at task termination via cancel/complete). It therefore", "counts hires that have been created but not yet closed, which is", "deliberately conservative: the count can lag high (blocking further hires)", "but never lags low, so it can never over-admit past `max_open_jobs`. A", "provider can always raise/zero `max_open_jobs` to relieve a lagging count.", "(Batch 2's Task migration will let cancel/complete free the slot directly.)" ]; "type": "u16"; }, { "name": "totalHires"; "docs": [ "Lifetime hire count" ]; "type": "u64"; }, { "name": "totalRating"; "docs": [ "Sum of reputation-weighted ratings" ]; "type": "u64"; }, { "name": "ratingCount"; "docs": [ "Number of ratings received" ]; "type": "u32"; }, { "name": "version"; "docs": [ "Version, bumped on every update (compare-and-swap target for hire)" ]; "type": "u64"; }, { "name": "createdAt"; "docs": [ "Creation timestamp" ]; "type": "i64"; }, { "name": "updatedAt"; "docs": [ "Last update timestamp" ]; "type": "i64"; }, { "name": "bump"; "docs": [ "Bump seed" ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future growth (SLA refs, escrow refs, etc.)" ]; "type": { "array": [ "u8", 32 ]; }; } ]; }; }, { "name": "serviceListingCreated"; "docs": [ "Emitted when a maker publishes a standing service listing" ]; "type": { "kind": "struct"; "fields": [ { "name": "listing"; "type": "pubkey"; }, { "name": "providerAgent"; "type": "pubkey"; }, { "name": "authority"; "type": "pubkey"; }, { "name": "listingId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "price"; "type": "u64"; }, { "name": "priceMint"; "type": { "option": "pubkey"; }; }, { "name": "operator"; "type": "pubkey"; }, { "name": "operatorFeeBps"; "type": "u16"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "serviceListingHired"; "docs": [ "Emitted when a buyer hires a provider from a standing service listing,", "minting a one-shot task. Links the source listing to the new task." ]; "type": { "kind": "struct"; "fields": [ { "name": "listing"; "type": "pubkey"; }, { "name": "task"; "type": "pubkey"; }, { "name": "providerAgent"; "type": "pubkey"; }, { "name": "buyer"; "type": "pubkey"; }, { "name": "price"; "type": "u64"; }, { "name": "totalHires"; "type": "u64"; }, { "name": "openJobs"; "docs": [ "Concurrent open hires after this one (capacity counter)." ]; "type": "u16"; }, { "name": "moderationAttestor"; "docs": [ "WP-A1 roster telemetry: the registered `ModerationAttestor` wallet whose", "listing attestation unlocked this hire, or `None` when the listing-moderation", "was authored by the global `ModerationConfig.moderation_authority` (or when", "moderation is disabled)." ]; "type": { "option": "pubkey"; }; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "serviceListingStateChanged"; "docs": [ "Emitted when a service listing's lifecycle state changes (pause/reactivate/retire)" ]; "type": { "kind": "struct"; "fields": [ { "name": "listing"; "type": "pubkey"; }, { "name": "authority"; "type": "pubkey"; }, { "name": "newState"; "type": "u8"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "serviceListingUpdated"; "docs": [ "Emitted when a service listing's terms are updated" ]; "type": { "kind": "struct"; "fields": [ { "name": "listing"; "type": "pubkey"; }, { "name": "authority"; "type": "pubkey"; }, { "name": "price"; "type": "u64"; }, { "name": "operatorFeeBps"; "type": "u16"; }, { "name": "version"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "skillPurchased"; "docs": [ "Emitted when a skill is purchased" ]; "type": { "kind": "struct"; "fields": [ { "name": "skill"; "type": "pubkey"; }, { "name": "buyer"; "type": "pubkey"; }, { "name": "author"; "type": "pubkey"; }, { "name": "contentHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "contentVersion"; "type": "u8"; }, { "name": "pricePaid"; "type": "u64"; }, { "name": "protocolFee"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "skillRated"; "docs": [ "Emitted when a skill is rated by another agent" ]; "type": { "kind": "struct"; "fields": [ { "name": "skill"; "type": "pubkey"; }, { "name": "rater"; "type": "pubkey"; }, { "name": "rating"; "type": "u8"; }, { "name": "raterReputation"; "type": "u16"; }, { "name": "newTotalRating"; "type": "u64"; }, { "name": "newRatingCount"; "type": "u32"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "skillRating"; "docs": [ "Skill rating record (one per rater per skill)", "PDA seeds: [\"skill_rating\", skill_pda, rater_agent_pda]" ]; "type": { "kind": "struct"; "fields": [ { "name": "skill"; "docs": [ "Skill being rated" ]; "type": "pubkey"; }, { "name": "rater"; "docs": [ "Rater's agent PDA" ]; "type": "pubkey"; }, { "name": "rating"; "docs": [ "Rating value (1-5)" ]; "type": "u8"; }, { "name": "reviewHash"; "docs": [ "Optional review content hash" ]; "type": { "option": { "array": [ "u8", 32 ]; }; }; }, { "name": "raterReputation"; "docs": [ "Rater's reputation at time of rating" ]; "type": "u16"; }, { "name": "timestamp"; "docs": [ "Rating timestamp" ]; "type": "i64"; }, { "name": "bump"; "docs": [ "Bump seed" ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future use" ]; "type": { "array": [ "u8", 4 ]; }; } ]; }; }, { "name": "skillRegistered"; "docs": [ "Emitted when a new skill is registered" ]; "type": { "kind": "struct"; "fields": [ { "name": "skill"; "type": "pubkey"; }, { "name": "author"; "type": "pubkey"; }, { "name": "skillId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "name"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "contentHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "price"; "type": "u64"; }, { "name": "priceMint"; "type": { "option": "pubkey"; }; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "skillRegistration"; "docs": [ "Skill registration account", "PDA seeds: [\"skill\", author_agent_pda, skill_id]" ]; "type": { "kind": "struct"; "fields": [ { "name": "author"; "docs": [ "Author's agent PDA" ]; "type": "pubkey"; }, { "name": "skillId"; "docs": [ "Unique skill identifier" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "name"; "docs": [ "Skill display name" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "contentHash"; "docs": [ "Content hash (IPFS CID, Arweave tx, etc.)" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "price"; "docs": [ "Price in lamports (SOL) or token smallest units" ]; "type": "u64"; }, { "name": "priceMint"; "docs": [ "Optional SPL token mint for price denomination (None = SOL)" ]; "type": { "option": "pubkey"; }; }, { "name": "tags"; "docs": [ "Tags for discovery (encoded by client)" ]; "type": { "array": [ "u8", 64 ]; }; }, { "name": "totalRating"; "docs": [ "Sum of reputation-weighted ratings" ]; "type": "u64"; }, { "name": "ratingCount"; "docs": [ "Number of ratings received" ]; "type": "u32"; }, { "name": "downloadCount"; "docs": [ "Number of purchases" ]; "type": "u32"; }, { "name": "version"; "docs": [ "Content version (monotonically increasing)" ]; "type": "u8"; }, { "name": "isActive"; "docs": [ "Whether the skill is currently active" ]; "type": "bool"; }, { "name": "createdAt"; "docs": [ "Creation timestamp" ]; "type": "i64"; }, { "name": "updatedAt"; "docs": [ "Last update timestamp" ]; "type": "i64"; }, { "name": "bump"; "docs": [ "Bump seed" ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future use" ]; "type": { "array": [ "u8", 8 ]; }; } ]; }; }, { "name": "skillUpdated"; "docs": [ "Emitted when a skill is updated by its author" ]; "type": { "kind": "struct"; "fields": [ { "name": "skill"; "type": "pubkey"; }, { "name": "author"; "type": "pubkey"; }, { "name": "contentHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "price"; "type": "u64"; }, { "name": "version"; "type": "u8"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "stateUpdated"; "docs": [ "Emitted when coordination state is updated" ]; "type": { "kind": "struct"; "fields": [ { "name": "stateKey"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "stateValue"; "type": { "array": [ "u8", 64 ]; }; }, { "name": "updater"; "type": "pubkey"; }, { "name": "version"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "store"; "docs": [ "P5.2 — permissionless store/marketplace identity. Address-keyed: the owner", "wallet is the identity; `handle` is DISPLAY-ONLY and not unique on-chain", "(uniqueness is a surface concern — see `docs/P5_2_STORE_IDENTITY_SPEC.md` §6).", "Fee fields are advertised DEFAULTS, not enforcement: listings and hires keep", "snapshotting terms in `ServiceListing` / `HireRecord`; NO money", "path reads this account in v1 (spec §8 Q6, ratified).", "", "PDA seeds: [\"store\", owner]" ]; "type": { "kind": "struct"; "fields": [ { "name": "owner"; "docs": [ "Owner wallet (signer of register/update/close; the future P5.3 referral payee)." ]; "type": "pubkey"; }, { "name": "handle"; "docs": [ "Display handle, lowercase `[a-z0-9-]`, zero-padded. NOT a uniqueness key." ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "metadataHash"; "docs": [ "sha256 of the canonical `agenc.storeManifest.v1` body this store points at", "(all-zero = no manifest pinned yet)." ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "metadataUri"; "docs": [ "Manifest URI (typically `https:///.well-known/agenc-store.json`;", "empty = no manifest pinned yet)." ]; "type": "string"; }, { "name": "referrerFeeBps"; "docs": [ "Advertised default referral fee (bps, <= MAX_REFERRER_FEE_BPS)." ]; "type": "u16"; }, { "name": "operator"; "docs": [ "Advertised default operator payee (`Pubkey::default()` = none)." ]; "type": "pubkey"; }, { "name": "operatorFeeBps"; "docs": [ "Advertised default operator fee (bps, <= MAX_OPERATOR_FEE_BPS; requires a", "non-default `operator` when > 0 — the `create_service_listing` pairing rule)." ]; "type": "u16"; }, { "name": "domain"; "docs": [ "Self-declared domain (empty = hosted-only store). Verified only by the", "MUTUAL manifest check (spec §3b) — never trusted alone. Same charset floor", "as `validate_verified_domain`." ]; "type": "string"; }, { "name": "bondLamports"; "docs": [ "Registration bond held as excess lamports on this PDA (P1.2 §4.1 framing:", "an identity deposit, never confiscatable; refunded in full at `close_store`)." ]; "type": "u64"; }, { "name": "version"; "docs": [ "Monotonic version, bumped on every update (staleness/CAS for indexers)." ]; "type": "u64"; }, { "name": "createdAt"; "type": "i64"; }, { "name": "updatedAt"; "type": "i64"; }, { "name": "bump"; "docs": [ "PDA bump." ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved (future: verification refs, P5.3 referrer bookkeeping). MUST stay", "zeroed." ]; "type": { "array": [ "u8", 64 ]; }; } ]; }; }, { "name": "storeClosed"; "docs": [ "Emitted when a store closes its identity PDA; rent + bond are refunded in", "full to the owner (P5.2 — no exit cooldown: nothing money-bearing reads", "`Store` in v1)." ]; "type": { "kind": "struct"; "fields": [ { "name": "store"; "type": "pubkey"; }, { "name": "owner"; "type": "pubkey"; }, { "name": "bondLamports"; "docs": [ "The bond principal that was held (informational)." ]; "type": "u64"; }, { "name": "refundedLamports"; "docs": [ "Total lamports actually refunded to the owner at close — the full PDA", "balance (rent + bond + any lamports transferred to the PDA after", "registration), which is what `close = owner` returns." ]; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "storeRegistered"; "docs": [ "Emitted when a store registers its on-chain identity (P5.2)." ]; "type": { "kind": "struct"; "fields": [ { "name": "store"; "docs": [ "The `[\"store\", owner]` PDA." ]; "type": "pubkey"; }, { "name": "owner"; "docs": [ "Owner wallet (the identity key)." ]; "type": "pubkey"; }, { "name": "handle"; "docs": [ "Display handle (zero-padded; NOT unique on-chain)." ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "bondLamports"; "docs": [ "Registration bond deposited on the PDA." ]; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "storeUpdated"; "docs": [ "Emitted when a store updates its advertised identity/terms (P5.2)." ]; "type": { "kind": "struct"; "fields": [ { "name": "store"; "type": "pubkey"; }, { "name": "owner"; "type": "pubkey"; }, { "name": "handle"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "version"; "docs": [ "Monotonic version AFTER this update (indexer staleness/CAS signal)." ]; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "submissionStatus"; "docs": [ "Task submission lifecycle for manual validation." ]; "repr": { "kind": "rust"; }; "type": { "kind": "enum"; "variants": [ { "name": "idle"; }, { "name": "submitted"; }, { "name": "accepted"; }, { "name": "rejected"; } ]; }; }, { "name": "task"; "docs": [ "Task account", "PDA seeds: [\"task\", creator, task_id]" ]; "type": { "kind": "struct"; "fields": [ { "name": "taskId"; "docs": [ "Unique task identifier" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "creator"; "docs": [ "Task creator (paying party)" ]; "type": "pubkey"; }, { "name": "requiredCapabilities"; "docs": [ "Required capability bitmask (u64).", "", "Specifies which capabilities an agent must have to claim this task.", "See [`capability`] module for defined bits. An agent can claim this", "task only if: `(agent.capabilities & required_capabilities) == required_capabilities`" ]; "type": "u64"; }, { "name": "description"; "docs": [ "Task description or instruction hash" ]; "type": { "array": [ "u8", 64 ]; }; }, { "name": "constraintHash"; "docs": [ "Constraint hash for private task verification (hash of expected output)", "For private tasks, workers must prove they know output that hashes to this value" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "rewardAmount"; "docs": [ "Reward amount in lamports" ]; "type": "u64"; }, { "name": "maxWorkers"; "docs": [ "Maximum workers allowed" ]; "type": "u8"; }, { "name": "currentWorkers"; "docs": [ "Current worker count" ]; "type": "u8"; }, { "name": "status"; "docs": [ "Task status" ]; "type": { "defined": { "name": "taskStatus"; }; }; }, { "name": "taskType"; "docs": [ "Task type" ]; "type": { "defined": { "name": "taskType"; }; }; }, { "name": "createdAt"; "docs": [ "Creation timestamp" ]; "type": "i64"; }, { "name": "deadline"; "docs": [ "Deadline timestamp (0 = no deadline)" ]; "type": "i64"; }, { "name": "completedAt"; "docs": [ "Completion timestamp" ]; "type": "i64"; }, { "name": "escrow"; "docs": [ "Escrow account for reward" ]; "type": "pubkey"; }, { "name": "result"; "docs": [ "Result data or pointer" ]; "type": { "array": [ "u8", 64 ]; }; }, { "name": "completions"; "docs": [ "Number of completions (for collaborative tasks)" ]; "type": "u8"; }, { "name": "requiredCompletions"; "docs": [ "Required completions" ]; "type": "u8"; }, { "name": "bump"; "docs": [ "Bump seed" ]; "type": "u8"; }, { "name": "protocolFeeBps"; "docs": [ "Protocol fee in basis points, locked at task creation (#479)" ]; "type": "u16"; }, { "name": "dependsOn"; "docs": [ "Optional parent task this task depends on (None for independent tasks)" ]; "type": { "option": "pubkey"; }; }, { "name": "dependencyType"; "docs": [ "Type of dependency relationship" ]; "type": { "defined": { "name": "dependencyType"; }; }; }, { "name": "minReputation"; "docs": [ "Minimum reputation score (0-10000) required for workers to claim this task.", "0 means no reputation gate (default for backward compatibility)." ]; "type": "u16"; }, { "name": "rewardMint"; "docs": [ "Optional SPL token mint for reward denomination.", "None = SOL rewards (default, backward compatible).", "Some(mint) = SPL token rewards using the specified mint." ]; "type": { "option": "pubkey"; }; }, { "name": "operator"; "docs": [ "Operator (embedding-site) payee for the §4 3-way split. `Pubkey::default()`", "means no operator leg (non-operator task, or a pre-Batch-2 task not yet", "backfilled — settlement falls back to the HireRecord in that case)." ]; "type": "pubkey"; }, { "name": "operatorFeeBps"; "docs": [ "Operator fee in basis points, snapshotted from the listing at hire time.", "0 = no operator leg. Capped at MAX_OPERATOR_FEE_BPS by listing creation." ]; "type": "u16"; }, { "name": "reserved"; "docs": [ "Reserved padding so future field adds become value-only migrates rather", "than another realloc-all sweep.", "", "Batch 3 (WS-CONTEST) carves the first two bytes in place — a value-only", "migrate, NO size change, NO realloc (live pre-batch-3 accounts read back as", "zeros == schema 0 / no live submissions, which is exactly their meaning):", "* `_reserved[0]` = `task_schema` (0 = pre-batch-3, 1 = contest-aware;", "see [`Task::TASK_SCHEMA_CONTEST_AWARE`]).", "* `_reserved[1]` = `live_submissions` (count of `TaskSubmission`s with", "status `Submitted`; maintained ONLY for schema-1 tasks).", "* `_reserved[2]` = `worker_slash_pending` (0 = no deferred worker", "slash, 1 = the defendant claim is reserved for apply_dispute_slash).", "* `_reserved[3..11]` = little-endian monotonic `claim_generation`", "(`u64`; 0 is the legacy/no-claim sentinel). Every instruction that", "creates a canonical `TaskClaim` increments it atomically, allowing", "watchers to distinguish Open 0:0 -> claim/expire -> Open 0:0 without", "having observed the intermediate state.", "Bytes `[11..16]` MUST stay zeroed (validate_reserved_fields)." ]; "type": { "array": [ "u8", 16 ]; }; }, { "name": "referrer"; "docs": [ "Referrer (embedder who brought the buyer) payee for the §4 4-way split.", "`Pubkey::default()` means no referrer leg (the common case). Snapshotted from", "the hire / create-task args, EXACTLY like `operator` — the 34B referrer fields", "exceed the 16B `_reserved`, so this is a size-extending migration for", "historical task layouts (see `migrate_task`)." ]; "type": "pubkey"; }, { "name": "referrerFeeBps"; "docs": [ "Referrer fee in basis points, snapshotted at hire/create time. 0 = no referrer", "leg. Combined with protocol + operator, capped so the worker keeps ≥60%." ]; "type": "u16"; } ]; }; }, { "name": "taskAttestorConfig"; "docs": [ "Task-level external attestor configuration.", "PDA seeds: [\"task_attestor\", task]" ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "docs": [ "Task this config belongs to." ]; "type": "pubkey"; }, { "name": "creator"; "docs": [ "Task creator / reviewer authority." ]; "type": "pubkey"; }, { "name": "attestor"; "docs": [ "Wallet allowed to attest the outcome." ]; "type": "pubkey"; }, { "name": "createdAt"; "docs": [ "Creation timestamp." ]; "type": "i64"; }, { "name": "updatedAt"; "docs": [ "Last update timestamp." ]; "type": "i64"; }, { "name": "bump"; "docs": [ "PDA bump." ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future attestor metadata." ]; "type": { "array": [ "u8", 7 ]; }; } ]; }; }, { "name": "taskBid"; "docs": [ "Single active bid per bidder per task in Marketplace V2", "PDA seeds: [\"bid\", task, bidder_agent]" ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "bidBook"; "type": "pubkey"; }, { "name": "bidder"; "type": "pubkey"; }, { "name": "bidderAuthority"; "type": "pubkey"; }, { "name": "requestedRewardLamports"; "type": "u64"; }, { "name": "etaSeconds"; "type": "u32"; }, { "name": "confidenceBps"; "type": "u16"; }, { "name": "reputationSnapshotBps"; "type": "u16"; }, { "name": "qualityGuaranteeHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "metadataHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "expiresAt"; "type": "i64"; }, { "name": "createdAt"; "type": "i64"; }, { "name": "updatedAt"; "type": "i64"; }, { "name": "state"; "type": { "defined": { "name": "taskBidState"; }; }; }, { "name": "bondLamports"; "type": "u64"; }, { "name": "bump"; "type": "u8"; }, { "name": "acceptedNoShowSlashBps"; "docs": [ "Immutable no-show penalty agreed when the bidder funded this bid.", "Appended so all pre-existing field offsets remain stable." ]; "type": "u16"; } ]; }; }, { "name": "taskBidBook"; "docs": [ "Bid book for a Marketplace V2 task", "PDA seeds: [\"bid_book\", task]" ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "state"; "type": { "defined": { "name": "bidBookState"; }; }; }, { "name": "policy"; "type": { "defined": { "name": "matchingPolicy"; }; }; }, { "name": "weights"; "type": { "defined": { "name": "weightedScoreWeights"; }; }; }, { "name": "acceptedBid"; "type": { "option": "pubkey"; }; }, { "name": "version"; "type": "u64"; }, { "name": "totalBids"; "type": "u32"; }, { "name": "activeBids"; "type": "u16"; }, { "name": "createdAt"; "type": "i64"; }, { "name": "updatedAt"; "type": "i64"; }, { "name": "bump"; "type": "u8"; }, { "name": "bestBid"; "docs": [ "Cached deterministic policy winner. `Pubkey::default()` = no tracked", "winner. Maintained incrementally by every bid mutation so `accept_bid`", "never has to enumerate competitors (the O(1)-accept redesign,", "docs/design/bid-accept-o1-redesign.md). Fields appended for layout", "stability; the revision-5 cutover preflight requires zero live books." ]; "type": "pubkey"; }, { "name": "bestRewardLamports"; "docs": [ "Score components of `best_bid`, snapshotted at install so comparisons", "never need to load the incumbent's account. Scores are pure functions", "of these values plus the frozen `score_window_secs`." ]; "type": "u64"; }, { "name": "bestEtaSeconds"; "type": "u32"; }, { "name": "bestConfidenceBps"; "type": "u16"; }, { "name": "bestReputationBps"; "type": "u16"; }, { "name": "winnerStaleSince"; "docs": [ "Set when the tracked winner is removed (cancel/expiry/demotion).", "`accept_bid` is blocked until the re-promotion grace elapses so every", "remaining bidder gets a fair window to promote before acceptance.", "0 = fresh." ]; "type": "i64"; }, { "name": "scoreWindowSecs"; "docs": [ "Frozen WeightedScore eta-normalization window, recorded once at", "`initialize_bid_book` as `task.deadline - now`. Freezing it makes all", "policy orderings pure functions of immutable bid fields (the winner no", "longer depends on when the creator calls accept)." ]; "type": "u32"; } ]; }; }, { "name": "taskBidState"; "docs": [ "Bid lifecycle state." ]; "repr": { "kind": "rust"; }; "type": { "kind": "enum"; "variants": [ { "name": "active"; }, { "name": "accepted"; }, { "name": "boundActive"; } ]; }; }, { "name": "taskCancelled"; "docs": [ "Emitted when a task is cancelled" ]; "type": { "kind": "struct"; "fields": [ { "name": "taskId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "creator"; "type": "pubkey"; }, { "name": "refundAmount"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "taskChangesRequested"; "docs": [ "Emitted when a creator requests free, non-terminal revisions (Batch 3 §8)." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "claim"; "type": "pubkey"; }, { "name": "worker"; "type": "pubkey"; }, { "name": "round"; "type": "u16"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "taskClaim"; "docs": [ "Worker's claim on a task", "PDA seeds: [\"claim\", task, worker_agent]" ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "docs": [ "Task being claimed" ]; "type": "pubkey"; }, { "name": "worker"; "docs": [ "Worker agent" ]; "type": "pubkey"; }, { "name": "claimedAt"; "docs": [ "Claim timestamp" ]; "type": "i64"; }, { "name": "expiresAt"; "docs": [ "Expiration timestamp for claim" ]; "type": "i64"; }, { "name": "completedAt"; "docs": [ "Completion timestamp" ]; "type": "i64"; }, { "name": "proofHash"; "docs": [ "Proof of work hash" ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "resultData"; "docs": [ "Result data" ]; "type": { "array": [ "u8", 64 ]; }; }, { "name": "isCompleted"; "docs": [ "Is completed" ]; "type": "bool"; }, { "name": "isValidated"; "docs": [ "Is validated" ]; "type": "bool"; }, { "name": "rewardPaid"; "docs": [ "Reward paid" ]; "type": "u64"; }, { "name": "bump"; "docs": [ "Bump seed" ]; "type": "u8"; } ]; }; }, { "name": "taskClaimed"; "docs": [ "Emitted when an agent claims a task" ]; "type": { "kind": "struct"; "fields": [ { "name": "taskId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "worker"; "type": "pubkey"; }, { "name": "currentWorkers"; "type": "u8"; }, { "name": "maxWorkers"; "type": "u8"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "taskClosed"; "docs": [ "Emitted when a terminal task's account rent is reclaimed via close_task." ]; "type": { "kind": "struct"; "fields": [ { "name": "taskId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "creator"; "type": "pubkey"; }, { "name": "status"; "docs": [ "Terminal status at close time (`TaskStatus` repr: 3=Completed, 4=Cancelled)." ]; "type": "u8"; }, { "name": "jobSpecClosed"; "docs": [ "Whether a leftover job-spec pointer was closed in the same transaction." ]; "type": "bool"; }, { "name": "escrowClosed"; "docs": [ "Whether a still-alive (expire_dispute) escrow PDA was closed in the same tx." ]; "type": "bool"; }, { "name": "hireRecordClosed"; "docs": [ "Whether a hire link was closed (and its listing's capacity slot freed)." ]; "type": "bool"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "taskCompleted"; "docs": [ "Emitted when a task is completed" ]; "type": { "kind": "struct"; "fields": [ { "name": "taskId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "worker"; "type": "pubkey"; }, { "name": "proofHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "resultData"; "type": { "array": [ "u8", 64 ]; }; }, { "name": "rewardPaid"; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "taskCreated"; "docs": [ "Emitted when a new task is created" ]; "type": { "kind": "struct"; "fields": [ { "name": "taskId"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "creator"; "type": "pubkey"; }, { "name": "requiredCapabilities"; "type": "u64"; }, { "name": "rewardAmount"; "type": "u64"; }, { "name": "taskType"; "type": "u8"; }, { "name": "deadline"; "type": "i64"; }, { "name": "minReputation"; "type": "u16"; }, { "name": "rewardMint"; "docs": [ "SPL token mint for reward denomination (None = SOL)" ]; "type": { "option": "pubkey"; }; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "taskEscrow"; "docs": [ "Task escrow account", "PDA seeds: [\"escrow\", task]" ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "docs": [ "Task this escrow belongs to" ]; "type": "pubkey"; }, { "name": "amount"; "docs": [ "Total amount deposited" ]; "type": "u64"; }, { "name": "distributed"; "docs": [ "Amount already distributed" ]; "type": "u64"; }, { "name": "isClosed"; "docs": [ "Is closed" ]; "type": "bool"; }, { "name": "bump"; "docs": [ "Bump seed" ]; "type": "u8"; } ]; }; }, { "name": "taskJobSpec"; "docs": [ "Content-addressed pointer to a task's full off-chain job specification.", "PDA seeds: [\"task_job_spec\", task]" ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "docs": [ "Task this job specification belongs to." ]; "type": "pubkey"; }, { "name": "creator"; "docs": [ "Task creator authorized to set or update the pointer." ]; "type": "pubkey"; }, { "name": "jobSpecHash"; "docs": [ "SHA-256 hash of the canonicalized job specification payload." ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "jobSpecUri"; "docs": [ "URI where the canonicalized job specification payload can be fetched." ]; "type": "string"; }, { "name": "createdAt"; "docs": [ "Creation timestamp." ]; "type": "i64"; }, { "name": "updatedAt"; "docs": [ "Last update timestamp." ]; "type": "i64"; }, { "name": "bump"; "docs": [ "PDA bump." ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future metadata flags." ]; "type": { "array": [ "u8", 7 ]; }; } ]; }; }, { "name": "taskJobSpecSet"; "docs": [ "Emitted when a task's full off-chain job specification pointer is set." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "creator"; "type": "pubkey"; }, { "name": "jobSpecHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "jobSpecUri"; "type": "string"; }, { "name": "moderationAttestor"; "docs": [ "WP-A1 roster telemetry: the registered `ModerationAttestor` wallet whose", "attestation unlocked this publish, or `None` when the task-moderation was", "authored by the global `ModerationConfig.moderation_authority`." ]; "type": { "option": "pubkey"; }; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "taskMigrated"; "docs": [ "Emitted when a single Task account is reallocated to the Batch-2 layout." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "fromSize"; "type": "u32"; }, { "name": "toSize"; "type": "u32"; }, { "name": "authority"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "taskModeration"; "docs": [ "On-chain moderation attestation for a task/job-spec hash.", "PDA seeds: [\"task_moderation\", task, job_spec_hash]" ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "docs": [ "Task this moderation decision applies to." ]; "type": "pubkey"; }, { "name": "creator"; "docs": [ "Task creator at the time the decision was recorded." ]; "type": "pubkey"; }, { "name": "jobSpecHash"; "docs": [ "Job-spec hash approved/held/rejected by the scanner or reviewer." ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "status"; "docs": [ "One of `task_moderation_status::*`." ]; "type": "u8"; }, { "name": "riskScore"; "docs": [ "Normalized 0-100 risk score." ]; "type": "u8"; }, { "name": "categoryMask"; "docs": [ "Bitmask of scanner categories, interpreted by off-chain policy docs." ]; "type": "u64"; }, { "name": "policyHash"; "docs": [ "Hash of the moderation policy/threshold version." ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "scannerHash"; "docs": [ "Hash of the scanner/model version bundle." ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "recordedAt"; "docs": [ "When the moderation decision was recorded." ]; "type": "i64"; }, { "name": "expiresAt"; "docs": [ "Optional expiry timestamp. Zero means no expiry." ]; "type": "i64"; }, { "name": "moderator"; "docs": [ "Signer that recorded the moderation decision." ]; "type": "pubkey"; }, { "name": "bump"; "docs": [ "PDA bump." ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future attestation metadata." ]; "type": { "array": [ "u8", 7 ]; }; } ]; }; }, { "name": "taskModerationConfigUpdated"; "docs": [ "Emitted when the global task moderation ingest gate is configured." ]; "type": { "kind": "struct"; "fields": [ { "name": "authority"; "type": "pubkey"; }, { "name": "moderationAuthority"; "type": "pubkey"; }, { "name": "enabled"; "type": "bool"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "taskModerationRecorded"; "docs": [ "Emitted when the moderation authority records a decision for a task/job-spec hash." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "creator"; "type": "pubkey"; }, { "name": "jobSpecHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "status"; "type": "u8"; }, { "name": "riskScore"; "type": "u8"; }, { "name": "categoryMask"; "type": "u64"; }, { "name": "policyHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "scannerHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "expiresAt"; "type": "i64"; }, { "name": "moderator"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "taskRejectFrozen"; "docs": [ "Emitted when a submission is terminally rejected and frozen for review." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "claim"; "type": "pubkey"; }, { "name": "worker"; "type": "pubkey"; }, { "name": "rejectionHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "reviewDeadlineAt"; "type": "i64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "taskResultAccepted"; "docs": [ "Emitted when a manual-validation result is accepted." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "claim"; "type": "pubkey"; }, { "name": "worker"; "type": "pubkey"; }, { "name": "acceptedBy"; "type": "pubkey"; }, { "name": "acceptedAt"; "type": "i64"; } ]; }; }, { "name": "taskResultRejected"; "docs": [ "Emitted when a manual-validation result is rejected." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "claim"; "type": "pubkey"; }, { "name": "worker"; "type": "pubkey"; }, { "name": "rejectedBy"; "type": "pubkey"; }, { "name": "rejectionHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "rejectedAt"; "type": "i64"; } ]; }; }, { "name": "taskResultSubmitted"; "docs": [ "Emitted when a worker submits a result for manual validation." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "claim"; "type": "pubkey"; }, { "name": "worker"; "type": "pubkey"; }, { "name": "proofHash"; "type": { "array": [ "u8", 32 ]; }; }, { "name": "resultData"; "type": { "array": [ "u8", 64 ]; }; }, { "name": "submissionCount"; "type": "u16"; }, { "name": "submittedAt"; "type": "i64"; }, { "name": "reviewDeadlineAt"; "type": "i64"; } ]; }; }, { "name": "taskResultValidationRecorded"; "docs": [ "Emitted when a validator or attestor records an approval / rejection." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "claim"; "type": "pubkey"; }, { "name": "reviewer"; "type": "pubkey"; }, { "name": "reviewerAgent"; "type": "pubkey"; }, { "name": "approved"; "type": "bool"; }, { "name": "submissionCount"; "type": "u16"; }, { "name": "approvalCount"; "type": "u8"; }, { "name": "rejectionCount"; "type": "u8"; }, { "name": "recordedAt"; "type": "i64"; } ]; }; }, { "name": "taskStatus"; "docs": [ "Task status" ]; "repr": { "kind": "rust"; }; "type": { "kind": "enum"; "variants": [ { "name": "open"; }, { "name": "inProgress"; }, { "name": "pendingValidation"; }, { "name": "completed"; }, { "name": "cancelled"; }, { "name": "disputed"; }, { "name": "rejectFrozen"; } ]; }; }, { "name": "taskSubmission"; "docs": [ "Claim-level submission state for manual validation.", "PDA seeds: [\"task_submission\", claim]" ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "docs": [ "Task being submitted." ]; "type": "pubkey"; }, { "name": "claim"; "docs": [ "Claim tied to this submission." ]; "type": "pubkey"; }, { "name": "worker"; "docs": [ "Worker that submitted the result." ]; "type": "pubkey"; }, { "name": "status"; "docs": [ "Current submission status." ]; "type": { "defined": { "name": "submissionStatus"; }; }; }, { "name": "proofHash"; "docs": [ "Latest proof hash supplied by the worker." ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "resultData"; "docs": [ "Latest result payload supplied by the worker." ]; "type": { "array": [ "u8", 64 ]; }; }, { "name": "submissionCount"; "docs": [ "Number of times this claim has been submitted for review." ]; "type": "u16"; }, { "name": "submittedAt"; "docs": [ "Timestamp of latest submission." ]; "type": "i64"; }, { "name": "reviewDeadlineAt"; "docs": [ "Timestamp after which the review window has elapsed." ]; "type": "i64"; }, { "name": "acceptedAt"; "docs": [ "Acceptance timestamp (0 when unresolved)." ]; "type": "i64"; }, { "name": "rejectedAt"; "docs": [ "Rejection timestamp (0 when unresolved)." ]; "type": "i64"; }, { "name": "rejectionHash"; "docs": [ "Optional rejection reason hash." ]; "type": { "array": [ "u8", 32 ]; }; }, { "name": "bump"; "docs": [ "PDA bump." ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future attestation metadata." ]; "type": { "array": [ "u8", 5 ]; }; } ]; }; }, { "name": "taskType"; "docs": [ "Task type enumeration" ]; "repr": { "kind": "rust"; }; "type": { "kind": "enum"; "variants": [ { "name": "exclusive"; }, { "name": "collaborative"; }, { "name": "competitive"; }, { "name": "bidExclusive"; } ]; }; }, { "name": "taskValidationConfig"; "docs": [ "Task-level validation configuration.", "PDA seeds: [\"task_validation\", task]" ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "docs": [ "Task this config belongs to." ]; "type": "pubkey"; }, { "name": "creator"; "docs": [ "Task creator / reviewer authority." ]; "type": "pubkey"; }, { "name": "mode"; "docs": [ "Active validation mode." ]; "type": { "defined": { "name": "validationMode"; }; }; }, { "name": "reviewWindowSecs"; "docs": [ "Review window in seconds before the submission may be escalated off-path." ]; "type": "i64"; }, { "name": "createdAt"; "docs": [ "Creation timestamp." ]; "type": "i64"; }, { "name": "updatedAt"; "docs": [ "Last update timestamp." ]; "type": "i64"; }, { "name": "bump"; "docs": [ "PDA bump." ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future validation variants." ]; "type": { "array": [ "u8", 7 ]; }; } ]; }; }, { "name": "taskValidationConfigured"; "docs": [ "Emitted when Task Validation V2 is configured for a task." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "creator"; "type": "pubkey"; }, { "name": "mode"; "type": "u8"; }, { "name": "reviewWindowSecs"; "type": "i64"; }, { "name": "validatorQuorum"; "type": "u8"; }, { "name": "attestor"; "type": { "option": "pubkey"; }; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "taskValidationVote"; "docs": [ "Reviewer vote or attestation recorded for a task submission round.", "PDA seeds: [\"task_validation_vote\", task_submission, reviewer]" ]; "type": { "kind": "struct"; "fields": [ { "name": "submission"; "docs": [ "Submission being validated." ]; "type": "pubkey"; }, { "name": "reviewer"; "docs": [ "Reviewer wallet that cast the vote / attestation." ]; "type": "pubkey"; }, { "name": "reviewerAgent"; "docs": [ "Reviewer agent used for validator-quorum mode (default pubkey for attestors)." ]; "type": "pubkey"; }, { "name": "submissionRound"; "docs": [ "Submission round the vote applies to." ]; "type": "u16"; }, { "name": "approved"; "docs": [ "Whether the reviewer approved the result." ]; "type": "bool"; }, { "name": "votedAt"; "docs": [ "Timestamp of the vote / attestation." ]; "type": "i64"; }, { "name": "bump"; "docs": [ "PDA bump." ]; "type": "u8"; }, { "name": "reserved"; "docs": [ "Reserved for future metadata." ]; "type": { "array": [ "u8", 5 ]; }; } ]; }; }, { "name": "terminalClaimReclaimed"; "docs": [ "Emitted by `reclaim_terminal_claim`: an unsettled claim on an already-terminal", "task was reclaimed. The eligible shapes are an empty/no-submission record, a", "Rejected submission, or a still-Submitted Collaborative straggler after", "completion. Task/worker slot counters are freed; applicable claim surplus is", "forfeited to the treasury while a Submitted straggler is refunded in full." ]; "type": { "kind": "struct"; "fields": [ { "name": "task"; "type": "pubkey"; }, { "name": "claim"; "type": "pubkey"; }, { "name": "workerAgent"; "docs": [ "The affected worker's `AgentRegistration` PDA." ]; "type": "pubkey"; }, { "name": "workerRefund"; "docs": [ "Claim lamports returned to the worker authority: the rent-exempt minimum", "for empty/Rejected cleanup, or the full balance for a Submitted", "Collaborative straggler." ]; "type": "u64"; }, { "name": "forfeited"; "docs": [ "Lamports forfeited to the protocol treasury (the contest entry-deposit", "surplus above rent; 0 for non-contest claims)." ]; "type": "u64"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "trackRecordCounter"; "docs": [ "Which negative / non-success track-record counter was bumped (P6.6). Keeps the", "`AgentTrackRecordUpdated` event self-describing for indexers without re-reading", "the `AgentStats` account." ]; "type": { "kind": "enum"; "variants": [ { "name": "tasksRejected"; }, { "name": "disputesWon"; }, { "name": "disputesLost"; }, { "name": "claimsExpired"; }, { "name": "totalCancelled"; } ]; }; }, { "name": "treasuryUpdated"; "docs": [ "Emitted when protocol treasury is updated via multisig governance." ]; "type": { "kind": "struct"; "fields": [ { "name": "oldTreasury"; "type": "pubkey"; }, { "name": "newTreasury"; "type": "pubkey"; }, { "name": "updatedBy"; "type": "pubkey"; }, { "name": "timestamp"; "type": "i64"; } ]; }; }, { "name": "validationMode"; "docs": [ "Validation mode configured for a task." ]; "repr": { "kind": "rust"; }; "type": { "kind": "enum"; "variants": [ { "name": "auto"; }, { "name": "creatorReview"; }, { "name": "validatorQuorum"; }, { "name": "externalAttestation"; } ]; }; }, { "name": "weightedScoreWeights"; "docs": [ "Weight configuration used when a bid book declares `WeightedScore`." ]; "type": { "kind": "struct"; "fields": [ { "name": "priceWeightBps"; "type": "u16"; }, { "name": "etaWeightBps"; "type": "u16"; }, { "name": "confidenceWeightBps"; "type": "u16"; }, { "name": "reliabilityWeightBps"; "type": "u16"; } ]; }; } ]; }; declare const AGENC_COORDINATION_IDL: { address: string; metadata: { name: string; version: string; spec: string; description: string; repository: string; }; instructions: ({ name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; pda: { seeds: { kind: string; value: number[]; }[]; }; writable?: undefined; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; writable?: undefined; pda?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; signer: boolean; pda?: undefined; docs?: undefined; address?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; })[]; args: { name: string; type: { array: (string | number)[]; }; }[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; writable: boolean; pda?: undefined; docs?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; signer: boolean; pda?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; optional: boolean; pda?: undefined; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; optional: boolean; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; optional: boolean; address: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; optional?: undefined; })[]; args: never[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; value?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; pda?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; pda: { seeds: { kind: string; value: number[]; }[]; }; writable?: undefined; docs?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; writable: boolean; pda?: undefined; docs?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; signer: boolean; writable?: undefined; pda?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; writable?: undefined; pda?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; address: string; writable?: undefined; pda?: undefined; signer?: undefined; })[]; args: never[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; optional?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; optional?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; pda?: undefined; docs?: undefined; optional?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; optional?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; signer: boolean; pda?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; writable: boolean; optional: boolean; pda?: undefined; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; optional: boolean; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; optional: boolean; address: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; optional?: undefined; signer?: undefined; })[]; args: never[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; address?: undefined; optional?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; address?: undefined; optional?: undefined; } | { name: string; writable: boolean; signer: boolean; pda?: undefined; docs?: undefined; address?: undefined; optional?: undefined; } | { name: string; pda: { seeds: { kind: string; value: number[]; }[]; }; writable?: undefined; docs?: undefined; signer?: undefined; address?: undefined; optional?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; optional?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; writable?: undefined; pda?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; address: string; writable?: undefined; pda?: undefined; signer?: undefined; } | { name: string; docs: string[]; writable: boolean; pda?: undefined; signer?: undefined; address?: undefined; optional?: undefined; } | { name: string; docs: string[]; optional: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; address?: undefined; })[]; args: never[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; optional?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; docs?: undefined; optional?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; optional?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; writable?: undefined; pda?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; writable?: undefined; pda?: undefined; optional?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; optional?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; writable: boolean; signer: boolean; relations: string[]; pda?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; optional?: undefined; signer?: undefined; relations?: undefined; })[]; args: never[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; optional?: undefined; signer?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; optional?: undefined; signer?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; signer?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; value?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; writable?: undefined; optional?: undefined; signer?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda?: undefined; signer?: undefined; } | { name: string; docs: string[]; writable: boolean; signer: boolean; pda?: undefined; optional?: undefined; } | { name: string; docs: string[]; optional: boolean; pda: { seeds: { kind: string; value: number[]; }[]; }; writable?: undefined; signer?: undefined; })[]; args: never[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; relations?: undefined; address?: undefined; optional?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; relations?: undefined; address?: undefined; optional?: undefined; } | { name: string; writable: boolean; pda?: undefined; docs?: undefined; signer?: undefined; relations?: undefined; address?: undefined; optional?: undefined; } | { name: string; writable: boolean; signer: boolean; relations: string[]; pda?: undefined; docs?: undefined; address?: undefined; optional?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; relations?: undefined; optional?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; writable?: undefined; pda?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; address: string; writable?: undefined; pda?: undefined; signer?: undefined; relations?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; relations?: undefined; address?: undefined; optional?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; relations?: undefined; address?: undefined; optional?: undefined; })[]; args: ({ name: string; type: { array: (string | number)[]; option?: undefined; }; } | { name: string; type: { option: { array: (string | number)[]; }; array?: undefined; }; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; pda: { seeds: { kind: string; value: number[]; }[]; }; writable?: undefined; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; signer: boolean; pda?: undefined; docs?: undefined; address?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; })[]; args: ({ name: string; type: string; } | { name: string; type: { option: string; }; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; writable?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; writable: boolean; signer: boolean; relations: string[]; pda?: undefined; docs?: undefined; address?: undefined; } | { name: string; address: string; pda?: undefined; docs?: undefined; writable?: undefined; signer?: undefined; relations?: undefined; })[]; args: ({ name: string; type: string; } | { name: string; type: { array: (string | number)[]; }; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; relations?: undefined; address?: undefined; optional?: undefined; } | { name: string; docs: string[]; writable?: undefined; pda?: undefined; signer?: undefined; relations?: undefined; address?: undefined; optional?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; relations?: undefined; address?: undefined; optional?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; relations?: undefined; address?: undefined; optional?: undefined; } | { name: string; docs: string[]; signer: boolean; relations: string[]; writable?: undefined; pda?: undefined; address?: undefined; optional?: undefined; } | { name: string; docs: string[]; writable: boolean; signer: boolean; pda?: undefined; relations?: undefined; address?: undefined; optional?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; relations?: undefined; optional?: undefined; } | { name: string; docs: string[]; optional: boolean; writable?: undefined; pda?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; address: string; writable?: undefined; pda?: undefined; signer?: undefined; relations?: undefined; })[]; args: ({ name: string; type: { array: (string | number)[]; option?: undefined; }; } | { name: string; type: string; } | { name: string; type: { option: { array: (string | number)[]; }; array?: undefined; }; } | { name: string; type: { option: string; array?: undefined; }; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; writable?: undefined; docs?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; writable?: undefined; pda?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; writable: boolean; signer: boolean; relations: string[]; pda?: undefined; docs?: undefined; address?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; relations?: undefined; })[]; args: ({ name: string; type: { array: (string | number)[]; option?: undefined; }; } | { name: string; type: string; } | { name: string; type: { option: string; array?: undefined; }; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; } | { name: string; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; } | { name: string; signer: boolean; pda?: undefined; writable?: undefined; })[]; args: never[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; optional?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; optional?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; pda?: undefined; docs?: undefined; optional?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; pda?: undefined; optional?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; signer: boolean; writable?: undefined; pda?: undefined; optional?: undefined; address?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; optional?: undefined; signer?: undefined; })[]; args: never[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; pda: { seeds: { kind: string; value: number[]; }[]; }; writable?: undefined; docs?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; signer: boolean; writable?: undefined; pda?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; signer: boolean; optional: boolean; pda?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda?: undefined; signer?: undefined; address?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; optional?: undefined; })[]; args: never[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; writable?: undefined; docs?: undefined; signer?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; } | { name: string; docs: string[]; writable: boolean; pda?: undefined; signer?: undefined; } | { name: string; signer: boolean; pda?: undefined; writable?: undefined; docs?: undefined; })[]; args: never[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; docs: string[]; writable: boolean; signer: boolean; pda?: undefined; optional?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; pda: { seeds: { kind: string; value: number[]; }[]; }; docs?: undefined; writable?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; optional: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; docs?: undefined; signer?: undefined; pda?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; signer?: undefined; pda?: undefined; address?: undefined; } | { name: string; writable: boolean; optional: boolean; docs?: undefined; signer?: undefined; pda?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; address?: undefined; } | { name: string; address: string; docs?: undefined; writable?: undefined; signer?: undefined; pda?: undefined; optional?: undefined; })[]; args: never[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; signer?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; pda: { seeds: { kind: string; value: number[]; }[]; }; writable?: undefined; signer?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; writable: boolean; pda?: undefined; signer?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; signer: boolean; writable?: undefined; pda?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; value?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; writable: boolean; optional: boolean; pda?: undefined; signer?: undefined; docs?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; writable?: undefined; pda?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; address: string; writable?: undefined; pda?: undefined; signer?: undefined; })[]; args: never[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; optional?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; optional?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; optional?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; writable?: undefined; optional?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; writable?: undefined; pda?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; writable?: undefined; pda?: undefined; optional?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; signer: boolean; relations: string[]; writable?: undefined; pda?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; signer: boolean; pda?: undefined; optional?: undefined; relations?: undefined; address?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; optional?: undefined; signer?: undefined; relations?: undefined; })[]; args: ({ name: string; type: { array: (string | number)[]; option?: undefined; }; } | { name: string; type: string; } | { name: string; type: { option: string; array?: undefined; }; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; pda: { seeds: { kind: string; value: number[]; }[]; }; writable?: undefined; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; signer: boolean; pda?: undefined; docs?: undefined; address?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; })[]; args: { name: string; type: string; }[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: { kind: string; value: number[]; }[]; }; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; signer: boolean; writable?: undefined; pda?: undefined; address?: undefined; } | { name: string; writable: boolean; signer: boolean; pda?: undefined; docs?: undefined; address?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; })[]; args: ({ name: string; type: string; } | { name: string; type: { vec: string; }; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; optional?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; optional?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; optional?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; pda: { seeds: { kind: string; value: number[]; }[]; }; writable?: undefined; docs?: undefined; optional?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; writable?: undefined; pda?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; writable: boolean; signer: boolean; relations: string[]; pda?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; optional?: undefined; signer?: undefined; relations?: undefined; })[]; args: ({ name: string; type: { array: (string | number)[]; }; } | { name: string; type: string; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; docs: string[]; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; signer: boolean; address?: undefined; } | { name: string; signer: boolean; docs?: undefined; writable?: undefined; address?: undefined; } | { name: string; address: string; docs?: undefined; writable?: undefined; signer?: undefined; })[]; args: { name: string; type: string; }[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: { kind: string; value: number[]; }[]; }; signer?: undefined; } | { name: string; signer: boolean; writable?: undefined; pda?: undefined; })[]; args: { name: string; type: { option: string; }; }[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; writable?: undefined; optional?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; optional?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; pda?: undefined; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; signer: boolean; pda?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; address: string; pda?: undefined; docs?: undefined; writable?: undefined; optional?: undefined; signer?: undefined; })[]; args: { name: string; type: string; }[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; address?: undefined; optional?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; address?: undefined; optional?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; address?: undefined; optional?: undefined; } | { name: string; docs: string[]; writable: boolean; pda?: undefined; signer?: undefined; address?: undefined; optional?: undefined; } | { name: string; pda: { seeds: { kind: string; value: number[]; }[]; }; writable?: undefined; docs?: undefined; signer?: undefined; address?: undefined; optional?: undefined; } | { name: string; writable: boolean; pda?: undefined; docs?: undefined; signer?: undefined; address?: undefined; optional?: undefined; } | { name: string; docs: string[]; writable?: undefined; pda?: undefined; signer?: undefined; address?: undefined; optional?: undefined; } | { name: string; docs: string[]; writable: boolean; signer: boolean; pda?: undefined; address?: undefined; optional?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; optional?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda?: undefined; signer?: undefined; address?: undefined; } | { name: string; optional: boolean; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; optional: boolean; pda?: undefined; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; optional: boolean; address: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; })[]; args: ({ name: string; type: string; } | { name: string; type: { array: (string | number)[]; }; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; relations?: undefined; address?: undefined; optional?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; relations?: undefined; address?: undefined; optional?: undefined; } | { name: string; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; writable?: undefined; docs?: undefined; signer?: undefined; relations?: undefined; address?: undefined; optional?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; relations?: undefined; address?: undefined; optional?: undefined; } | { name: string; writable: boolean; pda?: undefined; docs?: undefined; signer?: undefined; relations?: undefined; address?: undefined; optional?: undefined; } | { name: string; writable: boolean; signer: boolean; relations: string[]; pda?: undefined; docs?: undefined; address?: undefined; optional?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; relations?: undefined; optional?: undefined; } | { name: string; docs: string[]; optional: boolean; writable?: undefined; pda?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; address: string; writable?: undefined; pda?: undefined; signer?: undefined; relations?: undefined; })[]; args: ({ name: string; type: string; } | { name: string; type: { array: (string | number)[]; }; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; address?: undefined; } | { name: string; pda: { seeds: { kind: string; value: number[]; }[]; }; docs?: undefined; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; signer: boolean; pda?: undefined; address?: undefined; } | { name: string; address: string; docs?: undefined; pda?: undefined; writable?: undefined; signer?: undefined; })[]; args: ({ name: string; type: string; } | { name: string; type: { option: { array: (string | number)[]; }; }; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; writable?: undefined; docs?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; docs?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; writable: boolean; signer: boolean; relations: string[]; pda?: undefined; docs?: undefined; address?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; relations?: undefined; })[]; args: ({ name: string; type: string; } | { name: string; type: { option: { array: (string | number)[]; }; }; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; writable?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; address?: undefined; } | { name: string; writable: boolean; pda?: undefined; docs?: undefined; address?: undefined; } | { name: string; address: string; pda?: undefined; docs?: undefined; writable?: undefined; })[]; args: { name: string; type: string; }[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; docs: string[]; writable: boolean; signer?: undefined; } | { name: string; docs: string[]; writable?: undefined; signer?: undefined; } | { name: string; docs: string[]; signer: boolean; writable?: undefined; })[]; args: never[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; docs: string[]; signer: boolean; writable?: undefined; pda?: undefined; optional?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; optional?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; optional?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; optional?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; } | { name: string; pda: { seeds: { kind: string; value: number[]; }[]; }; docs?: undefined; signer?: undefined; writable?: undefined; optional?: undefined; } | { name: string; docs: string[]; writable: boolean; signer?: undefined; pda?: undefined; optional?: undefined; })[]; args: never[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; writable?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; signer: boolean; pda?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; address: string; pda?: undefined; docs?: undefined; writable?: undefined; signer?: undefined; optional?: undefined; })[]; args: ({ name: string; type: { array: (string | number)[]; }; } | { name: string; type: string; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; signer: boolean; pda?: undefined; address?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; signer?: undefined; })[]; args: ({ name: string; type: { array: (string | number)[]; option?: undefined; }; } | { name: string; type: string; } | { name: string; type: { option: string; array?: undefined; }; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; signer?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; value?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; writable: boolean; signer: boolean; pda?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; address: string; writable?: undefined; pda?: undefined; signer?: undefined; })[]; args: { name: string; type: { array: (string | number)[]; }; }[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; value?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; signer?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; pda: { seeds: { kind: string; value: number[]; }[]; }; writable?: undefined; signer?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; writable: boolean; signer: boolean; pda?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; writable: boolean; pda?: undefined; signer?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; address: string; writable?: undefined; pda?: undefined; signer?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; optional?: undefined; address?: undefined; })[]; args: { name: string; type: { array: (string | number)[]; }; }[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; signer?: undefined; } | { name: string; docs: string[]; signer: boolean; writable?: undefined; pda?: undefined; })[]; args: never[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; signer: boolean; pda?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; pda?: undefined; docs?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; value?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; optional: boolean; pda?: undefined; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; optional?: undefined; address?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; optional?: undefined; } | { name: string; docs: string[]; optional: boolean; writable?: undefined; pda?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; address: string; writable?: undefined; pda?: undefined; signer?: undefined; } | { name: string; docs: string[]; writable: boolean; pda?: undefined; signer?: undefined; optional?: undefined; address?: undefined; })[]; args: ({ name: string; type: string; } | { name: string; type: { array: (string | number)[]; }; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; value?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; optional?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; pda?: undefined; docs?: undefined; optional?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; optional?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; optional: boolean; pda?: undefined; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; signer: boolean; writable?: undefined; pda?: undefined; optional?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; optional?: undefined; signer?: undefined; address?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; docs?: undefined; optional?: undefined; signer?: undefined; })[]; args: { name: string; type: string; }[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; docs: string[]; writable: boolean; pda?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; value?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; })[]; args: never[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; optional?: undefined; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; pda?: undefined; optional?: undefined; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; optional: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; optional?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; signer: boolean; pda?: undefined; docs?: undefined; optional?: undefined; address?: undefined; } | { name: string; address: string; pda?: undefined; docs?: undefined; optional?: undefined; writable?: undefined; signer?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; optional?: undefined; writable?: undefined; signer?: undefined; address?: undefined; })[]; args: ({ name: string; type: { array: (string | number)[]; }; } | { name: string; type: string; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; pda: { seeds: { kind: string; value: number[]; }[]; }; writable?: undefined; docs?: undefined; optional?: undefined; signer?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; optional?: undefined; signer?: undefined; } | { name: string; docs: string[]; writable: boolean; pda?: undefined; optional?: undefined; signer?: undefined; } | { name: string; writable: boolean; optional: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; } | { name: string; signer: boolean; pda?: undefined; writable?: undefined; docs?: undefined; optional?: undefined; })[]; args: never[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: { kind: string; value: number[]; }[]; }; docs?: undefined; signer?: undefined; } | { name: string; pda: { seeds: { kind: string; value: number[]; }[]; }; writable?: undefined; docs?: undefined; signer?: undefined; } | { name: string; docs: string[]; writable?: undefined; pda?: undefined; signer?: undefined; } | { name: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; } | { name: string; signer: boolean; writable?: undefined; pda?: undefined; docs?: undefined; })[]; args: ({ name: string; type: string; } | { name: string; type: { array: (string | number)[]; }; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; relations?: undefined; address?: undefined; } | { name: string; writable: boolean; signer: boolean; relations: string[]; pda?: undefined; address?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; signer?: undefined; relations?: undefined; })[]; args: ({ name: string; type: { array: (string | number)[]; option?: undefined; }; } | { name: string; type: { option: { array: (string | number)[]; }; array?: undefined; }; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; writable?: undefined; signer?: undefined; relations?: undefined; } | { name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; relations?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; relations?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; docs?: undefined; signer?: undefined; relations?: undefined; } | { name: string; signer: boolean; relations: string[]; pda?: undefined; docs?: undefined; writable?: undefined; })[]; args: ({ name: string; type: string; } | { name: string; type: { array: (string | number)[]; }; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: { kind: string; value: number[]; }[]; }; signer?: undefined; } | { name: string; signer: boolean; writable?: undefined; pda?: undefined; })[]; args: ({ name: string; type: string; } | { name: string; type: { vec: string; }; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; value?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; signer?: undefined; relations?: undefined; } | { name: string; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; writable?: undefined; signer?: undefined; relations?: undefined; } | { name: string; signer: boolean; relations: string[]; writable?: undefined; pda?: undefined; })[]; args: ({ name: string; type: { array: (string | number)[]; option?: undefined; }; } | { name: string; type: string; } | { name: string; type: { option: { array: (string | number)[]; }; array?: undefined; }; } | { name: string; type: { option: string; array?: undefined; }; })[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: { kind: string; value: number[]; }[]; }; docs?: undefined; signer?: undefined; } | { name: string; docs: string[]; signer: boolean; writable?: undefined; pda?: undefined; } | { name: string; signer: boolean; writable?: undefined; pda?: undefined; docs?: undefined; })[]; args: never[]; } | { name: string; docs: string[]; discriminator: number[]; accounts: ({ name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; account?: undefined; } | { kind: string; path: string; account: string; value?: undefined; })[]; }; optional?: undefined; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; optional?: undefined; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; optional: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; writable?: undefined; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; optional: boolean; pda?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; pda?: undefined; optional?: undefined; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; writable: boolean; signer: boolean; pda?: undefined; optional?: undefined; docs?: undefined; address?: undefined; } | { name: string; writable: boolean; optional: boolean; pda?: undefined; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; optional: boolean; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; address?: undefined; } | { name: string; optional: boolean; address: string; writable?: undefined; pda?: undefined; docs?: undefined; signer?: undefined; } | { name: string; address: string; writable?: undefined; pda?: undefined; optional?: undefined; docs?: undefined; signer?: undefined; })[]; args: { name: string; type: string; }[]; })[]; accounts: { name: string; discriminator: number[]; }[]; events: { name: string; discriminator: number[]; }[]; errors: { code: number; name: string; msg: string; }[]; types: ({ name: string; docs: string[]; repr: { kind: string; }; type: { kind: string; variants: { name: string; }[]; fields?: undefined; }; } | { name: string; docs: string[]; type: { kind: string; fields: ({ name: string; docs: string[]; type: string; } | { name: string; docs: string[]; type: { defined: { name: string; }; }; } | { name: string; type: string; docs?: undefined; })[]; variants?: undefined; }; repr?: undefined; } | { name: string; docs: string[]; type: { kind: string; fields: ({ name: string; type: { array: (string | number)[]; option?: undefined; }; docs?: undefined; } | { name: string; type: string; docs?: undefined; } | { name: string; docs: string[]; type: { option: string; array?: undefined; }; })[]; variants?: undefined; }; repr?: undefined; } | { name: string; docs: string[]; type: { kind: string; fields: ({ name: string; type: { array: (string | number)[]; }; docs?: undefined; } | { name: string; type: string; docs?: undefined; } | { name: string; docs: string[]; type: string; } | { name: string; docs: string[]; type: { array: (string | number)[]; }; })[]; variants?: undefined; }; repr?: undefined; } | { name: string; docs: string[]; type: { kind: string; fields: ({ name: string; type: string; docs?: undefined; } | { name: string; docs: string[]; type: string; } | { name: string; type: { array: (string | number)[]; option?: undefined; }; docs?: undefined; } | { name: string; type: { option: string; array?: undefined; }; docs?: undefined; })[]; variants?: undefined; }; repr?: undefined; } | { name: string; docs: string[]; type: { kind: string; fields: ({ name: string; docs: string[]; type: string; } | { name: string; docs: string[]; type: { option: { array: (string | number)[]; }; array?: undefined; }; } | { name: string; docs: string[]; type: { array: (string | number)[]; option?: undefined; }; })[]; variants?: undefined; }; repr?: undefined; } | { name: string; docs: string[]; type: { kind: string; fields: ({ name: string; docs: string[]; type: string; } | { name: string; docs: string[]; type: { array: (string | number)[]; option?: undefined; defined?: undefined; }; } | { name: string; docs: string[]; type: { option: string; array?: undefined; defined?: undefined; }; } | { name: string; docs: string[]; type: { defined: { name: string; }; array?: undefined; option?: undefined; }; })[]; variants?: undefined; }; repr?: undefined; } | { name: string; docs: string[]; type: { kind: string; fields: ({ name: string; type: string; docs?: undefined; } | { name: string; docs: string[]; type: string; } | { name: string; docs: string[]; type: { option: string; }; })[]; variants?: undefined; }; repr?: undefined; } | { name: string; docs: string[]; type: { kind: string; fields: ({ name: string; type: string; docs?: undefined; } | { name: string; type: { array: (string | number)[]; defined?: undefined; }; docs?: undefined; } | { name: string; type: { defined: { name: string; }; array?: undefined; }; docs?: undefined; } | { name: string; docs: string[]; type: string; })[]; variants?: undefined; }; repr?: undefined; } | { name: string; docs: string[]; type: { kind: string; fields: ({ name: string; type: string; docs?: undefined; } | { name: string; type: { defined: { name: string; }; option?: undefined; }; docs?: undefined; } | { name: string; type: { option: string; defined?: undefined; }; docs?: undefined; } | { name: string; docs: string[]; type: string; })[]; variants?: undefined; }; repr?: undefined; } | { name: string; docs: string[]; type: { kind: string; variants: { name: string; }[]; fields?: undefined; }; repr?: undefined; })[]; }; declare const AGENC_PROTOCOL_MANIFEST: { program: { name: string; address: string; version: string; spec: string; }; artifacts: { idl: { path: string; sha256: string; }; types: { path: string; sha256: string; }; verifierRouterIdl: { path: string; }; }; }; declare const VERIFIER_ROUTER_IDL: { address: string; metadata: { name: string; version: string; spec: string; description: string; }; docs: string[]; instructions: ({ name: string; discriminator: number[]; accounts: ({ name: string; docs: string[]; pda: { seeds: { kind: string; value: number[]; }[]; program?: undefined; }; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; program?: undefined; }; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; pda: { seeds: { kind: string; path: string; }[]; program: { kind: string; value: number[]; }; }; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; pda?: undefined; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; signer: boolean; pda?: undefined; address?: undefined; } | { name: string; docs: string[]; address: string; pda?: undefined; writable?: undefined; signer?: undefined; })[]; args: { name: string; type: { array: (string | number)[]; }; }[]; } | { name: string; discriminator: number[]; accounts: ({ name: string; docs: string[]; pda: { seeds: { kind: string; value: number[]; }[]; }; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; writable: boolean; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; signer: boolean; pda?: undefined; writable?: undefined; address?: undefined; } | { name: string; docs: string[]; pda?: undefined; writable?: undefined; signer?: undefined; address?: undefined; } | { name: string; docs: string[]; address: string; pda?: undefined; writable?: undefined; signer?: undefined; })[]; args: ({ name: string; type: { array: (string | number)[]; defined?: undefined; }; } | { name: string; type: { defined: { name: string; }; array?: undefined; }; })[]; } | { name: string; discriminator: number[]; accounts: ({ name: string; writable: boolean; signer?: undefined; } | { name: string; writable: boolean; signer: boolean; })[]; args: { name: string; type: string; }[]; } | { name: string; discriminator: number[]; accounts: ({ name: string; docs: string[]; pda: { seeds: ({ kind: string; value: number[]; path?: undefined; } | { kind: string; path: string; value?: undefined; })[]; }; address?: undefined; } | { name: string; docs: string[]; pda?: undefined; address?: undefined; } | { name: string; address: string; docs?: undefined; pda?: undefined; })[]; args: ({ name: string; type: { defined: { name: string; }; array?: undefined; }; } | { name: string; type: { array: (string | number)[]; defined?: undefined; }; })[]; })[]; accounts: { name: string; discriminator: number[]; }[]; events: { name: string; discriminator: number[]; }[]; errors: { code: number; name: string; msg: string; }[]; types: ({ name: string; docs: string[]; type: { kind: string; fields: ({ name: string; type: string; } | { name: string; type: { array: (string | number)[]; }; })[]; }; } | { name: string; docs: string[]; type: { kind: string; fields: { name: string; docs: string[]; type: { option: string; }; }[]; }; } | { name: string; docs: string[]; type: { kind: string; fields: ({ name: string; type: { array: (string | number)[]; defined?: undefined; }; } | { name: string; type: { defined: { name: string; }; array?: undefined; }; })[]; }; })[]; }; declare const AGENC_COORDINATION_PROGRAM_ADDRESS: string; export { AGENC_COORDINATION_IDL, AGENC_COORDINATION_PROGRAM_ADDRESS, AGENC_PROTOCOL_MANIFEST, type AgencCoordination, VERIFIER_ROUTER_IDL };