**Wallets** in your admin sidebar lists every wallet a crypto payment was made
to. It is there when Propper turned crypto payments on for your firm, and
missing otherwise.

You need the `view_wallets` permission to open the screen. Setting up the
firm's wallet, adding and removing the keys that unlock it, and showing a
private key or the recovery phrase need `manage_wallets`. Somebody who may
only look sees every wallet and its balance, and none of those actions.

## How the wallet works

Your firm has one wallet, made once, in the browser of whoever sets it up.
Every crypto payment gets a fresh address from it, and the money stays on that
address: nothing is swept or merged, and Propper never moves it. You move it
yourself, from your own wallet app.

The wallet is a recovery phrase of 24 words. It is made in your browser and
stored with us encrypted. We keep only that encrypted copy and the public
keys from which new addresses are worked out. Without one of your keys or the
phrase, nobody can open it, our team included.

A key is a passkey (Face ID, Touch ID, Windows Hello, a security key) or a
signature from a MetaMask account. Each admin adds their own. A passkey only
works on the domain it was made on. MetaMask works on any domain of your
firm. The recovery phrase opens the wallet anywhere, and is also how an admin
without a key of their own gets in to add one.

Addresses follow the paths MetaMask and TronLink use. Put the recovery phrase
into either app and the same addresses appear there: each wallet on this
screen says which account it is.

## Setting it up

Until the wallet exists, the list says so and **Set up wallet** opens the
setup beside it. It takes four steps:

1. What is about to happen.
2. The 24 words, shown this once, each numbered in a box of its own. Write
   them down in order and keep them offline. Anyone who has them can take
   every payment made to your firm. Copy and Download as text file give the
   same words numbered, four to a line.
3. Three of the words, asked back: the phrase is shown again with every word
   hidden, and for each of three marked places you pick the right word out of
   three from the same phrase. A wrong pick is emptied and asked again.
4. The first key: a passkey or MetaMask. A passkey is asked for twice, once
   to make it and once to check it opens the wallet. MetaMask asks you to sign
   the same text twice, to check it signs it the same way every time. It sends
   nothing and costs nothing.

While the passkey prompt or MetaMask is open, **Stop waiting** stops the
screen from waiting for it, so a wallet window that was closed without an
answer never leaves you stuck. With several wallet extensions in one browser
(Brave Wallet next to MetaMask, for one), the screen asks MetaMask by name.

Nothing reaches us before the last step. Leaving the setup halfway asks first,
and throws the phrase away.

:::warning Some passkeys cannot be a key
A passkey has to support the PRF extension. The passkeys of your device
(iCloud Keychain, Google Password Manager, Windows Hello) and most security
keys do. Password manager extensions, 1Password among them, often do not, and
the screen says so when that happens. Use another passkey or MetaMask.
:::

## The list

The screen opens on the list alone, across its whole width.

Each row is a wallet: its address and whose payment it was, the network and
coin the trader chose, what was asked, what arrived, when it was opened and
its status. A shield next to the address means money arrived from an address
on the OFAC sanctions list. Nothing is refused: what you do with it is your
decision.

| Status | Meaning |
| --- | --- |
| Awaiting payment | The address was shown to the trader and nothing arrived yet |
| Confirming | A transfer arrived and is not final on the chain yet |
| Underpaid | Final, but less than asked. The trader can top up until the checkout runs out |
| Paid | Enough arrived and the account was made. The wallet is no longer watched |
| Paid late | Money arrived after the checkout ran out. You decide on the payment |
| Expired | The checkout ran out without money. Still watched for 7 days |

The head of the list counts the wallets still waiting for money, the ones paid
late and the ones with a sanctions flag. Clicking a count narrows the list to
them.

The list holds fifty wallets to a page. The search box finds a wallet by its
address, a transaction hash or the address that paid, its `cwal_` id, the
`pay_` id of its payment, or the name, email address or `usr_` id of the
trader. The filter menu narrows by status, by network and to flagged wallets,
and sorts by newest, largest amount, most received, expiry or what needs
attention first.

J and K move through the list and Enter opens the wallet they rest on. A right
click on a row opens the wallet, its payment or its trader, and copies the
address, the wallet id, the payment id or a link.

## A wallet

Picking a wallet folds the list to a column and opens the wallet beside it.
Escape or the cross folds it back.

The head shows the full address (click to copy), its status, what the trader
chose, and which account it is in MetaMask or TronLink. Below it: what was
asked, what came in and how much over or short, the payment, when the wallet
was opened and when its checkout runs out or was paid.

**On chain now** reads what the address holds right now on every network of
its kind. An Ethereum address is the same on Base and Arbitrum, so a trader
who sent USDC on Base instead of USDT on Ethereum shows up here, and that
payment counts. **Refresh** reads it again. When a network does not answer,
the screen says so instead of showing zero.

**Transfers** lists every incoming transfer we saw, with the amount, the
network, the sender, whether it is final, and a link to the transaction on the
explorer.

## Showing a private key or the recovery phrase

**Show private key** on a wallet, and **Export recovery phrase** in the
settings, first unlock the wallet in your browser: with one of your keys, or
by typing the 24 words, or pasting them as copied or downloaded, numbers
included. The key or the phrase is then shown with a copy button, and the
phrase with a download as well. It is opened in your browser only, and closed again when you click
Done.

A private key is shown as 64 hexadecimal characters. MetaMask imports it under
Add account, Import account, and TronLink under Add wallet, Import, Private
key. Before it is shown, the address is worked out again from the key and
compared with the wallet's, so the key on screen is always the key of that
address.

Every time a private key or the phrase is shown, the activity log records who
did it and for which wallet. The key itself is never sent to us.

## Settings

**Settings** in the head of the list opens the wallet's settings beside it:
when it was set up and by whom, how many addresses it gave out, and every key
that unlocks it, with its kind, its name, whose it is and when it was last
used.

**Add key** unlocks the wallet and then adds a passkey on this domain or a
MetaMask account for you. A key is removed with the bin next to it, after a
question. Anyone with `manage_wallets` can remove anyone's key, so the key of
an admin who left can be taken off. The last key cannot be removed.

## Errors

| Message | What happened |
| --- | --- |
| This passkey cannot be used as a wallet key | The passkey does not support PRF. Use a device passkey, a security key or MetaMask |
| This passkey gave a different answer the second time | The passkey cannot open the wallet reliably and was not saved |
| This wallet signed the same text differently twice | Hardware wallets and smart accounts often sign with randomness and cannot be a key |
| Switch MetaMask to the account | The key belongs to another MetaMask account than the one connected |
| Your wallet still has a request open | MetaMask still shows an earlier request. Close it there and try again |
| This key did not open the wallet | The passkey or signature is not the one this key was made with |
| This recovery phrase belongs to another wallet | The 24 words are valid but are not your firm's wallet |
| 403 forbidden | You lack `view_wallets`, or `manage_wallets` for the setup, the keys and exporting |
| 404 not found | Crypto payments are not turned on for your firm |