Yeqa uye kokuyinhloko
Izifundo ze-AI

Yakha futhi Usebenzise Umenzi Wemakethe we-Monad Osebenza Ibhulokhi Ngebhulokhi nge-jev-trader

Funda ukufaka i-jev-trader, ukuyisebenzisa ngokuphepha kumodi yokuhlola, ukuxhuma imodeli ye-Jev, ukuhlola okuphakelayo kwayo kwe-HTTP ne-SSE, ukuhumusha ama-quote nama-fill, nokuqonda ukuthuthukiswa kwesivinini okugcina umjikelezo wayo wokuhweba ungaphakathi kwesikhathi sebhulokhi se-Monad esicishe sibe ngu-300 ms.

Ukwakha nokusebenzisa umenzi wemakethe we-Monad nge-jev-trader

Lokho okwenziwa yi-jev-trader

jev-trader iyi-bot yokuhweba eyenza izinqumo nge-block ngayinye ye-Kuru MON-USDC order book ku-Monad. Ku-block entsha ngayinye, ifunda i-order book ebukhoma, ibuze imodeli ukuthi ithenge noma ithengise, bese idala inhloso ye-post-only limit order ohlangothini olukhethiwe.

I-oda linentengo engaphakathi kwe-touch yamanani angu-QUOTE_INSIDE_TICKS. Uma i-spread incane kakhulu, intengo ibekelwa ku-touch. I-bot ikhansela ama-oda ayo abekwe ngaphambilini bese ithumela elisha nge-Kuru batchUpdate eyodwa.

Ngenxa yokuthi i-oda liyi-post-only, kuhloswe ukuthi lihlale ku-book kunokuba lisebenze ngokushesha. I-fill yenzeka lapho omunye umhlanganyeli ethumela i-taker order ewela intengo yayo. Lokhu kuvumela isu ukuthi lizuze nge-spread esikhundleni sokuyikhokha, nakuba izingozi zokwenziwa komyalelo, inventory, igesi, nemakethe zisasebenza.

Izici ezibalulekile

  • Isinqumo esisodwa nge-block ngayinye ye-Monad: I-bot icubungula i-block entsha cishe njalo ngo-300 ms.
  • Idatha ebukhoma ye-Kuru order book: Umfundi wangokwezifiso uhlukanisa i-getL2Book bese ehlanganisa i-AMM vault ku-book.
  • Izinketho ezimbili zamamodeli: Imodeli ezenzakalelayo ye-mock isebenzisa i-momentum heuristic, kanti MODEL=jev ivumela i-TypeSafe Jev model.
  • Ukuziphatha okuphephile kwe-dry-run: Ngaphandle kwe-PRIVATE_KEY, i-bot isebenzisa i-book yangempela kanye nama-market prints angempela kodwa ilingisa ama-oda nama-fill ayo.
  • Ukushintshwa kwama-oda e-post-only: Isibuyekezo ngasinye sikhansela ama-oda abekwe aziwayo bese sithumela i-oda elisha le-post-only nge-batch eyodwa.
  • Ukulandelela i-position ne-P&L: Ama-event abika i-position, imiphumela ebonakalayo nengakabonakali, izindleko zegesi, izibalo zama-fill, namanye ama-total.
  • Ukuqapha nge-HTTP ne-SSE: Iseva encane ye-Bun iveza i-snapshot yakamuva, ama-block event omlando afinyelela ku-1,000, kanye ne-live event stream.
  • Ukuqinisekiswa okungavumelanisi: Ama-live transaction athunyelwa endleleni eyinhloko, kanti ama-receipt nokuhlolwa okuhlobene kuphathwa kamuva.

Ukwakhiwa kwephrojekthi

