DepositModal handles funding method selection, source chain and token selection, amount input, and cross-chain routing. Complete the widget quickstart and backend setup before configuring optional behavior.
Destination
recipient is the address that receives funds on the target chain. The service-managed deposit account is derived from (recipient, targetChain, targetToken), so it does not depend on the payment wallet. Changing the target changes the deposit address.
For a checkout, pass an order-specific account salt instead. Each order then has its own deposit address.
For supported destinations and assets, see supported chains and tokens.
Checkout payments
Register a managed account for each order on your server with a unique 32-byte salt. Store the returnedevmDepositAddress with the order, then pass the same salt and the required destination amount to the modal:
payment.amount is an integer string in destination token base units. It is not a USD amount. The salt replaces the modal’s normal (recipient, targetChain, targetToken) account derivation, so it must match the salt used in managed account registration. The modal displays a fixed order amount and withholds the recipient’s deposit history from the payer.
On the EVM wallet path, the modal asks POST /quotes/preview for an exactOut quote and uses its input.amount as the source amount to send. The proxy must forward that route to a processor that supports exactOut; an older processor cannot price the checkout. The quote is indicative, and a QR, exchange, or card payer can send a different amount.
Reconcile deposits against the order’s account using processor webhooks or GET /deposits?account=<orderAccount>. Compare the delivered destination amount with the order amount before marking it paid. The modal’s complete lifecycle event also carries destinationAmount in destination token base units when available.
Account setup
The widget uses service-managed accounts. Rhinestone owns the deposit account and settles to yourrecipient, so there is no session key to configure and the user is not asked to sign during setup.
Restrict accepted sources
Your project’s deposit whitelist controls the chains and tokens the processor accepts. Configure it through project setup rather than filtering the widget’s source picker.Funding methods
Each enabled method appears on the widget home screen. When exactly one is enabled, the widget skips the chooser and opens that flow directly.
Fiat onramps and exchange connect require Swapped routes and credentials on your backend proxy.
Output token routing
PassoutputTokenRules to choose the final token based on the source deposit. Rules can match chain, token address, or symbol. Unmatched deposits use targetToken unless rejectUnmapped is true.
chain + token, then chain + symbol, token, symbol, and chain. See token routing for full semantics and examples.
Non-EVM destinations
Solana
UsetargetChain="solana", a base58 mint as targetToken, and a base58 recipient. rpcUrls accepts a literal solana key when you need to override the default connection.
HyperCore destinations
UsetargetChain="hypercore:spot", exported as HYPERCORE_SPOT_CAIP2. HyperCore accepts USDC only. recipient can be an EOA or smart account: delivery calls the MulticallHandler’s depositFor(recipient), which funds either address type without executing on the recipient.
A HyperCore destination names the venue it credits. Spot and perp margin are separate balances; deposits support spot only because the deposit account cannot produce the signature required to move funds back out of perp margin.
targetChain: 1337, exported as HYPERCORE_CHAIN_ID, is the older spelling and still resolves to the same venue and deposit address. Migrating to HYPERCORE_SPOT_CAIP2 does not move user accounts.Earlier versions pre-screened recipient bytecode and could emit
HYPERCORE_RECIPIENT_NOT_EOA. That check did not match orchestrator behavior and was removed in v0.9.0.Display modes
The widget renders as a centered overlay by default. Setinline={true} to place it in your page layout without a backdrop.
closeOnOverlayClick={true}. Configure visual appearance in theming and customization.
Package entry points
Everything is exported from the root. Subpaths let you bundle only what you use.Props reference
Required
Wallet
See deposit from a wallet for widget-managed, app-supplied, and loading-state behavior.
Transfer
Funding
Account
Backend
Display
Recovery
Callbacks
Analytics
Content security policy
The widget loads chain, token, and exchange logos from Rhinestone’s asset CDN. Apps with an explicitimg-src must allow it:
img-src, or with img-src *, need no change.
Fiat onramps and Connect exchange embed Swapped in an iframe, so those flows also need:
connect-src must include Rhinestone, your proxy, and every RPC override:
analytics_ingest_failure event with reason: "network"; see analytics.