Kapatmak için ESC'ye basın

Memecoin Stat-Arb: Balina Takip Scripti Yazıyoruz

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 TipiGiriş HızıRevert (Scam) RiskiOtomatik Çıkış Stratejisi
InsiderAnında (0-1. blok)Ekstrem (Rug pull)2x yapınca %50 kâr al, kalanı maliyete çek
Balina / Trader5-15 dakika içindeOrtaTrende göre kâr al, hacim yavaşlayınca çık
MEV BotuMilisaniyelerDüşü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:

  1. Balina (veya insider) kodunda sadece beyaz listedeki adreslerin satış yapabileceği bir token deploy eder.
  2. Kendi token'ını tüm blockchain'in gözü önünde kendisi satın alır.
  3. 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.


FAQ

JSON-RPC Provider loglarına abone olup ana AMM factory ve router kontratlarının ürettiği Transfer veya Swap event topic'lerini filtrelemeniz gerekir. Otomatik tespit için web3.eth.filter() veya ham eth_getLogs RPC çağrılarıyla v3-core ya da v2-periphery log receipt'lerini parse edin. Buradan işlem imzalarnı (transaction signatures) ayıklayıp cüzdanların geçmiş ROI'sini doğrudan MariaDB gibi yerel bir indeksleme veri tabanında hesaplayabilirsiniz.

İşlemi ağa broadcast etmeden geçerliliğini test etmek için hedef DEX router adresine; from, to, data ve net value değerlerini içeren özel bir imzasız (unsigned) transaction payload'u ile eth_call atın. Eğer kontratta dışarı transferleri engelleyen kötü niyetli bir honeypot mantığı varsa, EVM durum yürütmesi (state execution) doğrudan düşük seviyeli bir execution revert hatası fırlatır. Böylece scriptiniz, boşuna gas fee harcamadan önce varlığı anında işaretleyip kara listeye alabilir.

Layer 2 ağlarının mimarisinde, Sequencer tasarımlarından dolayı halka açık ve incelenebilir bir mempool kesinlikle yoktur. Bu yüzden geleneksel frontrunning ve işlem sıralama (transaction sequencing) stratejileri teknik olarak imkansız hale gelir. Bu ağlardaki işlemler, katı bir FCFS (ilk gelen ilk işlenir) mekanizmasına göre kronolojik olarak sıralanır. Yani copy-trade yürütme hızınız tamamen özel RPC node gecikmenize (latency), yerel işlem yayılma sürenize (propagation time) ve priority gas fee'yi doğrudan sequencer block builder'ına göre optimize etmenize bağlıdır.
Sergey Zhukov

Senior Back-End Engineer and Technical Architect with 8 years of experience engineering high-performance distributed systems, low-latency trading infrastructure, and complex Web3 data pipelines.

Verification & Professional Profiles: Linkedin Profile

...

Yorumunuzu paylaşın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar işaretlendi *