Explainers

Kripto Botlar: Yiyip Bitiren Sandviç Saldırısı Salgını

Özenle hazırladığınız kripto alım satım botu muhtemelen para kaybediyor. Kötü bir stratejiden dolayı değil, çünkü yırtıcı botlar onu canlı canlı yiyor. Buna sandviç saldırısı deniyor ve merkeziyetsiz finans için bir veba.

{# Always render the hero — falls back to the theme OG image when article.image_url is empty (e.g. after the audit's repair_hero_images cleared a blocked Unsplash hot-link). Without this fallback, evergreens with cleared image_url render no hero at all → the JSON-LD ImageObject loses its visual counterpart and LCP attrs go missing. #}
Kripto alım satım botunun iki yırtıcı bot arasında sıkıştığını gösteren görsel bir temsil, sandviç saldırısını canlandırıyor.

Key Takeaways

  • Çoğu kripto alım satım botu, önemli kayıplara yol açan MEV sandviç saldırılarına karşı savunmasızdır.
  • Flashbots (Ethereum) ve Jito paketleri (Solana) gibi teknikler, işlemleri gizleyerek ve atomik yürütmeyi sağlayarak kritik koruma sunar.
  • Gelişmiş botlar, MEV çıkarımından kaçınmak için işlemleri bölme ve gas fiyatlarını rastgeleleştirme gibi gizleme taktikleri kullanır.

Mempool. Dijital bir savaş alanı. İşlemlerin öldüğü, hatta daha kötüsü, başkasının öğle yemeğini finanse ettiği yer. Ve sizin kripto botunuz, naif küçük kalbiyle, genellikle ana yemek oluyor.

Sandviç saldırıları. Bu acımasız ama zarif bir hırsızlık biçimi. Maksimal Çıkarılabilir Değer (MEV) botu, bekleyen işleminizi fark eder. Ardından sizin işleminizin etrafına iki işlem yerleştirir – biri sizin önünüze geçip varlığı satın alarak fiyatı yükseltir, diğeri ise hemen ardından satarak farkı cebine atar. Siz ekmeksiniz, onlar iç harç.

İşte saldırganın senaryosu, tabiri caizse:

function executeSandwich(
address tokenIn,
address tokenOut,
uint amountIn,
uint minAmountOut,
address victim
) external payable {
// 1. Önceliklendirme: Kurbanın önünde alım
swap(tokenIn, tokenOut, amountIn, minAmountOut);
// 2. Kurban işleminin gerçekleşmesini bekle
(bool success,) = victim.call{value: 0}("");
require(success, "Victim tx failed");
// 3. Arka planlama: Kurbanın ardından satım
swap(tokenOut, tokenIn, IERC20(tokenOut).balanceOf(address(this)), 0);
}

Bu sadece teorik değil. Ethereum’da Flashbots araştırmalarına göre, MEV kârlarının %80’inden fazlası tam da bu saldırılardan geliyor. Bu, ortalama olarak günde 1.200 doların Uniswap yatırımcılarından doğrudan çekildiği anlamına geliyor. Botunuz muhtemelen buna katkıda bulunuyor. Muhtemelen de fazlasıyla.

Neden bu kadar çok bot kolay av oluyor? Üç ana neden var. Birincisi, halka açık mempool’lara işlem yayınlamak. Bu, planlarınızı çatıdan bağırmak gibi. İkincisi, tahmin edilebilir gas ücretleri. Sandviççiler için adeta bir ‘hoş geldiniz’ paspası sermiş gibisiniz. Üçüncüsü, sıfır gizlilik. Saldırgan tam olarak ne yaptığınızı ve ne zaman yaptığınızı görüyor.

Tipik, mahkum bir bot şöyle görünüyor:

def make_trade(token_in, token_out, amount):
 tx = {
'to': UNISWAP_ROUTER,
'data': encode_swap(token_in, token_out, amount),
'gasPrice': w3.eth.gas_price + 10, # Tahmin edilebilir artış
'nonce': w3.eth.get_transaction_count(wallet.address)
 }
 signed = wallet.sign_transaction(tx)
 tx_hash = w3.eth.send_raw_transaction(signed.rawTransaction) # Halka açık mempool
 return tx_hash

Bu kod, önceliklendirilmesi için adeta yalvarıyor. Bir kırılganlık şaheseri.

Zavallı, Buncağa Uğramış Botum İçin Bir Umut Var mı?

Evet. Ama halka açık mempool’ların karanlık çağlarından çıkmayı gerektiriyor. Ethereum’da Flashbots, işlemleri madencilere özel olarak göndermenin bir yolunu sunuyor. Daha az görünürlük, daha az sandviç. Ama bu sadece Ethereum’a özel ve her derde deva değil.

from flashbots import flashbot
# Flashbots'u başlat
flashbot(w3, signature_account)
# Paket oluştur
signed_tx = wallet.sign_transaction(tx)
bundle = [
 {"signed_transaction": signed_tx.rawTransaction}
]
# Özel paket gönder
block = w3.eth.block_number
flashbots.send_bundle(bundle, target_block_number=block + 1)

Yine de, bu bir başlangıç. Daha sağlam bir çözüm için, özellikle Solana üzerinde denemeler yapıyorsanız, Jito’nun MEV altyapısına göz atın. Onların “paketleri” işlemleri atomik bir birim halinde grupluyor. Ya hepsi gerçekleşir ya da hiçbiri. Bu, önceliklendirmeyi pratikte imkansız hale getiriyor. Bu çok daha medeni bir yaklaşım.

import { Connection, Keypair } from '@solana/web3.js';
import { JitoBundle } from '@jito-labs/core';
const jitoEndpoint = 'https://jito-mainnet.rpcpool.com';
const connection = new Connection(jitoEndpoint);
async function sendProtectedSwap(swapIx) {
const blockhash = await connection.getLatestBlockhash();
const bundle = new JitoBundle([
{ instruction: swapIx, signers: [keypair] }
], {
blockhash,
lastValidBlockHeight: blockhash.lastValidBlockHeight
});
const bundleId = await connection.sendBundle(bundle);
return bundleId;
}

Jito paketleri, atomik yürütme sunarak önceliklendirmeyi etkili bir şekilde ortadan kaldırıyor ve hatta daha hızlı dahil etmeyi sağlamak için öncelik ücretlerine izin veriyor. Testler, halka açık gönderimlere kıyasla sandviç saldırılarını %97 gibi şaşırtıcı bir oranda azalttığını gösteriyor. Bu bir iyileştirme değil; bir devrim.

Gizleme: Fark Edilmeme Sanatı

Ancak özel paketlerle bile, gerçekten paranoyaklar – ve dürüst olmak gerekirse, gerçekten başarılı olanlar – orada durmuyor. Bir öngörülemezlik katmanı ekliyorlar. Bunu kamuflaj gibi düşünün. İşlemlerinizi daha küçük parçalara bölün. Aralarındaki gecikmeleri değiştirin. İşlemlerinizin rotalarını rastgeleleştirin. Ve merkeziyetsiz her şeyin iyiliği için, gas fiyatlarınızı rastgeleleştirin. Bu, botunuzu bir hayalet yapmak gibi.

def stealth_swap(token_in, token_out, amount):
# Birden fazla küçük takasa bölün
chunks = split_amount(amount, random_int(3,7))
# Takaslar arasındaki gecikmeyi değiştirin
for chunk in chunks:
wait(random.uniform(0.5, 3.5))
# Doğrudan takas ile WETH üzerinden rota arasında geçiş yapın
if random.random() > 0.7:
route = [token_in, WETH, token_out]
else:
route = [token_in, token_out]
# Gas fiyatlandırmasını rastgeleleştirin
gas_strategy = random.choice([
fixed_gas_with_tip(15),
eip1559_dynamic_fee(),
gas_auction_strategy()
])
execute_swap(route, chunk, gas_strategy)

Bu sadece tek bir saldırı vektöründen kaçınmakla ilgili değil. Tüm MEV çıkarıcı ekosistemine botunuzu görünmez kılmakla ilgili. Sonuçlar? Doğru uygulandığında, kendi botlarımızda sandviç saldırılarının işlemlerin %42’sinden yalnızca %3’üne düştüğünü gördük. Kayma %1.8’den %0.4’e geriledi. Karlılık? %12+ yatırım getirisi (ROI) seviyesinden %37+ yatırım getirisine fırladı. Rakamlar yalan söylemez. MEV korumasını görmezden gelmek masada para bırakmaktır. Bolca para.

Bot Savunmasında İnsan Faktörü

Burada en dikkat çekici olan sadece teknik çözümler değil, altında yatan prensiptir. Orijinal makale, kod örneklerine gömülmüş olsa da, daha derin bir gerçeğe işaret ediyor: en savunmasız botlar en basit olanlardır. Onlar, merkeziyetsiz finansın acımasız doğasını anlamadan inşa edilmiş, naif olanlardır. Bu yeni bir sorun değil, unutmayın. Erken borsa yatırımcıları da benzer sorunlarla, ilkel biçimlerde içeriden öğrenme ve piyasa manipülasyonuyla karşılaştı. Araçlar değişir, ancak değeri, çoğu zaman haksız yere, çıkarma içgüdüsü (bu durumda algoritmik olarak) devam eder. Fark, DeFi’de, mempool’un şeffaflığı—veya eksikliği—bu gelişmiş saldırılar için bir oyun alanı yaratıyor. Flashbots ve Jito gibi şirketler aslında güvenli özel alım satım odalarının dijital karşılığını inşa ediyorlar, bu da geleneksel finansta onlarca yıldır geliştiğini gördüğümüz bir kavram. Bu, koruma ile yırtıcılık arasındaki bir yarış ve şu anda yırtıcılar önde, çünkü geliştiriciler hala botları satranç oynar gibi değil, dama oynar gibi geliştiriyorlar. Ya da belki daha doğru bir ifadeyle, Açlık Oyunları oynar gibi.


🧬 İlgili İçgörüler

Sıkça Sorulan Sorular

Kriptoda sandviç saldırısı nedir? Bir sandviç saldırısı, kötü niyetli bir botun mempool’da sizin işleminizin etrafına iki işlem yerleştirmesi—biri sizin işleminizden önce bir varlık almak ve diğeri işleminizden sonra satmak suretiyle, kendi işleminizin neden olduğu fiyat değişikliklerinden kar etmesidir.

Jito paketleri sandviç saldırılarını nasıl önler? Jito paketleri, birden fazla işlemi atomik olarak yürütmek üzere gruplandırır. Bu, paketteki tüm işlemlerin birlikte başarıya ulaşması veya başarısız olması anlamına gelir, bu da MEV botlarının kendi işlemlerini araya sokmasını engeller ve böylece önceliklendirmeyi durdurur.

Alım satım botum MEV tarafından risk altında mı? Botunuz, tahmin edilebilir gas ücretleri ve gizlilik önlemleri olmadan halka açık mempool’lara işlem yayınlıyorsa, sandviçleme gibi MEV saldırılarına karşı oldukça savunmasızdır.

Alex Rivera
Written by

Developer tools reporter covering SDKs, APIs, frameworks, and the everyday tools engineers depend on.

Worth sharing?

Get the best Developer Tools stories of the week in your inbox — no noise, no spam.

Originally reported by dev.to