dg_xch_cli_lib/simulator/
chain_user.rs1use crate::simulator::Simulator;
2use crate::wallets::memory_wallet::MemoryWallet;
3use crate::wallets::Wallet;
4use dg_xch_clients::api::full_node::FullnodeAPI;
5use log::info;
6use std::io::Error;
7use std::sync::Arc;
8
9pub struct ChainUser<'a> {
10 pub simulator: &'a Simulator<'a>,
11 pub wallet: Arc<MemoryWallet>,
12 pub name: String,
13}
14impl<'a> ChainUser<'a> {
15 pub async fn refresh_coins(&self) -> Result<(), Error> {
16 self.wallet.sync().await.map(|_| ())
17 }
18 pub async fn farm_coins(&self, num_coins: i64) -> Result<(), Error> {
19 self.simulator
20 .farm_coins(self.wallet.get_puzzle_hash(false).await?, num_coins, true)
21 .await?;
22 self.simulator.next_blocks(1, false).await?;
23 info!("Syncing Coins After Farming");
24 self.refresh_coins().await
25 }
26 pub async fn send_xch(&self, mojos: u64, receiver: &ChainUser<'a>) -> Result<(), Error> {
27 let transaction = self
28 .wallet
29 .generate_simple_signed_transaction(
30 mojos,
31 0,
32 receiver.wallet.get_puzzle_hash(false).await?,
33 )
34 .await?;
35 self.simulator
36 .client()
37 .push_tx(&transaction.spend_bundle.unwrap())
38 .await?;
39 self.simulator.next_blocks(1, false).await?;
40 self.refresh_coins().await?;
41 receiver.refresh_coins().await
42 }
43}