ethers-rs/ethers-middleware/tests/it/gas_escalator.rs

42 lines
1.6 KiB
Rust

use ethers_core::{types::*, utils::Anvil};
use ethers_middleware::{
gas_escalator::{Frequency, GasEscalatorMiddleware, GeometricGasPrice},
MiddlewareBuilder,
};
use ethers_providers::{Http, Middleware, Provider};
use ethers_signers::{LocalWallet, Signer};
#[tokio::test]
#[ignore]
async fn gas_escalator() {
let anvil = Anvil::new().block_time(2u64).spawn();
let chain_id = anvil.chain_id();
let provider = Provider::<Http>::try_from(anvil.endpoint()).unwrap();
// wrap with signer
let wallet: LocalWallet = anvil.keys().first().unwrap().clone().into();
let wallet = wallet.with_chain_id(chain_id);
let address = wallet.address();
let provider = provider.with_signer(wallet);
// wrap with escalator
let escalator = GeometricGasPrice::new(5.0, 10u64, Some(2_000_000_000_000u64));
let provider = GasEscalatorMiddleware::new(provider, escalator, Frequency::Duration(300));
let nonce = provider.get_transaction_count(address, None).await.unwrap();
// 1 gwei default base fee
let gas_price = U256::from(1_000_000_000_u64);
let tx = TransactionRequest::pay(Address::zero(), 1u64)
.gas_price(gas_price)
.nonce(nonce)
.chain_id(chain_id);
eprintln!("sending");
let pending = provider.send_transaction(tx, None).await.expect("could not send");
eprintln!("waiting");
let receipt = pending.await.expect("reverted").expect("dropped");
assert_eq!(receipt.from, address);
assert_eq!(receipt.to, Some(Address::zero()));
assert!(receipt.effective_gas_price.unwrap() > gas_price * 2, "{receipt:?}");
}