1use alloy::{
2 network::{Ethereum, TransactionBuilder as _},
3 primitives::{Address, U256},
4 providers::{PendingTransactionBuilder, Provider},
5 rpc::types::TransactionRequest,
6};
7use anyhow::Result;
8use hotshot_contract_adapter::{
9 evm::DecodeRevert as _,
10 sol_types::EspToken::{self, EspTokenErrors},
11};
12
13pub async fn send_eth(
14 provider: impl Provider,
15 to: Address,
16 amount: U256,
17) -> Result<PendingTransactionBuilder<Ethereum>> {
18 tracing::info!("fund address {to} with {amount} ETH");
19 let tx = TransactionRequest::default().with_to(to).with_value(amount);
20 Ok(provider.send_transaction(tx).await?)
21}
22
23pub async fn send_esp(
24 provider: impl Provider,
25 token_address: Address,
26 to: Address,
27 amount: U256,
28) -> Result<PendingTransactionBuilder<Ethereum>> {
29 tracing::info!("transfer {amount} ESP to {to}");
30 let token = EspToken::new(token_address, provider);
31 token
32 .transfer(to, amount)
33 .send()
34 .await
35 .maybe_decode_revert::<EspTokenErrors>()
36}