Skip to main content
MPCVault supports native coin and SPL token transfers and custom program transactions on Solana and Sonic SVM, plus Solana message signing.

Networks

The payload field selects the network. chainId is ignored for these transaction payloads. Examples use API client signing.

Signing request types

To sign transactions you build yourself or messages you format yourself, use raw signing.

Wallet

Create a wallet with networkType: "NETWORK_TYPE_SOLANA". Fund it with SOL for transfers, transaction fees and any token-account creation, plus the token balance for token transfers. For Sonic SVM, fund the wallet on Sonic SVM and use its native fee balance and token mints.

Send SOL

This Solana Mainnet example sends 0.01 SOL. CreateSigningRequest
value is an integer string in lamports: 1 SOL = 1,000,000,000 lamports. to is a wallet address, rather than an SPL token account.

Send USDC

Replace solanaSendNative with this payload in the same request. This example sends 1 USDC on Solana Mainnet.
amount: "1000000" sends 1 USDC (six decimals). The example uses Circle’s Solana Mainnet USDC mint. to can be the recipient wallet or an existing USDC token account. SOL pays transaction fees and any token-account creation.

Call a program

Build a transaction containing your program instructions, then replace solanaSendNative with solanaSendCustom:
txBase64 accepts one to five serialized transactions in legacy or v0 format, each encoded as standard base64. The from wallet signs every transaction; any other required signatures are already present. When a transaction has no existing signatures, MPCVault refreshes its recent blockhash before signing. A transaction carrying another signer’s signature keeps its blockhash and can expire while awaiting execution. For individual txHash tracking, submit one transaction per request; a custom request containing multiple transactions returns only the first transaction’s hash.

Use Sonic SVM

Use sonicSvmSendNative, sonicSvmSendSplToken or sonicSvmSendCustom in place of the corresponding Solana payload. Their fields and encoding are the same. For example, a program call on Sonic SVM uses:

Sign and track

Sign the request, then query the returned txHash as follows. The UUID identifies the signing request; the returned txHash is the transaction’s first signature in base58. Query getSignatureStatuses on the network selected by the payload:
Use txHash as <TRANSACTION_SIGNATURE>. In result.value[0], err: null with confirmationStatus: "finalized" indicates successful, finalized execution; a non-null err reports transaction failure. A null entry means the provider has no status; poll with an interval and timeout. After a timeout, check the existing request and on-chain result before creating another request.

Sign a Solana message

Use this payload with the shared message-signing flow:
content is standard base64 of the message bytes. This example signs the UTF-8 text MPCVault example; printable ASCII and valid UTF-8 are supported. solanaMessage has no Sonic SVM network selector.