Crypto OS layer 0.1

Crypto OS layer 0.1

CE — Shellový runtime pre krypto burzy

Keď som budoval svoj AI toolkit, naučil som sa jednu vec: ak chceš mať nad niečím skutočnú kontrolu, musíš to mať ako primitívy v shelli. Žiadne GUI, žiadne aplikácie tretích strán — len čisté volania, ktoré môžeš skladať do skriptov a stratégií.

Rovnakú filozofiu som teraz aplikoval na krypto trading. Výsledok sa volá CE — Crypto Exchange CLI.


Prečo nie niečo hotové?

Existuje kopec nástrojov. CCXT, rôzne boti, webové dashboardy. Všetky majú jeden problém — sú to čierne skrinky. Nevieš presne čo posielajú, kedy to posielajú, a keď niečo nefunguje, máš problém zistiť prečo.

CE je iný prístup. Je to tenká vrstva shellu nad HTTP API burzy. Každé volanie je transparentné — vidíš raw response, vidíš čo sa posiela, môžeš to debugovať, skriptovať, kombinovať s čímkoľvek.


Architektúra

Projekt žije v os_layer/crypto vedľa môjho AI toolkitu a Arch deploy skriptov. Štruktúra je zámerne jednoduchá:

 
crypto/
├── ce                          # entrypoint
├── config/
│   ├── profiles/
│   │   └── coinmate-main.conf  # profil burzy
│   └── keys/
│       └── coinmate-main.key   # API kľúče (mimo VCS)
└── lib/
    ├── core/
    │   ├── ce_cli.sh           # CLI parser, routing príkazov
    │   ├── ce_contract.sh      # kontrakty (vstup/výstup definície)
    │   └── ce_profiles.sh      # načítanie profilov a kľúčov
    └── exchanges/
        └── coinmate/
            ├── client.sh       # HTTP klient, podpis, nonce
            └── contract_impl.sh # implementácia primitív

Kontrakt vrstva je kľúčová myšlienka. Každý príkaz má definovaný vstup a výstup — nezávisle od toho, ktorá burza je pod ním. Keď raz pridám Binance alebo Kraken, stratégie napísané nad CE nebudú vedieť rozdiel.


Autentifikácia a jeden zákerný detail

Coinmate používa HMAC-SHA256 podpis. Správa je nonce + clientId + publicKey, podpísaná secretom. Štandardná vec — ale s jedným háčikom.

Coinmate vyžaduje UPPERCASE hex. OpenSSL generuje lowercase. Toto nie je nikde výrazne zdokumentované a API vráti Access denied aj keď máš správne kľúče.



sh
_coinmate_signature() {
  nonce="$1"
  data="${nonce}${COINMATE_CLIENT_ID}${COINMATE_API_KEY}"

  printf '%s' "$data" |
    openssl dgst -sha256 -hmac "$COINMATE_API_SECRET" -hex |
    awk '{print $2}' |
    tr '[:lower:]' '[:upper:]'
}

Ten tr '[:lower:]' '[:upper:]' na konci je viac než hodina debugovania.


Primitívy

CE má desať príkazov. Všetky vracajú čistý JSON, ktorý môžeš ďalej spracovávať cez jq, ukladať do súborov, posielať do AI toolkitu.

Zostatok účtu



sh
./ce exchange.balances coinmate-main



json
[
  { "asset": "BTC", "free": 0.00119325, "locked": 0, "total": 0.00119325 },
  { "asset": "EUR", "free": 5.14930921, "locked": 0, "total": 5.14930921 }
]

Vracia len nenulové meny. free je disponibilné, locked je rezervované v otvorených orderoch.

Aktuálna cena



sh
./ce exchange.ticker BTC_EUR



json
{
  "pair":   "BTC_EUR",
  "bid":    "67919.6",
  "ask":    "68015.8",
  "last":   "67733.8",
  "high":   "68431.9",
  "low":    "67600",
  "volume": "0.15959981"
}

Verejný endpoint, nepotrebuje podpis. bid je čo ti zaplatia za BTC, ask je za čo môžeš kúpiť.

Deposit adresa



sh
./ce exchange.deposit BTC



json
{
  "currency": "BTC",
  "address":  "bc1pgaq3gs5fc52pymkgjmvzk9taqnzegh68p6dfcdm8v76d6wazmvnsmuscvc",
  "tag":      null
}

Kúpa — market aj limit



