4 个版本
0.2.1 | 2024年7月23日 |
---|---|
0.2.0 | 2024年7月12日 |
0.1.1 | 2024年6月23日 |
0.1.0 | 2024年6月23日 |
#2083 in 魔法豆
每月286次下载
24KB
499 代码行
Alloy MEV
使用 Alloy 轻松发送交易包。
安装
将 alloy-mev
添加到您的 Cargo.toml
。
alloy-mev = "0.2"
特性
MEV-Share
此包包含 MevShareProviderExt
扩展 trait。在其作用域内,它为基于 HTTP 传输的提供商添加了向 Flashbots 匹配器发送包的方法。
#[tokio::main]
async fn main() -> Result<()> {
dotenv().ok();
let eth_rpc = env::var("ETH_HTTP_RPC")?;
// This is your searcher identity
let bundle_signer = LocalSigner::random();
// This signs transactions
let tx_signer = EthereumWallet::from(LocalSigner::random());
// Build a provider with MEV
let provider = ProviderBuilder::new()
.with_recommended_fillers()
.signer(tx_signer.clone())
.on_http(eth_rpc.parse()?);
// Pay Vitalik using a MEV-Share bundle!
let tx = TransactionRequest::default()
.from(tx_signer.default_signer_address())
.to(Some(address!("d8dA6BF26964aF9D7eEd9e03E53415D37aA96045"))) // vitalik.eth
.value(U256::from(1000000000));
// Build a bundle...
let bundle = SendBundleRequest {
bundle_body: vec![provider.build_bundle_item(tx, false).await?],
inclusion: Inclusion::at_block(provider.get_block_number().await? + 1),
..Default::default()
};
// ... and send it!
let response = provider.send_mev_bundle(bundle, bundle_signer).await?;
println!("Bundle hash: {}", response.bundle_hash);
Ok(())
}
区块构建器
此包还包含 EthMevProviderExt
扩展 trait,它为基于 HTTP 传输的提供商添加了向区块构建器广播包的方法。
#[tokio::main]
async fn main() -> Result<()> {
dotenv().ok();
let eth_rpc = env::var("ETH_HTTP_RPC").unwrap();
let bundle_signer = PrivateKeySigner::random();
let tx_signer = EthereumWallet::new(signer.clone());
let provider = ProviderBuilder::new()
.with_recommended_fillers()
.wallet(tx_signer.clone())
.on_http(eth_rpc.parse().unwrap());
// Select which builders the bundle will be sent to
let endpoints = provider
.endpoints_builder()
.beaverbuild()
.titan(BundleSigner::flashbots(bundle_signer.clone()))
.build();
let block_number: u64 = provider.get_block_number().await.unwrap().into();
// Pay Vitalik using a MEV-Share bundle!
let tx = TransactionRequest::default()
.from(tx_signer.default_signer_address())
.to(Some(address!("d8dA6BF26964aF9D7eEd9e03E53415D37aA96045"))) // vitalik.eth
.value(U256::from(1000000000));
// Broadcast the bundle to all builders setup above!
let responses = provider
.send_eth_bundle(
EthSendBundle {
txs: vec![provider.encode_request(tx)],
block_number: block_number + 1,
min_timestamp: None,
max_timestamp: None,
reverting_tx_hashes: vec![],
replacement_uuid: None,
},
&endpoints,
)
.await;
println!("{responses:#?}");
}
鸣谢
依赖
~27–40MB
~771K SLoC