Crypto Layer v1.22

Crypto Layer v1.22

Crypto Layer v1.22: z crypto skriptu na replay-safe runtime

Keď sa povie crypto bot, väčšina ľudí si predstaví jednoduchý flow:

strategy -> exchange API -> order

Toto je presne typ architektúry, ktorá funguje dovtedy, kým nenastane prvý reálny problém:

  • request timeoutne,

  • exchange odpovie neskoro,

  • proces spadne medzi submitom a uložením stavu,

  • príde partial fill,

  • lokálny stav sa rozíde s exchange stavom,

  • retry vytvorí duplicitný order,

  • paralelný proces poškodí eventlog.

Preto som Crypto Layer nestaval ako obyčajný wrapper nad burzou. Aktuálna verzia 1.22 už funguje ako runtime-first systém postavený okolo eventov, replayu, snapshotov, idempotency a queue/writer modelu.

Inými slovami:

Crypto Layer už nie je len CLI pre crypto.
Je to replay-safe runtime foundation pre crypto execution.

Základná idea

Kľúčová architektonická zmena je, že exchange API nie je stred systému.

Stred systému je runtime truth:

events.jsonl -> reducer -> state.json -> validation -> certification

events.jsonl je source of truth. state.json je odvodený stav. Ak sa stav stratí, dá sa znovu postaviť z eventov. Ak si nie sme istí, či je stav správny, vieme ho certifikovať cez deterministic replay.

Toto je zásadný rozdiel oproti bežnému botovi, kde stav často žije iba v procese, v cache, alebo v ad-hoc JSON súbore.


Čo dnes funguje

Aktuálna séria releaseov uzavrela viacero runtime invariantov.

1. Event-sourced runtime

Runtime zapisuje business udalosti do append-only eventlogu:

events.jsonl

Z neho sa následne rebuildne stav:

state.json

To znamená, že stav nie je primárna pravda. Stav je projekcia.

Primárna pravda je história udalostí.

Toto umožňuje:

  • rebuild,

  • audit,

  • replay,

  • recovery,

  • deterministické testovanie,

  • snapshoty,

  • validáciu integrity.


2. Runtime hardening

Vo verzii 1.15 sa riešili základné runtime chyby, ktoré by v dlhobežiacom systéme robili tiché problémy.

Opravené boli hlavne:

  • duplicitné shell definície,

  • daemon PID ownership,

  • nepresný daemon stop status,

  • slabé generovanie fill_id,

  • false positive validácia pri snapshot/mock orderoch,

  • hardening testy,

  • zastaraná test dokumentácia.

Dôležitý princíp bol jednoduchý:

runtime nesmie ticho klamať

Ak status tvrdí, že proces je stopped, proces nesmie ďalej bežať. Ak shell obsahuje duplicitnú definíciu funkcie, testy to musia zachytiť. Ak validation niečo označí ako violation, musí to byť reálny problém, nie artefakt snapshotu.


3. Replay certification

Verzia 1.16 pridala deterministic replay certification.

Pribudli príkazy typu:

ce runtime.hash
ce runtime.certify

Runtime vie urobiť:

rebuild #1 -> state hash #1
rebuild #2 -> state hash #2
compare

Ak oba hashe sedia, systém vie povedať:

same events -> same state

Toto je veľmi dôležitý invariant. Bez neho je replay iba nádej. S hash certifikáciou je replay overiteľný fakt.


4. Snapshoty a delta replay

Vo verziách 1.16 a 1.19 pribudol snapshot/checkpoint model.

Snapshot obsahuje:

{
  "snapshot_id": "snap-...",
  "last_event_seq": 123,
  "state_hash": "...",
  "schema_version": 1
}

Verzia 1.19 uzavrela dôležitý invariant:

full replay == snapshot + delta replay

To znamená:

snapshot state + events after last_event_seq -> rovnaký state ako full replay

Toto je základ pre dlhodobejší runtime, kde eventlog môže rásť a full replay od nuly by časom začal byť drahý.


5. Execution idempotency

Verzia 1.17 riešila najnebezpečnejšiu obchodnú chybu: duplicitný submit.

V trading systéme je kritické, aby jeden intent náhodou nevytvoril dva reálne ordery.

Preto vznikol identity chain:

intent_id -> client_order_id -> idempotency_key -> side_effect_id -> exchange_order_id

Runtime blokuje duplicity podľa:

  • intent_id,

  • client_order_id,

  • idempotency_key.

Invariant je:

same intent cannot duplicate real submit

Toto je rozdiel medzi systémom, ktorý iba volá API, a systémom, ktorý rozmýšľa nad execution safety.


6. Exchange uncertainty recovery

Verzia 1.18 riešila ďalší reálny problém:

submit request bol odoslaný, ale odpoveď timeoutla

V takom stave systém nesmie slepo skúsiť submit znova. To by mohlo vytvoriť duplicitný order.

Preto pribudol stav:

side_effect/unknown

A flow:

submit timeout -> unknown -> reconciliation/resolve

Kým existuje unknown submit pre rovnaký intent/client/idempotency key, retry je blokovaný.

Invariant:

unknown exchange result must not cause unsafe retry

Toto je production-grade behavior. Nie je to len error handling. Je to runtime safety model.


7. Queue ako serialized write path

Verzia 1.20 pridala runtime queue.

Predtým vedeli producers zapisovať priamo do eventlogu. To je jednoduché, ale pri paralelných producer procesoch, daemone, ingest slučke alebo recovery operáciách vzniká concurrency pressure.

Preto vznikol model:

producer -> queue/pending -> drain -> events.jsonl

Queue má adresáre:

queue/pending
queue/processing
queue/done
queue/failed

Test overuje, že paralelní producers nespôsobia:

  • stratu eventov,

  • duplicitné event IDs,

  • poškodené seq,

  • invalid JSON.

Invariant:

concurrent producers -> queue -> serialized writer -> monotonic events.jsonl

8. Writer daemon

Verzia 1.21 pridala writer daemon.

Queue už nebolo potrebné drainovať iba ručne. Writer daemon priebežne spracúva queue a zapisuje eventy do canonical eventlogu.

Flow:

queue -> writer daemon -> locked append -> events.jsonl

Writer vie:

  • start,

  • stop,

  • status,

  • heartbeat,

  • batch drain,

  • stale processing recovery,

  • truthful stop status.

Dôležitý detail je recovery zaseknutých queue itemov:

processing -> pending -> drain -> done

To rieši situáciu, keď proces spadne uprostred spracovania queue itemu.


9. Queue producer mode

Verzia 1.22 uzavrela queue architektúru.

Pribudol write mode:

CE_RUNTIME_WRITE_MODE=direct
CE_RUNTIME_WRITE_MODE=queue

V direct režime command zapisuje priamo:

producer -> ce_emit_event -> events.jsonl

V queue režime command iba enqueueuje:

producer -> ce_emit_event -> queue/pending -> writer/drain -> events.jsonl

Dôležité je, že queued flow musí produkovať rovnaký výsledný stav ako direct flow.

Test potvrdzuje:

direct command flow == queued command flow

Konkrétne:

normalized_projection_equal: true

Toto znamená, že queue nie je iba transportná vrstva. Queue zachováva runtime semantiku.


Aktuálna release línia

Posledné verzie uzavreli základnú runtime chrbticu:

1.15 = runtime hardening
1.16 = replay certification
1.17 = execution idempotency
1.18 = exchange uncertainty recovery
1.19 = snapshot delta replay
1.20 = single writer runtime queue
1.21 = writer daemon drain mode
1.22 = queue producer mode

Aktuálny test suite:

{
  "status": "pass",
  "passed": 13,
  "failed": 0
}

Testy pokrývajú:

certification
daemon
hardening
idempotency
ingest
queue
reconciliation
recovery
runtime
snapshot
uncertainty
write_mode
writer

Čo je na tom dôležité

Najväčší posun nie je v tom, že systém vie zavolať exchange API.

Najväčší posun je v tom, že systém začína mať runtime vlastnosti:

truth
replay
certification
recovery
idempotency
serialization

To sú vlastnosti, ktoré oddeľujú skript od runtime systému.

Bežný crypto bot rieši hlavne otázku:

Aký order mám poslať?

Crypto Layer rieši najprv otázky:

Viem dokázať, čo sa stalo?
Viem rebuildnúť stav?
Viem zabrániť duplicitnému execution?
Viem bezpečne reagovať na timeout?
Viem serializovať zápisy?
Viem obnoviť runtime po páde?

Až nad tým dáva zmysel stavať stratégiu alebo AI rozhodovanie.


Súčasný stav projektu

Projekt by som dnes neopísal ako production trading bot.

Presnejší opis je:

replay-safe, snapshot-safe, idempotent, queue-capable crypto runtime foundation

To znamená, že execution substrate už má pevné základy, ale ešte nie je hotový celý trading systém.

Hotové alebo funkčné:

  • eventlog ako source of truth,

  • reducer-based state projection,

  • deterministic replay certification,

  • snapshot metadata,

  • snapshot + delta replay,

  • execution idempotency,

  • unknown exchange result handling,

  • runtime validation,

  • reconciliation/recovery základ,

  • queue primitive,

  • writer daemon,

  • queue producer mode,

  • test suite s 13 passing testami.

Ešte zostáva:

  • realtime ingest daemon,

  • silnejšie dedupe pre polling/websocket ingest,

  • exchange capability contract,

  • risk engine,

  • strategy layer,

  • production-grade exchange reconciliation,

  • dlhodobá observability/board vrstva,

  • live execution hardening proti špecifickým edge-case burzy.


Kam ďalej

Najbližší prirodzený krok je realtime ingest daemon.

Teraz už existuje potrebný základ:

ingest producer -> queue mode -> writer daemon -> eventlog -> reducer -> state

Ďalší release by teda mal riešiť:

1. ingest daemon start/stop/status
2. cursor-safe polling loop
3. ingest events cez queue mode
4. writer daemon ako jediný commit path
5. dedupe podľa exchange order/fill/event ID
6. test.ingest_daemon
7. invariant: repeated polling does not duplicate fills/orders

Až potom dáva zmysel posúvať sa k vyšším vrstvám ako strategy engine alebo AI execution loop.


Záver

Crypto Layer sa za posledné verzie posunul z úrovne crypto tooling do úrovne runtime foundation.

Aktuálne najdôležitejšie invarianty sú:

runtime nesmie ticho klamať
same events -> same state
snapshot + delta == full replay
same intent cannot duplicate submit
unknown result blocks unsafe retry
concurrent producers do not corrupt eventlog
queued flow == direct flow

To je dobrý základ.

Nie preto, že systém už robí všetko.

Ale preto, že to, čo už robí, robí cez runtime model, ktorý je replayable, auditovateľný, testovaný a pripravený na daemon-first architektúru.

Toto je presne bod, kde sa crypto projekt prestáva správať ako sada skriptov a začína sa správať ako systém.

Marek Mihók