Isihlahla somthombo sihlukanisa ukwamukelwa kwama-block, ukufinyelela emakethe, ukuhlolwa kwemodeli, logic yokuhweba, nokuqapha:

  • src/config.ts ilayisha ukucushwa kwemvelo.
  • src/chain.ts yamukela izibuyekezo ze-WebSocket newHeads, isebenzisa i-polling njengendlela eyisipele, futhi igcina kuphela i-block entsha kakhulu.
  • src/book.ts ifunda futhi ihlukanise i-order book nge-eth_call eyodwa.
  • src/market.ts iphatha ukufundwa kwe-Kuru book, ama-margin deposit, ama-local nonce, ama-batch update, nokuqinisekiswa okungavumelanisi.
  • src/model.ts ichaza i-model interface futhi inikeza i-JevModel ne-MockModel.
  • src/trader.ts iqhuba i-trading loop futhi ilandelela ama-position ne-P&L.
  • src/server.ts inikeza ama-snapshot, umlando, ne-Server-Sent Events nge-Bun.serve.

Ukufaka nokulungiselela

1. Lungisa ifayela lemvelo

Kusuka ku-directory ye-repository, kopisha ukucushwa okuyisibonelo:

cp .env.example .env

Buyekeza ifayela le-.env elenziwe ngaphambi kokuqala uhlelo. Ukuziphatha okubaluleke kakhulu kulawulwa ukuba khona noma ukungabikho kwe-PRIVATE_KEY.

Shiya i-PRIVATE_KEY ingasethiwe ekuqaleni. Uhlelo luzokwenza i-dry-run lusebenzisa idatha yemakethe yangempela ngaphandle kokusakaza ama-oda alo.

2. Faka ama-dependency

Iphrojekthi isebenzisa i-Bun ukuphatha nokusebenzisa ama-dependency:

bun install

3. Qalisa i-trader

bun run start

Ngokucushwa okuzenzakalelayo, imodeli ye-mock momentum isebenza njengommeleli we-inference. Iseva ibe isenza isimo se-trader ne-event stream kutholakale nge-HTTP endpoint yayo.

Ukukhetha imodeli yesinqumo

Sebenzisa imodeli ye-mock ezenzakalelayo

Imodeli ezenzakalelayo ye-mock ilungele ukuhlola yonke i-pipeline ngaphandle kokubiza u-Jev. Yenza izinqumo isebenzisa i-momentum heuristic futhi ikuvumela ukuthi uqinisekise ukufundwa kwe-book, ama-oda alingisiwe, ama-fill, ukubalwa kwezimali, kanye nokusakazwa kwama-event.

Vumela imodeli ye-Jev

Ukuze usebenzise u-Jev, lungiselela la manani ku-.env:

MODEL=jev
TYPESAFE_AI_API_KEY=your_api_key

Ku-block ngayinye, imodeli ekhethiwe ibuzwa ngokunyakaza okulindelekile phakathi kwe-HORIZON_BLOCKS. Inani layo elizenzakalelayo ngu-100 blocks, noma cishe imizuzwana engu-30 ngokwe-README yephrojekthi.

Isinqumo esivamile siwu-buy noma sell. Umphumela othi hold awumeleli isu lesithathu lemodeli: uvela kuphela lapho imodeli yeqa umnqamulajuqu we-block yamanje. Kuleso simo, decision.late uba true futhi akukho oda elithunyelwayo kuleyo block.

Ukusebenzisa ngokuphepha kwimodi ye-dry-run

Uma i-PRIVATE_KEY ingalungiselelwanga, i-jev-trader ayithumeli ama-live transaction. Isaqhubeka nokufunda i-Kuru book yangempela futhi ikhiqize izinqumo zangempela zemodeli.

I-quote elingisiwe ine-status: "sim". Ihlala i-block eyodwa futhi ibhekwa njenge-filled kuphela lapho i-market print yangempela iwela intengo yayo. I-fill evelayo ine-simulated: true.

Le modi ilusizo ekuqinisekiseni:

  • Ukuthi izibuyekezo ze-book ziyafika ngokuthembekile yini.
  • Ukuthi ukubambezeleka kwemodeli kuhlala ngaphakathi kwesabelomali se-block yini.
  • Ukuthi ama-quote angagcwaliswa kangaki.
  • Ukuthi ama-position ne-P&L ashintsha kanjani ngaphansi kwemithetho yokulingisa.
  • Ukuthi i-dashboard noma elinye iklayenti le-SSE liphatha kahle lonke uhlobo lwe-event yini.

