Swaps
Tuck swaps are routed through Uniswap on Robinhood Chain, which deployed a dedicated AMM there at launch and holds the deepest pools on the network — including the Stock Token pairs. Swaps take longer than a plain DEX trade because they involve privacy pool withdrawals and ZK proof generation. The process runs in the background — keep your browser open until it completes. Track progress in your transaction history.
Swap Types
Shielded ETH → ERC-20 Token
When swapping from your shielded balance, Tuck withdraws ETH from the Tuck Shield pool to your oldest private shard wallet, which then executes the swap. If that shard already has ETH, Tuck uses it first to minimize the withdrawal amount.
Minimum: 0.00025 ETH (covers withdrawal fees: 0.0002 ETH + 0.35%). The shard wallet pays swap gas directly from the withdrawn amount.
Public ERC-20 → Any Token
Tokens in public shards are consolidated to a randomly selected shard (from your oldest 3) before swapping. The Tuck relayer pays all gas upfront and is automatically reimbursed from your shielded balance through a Tuck Shield withdrawal (0.0002 ETH + 0.35%).
Private ERC-20 → Any Token
Private token swaps use your oldest private shard. The Tuck relayer pays gas upfront and is automatically reimbursed from your shielded balance through a Tuck Shield withdrawal (0.0002 ETH + 0.35%).
Any Token → ERC-20 Token
Output tokens stay in the shard wallet that executed the swap. For public swaps, they remain in your public shard. For private swaps, they stay in your private shard.
Any Token → ETH
When swapping to ETH, the output is automatically shielded to your privacy pool. Tuck reserves 0.0001 ETH from the output for shielding gas and ZK proof generation (10-30 seconds). Minimum output after reserve: 0.0005 ETH.
Swapping Stock Tokens
Stock Tokens trade in ordinary Uniswap pools, so a tokenized-equity swap is a normal ERC-20 swap with two extra considerations:
- Chainlink is the reference price, the pool is the execution price. Tuck shows the Chainlink feed price alongside the Uniswap quote so you can see the spread before confirming. Thin pools on less-traded tickers can diverge meaningfully from the feed.
- Corporate actions move the multiplier, not the pool. Quotes are expressed in ERC-8056 display units. If
uiMultiplier()changes mid-flow, Tuck invalidates the quote and re-fetches rather than executing against a stale ratio.
Trading hours are not enforced on-chain. A pool will quote you a price at 3am on a Sunday; whether that price tracks the underlying market is a liquidity question, not a protocol guarantee.
Fees
- Swap gas: ~0.00002 ETH per Uniswap swap
- Token approval: ~0.000002 ETH, one-time per token per shard
- Consolidation gas: ~0.000006 ETH per source shard when tokens are spread across multiple shards
- Relayer reimbursement: 0.0002 ETH + 0.35% (Tuck Shield withdrawal for reimbursing the relayer)
- Shielding reserve: 0.0001 ETH deducted from output (swaps to ETH only)
- Uniswap pool fee: charged by the pool in the output amount, shown in the quote
Edge Cases
- Same token: cannot swap a token for itself.
- One flow at a time: you cannot start a new swap while another flow (send, swap, or consolidation) is active.
- Insufficient shielded balance: if you lack shielded ETH for fees or withdrawals, the swap fails with an error showing how much more to deposit.
- Quote refresh: quotes auto-refresh every second with 0.5% default slippage. Robinhood Chain's ~100ms blocks make quotes short-lived; a stale quote reverts rather than filling at a worse price.
- Thin pools: for low-liquidity pairs, Tuck warns when the quote deviates from the Chainlink reference by more than the slippage tolerance.
Failure & Recovery
Swaps can fail at various stages. Tuck automatically retries recoverable errors (up to 20 attempts). Gas and balance errors require manual intervention — you'll need to ensure sufficient shielded balance before retrying.
Shielded ETH swaps: the relayer reimbursement is calculated based on actual gas paid, minimizing costs.
Track status in transaction history:
- Preparing Transaction — Building the meta-transaction with the relayer
- Initializing — Validating quote and fees
- Consolidating — Moving tokens to swap wallet (or withdrawing shielded ETH)
- Approving — Setting the ERC-20 allowance for the router, if not already set
- Swapping — Executing the Uniswap swap
- Shielding — ZK proof generation (ETH output only)
- Complete — Swap finished successfully
- Failed — Error occurred (can retry)