Asosiy kontentga o‘tish
AI qo‘llanmalari

jev-trader yordamida Monad’da blokma-blok ishlaydigan market-meyker yaratish va ishga tushirish

jev-trader’ni o‘rnatish, uni dry-run rejimida xavfsiz ishga tushirish, Jev modelini ulash, HTTP va SSE oqimlarini ko‘rib chiqish, kotirovkalar hamda to‘ldirilgan buyurtmalarni talqin qilish va savdo siklini Monad’ning taxminan 300 ms blok vaqtiga mos ushlab turadigan kechikish optimallashtirishlarini tushunishni o‘rganing.

jev-trader yordamida Monad’da blokma-blok ishlaydigan market-meyker yaratish va ishga tushirish

jev-trader nima qiladi

jev-trader Monad tarmog'idagi Kuru MON-USDC order kitobi uchun blokma-blok ishlaydigan savdo botidir. Har bir yangi blokda u jonli order kitobini o'qiydi, modeldan sotib olish yoki sotish kerakligini so'raydi va tanlangan tomonda faqat joylashtiriladigan limit-order niyatini yaratadi.

Buyurtma joriy touch ichida QUOTE_INSIDE_TICKS tik qiymatiga joylashtiriladi. Agar spred juda tor bo'lsa, narx touch qiymatiga o'rnatiladi. Bot avval joylashtirilgan buyurtmalarini bekor qiladi va ularning o'rniga yangi buyurtmani bitta Kuru batchUpdate orqali joylashtiradi.

Buyurtma faqat joylashtiriladigan bo'lgani uchun, u darhol bajarilmasdan order kitobida turishi ko'zda tutiladi. Boshqa ishtirokchi uning narxini kesib o'tadigan taker buyurtmasini yuborganda, bitim amalga oshadi. Bu strategiyaga spredni to'lash o'rniga undan daromad olish imkonini beradi, biroq bajarilish, inventar, gas va bozor xatarlari saqlanib qoladi.

Asosiy imkoniyatlar

  • Har bir Monad blokida bitta qaror: Bot taxminan har 300 ms da eng yangi blokni qayta ishlaydi.
  • Kuru order kitobining jonli ma'lumotlari: Maxsus o'quvchi getL2Book ma'lumotini dekodlaydi va AMM vaultini order kitobiga birlashtiradi.
  • Modelning ikki varianti: Standart mock model momentum evristikasidan foydalanadi, MODEL=jev esa TypeSafe Jev modelini yoqadi.
  • Xavfsiz dry-run xatti-harakati: PRIVATE_KEY bo'lmasa, bot haqiqiy order kitobi va haqiqiy bozor bitimlaridan foydalanadi, ammo o'z buyurtmalari va to'ldirilishlarini simulyatsiya qiladi.
  • Faqat joylashtiriladigan buyurtmani almashtirish: Har bir yangilanish ma'lum bo'lgan joylashtirilgan buyurtmalarni bekor qiladi va bitta paketda yangi, faqat joylashtiriladigan buyurtmani yuboradi.
  • Pozitsiya va P&L kuzatuvi: Hodisalar pozitsiya, amalga oshirilgan va amalga oshirilmagan natijalar, gas xarajatlari, to'ldirilishlar soni va boshqa jami ko'rsatkichlarni bildiradi.
  • HTTP va SSE monitoringi: Kichik Bun serveri eng so'nggi snapshot, 1 000 tagacha tarixiy blok hodisasi va jonli hodisalar oqimini taqdim etadi.
  • Asinxron tasdiqlar: Jonli tranzaksiyalar asosiy yo'lda yuboriladi, receipt va ularga bog'liq tekshiruvlar esa keyinroq bajariladi.

Loyiha arxitekturasi

