
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-
getL2Bookbese ehlanganisa i-AMM vault ku-book. - Izinketho ezimbili zamamodeli: Imodeli ezenzakalelayo ye-mock isebenzisa i-momentum heuristic, kanti
MODEL=jevivumela 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.tsilayisha ukucushwa kwemvelo.src/chain.tsyamukela izibuyekezo ze-WebSocketnewHeads, isebenzisa i-polling njengendlela eyisipele, futhi igcina kuphela i-block entsha kakhulu.src/book.tsifunda futhi ihlukanise i-order book nge-eth_calleyodwa.src/market.tsiphatha ukufundwa kwe-Kuru book, ama-margin deposit, ama-local nonce, ama-batch update, nokuqinisekiswa okungavumelanisi.src/model.tsichaza i-model interface futhi inikeza i-JevModelne-MockModel.src/trader.tsiqhuba i-trading loop futhi ilandelela ama-position ne-P&L.src/server.tsinikeza 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 .envBuyekeza ifayela le-.env elenziwe ngaphambi kokuqala uhlelo. Ukuziphatha okubaluleke kakhulu kulawulwa ukuba khona noma ukungabikho kwe-PRIVATE_KEY.
Shiya i-
PRIVATE_KEYingasethiwe 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 install3. Qalisa i-trader
bun run startNgokucushwa 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_keyKu-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/historyLandela 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/eventsUkusakazwa 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-bestAskkuchaza imakethe ebonwe.spreadBpsiveza i-spread yamanje ngamaphoyinti esisekelo.decision.actioniyindlela ekhethwe yimodeli.decision.probabilitiesigcina amathuba okuthenga nawokuthengisa emodeli.upIn10ilingana nethuba lokuthenga.decision.latencyMsibika ukubambezeleka kokuhlolwa kwemodeli.quoteichaza i-oda elizamwe kule bhulokhi.quote.cancelikhomba ama-oda abekade elindile afakwe ukuze akhanselwe.restingigcina usayizi owaziwayo webhidi ne-ask yebhothi ngemva kwesibuyekezo.positionibika indlela, usayizi, intengo yokungena, kanye nemiphumela engakafezeki.totalsiqongelela 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_MONyosayizi we-oda.QUOTE_INSIDE_TICKSyokubekwa okuhlobene ne-touch.HORIZON_BLOCKSyomkhathizwe wokuqagela wemodeli.MAX_FEE_GWEIyomkhawulo wemali yomsebenzi wohlobo 2.READ_RPC_URLyokufunda ibhuku lama-oda.RPC_URLyokuthumela imisebenzi.
Indlela ibhothi ehlangabezana ngayo nomkhawulo wama-300 ms
Indlela esheshayo yakhelwe phezu kohambo olubili kuphela lokuya nokubuya lwe-RPC:
- I-
eth_calleyodwa ifunda ibhuku lama-oda lamanje nge-READ_RPC_URL. - I-
eth_sendRawTransactioneyodwa ithumela isibuyekezo esisayiniwe nge-RPC_URLbese ibuya lapho sesamukelwe.
I-loop igwema ngamabomu imisebenzi eminingana engase idle isikhathi esiningi:
- Ayikho i-
eth_estimateGasyebhulokhi 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.tsQinisekisa 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.tsLokhu 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.latene-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-quoteolandelayo one-placed,reverted, nomalost. - Landela ama-quote anomkhawulo: Uma i-
cappedingu-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.
