Ako postavit Solana escrow program pre marketplace sluzby (Anchor blueprint)
Mnoho timov chce “nieco uzitocne” na Solane a hned skoci do tokenomiky. Lepsi prvy produkt je casto nudny, ale biznisovo silny: escrow.
Ak prevadzkujes service marketplace (design, konzultacie, development, AI tasky), potrebujes jednu klucovu garanciu:
- buyerove prostriedky su rezervovane,
- seller dostane vyplatu az po akceptacii,
- disputy a timeouty su deterministicke.
Solana je na toto dobra volba, lebo fee su male a vykon staci na bezny produktovy UX.
Toto je produkcny blueprint postaveny na Anchor pristupe.
1. Produktovy scope (co ma v1 robit)
Udrz prvu verziu uzku:
- vytvorit escrow pre jednu objednavku,
- naplnit escrow stablecoinom (napr. USDC),
- oznacit dodanie,
- buyer potvrdi a uvolni platbu,
- volitelne storno po timeout-e.
Nesnaz sa v rovnakej verzii riesit arbitrazny marketplace, reputacny staking aj fee tokenomiku.
2. Account model
Cisty account model usetri vela bolesti v dalsich releasoch.
#[account]
pub struct Escrow {
pub escrow_id: u64,
pub buyer: Pubkey,
pub seller: Pubkey,
pub mint: Pubkey,
pub amount: u64,
pub fee_bps: u16,
pub created_at: i64,
pub delivery_deadline: i64,
pub status: EscrowStatus,
pub bump: u8,
}
#[derive(AnchorSerialize, AnchorDeserialize, Clone, PartialEq, Eq)]
pub enum EscrowStatus {
Created,
Funded,
Delivered,
Released,
Cancelled,
Disputed,
}
Design poznamky:
- Pouzivaj PDA escrow vault authority, nikdy nie sukromny key wallet pre custody.
statusprechody drz explicitne.- Kriticke roly a sumy ukladaj on-chain, never off-chain payloadu.
3. Sada instrukcii
Minimalna, ale kompletna sada:
create_escrow(escrow_id, seller, amount, deadline, fee_bps)fund_escrow()mark_delivered(proof_hash)accept_and_release()cancel_after_timeout()raise_dispute(reason_hash)
Toto staci na realne transakcie v produkcii a bezpecny iteracny vyvoj.
4. Kriticke bezpecnostne invarianty
Tieto pravidla musia platit v kazdej instrukcii:
- Prostriedky idu z escrow vaultu iba na povolene adresy.
accept_and_releasemoze volat iba buyer.mark_deliveredmoze volat iba seller.- Timeout storno je povolene az ked
Clock::get()?.unix_timestamp > delivery_deadline. - Stavove prechody su jednosmerne a validovane (
Funded -> Delivered -> Released). - Fee a payout vypocty su checked (ziadne overflow a skryte podtecenia).
Ak toto porusis, dostanes penazne bugy, nie kozmeticke bugy.
5. Ukazka release flow
pub fn accept_and_release(ctx: Context<AcceptAndRelease>) -> Result<()> {
let escrow = &mut ctx.accounts.escrow;
require!(escrow.status == EscrowStatus::Delivered, EscrowError::InvalidStatus);
require!(ctx.accounts.buyer.key() == escrow.buyer, EscrowError::Unauthorized);
let fee = (escrow.amount as u128)
.checked_mul(escrow.fee_bps as u128)
.ok_or(EscrowError::MathOverflow)?
/ 10_000u128;
let seller_amount = (escrow.amount as u128)
.checked_sub(fee)
.ok_or(EscrowError::MathOverflow)?;
// Transfer seller payout from vault ATA -> seller ATA
// Transfer fee from vault ATA -> platform fee ATA
// (Use token program CPI with PDA signer seeds)
escrow.status = EscrowStatus::Released;
Ok(())
}
V ukazke nie je cele CPI boilerplate, ale je tam podstata:
- striktna validacia stavu,
- striktna validacia volajuceho,
- checked matematika,
- update stavu az po validnom transfer flow.
6. Off-chain sluzby, ktore stale potrebujes
Smart contract sam o sebe nestaci.
Do produkcie este potrebujes:
Order APIpre business pravidla a metadata,Indexer/workerna sledovanie escrow account zmien a signature,Reconciliation DBmapovanie on-chain escrow ID na order ID,Notification servicepre delivery, akceptaciu a timeout upozornenia.
Program zabezpecuje transfer hodnoty. Backend zabezpecuje prevadzkovatelnost.
7. Test matrix (nepreskakovat)
Unit a integration testy musia pokryt:
- Happy path: create -> fund -> deliver -> release
- Unauthorized call scenare
- Pokus o dvojite vykonanie instrukcii
- Deadline edge scenare
- Fee rounding pri malych sumach
- Pokusy o token account mismatch
Ak testy neskusaju “ukradnut” funds, su nekompletne.
8. Rollout plan
Pragmaticky rollout:
- interny beta pilot s nizkymi limitmi,
- mainnet cohorta s allowlist sellerov,
- automaticke alerty na failed releases a stuck escrows,
- postupne navysovanie limitov.
Beri to ako payment infrastrukturu. Rollout disciplina je dolezitejsia ako rychle pridavanie funkcii.
9. Preco je to silny prvy Solana produkt
Escrow dava okamzitu biznis hodnotu:
- trust vrstva pre marketplace transakcie,
- nizsia operacna rezia na reconciliation,
- jasna cesta k platform fee.
A technicky to pripravi tim na tazsie veci:
- account design,
- signer/authority bezpecnost,
- deterministicke state machine,
- produkcny monitoring on-chain flow.
Finalny zaver
Ak chces seriozny Solana use-case, postav escrow skor nez spekulativne mechaniky.
Dostanes uzitocny produkt, realny transakcny objem a codebase, na ktorom vies stavat pokrocilejsie programy.
Súvisiace články
Solana v roku 2026: use-casy, ktore sa naozaj nasadzuju
Prakticky prehlad realnych Solana use-casov v roku 2026: stablecoin platby, Actions/Blinks a operacne vzory, ktore viete dodat tento kvartal.
Architektúra ako kód: ADR, C4 diagramy a quality gates v CI
Kompletný sprievodca ako zaviesť living documentation pomocou Architecture Decision Records, C4 modelu a automatizácie v CI/CD pipeline.
Protobuf evolúcia v eventoch: Prečo buf breaking nestačí
Ako bezpečne evolovať Protobuf schémy v event-driven systémoch. Pravidlá pre .proto, upcaster pattern a backward compatibility.
Architectural Linting: Automatizovaná ochrana proti spaghetti kódu
Ako vynútiť architektonické pravidlá v CI/CD. Dependency Cruiser pre JS/TS, ArchUnit pre Java a praktické príklady konfigurácie.
Citujte tento článok
Ak na článok odkazujete, pridajte pôvodnú URL a uveďte autora.