Ukuhlola ama-HTTP endpoint

I-instance esebenzayo ye-dry-run esebenzisa imodeli ye-mock iyatholakala ku-https://jev-trader-production.up.railway.app.

Funda isifinyezo sakamuva

I-endpoint eyimpande ibika imodeli esebenzayo, isikhwama, isimo se-dry-run, kanye nomcimbi wakamuva webhulokhi:

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

Funda umlando wakamuva

I-endpoint yomlando ibuyisa izehlakalo zokugcina ezingu-1,000 zamabhulokhi:

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

Landela ukusakazwa bukhoma kwe-SSE

Sebenzisa curl -N ukuze ugcine uxhumano luvuliwe futhi ubonise izehlakalo njengoba zifika:

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

Ukusakazwa kuthumela izehlakalo ze-snapshot lapho iklayenti lixhuma, kulandelwe izehlakalo ze-block esisodwa kubhulokhi ngayinye ecutshunguliwe. Amarisidi okwenziwe abukhoma akhiqiza izibuyekezo ze-quote, kanti ukwenziwa okutholiwe kukhiqiza izehlakalo ze-fill.

Ukuqonda umcimbi webhulokhi

Umcimbi webhulokhi uhlanganisa isimo semakethe, isinqumo semodeli, inhloso entsha yekhwothi, imali elindile, ulwazi lwesikhundla, kanye nengqikithi eqoqiwe. Isibonelo esifushanisiwe sibukeka kanje:

