До сих пор я понимаю только, что пакеты флеш-ботов — это подписанные необработанные транзакции, одна из которых является взяткой майнеру за плату за майнинг, но:
block.coinbase
кто ее использует, или она действительна только для одного майнера? Если да, то как мне создавать и подписывать такие сделки специального формата?block.coinbase
которую можно было бы добыть связку в разумные сроки? Я спрашиваю об этом в общем и без учета конкуренции, потому что я полагаю, что майнеры не примут транзакцию, которая не платит больше, чем цена газа, и что цена, которую нужно заплатить, не является фиксированной в том смысле, в каком количество потребляемого газа все еще имеет значение. .Мой интерес заключается не в том, чтобы создавать пакеты транзакций, поскольку в интересующем меня случае нужно выполнить одну транзакцию, а в том, чтобы эта транзакция добывалась первой, поскольку транзакции flashbot добываются в начале блока (оперативные транзакции по-прежнему с помощью мемпула). И с той точки зрения, что флешботов пока никто не использует.
Хотя я понимаю, что мне нужно создать связку хотя бы из 2-х транзакций, так как одна из них должна быть для майнера.
Официальное руководство по поиску 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
. Но каждый пример, который я видел, включая ваш, требует запуска полного узла.eth_sendBundle
, и мне не известны какие-либо службы с одним узлом, такие как Infura, которые позволяют его использовать.eth_sendBundle
вызывается под капотом в провайдере флэш-ботов ethersjs, внутри sendBundle
. Он связывается с реле флэш-ботов. Вам определенно не нужно запускать свой собственный узел. Возможно, этот демонстрационный пример поможет: github.com/flashbots/ethers-provider-flashbots-bundle/blob/…
Герман Кюбер
пользователь 2284570