When a client pays you in USDC
By xChange.bg team
Published
The situation
Nikola is a backend developer in Varna. A new client, a small software company that already runs its finances in stablecoins, wants him for a three-month project at 2,500 USDC a month. The contract is fine. Then the client's operations lead sends a short message: "We pay in USDC. Send us your address. Which network?"
Nikola has used crypto a little, but has not received a business payment this way. He has heard stories of coins sent to the wrong network and lost. He also knows the money has to end up in euros in his Bulgarian account, and that his accountant will want to see paperwork. The first payment is due in two weeks.
Where the cost or risk really comes from
Receiving USDC is cheap. The risks are almost all about mistakes and missing records:
- Network mismatch. USDC exists on many blockchains. Ethereum, Base, Arbitrum, Polygon and Optimism share one address format, so an address that looks right can still be on a network the recipient did not expect. Solana uses a different format. A payment on the wrong network can be lost or hard to recover.
- Address errors and tampering. A mistyped address, or malware that replaces the copied address for a lookalike, sends money to someone else. Blockchain transfers cannot be reversed.
- Fake tokens. Anyone can create a token called USDC. Only the contracts published by Circle are real USDC.
- The wrong asset. A client may send a different stablecoin than agreed. It may not be what you can pay out.
- Records. A blockchain payment does not come with an invoice number. Without your own record linking the transaction to the invoice and its euro value, your accountant and the NRA see a transfer without context.
- The cash-out step. Turning USDC into euros has a cost, and selling a crypto-asset has tax consequences under Bulgarian law.
How to handle it
- Put token and network in the invoice. Write "USDC on Solana" (or another network both sides support) and your wallet address in the invoice and the contract. The xChange.bg wallet supports Solana, Ethereum, Base, Arbitrum, Polygon and Optimism.
- Copy your address from the app, not from an old message. Open the receive screen, select the agreed network and copy the address shown there.
- Check it before you send it. Paste it into the crypto address checker to confirm the format and checksum, and compare the first and last characters with what you are about to send.
- Ask for a test payment. A small amount, for example 5 USDC, on the agreed network. Confirm it arrived before the client sends the rest.
- Check the token contract. Compare the token's contract address with the list Circle publishes for that network. If it does not match, it is not USDC.
- Convert what you need. Use send to bank to pay out euros to your own IBAN at 1.25%. The rate and fee are shown before you confirm. Keep the rest as USDC if you prefer.
- Keep a record for each payment. Invoice number, date, amount in USDC, transaction hash, network, the euro value on the day of receipt (for example at the ECB reference rate) and the payout statement. The crypto tax guide explains the rules for selling crypto-assets. This is not tax advice.
Setup checklist
- xChange.bg account opened and verified
- Network agreed with the client in writing
- Address copied from the app, checked with the address checker
- Invoice template with token, network and address
- Test payment received and confirmed
- Official USDC contract address for your network saved from Circle's list
- Your Bulgarian IBAN saved for payouts
- A simple spreadsheet: invoice, date, USDC, hash, euro value, payout
Worked example
Nikola's first invoice: 2,500 USDC on Solana. The client sends a 5 USDC test, then 2,495 USDC. The client pays the network fees. Nikola pays out 2,000 USDC to his Bulgarian bank and keeps 500. The example uses an illustrative rate of USD 1.15 per euro.
| Step | Amount |
|---|---|
| USDC received on Solana | 2,500.00 USDC |
| xChange.bg fee to receive on-chain | none |
| Paid out to his Bulgarian IBAN | 2,000.00 USDC |
| Payout fee, 1.25% | USD 25.00 |
| Converted to euros | USD 1,975.00 |
| Euros in his bank at 1.15 | EUR 1,717.39 |
| Kept in the wallet | 500.00 USDC |
His record for the month: invoice 2026-014, received 2,500 USDC on Solana with two transaction hashes, euro value on the day of receipt at that day's ECB rate, and a payout of 2,000 USDC with its statement. How the fee income is taxed depends on how Nikola works, and whether the sale of the USDC produced a gain or loss depends on the acquisition value his accountant uses. Both questions go to the accountant with this record in hand.
Compared with a bank route, there is no incoming wire fee and no 1.5% on-ramp fee, because the money arrived on-chain. The only xChange.bg fee is the 1.25% on the part he converted.
What this is based on
Circle's developer documentation lists the official USDC contract addresses on each supported network, which is the reference for spotting fake tokens. Solana's documentation and ethereum.org explain how network fees work and why they differ between networks. The National Revenue Agency's crypto-assets page and the Personal Income Tax Act, Article 33, paragraph 3, set out how sales of crypto-assets are taxed and declared, and the NRA page covers record keeping. Fees come from the xChange.bg pricing page: network fee only for receiving on-chain, 1.25% for bank payouts. Nikola, his client and the numbers are illustrative.
Frequently asked questions
Which network should I ask a client to use for USDC?
- One that both the client's wallet and yours support, agreed in writing. The xChange.bg wallet works on Solana, Ethereum, Base, Arbitrum, Polygon and Optimism. Lower-cost networks keep the sender's fee small, but the key point is that both sides use the same one.
What happens if the client sends USDC on the wrong network?
- If your address does not exist on that network, or your wallet does not support it, the funds can be lost or hard to recover. Blockchain transfers cannot be reversed by xChange.bg. That is why the network belongs in the invoice and a test payment comes first.
How do I know it is real USDC?
- Anyone can create a token with the name USDC. Circle publishes the official USDC contract address for each network. Compare the contract of the token you received with Circle's list; if it does not match, it is not USDC.
Do I pay a fee to receive USDC?
- Receiving USDC on-chain costs only the network fee, which the sender pays. There is no 1.5% on-ramp fee, because no bank transfer is involved. The 1.25% fee applies only when you pay out to a bank.
How is being paid in USDC taxed in Bulgaria?
- Your fee is income, taxed according to how you work, and that is for your accountant. Selling the USDC for euros is a separate sale of a crypto-asset, declared in Annex 5. Record the euro value on the day you received the USDC. This is not tax advice.
Can I invoice in euros and accept USDC?
- You can agree that, but write down the conversion rule in the invoice or contract, for example the ECB reference rate on the payment date, so both sides know how many USDC settle the invoice. Otherwise disputes over small differences are likely.