Selam beyler, kolay yoldan voliyi vurmak isteyen kodcular. Baştan net olalım: Memecoin işini eğlenceli bir komünite veya şapkalı köpek resimlerinden ibaret sanıyorsanız sekmeyi hemen kapatın. Memecoin piyasası tam bir PvP arenasıdır. Profesyonel avcılar endüstriyel ölçekte keriz silkeliyor. Başkasının kâr satışına likidite olmamak için tek çare piyasayı yönlendirenlerin, yani Smart Money'nin peşine takılmak.
Bugün Python kullanarak bu çılgınlık üzerinden nasıl istatistiksel arbitraj yapılacağını göreceğiz. Doğru cüzdanları blockchain'den nasıl avlayacağımızı ve token aya uçup arkasında kül bırakmadan önce işlemlerini nasıl kopyalayacağımızı konuşacağız.
Memecoin'lerde Smart Money Anatomisi: Kim Bu Adamlar?
DEX'lerde akıllı para üç gruba ayrılır. Bu mantığı çözmeden yazacağın script sadece komisyonlarla kasayı sıfırlar. Gerçi Solana veya Base'de fee ücretleri çerez parası... Ama slippage (fiyat kayması) her türlü adamı patlatır.
- Insider'lar (Geliştiriciler ve yancıları): Token deploy edildiği ilk saniye snipe'larlar. Kontrat kodunu ve pazarlama takvimini önceden bilirler. Cüzdanları genelde mixer'lar üzerinden birbirine bağlıdır. Onları "toplam arzın %5'ini alan ilk işlem" pateninden yakalıyoruz.
- Özel Yazılımlı Sniper'lar: Hızlı RPC node'larında pusuya yatıp gözlerine kestirdikleri her havuzu anında süpüren tayfa.
- Trend Balinaları: Sosyal medyadaki havayı koklayıp erken aşamada token'a 10–20 ETH / 500 SOL gömerler. Tahtada devasa yeşil mumlar yaratırlar. En güvenlisi bunların peşinden gitmektir.
| Cüzdan Tipi | Giriş Hızı | Revert (Scam) Riski | Otomatik Çıkış Stratejisi |
|---|---|---|---|
| Insider | Anında (0-1. blok) | Ekstrem (Rug pull) | 2x yapınca %50 kâr al, kalanı maliyete çek |
| Balina / Trader | 5-15 dakika içinde | Orta | Trende göre kâr al, hacim yavaşlayınca çık |
| MEV Botu | Milisaniyeler | Düşük (zaten kendileri önden koşuyor) | Kopyalama! (Script sadece gas ücreti eritir) |
Ölümcül Hata #1: Ethereum mempool'unda sandwich atağı yapan MEV botlarını kopyalamaya çalışmak. Flashbots bundle'larını asla geçemezsiniz. Script işlemi gönderir, revert yer ve gas ücreti çöp olur. Geçen hafta Base ağında router kontratlarını filtrelemeyi unuttuğum için ben de revert yedim. 50 dolar havaya uçtu.
"Şişman Balina" Nasıl Avlanır: Parsing Mantığı
Plan basit. Son birkaç güne ait merkeziyetsiz borsa loglarını (Base'de Uniswap v3 veya Solana'da Raydium gibi) parse edeceğiz. Memecoin'lerde en az 5–10x yapmış cüzdanları arayacağız.
Bunun için bin dolarlık ücretli API'lere gerek yok. QuickNode veya Alchemy'nin ücretsiz paketi ve blockchain log mantığını az çok bilmek yeterli. DEX üzerindeki her alım işlemi Swap event'ini tetikler. Bu adresleri çekip veri tabanına (basit loglar için MariaDB yeterli, Postgres'le fantezi aramaya gerek yok) atıyoruz ve PnL durumlarına bakıyoruz.
İlk başta hız delisi bir parser için Rust ile inline-assembler yazmayı düşündüm. Sonra MVP için değmez deyip saldım. Python ve web3.py kütüphanesi bu işi tereyağından kıl çeker gibi halleder.
Çalışan Script Yazıyoruz: Tracker ve Auto-Buyer
Aşağıda EVM ağları (Base, Arbitrum, BSC) için hazır script var. RPC node'unu dinler, hedef balinanın işlemlerini filtreler. Balina swapExactTokensForTokens veya benzeri bir fonksiyonu çağırdığı an peşinden alım emrini çakar.
L2 ağlarında mempool yoktur. Her şey FCFS (First Come, First Served) mantığıyla çalışır. İlk gelen kapar. Bu yüzden node hızı her şeydir.
Python
import time
import os
from web3 import Web3
from eth_account import Account
# Config. Bilgileri doldur başkan.
RPC_URL = "https://mainnet.base.org" # Private node şart, public olan bir dakikada patlar
PRIVATE_KEY = "ТВОЙ_ПРИВАТНИК_СЮДА_НЕ_ПАЛИ_ЕГО"
SMART_MONEY_ADDRESS = "0x742d35Cc6634C0532925a3b844Bc454e4438f44e" # Takipteki balina adresi
ROUTER_ADDRESS = "0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24" # Base Uniswap v3 router örneği
# WETH ve hedef token (hedef adresi balinanın işleminden çekeceğiz)
WETH_ADDRESS = "0x4200000000000000000000000000000000000006"
w3 = Web3(Web3.HTTPProvider(RPC_URL))
account = Account.from_key(PRIVATE_KEY)
# Sadece swap için minimum router ABI'si
ROUTER_ABI = [
{
"inputs": [
{"internalType": "uint256", "name": "amountOutMin", "type": "uint256"},
{"internalType": "address[]", "name": "path", "type": "address[]"},
{"internalType": "address", "name": "to", "type": "address"},
{"internalType": "uint256", "name": "deadline", "type": "uint256"}
],
"name": "swapExactETHForTokens",
"outputs": [{"internalType": "uint256[]", "name": "amounts", "type": "uint256[]"}],
"stateMutability": "payable",
"type": "function"
}
]
router_contract = w3.eth.contract(address=ROUTER_ADDRESS, abi=ROUTER_ABI)
def buy_token(target_token_address, eth_amount_to_spend):
"""Balinanın peşinden market fiyatından direkt alım"""
nonce = w3.eth.get_transaction_count(account.address)
# Tx oluşturma. Gas miktarını yüksek tut, tahta oynarsa revert yer.
tx = router_contract.functions.swapExactETHForTokens(
0, # amountOutMin = 0. %100 slippage. Memecoin'de başka türlü emri doldurmazlar.
[WETH_ADDRESS, target_token_address],
account.address,
int(time.time()) + 60
).build_transaction({
'from': account.address,
'value': w3.to_wei(eth_amount_to_spend, 'ether'),
'gas': 250000,
'maxFeePerGas': w3.eth.gas_price * 2, # Öne geçmek için ortalama gas'i ikiye katla
'maxPriorityFeePerGas': w3.to_wei(2, 'gwei'),
'nonce': nonce,
'chainId': 8453 # Base chain id
})
signed_tx = w3.eth.account.sign_transaction(tx, private_key=PRIVATE_KEY)
tx_hash = w3.eth.send_raw_transaction(signed_tx.rawTransaction)
print(hex(tx_hash)) # Kasaya kâr yazdı mı? Explorer'dan bakacağız...
def monitor_wallet():
print("Script başladı. Balina nereye para gömüyor bakıyoruz...")
last_block = w3.eth.block_number
while True:
try:
current_block = w3.eth.block_number
if current_block > last_block:
for block_num in range(last_block + 1, current_block + 1):
block = w3.eth.get_block(block_num, full_transactions=True)
for tx in block.transactions:
# İşlemi gönderen balina mı kontrolü
if tx['from'].lower() == SMART_MONEY_ADDRESS.lower():
print("Aha! Balina hareketlendi!")
# Router tetiklendi mi kontrolü
if tx['to'] and tx['to'].lower() == ROUTER_ADDRESS.lower():
# Normalde input data parse edilip token adresi çekilir.
# Örnek adına şuraya çöp bir token adresi sallayalım:
target_meme = "0x1111111111111111111111111111111111111111"
print(f"Balinayı kopyala. Alınan: {target_meme}")
buy_token(target_meme, 0.01) # Test için ufak miktar giriş
last_block = current_block
time.sleep(0.5) # Node'dan ban yememek için rate limit
except Exception as e:
# Kodcu uyur, gece 3 hatası uyumaz
print(f"Sistem çöktü, döngü restart ediliyor: {e}")
time.sleep(1)
if __name__ == "__main__":
monitor_wallet()Riskler, Tuzaklar ve Nasıl Likidite Olursunuz?
Script bakiye kontrolü yapıp malı alana kadar balina takipçilerine çoktan mal boşaltıyor olabilir. Honeypot (Bal küpü) tuzağı da cabası.
Tezgah eski:
- Balina (veya insider) kodunda sadece beyaz listedeki adreslerin satış yapabileceği bir token deploy eder.
- Kendi token'ını tüm blockchain'in gözü önünde kendisi satın alır.
- Script bu akıllı para işlemini yakalar. Aynı bloğa dalıp alımı yapar.
Tebrikler. Havuzda geri satışı imkansız olan bir çöp aldınız. Para sonsuza kadar kilitlendi. Balina likiditeyi çeker, siz de avucunuzu yalarsınız.
Nasıl korunacağız? Alımdan önce script'in işlemi simüle etmesi (örneğin eth_call ile) gerekiyor. Satış (sell) simülasyonu hata veya revert verirse token anında kara listeye alınmalı. Bu kontrolü mantığa oturtmazsanız kasayı birkaç günde eritirsiniz.
Simülasyon olayına değinmişken, şu can sıkıcı mevzuyu biraz daha detaylandıralım. Yeni başlayanların çoğu şöyle düşünüyor: "Bir log parser yazarım, her projeye marketten dalar, parayı kürekle götürürüm." Yok öyle bir dünya.
Pre-trade simülasyonu yapmıyorsan, dolandırıcılar için sadece bedava yemsin.
Pre-Trade Simülasyonu: Honeypot Tuzaklarına Düşmekten Nasıl Korunursun?
Bir balina yeni bir kontrata girdiğinde, yazdığın script körü körüne adresi kopyalamamalı. Önce bu shitcoin'i geri satıp satamayacağını kontrol etmen şart. Bunun için eth_call metodu kullanılıyor. Canlı ağa işlem göndermeden, swapExactTokensForETH fonksiyon çağrısını lokal olarak node üzerinde simüle ediyoruz.
Eğer node bir revert (hata) döndürürse, token anında kara listeye alınır. Script token'ı pas geçer ve paran cepte kalır.
İşte buy_token fonksiyonundan hemen önce araya sıkıştırman gereken kod bloğu. Burada network fork'u içeren tam teşekküllü bir simülatör kurmadım. Aslında bunu Hardhat veya Anvil üzerinden yapmak en doğrusu, ama şu an ayaküstü hızlıca bir script karalıyoruz.
Python
def check_honeypot(token_address):
"""
Token'ı kontrol ediyoruz. Buy ve sell simülasyonu.
Kontrat satışı engelliyorsa net scam'dir.
"""
# Kontrol için router kullanıyoruz. Çerezlik bir miktar atıyoruz.
test_amount_in = w3.to_wei(0.001, 'ether')
try:
# eth_call ile buy simülasyonu yapıyoruz
# Sadece kontrat seviyesinde hata verip vermediğine bakıyoruz
router_contract.functions.swapExactETHForTokens(
0,
[WETH_ADDRESS, token_address],
account.address,
int(time.time()) + 60
).call({'from': account.address, 'value': test_amount_in})
# Normalde burada SELL (satış) simülasyonu da yapmak lazım.
# Ama onun için bakiye olması veya lokal network fork'u kurmak gerekir.
# Gece saat 3'te sadece buy simülasyon kontrolü de yeterli.
# Zaten sert honeypot'ların çoğu daha router'a istek attığın an patlıyor.
return True
except Exception as e:
print(f"DİKKAT! {token_address} token'ı simülasyonu geçemedi: {e}. Bu çöpü pas geçiyoruz.")
return FalseÇıkış Stratejisi: Kârı Kasaya Kilitlemek
Malı almak işin sadece yarısı. Meme piyasasında doğru zamanda çıkabilmek ise asıl mesele. Meme coin'ler parabolik hareket eder. Sert bir yükseliş, kısa bir yatay seyir ve ardından ilk balinalar tahtaya mal boşaltmaya başladığı an saniyeler içinde sıfıra çakılma.
Ben kâr almak (TP) için yarı otomatik bir merdiven stratejisi geliştirdim. Tıkır tıkır çalışıyor:
- 2x Seviyesi (+%100): Script, pozisyonun tam %50'sini otomatik satar. Konu kapandı; ana parayı kurtardın, artık bedava biletle içeridesin. Bundan sonra işlemi psikolojik olarak yönetmek yüz kat daha kolaylaşır.
- 3x Seviyesi (+%200): Kalan çantanı %25 daha hafiflet, malı boşalt.
- Trailing Stop: Pozisyonun geri kalanı (moon bag) trendi takip eder. Fiyat yerel zirveden %20 düştüğü an, script market emriyle her şeyi kapatır.
Sahanın içinden (Alpha): Pozisyonun yüklüyse, satış yaparken amountOutMin değerini asla sıfır bırakma. Toplam likiditesi 2000$ olan bir havuza 500$'lık token boşaltmaya kalkarsan, MEV botları frontrun atarak seni çiğ çiğ yer. Devasa slippage yüzünden script'ine sadece üç beş kuruş kalır. Satışları küçük emirlerle, parça parça yapmak lazım.
Başlangıç İçin Smart Money Adresleri Nerede Bulunur?
Doğru adresleri hedeflemeyen bir script, sadece boş bir kod yığınından ibarettir. Balina cüzdanlarını nereden bulacaksın?
- Dextools / Dexscreener: Son 24 saatin en çok yükselenler listesini açıyorsun. Top Traders veya Transactions sekmesine geliyorsun. En başta (0-100. bloklar arasında) girip tepede kâr alan tipleri buluyorsun. Adreslerini kopyala.
- DeBank / Arkham: Kopyaladığın adresi buralara yapıştırıp trader'ın win rate oranına bakıyorsun. Eğer adam shitcoin'lerde 500$'lık sermayeyi katlayıp cüzdana 100k$+ bakiye koyduysa, aradığımız adam odur. Adresini script'indeki SMART_MONEY_ADDRESSES dizisine ekle.
Pragmatistler İçin Özet
Meme coin piyasasında istatistiksel arbitraj veya copy-trading yapmak bir "para basma butonu" değildir. Tamamen bir hız yarışı ve scam projeleri eleme oyunudur. Yazdığın script halka açık bir RPC node'u üzerinde çalışıyorsa, her zaman geride kalırsın. Gerçek bir avantaj yakalamak istiyorsan özel node erişimi satın almalısın (örneğin Solana için Jito veya hızlı işlemleri destekleyen özel EVM node'ları). Kontrol mantığını optimize etmeli ve riskleri çok sıkı yönetmelisin.
Ve en önemlisi; kaybetmeyi göze alamayacağın parayı shitcoin'lere yatırma. Yarın proje revert eder, geliştirici likiditeyi çeker (rug pull) ve hiçbir script seni kurtaramaz.