HabeshaSwap
MarketGuideCommunityStats
Sign inGet startedSign up
HabeshaSwap
Non-custodial P2P. USDT BEP20 held in escrow. ETB never touched by HabeshaSwap.v0.1 · BNB Smart Chain

Guide

How HabeshaSwap works

HabeshaSwap is a non-custodial peer-to-peer marketplace for USDT (BEP20). The crypto side is locked in a smart contract; the ETB side is a manual transfer between you and the counterparty. HabeshaSwap never touches ETB and never holds your USDT — escrow is on-chain, you control the keys.

Before you start

1

Create your account

Sign up with email. You'll be asked to verify the email and connect a wallet on BNB Smart Chain. New users can choose “Create wallet” for a simple in-app wallet, or “Connect own” to link MetaMask, Trust, OKX, or any WalletConnect-compatible wallet.

2

Add a payment method (sellers only)

On your profile, add at least one local account (CBE, Telebirr, Awash, Abyssinia, Dashen, or CBE Birr). Buyers will use these details to send you ETB.

3

Fund your wallet (sellers only)

You'll need USDT BEP20 to lock in escrow and a small amount of BNB to pay gas. Withdraw both to your wallet from Binance or another exchange — pick the BNB Smart Chain / BEP20 network. Do not pick TRC20, ERC20, or Solana.

Buying USDT for ETB

  1. 1

    Find an offer

    Browse the Market and pick a seller. Each row shows the price per USDT in ETB, the seller's trade history, and the payment method.

  2. 2

    Accept the offer

    Open the offer and confirm the amount. This creates a private trade page that only you and the seller can see.

  3. 3

    Wait for the seller to lock funds

    The seller funds the on-chain escrow. The trade page updates automatically when funding completes — no refresh needed.

  4. 4

    Send ETB

    Once the trade shows as funded, send the exact ETB amount to the seller's account using their instructions. Use the chat to coordinate; HabeshaSwap moderators see the chat history if a dispute opens.

  5. 5

    Mark payment sent

    Press 'Mark payment sent' on the trade page. This is gas-free for buyers — no on-chain transaction is needed from your side.

  6. 6

    Receive USDT

    After the seller confirms your ETB arrived, they release the USDT from escrow to your wallet. The trade page shows a green completion card with the on-chain transaction hash.

Selling USDT for ETB

  1. 1

    Post an offer

    Go to New offer and set the amount of USDT you want to sell, the price per USDT in ETB, the settlement window, and which saved payment account the buyer should use.

  2. 2

    Wait for a buyer

    Your offer appears on the public market. When a buyer accepts, you'll see the new trade in your Trades list — that page also auto-updates.

  3. 3

    Fund escrow (one click)

    Open the trade and press 'Fund this trade'. The wizard runs three on-chain steps in sequence: create the trade, approve the USDT spending, then lock the funds. Future trades skip the approve step automatically.

  4. 4

    Wait for buyer's ETB

    The buyer pays you off-chain using your account details. They'll mark payment sent on the trade page. Always verify the deposit in your bank or mobile money app — never trust the chat alone.

  5. 5

    Confirm and release

    Once you've verified the ETB landed, press 'Confirm and release'. This is the only step that requires your signature; the smart contract sends the USDT to the buyer minus the platform fee.

  6. 6

    If the buyer never pays

    After the payment deadline passes, you can claim the escrow back to your own wallet. The funds were never out of your control.

Getting your crypto out

Once USDT or BNB is in your wallet, you can move it anywhere — back to an exchange, to another wallet, or to a friend. Open the Withdraw section on your profile to do it without leaving the app.

1

Send USDT or BNB directly

Pick the asset, paste the destination address, set the amount (or hit Max), and sign. The transaction is on-chain and confirmed within a few seconds on BNB Smart Chain. Triple-check the destination network on the receiving side — sending USDT BEP20 to an address that only accepts TRC20 or ERC20 will lose the funds permanently.

2

Export your private key (embedded wallet)

If you onboarded with email and use HabeshaSwap's embedded wallet, you can export the private key from the same Withdraw section. The key is shown in a Privy-hosted modal that runs on a separate domain — your browser extensions and HabeshaSwap itself cannot read it. Import the key into MetaMask, Trust, OKX, or any wallet that supports BNB Smart Chain.

3

External wallet users already control their keys

If you connected MetaMask, Trust, OKX, etc. you don't need anything from HabeshaSwap to move funds — the wallet's own send screen works fine.

Always keep a small BNB balance for gas. Each on-chain transaction costs a fraction of a cent in BNB, but a wallet with zero BNB can't send anything, even USDT.

Sending to MetaMask (BNB Smart Chain)

MetaMask is the most common destination, and it has a couple of quirks worth knowing before you press Send. The HabeshaSwap Withdraw form refuses obvious mistakes (wrong format, sending to yourself), but it cannot tell what network the receiving wallet is set to — that part is on you.

1

Switch MetaMask to BNB Smart Chain

