Wallets
ZUL rides Solana's wallet ecosystem instead of inventing one. Signing a transaction is chain-agnostic — a wallet signs bytes — so any wallet that implements the standard wallet-adapter interfaces can sign for ZUL. The dapp supplies the L2 connection; the wallet supplies signatures.
How dapps integrate
// the only ZUL-specific line is the RPC endpoint
const connection = new Connection(ZUL_RPC, "confirmed");
// wallet-adapter signs as usual; the dapp sends to the L2
const sig = await sendTransaction(tx, connection);- Balances and historyshown inside wallet UIs usually query the wallet's own (Solana mainnet) endpoints — they won't display L2 state. Dapps read ZUL state themselves through the RPCand show it in-app, the way this site's bridge does.
- Fees are ZUL, so a fresh account needs gas before its first transaction — the faucet exists for exactly this (see Gas).
Shielded keys
Pool ownership uses its own key material (spending keys, viewing secrets for trial decryption) managed by the SDK's shielded client, with notes kept in an encrypted local store. v1 derives and stores these locally rather than asking wallets to understand pool semantics — wallet-native shielded accounts are a roadmap concern, not a protocol requirement.
Hardware wallets
Hardware-wallet connections (USB/WebHID transports) are explicitly out of scope across the ZUL web stack — by project policy, only software wallet-adapter wallets are targeted.
Want the chain visible inside a wallet UI? Backpack supports custom RPC endpoints per network — the screenshot walkthrough is in Add ZUL to Backpack.