Skip to main content
Comprehensive type definitions used throughout the Wallets SDK.

Core Types

Chain

type Chain = EVMChain | SolanaChain | StellarChain

type EVMChain = 
  | "ethereum" 
  | "polygon" 
  | "base" 
  | "arbitrum" 
  | "optimism"
  | "bsc"
  | "avalanche"
  // ... and other EVM chains

type SolanaChain = "solana"
type StellarChain = "stellar"
Blockchain network identifier.

WalletArgsFor<C>

type WalletArgsFor<C extends Chain> = {
  chain: C;
  signer: SignerConfigForChain<C>;
  owner?: string;
  plugins?: WalletPlugin<C>[];
  options?: WalletOptions;
  delegatedSigners?: Array<DelegatedSigner>;
  alias?: string;
}
Configuration for creating or retrieving a wallet.
chain
Chain
required
The blockchain network
signer
SignerConfigForChain<C>
required
Signer configuration for authentication
owner
string
Optional owner identifier
plugins
WalletPlugin<C>[]
Optional wallet plugins
options
WalletOptions
Optional wallet configuration
delegatedSigners
DelegatedSigner[]
Optional delegated signers
alias
string
Optional wallet alias

WalletOptions

type WalletOptions = {
  experimental_callbacks?: Callbacks;
  clientTEEConnection?: HandshakeParent<
    typeof signerOutboundEvents,
    typeof signerInboundEvents
  >;
}
Optional wallet configuration.

Balance Types

Balances<C>

type Balances<C extends Chain = Chain> = {
  nativeToken: TokenBalance<C>;
  usdc: TokenBalance<C>;
  tokens: TokenBalance<C>[];
}
Wallet balance information.

TokenBalance<C>

type TokenBalance<C extends Chain = Chain> = {
  symbol: "sol" | "eth" | "usdc" | string;
  name: string;
  amount: string;
  decimals?: number;
  rawAmount?: string;
} & ChainExtras[ChainToExtrasKey<C>]

// Chain-specific extras:
// For EVM: { contractAddress?: string }
// For Solana: { mintHash?: string }
// For Stellar: { contractId?: string }
Token balance with chain-specific metadata.
symbol
string
Token symbol (e.g., “eth”, “usdc”)
name
string
Token name
amount
string
Formatted amount in decimal units
decimals
number
Number of decimal places
rawAmount
string
Raw amount in smallest unit (wei, lamports, stroops)
contractAddress
string
EVM only: Token contract address
mintHash
string
Solana only: SPL token mint address
contractId
string
Stellar only: Token contract ID

Transaction Types

Transaction<TPrepareOnly>

type Transaction<TPrepareOnly extends boolean = false> = 
  TPrepareOnly extends true
    ? {
        hash?: string;
        explorerLink?: string;
        transactionId: string;
      }
    : {
        hash: string;
        explorerLink: string;
        transactionId: string;
      }
Transaction result. Fields are optional if prepareOnly is true.

TransactionInputOptions

type TransactionInputOptions = PrepareOnly & {
  experimental_signer?: string;
}

type PrepareOnly<T extends boolean = boolean> = {
  experimental_prepareOnly: T;
}
Options for transaction creation.
experimental_prepareOnly
boolean
If true, creates transaction without auto-approving
experimental_signer
string
Custom signer locator

SendTokenTransactionOptions

type SendTokenTransactionOptions = TransactionInputOptions & {
  transactionType?: SendTokenTransactionType;
}

type SendTokenTransactionType = "onramp" | "regulated-transfer" | "direct"
Options for token send transactions.

UserLocator

type UserLocator =
  | { email: string }
  | { x: string }
  | { twitter: string }
  | { phone: string }
  | { userId: string }
Recipient identifier for sending tokens.

EVM-Specific Types

EVMTransactionInput

type EVMTransactionInput = EVMTransactionInputBase &
  (
    | {
        to: string;
        functionName?: string;
        args?: unknown[];
        value?: bigint;
        abi?: Abi;
        data?: `0x${string}`;
      }
    | { transaction: string }
  )

type EVMTransactionInputBase = {
  options?: TransactionInputOptions;
}
EVM transaction parameters. Supports ABI calls, encoded data, or raw transactions.

FormattedEVMTransaction

type FormattedEVMTransaction =
  | {
      to: string;
      value: string;
      data: string;
    }
  | { transaction: string }
