staking_cli/
funding.rs

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}