Как создавать и отправлять транзакции Flashbot?

До сих пор я понимаю только, что пакеты флеш-ботов — это подписанные необработанные транзакции, одна из которых является взяткой майнеру за плату за майнинг, но:

  • Является ли подкупная транзакция особенной в том смысле, что она действительна для всех, block.coinbaseкто ее использует, или она действительна только для одного майнера? Если да, то как мне создавать и подписывать такие сделки специального формата?
  • Для определения цены газа для стандартных/мемпул транзакций есть https://ethgasstation.info/ , но как рассчитать минимальную сумму отправляемой взятки, на block.coinbaseкоторую можно было бы добыть связку в разумные сроки? Я спрашиваю об этом в общем и без учета конкуренции, потому что я полагаю, что майнеры не примут транзакцию, которая не платит больше, чем цена газа, и что цена, которую нужно заплатить, не является фиксированной в том смысле, в каком количество потребляемого газа все еще имеет значение. .
  • Поскольку я не запускаю свой собственный узел , как я могу создавать такие пакеты транзакций из моего подписанного списка необработанных транзакций и как отправлять их в ретранслятор flashbots, не запуская свой собственный узел, когда они встроены в правильный двоичный формат ? Что-то, чего не объясняет https://github.com/flashbots/pm/blob/main/guides/searcher-onboarding.md
  • Если я создам свой собственный пул для майнинга, как я могу получить транзакцию flashbot? Есть ли место, где мне нужно подписаться?

Мой интерес заключается не в том, чтобы создавать пакеты транзакций, поскольку в интересующем меня случае нужно выполнить одну транзакцию, а в том, чтобы эта транзакция добывалась первой, поскольку транзакции flashbot добываются в начале блока (оперативные транзакции по-прежнему с помощью мемпула). И с той точки зрения, что флешботов пока никто не использует.
Хотя я понимаю, что мне нужно создать связку хотя бы из 2-х транзакций, так как одна из них должна быть для майнера.

Я пытаюсь сериализовать исходящий tx из мемпула в шестнадцатеричный, но не могу. Какую библиотеку вы используете для этой цели?
@MarianoGermanVillarrealKube они уже сериализованы. Вам нужно получить необработанную транзакцию из мемпула.

Ответы (1)

Официальное руководство по поиску flashbots — хороший источник для начала работы.

  • block.coinbaseв Solidity относится к майнеру текущего блока. Вы можете использовать поставщика пакетов флеш-ботов ethers.js , чтобы связать свои транзакции с окончательным вызовом контракта Flashbots «CheckAndSend» . Таким образом, майнер будет вознагражден только в том случае, если предыдущие транзакции вашего пакета были успешными. (Майнер не будет включать ваш пакет, если он не получит вознаграждение.)

  • Взятка флеш-ботов не зависит от текущей цены на газ. Вы конкурируете со взятками других искателей flashbot. В настоящее время MEV geth позволяет включать только один пакет flashbots в блок (но это может скоро измениться). Вообще говоря, чем меньше альфа, тем выше взятка. Это означает, что если вы собираетесь использовать широко распространенный простой арбитражный код, рассмотрите возможность взятки с 99% прибыли от арбитража, чтобы ваши пакеты вообще добывались (надеюсь).

  • Если у вас нет частных подключений к майнерам со значительным хешрейтом, вы, вероятно, захотите использовать (и доверять) официальному ретранслятору flashbots, который также используется в пакете ethers.js flashbots. Проверьте этот пример из его 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 bribeЯ имел в виду, какой должна быть сумма взятки, если нет незавершенных транзакций flashbot? это не может быть дешевле, чем платить за газ, верно? Я отредактировал свой вопрос, чтобы отразить это.
Спасибо, но я знаю, что это block.coinbaseтакое. Но мой вопрос в том, как я должен создать взятку в этом случае, поскольку, насколько я понимаю, она должна быть действительна для всех block.coinbase.
you'll probably want to use (and trust) the official flashbots relay. Но каждый пример, который я видел, включая ваш, требует запуска полного узла.
Отвечая на ваши комментарии: 1) Минимальная взятка должна быть равна использованному газу, умноженному на цену газа, позволяющую включить его в соответствующий блок. 2) Я не понимаю, что вы имеете в виду. Может быть, вы можете перефразировать свой вопрос с более подробной информацией. 3) Нет, для этого не требуется запуск полного узла. Почему ты так думаешь?
Кажется, теперь я понял, вы имеете в виду, что дачу взятки лучше всего делать с помощью контракта?
А по поводу цены газа за взятку, равна ли она транзакциям мемпула, когда нет транзакций конкурирующего исследователя? Что касается последнего пункта, ваш пример подразумевает использованиеeth_sendBundle , и мне не известны какие-либо службы с одним узлом, такие как Infura, которые позволяют его использовать.
Да, ни один рациональный майнер MEV не стал бы включать ваш пакет флеш-ботов, если бы он получал больше прибыли, включив вместо этого обычные транзакции мемпула. Вы можете прочитать подробности о грядущих изменениях в v0.2 здесь: hackmd.io/@flashbots/core-v2-proposal#Revamped-auction-pricing
eth_sendBundleвызывается под капотом в провайдере флэш-ботов ethersjs, внутри sendBundle. Он связывается с реле флэш-ботов. Вам определенно не нужно запускать свой собственный узел. Возможно, этот демонстрационный пример поможет: github.com/flashbots/ethers-provider-flashbots-bundle/blob/…
Тогда вопрос в том, как использовать такую ​​конечную точку без npm.