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}