arcium-program-development
npx skills add https://github.com/sicmundu/arcium-program-skill --skill arcium-program-development
Agent 安装分布
Skill 文档
Arcium Program Development
Use this skill to implement and debug Arcium computations end-to-end with strict contracts across Arcis circuits, Anchor program wiring, callback verification, and client/test encryption flow.
Decision Tree (Task Classification)
Classify the request before editing code:
- Stateless computation (e.g., Coinflip)
- No persistent encrypted state account update.
- Usually one encrypted input and one revealed/encrypted output.
- Read first:
references/implementation-playbook.md,references/callback-output-shapes.md.
- Stateful encrypted account flow (e.g., Voting, Sealed Bid, Blackjack)
- Requires
.account(pubkey, offset, len)with exact byte layout. - Usually callback writes ciphertext + nonce to account state.
- Read first:
references/account-layout-offsets.md,references/implementation-playbook.md.
- Permission-gated flow (e.g., Encrypted DNA matching)
- Constraints and status transitions determine whether queueing is allowed.
- Read first:
references/permission-and-state-machines.md,references/examples-patterns.md.
- Offchain circuit source flow
init_comp_defusesCircuitSource::OffChainandcircuit_hash!.- Read first:
references/docs-and-migrations.md,references/troubleshooting-matrix.md.
- Migration or compatibility update
- Update Rust/TypeScript dependencies and API call signatures first.
- Read first:
references/docs-and-migrations.md,references/anti-patterns.md.
- Debugging request
- Triaged by stage: encryption -> queue -> callback verify -> finalization.
- Read first:
references/troubleshooting-matrix.md,references/test-client-patterns.md.
Mandatory Build Contract
Keep these invariants aligned in every implementation:
- Circuit function name (
#[instruction]) must matchcomp_def_offset("...")identifier. - Program callback macro must match instruction name:
#[arcium_callback(encrypted_ix = "<ix_name>")]
- Callback output type must match generated type:
SignedComputationOutputs<<IxName>Output>
- Queue and callback contexts must reference the same comp-def account and cluster derivation.
- Every callback must call
verify_output(&cluster_account, &computation_account)before consuming output. init_*_comp_defmust exist for every queued encrypted instruction.
ArgBuilder Contract (Strict Ordering)
Enc<Shared, T> input contract
Order is strict and must be preserved:
x25519_pubkey(<client_pubkey>)plaintext_u128(<nonce>)- encrypted fields in exact circuit argument order (
encrypted_u8/u16/u32/u64/u128/bool/...)
Enc<Mxe, T> input contract
Order is strict and must be preserved:
plaintext_u128(<mxe_nonce>)- encrypted fields in exact circuit argument order
Account-backed encrypted state contract
Use:
.account(<state_account>, <byte_offset>, <byte_len>)
Rules:
- Offset must start after Anchor discriminator (
8) plus preceding fixed fields. - Length must match ciphertext field count times
32bytes (or packed struct contract). - Add inline comments documenting offset derivation.
See detailed formulas and examples in references/account-layout-offsets.md.
Callback Output Parsing Contract
Two common shapes are generated:
- Simple shape
Ok(MyIxOutput { field_0 }) => field_0
Used for single output structs/values.
- Nested shape
Ok(MyIxOutput {
field_0: MyIxOutputStruct0 {
field_0: a,
field_1: b,
field_2: c,
},
}) => (a, b, c)
Used when return type is a tuple or multi-field struct.
Mandatory checks:
- Verify output before parsing.
- Check ciphertext cardinality when business logic expects exact count.
- Persist/emit only after successful verification and shape checks.
See references/callback-output-shapes.md.
Account Offset Contract
Use this formula for encrypted payload start:
offset = 8 (Anchor discriminator) + sum(size of preceding account fields)
Examples:
- Voting counters:
8 + 1(discriminator + bump) - Sealed auction encrypted state:
8 + 1 + 32 + 1 + 1 + 8 + 8 + 1 + 16 - DNA markers block:
8 + 32 + 16 + 32
When adding or reordering account fields, recompute offsets immediately.
Failure Triage Tree
- Encryption stage failure
- Symptoms: decrypt mismatch, invalid nonce usage, unusable ciphertext.
- Check x25519 keypair generation, nonce serialization (
deserializeLE), shared secret pairing. - Reference:
references/test-client-patterns.md,references/troubleshooting-matrix.md.
- Queue stage failure
- Symptoms: account not found, constraint errors, custom program errors.
- Check cluster offset, PDA derivation, comp-def account offset, account ordering, constraint seeds.
- Reference:
references/account-layout-offsets.md,references/permission-and-state-machines.md.
- Callback verify failure
- Symptoms:
AbortedComputation, output parse mismatch. - Check comp-def alignment, callback macro ix name, generated output shape assumptions.
- Reference:
references/callback-output-shapes.md.
- Finalization stage failure
- Symptoms: queue tx confirmed but no resolved result.
- Check
awaitComputationFinalization(...)usage, computation offset mismatch, event listener sequencing. - Reference:
references/test-client-patterns.md,references/troubleshooting-matrix.md.
Templates (Scaffolding)
Use templates in assets/templates to start implementations quickly:
assets/templates/new-computation/arcis-instruction.rs.tplassets/templates/new-computation/program-flow.rs.tplassets/templates/new-computation/callback.rs.tplassets/templates/new-computation/init-comp-def.rs.tplassets/templates/new-computation/e2e-test.ts.tplassets/templates/offchain-circuit/init-comp-def-offchain.rs.tplassets/templates/permissioned-flow/accounts-and-constraints.rs.tpl
Replace placeholders such as <IX_NAME>, <PROGRAM_ID>, <STATE_OFFSET>, <STATE_LEN>.
Task Routing
-
End-to-end implementation workflow: Read
references/implementation-playbook.md. -
Pattern selection by example: Read
references/examples-patterns.md. -
Account layout and offset math: Read
references/account-layout-offsets.md. -
Callback output decoding: Read
references/callback-output-shapes.md. -
Permissions and state transitions: Read
references/permission-and-state-machines.md. -
Test/client orchestration: Read
references/test-client-patterns.md. -
Migrations and deployment: Read
references/docs-and-migrations.md. -
Failure triage: Read
references/troubleshooting-matrix.md. -
What to avoid: Read
references/anti-patterns.md.
Definition of Done
Code changes are complete only when all checks pass:
- Structural/build checks:
arcium build
cargo check --all
arcium test
- Skill checks:
python3 /Users/grisahudozestvennyj/.codex/skills/.system/skill-creator/scripts/quick_validate.py /Users/grisahudozestvennyj/Documents/projects/arcium/dna/skills/arcium-program-development
rg -n "[\p{Cyrillic}]" /Users/grisahudozestvennyj/Documents/projects/arcium/dna/skills/arcium-program-development || true
- Functional acceptance checks:
- Circuit name, comp-def offset, callback macro, and callback output type are aligned.
- ArgBuilder order matches circuit input ownership contract.
- Offset constants match actual account layout and are documented.
- Callback verifies output before parsing/persisting.
- Tests wait for computation finalization and validate expected results.
Delivery Standard
- Produce concrete code edits, not abstract guidance.
- Preserve existing seed derivation and PDA conventions unless migration requires changes.
- State assumptions explicitly when required inputs are missing.
- End with executed validation commands and any remaining risk notes.