Skip to main content

Deposits

This guide covers depositing tokens from your wallet into your private balance.

Basic Deposit

Deposit Parameters

Deposit Steps

When a deposit is submitted, the SDK executes these steps in order:

Deposit Result

Depositing ETH

To deposit native ETH, use the zero address. The SDK automatically wraps ETH to WETH:
The SDK automatically:
  1. Wraps ETH to WETH
  2. Approves WETH spending
  3. Deposits WETH to the shield contract

Parsing Amounts

Use helper functions to convert between human-readable and wei formats:

Error Handling

Best Practices

1. Validate Amounts Before Depositing

2. Refresh Balance After Deposit

3. Always Use Background Dispatcher

SDK methods are blocking calls. Always wrap them in withContext(Dispatchers.IO) to avoid blocking the main thread:

Relayed Deposits (build calldata, relay yourself)

If your users don’t submit transactions directly — they hold funds at addresses you relay for (a gasless relayer, an EIP-7702 session key, a custom pipeline) — build the deposit calldata without submitting it, relay it through your own infrastructure, then finalize from the mined receipt.
Each Call is (to, value, data), so the list drops directly into an EIP-5792 / Porto wallet_prepareCalls bundle.

Server-side (no session)

A backend that holds only a recipient’s privacy address can build a deposit on their behalf with the top-level buildShieldPayload — no signed-in session and no private keys:
The note’s owner is bound cryptographically to the recipient’s privacy address, so only they can spend it; the ephemeral sender used to encrypt the deposit is generated and discarded internally.

Next Steps