inkpad_cli/
tx.rs

1//! Transaction arguments
2use crate::{util::decode_addr, Result};
3use inkpad_sandbox::Transaction;
4use structopt::StructOpt;
5
6/// Transaction arguments
7#[derive(Debug, StructOpt)]
8pub struct Tx {
9    /// Calling method
10    pub method: String,
11    /// Contract caller
12    #[structopt(long)]
13    pub caller: Option<String>,
14    /// Contract callee
15    #[structopt(long)]
16    pub address: Option<String>,
17    /// contract balance
18    #[structopt(long, short)]
19    pub balance: Option<u64>,
20    /// transferred value
21    #[structopt(long, short)]
22    pub value_transferred: Option<u64>,
23    /// current time
24    #[structopt(long, short)]
25    pub now: Option<String>,
26    /// minimum balance
27    #[structopt(long, short)]
28    pub minimum_balance: Option<u64>,
29    /// Arguments
30    #[structopt(long, short, name = "string,")]
31    pub args: Vec<String>,
32}
33
34impl Tx {
35    /// convert to `inkpad_sandbox::Transaction`
36    pub fn tx(&self) -> Result<Transaction> {
37        Ok(Transaction {
38            caller: if let Some(caller) = self.caller.clone() {
39                decode_addr(&caller)?
40            } else {
41                Default::default()
42            },
43            address: if let Some(addr) = self.address.clone() {
44                decode_addr(&addr)?
45            } else {
46                Default::default()
47            },
48            balance: self.balance.unwrap_or(0),
49            value_transferred: self.value_transferred.unwrap_or(0),
50            // TODO: a format of time
51            now: Default::default(),
52            minimum_balance: self.minimum_balance.unwrap_or_default(),
53        })
54    }
55}