MEV-suojaus Jito DontFrontilla
Maximal Extractable Value (MEV) tarkoittaa arvoa, joka voidaan kaapata järjestelemällä, sisällyttämällä tai jättämällä pois transaktioita lohkosta. MEV ei ole yksinomainen minkään tietyn ketjun ominaisuus – se on kaikkien lohkoketjujen perusominaisuus, joissa lohkojen tuottajat hallitsevat transaktioiden järjestystä. Jotkin MEV:n muodot, kuten arbitraasi, auttavat pitämään markkinat tehokkaina korjaamalla hintaeroja DEX-pörssien välillä. Toiset, kuten sandwich-hyökkäykset, vievät arvoa suoraan käyttäjiltä. DeFi-sovelluksia rakentaville kehittäjille tämä voi tarkoittaa heikompaa kaupankäynnin toteutusta ja menetettyä tuottoa.
Tämä opas keskittyy sandwich-hyökkäyksiin, yleiseen haitallisen MEV:n muotoon, ja siihen, miten niitä voidaan lieventää Jiton dontfront-ominaisuuden avulla.
Suositellut esitiedot: Jito Bundles
MEV Solanassa
Solanan arkkitehtuuri pienentää jo valmiiksi MEV:n pintaa verrattuna ketjuihin, joissa on julkiset mempoolit. Transaktiot välitetään suoraan tulevalle lohkonjohtajalle sen sijaan, että ne odottaisivat jaetussa mempoolissa, ja käsittelemättömät transaktiot vanhenevat noin 150 lohkon (~1 minuutin) jälkeen. Tämä kaventaa merkittävästi aikaikkunaa, jonka aikana hakijat voivat tarkkailla odottavia transaktioita ja toimia niiden perusteella.
Siitä huolimatta MEV:n hyödyntämistä tapahtuu edelleen. Optimoidun infrastruktuurin ja suorien validator-yhteyksien avulla hakijat voivat tarkkailla transaktiovirtaa ja reagoida siihen. Suuri osa Solanan MEV-toiminnasta on atomista arbitraasia: botteja, jotka korjaavat hintaeroja DEX-pörssien välillä yhdessä transaktiossa. Tämä MEV:n muoto on yleisesti ottaen hyödyllinen, sillä se parantaa hintajohdonmukaisuutta markkinoiden välillä.
Haitallinen muoto, sandwich-hyökkäykset, on se, mitä kehittäjien tulisi aktiivisesti suojautua vastaan.
Mikä on sandwich-hyökkäys?
Sandwich-hyökkäys tapahtuu, kun hakija havaitsee odottavan swap-transaktiosi ja hyödyntää transaktioiden järjestystä:
- Etuajo: hakija ostaa tokenin ennen kauppaasi nostaen hintaa
- Kauppasi toteutuu odotettua huonommalla hinnalla
- Takaajo: hakija myy tokenin kauppasi jälkeen ja taskuttaa erotuksen
Solanassa tämä voi tapahtua
Jito-bundlejen kautta. Hakija lähettää bundlen, jossa on transaktioita kuten:
[frontrun_tx, your_tx, backrun_tx], ja lohkomoottori suorittaa ne atomisesti järjestyksessä. Uhri saa huonomman toteutushinnan, kun taas hakija hyötyy leviämisestä.
Miten DontFront toimii
DontFront on Jito-lohkoomoottorin ominaisuus, joka estää hakijoita sijoittamasta transaktioita omasi eteen bundlessa.
Mekanismi: lisää mikä tahansa kelvollinen Solanan julkinen avain, joka alkaa merkkijonolla jitodontfront, mihin tahansa transaktiosi ohjeeseen. Lohkomoottori tunnistaa tämän etuliitteen ja soveltaa sääntöä: minkä tahansa transaktiosi sisältävän bundlen on sijoitettava se indeksiin 0.
Without dontfront: [frontrun_tx, your_tx, backrun_tx] ← sandwich possibleWith dontfront: [your_tx, ...] ← your tx must be first
Vaihe vaiheelta
-
Valitse kelvollinen osoite, joka alkaa merkkijonolla
jitodontfront(esim.jitodontfront111111111111111111111111111111). Tilin ei tarvitse olla olemassa ketjussa; sitä ei koskaan lueta tai kirjoiteta. Voit varmistaa, että merkkijono on kelvollinen osoite, käyttämälläassertIsAddress-funktiota @solana/kit-paketista, tai voit syöttää osoitteen Solana Exploreriin tarkistaaksesi, ratkeaako se. Tässä on esimerkki virheellisestä osoitteesta. -
Lisää se vain luku -tilassa olevana, ei-allekirjoittavana tilinä mihin tahansa transaktiosi ohjeeseen. Merkitse se vain luku -tilaan optimaalisen laskeutumisnopeuden saavuttamiseksi. Useimmat ohjelmat (mukaan lukien System Program) ohittavat ylimääräiset tilit, joita ne eivät odota.
-
Lähetä Jito-lohkoomoottorin kautta:
sendTransaction:https://mainnet.block-engine.jito.wtf/api/v1/transactionssendBundle:https://mainnet.block-engine.jito.wtf/api/v1/bundles
Dokumentaatio: sendTransaction ja sendBundle
-
Lohkomoottori havaitsee
jitodontfront-etuliitteen ja soveltaa järjestyssääntöjä.
Mitä lohkoomoottorin päässä tapahtuu
Kun lohkomoottori havaitsee transaktion, joka sisältää jitodontfront-tilin:
sendTransaction-kautta: transaktio on suojattu. Mikään bundle ei voi sijoittaa toista transaktiota sen eteensendBundle-kautta: transaktion on esiinnyttävä indeksissä 0, tai koko bundle hylätään
Transaktiot ja bundlet, jotka eivät sisällä jitodontfront-tiliä, eivät ole tämän vaikutuksen alaisia.
Bundlen järjestyssäännöt
Nämä säännöt pätevät, kun jitodontfront-transaktio esiintyy bundlessa.
Sallitut mallit
[tx_with_dontfront, tip][tx_with_dontfront, arbitrage, tip][tx_with_dontfront_signer1, tx_with_dontfront_signer1_and_signer2, tip]
Useita DontFront-transaktioita yhdessä bundlessa
Useita dontfront-transaktioita yhdessä bundlessa sallitaan, kun molemmat ehdot täyttyvät:
- Kaikki dontfront-transaktiot ovat peräkkäisiä bundlen alussa
- Jokaisella dontfront-transaktiolla on vähintään yksi allekirjoittaja yhteinen ensimmäisen dontfront-transaktion kanssa
✅ [txA_df, txB_df, txC_df, arbitrage, tip](contiguous at front, overlapping signers)✅ [txA_df_signer1_signer2, txB_df_signer1_signer3, txC_df_signer2_signer4](each shares a signer with txA)
Hylätyt mallit
❌ [tip, tx_with_dontfront]→ dontfront tx is not at index 0❌ [txA_df_signer1, txB_df_signer2]→ no overlapping signer between txA and txB❌ [trade, tx_with_dontfront, arbitrage, tip]→ dontfront tx is not at the front
Integrointiesimerkkejä
Nopean koodireseptin löydät MEV-suojauksen cookbook-merkinnästä.
TypeScript (@solana/kit)
Perusidea on apufunktio, joka liittää dontfront-tilin mihin tahansa ohjeeseen:
import {address,AccountRole,type Instruction,type Address} from "@solana/kit";const DONT_FRONT: Address = address("jitodontfront111111111111111111111111111111");function withDontFront(ix: Instruction): Instruction {return {...ix,accounts: [...(ix.accounts ?? []),{ address: DONT_FRONT, role: AccountRole.READONLY }]};}
Lähetä sen jälkeen allekirjoitettu transaktio Jito-lohkoomoottorin kautta tavallisen RPC-noden sijaan. Käytä aina base64-enkoodausta. Base58 on vanhentunut Jiton API:ssa.
const response = await fetch("https://mainnet.block-engine.jito.wtf/api/v1/transactions",{method: "POST",headers: { "Content-Type": "application/json" },body: JSON.stringify({jsonrpc: "2.0",id: 1,method: "sendTransaction",params: [base64Tx, { encoding: "base64" }]})});
Parhaat käytännöt
DontFront on yksi suojauskerros. Kattava MEV-lieventämisstrategia yhdistää useita lähestymistapoja:
Transaktiotason suojaus
-
Aseta tiukat slippage-toleranssit. Tehokkain yksittäinen puolustuskeino sandwich-hyökkäyksiä vastaan on hyväksyttävän slippagen rajoittaminen swapauksissa. Pienempi slippage-ikkuna pienentää hyökkääjille saatavilla olevaa tuottomarginaalia, tehden transaktiostasi vähemmän houkuttelevan sandwich-hyökkäykselle.
-
Aseta sopivat tipit ja prioriteettipalkkiot. Ruuhkatilanteissa korkeammat tipit ja prioriteettipalkkiot lisäävät todennäköisyyttä, että transaktiosi/bundlesi laskeutuu nopeasti, vähentäen hakijoiden toiminta-aikaikkunaa. Katso Jiton dokumentaatiosta Tip Amounts saadaksesi lisätietoja sopivien tippien asettamisesta.
-
Optimoi laskentayksiköiden käyttö. Jokaisessa lohkossa on rajallinen määrä laskentayksiköitä (ja tileillä on rajallinen määrä laskentayksiköitä lohkoa kohden). Maksimoidaksesi todennäköisyyden, että transaktiosi/bundlesi sisällytetään lohkoon, sinun tulisi optimoida laskentayksiköiden käyttö. Katso lisätiedot Solanan laskentayksiköiden käytön optimointioppaasta.
DontFront-kohtaiset ohjeet
-
Merkitse dontfront-tili vain luku -tilaan. Kirjoitettavaksi merkitseminen toimii, mutta vain luku -tila optimoi laskeutumisnopeuden.
-
Käytä sovelluksessa yksilöllistä dontfront-pubkey-avainta. Mikä tahansa
jitodontfront-alkuinen pubkey toimii. Yksilöllisen variantin käyttö (esim.jitodontfront111111111111111111111111111123) mahdollistaa käytön erottamisen sovelluskohtaisesti ketjun tietoja tarkasteltaessa. -
DontFront tukee Address Lookup Tableseja. Dontfront-tili voidaan sisällyttää ALT:n kautta. Älä kuitenkaan käytä ALT:eja tippitileille.
Rajoitukset
-
Vain lohkomoottori. DontFront on Jito-lohkoomoottorin toteuttama. Transaktiot, jotka lähetetään suoraan validatoreille (Jiton ohittaen), eivät ole suojattuja.
-
Ei takuu. Jiton dokumentaatiosta: "Tämä ominaisuus voi auttaa vähentämään sandwich-hyökkäyksiä, mutta ei takaa sitä, eikä se ole ratkaisu kaikkiin transaktioiden järjestykseen liittyviin vaihteluihin, mukaan lukien kolmansien osapuolten suorittama järjestely."
-
Vain Mainnet/Testnet. Tämä on Jito-lohkoomoottorin ominaisuus. Se ei toimi devnetissä tai localhostissa.
Viitteet
Is this page helpful?