Naciśnij ESC, aby zamknąć

Napisz bota Anti-MEV Stealth Swap: Kod i Guide Flashbots

Na blogu Akademii EXMON publikowaliśmy już artykuł o tym, jak boty MEV okradają zwykłych użytkowników w „ciemnym lesie” mempoola. Dziś przechodzimy do konkretów i kładziemy fundament pod nasze własne narzędzie. Nasz cel: nauczyć się wysyłać transakcje z pominięciem publicznego mempoola, prosto do walidatorów.

1. Koncepcja Bundles: Dlaczego to bezpieczne?

Zazwyczaj Twoja transakcja po wysłaniu trafia do mempoola — publicznej poczekalni. Tam widzą ją wszyscy: od zwykłych węzłów po drapieżne boty MEV. Te ostatnie analizują ją i jeśli węszą zysk (np. przy dużym swapie), robią tzw. „ataki sandwich”.

Flashbots oferuje alternatywną drogę — Bundles (Pakiety). Są to paczki składające się z jednej lub kilku transakcji, które są przekazywane bezpośrednio walidatorom przez prywatny serwer typu relay.

Kluczowe zalety bundli:

  • Niewidzialność: Transakcja nie pojawia się w mempoolu. Świat dowiaduje się o niej dopiero wtedy, gdy zostanie już dołączona do bloku. Boty nie mają czasu na reakcję.
  • Atomiczność: Albo przechodzą wszystkie transakcje w pakiecie, albo żadna. Eliminuje to ryzyko, że Twój trade zostanie zrealizowany częściowo lub na fatalnych warunkach.
  • Brak opłat za porażkę: Jeśli bundle nie wejdzie do bloku (np. przez zbyt niski gas fee), nie płacisz prowizji za nieudaną transakcję (Revert).

 

2. Przygotowanie infrastruktury

Do pracy będziemy potrzebować dwóch rzeczy: dostępu do noda Ethereum i dwóch kluczy prywatnych.

Po co aż dwa klucze?

  • SENDER_PRIVATE_KEY: Twój główny portfel, na którym trzymasz środki na wymianę i opłacenie gazu.
  • FLASHBOTS_AUTH_KEY: To Twój „klucz identyfikacyjny”. Powinien należeć do nowego, całkowicie pustego portfela. Flashbots używa go do budowania Twojej „reputacji” jako nadawcy. Jeśli będziesz spamować słabymi bundlami, ten klucz trafi na czarną listę, ale Twoja kasa na głównym portfelu zostanie bezpieczna.

Konfiguracja środowiska

Stwórz plik .env w głównym folderze projektu:

ETH_RPC_URL=https://eth-mainnet.g.alchemy.com/v2/TWÓJ_KLUCZ_API
SENDER_PRIVATE_KEY=twój_główny_klucz
FLASHBOTS_AUTH_KEY=twój_pusty_klucz_reputacji

 

3. Inicjalizacja Stealth-providera

Będziemy korzystać z TypeScripta, Ethers.js v6 i oficjalnej biblioteki Flashbots SDK.

Zainstaluj zależności: npm install ethers @flashbots/ethers-provider-bundle dotenv

Poniżej znajdziesz kod inicjalizujący nasze narzędzie:

import { ethers } from "ethers";
import { FlashbotsBundleProvider } from "@flashbots/ethers-provider-bundle";
import * as dotenv from "dotenv";
dotenv.config();

async function initStealthProvider() {
    // 1. Podpinamy się pod standardowy węzeł (Alchemy/Infura)
    const provider = new ethers.JsonRpcProvider(process.env.ETH_RPC_URL);

    // 2. Inicjalizujemy portfele
    const wallet = new ethers.Wallet(process.env.SENDER_PRIVATE_KEY!, provider);
    const authSigner = new ethers.Wallet(process.env.FLASHBOTS_AUTH_KEY!, provider);

    // 3. Tworzymy Flashbots-provider
    // To jest nasz prywatny tunel prosto do walidatorów
    const flashbotsProvider = await FlashbotsBundleProvider.create(
        provider, 
        authSigner,
        "https://relay.flashbots.net", // Adres relay dla mainnetu
        "mainnet"
    );

    return { wallet, flashbotsProvider, provider };
}

async function main() {
    try {
        const { wallet, flashbotsProvider } = await initStealthProvider();
        console.log("--- Stealth Infrastructure Ready ---");
        console.log(`Główny portfel: ${wallet.address}`);
        console.log(`Relay: https://relay.flashbots.net`);
    } catch (error) {
        console.error("Błąd inicjalizacji:", error);
    }
}

main();

 

Co nam to daje?

Na tym etapie postawiliśmy „bezpieczny kanał łączności”. Nie po prostu łączymy się z blockchainem – my autoryzujemy się w sieci Flashbots.

Ważny detal: Flashbots to w gruncie rzeczy aukcja. Żeby Twój bundle został wybrany przez walidatora, musi być dla niego bardziej opłacalny niż inne. W następnej części nauczymy się poprawnie liczyć prowizje i sformułujemy samą transakcję swapu przez Uniswap V3, której nie namierzy żaden bot-skaner.

W kolejnym artykule: Składamy Bundle, symulujemy transakcję i uczymy się omijać sprawdzanie salda.

Sying Yu

I am a blockchain developer specializing in building secure, scalable, and innovative decentralized solutions. My expertise covers smart contracts, payment systems, and integrating crypto with fiat to optimize financial workflows. I thrive on creating modern, efficient tools for the evolving digital economy....

Dodaj opinię

Twój adres e-mail nie zostanie opublikowany. Obowiązkowe pola są oznaczone*