MEV-suojaus Jito DontFrontilla
Maximal Extractable Value (MEV) tarkoittaa arvoa, jota voidaan kaapata järjestelemällä, sisällyttämällä tai jättämällä pois transaktioita lohkosta. MEV ei ole minkään yksittäisen ketjun erityispiirre – se on perustavanlaatuinen ominaisuus jokaisessa lohkoketjussa, jossa lohkon tuottajat hallitsevat transaktioiden järjestystä. Jotkut MEV:n muodot, kuten arbitraasi, auttavat pitämään markkinat tehokkaina korjaamalla hintaeroja DEX-pörssien välillä. Toiset, kuten sandwich-hyökkäykset, kaappaavat arvoa suoraan käyttäjiltä. DeFi-sovelluksia rakentaville kehittäjille tämä voi tarkoittaa heikompaa kaupankäyntisuorituskykyä ja menetettyä voittoa.
Tämä opas keskittyy sandwich-hyökkäyksiin, yleiseen haitallisen MEV:n muotoon, ja niiden lieventämiseen Jiton dontfront-ominaisuuden avulla.
Suositellut esitiedot: Jito Bundles
MEV Solanassa
Solanan arkkitehtuuri pienentää jo valmiiksi MEV:n vaikutusaluetta verrattuna julkisen mempoolin ketjuihin. Transaktiot välitetään suoraan tulevalle lohkojohtajalle 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 hakijoiden aikaikkuna havaita ja reagoida vireillä oleviin transaktioihin.
MEV-kaappaus tapahtuu kuitenkin edelleen. Hakijat, joilla on optimoitu infrastruktuuri ja suorat validator-yhteydet, voivat tarkkailla transaktiovirtaa ja reagoida siihen. Suuri osa Solanan MEV-toiminnasta on atomista arbitraasia: botteja, jotka korjaavat hintaerot DEX-pörssien välillä yhdellä transaktiolla. Tämäntyyppiinen MEV on yleisesti ottaen hyödyllistä, sillä se parantaa hintojen yhdenmukaisuutta markkinoilla.
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 vireillä olevan vaihtotransaktiosi ja hyödyntää transaktioiden järjestystä:
- Front-run: hakija ostaa tokenin ennen kauppaasi, nostaen hintaa
- Kauppasi suoritetaan odotettua huonommalla hinnalla
- Back-run: 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 suoritushinnan, kun taas hakija hyötyy hintaerosta.
DontFrontin toimintaperiaate
DontFront on Jito-lohkomoottorin ominaisuus, joka estää hakijoita sijoittamasta transaktioita sinun transaktiosi eteen bundlessa.
Mekanismi: lisää mikä tahansa kelvollinen Solana-julkinen avain, joka alkaa jitodontfront-etuliitteellä, mihin tahansa transaktiosi käskyyn. Lohkomoottori tunnistaa tämän etuliitteen ja pakottaa säännön: mikä tahansa transaktiosi sisältävä bundle pitää sijoittaa 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
jitodontfront-etuliitteellä (esim.jitodontfront111111111111111111111111111111). Tilin ei tarvitse olla olemassa onchainissä; sitä ei koskaan lueta eikä kirjoiteta. Voit tarkistaa, onko merkkijono kelvollinen osoite, käyttämälläassertIsAddress-funktiota @solana/kit-paketista, tai voit syöttää osoitteen Solana Exploreriin nähdäksesi, ratkeaako se. Tässä on esimerkki virheellisestä osoitteesta. -
Lisää se vain luku -tilassa olevana, ei-allekirjoittajana mihin tahansa transaktiosi käskyyn. Merkitse se vain luku -tilaan optimaalisen laskeutumisnopeuden saavuttamiseksi. Useimmat ohjelmat (mukaan lukien System Program) jättävät huomiotta ylimääräiset tilit, joita ne eivät odota.
-
Lähetä Jito-lohkomoottorin 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 tunnistaa
jitodontfront-etuliitteen ja pakottaa järjestyyssäännöt.
Mitä tapahtuu lohkomoottorissa
Kun lohkomoottori havaitsee transaktion, joka sisältää jitodontfront-tilin:
- Via
sendTransaction: transaktio on suojattu. Mikään bundle ei voi sijoittaa toista transaktiota sen eteen - Via
sendBundle: transaktion on esiinnyttävä indeksissä 0, muuten koko bundle hylätään
Transaktiot ja bundlet, jotka eivät sisällä jitodontfront-tiliä, eivät ole vaikutuksen alaisia.
Bundle-järjestyyssää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äin bundlen alussa
- Jokaisella dontfront-transaktiolla on vähintään yksi yhteinen allekirjoittaja 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
Integrointiesimerkit
Nopean koodireseptin löydät MEV-suojaus-cookbook-merkinnästä.
TypeScript (@solana/kit)
Ydinajatus on apufunktio, joka liittää dontfront-tilin mihin tahansa käskyyn:
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ä sitten allekirjoitettu transaktio Jito-lohkomoottorille tavallisen RPC-noden sijaan. Käytä aina base64-koodausta. Base58 on poistettu käytöstä 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 suojaustaso. Kattava MEV-lieventämisstrategia yhdistää useita lähestymistapoja:
Transaktiotason suojaus
-
Aseta tiukat slippage-toleranssit. Tehokkain yksittäinen puolustus sandwich-hyökkäyksiä vastaan on hyväksyttävän slippagen rajoittaminen vaihtoissa. Pienempi slippage-ikkuna pienentää hyökkääjille saatavilla olevaa voittomarginaalia, tehden transaktiostasi vähemmän houkuttelevan sandwich-kohteen.
-
Aseta sopivat tipit ja prioriteettipalkkiot. Ruuhkautumisen aikana korkeammat tipit ja prioriteettipalkkiot lisäävät todennäköisyyttä, että transaktiosi/bundlesi laskeutuu nopeasti, pienentäen hakijoiden toimintaikkunaa. Katso Jiton dokumentaatio Tip-määristä saadaksesi lisätietoja sopivien tippien asettamisesta.
-
Optimoi laskentayksikköjen käyttö. Jokaisella lohkolla on rajoitettu määrä laskentayksiköitä käytettävissä (ja tileillä on rajoitettu määrä laskentayksiköitä käytettävissä per lohko). Varmistaaksesi, että transaktiosi/bundlesi sisällyttämisen todennäköisyys lohkoon on maksimoitu, sinun tulisi optimoida laskentayksikköjen käyttösi. Katso Kuinka optimoida laskentayksikköjen käyttö Solanassa -opas yksityiskohtia varten.
DontFront-kohtaiset suositukset
-
Merkitse dontfront-tili vain luku -tilaan. Kirjoitettava merkintä toimii, mutta vain luku -tila optimoi laskeutumisnopeuden.
-
Käytä yksilöllistä dontfront-pubkey-avainta per sovellus. Mikä tahansa
jitodontfront-etuliitteellä alkava pubkey toimii. Yksilöllisen variantin käyttö (esim.jitodontfront111111111111111111111111111123) antaa sinulle mahdollisuuden erottaa käyttö sovelluskohtaisesti onchain-dataa tarkastellessa. -
DontFront tukee Address Lookup Tableja. Dontfront-tili voidaan sisällyttää ALT:n kautta. Älä kuitenkaan käytä ALT:eja tip-tileille.
Rajoitukset
-
Vain lohkomoottori. DontFront on Jito-lohkomoottorin pakottama. Suoraan validatoreille lähetetyt transaktiot (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ärjestyksen vaihteluihin, mukaan lukien kolmansien osapuolten suorittama järjestely."
-
Vain Mainnet/Testnet. Tämä on Jito-lohkomoottorin ominaisuus. Se ei toimi devnetissä tai localhostissa.
Viitteet
Is this page helpful?