Compare commits

..

5 Commits

Author SHA1 Message Date
Alexander Kolotov
af6848f39c Merge branch 'mev-executor' into fake-mev-executor 2022-02-07 23:21:53 +03:00
Kirill Fedoseev
72e1242544 Refine configuration 2022-02-07 20:22:20 +04:00
Kirill Fedoseev
13be1a4b6a Update log level 2022-02-07 18:51:51 +04:00
Kirill Fedoseev
9586b78e10 Fake MEV execution for BSC 2022-02-02 22:46:51 +03:00
Kirill Fedoseev
3e84b01f3b Helper watcher process for MEV bundling 2022-01-31 23:13:36 +03:00
2 changed files with 26 additions and 4 deletions

View File

@@ -57,5 +57,8 @@ services:
ORACLE_MEV_FOREIGN_FLASHBOTS_AUTH_SIGNING_KEY: 82db7175932f4e6c8e45283b78b54fd5f195149378ec90d95b8fd0ec8bdadf1d
ORACLE_MEV_FOREIGN_BUNDLES_BLOCK_RANGE: '5'
ORACLE_FOREIGN_RPC_POLLING_INTERVAL: '70000' # time between sending different batches of MEV bundles (~= 5 blocks * 14 seconds)
FAKE_MEV_RELAY_TX_SENDING: 'true'
FAKE_MEV_RELAY_NO_EIP1559: 'true'
COMMON_FOREIGN_GAS_PRICE_FALLBACK: 100000000000 # will essentially replace block base fee
restart: unless-stopped
entrypoint: yarn mev:sender:foreign

View File

@@ -15,9 +15,13 @@ if (process.argv.length < 3) {
}
const config = require(path.join('../config/', process.argv[2]))
const GasPrice = require('./services/gasPrice')
const { web3, mevForeign, validatorAddress } = config
const FAKE_MEV_RELAY_TX_SENDING = process.env.FAKE_MEV_RELAY_TX_SENDING === 'true'
const FAKE_MEV_RELAY_NO_EIP1559 = process.env.FAKE_MEV_RELAY_NO_EIP1559 === 'true'
let chainId = 0
let flashbotsProvider
@@ -28,7 +32,9 @@ async function initialize() {
web3.currentProvider.urls.forEach(checkHttps(config.id))
chainId = await getChainId(web3)
flashbotsProvider = await mevForeign.getFlashbotsProvider(chainId)
if (!FAKE_MEV_RELAY_TX_SENDING) {
flashbotsProvider = await mevForeign.getFlashbotsProvider(chainId)
}
return runMain()
} catch (e) {
logger.error(e.message)
@@ -65,7 +71,13 @@ async function main() {
return
}
const { baseFeePerGas: pendingBaseFee, number: pendingBlockNumber } = await getBlock(web3, 'pending')
const { baseFeePerGas, number: pendingBlockNumber } = await getBlock(web3, 'pending')
let pendingBaseFee = baseFeePerGas
if (FAKE_MEV_RELAY_TX_SENDING && FAKE_MEV_RELAY_NO_EIP1559) {
// emulate baseFee with the current gasPrice
await GasPrice.start('foreign', web3, true)
pendingBaseFee = GasPrice.gasPriceOptions().gasPrice
}
const bestJob = pickBestJob(jobs, pendingBaseFee)
if (!bestJob) {
@@ -115,7 +127,7 @@ async function main() {
{ nonce, fromBlock: pendingBlockNumber, toBlock: pendingBlockNumber + mevForeign.bundlesPerIteration - 1 },
'Sending MEV bundles'
)
const txHash = await sendTx({
const opts = {
data: bestJob.data,
nonce,
value: bestJob.value,
@@ -134,7 +146,14 @@ async function main() {
toBlock: pendingBlockNumber + mevForeign.bundlesPerIteration - 1,
logger
}
})
}
if (FAKE_MEV_RELAY_TX_SENDING) {
if (FAKE_MEV_RELAY_NO_EIP1559) {
opts.gasPriceOptions = { gasPrice: pendingBaseFee }
}
delete opts.mevOptions
}
const txHash = await sendTx(opts)
jobLogger.info({ txHash }, `Tx generated ${txHash} for event Tx ${bestJob.transactionReference}`)