{
  "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, kanye ne-bestAsk kuchaza imakethe ebonwe.
  • spreadBps iveza i-spread yamanje ngamaphoyinti esisekelo.
  • decision.action iyindlela ekhethwe yimodeli.
  • decision.probabilities igcina amathuba okuthenga nawokuthengisa emodeli.
  • upIn10 ilingana nethuba lokuthenga.
  • decision.latencyMs ibika ukubambezeleka kokuhlolwa kwemodeli.
  • quote ichaza i-oda elizamwe kule bhulokhi.
  • quote.cancel ikhomba ama-oda abekade elindile afakwe ukuze akhanselwe.
  • resting igcina usayizi owaziwayo webhidi ne-ask yebhothi ngemva kwesibuyekezo.
  • position ibika indlela, usayizi, intengo yokungena, kanye nemiphumela engakafezeki.
  • totals iqongelela amabhulokhi, izinqumo, amakhwothi, ama-fill, ama-reversion, amabhulokhi aphuzile, izindleko zemodeli, igesi, kanye ne-P&L.

Imikhawulo yesikhundla neyoxhaso

Uma umkhawulo wesikhundla uvimbela uhlangothi oluceliwe, noma izimali zemajini ezibukhoma zinganele, ikhwothi ibekwa ngakolunye uhlangothi. Kulesi simo, quote.capped iba true. Amathuba okuqala emodeli ahlala engashintshiwe, okwenza abathengi bakwazi ukuhlukanisa phakathi kwesinqumo semodeli nohlangothi olucashuniwe empeleni.

Ukuqonda ukuqinisekiswa kwamakhwothi abukhoma

Ukuthunyelwa okubukhoma kuqalwa bese kushiywa kuqhubeke ngaphandle kokulinda, ukuze umjikelezo wokuhweba ungalindi irisidi. Ngakho-ke, umcimbi webhulokhi wokuqala uqukethe inhloso ene-status: "sent".

I-gasMon ebikiwe ibalwa ngokuphindaphinda umkhawulo wegesi ngemali eyisisekelo yokugcina eyaziwayo kanye nemali eyengeziwe. Iphrojekthi iphawula ukuthi iMonad ikhokhisa umkhawulo wegesi, ngakho lokhu kuthathwa njengezindleko zangempela kungakhathaliseki ukuthi umsebenzi uyaphumelela noma uyahlehla.

Ngokuvamile irisidi ifika ibhulokhi elilodwa noma amabili kamuva bese ikhiqiza umcimbi ozimele wekhwothi:

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

Ikhwothi ebukhoma ingadlulela kwesinye salezi zimo:

  • placed: Umsebenzi uphumelele futhi uqukethe i-ID ye-oda.
  • reverted: Ibhuku lihambile ladlula enanini elithunyelwe ngaphambi kokufakwa, noma ukukhanselwa okuceliwe bekuqondiswe ku-oda ebelivele ligcwalisiwe.
  • lost: Ayikho irisidi etholakele ngemva kwamabhulokhi angu-10.

Ukuqonda izehlakalo ze-fill

Ama-fill awenzeki kumsebenzi wokubeka webhothi uqobo. Enzeka lapho i-oda lomunye umhwebi othatha lifinyelela ku-oda elilindile. Ibhothi ithola ilogi ye-Trade ehambisanayo ngenqubo efanayo yokuvota ye-eth_getLogs enikeza imodeli ulwazi lwemakethe.

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

I-txHash ye-fill ingeyomsebenzi womthathi. Lapho i-fill icutshungulwa, ukusakazwa kuphinde kubonise idatha ebuyekeziwe yesikhundla, i-P&L efezekile, kanye nengqikithi eqoqiwe yama-fill.

Ukudlulela ekuhwebeni okubukhoma

Ukusetha PRIVATE_KEY kushintsha uhlelo lusuke ekuziphatheni kwe-dry-run luye ekuthumeleni imisebenzi ebukhoma. Ngaphambi kokwenza lokho, qinisekisa ukumiswa kwemvelo, uxhaso lwemajini, imikhawulo yesikhundla, usayizi wohwebo, ukubekwa kwekhwothi, umkhawulo wemali, kanye nokwethembeka kwe-RPC.

Imodi ebukhoma ithumela ama-oda angempela e-post-only e-Kuru futhi idala izindleko zegesi zangempela. Hlola ukuhamba komsebenzi okuphelele ngemodi ye-dry-run kuqala, bese usebenzisa imikhawulo eqaphile lapho uvula ukhiye oxhaswe ngemali.

Izilungiselelo eziyinhloko ezihlobene nesu ezichazwe yiphrojekthi yilezi:

  • TRADE_SIZE_MON yosayizi we-oda.
  • QUOTE_INSIDE_TICKS yokubekwa okuhlobene ne-touch.
  • HORIZON_BLOCKS yomkhathizwe wokuqagela wemodeli.
  • MAX_FEE_GWEI yomkhawulo wemali yomsebenzi wohlobo 2.
  • READ_RPC_URL yokufunda ibhuku lama-oda.
  • RPC_URL yokuthumela imisebenzi.

Indlela ibhothi ehlangabezana ngayo nomkhawulo wama-300 ms

Indlela esheshayo yakhelwe phezu kohambo olubili kuphela lokuya nokubuya lwe-RPC:

  1. I-eth_call eyodwa ifunda ibhuku lama-oda lamanje nge-READ_RPC_URL.
  2. I-eth_sendRawTransaction eyodwa ithumela isibuyekezo esisayiniwe nge-RPC_URL bese ibuya lapho sesamukelwe.

I-loop igwema ngamabomu imisebenzi eminingana engase idle isikhathi esiningi:

  • Ayikho i-eth_estimateGas yebhulokhi ngayinye; umkhawulo wegesi ubekwe ngokuqondile noma uthathwe kanye ekuqaleni.
  • Ayikho i-eth_sendRawTransactionSync, elinda kuze kube yilapho ukuthengiselana sekuhlongozwe.
  • Akukho ukubheka intengo yegesi endleleni esheshayo; ukuthengiselana kusebenzisa izilungiselelo ezimile zemali yohlobo 2, ngemali ebaluleke kakhulu engu-2 gwei kanye nomkhawulo we-MAX_FEE_GWEI.
  • Akukho ukulinda irisidi kumjikelezo wesinqumo.
  • Akukho ukuhlolwa kwe-vault noma imali ngaphakathi komjikelezo okungabambezela i-oda.

I-README ibika ukuhlolwa kwe-dry-run kusetshenziswa imodeli-mbumbulu okungaba ngu-18 ms p50 ekufundweni kwencwadi kanye no-100 ms p50 kuwo wonke umjikelezo, cishe u-80 ms wakhona ubangelwa indawo yemodeli-mbumbulu.

Ukuqinisekisa nokuhlola ukusebenza

Hlola umfundi wencwadi wangokwezifiso

Qalisa ukuhlolwa okufakiwe ukuze uqhathanise umfundi wangokwezifiso ne-SDK ngokunemba nangesivinini:

bun run scripts/bench-read.ts

Qinisekisa ukufakwa kwekhodi yokuthengiselana ungaxhunyiwe ku-inthanethi

Iskripthi se-dry encoding sisayina ukuthenga nokuthengisa ngaphandle kokukusakaza, bese sihlola ukuthi i-calldata ekhiqiziwe iyafana yini neye-SDK:

bun run scripts/dry-encode.ts

Lokhu kusiza kakhulu ngaphambi kokuvula imodi ebukhoma ngoba imojuli yemakethe egxile ekusebenzeni isebenzisa i-calldata ye-batchUpdate efakwe ikhodi ngesandla.

Amathiphu okusebenza athuthukile

  • Bheka izinqumo ezifike sekwephuzile: Landela i-decision.late ne-totals.lateBlocks. Impendulo yemodeli efike sekwephuzile isho ukuthi alikho i-oda elithunyelwe lalelo bhulokhi.
  • Hlukanisa inhloso nokuqinisekiswa: Ungathathi i-status: "sent" njengobufakazi bokuthi i-oda libekiwe. Linda umcimbi we-quote olandelayo one-placed, reverted, noma lost.
  • Landela ama-quote anomkhawulo: Uma i-capped ingu-true, qhathanisa uhlangothi oluthunyelwe namathuba emodeli angashintshiwe ukuze uqonde ukuthi kungani ukwenziwa kwahluka kusignali.
  • Sebenzisa isifinyezo se-SSE: Amaklayenti amasha okuqapha kufanele aqale ngomcimbi wokuqala we-snapshot, bese esebenzisa izibuyekezo ezilandelayo zamabhulokhi, ama-quote, nama-fill.
  • Linganisa izindlela zombili ze-RPC: Ukufunda okuhamba kancane kubambezela izinqumo, kanti ukuthunyelwa okuhamba kancane kunciphisa ithuba lokuthi i-quote ifike ngaphambi kokuba imakethe inyakaze.
  • Faka imikhawulo yegesi ekhokhiswayo: Ukuthengiselana okubuyiselwe emuva kusengaba nezindleko ezibalulekile, ngakho qapha i-gasMon, i-gasUsd, kanye nenani lokubuyiselwa emuva esikhundleni sokuhlola ama-fill kuphela.
  • Qinisekisa ngemibhalo ye-dry-run: Ama-fill alingisiwe ancike kuma-print angempela aweqa intengo ye-oda, okwenza imodi ye-dry-run ibe ngokoqobo kakhulu kunokucabanga nge-fill esheshayo, nakuba isahluka endaweni yangempela kulayini nasekwenzeni.

Isiphetho

jev-trader ihlanganisa umfundi wencwadi ka-Kuru obukhoma, imodeli yesinqumo eyimbumbulu noma i-Jev, ukuthunyelwa okuthuthukisiwe kokuthengiselana kwe-Monad, ukubalwa kwezikhundla, kanye nensizakalo yokuqapha ye-SSE. Qala ngaphandle kwe-PRIVATE_KEY, hlola isifinyezo nomzila wemicimbi, linganisa indlela ebalulekile, bese uqinisekisa ukufakwa kwekhodi ngaphambi kokucabangela ukwenziwa okubukhoma. Ekukhiqizeni, qapha ndawonye ukuqinisekiswa, amabhulokhi afike sekwephuzile, imikhawulo, ukubuyiselwa emuva, i-inventory, i-P&L, kanye nezindleko zegesi.