What a wallet is
Funds on a blockchain are not stored anywhere local. The ledger records that a given address controls a given balance, and the network as a whole keeps that record. A wallet's job is to manage the credentials for those addresses: it generates and stores private keys, derives the public keys and receiving addresses from them, tracks which addresses belong to the user, and — when the user wants to spend — builds a transaction and signs it with the matching private key. The signed transaction is then broadcast to the network, which verifies the signature and updates the ledger.
Because spending reduces to producing a valid signature, and only the private key can produce that signature, the security of the funds is the security of the keys the wallet holds. This is the difference between a non-custodial wallet, where the user holds the keys directly, and a custodial wallet, where a service holds the keys on the user's behalf and the user trusts the service to sign correctly. A related axis is where the keys live: a hot wallet keeps them on an internet-connected system so it can sign on demand, while a cold wallet keeps them offline and signs through a deliberate manual step.
A single wallet typically manages many addresses, and often across several chains. Modern wallets derive a tree of keys from one seed, so a backup of that seed restores every address the wallet has used. The same wallet may track a Bitcoin address, an Ethereum address, and the tokens held against it — each chain has its own address format and signing rules, but the wallet abstracts them behind one interface for the person using it.
Why it matters for crypto payments
Both sides of a crypto payment involve a wallet. The customer pays from a wallet they control — entering an amount, confirming the destination, and signing the transaction that sends the funds. The merchant, or the platform acting for them, receives into addresses managed by its own wallet, and pays out by signing transactions from it. The receiving side never needs a key to be paid; the sending side always needs one to sign, so the keys that move money are the part of any payment system that has to be protected.
For a customer, the wallet is also the point where mistakes become permanent. A blockchain transaction is irreversible once confirmed and is sent to whatever address the wallet was told to use, with no name attached and no intermediary to recall it. A payment flow that hands the wallet an exact amount and a verified address — rather than asking the customer to copy figures by hand — removes the two most common ways a self-custodied payment goes wrong: paying the wrong amount, and paying the wrong address.
Wallets and signing on halfin
On the customer's side, halfin's checkout is built to drive a wallet cleanly. The hosted payment page shows the exact amount due and the destination address, with a QR code and copy-ready fields, and supports both scanning into a mobile wallet and connecting a browser wallet to sign in place. Because the invoice amount is anchored to a fiat figure and the rate is locked when the invoice activates, the customer signs for a known quantity of crypto rather than a moving target — and underpaying or overpaying is detected and reported rather than silently lost.
On the merchant's side, halfin manages the addresses funds are received at and signs the transactions that pay funds out, so the relevant guarantees are about how those keys are used rather than a broader custody promise. The blockchain private keys stay inside halfin, and the controls are concrete: a payout is signed only after it is approved, API keys carry scoped permissions so a credential can authorize only the actions it is granted, and signing events are auditable so money movement can be reviewed rather than taken on trust. halfin does not advertise custody assurances beyond signing, permissions, and audit.
For the integration itself, the secret that behaves like a signing key is the API key. It authorizes calls against the merchant's account, so it deserves the same discipline as anything that can move value: keep it server-side, never ship it to a browser or a customer's device, scope it to the permissions the integration actually needs, and rotate it if it is ever exposed. Signed messages run the other way too — the webhooks halfin sends are HMAC-signed, so an integration can confirm a notification genuinely came from halfin before acting on it. Verify the signature first, and treat it, not the payload's appearance, as the source of truth.
- A wallet stores the private keys that control blockchain addresses and signs transactions — it does not hold the coins; the ledger does.
- Non-custodial wallets put the keys in the user's hands; custodial wallets keep them on the user's behalf — and hot versus cold is about whether those keys are online to sign on demand.
- Crypto payments are irreversible and address-based, so a flow that supplies the exact amount and a verified address removes the most common ways a wallet payment goes wrong.
- On halfin, blockchain keys stay internal and money movement is approval-gated, permission-scoped, and auditable; the merchant's job is to guard the API key like a key that can move value.