Skip to main content

Protocols

Protocol adapters abstract blockchain interactions into a unified interface. They handle quote generation, transaction building, and protocol-specific logic.

Protocol Adapter Interface

Supported Protocols

Agentic Wallet includes adapters for 9 protocols:

System Program

Native SOL transfers
  • transfer_sol
  • Program ID: 11111111111111111111111111111111

SPL Token

Token operations
  • transfer_spl
  • create_mint
  • mint_token
  • Program ID: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA

Jupiter

DEX aggregator
  • swap (quote + build)
  • Version: 1.0.0
  • API: https://lite-api.jup.ag/swap/v1

Marinade

Liquid staking
  • stake
  • unstake
  • Capabilities: stake, unstake

Solend

Lending protocol
  • lend_supply
  • lend_borrow
  • Fail-closed quotes

Metaplex

NFT operations
  • NFT minting
  • Metadata creation

Orca

DEX and liquidity
  • swap
  • Whirlpools support

Raydium

AMM and farms
  • swap
  • Pool interactions

Escrow

Custom escrow program
  • create_escrow
  • accept_escrow
  • release_escrow
  • refund_escrow
  • dispute_escrow
  • resolve_dispute
Solend, Orca, and Raydium adapters now fail closed instead of returning synthetic quotes. This prevents execution if external APIs are unavailable.

Protocol Registry

The AdapterRegistry manages protocol lifecycle:

Listing Protocols

Response:

Protocol Capabilities

Query specific protocol capabilities:
Response:

Quote/Build Flow

Protocol adapters follow a two-phase pattern:

1. Quote Phase (Read-Only)

Generate a quote without executing:
Example:

2. Build Phase (Transaction Construction)

Convert quote into executable transaction:
Example flow:

Protocol-Specific Operations

Jupiter Swaps

Marinade Staking

Solend Lending

Escrow Operations

The escrow adapter requires a deployed escrow program. Set ESCROW_PROGRAM_ID in your environment. This repository does not ship a pre-deployed program artifact.

Protocol Health Checks

Adapters can implement health checks:

Checking Health

Response:

Protocol Versioning

Adapters use semantic versioning. Check compatibility:
Response:
Compatibility rules:
  • Same major version: Compatible
  • Different major version: Incompatible (breaking changes)

Intent Migration

Migrate intents between adapter versions:
Example migration:

Migrating Intents

Response:

Generic Build Endpoint

Build transactions for any protocol/intent combination:

Configuration

Best Practices

  1. Use jupiter for best swap prices (aggregates multiple DEXes)
  2. Use marinade for liquid staking (mSOL receipt tokens)
  3. Check protocol health before execution
  4. Implement fallback protocols for critical paths
  5. Monitor adapter version updates
  1. Always fetch fresh quotes (quotes expire quickly)
  2. Validate slippage before execution
  3. Check priceImpactPct for large trades
  4. Handle quote failures gracefully (fail-closed)
  5. Don’t cache quotes across requests
  1. DEX adapters may fail if external APIs are down
  2. Implement retries for transient failures
  3. Check AdapterHealth before submission
  4. Validate programIds match expected values
  5. Monitor adapter error rates
  1. Validate program IDs returned in BuildResult
  2. Use protocol allowlists in policies
  3. Set per-protocol risk rules
  4. Audit adapter code before production use
  5. Monitor for unexpected protocol behavior

Source Code Reference

Protocol adapter functionality is implemented in:
  • services/protocol-adapters/src/index.ts - Main service (services/protocol-adapters/src/index.ts:1)
  • services/protocol-adapters/src/registry.ts - Adapter registry (services/protocol-adapters/src/registry.ts:1)
  • services/protocol-adapters/src/adapters/adapter.interface.ts - Interface definitions (services/protocol-adapters/src/adapters/adapter.interface.ts:1)
  • services/protocol-adapters/src/adapters/jupiter.adapter.ts - Jupiter implementation (services/protocol-adapters/src/adapters/jupiter.adapter.ts:1)
  • services/protocol-adapters/src/adapters/escrow.adapter.ts - Escrow implementation (services/protocol-adapters/src/adapters/escrow.adapter.ts:1)