Manba daraxti bloklarni qabul qilish, bozorga kirish, modelni baholash, savdo mantiqi va monitoringni alohida qismlarga ajratadi:

  • src/config.ts muhit konfiguratsiyasini yuklaydi.
  • src/chain.ts WebSocket newHeads yangilanishlarini qabul qiladi, zaxira mexanizmi sifatida pollingdan foydalanadi va faqat eng yangi blokni saqlaydi.
  • src/book.ts bitta eth_call orqali order kitobini o'qiydi va dekodlaydi.
  • src/market.ts Kuru order kitobini o'qish, margin depozitlari, lokal nonce'lar, paketli yangilanishlar va asinxron tasdiqlarni boshqaradi.
  • src/model.ts model interfeysini belgilaydi hamda JevModel va MockModel ni taqdim etadi.
  • src/trader.ts savdo siklini ishga tushiradi va pozitsiyalar hamda P&L ni kuzatadi.
  • src/server.ts Bun.serve yordamida snapshotlar, tarix va Server-Sent Events'ni taqdim etadi.

O'rnatish va sozlash

1. Muhit faylini tayyorlash

Repository katalogidan namunaviy konfiguratsiyani nusxalang:

cp .env.example .env

Ilovani ishga tushirishdan oldin hosil bo'lgan .env faylini tekshiring. Eng muhim xatti-harakat PRIVATE_KEY mavjud yoki mavjud emasligiga bog'liq.

Birinchi ishga tushirish uchun PRIVATE_KEY ni sozlamang. Ilova haqiqiy bozor ma'lumotlari asosida dry-run rejimida ishlaydi va o'z buyurtmalarini tarmoqqa yubormaydi.

2. Bog'liqliklarni o'rnatish

Loyiha bog'liqliklarni boshqarish va ishga tushirish uchun Bun'dan foydalanadi:

bun install

3. Treyderni ishga tushirish

bun run start

Standart konfiguratsiyada mock momentum modeli inference o'rnini bosuvchi sifatida ishlaydi. Shundan so'ng server treyder holati va hodisalar oqimini HTTP endpointlari orqali taqdim etadi.

Qaror modelini tanlash

Standart mock modeldan foydalanish

Standart mock model Jev'ga murojaat qilmasdan to'liq pipeline'ni sinash uchun mos. U momentum evristikasi yordamida qarorlar qabul qiladi va order kitobini o'qish, simulyatsiya qilingan buyurtmalar, to'ldirilishlar, hisob-kitoblar hamda hodisalar oqimini tekshirish imkonini beradi.

Jev modelini yoqish

Jev'dan foydalanish uchun .env faylida quyidagi qiymatlarni sozlang:

MODEL=jev
TYPESAFE_AI_API_KEY=your_api_key

Har bir blokda tanlangan modeldan HORIZON_BLOCKS davomida kutilayotgan harakat haqida so'raladi. Uning standart qiymati 100 blok yoki loyiha README'siga ko'ra taxminan 30 soniya.

Oddiy qaror buy yoki sell bo'ladi. hold natijasi modelning uchinchi strategiyasini anglatmaydi: u faqat model joriy blok muddati ichida javob bermaganda paydo bo'ladi. Bunday holatda decision.late qiymati true bo'ladi va ushbu blok uchun buyurtma joylashtirilmaydi.

Dry-run rejimida xavfsiz ishlash

PRIVATE_KEY sozlanmaganida, jev-trader jonli tranzaksiyalarni yubormaydi. U baribir haqiqiy Kuru order kitobini o'qiydi va haqiqiy model qarorlarini hosil qiladi.

Simulyatsiya qilingan kotirovka status: "sim" qiymatiga ega. U bir blok davomida turadi va faqat haqiqiy bozor bitimi uning narxini kesib o'tgandagina to'ldirilgan hisoblanadi. Hosil bo'lgan to'ldirilish simulated: true qiymatiga ega.

Bu rejim quyidagilarni tekshirish uchun foydali:

  • Order kitobi yangilanishlari ishonchli kelib tushyaptimi.
  • Model kechikishi blok byudjeti ichida qolyaptimi.
  • Kotirovkalar qanchalik tez-tez to'ldirilishi mumkin.
  • Simulyatsiya qoidalari asosida pozitsiyalar va P&L qanday o'zgaradi.
  • Dashboard yoki boshqa SSE mijozi har bir hodisa turini to'g'ri qayta ishlayaptimi.

HTTP endpointlarini ko'rib chiqish

Mock modeldan foydalanadigan joylashtirilgan dry-run nusxasi https://jev-trader-production.up.railway.app manzilida mavjud.

