use crate::config::ZingoConfig;
use crate::get_base_address_macro;
use crate::testutils::lightclient::from_inputs;
use crate::{lightclient::LightClient, wallet::LightWallet};
#[allow(async_fn_in_trait)]
#[allow(opaque_hidden_inferred_bound)]
pub trait ConductChain {
async fn setup() -> Self;
fn lightserver_uri(&self) -> Option<http::Uri>;
async fn create_faucet(&mut self) -> LightClient;
fn zingo_config(&mut self) -> crate::config::ZingoConfig;
fn create_client(&mut self) -> LightClient {
let config = self.zingo_config();
LightClient::new(config, 0.into(), false).unwrap()
}
fn load_client(&mut self, config: ZingoConfig, data: &[u8]) -> LightClient {
LightClient::create_from_wallet(
LightWallet::read(data, config.chain).unwrap(),
config,
false,
)
.unwrap()
}
async fn bump_chain(&mut self);
async fn fund_client_orchard(&mut self, value: u64) -> LightClient {
let mut faucet = self.create_faucet().await;
let mut recipient = self.create_client();
self.bump_chain().await;
faucet.sync_and_await().await.unwrap();
from_inputs::quick_send(
&mut faucet,
vec![(
(get_base_address_macro!(recipient, "unified")).as_str(),
value,
None,
)],
)
.await
.unwrap();
self.bump_chain().await;
recipient.sync_and_await().await.unwrap();
recipient
}
}