
jev-trader hufanya nini
jev-trader ni roboti wa biashara wa kila blok kwa kitabu cha oda cha Kuru MON-USDC kwenye Monad. Kwenye kila blok mpya, husoma kitabu cha oda cha moja kwa moja, huuliza modeli ikiwa inunue au iuze, na huunda nia ya oda ya kikomo ya post-only kwenye upande uliochaguliwa.
Oda huwekewa bei ya QUOTE_INSIDE_TICKS tiki ndani ya bei ya sasa ya mguso. Ikiwa tofauti ya bei ni ndogo sana, bei hufungwa kwenye bei ya mguso. Roboti hughairi oda zake zilizokuwa zimesubiri na kuchapisha mbadala kwa batchUpdate moja ya Kuru.
Kwa kuwa oda ni ya post-only, imekusudiwa kubaki kwenye kitabu badala ya kutekelezwa mara moja. Ujazaji hutokea mshiriki mwingine anapowasilisha oda ya taker inayovuka bei yake. Hii huruhusu mkakati kupata tofauti ya bei badala ya kuilipa, ingawa utekelezaji, orodha ya mali, gesi na hatari za soko bado zinatumika.
Vipengele muhimu
- Uamuzi mmoja kwa kila blok ya Monad: Roboti huchakata blok mpya zaidi takriban kila ms 300.
- Data ya moja kwa moja ya kitabu cha oda cha Kuru: Kisomaji maalum husimbua
getL2Bookna kuunganisha hifadhi ya AMM kwenye kitabu. - Chaguo mbili za modeli: Modeli chaguomsingi ya kuigiza hutumia kanuni ya mwelekeo wa bei, huku
MODEL=jevikiwezesha modeli ya TypeSafe Jev. - Tabia salama ya dry-run: Bila
PRIVATE_KEY, roboti hutumia kitabu halisi na miamala halisi ya soko lakini huiga oda na ujazaji wake yenyewe. - Ubadilishaji wa oda za post-only: Kila sasisho hughairi oda zinazojulikana zilizo kwenye kitabu na kuwasilisha oda mpya ya post-only kwa kundi moja.
- Ufuatiliaji wa nafasi na P&L: Matukio huripoti nafasi, matokeo yaliyotambuliwa na yasiyotambuliwa, gharama za gesi, idadi ya ujazaji na jumla nyingine.
- Ufuatiliaji wa HTTP na SSE: Seva ndogo ya Bun hutoa picha ya hivi karibuni, hadi matukio 1,000 ya kihistoria ya bloki na mtiririko wa matukio wa moja kwa moja.
- Uthibitishaji wa kusubiri: Miamala ya moja kwa moja huwasilishwa kwenye njia kuu, huku risiti na ukaguzi unaohusiana ukishughulikiwa baadaye.
Muundo wa mradi
Mti wa chanzo hutenganisha upokeaji wa bloki, ufikiaji wa soko, tathmini ya modeli, mantiki ya biashara na ufuatiliaji:
src/config.tshupakia usanidi wa mazingira.src/chain.tshupokea masasisho ya WebSocketnewHeads, hutumia upigaji kura kama njia ya ziada na huhifadhi bloki mpya zaidi pekee.src/book.tshusoma na kusimbua kitabu cha oda kwaeth_callmoja.src/market.tshushughulikia usomaji wa kitabu cha Kuru, amana za margin, nonce za ndani, masasisho ya makundi na uthibitishaji wa kusubiri.src/model.tshufafanua kiolesura cha modeli na hutoaJevModelnaMockModel.src/trader.tshuendesha mzunguko wa biashara na kufuatilia nafasi na P&L.src/server.tshutoa picha, historia na Server-Sent Events kwaBun.serve.
Usakinishaji na usanidi
1. Andaa faili la mazingira
Kutoka kwenye saraka ya hifadhi, nakili usanidi wa mfano:
cp .env.example .envKagua faili la .env lililotengenezwa kabla ya kuanzisha programu. Tabia muhimu zaidi inadhibitiwa na kuwepo au kutokuwepo kwa PRIVATE_KEY.
Acha
PRIVATE_KEYbila kuwekwa kwa uendeshaji wako wa kwanza. Programu itafanya dry-run dhidi ya data halisi ya soko bila kutangaza oda zake yenyewe.
2. Sakinisha vitegemezi
Mradi hutumia Bun kwa usimamizi na utekelezaji wa vitegemezi:
bun install3. Anzisha roboti wa biashara
bun run startKwa usanidi chaguomsingi, modeli ya kuigiza ya mwelekeo wa bei hutumika kama mbadala wa uelekezaji. Kisha seva hufanya hali ya roboti na mtiririko wa matukio ipatikane kupitia vituo vyake vya HTTP.
Kuchagua modeli ya maamuzi
Tumia modeli chaguomsingi ya kuigiza
Modeli chaguomsingi ya mock inafaa kwa kujaribu mchakato mzima bila kuita Jev. Hufanya maamuzi kwa kutumia kanuni ya mwelekeo wa bei na hukuruhusu kuthibitisha usomaji wa kitabu, oda zilizoigizwa, ujazaji, uhasibu na utiririshaji wa matukio.
Washa modeli ya Jev
Ili kutumia Jev, sanidi thamani hizi kwenye .env:
MODEL=jev
TYPESAFE_AI_API_KEY=your_api_keyKila blok, modeli iliyochaguliwa huulizwa kuhusu mwelekeo unaotarajiwa katika HORIZON_BLOCKS. Thamani yake chaguomsingi ni bloki 100, au takriban sekunde 30 kulingana na README ya mradi.
Uamuzi wa kawaida huwa buy au sell. Matokeo ya hold hayawakilishi mkakati wa tatu wa modeli: hujitokeza tu modeli inapokosa muda wa mwisho wa blok ya sasa. Katika hali hiyo, decision.late huwa true na hakuna oda inayowekwa kwa blok hiyo.
Kuendesha kwa usalama katika hali ya dry-run
Wakati PRIVATE_KEY haijasanidiwa, jev-trader haiwasilishi miamala ya moja kwa moja. Bado husoma kitabu halisi cha Kuru na kutoa maamuzi halisi ya modeli.
Nukuu iliyoigizwa ina status: "sim". Hubaki kwa blok moja na huhesabiwa kuwa imejazwa tu chapa halisi ya soko inapovuka bei yake. Ujazaji unaotokana una simulated: true.
Hali hii ni muhimu kuthibitisha:
- Ikiwa masasisho ya kitabu yanafika kwa kutegemewa.
- Ikiwa ucheleweshaji wa modeli unabaki ndani ya bajeti ya blok.
- Ni mara ngapi nukuu zingejazwa.
- Jinsi nafasi na P&L hubadilika chini ya kanuni za uigaji.
- Ikiwa dashibodi au mteja mwingine wa SSE hushughulikia kila aina ya tukio kwa usahihi.
Kukagua vituo vya HTTP
Instansi ya dry-run iliyowekwa, inayotumia modeli ya kuigiza, inapatikana kwenye https://jev-trader-production.up.railway.app.
Soma muhtasari wa hivi karibuni
Kituo cha mizizi huripoti modeli inayotumika, pochi, hali ya majaribio bila kutuma miamala, na tukio la hivi karibuni zaidi la bloku:
curl https://jev-trader-production.up.railway.app/Soma historia ya hivi karibuni
Kituo cha historia hurudisha matukio 1,000 ya mwisho ya bloku:
curl https://jev-trader-production.up.railway.app/historyFuatilia mtiririko wa moja kwa moja wa SSE
Tumia curl -N kuweka muunganisho wazi na kuonyesha matukio yanapowasili:
curl -N https://jev-trader-production.up.railway.app/eventsMtiririko hutuma tukio la snapshot mteja anapounganishwa, likifuatiwa na tukio moja la block kwa kila bloku iliyochakatwa. Risiti za miamala ya moja kwa moja hutengeneza masasisho ya quote, na utekelezaji uliotambuliwa hutengeneza matukio ya fill.
Kuelewa tukio la bloku
Tukio la bloku huunganisha hali ya soko, uamuzi wa modeli, nia mpya ya bei, ukwasi uliosalia, maelezo ya nafasi, na jumla zilizokusanywa. Mfano uliofupishwa unaonekana hivi:
{
"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, nabestAskzinaeleza soko lililoangaliwa.spreadBpshuonyesha tofauti ya sasa kwa pointi za msingi.decision.actionni mwelekeo uliochaguliwa na modeli.decision.probabilitieshuhifadhi uwezekano wa modeli wa kununua na kuuza.upIn10ni sawa na uwezekano wa kununua.decision.latencyMshuripoti muda wa tathmini ya modeli.quoteinaeleza oda iliyojaribiwa kwa bloku hii.quote.cancelhutambua oda zilizokuwa zimesubiri na zilizoingizwa kwa ajili ya kughairiwa.restinghuhifadhi ukubwa unaojulikana wa zabuni na ofa ya bot baada ya sasisho.positionhuripoti mwelekeo, ukubwa, bei ya kuingia, na matokeo ambayo hayajafungwa.totalshukusanya bloku, maamuzi, bei, ujazaji, urejeshaji wa mwelekeo, bloku zilizochelewa, gharama ya modeli, gesi, na P&L.
Mipaka ya nafasi na ufadhili
Ikiwa kikomo cha nafasi kinazuia upande ulioombwa, au fedha za margin za moja kwa moja hazitoshi, bei huwekwa upande wa kinyume. Katika hali hii, quote.capped huwa true. Uwezekano wa awali wa modeli hubaki bila kubadilishwa, hivyo kuwawezesha watumiaji kutofautisha wito wa modeli na upande ulionukuliwa kwa kweli.
Kuelewa uthibitishaji wa bei za moja kwa moja
Utumaji wa moja kwa moja hufanywa bila kusubiri risiti ili mzunguko wa biashara usisubiri risiti. Kwa hiyo, tukio la awali la bloku huwa na nia yenye status: "sent".
gasMon iliyoripotiwa huhesabiwa kama kikomo cha gesi kikizidishwa kwa ada ya mwisho inayojulikana ya msingi pamoja na ada ya kipaumbele. Mradi unaeleza kuwa Monad hutoza kikomo cha gesi, hivyo hii huchukuliwa kuwa gharama halisi, iwe muamala umefaulu au umebatilika.
Kwa kawaida risiti hufika bloku moja au mbili baadaye na hutengeneza tukio tofauti la bei:
event: quote
data: {
"block": 105488269,
"quote": {
"status": "placed",
"orderId": 100295812,
"gasMon": 0.0357
}
}Bei ya moja kwa moja inaweza kupitia mojawapo ya hali hizi:
placed: Muamala umefaulu na unajumuisha kitambulisho cha oda.reverted: Kitabu kilipita bei iliyowasilishwa kabla ya kuingizwa, au kughairi kulikohitajika kulilenga oda ambayo tayari ilikuwa imejazwa.lost: Hakuna risiti iliyopatikana baada ya bloku 10.
Kuelewa matukio ya ujazaji
Ujazaji hautokei katika muamala wa bot wa kuweka oda yenyewe. Hutokea oda ya kuchukua ya mfanyabiashara mwingine inapogonga oda iliyosalia. Bot hutambua kumbukumbu ya Trade inayolingana kupitia mchakato uleule wa upigaji kura wa eth_getLogs unaosambaza maelezo ya soko kwa modeli.
event: fill
data: {
"block": 105488271,
"fill": {
"side": "buy",
"size": 200,
"price": 0.022629,
"txHash": "0x…",
"orderId": 100295812,
"simulated": false
}
}txHash ya ujazaji ni ya muamala wa mchukuaji. Ujazaji unapochakatwa, mtiririko pia huonyesha data iliyosasishwa ya nafasi, P&L iliyopatikana, na jumla za ujazaji zilizokusanywa.
Kuhamia kwenye biashara ya moja kwa moja
Kuweka PRIVATE_KEY hubadilisha programu kutoka tabia ya majaribio bila kutuma miamala hadi uwasilishaji wa miamala ya moja kwa moja. Kabla ya kufanya hivyo, thibitisha usanidi wa mazingira, ufadhili wa margin, mipaka ya nafasi, ukubwa wa biashara, uwekaji wa bei, kikomo cha ada, na utegemezi wa RPC.
Hali ya moja kwa moja hutuma oda halisi za Kuru za baada tu ya kitabu na hugharimu gesi halisi. Jaribu mtiririko kamili katika hali ya majaribio bila kutuma miamala kwanza, na tumia mipaka ya tahadhari unapowasha ufunguo wenye fedha.
Mipangilio kuu inayohusiana na mkakati iliyoelezwa na mradi ni:
TRADE_SIZE_MONkwa ukubwa wa oda.QUOTE_INSIDE_TICKSkwa uwekaji kuhusiana na bei ya ndani.HORIZON_BLOCKSkwa upeo wa utabiri wa modeli.MAX_FEE_GWEIkwa kikomo cha ada ya muamala wa aina ya 2.READ_RPC_URLkwa usomaji wa kitabu cha oda.RPC_URLkwa uwasilishaji wa muamala.
Jinsi bot inavyofikia bajeti ya ms 300
Njia muhimu imeundwa kwa mizunguko miwili kamili ya RPC:
eth_callmoja husoma kitabu cha sasa cha oda kupitiaREAD_RPC_URL.eth_sendRawTransactionmoja hutuma sasisho lililosainiwa kupitiaRPC_URLna kurudi mara linapokubaliwa.
Kitanzi huepuka kwa makusudi shughuli kadhaa zinazoweza kuwa ghali:
- Hakuna
eth_estimateGaskwa kila block; kikomo cha gesi kimewekwa moja kwa moja au kinatolewa mara moja wakati wa kuanzisha. - Hakuna
eth_sendRawTransactionSync, ambayo husubiri hadi muamala upendekezwe. - Hakuna utafutaji wa bei ya gesi kwenye njia kuu ya utekelezaji; miamala hutumia mipangilio tuli ya ada ya aina ya 2, ikiwa na ada ya kipaumbele ya 2 gwei na kikomo cha
MAX_FEE_GWEI. - Hakuna kusubiri risiti kwenye kitanzi cha maamuzi.
- Hakuna ukaguzi wa ndani wa vault au ada unaoweza kuchelewesha oda.
README inaripoti kipimo cha dry-run cha mock model cha takriban ms 18 p50 kwa usomaji wa kitabu na ms 100 p50 kwa kitanzi kizima, huku takriban ms 80 zikihusishwa na kibadala cha uigaji wa mock inference.
Uthibitishaji na upimaji wa utendaji
Pima kisomaji maalum cha kitabu
Endesha kipimo kilichojumuishwa ili kulinganisha kisomaji maalum na SDK kwa usahihi na ucheleweshaji:
bun run scripts/bench-read.tsThibitisha usimbaji wa muamala nje ya mtandao
Skripti ya dry encoding husaini ununuzi na uuzaji bila kuvitangaza, kisha hukagua kuwa calldata iliyotengenezwa inalingana na ya SDK:
bun run scripts/dry-encode.tsHii ni muhimu hasa kabla ya kuwasha hali ya moja kwa moja kwa sababu moduli ya soko inayolenga utendaji hutumia calldata ya batchUpdate iliyosimbwa kwa mkono.
Vidokezo vya juu vya uendeshaji
- Fuatilia maamuzi yaliyochelewa: Fuatilia
decision.latenatotals.lateBlocks. Jibu la modeli lililochelewa linamaanisha kuwa hakuna oda iliyotumwa kwa block hiyo. - Tenganisha nia na uthibitisho: Usichukulie
status: "sent"kuwa oda imewekwa. Subiri tukio la baadaye laquotelenyeplaced,reverted, aulost. - Fuatilia nukuu zilizowekewa kikomo: Wakati
cappedni kweli, linganisha upande uliowasilishwa na uwezekano wa modeli ambao haujabadilishwa ili kuelewa kwa nini utekelezaji ulitofautiana na ishara. - Tumia picha ya SSE: Wateja wapya wa ufuatiliaji wanapaswa kuanzisha hali yao kutoka kwenye tukio la kwanza la
snapshot, kisha kutumia masasisho yanayofuata ya block, quote, na fill. - Pima njia zote mbili za RPC: Usomaji wa polepole huchelewesha maamuzi, huku uwasilishaji wa polepole ukipunguza uwezekano wa quote kufika kabla ya soko kusogea.
- Hesabu vikomo vya gesi vinavyotozwa: Muamala uliorevertiwa bado unaweza kuwa na gharama kubwa, kwa hiyo fuatilia
gasMon,gasUsd, na jumla za marejesho badala ya kutathmini fills pekee. - Thibitisha kwa machapisho ya dry-run: Fills zilizoigwa hutegemea machapisho halisi kuvuka bei ya oda, hivyo hali ya dry-run ni halisi zaidi kuliko dhana ya kujazwa mara moja, ingawa bado hutofautiana na nafasi halisi kwenye foleni na utekelezaji.
Hitimisho
jev-trader huunganisha kisomaji cha moja kwa moja cha kitabu cha Kuru, modeli ya maamuzi ya mock au Jev, uwasilishaji ulioboreshwa wa miamala ya Monad, uhasibu wa nafasi, na huduma ya ufuatiliaji ya SSE. Anza bila PRIVATE_KEY, kagua picha ya hali na mtiririko wa matukio, pima njia muhimu ya utekelezaji, na thibitisha usimbaji kabla ya kuzingatia utekelezaji wa moja kwa moja. Katika uzalishaji, fuatilia uthibitisho, block zilizochelewa, vikomo, marejesho, akiba, P&L, na gharama za gesi kwa pamoja.