MetaMask defaults to Ethereum Mainnet, which is the wrong network for USDT BEP20. Open the network dropdown at the top of MetaMask and pick BNB Smart Chain. If you don't see it, click Add network → search “BNB Smart Chain” → Add → select. Sending BEP20 USDT to a wallet on Ethereum Mainnet does not lose the funds (the address is the same), but you won't see them until you switch networks.

2

Copy the receive address

With BNB Smart Chain selected, the address shown under your account name in MetaMask is your receive address — for example 0x40C2…AC73. Click it once to copy the full address. The same address receives BNB and every BEP20 token (USDT, BUSD, etc.) — addresses on BSC aren't tied to a specific asset.

3

Paste into the Withdraw form

Pick the asset (USDT or BNB), paste the address, set the amount, hit Send. Sanity-check the first 4 and last 4 characters in the wallet popup match what MetaMask shows before confirming.

4

Import USDT in MetaMask so the balance shows

MetaMask only displays the native BNB by default. After USDT lands, your balance might still read “0 BNB” because MetaMask doesn't auto-detect BEP20 tokens. Click Import tokens in MetaMask and paste the official USDT BEP20 contract address: 0x55d398326f99059fF775485246999027B3197955. MetaMask fills in the symbol and decimals automatically. The balance appears once you confirm.

The transfer itself succeeds regardless of whether you import the token — the token import is purely cosmetic, so MetaMask can show and let you spend the USDT from its own UI. If you only intend to forward USDT to an exchange, you don't even have to import it; the funds are still there.

The first time you use any new destination, send a small test amount (e.g. 0.5 USDT) and wait for it to land before sending the rest. A few cents in gas is much cheaper than learning a typo the hard way.

Disputes and safety

If the buyer marks payment sent but the seller can't verify it (or vice versa), either party can open a dispute on the trade page during the dispute window. A moderator reviews the chat and any payment proofs, then resolves on-chain — either releasing to the buyer or refunding to the seller.

  • Always verify ETB in your bank app, not just the buyer's screenshot.
  • Stay in the trade chat.Off-platform chat isn't visible to moderators and can't be used as evidence.
  • Don't share your private key, recovery phrase, recovery codes, or passkeys — moderators will never ask for them.
  • If the dispute window passes with no resolution, the seller can claim the funds back as a fallback.

Fees

The smart contract takes 1% of the released USDT with a 0.25 USDT minimum. The fee is deducted on release only — refunds and cancellations pay no fee. The fee is shown explicitly on the offer page and the trade page, and the deduction happens on-chain so it's fully auditable.

USDT withdrawals from your profile cost 0.5% with a 0.10 USDT minimum. The withdraw form shows the breakdown before you sign, so you always know exactly what the recipient gets. The fee runs as a separate USDT transfer right before the actual send — that's why you see two wallet popups for one withdrawal.

You also pay BNB gasfor each on-chain transaction (typically a few cents on BNB Smart Chain). Buyers pay no gas — every buyer-side trade action goes through HabeshaSwap servers. Sellers and withdrawers do pay gas; if you have USDT but no BNB to pay it, the Withdraw section offers a free one-time BNB drip so you're never stuck.

FAQ

Why do I need to connect my wallet again on the funding screen?+

You don't, anymore — the app now syncs your Privy session into wagmi automatically. If you ever do see a Connect button after signing in, give the page a beat to finish syncing, or refresh once and it'll stick across all future loads.

What happens if I lose access to my wallet mid-trade?+

If you're a seller with funds locked in escrow, contact a moderator before the dispute deadline. Recovery requires your wallet, so importing the seed phrase into a new device usually solves it.

Can I cancel a trade after I've funded escrow?+

Not directly — the smart contract only allows release (after buyer pays) or refund (after the payment deadline). If both parties agree to cancel before payment, the seller can wait out the deadline and refund.

Why does the wallet popup show a small dollar amount on each step?+

That's the BNB gas estimate for the transaction, denominated in USD by your wallet. It's not a charge from HabeshaSwap. The platform fee is separate and only applies on release.

My MetaMask says BNB Smart Chain — can it receive USDT?+

Yes. On BSC, the same address receives BNB and every BEP20 token, including USDT. Addresses are not tied to a specific asset. Just make sure the sending side uses BNB Smart Chain (BEP20), not TRC20 or ERC20.

I sent USDT but MetaMask still shows 0 — where is it?+

MetaMask only displays the native BNB by default. Click Import tokens in MetaMask and paste the USDT BEP20 contract address 0x55d398326f99059fF775485246999027B3197955. Symbol and decimals fill in automatically; the balance appears once you confirm. Your funds are already there — the import just makes them visible.

Why does withdrawal show two wallet popups?+

The first transfer is the 0.5% platform fee, the second is the actual send to your destination. Splitting them keeps the contract logic simple and auditable. Both transactions confirm on-chain in a few seconds.

I have USDT but no BNB, so I can't pay gas — what now?+

On the Withdraw section, if your wallet has USDT but no BNB, a panel offers a free one-time BNB drip. Click 'Get free gas', wait a few seconds for it to confirm, and the withdraw button unlocks. The drip refreshes every 24 hours but you only need it once.