Wie erstelle und sende ich Flashbot-Transaktionen?

Bisher verstehe ich nur, dass Flashbot-Bundles signierte Rohtransaktionen sind, von denen eine eine Bestechung des Miners für die Mining-Gebühr ist, aber:

  • Ist die Bestechungstransaktion etwas Besonderes in der Art, wie sie für alle block.coinbaseverwendeten gilt, oder gilt sie nur für einen einzelnen Miner? Wenn ja, wie erstelle und unterschreibe ich solche Bestechungstransaktionen in einem speziellen Format?
  • Um den Gaspreis für Standard-/Mempool-Transaktionen zu bestimmen, gibt es https://ethgasstation.info/ , aber wie berechnet man den Mindestbetrag für das zu sendende Bestechungsgeld, block.coinbaseder es ermöglichen würde, das Bündel in einem angemessenen Zeitrahmen abzubauen? Ich frage dies allgemein und ohne den Wettbewerb zu berücksichtigen, weil ich mir vorstelle, dass Bergleute keine Transaktionen akzeptieren werden, die nicht mehr als den Gaspreis zahlen, und dass der zu zahlende Preis nicht pauschal ist, da die verbrauchte Gasmenge immer noch eine Rolle spielt .
  • Da ich keinen eigenen Knoten betreibe , wie kann ich solche Transaktionsbündel aus meiner signierten Rohtransaktionsliste erstellen und wie kann ich sie an das Flashbots-Relay senden, ohne meinen eigenen Knoten auszuführen, sobald sie im richtigen Binärformat erstellt wurden ? Etwas, das von https://github.com/flashbots/pm/blob/main/guides/searcher-onboarding.md nicht erklärt wird
  • Wenn ich meinen eigenen Mining-Pool erstelle, wie kann ich Flashbot-Transaktionen erhalten? Gibt es einen Ort, an dem ich mich anmelden muss?

Mein Interesse besteht hier nicht darin, Transaktionspakete zu erstellen, da in dem Fall, an dem ich interessiert bin, eine einzelne Transaktion durchgeführt werden muss, sondern dass diese Transaktion zuerst abgebaut wird, da Flashbot-Transaktionen am Anfang des Blocks abgebaut werden (immer noch Frontrunning-Transaktionen). über den Mempool). Und mit dem Punkt, dass noch niemand Flashbots verwendet.
Obwohl ich verstehe, dass ich ein Bündel von mindestens 2 Transaktionen erstellen muss, da eine davon für den Miner sein muss.

Ich versuche, den austretenden TX von Mempool nach Hex zu serialisieren, aber ich kann nicht. Welche Bibliothek verwenden Sie für dieses Ziel?
@MarianoGermanVillarrealKube sie sind bereits serialisiert. Sie müssen rawtransaction aus dem Mempool abrufen.

Antworten (1)

Der offizielle Flashbots Searcher Onboarding Guide ist eine gute Quelle für den Einstieg.

  • block.coinbasein Solidity bezieht sich auf den Miner des aktuellen Blocks. Sie können den Flashbots-Paketanbieter ethers.js verwenden , um Ihre Transaktionen mit einem abschließenden Aufruf des Flashbots-Vertrags „CheckAndSend“ zu bündeln . Auf diese Weise wird der Miner nur belohnt, wenn die vorherigen Transaktionen Ihres Bündels erfolgreich waren. (Der Bergmann wird Ihr Bündel nicht enthalten, wenn er nicht belohnt wird.)

  • Die Flashbots Bestechung ist unabhängig vom aktuellen Benzinpreis. Sie konkurrieren mit den Bestechungsgeldern anderer Flashbot-Sucher. Derzeit erlaubt MEV Geth nur die Aufnahme eines Flashbots-Pakets pro Block (dies kann sich jedoch bald ändern). Generell gilt: Je weniger Alpha, desto höher die Bestechung. Das heißt, wenn Sie beabsichtigen, einen weit verbreiteten einfachen Arbitragecode zu verwenden , sollten Sie erwägen, mit 99 % des Arbitragegewinns zu bestechen, damit Ihre Bündel (hoffentlich) überhaupt abgebaut werden.

  • Sofern Sie keine privaten Verbindungen zu Bergleuten mit erheblicher Hash-Rate haben, sollten Sie wahrscheinlich das offizielle Flashbots-Relay verwenden (und ihm vertrauen), das auch im Flashbots-Bundle-Anbieter ethers.js verwendet wird. Überprüfen Sie dieses Beispiel aus seiner Readme:

