
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
getL2Bookma'lumotini dekodlaydi va AMM vaultini order kitobiga birlashtiradi. - Modelning ikki varianti: Standart mock model momentum evristikasidan foydalanadi,
MODEL=jevesa TypeSafe Jev modelini yoqadi. - Xavfsiz dry-run xatti-harakati:
PRIVATE_KEYbo'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.tsmuhit konfiguratsiyasini yuklaydi.src/chain.tsWebSocketnewHeadsyangilanishlarini qabul qiladi, zaxira mexanizmi sifatida pollingdan foydalanadi va faqat eng yangi blokni saqlaydi.src/book.tsbittaeth_callorqali order kitobini o'qiydi va dekodlaydi.src/market.tsKuru order kitobini o'qish, margin depozitlari, lokal nonce'lar, paketli yangilanishlar va asinxron tasdiqlarni boshqaradi.src/model.tsmodel interfeysini belgilaydi hamdaJevModelvaMockModelni taqdim etadi.src/trader.tssavdo siklini ishga tushiradi va pozitsiyalar hamda P&L ni kuzatadi.src/server.tsBun.serveyordamida 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 .envIlovani 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_KEYni 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 install3. Treyderni ishga tushirish
bun run startStandart 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_keyHar 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/historyJonli 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/eventsOqim 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,bestBidvabestAskkuzatilgan bozorni tavsiflaydi.spreadBpsjoriy spredni bazaviy punktlarda ifodalaydi.decision.actionmodel tanlagan yo‘nalishni bildiradi.decision.probabilitiesmodelning xarid va sotuv ehtimollarini saqlaydi.upIn10xarid ehtimoliga teng.decision.latencyMsmodelni baholash kechikishini ko‘rsatadi.quoteushbu blok uchun yuborishga uringan buyurtmani tavsiflaydi.quote.cancelbekor qilish uchun kiritilgan, avvaldan mavjud buyurtmalarni bildiradi.restingyangilanishdan keyin botga ma’lum bo‘lgan bid va ask hajmini qayd etadi.positionyo‘nalish, hajm, kirish narxi va amalga oshirilmagan natijalarni ko‘rsatadi.totalsbloklar, 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:
- Bitta
eth_callREAD_RPC_URLorqali joriy order bookni o‘qiydi. - Bitta
eth_sendRawTransactionimzolangan yangilanishniRPC_URLorqali yuboradi va qabul qilingach qaytadi.
Sikl ataylab bir nechta ehtimoliy qimmat operatsiyalardan qochadi:
- Har bir blok uchun
eth_estimateGaschaqirilmaydi; gas limiti kodda belgilangan yoki ishga tushirish vaqtida bir marta hisoblab chiqiladi. - Tranzaksiya taklif qilinguncha kutadigan
eth_sendRawTransactionSyncishlatilmaydi. - Eng faol yo‘lda gas narxi qidirilmaydi; tranzaksiyalar 2 gwei ustuvor to‘lovi va
MAX_FEE_GWEIchegarasiga 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.tsTranzaksiya 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.tsBu 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.latevatotals.lateBlocksko‘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 keladiganplaced,revertedyokilostqiymatliquotehodisasini kuting. - Cheklangan kotirovkalarni kuzating:
cappedqiymati 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
snapshothodisasidan 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,gasUsdva 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.
