1#[macro_export]
26macro_rules! get_balance {
27 (@inner, $holder:expr, $type:expr, $version:expr) => {{
29 let system_token = internal_data!(system_token);
30 let (error, balance) = wevm::v1::bindings::get_balance(
31 system_token.0,
32 system_token.1,
33 $holder.as_ptr(),
34 $holder.len(),
35 $type,
36 $version,
37 );
38 error!(error);
39 balance
40 }};
41 (@inner, $holder:expr, $asset_id:expr, $type:expr, $version:expr) => {{
43 let (error, balance) = wevm::v1::bindings::get_balance(
44 $asset_id.as_ptr(),
45 $asset_id.len(),
46 $holder.as_ptr(),
47 $holder.len(),
48 $type,
49 $version,
50 );
51 error!(error);
52 balance
53 }};
54 (this) => {{
55 let system_token = internal_data!(system_token);
56 let this = internal_data!(this);
57 let (error, balance) =
58 wevm::v0::bindings::get_balance(system_token.0, system_token.1, this.0, this.1);
59 error!(error);
60 balance
61 }};
62 (this, asset => $asset_id:expr) => {{
63 let this = internal_data!(this);
64 let (error, balance) =
65 wevm::v0::bindings::get_balance($asset_id.as_ptr(), $asset_id.len(), this.0, this.1);
66 error!(error);
67 balance
68 }};
69 (address => $address:expr) => {
70 get_balance!(@inner, $address, 0, 1)
71 };
72 (address => $address:expr, asset => $asset_id:expr) => {
73 get_balance!(@inner, $address, $asset_id, 0, 1)
74 };
75 (alias => $address:expr) => {
76 get_balance!(@inner, $address, 0, 2)
77 };
78 (alias => $address:expr, asset => $asset_id:expr) => {
79 get_balance!($address, $asset_id, 0, 2)
80 };
81 (contract => $address:expr) => {
82 get_balance!(@inner, $address, 1, 1)
83 };
84 (contract => $address:expr, asset => $asset_id:expr) => {
85 get_balance!($address, $asset_id, 1, 1)
86 };
87}
88
89#[macro_export]
105macro_rules! transfer {
106 (@inner, $recipient:expr, $amount:expr, $type:expr, $version:expr) => {
108 let system_token = internal_data!(system_token);
109 let error = wevm::v1::bindings::transfer(
110 system_token.0,
111 system_token.1,
112 $recipient.as_ptr(),
113 $recipient.len(),
114 $type,
115 $version,
116 $amount,
117 );
118 error!(error);
119 };
120 (@inner, $asset_id:expr, $recipient:expr, $amount:expr, $type:expr, $version:expr) => {
122 let error = wevm::v1::bindings::transfer(
123 $asset_id.as_ptr(),
124 $asset_id.len(),
125 $recipient.as_ptr(),
126 $recipient.len(),
127 $type,
128 $version,
129 $amount,
130 );
131 error!(error);
132 };
133 (address => $recipient:expr, $amount:expr) => {
134 transfer!(@inner, $recipient, $amount, 0, 1);
135 };
136 (alias => $recipient:expr, $amount:expr) => {
137 transfer!(@inner, $recipient, $amount, 0, 2);
138 };
139 (contract => $recipient:expr, $amount:expr) => {
140 transfer!(@inner, $recipient, $amount, 1, 1);
141 };
142 (asset => $asset_id:expr, address => $recipient:expr, $amount:expr) => {
143 transfer!(@inner, $asset_id, $recipient, $amount, 0, 1);
144 };
145 (asset => $asset_id:expr, alias => $recipient:expr, $amount:expr) => {
146 transfer!(@inner, $asset_id, $recipient, $amount, 0, 2);
147 };
148 (asset => $asset_id:expr, contract => $recipient:expr, $amount:expr) => {
149 transfer!(@inner, $asset_id, $recipient, $amount, 1, 1);
150 };
151}
152
153#[macro_export]
173macro_rules! issue {
174 ($name:expr, $description:expr, $quantity:expr, $decimals:expr, $is_reissuable:expr) => {{
175 let (error, ptr, len) = wevm::v1::bindings::issue(
176 $name.as_ptr(),
177 $name.len(),
178 $description.as_ptr(),
179 $description.len(),
180 $quantity,
181 $decimals,
182 $is_reissuable,
183 );
184 error!(error);
185 core::slice::from_raw_parts(ptr, len)
186 }};
187}
188
189#[macro_export]
203macro_rules! burn {
204 ($asset_id:expr, $amount:expr) => {
205 let error = wevm::v0::bindings::burn($asset_id.as_ptr(), $asset_id.len(), $amount);
206 error!(error);
207 };
208}
209
210#[macro_export]
225macro_rules! reissue {
226 ($asset_id:expr, $amount:expr, $is_reissuable:expr) => {
227 let error = wevm::v0::bindings::reissue(
228 $asset_id.as_ptr(),
229 $asset_id.len(),
230 $amount,
231 $is_reissuable,
232 );
233 error!(error);
234 };
235}