Eng so‘nggi holatni ko‘rish

Root endpoint faol model, hamyon, dry-run holati va eng so‘nggi blok hodisasi haqida ma’lumot beradi:

curl https://jev-trader-production.up.railway.app/

So‘nggi tarixni ko‘rish

Tarix endpointi so‘nggi 1 000 ta blok hodisasini qaytaradi:

curl https://jev-trader-production.up.railway.app/history

Jonli SSE oqimini kuzatish

Ulanishni ochiq qoldirish va hodisalarni kelishi bilan ko‘rsatish uchun curl -N dan foydalaning:

curl -N https://jev-trader-production.up.railway.app/events

Oqim mijoz ulanganda snapshot hodisasini, keyin esa qayta ishlangan har bir blok uchun bittadan block hodisasini yuboradi. Jonli tranzaksiya kvitansiyalari quote yangilanishlarini, aniqlangan ijrolar esa fill hodisalarini hosil qiladi.

Blok hodisasini tushunish

Blok hodisasi bozor holati, model qarori, yangi kotirovka maqsadi, mavjud likvidlik, pozitsiya ma’lumotlari va jamlanma natijalarni birlashtiradi. Qisqartirilgan misol quyidagicha:

{
  "block": 105488269,
  "mid": 0.022636,
  "bestBid": 0.022628,
  "bestAsk": 0.022644,
  "spreadBps": 7.07,
  "decision": {
    "action": "buy",
    "probabilities": { "buy": 0.77, "sell": 0.23, "hold": 0 },
    "upIn10": 0.77,
    "latencyMs": 81,
    "late": false
  },
  "quote": {
    "side": "buy",
    "price": 0.022629,
    "size": 200,
    "status": "sent",
    "capped": false
  }
}
  • mid, bestBid va bestAsk kuzatilgan bozorni tavsiflaydi.
  • spreadBps joriy spredni bazaviy punktlarda ifodalaydi.
  • decision.action model tanlagan yo‘nalishni bildiradi.
  • decision.probabilities modelning xarid va sotuv ehtimollarini saqlaydi.
  • upIn10 xarid ehtimoliga teng.
  • decision.latencyMs modelni baholash kechikishini ko‘rsatadi.
  • quote ushbu blok uchun yuborishga uringan buyurtmani tavsiflaydi.
  • quote.cancel bekor qilish uchun kiritilgan, avvaldan mavjud buyurtmalarni bildiradi.
  • resting yangilanishdan keyin botga ma’lum bo‘lgan bid va ask hajmini qayd etadi.
  • position yo‘nalish, hajm, kirish narxi va amalga oshirilmagan natijalarni ko‘rsatadi.
  • totals bloklar, qarorlar, kotirovkalar, to‘ldirilgan buyurtmalar, qaytarishlar, kechikkan bloklar, model xarajati, gas va P&L ni jamlaydi.

Pozitsiya va moliyalashtirish cheklovlari

Agar pozitsiya cheklovi so‘ralgan tomonni taqiqlasa yoki jonli marja mablag‘lari buning uchun yetarli bo‘lmasa, kotirovka qarama-qarshi tomonga joylashtiriladi. Bunday vaziyatda quote.capped qiymati true bo‘ladi. Modelning dastlabki ehtimollari o‘zgarmaydi, shu orqali iste’molchilar model chaqirig‘i bilan amalda kotirovka qilingan tomonni farqlay oladi.

Jonli kotirovka tasdiqlarini tushunish

Jonli yuborishlar tranzaksiya kvitansiyasini kutmaslik uchun ishga tushiriladi va natijasi kutilmaydi. Shuning uchun dastlabki blok hodisasi status: "sent" bo‘lgan maqsadni o‘z ichiga oladi.

Xabar qilingan gasMon gas limiti, oxirgi ma’lum bazaviy to‘lov va ustuvor to‘lov ko‘paytmasi sifatida hisoblanadi. Loyiha Monad gas limitini undirishi sababli, tranzaksiya muvaffaqiyatli yakunlanishidan yoki qaytarilishidan qat’i nazar, bu haqiqiy xarajat sifatida qaralishini qayd etadi.

