MEV-suojaus Jito DontFrontilla

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ä:

  1. Etuajo: hakija ostaa tokenin ennen kauppaasi nostaen hintaa
  2. Kauppasi toteutuu odotettua huonommalla hinnalla
  3. 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 possible
With dontfront: [your_tx, ...] ← your tx must be first

Vaihe vaiheelta

  1. 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.

  2. 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.

  3. Lähetä Jito-lohkoomoottorin kautta:

    • sendTransaction: https://mainnet.block-engine.jito.wtf/api/v1/transactions
    • sendBundle: https://mainnet.block-engine.jito.wtf/api/v1/bundles

    Dokumentaatio: sendTransaction ja sendBundle

  4. 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 eteen
  • sendBundle-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:

  1. Kaikki dontfront-transaktiot ovat peräkkäisiä bundlen alussa
  2. 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

  1. Merkitse dontfront-tili vain luku -tilaan. Kirjoitettavaksi merkitseminen toimii, mutta vain luku -tila optimoi laskeutumisnopeuden.

  2. 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.

  3. 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?

© 2026 Solana Foundation. Kaikki oikeudet pidätetään.