we_cdk/macros/
tx.rs

1/// Get the number of attached payments in the transaction
2///
3/// # Result
4/// The result of execution is `i32` number
5///
6/// # Usage
7/// ```
8/// use we_cdk::*;
9///
10/// #[action]
11/// fn _constructor() {
12///     let number_payments: Integer = get_tx_payments!();
13/// }
14/// ```
15#[macro_export]
16macro_rules! get_tx_payments {
17    () => {{
18        let (error, value) = wevm::v1::bindings::get_payments();
19        error!(error);
20        value
21    }};
22}
23
24/// Get the `asset_id` or `amount` of the attached payment in the transaction
25///
26/// # Param
27/// The function expects the order number of the attached payment as input
28///
29/// # Result
30/// The result of execution is `&[u8]` for `asset_id` and `i64` for `amount`
31///
32/// # Usage
33/// ```
34/// use we_cdk::*;
35///
36/// #[action]
37/// fn _constructor() {
38///     let payment: Payment = get_tx_payment!(0);
39///     let asset_id = payment.0;
40///     let amount = payment.1;
41/// }
42/// ```
43#[macro_export]
44macro_rules! get_tx_payment {
45    ($number:expr) => {{
46        let asset_id = {
47            let (error, ptr, len) = wevm::v1::bindings::get_payment_asset_id($number);
48            error!(error);
49            core::slice::from_raw_parts(ptr, len)
50        };
51
52        let amount = {
53            let (error, value) = wevm::v1::bindings::get_payment_amount($number);
54            error!(error);
55            value
56        };
57        (asset_id, amount)
58    }};
59}
60
61/// Get tx fields
62///
63/// # Usage
64/// ```
65/// use we_cdk::*;
66///
67/// #[action]
68/// fn _constructor() {
69///     let tx_id: Binary = tx!(tx_id);
70///     let tx_sender: Binary = tx!(sender);
71///     let tx_sender_public_key: Binary = tx!(sender_public_key);
72/// }
73/// ```
74#[macro_export]
75macro_rules! tx {
76    (tx_id) => {{
77        let field = "txId";
78        let (error, ptr, len) = wevm::v1::bindings::tx(field.as_ptr(), field.len());
79        error!(error);
80        core::slice::from_raw_parts(ptr, len)
81    }};
82    (sender) => {{
83        let field = "sender";
84        let (error, ptr, len) = wevm::v1::bindings::tx(field.as_ptr(), field.len());
85        error!(error);
86        core::slice::from_raw_parts(ptr, len)
87    }};
88    (sender_public_key) => {{
89        let field = "senderPublicKey";
90        let (error, ptr, len) = wevm::v1::bindings::tx(field.as_ptr(), field.len());
91        error!(error);
92        core::slice::from_raw_parts(ptr, len)
93    }};
94}