Kvitansiya odatda bir yoki ikki blokdan keyin keladi va alohida quote hodisasini hosil qiladi:

event: quote
data: {
  "block": 105488269,
  "quote": {
    "status": "placed",
    "orderId": 100295812,
    "gasMon": 0.0357
  }
}

Jonli kotirovka quyidagi holatlardan biriga o‘tishi mumkin:

  • placed: Tranzaksiya muvaffaqiyatli yakunlangan va buyurtma identifikatorini o‘z ichiga oladi.
  • reverted: Kiritilgan narx qabul qilinishidan oldin order book o‘zgargan yoki so‘ralgan bekor qilish allaqachon to‘ldirilgan buyurtmaga qaratilgan.
  • lost: 10 ta blokdan keyin hech qanday kvitansiya topilmagan.

Fill hodisalarini tushunish

Fill hodisalari botning o‘z buyurtma joylashtirish tranzaksiyasida yuz bermaydi. Ular boshqa treyderning taker buyurtmasi mavjud buyurtmaga tegib ketganda sodir bo‘ladi. Bot tegishli Trade jurnalini modelga bozor ma’lumotlarini yetkazib beradigan ayni eth_getLogs so‘rovlarini davriy yuborish jarayoni orqali aniqlaydi.

event: fill
data: {
  "block": 105488271,
  "fill": {
    "side": "buy",
    "size": 200,
    "price": 0.022629,
    "txHash": "0x…",
    "orderId": 100295812,
    "simulated": false
  }
}

Fill hodisasidagi txHash taker tranzaksiyasiga tegishli. Fill qayta ishlanganda, oqim yangilangan pozitsiya ma’lumotlari, amalga oshirilgan P&L va jamlanma fill natijalarini ham aks ettiradi.

Jonli savdoga o‘tish

PRIVATE_KEY ni o‘rnatish ilovani dry-run rejimidan jonli tranzaksiyalarni yuborish rejimiga o‘tkazadi. Buni amalga oshirishdan oldin muhit konfiguratsiyasi, marja mablag‘lari, pozitsiya limitlari, savdo hajmi, kotirovka joylashtirilishi, to‘lov cheklovi va RPC ishonchliligini tekshiring.

Jonli rejim haqiqiy post-only Kuru buyurtmalarini yuboradi va haqiqiy gas xarajatlarini keltirib chiqaradi. Moliyalashtirilgan kalitni yoqishdan oldin butun jarayonni dry-run rejimida sinab ko‘ring va ehtiyotkor limitlardan foydalaning.

Loyiha tomonidan tasvirlangan asosiy strategiya sozlamalari:

  • Buyurtma hajmi uchun TRADE_SIZE_MON.
  • Tegishli bozor narxiga nisbatan joylashtirish uchun QUOTE_INSIDE_TICKS.
  • Modelning prognoz gorizonti uchun HORIZON_BLOCKS.
  • Type-2 tranzaksiya to‘lovi cheklovi uchun MAX_FEE_GWEI.
  • Order book ma’lumotlarini o‘qish uchun READ_RPC_URL.
  • Tranzaksiyalarni yuborish uchun RPC_URL.

Bot 300 ms chegarasiga qanday amal qiladi

Tezkor yo‘l aynan ikkita RPC almashinuviga asoslangan:

  1. Bitta eth_call READ_RPC_URL orqali joriy order bookni o‘qiydi.
  2. Bitta eth_sendRawTransaction imzolangan yangilanishni RPC_URL orqali yuboradi va qabul qilingach qaytadi.

Sikl ataylab bir nechta ehtimoliy qimmat operatsiyalardan qochadi:

  • Har bir blok uchun eth_estimateGas chaqirilmaydi; gas limiti kodda belgilangan yoki ishga tushirish vaqtida bir marta hisoblab chiqiladi.
  • Tranzaksiya taklif qilinguncha kutadigan eth_sendRawTransactionSync ishlatilmaydi.
  • Eng faol yo‘lda gas narxi qidirilmaydi; tranzaksiyalar 2 gwei ustuvor to‘lovi va MAX_FEE_GWEI chegarasiga ega statik 2-tur to‘lov sozlamalaridan foydalanadi.
  • Qaror qabul qilish siklida receipt kutilmaydi.
  • Buyurtmani kechiktirishi mumkin bo‘lgan inline vault yoki to‘lov tekshiruvlari bajarilmaydi.

