pub mod markets;
pub mod orders;
pub mod redeem;
pub mod tokens;
pub mod vault;
use alloy::network::Ethereum;
use alloy::providers::{DynProvider, PendingTransactionBuilder, Provider};
use alloy::rpc::types::TransactionRequest;
use std::sync::Arc;
use tokio::sync::Mutex;
use crate::error::{Result, StrikeError};
use crate::nonce::NonceSender;
pub(crate) type PendingTx = PendingTransactionBuilder<Ethereum>;
pub(crate) async fn send_tx(
provider: &DynProvider,
nonce_sender: &Option<Arc<Mutex<NonceSender>>>,
tx: TransactionRequest,
) -> Result<PendingTx> {
if let Some(ns) = nonce_sender {
ns.lock().await.send(tx).await.map_err(StrikeError::from)
} else {
provider
.send_transaction(tx)
.await
.map_err(|e| StrikeError::Contract(e.to_string()))
}
}