En este tutorial, revisaremos cómo usar Flashbots para obtener Miner / Maximum Extractable Value, también conocido como MEV. Miner / Maximum Extractable Value o MEV representa la cantidad de dinero que se puede extraer de la blockchain reordenando, insertando o censurando transacciones. Diferentes implementaciones de Defi filtran MEV cuando los usuarios envían transacciones a sus sistemas. Como resultado, los operadores de bots y los mineros obtienen ganancias al buscar y capturar este valor filtrado.
Este proceso de extracción de ingresos en el blockchain ha estado ocurriendo durante años. En enero de 2020 la organización Flashbots creó un Explorador de sitios web MEV para rastrear transacciones MEV. Luego, en el verano de 2020, los nuevos proyectos de Defi crearon muchas nuevas oportunidades de arbitraje. Debido a estas nuevas oportunidades, los valores MEV comenzaron a dispararse como se ve en el gráfico de valor extraído diario en el Explorador de sitios web MEV. Esto tuvo muchas consecuencias negativas en Ethereum, desde altas tarifas de gas hasta transacciones revertidas que fueron el resultado de la congestión de la cadena.
La introducción a Flashbots
Como resultado de la congestión de la cadena de bloques, la organización Flashbots ideó un proceso que permitió a todos los participantes (usuarios, operadores de bots y mineros) beneficiarse de las oportunidades MEV. Flashbots diseñó e implementó un sistema para permitir que los operadores de bots envíen transacciones directamente a los mineros. Luego, los mineros incluirían estas transacciones en el siguiente bloque si es rentable para ellos. Este proceso dio como resultado que los usuarios obtuvieran una ejecución garantizada y que los mineros recibieran tarifas adicionales por incluir estas transacciones en bloques.
Hay varios casos de uso que resuelve Flashbots. Son:
- Usuarios y operadores de bots que buscan un acceso rápido al espacio de bloque sin preocuparse por transacciones sobrevaloradas o revertidas
- Usuarios y operadores de bots que buscan protección de francotiradores, ejecución frontal, ejecución trasera o sándwich para sus transacciones
- Dapps y protocolos que necesitan resolver casos de usos avanzados. Por ejemplo, enviando una cesta de transacciones a la vez para ejecución atómica.
Flashbots es una mejora del protocolo Ethereum que agrega una capa de red para que los usuarios envíen transacciones privadas a los mineros. Estas transacciones no están en el mempool, por lo que no pueden ser vistas por otros participantes. Los usuarios envían transacciones a un grupo de transacciones privadas más una tarifa y los mineros incluirán estos mensajes en el siguiente bloque.
Para que este proceso de subasta funcione, el equipo de Flashbot creó un parche de software de cliente Geth llamado MEV-Geth. Además, hay un relé MEV que actúa como un relé de paquete de transacciones. La combinación de estas dos mejoras previene guerras de gas, transacciones fallidas y elimina vulnerabilidades de ejecución frontal.
El siguiente diagrama es una representación de los usuarios que interactúan con los mineros que operan MEV-Geth. Tenga en cuenta que todos los mineros y buscadores no usar MEV-Geth.
¿Quién usa Flashbots?
Los buscadores y los mineros participan en subastas Flashbot. En las secciones a continuación, revisaremos cómo usar Flashbots como buscador y minero.
Buscadores
Los buscadores envían paquetes de transacciones directamente a los retransmisores en lugar de a través de la red tradicional p2p de Ethereum. Los usuarios que envían transacciones directamente al relé de Flashbots son privados. Estas transacciones no pueden ser vistas por el resto de la red. Los buscadores pueden pagar por este servicio aumentando el gas o una transferencia ETH directa a la dirección de los mineros (que está condicionada al procesamiento de la transacción).
Para acceder a la red de Flashbots, las búsquedas necesitan:
- Una clave privada. Usado para identificación
- Una forma de interactuar con la red Flashbots. Flashbots ejecuta un relé que enviará paquetes a relay.flashbots.net.
- Un «paquete» para sus transacciones
A continuación se muestra una muestra Pitón código sobre cómo configurar un proveedor de Flashbots, obtener una clave privada y enviar un paquete de transacciones en Web3.py. El siguiente código se puede encontrar en el Documentación de Flashbots. Este proceso también se puede lograr utilizando JavaScript. Para obtener más información sobre Flashbot, visite su repositorio de Github.
from eth_account.signers.local import LocalAccount
from web3.middleware import construct_sign_and_send_raw_middleware
from flashbots import flashbot
from flashbots.types import SignTx
from eth_account.account import Account
from web3 import Web3, HTTPProvider
from web3.types import TxParams, Wei
import os
"""
In this example we setup a transaction for 0.1 eth with a gasprice of 1
From here we will use Flashbots to pass a bundle with the needed content
"""
# ETH_ACCOUNT_SIGNATURE is an Ethereum private key that does NOT store funds and is NOT your bot's primary key.
#This is an identifying key for signing payloads to establish reputation and whitelisting
ETH_ACCOUNT_SIGNATURE: LocalAccount = Account.from_key(os.environ.get("ETH_SIGNATURE_KEY"))
ETH_ACCOUNT_FROM: LocalAccount = Account.from_key(os.environ.get("ETH_PRIVATE_FROM"))
ETH_ACCOUNT_TO: LocalAccount = Account.from_key(os.environ.get("ETH_PRIVATE_TO"))
print("Connecting to RPC")
# Create a web3 object with a standard json rpc provider, such as Infura, Alchemy, or your own node.
w3 = Web3(HTTPProvider("http://localhost:8545"))
w3.middleware_onion.add(construct_sign_and_send_raw_middleware(ETH_ACCOUNT_FROM))
# Flashbots providers require both a standard provider and ETH_ACCOUNT_SIGNATURE (to establish reputation)
flashbot(w3, ETH_ACCOUNT_SIGNATURE)
print(f"From account {ETH_ACCOUNT_FROM.address}: {w3.eth.get_balance(ETH_ACCOUNT_FROM.address)}")
print(f"To account {ETH_ACCOUNT_TO.address}: {w3.eth.get_balance(ETH_ACCOUNT_TO.address)}")
# Setting up an transaction with 1 in gasPrice where we are trying to send
print("Sending request")
params: TxParams = {
"from": ETH_ACCOUNT_FROM.address,
"to": ETH_ACCOUNT_TO.address,
"value": w3.toWei("1.0", "gwei"),
"gasPrice": w3.toWei("1.0", "gwei"),
"nonce": w3.eth.get_transaction_count(ETH_ACCOUNT_FROM.address),
}
try:
tx = w3.eth.send_transaction(
params,
)
print("Request sent! Waiting for receipt")
except ValueError as e:
# Skipping if TX already is added and pending
if "replacement transaction underpriced" in e.args[0]["message"]:
print("Have TX in pool we can use for the example")
else:
raise
print("Setting up flashbots request")
nonce = w3.eth.get_transaction_count(ETH_ACCOUNT_FROM.address)
bribe = w3.toWei("0.01", "ether")
signed_tx: SignTx = {
"to": ETH_ACCOUNT_TO.address,
"value": bribe,
"nonce": nonce + 1,
"gasPrice": 0,
"gas": 25000,
}
signed_transaction = ETH_ACCOUNT_TO.sign_transaction(signed_tx)
bundle = [
# some transaction
{
"signer": ETH_ACCOUNT_FROM,
"transaction": {
"to": ETH_ACCOUNT_TO.address,
"value": Wei(123),
"nonce": nonce,
"gasPrice": 0,
},
},
# the bribe
{
"signed_transaction": signed_transaction.rawTransaction,
},
]
block = w3.eth.block_number
result = w3.flashbots.send_bundle(bundle, target_block_number=w3.eth.blockNumber + 3)
result.wait()
receipts = result.receipts()
block_number = receipts[0].blockNumber
# the miner has received the amount expected
bal_before = w3.eth.get_balance(ETH_ACCOUNT_FROM.address, block_number - 1)
bal_after = w3.eth.get_balance(ETH_ACCOUNT_FROM.address, block_number)
profit = bal_after - bal_before - w3.toWei("2", "ether") # sub block reward
print("Balance before", bal_before)
print("Balance after", bal_after)
assert profit == bribe
# the tx is successful
print(w3.eth.get_balance(ETH_ACCOUNT_TO.address))
Además, algunas otras muestras interesantes en el repositorio de Flashbots son:
Mineros y operadores de piscinas
Los mineros y los operadores de piscinas pueden seguir instrucciones aquí para comenzar a ejecutar MEV-Geth. Las instrucciones en su guía de inicio rápido le ayudarán a aprender cómo construir y lanzar MEV-Geth, implementar MEV-Geth sobre una versión personalizada de Geth y más.
Posteriormente el mev-geth-demo El repositorio le permitirá ejecutar un nodo MEV-Geth y muestra cómo un minero puede beneficiarse de él al aceptar paquetes MEV directamente o con transacciones adicionales.
Además, si necesita ayuda para configurar MEV-Get, visite el Servidor Flashbots Discord.
Siguiente – Cómo buscar oportunidades MEV
Si quiere puede hacernos una donación por el trabajo que hacemos, lo apreciaremos mucho.
Direcciones de Billetera:
- BTC: 14xsuQRtT3Abek4zgDWZxJXs9VRdwxyPUS
- USDT: TQmV9FyrcpeaZMro3M1yeEHnNjv7xKZDNe
- BNB: 0x2fdb9034507b6d505d351a6f59d877040d0edb0f
- DOGE: D5SZesmFQGYVkE5trYYLF8hNPBgXgYcmrx
También puede seguirnos en nuestras Redes sociales para mantenerse al tanto de los últimos post de la web:
- Telegram
Disclaimer: En Cryptoshitcompra.com no nos hacemos responsables de ninguna inversión de ningún visitante, nosotros simplemente damos información sobre Tokens, juegos NFT y criptomonedas, no recomendamos inversiones