README quruq ishga tushirishdagi mock-model benchmarkida order book o‘qilishi uchun taxminan 18 ms p50, butun sikl uchun esa 100 ms p50 natijani ko‘rsatadi; shundan qariyb 80 ms mock inference o‘rnini bosuvchi komponentga to‘g‘ri keladi.

Validatsiya va benchmark

Maxsus order book o‘quvchisini benchmark qilish

Maxsus o‘quvchini SDK bilan aniqlik va kechikish bo‘yicha solishtirish uchun kiritilgan benchmarkni ishga tushiring:

bun run scripts/bench-read.ts

Tranzaksiya kodlanishini oflayn tekshirish

Quruq kodlash skripti buy va sell tranzaksiyalarini tarmoqqa yubormasdan imzolaydi, so‘ng yaratilgan calldata SDK bilan mos kelishini tekshiradi:

bun run scripts/dry-encode.ts

Bu live rejimini yoqishdan oldin ayniqsa foydali, chunki unumdorlikka yo‘naltirilgan market moduli qo‘lda kodlangan batchUpdate calldata’dan foydalanadi.

Ilg‘or ishlatish bo‘yicha maslahatlar

  • Kechikkan qarorlarni kuzating: decision.late va totals.lateBlocks ko‘rsatkichlarini kuzating. Model javobining kechikishi o‘sha blok uchun hech qanday buyurtma yuborilmaganini anglatadi.
  • Niyatni tasdiqdan ajrating: status: "sent" holatini joylashtirilgan buyurtma deb qabul qilmang. Keyinroq keladigan placed, reverted yoki lost qiymatli quote hodisasini kuting.
  • Cheklangan kotirovkalarni kuzating: capped qiymati true bo‘lganda, bajarilish signalidan nima sababdan farq qilganini tushunish uchun yuborilgan tomonni o‘zgarmagan model ehtimollari bilan solishtiring.
  • SSE snapshotidan foydalaning: Yangi monitoring mijozlari birinchi snapshot hodisasidan boshlang‘ich holatni olishi, keyin esa navbatdagi block, quote va fill yangilanishlarini qo‘llashi kerak.
  • Har ikkala RPC yo‘lini o‘lchang: Sekin o‘qishlar qarorlarni kechiktiradi, sekin yuborishlar esa bozor o‘zgarmasidan oldin kotirovkaning yetib borish ehtimolini kamaytiradi.
  • Undiriladigan gas limitlarini hisobga oling: Qaytarilgan tranzaksiya ham sezilarli xarajatga ega bo‘lishi mumkin, shuning uchun faqat filllarni baholash o‘rniga gasMon, gasUsd va qaytarilishlar jami ko‘rsatkichlarini kuzating.
  • Quruq ishga tushirish chiqarishlari bilan tekshiring: Simulyatsiya qilingan filllar real printlar buyurtma narxini kesib o‘tishiga bog‘liq. Shu sababli quruq ishga tushirish rejimi darhol fill bo‘lishi haqidagi taxmindan ko‘ra reallikka yaqinroq, ammo haqiqiy navbat pozitsiyasi va bajarilishidan baribir farq qiladi.

Xulosa

jev-trader jonli Kuru order book o‘quvchisi, mock yoki Jev qaror modeli, optimallashtirilgan Monad tranzaksiya yuborish mexanizmi, pozitsiyalar hisobi va SSE monitoring xizmatini birlashtiradi. PRIVATE_KEY siz ishga tushiring, snapshot va hodisalar oqimini tekshiring, muhim yo‘lni benchmark qiling hamda live bajarilishni ko‘rib chiqishdan oldin kodlanishni tekshiring. Ishlab chiqarish muhitida tasdiqlar, kechikkan bloklar, chegaralar, qaytarilishlar, inventar, P&L va gas xarajatlarini birgalikda kuzating.