Formatted EVM transaction for API submission.

Signature Types

Signature<TPrepareOnly>

type Signature<TPrepareOnly extends boolean = false> = 
  TPrepareOnly extends true
    ? {
        signature?: string;
        signatureId: string;
      }
    : {
        signature: string;
        signatureId: string;
      }
Signature result. signature is optional if prepareOnly is true.

SignMessageInput

type SignMessageInput = {
  message: string;
  options?: SignatureInputOptions;
}

type SignatureInputOptions = PrepareOnly
Parameters for signing a message.

SignTypedDataInput

type SignTypedDataInput = TypedDataDefinition<TypedData, string> & {
  chain: EVMSmartWalletChain;
  options?: SignatureInputOptions;
}
Parameters for signing EIP-712 typed data.

Solana-Specific Types

SolanaTransactionInput

import type { Keypair, VersionedTransaction } from "@solana/web3.js";

type SolanaTransactionInput = (
  | {
      transaction: VersionedTransaction;
    }
  | {
      serializedTransaction: string;
    }
) & {
  additionalSigners?: Keypair[];
  options?: TransactionInputOptions;
}
Solana transaction parameters. Supports VersionedTransaction or serialized string.

Stellar-Specific Types

StellarTransactionInput

type StellarTransactionInput = (
  | {
      contractId: string;
      method: string;
      memo?: string;
      args: Record<string, any>;
    }
  | {
      transaction: string;
      contractId: string;
    }
) & {
  options?: TransactionInputOptions;
}
Stellar transaction parameters. Supports contract calls or serialized transactions.

Approval Types

ApproveParams

type ApproveParams = {
  transactionId?: string;
  signatureId?: string;
  options?: ApproveOptions;
}
Parameters for approving a transaction or signature.

ApproveOptions

type ApproveOptions = {
  experimental_approval?: Approval;
  additionalSigners?: Signer[];
}
Options for approval.

ApproveResult<T>

type ApproveResult<T extends ApproveParams> = 
  T extends { transactionId: string }
    ? Transaction<false>
    : T extends { signatureId: string }
      ? Signature<false>
      : Error
Result type based on what was approved.

Approval

type Approval = (BaseSignResult | PasskeySignResult) & {
  signer: string;
}
External approval signature.

Delegated Signer Types

DelegatedSigner

type DelegatedSigner = {
  signer: string;
}
Delegated signer in format external-wallet:address.

AddDelegatedSignerOptions

type AddDelegatedSignerOptions = PrepareOnly
Options for adding a delegated signer.

AddDelegatedSignerReturnType<C>

type AddDelegatedSignerReturnType<C extends Chain> = 
  C extends "solana" | "stellar"
    ? { transactionId: string }
    : { signatureId: string }
Return type when using prepareOnly with addDelegatedSigner().

Activity Types

Activity

type Activity = WalletsV1Alpha2ActivityResponseDto
Wallet activity data including transactions and transfers.

Example Usage

import type {
  Chain,
  WalletArgsFor,
  Transaction,
  Balances,
  UserLocator,
  EVMTransactionInput,
  SolanaTransactionInput,
  StellarTransactionInput
} from "@crossmint/wallets";

// Typed wallet creation
const walletArgs: WalletArgsFor<"ethereum"> = {
  chain: "ethereum",
  signer: {
    type: "evm-keypair",
    privateKey: "0x..."
  }
};

// Typed transaction result
const tx: Transaction<false> = await wallet.send(
  "0x...",
  "usdc",
  "10.0"
);

// Typed balances
const balances: Balances<"ethereum"> = await wallet.balances();
console.log(balances.nativeToken.amount); // ETH amount

// User locator
const recipient: UserLocator = { email: "[email protected]" };
await wallet.send(recipient, "usdc", "5.0");

// Chain-specific transactions
const evmTx: EVMTransactionInput = {
  to: "0x...",
  value: 1000000000000000000n, // 1 ETH in wei
  data: "0x"
};

const solanaTx: SolanaTransactionInput = {
  serializedTransaction: "base58-encoded-tx"
};

const stellarTx: StellarTransactionInput = {
  contractId: "CONTRACT_ID",
  method: "transfer",
  args: { to: "GCEXAMPLE...", amount: 1000000 }
};

Build docs developers (and LLMs) love