Non Custodial Flow
LaserSell never touches your private key. Every transaction follows this pattern:- Build: The API returns a base64 encoded unsigned
VersionedTransaction. - Sign: You decode, sign, and re encode locally using your keypair.
- Submit: You send the signed transaction to the Solana network via a send target.
Loading a Keypair
All SDKs expect a Solana keypair. The standard format is a JSON file containing an array of 64 bytes (as used bysolana-keygen).
Signing Functions
Standard Sign
Decodes the unsigned transaction, signs it with your keypair, and returns a signedVersionedTransaction object.
Fast Sign (TypeScript)
The TypeScript SDK providessignUnsignedTxB64Fast, which signs the raw bytes in place without deserializing through VersionedTransaction. This avoids allocation on the hot path and returns the signed transaction as a base64 string directly.
Sign and Send (One Step)
Combines signing and submission into a single call.Submitting the Signed Transaction
After signing, submit to the Solana network using a send target:Error Types
Signing and submission errors are surfaced throughTxSubmitError:
| Kind | Description |
|---|---|
decode_unsigned_tx | Base64 decoding of the unsigned transaction failed. |
deserialize_unsigned_tx | Transaction bytes could not be deserialized. |
sign_tx | Signing failed (wrong keypair, corrupted data). |
serialize_tx | Serialization of the signed transaction failed. |
request_send | Network error during submission. |
response_read | Could not read the RPC response body. |
http_status | Non 2xx HTTP response from the RPC endpoint. |
decode_response | Response body was not valid JSON. |
rpc_error | RPC returned an error object. |
missing_result | Response did not contain a transaction signature. |
Security Best Practices
- Never log or transmit your private key.
- Load keys from environment variables or encrypted files in production.
- Verify the wallet address matches the
user_pubkeyused in the build request. The API constructs the transaction for that specific signer.