sh
# Market — kúp BTC za 5 EUR za aktuálnu cenu
./ce exchange.buy BTC_EUR 5

# Limit — kúp 0.001 BTC keď cena klesne na 60000 EUR
./ce exchange.buy BTC_EUR 0.001 60000

Pri market orderi (instant) je AMOUNT suma v EUR ktorú chceš minúť. Pri limite je to množstvo BTC. Toto je asymetria Coinmate API — CE to rieši transparentne.

Predaj — market aj limit



sh
# Market — predaj 0.0001 BTC za aktuálnu cenu
./ce exchange.sell BTC_EUR 0.0001

# Limit — predaj 0.001 BTC keď cena vystúpi na 80000 EUR
./ce exchange.sell BTC_EUR 0.001 80000

Tu je ďalšia asymetria: sellInstant berie amount v BTC, kým buyInstant berie total v EUR. Logické z pohľadu burzy, mätúce z pohľadu používateľa. CE to abstrahuje.

Otvorené ordery a cancel



sh
./ce exchange.orders BTC_EUR
./ce exchange.cancel 3876374845



json
[
  {
    "order_id":   "3876374845",
    "pair":       "BTC_EUR",
    "side":       "sell",
    "order_type": "LIMIT",
    "amount":     "0.0001",
    "price":      "100000",
    "created":    "2026-05-08T19:56:51Z"
  }
]

História obchodov



sh
./ce exchange.history BTC_EUR 10



json
[
  {
    "trade_id":   "18047691",
    "pair":       "BTC_EUR",
    "side":       "buy",
    "order_type": "INSTANT",
    "amount":     "0.00002919",
    "price":      "68098.8",
    "fee":        "0.01192682",
    "fee_type":   "TAKER",
    "total":      "1.987803972",
    "timestamp":  "2026-05-08T19:59:58Z"
  }
]

fee_type rozlišuje MAKER (limit order čakal na vyplnenie, nižší poplatok) a TAKER (market order, vyšší poplatok).

Výber



sh
./ce exchange.withdraw BTC bc1q... 0.001

Coinmate vyžaduje aby adresa bola vopred potvrdená cez UI (whitelist cez 2FA). Toto je správne bezpečnostné opatrenie.


Skriptovanie

Tu je sila CE. Primitívy sú stavebné kamene:



sh
# Aktuálna hodnota portfólia
price=$(./ce exchange.ticker BTC_EUR | jq -r '.last')
btc=$(./ce exchange.balances | jq -r '.[] | select(.asset=="BTC") | .free')
echo "Hodnota BTC: $(echo "$btc * $price" | bc -l) EUR"

# Zruš všetky otvorené ordery
./ce exchange.orders | jq -r '.[].order_id' | while read -r id; do
  ./ce exchange.cancel "$id"
done

# DCA — nakúp každý deň cez cron
# 0 9 * * * /path/to/dca.sh
./ce exchange.buy BTC_EUR 5

Čo bude ďalej

Primitívy sú hotové a otestované. Ďalší krok sú stratégie — skripty postavené nad týmito primitívami:

  • DCA — pravidelný nákup za fixnú sumu
  • Grid trading — sieť limit orderov okolo aktuálnej ceny
  • Rebalancing — udržiavanie cieľového pomeru BTC/EUR
  • Alert — notifikácia keď cena dosiahne hranicu

Každá stratégia bude jednoduchý shellový skript, ktorý volá CE primitívy. Žiadna mágia, žiadne závislosti, žiadne čierne skrinky.


Ako pridať novú burzu

Kontraktová vrstva umožňuje pridať ľubovoľnú burzu bez toho aby sa zmenili stratégie:

  1. Vytvor lib/exchanges//client.sh — HTTP klient s autentifikáciou
  2. Vytvor lib/exchanges//contract_impl.sh — implementuj exchange_balances, exchange_buy, exchange_sell atď.
  3. Pridaj case vetvu do ce_select_adapter() v ce_profiles.sh
  4. Vytvor config/profiles/.conf s EXCHANGE=

Hotovo. Tá istá stratégia DCA bude fungovať na Coinmate, Binance, Kraken — bez jedinej zmeny v kóde stratégie.


CE je súčasť môjho os_layer — osobnej operačnej vrstvy nad systémom, kde žije aj AI toolkit, Arch deploy skripty a ďalšie nástroje. Všetko shellové, všetko skladateľné, všetko pod kontrolou.

Marek Mihók