# Metatarz Wallet > Metatarz is an open-source, non-custodial browser wallet that is Canton-native and EVM-compatible. It implements the MetaMask provider API (EIP-1193, EIP-6963), so any dApp that supports MetaMask works with it, and it supports Canton CIP-0056 and CIP-0103. Every user is an external Canton party, and private keys never leave the device. Key facts: - Canton party IDs are derived from the EVM address: `user_::`, e.g. `user_A1b2c3d4::1220ab…`. - A transfer preapproval contract is deployed when an account is created, so incoming transfers do not need to be accepted. - Every write goes through a two-step **prepare → sign locally → execute** flow. The server builds the Canton transaction and returns a hash. The client DER-signs `sha256(hash)` with its secp256k1 key, and the server submits the transaction. - Canton is not an EVM chain. The JSON-RPC endpoint is a compatibility shim: reads become Canton ledger queries, and `eth_sendRawTransaction` is intercepted and routed through the prepare/execute flow. - Transaction "hashes" returned to dApps are Canton `update_id`s. Look them up at https://ccview.io/update/, not on an EVM explorer. - Gas is free: `gasLimit` and `gasPrice` are `0x0`, and `eth_estimateGas` and `eth_gasPrice` return stub values. - All balances, including native CC and CIP-56 tokens, use 18 decimals. Do not call `decimals()`. ## Docs - [Full docs as markdown](https://wallet.metatarz.xyz/llms-full.txt): The entire documentation in one plain-text file - [Documentation](https://wallet.metatarz.xyz/docs): Full user and developer documentation - [Introduction](https://wallet.metatarz.xyz/docs#introduction): What Metatarz is and which standards it supports - [Canton support](https://wallet.metatarz.xyz/docs#canton-support): Non-custodial external parties, preapprovals, native transfers - [Install](https://wallet.metatarz.xyz/docs#install): Chrome Web Store, or a direct ZIP download loaded unpacked in Chrome, Edge, or Brave - [Getting started](https://wallet.metatarz.xyz/docs#getting-started): Adding an account, party ID, transfer preapproval - [Send CC tokens](https://wallet.metatarz.xyz/docs#send-tokens): Amount, recipient (party ID or Metatarz EVM address), memo (required by most CEXs) - [Connect to dApps](https://wallet.metatarz.xyz/docs#dapps): Pick "Metatarz Wallet", or "MetaMask" if it is the only option listed - [Use via MetaMask](https://wallet.metatarz.xyz/docs#metamask): Add Canton as a custom network to view your CC balance (read-only; sending is not yet supported) ## Wallet API Base URL: `https://canton.rpc.wallet.metatarz.xyz` (mainnet). Every request is authenticated with an EIP-191 signature in two headers. `X-Message` is a timed message in milliseconds `:`, which must be within 5 minutes of server time or the request is rejected with 401. `X-Signature` is the EIP-191 signature over that message. The prefix is `registration` for the registration endpoints and `transfer` for the transfer and preapproval endpoints. - [Authentication](https://wallet.metatarz.xyz/docs#api-auth): `X-Message` / `X-Signature` headers - [POST /register/prepare-topology](https://wallet.metatarz.xyz/docs#api-register-prepare): Registration step 1. Send `{signature, message, key_mode: "external", canton_public_key}` (compressed 33-byte pubkey). Returns `{topology_hash, public_key_fingerprint, registration_token}`, or `{user_exists: true, party}` if the user is already registered. - [POST /register](https://wallet.metatarz.xyz/docs#api-register): Registration step 2. Send the step-1 fields plus `topology_signature` (DER over `sha256(topology_hash)`), `transaction_hash`, `public_key_fingerprint`, and `registration_token`. Returns `{party, fingerprint, mapping_cid, evm_address, key_mode}`. Errors: 404 token not found, 409 already registered, 410 token expired. - [POST /api/v2/transfer/prepare](https://wallet.metatarz.xyz/docs#api-transfer-prepare): For a transfer, send `{type: "transfer", to, amount, token, memo?}`. For a preapproval, send `{type: "preapproval" | "preapproval2" (CBTC) | "preapproval3" (cETH) | "preapproval6" (BETH)}`. Returns `{transfer_id, transaction_hash, party_id, expires_at}`. Returns 409 if the preapproval already exists. - [POST /api/v2/transfer/execute](https://wallet.metatarz.xyz/docs#api-transfer-execute): Send `{transfer_id, signature (DER), signed_by (fingerprint after "::" in party_id), transaction_hash, public_key, type}`. Returns `{status: "completed", update_id}`. - [JavaScript examples](https://wallet.metatarz.xyz/docs#api-examples-js): End-to-end registration and transfer with ethers v6 and @noble/curves ## EVM JSON-RPC - Mainnet: `https://canton.rpc.wallet.metatarz.xyz`, chain ID `31337`, currency symbol `CC` - Testnet: `https://canton-testnet.rpc.wallet.metatarz.xyz`, chain ID `30337` - [Supported methods](https://wallet.metatarz.xyz/docs#evm-rpc-supported): `eth_chainId`, `eth_getBalance` (native CC), `eth_call` (CIP-56 `balanceOf`, selector `0x70a08231`), `eth_estimateGas`, `eth_gasPrice`, `eth_blockNumber` (latest open round), `eth_sendRawTransaction` (native transfer). Other methods may be unsupported or return empty results. - [Canton-specific behavior](https://wallet.metatarz.xyz/docs#evm-rpc-canton): Where Canton semantics differ from Ethereum - [Examples](https://wallet.metatarz.xyz/docs#evm-rpc-examples): Balance queries and sending CC with ethers `BrowserProvider` CIP-56 token contract addresses: - USDCx: `0xDE40000000000000000000000000000000000001` - HANDL: `0xDE50000000000000000000000000000000000001` - CBTC: `0xDE60000000000000000000000000000000000001` - cETH: `0xDE70000000000000000000000000000000000001` - BETH: `0xDE80000000000000000000000000000000000001` ## Optional - [Source code (GitHub)](https://github.com/metatarzxyz/metatarz-wallet): Open-source wallet repository - [Chrome Web Store](https://chromewebstore.google.com/detail/metatarz-canton-evm-walle/cdpompnhkhhadajaihlfbmcafdpcholm): Install the extension - [Direct download](https://github.com/metatarzxyz/metatarz-wallet/releases): Latest extension ZIP for manual install - [CCVIEW explorer](https://ccview.io): Canton explorer for looking up `update_id`s - [X / Twitter](https://x.com/metatarzxyz): Announcements