Back to docs

# Using the Wallet

## Your Dashboard

When you open Zoff, you'll see your main dashboard showing:

- Total balance across all assets (CC, CBTC, and any Canton Coin Standard tokens).
- Asset list with individual balances and real-time updates.
- Recent activity — your latest transactions.

Balances update in real-time via Canton's UpdateStreamService. No manual refresh needed.

## Understanding Canton Assets

Zoff currently supports two native assets on Canton Network:

Canton Coin (CC) — The native utility token of Canton Network. Used for transaction fees, validator rewards, and as a medium of exchange across Canton dApps.

Canton BTC (CBTC) — A wrapped Bitcoin asset on Canton with institutional-grade security. Represents real BTC held in custody, available for use in Canton's DeFi ecosystem.

Additional assets built on the Canton Coin Standard will appear automatically as they're issued on the network.

## Sending CC

1. From the dashboard, tap Send.
2. Select the asset you want to send (CC or CBTC).
3. Enter the recipient's Canton party ID. This looks like `party::1a2b3c4d...` — a long alphanumeric string that uniquely identifies a participant on Canton.
4. Enter the amount.
5. Review the transaction details on the confirmation screen.
6. Confirm. Zoff signs the transaction locally and submits it.

### How sending works (TransferPreapproval flow)

Canton doesn't use a simple "send" like Ethereum or Bitcoin. Transfers follow a multi-step Daml workflow:

1. Prepare — Zoff creates a TransferPreapproval contract specifying the sender, receiver, and amount.
2. Sign — Your Ed25519 key signs the Daml command locally in the browser.
3. Execute — The signed command is submitted to Canton via `api.zoff.app`.
4. DSO Automation — Canton's Decentralized Synchronizer Operator processes the transfer and updates both parties' balances.

The entire flow completes with instant finality — no block confirmations, no pending states. Once submitted, it's done.

## Receiving CC

To receive funds, share your Canton party ID with the sender:

1. Open Zoff → tap Receive.
2. Copy your party ID or show the QR code.
3. The sender uses this party ID as the recipient in their wallet.

Incoming transfers appear in your activity feed and update your balance in real-time.

## Managing Multiple Accounts

Zoff supports multiple accounts derived from a single seed phrase. Each account gets its own Canton party ID and can hold independent balances.

To create a new account:

1. Open Zoff → tap the account selector (top of dashboard).
2. Tap + Add Account.
3. Give it a name (e.g., "Trading", "DeFi", "Savings").
4. Zoff derives a new key from your seed (BIP32 derivation path) and allocates a new Canton party.

To switch accounts: tap the account selector and choose the account you want to use.

Accounts sync bidirectionally between the web app (zoff.app) and the Chrome extension popup. Create an account in one, and it appears in the other.

## Connecting to dApps

Canton dApps can request a connection to your Zoff wallet, similar to how MetaMask works on Ethereum.

When a dApp requests a connection:

1. A popup appears showing the dApp's origin (e.g., `https://app.example.com`).
2. Review the permissions the dApp is requesting.
3. Approve to grant access, or Reject to deny.

Connected dApps can:

- See your active Canton party ID (the one currently selected).
- Submit Daml commands for you to sign (signAndSubmit).
- Read your balances and account info.

Connected dApps cannot:

- Access your private key or seed phrase.
- Sign transactions without your explicit approval.
- Access accounts you haven't explicitly shared.

To manage connected dApps:

Open Zoff → Settings → Connected dApps. Here you can see all approved origins and revoke access for any dApp at any time.

## Signing dApp Transactions

When a connected dApp submits a transaction for signing:

1. Zoff will show a signing request popup with the transaction details.
2. Review what the dApp is asking you to sign — the Daml template ID, choice name, and arguments.
3. Approve to sign and submit, or Reject to cancel.

Signing happens locally. The dApp receives the result (success or failure) but never sees your key material.

## The Web App vs. the Extension

Zoff has two interfaces that stay in sync:

| Web App (zoff.app) | Chrome Extension
--- | --- | ---
Access | Any browser tab | Toolbar popup or side panel
Best for | First setup, detailed views | Quick actions, dApp connections
Account sync | ✓ Bidirectional | ✓ Bidirectional
dApp connections | Via injected provider | Via popup approval

Both interfaces share the same encrypted keystore and account data. Changes in one reflect in the other.

Next: Developer Guide →