dg_xch_cli_lib/simulator/
chain_user.rs

1use 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}