IBExWalletAPI
Chains

Solana Integration

Solana EOA Flow

  • Tag: Blockchain
  • Auth: JWT
  • Audience: EXTERNAL

Overview

This section documents the Solana EOA (externally-owned account) flow exposed via the generic endpoint POST /v1.2/safes/operations. These operations are off-chain preparation and status helpers for Solana transactions and do not create Safe operations on EVM chains.

  • Supported Solana operation types (as string keys in the operations array):

    • SOLANA_PREPARE
    • SOLANA_SIGN
    • SOLANA_SEND
    • SOLANA_CONFIRM
    • SOLANA_STATUS
  • All requests accept an optional X-Blockchain-Id or chainId in body to target the Solana network configured in the system. Clients should provide the correct Solana blockchain id.


POST /v1.2/safes/operations (Solana usage)

  • Use the common endpoint and pass a single operation per request for simplicity.

  • The body must include a dummy safeAddress (your EVM Safe address) for authentication consistency, but no EVM operation will be built.

  • Request example (SOLANA_PREPARE)

{
  "safeAddress": "0xYourEvmSafe",
  "chainId": 1399811149,
  "operations": [
    {
      "type": "SOLANA_PREPARE",
      "instructions": ["<base64-instruction>", "<base64-instruction>"],
      "payer": "<base58-public-key>",
      "recentBlockhash": "<blockhash>",
      "lastValidBlockHeight": 265000000,
      "computeUnitPriceMicroLamports": 1000,
      "computeUnitLimit": 800000
    }
  ]
}
  • Response example
{
  "credentialRequestOptions": { /* WebAuthn options */ },
  "prepared": {
    "message": "<base64-message>",
    "meta": {
      "recentBlockhash": "<blockhash>",
      "expiresAtBlock": 265000400
    }
  }
}
  • Operation schemas
    • SOLANA_PREPARE
      • instructions: array of base64-encoded Solana instructions
      • payer: base58 public key
      • recentBlockhash: string
      • lastValidBlockHeight: number
      • computeUnitPriceMicroLamports (optional): number
      • computeUnitLimit (optional): number
      • sponsored (optional): boolean. If true, the server acts as fee payer (subject to policy limits).
    • SOLANA_SIGN
      • message: base64 message to sign
    • SOLANA_SEND
      • transaction: base64 signed transaction
      • sponsored (optional): boolean. If true, client provides user signatures and the server adds the fee payer signature and relays.
    • SOLANA_CONFIRM
      • signature: base58 string
      • commitment: one of processed, confirmed, finalized
      • timeoutMs (optional): number
    • SOLANA_STATUS
      • signature: base58 string

Notes:

  • These operations are exposed as string keys (not added to the Prisma OperationType enum), similar to BITCOIN_SEND.
  • The server returns WebAuthn credentialRequestOptions to authorize, but does not sign Solana payloads server-side.

Transaction status (alias vs BCReader)

  • Preferred: use existing BCReader endpoints with the Solana blockchain id:

    • GET /v1.2/bcreader/transactions?blockchainId=<SOLANA_ID>&signature=<SIG>``
    • GET /v1.2/bcreader/balances?blockchainId=<SOLANA_ID>&address=<PUBKEY>``
  • Optional alias (if enabled by deployment): GET /solana/tx/:signature may proxy to BCReader transactions for convenience. If not present in your deployment, use the BCReader endpoints above.


Examples

  • Sign
{
  "safeAddress": "0xYourEvmSafe",
  "operations": [ { "type": "SOLANA_SIGN", "message": "<base64>" } ]
}
  • Send
{
  "safeAddress": "0xYourEvmSafe",
  "operations": [ { "type": "SOLANA_SEND", "transaction": "<base64-signed-tx>" } ]
}
  • Confirm
{
  "safeAddress": "0xYourEvmSafe",
  "operations": [ { "type": "SOLANA_CONFIRM", "signature": "<base58>", "commitment": "confirmed" } ]
}
  • Status
{
  "safeAddress": "0xYourEvmSafe",
  "operations": [ { "type": "SOLANA_STATUS", "signature": "<base58>" } ]
}

On this page