6 releases
0.9.2 | Jan 9, 2025 |
---|---|
0.1.4 | Nov 22, 2024 |
0.1.3 | Oct 2, 2024 |
0.1.2 | Sep 20, 2024 |
#3 in #alloy
159 downloads per month
45KB
724 lines
Alloy Multicall
Easily send multicall transactions using Alloy.
Installation
Add alloy-multicall
to your Cargo.toml
.
alloy-multicall = "0.9.2"
Example
use alloy::{
dyn_abi::DynSolValue,
primitives::{address, U256},
sol,
sol_types::JsonAbiExt as _,
};
use alloy_multicall::Multicall;
sol! {
#[derive(Debug)]
#[sol(abi)]
function getAmountsOut(uint amountIn, address[] memory path)
public
view
virtual
override
returns (uint[] memory amounts);
}
#[tokio::main]
async fn main() {
tracing_subscriber::fmt::init();
let rpc_url = "https://rpc.ankr.com/eth".parse().unwrap();
let provider = alloy::providers::ProviderBuilder::new().on_http(rpc_url);
let uniswap_v2 = address!("7a250d5630b4cf539739df2c5dacb4c659f2488d");
let mut multicall = Multicall::with_provider_chain_id(&provider).await.unwrap();
let amounts_out = getAmountsOutCall::abi();
multicall.add_call(
uniswap_v2,
&amounts_out,
&[
DynSolValue::from(U256::from(1000000000000000000_u128)),
DynSolValue::Array(vec![
address!("C02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2").into(),
address!("6982508145454Ce325dDbE47a25d4ec3d2311933").into(),
]),
],
false,
);
let results = multicall.call().await.unwrap();
println!("{:?}", results);
}
Credits
Dependencies
~40MB
~734K SLoC