Edited on 26/07/2025, 12:34:52 UTC
Hey Bitcointalk,
I'm working on designing a P2P Bitcoin exchange focused on cashout to bank transfer, PayPal, and similar fiat methods — think Paxful-style, but with greater transparency, wallet isolation, and internal traceability.
Here’s what sets my design apart:
📦 Each user gets a unique Bitcoin wallet address (on-chain) at registration.
🔐 No pooling of funds. Every UTXO is tracked by original owner and current holder.
📗 Trades are off-chain (ledger-based). BTC only moves on-chain during deposit and withdrawal.
🧾 I want full AML traceability: I can tell who originally deposited the BTC and who owns it at any point.
💸 Users pay no network fees when trading — only when withdrawing.
✅ Example Scenario
Let me walk you through a case that illustrates what I’m building:
John deposits 0.01 BTC into his assigned BTC address. The funds are now UTXOs controlled by the platform but credited to John's balance internally.
James also deposits 0.02 BTC into his own wallet address, completely separate.
Harry hasn't deposited anything, but he creates a trade to buy 0.005 BTC from John via bank transfer.
When Harry completes the fiat payment, ownership of 0.005 BTC (from John’s UTXOs) is transferred to Harry inside the internal ledger — no on-chain tx yet.
Now:
John has 0.005 BTC remaining
Harry owns 0.005 BTC internally
James still has 0.02 BTC, untouched
Later, Harry wants to sell that 0.005 BTC to someone else or withdraw it.
Here’s my core constraint:
When the next person receives BTC (either through trade or withdrawal), it must be the exact same BTC originally deposited by John — not from James or a general pool.
So when Harry withdraws, I want to ensure the withdrawal is signed using John’s wallet key, since that UTXO technically still resides in John’s wallet (now owned by Harry).
🤔 What I Need Feedback On:
Does this model make sense in terms of security, scalability, and UTXO tracking?
Is it acceptable that ownership transfers are purely internal until withdrawal?
Should I fragment UTXOs when trading portions (e.g., 0.005 BTC from a 0.01 UTXO)?
Are there good practices or known issues with tracking UTXOs per user without pooling?
Should I eventually consolidate UTXOs from dormant users or avoid that to preserve isolation?
Would love any input, warnings, or suggestions from devs who've built P2P exchanges or non-custodial systems before. Thanks in advance.
Edit:
I'm exploring a P2P offer approach where:
1) The buyer can verify the seller's Bitcoin address and confirm the spendable BTC they’re about to receive.
2) If issues arise or suspects funds are tainted, the buyer can request KYC from the seller. The seller can refuse, and the buyer may choose another seller.
3) For privacy, a new deposit address is generated after each deposit.
4) The buyer can audit the deposit transaction and verify the source of funds.
This ensures transparency while letting the buyer take full responsibility for the BTC they receive.
Original archived Building a Transparent BTC→Fiat P2P Exchange (Internal Ledger + Wallet Isolation
Scraped on 19/07/2025, 12:35:13 UTC
Hey Bitcointalk,
I'm working on designing a P2P Bitcoin exchange focused on cashout to bank transfer, PayPal, and similar fiat methods — think Paxful-style, but with greater transparency, wallet isolation, and internal traceability.
Here’s what sets my design apart:
📦 Each user gets a unique Bitcoin wallet address (on-chain) at registration.
🔐 No pooling of funds. Every UTXO is tracked by original owner and current holder.
📗 Trades are off-chain (ledger-based). BTC only moves on-chain during deposit and withdrawal.
🧾 I want full AML traceability: I can tell who originally deposited the BTC and who owns it at any point.
💸 Users pay no network fees when trading — only when withdrawing.
✅ Example Scenario
Let me walk you through a case that illustrates what I’m building:
John deposits 0.01 BTC into his assigned BTC address. The funds are now UTXOs controlled by the platform but credited to John's balance internally.
James also deposits 0.02 BTC into his own wallet address, completely separate.
Harry hasn't deposited anything, but he creates a trade to buy 0.005 BTC from John via bank transfer.
When Harry completes the fiat payment, ownership of 0.005 BTC (from John’s UTXOs) is transferred to Harry inside the internal ledger — no on-chain tx yet.
Now:
John has 0.005 BTC remaining
Harry owns 0.005 BTC internally
James still has 0.02 BTC, untouched
Later, Harry wants to sell that 0.005 BTC to someone else or withdraw it.
Here’s my core constraint:
When the next person receives BTC (either through trade or withdrawal), it must be the exact same BTC originally deposited by John — not from James or a general pool.
So when Harry withdraws, I want to ensure the withdrawal is signed using John’s wallet key, since that UTXO technically still resides in John’s wallet (now owned by Harry).
🤔 What I Need Feedback On:
Does this model make sense in terms of security, scalability, and UTXO tracking?
Is it acceptable that ownership transfers are purely internal until withdrawal?
Should I fragment UTXOs when trading portions (e.g., 0.005 BTC from a 0.01 UTXO)?
Are there good practices or known issues with tracking UTXOs per user without pooling?
Should I eventually consolidate UTXOs from dormant users or avoid that to preserve isolation?
Would love any input, warnings, or suggestions from devs who've built P2P exchanges or non-custodial systems before. Thanks in advance