solana-program and borsh. They mirror the same surfaces as the EVM contracts: ERC-8004 (identity, reputation, validation) and ERC-7401-style composition (workflows), rebuilt with Solana idioms instead of ported instruction-by-instruction.
Where the EVM suite deploys one contract per feature, the Solana side consolidates: identity absorbs cloning and warping, and a single market program carries workflows, licensing, RFA escrow, leases, royalties, and payments.
The four programs
A shared Rust crate,
manowar, holds everything the programs agree on: PDA seeds, the account serialization format, one error enum, fixed-point math, and a hand-rolled SPL Token transfer CPI.
The “ABI”
There is no IDL to fetch. An instruction’s data is a borsh-serialized enum: the first byte is the variant’s ordinal (0, 1, 2… in declaration order), followed by the variant’s fields in borsh order.bool is one byte, String/Vec are a u32 length prefix then the payload, Pubkey and [u8; 32] are 32 inline bytes. Every program page lists its instructions with their tag, arguments, and the accounts they expect — accounts are passed the usual Solana way, as an ordered list.
Everything shared about accounts — the length-prefixed layout, the PDA conventions, the Agent struct, error codes, limits — lives once in Accounts & Encoding.
Architecture
All four programs agree on one convention: an agent is a PDA of the identity program at[b"agent", agent_id_le]. Reputation, validation, and market read those accounts cross-program (owner-checked — no CPI). The one real CPI between programs is market → identity, to consume or revoke a license when an agent joins or leaves a workflow, signed by market’s market-authority PDA. The only other CPI in the suite is SPL Token Transfer (license fees, RFA escrow, lease splits).
Build with the SDK
You don’t need to hand-roll any of this. The TypeScript SDK ships PDA helpers, instruction encoders, account decoders, and ready-made builders for the common write paths:identity.mint, identity.warp, market.mintWorkflow, and market.createRfa. For everything else, the SDK exports the raw encoders (encodeIdentityInstruction, encodeMarketInstruction), every PDA helper (identityPdas, marketPdas, reputationPdas, validationPdas), and typed account decoders — see Accounts & Encoding for those. The main write paths are also exposed as HTTP build endpoints (solana_identity_mint_build, solana_market_mint_workflow_build) if your signer lives elsewhere.
Where to next
Identity
Mint, clone, warp, licensing — the agent registry.
Reputation
Fixed-point feedback, revocation, responses.
Validation
Validation requests and validator responses.
Market
Workflows, RFA escrow, leases, royalties, splits.
Accounts & Encoding
The shared layout: borsh, seeds, errors, limits.
EVM ↔ Solana Parity
How the two implementations map onto each other.