Normalized, serializable view of a deposit at a single lifecycle phase — delivered by the onDepositEvent callback and the deposit:lifecycle event, and the basis for the notification UI. id is stable across phase transitions.
interface FundingConfig { enabled: boolean; // Master switch (default: false) apiKey?: string; // Moralis key for DIRECT browser calls — dev/PoC only proxyUrl?: string; // Your own reverse proxy (injects the key server-side) balanceProvider?: BalanceProvider; // Replace balance discovery entirely evmRpcUrls?: Record<number, string>; // Per-chain EVM RPC overrides solanaRpcUrl?: string; // Solana RPC for building SPL/native transfers minValueUSD?: number; // Min USD value for a balance to be offered}
// A connected browser wallet used as a funding source.interface FundingWallet { evm?: { provider: unknown; address: string }; // EIP-1193 provider + address solana?: { provider: unknown; address: string }; // Solana wallet provider + address}// Options when transferring a discovered balance.interface FundOptions { rawAmount?: bigint; // Omit for the gas-adjusted max}// Result of a fund-from-wallet transfer.interface FundingTransferResult { txHash: string; // …plus chain/token/amount metadata for the submitted transfer}// FundingBalance is the descriptor returned by getWalletBalances() — pass one// straight back into fundFromWallet(). Treat it as opaque; don't construct it by hand.
You can provide your own Particle project ID via the uaProjectId config option.
uaProjectId only affects Universal Account operations (smart account initialization and asset queries). The intermediary wallet authentication (JWT + Auth Core session) always uses the SDK’s built-in credentials — this is by design and cannot be overridden.
This is useful if you want to handle your own app fees. If you use your own project ID, deposits are subject to a 1% fee going to Particle. Reach out to configure a custom rate and establish a revenue sharing model.
Surface deposit progress to your users. Set notifications: true on DepositProvider to auto-mount the toaster, build a custom UI with the useDepositNotifications hook, or go headless with the onDepositEvent callback / deposit:lifecycle event — all driven by the same DepositLifecycleEvent.
Let users top up their deposit address from a connected browser wallet (MetaMask / Rabby / Phantom / any injected EIP-1193 or Solana wallet). The SDK discovers cross-chain balances, builds a transfer to the deposit address, and the watcher sweeps it as usual. Balance discovery is zero-config (Particle’s hosted service — no Moralis key, proxy, or backend). The browser wallet is a funding source only — it never becomes the Universal Account owner/signer.
When funding.enabled is set, DepositWidget automatically shows a “Receive | Fund from wallet” toggle. For a standalone surface use the FundFromWallet component, or call client.getWalletBalances() / client.fundFromWallet() directly — see the React SDK and Core SDK.
Per-chain EVM RPC overrides (native gas checks / send fallback).
solanaRpcUrl
string
Public RPC
Solana RPC used to build SPL/native transfers.
minValueUSD
number
Client minValueUSD
Minimum USD value for a balance to be offered.
Balance-source precedence: balanceProvider > apiKey (direct) > proxyUrl > hosted default. Balance discovery covers Ethereum, BNB Chain, Base, Arbitrum, and Solana; X Layer is not supported and is skipped during discovery.