Wallets

.md

Every crypto wallet a trader paid into, what it was asked for and what it holds, and the one wallet of your firm they all come from, which only you can open.

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.

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.

StatusMeaning
Awaiting paymentThe address was shown to the trader and nothing arrived yet
ConfirmingA transfer arrived and is not final on the chain yet
UnderpaidFinal, but less than asked. The trader can top up until the checkout runs out
PaidEnough arrived and the account was made. The wallet is no longer watched
Paid lateMoney arrived after the checkout ran out. You decide on the payment
ExpiredThe 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

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