// Using the map below ships two different bundles, targeting the next two blocks
const blockNumber = await provider.getBlockNumber()
const minTimestamp = (await provider.getBlock(blockNumber)).timestamp
const maxTimestamp = minTimestamp + 120
const bundlePromises = [blockNumber + 1, blockNumber + 2].map((targetBlockNumber) =>
  flashbotsProvider.sendBundle(
    [
      {
        signedTransaction: SIGNED_ORACLE_UPDATE_FROM_PENDING_POOL // serialized signed transaction hex
      },
      {
        signer: wallet, // ethers signer
        transaction: transaction // ethers populated transaction object
      }
    ],
    targetBlockNumber, // block number at which this bundle is valid
    {
      minTimestamp, // optional minimum timestamp at which this bundle is valid (inclusive)
      maxTimestamp, // optional maximum timestamp at which this bundle is valid (inclusive)
      revertingTxHashes: [tx1, tx2] // optional list of transaction hashes allowed to revert. Without specifying here, any revert invalidates the entire bundle.
    }
  )
)
Generally speaking, the less alpha, the higher the bribeIch meinte, wie hoch der Bestechungsbetrag sein sollte, wenn es keine ausstehenden Flashbot-Transaktionen gibt? Es kann nicht billiger sein, als mit Benzin zu bezahlen, oder? Ich habe meine Frage bearbeitet, um dies widerzuspiegeln.
Danke, aber ich weiß, was block.coinbaseist. Aber meine Frage ist, wie ich die Bestechung in diesem Punkt erstellen soll, da sie meines Wissens für alle gelten muss block.coinbase.
you'll probably want to use (and trust) the official flashbots relay. Aber jedes Beispiel, das ich gesehen habe, einschließlich Ihres, erfordert das Ausführen eines vollständigen Knotens.
Zu Ihren Kommentaren: 1) Das Mindestbestechungsgeld sollte das verbrauchte Gas multipliziert mit einem Gaspreis sein, der eine Aufnahme in den jeweiligen Block ermöglicht. 2) Ich verstehe nicht, was du meinst. Vielleicht kannst du deine Frage genauer formulieren. 3) Nein, es muss kein vollständiger Knoten ausgeführt werden. Warum denkst du das?
Ich glaube, ich verstehe jetzt, meinst du, dass die Zahlung des Bestechungsgeldes am besten über einen Vertrag erfolgt?
Und was den Gaspreis für die Bestechung betrifft, ist er gleich den Transaktionen des Mempools, wenn es keine Transaktionen des konkurrierenden Forschers gibt? Für den letzten Punkt impliziert Ihr Beispiel die Verwendung,eth_sendBundle und mir sind keine Einzelknotendienste wie Infura bekannt, die die Verwendung zulassen.
Ja, kein rationaler MEV-Miner würde Ihr Flashbots-Bundle einschließen, wenn er mehr davon profitieren würde, indem er stattdessen reguläre Mempool-Transaktionen einbezieht. Details zu den kommenden Änderungen in v0.2 können Sie hier nachlesen: hackmd.io/@flashbots/core-v2-proposal#Revamped-auction-pricing
eth_sendBundleheißt unter der Haube des ethersjs-Flashbots-Anbieters, inside sendBundle. Es kommuniziert mit den Relais des Flashbots. Sie müssen definitiv keinen eigenen Knoten betreiben. Vielleicht hilft dieses Demo-Beispiel: github.com/flashbots/ethers-provider-flashbots-bundle/blob/…
Dann stellt sich die Frage, wie man einen solchen Endpunkt ohne npm verwendet.