Ruka hadi maudhui makuu
Mafunzo ya AI

Jenga na Uendeshe Mtengenezaji wa Soko wa Monad kwa Kila Bloku ukitumia jev-trader

Jifunze jinsi ya kusakinisha jev-trader, kuiendesha kwa usalama katika hali ya majaribio, kuunganisha modeli ya Jev, kukagua milisho yake ya HTTP na SSE, kutafsiri nukuu na miamala iliyotekelezwa, na kuelewa maboresho ya ucheleweshaji yanayowezesha mzunguko wake wa biashara kukamilika ndani ya muda wa takriban 300 ms wa bloku ya Monad.

Jenga na Uendeshe Mtengenezaji wa Soko wa Monad kwa Kila Bloku ukitumia jev-trader

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 getL2Book na kuunganisha hifadhi ya AMM kwenye kitabu.
  • Chaguo mbili za modeli: Modeli chaguomsingi ya kuigiza hutumia kanuni ya mwelekeo wa bei, huku MODEL=jev ikiwezesha 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.ts hupakia usanidi wa mazingira.
  • src/chain.ts hupokea masasisho ya WebSocket newHeads, hutumia upigaji kura kama njia ya ziada na huhifadhi bloki mpya zaidi pekee.
  • src/book.ts husoma na kusimbua kitabu cha oda kwa eth_call moja.
  • src/market.ts hushughulikia usomaji wa kitabu cha Kuru, amana za margin, nonce za ndani, masasisho ya makundi na uthibitishaji wa kusubiri.
  • src/model.ts hufafanua kiolesura cha modeli na hutoa JevModel na MockModel.
  • src/trader.ts huendesha mzunguko wa biashara na kufuatilia nafasi na P&L.
  • src/server.ts hutoa picha, historia na Server-Sent Events kwa Bun.serve.

Usakinishaji na usanidi

1. Andaa faili la mazingira

Kutoka kwenye saraka ya hifadhi, nakili usanidi wa mfano:

cp .env.example .env

Kagua faili la .env lililotengenezwa kabla ya kuanzisha programu. Tabia muhimu zaidi inadhibitiwa na kuwepo au kutokuwepo kwa PRIVATE_KEY.

Acha PRIVATE_KEY bila 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 install

3. Anzisha roboti wa biashara

bun run start

Kwa 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_key

Kila 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/history

Fuatilia 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/events

Mtiririko 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, na bestAsk zinaeleza soko lililoangaliwa.
  • spreadBps huonyesha tofauti ya sasa kwa pointi za msingi.
  • decision.action ni mwelekeo uliochaguliwa na modeli.
  • decision.probabilities huhifadhi uwezekano wa modeli wa kununua na kuuza.
  • upIn10 ni sawa na uwezekano wa kununua.
  • decision.latencyMs huripoti muda wa tathmini ya modeli.
  • quote inaeleza oda iliyojaribiwa kwa bloku hii.
  • quote.cancel hutambua oda zilizokuwa zimesubiri na zilizoingizwa kwa ajili ya kughairiwa.
  • resting huhifadhi ukubwa unaojulikana wa zabuni na ofa ya bot baada ya sasisho.
  • position huripoti mwelekeo, ukubwa, bei ya kuingia, na matokeo ambayo hayajafungwa.
  • totals hukusanya 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_MON kwa ukubwa wa oda.
  • QUOTE_INSIDE_TICKS kwa uwekaji kuhusiana na bei ya ndani.
  • HORIZON_BLOCKS kwa upeo wa utabiri wa modeli.
  • MAX_FEE_GWEI kwa kikomo cha ada ya muamala wa aina ya 2.
  • READ_RPC_URL kwa usomaji wa kitabu cha oda.
  • RPC_URL kwa uwasilishaji wa muamala.

Jinsi bot inavyofikia bajeti ya ms 300

Njia muhimu imeundwa kwa mizunguko miwili kamili ya RPC:

  1. eth_call moja husoma kitabu cha sasa cha oda kupitia READ_RPC_URL.
  2. eth_sendRawTransaction moja hutuma sasisho lililosainiwa kupitia RPC_URL na kurudi mara linapokubaliwa.

Kitanzi huepuka kwa makusudi shughuli kadhaa zinazoweza kuwa ghali:

  • Hakuna eth_estimateGas kwa 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.ts

Thibitisha 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.ts

Hii 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.late na totals.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 la quote lenye placed, reverted, au lost.
  • Fuatilia nukuu zilizowekewa kikomo: Wakati capped ni 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.