TRADE

P2P marketplace v Telegramu

Přímé obchody mezi uživateli bez prostředníka-burzy

✅ Připraveno👤 Solo backend🌍 P2P · Telegram botDemo na vyžádání

Kontext

Všechno začalo obrazem. Umělec Holovnyi Heroi / Main Character uspořádal charitativní sbírku — každá buňka na plátně je člověk, který si svůj fragment koupil jako donaci. Postupem času chtěla jeho komunita obchodovat s těmito fragmenty mezi sebou. Postavil jsem systém, který to dělá pohodlně a transparentně — P2P marketplace s veřejným registrem obchodů. Cílem bylo udělat to levně, jednoduše a efektivně.

obraz · fragmenty-buňky
Klientův Instagram profil
přejít do profilu

Moje role: solo backend — od architektury po produkci. Telegram bot, background processor, integrace s Notion a Telegram User API, Docker deploy. Frontend není — rozhraní je samotný Telegram, a veřejná výloha obchodů je Notion stránka.

Možná ho znáte podle těchto videí

@main_main_character

Problém

Vlastník projektu chtěl dát komunitě možnost obchodovat s aktivy mezi sebou, aniž by sám byl prostředníkem v každém obchodě. Hotové P2P burzy nevyhovovaly — bylo potřeba vlastní logiku pro komunitu.

Schopnosti

Telegram bot s třívrstvou persistencí a background workerem, který garantuje, že žádný obchod se neztratí ani při pádu služby.

// system

Architektura

testing
Telegram users
SELL · BUY flows
command
Telegram Bot API
Bot Server
aiogram · async · FSM
Queue
Redis + FSM state
Background Processor
atomic 3-step commit
Archive Monitor
user API · side-car
SQL Ledger
private, transactional
Public Registry
Notion · CMS view
Whitelist
Excel + quotas
closed testing

Složitá řešení

01

Atomicita třívrstvého obchodu

Každý obchod je třeba uložit ve třech systémech najednou (fronta → transakční DB → veřejný registr). Kterýkoli z nich může spadnout. Při špatném pořadí — buď fantom obchod bez veřejného záznamu, nebo ztracená transakce.

Řešení → Background processor potvrdí požadavek z fronty pouze po úspěšném INSERT a append do obou úložišť. Pokud veřejná publikace selhala — opětovná kontrola, zda záznam již existuje (race-safe), a pak teprve retry. Garantuje "at-least-once delivery" bez duplicit.

02

Anonymita + audit současně

Veřejný registr nesmí ukazovat skutečné Telegram-ID účastníků. Ale pro řešení sporů je potřeba kompletní archiv konverzací s vazbou na skutečné ID.

Řešení → Dvouvrstvý systém identifikace: fake-ID pro veřejné záznamy, real-ID — pouze privátně v transakční DB. Archiv konverzací se vede podle reálného ID v souborovém úložišti přístupném pouze adminovi.

03

Konkurence bez race conditions

Klasický threadovaný bot trpí race conditions ve FSM — stav uživatele se může přepsat dvěma callbacky najednou.

Řešení → Plně asynchronní architektura, FSM-stav se ukládá ve sdíleném úložišti (ne v paměti procesu), background processor zpracovává frontu sekvenčně. Lze spustit více instancí bota — stav je sdílený.

04

Dva Telegram klienti v jednom projektu

Bot API neposkytuje přístup ke kompletní historii konverzací (jen nové zprávy). Pro plný archiv je potřeba user-account API s vlastní autorizací.

Řešení → Samostatný side-car proces na user-account API běží na pozadí a zapisuje historii do souborového archivu. Neblokuje hlavní bot, běží nezávisle. Třetí proces (monitoring) pod tmux se samostatnými logy.

Technologie

Backend / runtime

Python 3.13aiogram 3asyncioaiohttphttpx

Persistence

Redis (queue + FSM)SQLite (transactional ledger)Notion API (public ledger)JSON archive

Integrace

Telegram Bot APITelegram User API (Telethon)Excel / openpyxl (whitelist)

Infrastruktura

Docker (linux/amd64)tmuxbash orchestration

Co to dává oproti centralizované burze

Vlastní P2P bot pro komunitu — tam, kde hotové burzy nedovolí nastavit vlastní pravidla.

Vlastní pravidla
Burza
nemožné
Trade
plná kontrola (whitelist, kvóty, scripty)
Poplatek za obchod
Burza
0.1–1%
Trade
0
Transparentnost obchodů
Burza
soukromé logy burzy
Trade
veřejný registr v Notion
Závislost na platformě
Burza
plná (mohou zavřít, zabanovat)
Trade
žádná — vlastní kód, vlastní server
Anonymita účastníků
Burza
KYC povinné
Trade
fake-ID, bez KYC
Archiv sporů
Burza
nedostupný uživatelům
Trade
plný JSON-archiv konverzací

Co dál?

Tohle je jeden z mých cases. Zbytek je na hlavní.