helium_api/models/transactions/
mod.rs1mod add_gateway_v1;
2mod assert_location_v1;
3mod assert_location_v2;
4mod coinbase_v1;
5mod consensus_group_failure_v1;
6mod consensus_group_v1;
7mod create_htlc_v1;
8mod dc_coinbase_v1;
9mod gen_gateway_v1;
10mod gen_price_oracle_v1;
11mod oui_v1;
12mod payment_v1;
13mod payment_v2;
14mod pending_txn_status;
15mod poc_receipts_v1;
16mod poc_receipts_v2;
17mod poc_request_v1;
18mod price_oracle_v1;
19mod redeem_htlc_v1;
20mod reward;
21mod rewards_v1;
22mod rewards_v2;
23mod routing_v1;
24mod security_coinbase_v1;
25mod security_exchange_v1;
26mod stake_validator_v1;
27mod state_channel_close_v1;
28mod state_channel_open_v1;
29mod token_burn_v1;
30mod token_exchange_rate_v1;
31mod transfer_hotspot_v1;
32mod transfer_validator_stake_v1;
33mod unstake_validator_v1;
34mod update_gateway_oui_v1;
35mod validator_heartbeat_v1;
36mod vars_v1;
37
38pub use add_gateway_v1::*;
39pub use assert_location_v1::*;
40pub use assert_location_v2::*;
41pub use coinbase_v1::*;
42pub use consensus_group_failure_v1::*;
43pub use consensus_group_v1::*;
44pub use create_htlc_v1::*;
45pub use dc_coinbase_v1::*;
46pub use gen_gateway_v1::*;
47pub use gen_price_oracle_v1::*;
48pub use oui_v1::*;
49pub use payment_v1::*;
50pub use payment_v2::*;
51pub use pending_txn_status::*;
52pub use poc_receipts_v1::*;
53pub use poc_receipts_v2::*;
54pub use poc_request_v1::*;
55pub use price_oracle_v1::*;
56pub use redeem_htlc_v1::*;
57pub use reward::*;
58pub use rewards_v1::*;
59pub use rewards_v2::*;
60pub use routing_v1::*;
61pub use security_coinbase_v1::*;
62pub use security_exchange_v1::*;
63pub use stake_validator_v1::*;
64pub use state_channel_close_v1::*;
65pub use state_channel_open_v1::*;
66pub use token_burn_v1::*;
67pub use token_exchange_rate_v1::*;
68pub use transfer_hotspot_v1::*;
69pub use transfer_validator_stake_v1::*;
70pub use unstake_validator_v1::*;
71pub use update_gateway_oui_v1::*;
72pub use validator_heartbeat_v1::*;
73pub use vars_v1::*;
74
75use serde::{Deserialize, Serialize};
76
77#[derive(Clone, Serialize, Deserialize, Debug)]
78#[serde(tag = "type", rename_all = "snake_case")]
79pub enum Transaction {
81 AddGatewayV1(AddGatewayV1),
82 AssertLocationV1(AssertLocationV1),
83 AssertLocationV2(AssertLocationV2),
84 CoinbaseV1(CoinbaseV1),
85 ConsensusGroupFailureV1(ConsensusGroupFailureV1),
86 ConsensusGroupV1(ConsensusGroupV1),
87 CreateHtlcV1(CreateHtlcV1),
88 DcCoinbaseV1(DcCoinbaseV1),
89 GenGatewayV1(GenGatewayV1),
90 GenPriceOracleV1(GenPriceOracleV1),
91 OuiV1(OuiV1),
92 PaymentV1(PaymentV1),
93 PaymentV2(PaymentV2),
94 PocReceiptsV1(PocReceiptsV1),
95 PocReceiptsV2(PocReceiptsV2),
96 PocRequestV1(PocRequestV1),
97 PriceOracleV1(PriceOracleV1),
98 RedeemHtlcV1(RedeemHtlcV1),
99 RewardsV1(RewardsV1),
100 RewardsV2(RewardsV2),
101 RoutingV1(RoutingV1),
102 SecurityCoinbaseV1(SecurityCoinbaseV1),
103 SecurityExchangeV1(SecurityExchangeV1),
104 StakeValidatorV1(StakeValidatorV1),
105 StateChannelCloseV1(StateChannelCloseV1),
106 StateChannelOpenV1(StateChannelOpenV1),
107 TokenBurnExchangeRateV1(TokenBurnExchangeRateV1),
108 TokenBurnV1(TokenBurnV1),
109 TransferHotspotV1(TransferHotspotV1),
110 TransferValidatorStakeV1(TransferValidatorStakeV1),
111 UnstakeValidatorV1(UnstakeValidatorV1),
112 UpdateGatewayOuiV1(UpdateGatewayOuiV1),
113 ValidatorHeartbeatV1(ValidatorHeartbeatV1),
114 VarsV1(VarsV1),
115 #[serde(other)]
116 Unknown, }
118#[cfg(test)]
119mod test {
120 use super::*;
121 use crate::*;
122 use tokio::test;
123
124 #[test]
125 async fn txn() {
126 let client = get_test_client();
127 let txn = transactions::get(&client, "1gidN7e6OKn405Fru_0sGhsqca3lTsrfGKrM4dwM_E8")
128 .await
129 .expect("PocRequestV1");
130 if let Transaction::PocRequestV1(poc) = txn {
131 assert_eq!(
132 poc.block_hash,
133 "RS2mBvd_4pbKCglkkyMroDQekPNO0xDdYx6Te3HGDGg"
134 )
135 } else {
136 assert!(false)
137 }
138 }
139 #[test]
140 async fn consensus_group_v1() {
141 let client = get_test_client();
142 let txn = transactions::get(&client, "yh01SJk8dvyqb-BGXxkHFUuLi6wF1pfL0VEFStJUt-E")
143 .await
144 .expect("ConsensusGroupV1");
145 if let Transaction::ConsensusGroupV1(cg) = txn {
146 assert_eq!(cg.hash, "yh01SJk8dvyqb-BGXxkHFUuLi6wF1pfL0VEFStJUt-E")
147 } else {
148 assert!(false)
149 }
150 }
151 #[test]
152 async fn payment_v2() {
153 let client = get_test_client();
155 let txn = transactions::get(&client, "C_jJZLKBOv_gRQ6P6wEpZPiRVAjf44FOx1iHOFD4haA")
156 .await
157 .expect("PaymentV2");
158 if let Transaction::PaymentV2(p) = txn {
159 assert_eq!(p.payments.len(), 1)
160 } else {
161 assert!(false)
162 }
163 }
164 #[test]
165 async fn poc_receipts_v1() {
166 let client = get_test_client();
167 let txn = transactions::get(&client, "8RaF-G4pvMVuIXfBYhdqNuIlFSEHPm_rC8TH-h4JYdE")
168 .await
169 .expect("PocReceipt");
170 if let Transaction::PocReceiptsV1(pr) = txn {
171 assert_eq!(pr.hash, "8RaF-G4pvMVuIXfBYhdqNuIlFSEHPm_rC8TH-h4JYdE")
172 } else {
173 assert!(false)
174 }
175 }
176
177 #[test]
178 async fn poc_receipts_v2() {
179 let client = get_test_client();
180 let txn = transactions::get(&client, "077Y_ArUR90ptUMAkiKPp-9NIZfqol5TgGFkoJZa_K8")
181 .await
182 .expect("PocReceipt");
183 if let Transaction::PocReceiptsV2(pr) = txn {
184 assert_eq!(pr.hash, "077Y_ArUR90ptUMAkiKPp-9NIZfqol5TgGFkoJZa_K8")
185 } else {
186 assert!(false)
187 }
188 }
189
190 #[test]
191 async fn payment_v1() {
192 let client = get_test_client();
193 let txn = transactions::get(&client, "iMSckt_hUcMFY_d7W-QOupY0MGq_g3-CC2dq3P-HWIw")
194 .await
195 .expect("PaymentV1");
196 if let Transaction::PaymentV1(p) = txn {
197 assert_eq!(
198 p.payee,
199 "14YeKFGXE23yAdACj6hu5NWEcYzzKxptYbm5jHgzw9A1P1UQfMv"
200 )
201 } else {
202 assert!(false)
203 }
204 }
205 #[test]
206 async fn rewards_v2() {
207 let client = get_test_client();
208 let txn = transactions::get(&client, "X0HNRGZ1HAX51CR8qS6LTopAosjFkuaaKXl850IpNDE")
209 .await
210 .expect("RewardsV2");
211 if let Transaction::RewardsV2(r) = txn {
212 assert_eq!(r.rewards.len(), 10138)
213 } else {
214 assert!(false)
215 }
216 }
217 #[test]
218 async fn assert_location_v1() {
219 let client = get_test_client();
220 let txn = transactions::get(&client, "_I16bycHeltuOo7eyqa4uhv2Bc7awcztZflyvRkVZ24")
221 .await
222 .expect("AssertLocationV1");
223 if let Transaction::AssertLocationV1(al) = txn {
224 assert_eq!(al.hash, "_I16bycHeltuOo7eyqa4uhv2Bc7awcztZflyvRkVZ24")
225 } else {
226 assert!(false)
227 }
228 }
229 #[test]
230 async fn assert_location_v2() {
231 let client = get_test_client();
232 let txn = transactions::get(&client, "TfjRv733Q9FBQ1_unw1c9g5ewVmMBuyf7APuyxKEqrw")
233 .await
234 .expect("AssertLocationV2");
235 if let Transaction::AssertLocationV2(al) = txn {
236 assert_eq!(
237 al.gateway,
238 "112WVxXCrCjiKmmDXLDUJuhYGEHMbXobUZe8oJQkHoMHEFa149a"
239 )
240 } else {
241 assert!(false)
242 }
243 }
244 #[test]
245 async fn add_gateway_v1() {
246 let client = get_test_client();
247 let txn = transactions::get(&client, "aoTggHSgaBAamuUUrXnY42jDZ5WUBxE0k-tshvfn35E")
248 .await
249 .expect("AddGatewayV1");
250 if let Transaction::AddGatewayV1(ag) = txn {
251 assert_eq!(
252 ag.gateway,
253 "112uuvztDziVQyLVvBxMsovsSPV5ZXkN6uQ5hrWSaWwV1oEZTZtd"
254 )
255 } else {
256 assert!(false)
257 }
258 }
259
260 #[test]
261 async fn add_gateway_v1_error() {
262 let client = get_test_client();
263 let txn = transactions::get(&client, "ia3c386ZnlVJorvo60WtXEFxy_0w35ImoIdmnW5lpJ8")
264 .await
265 .expect("AddGatewayV1");
266 if let Transaction::AddGatewayV1(ag) = txn {
267 assert_eq!(
268 ag.gateway,
269 "11GPcDmZGniewReZCnpC3SM19Jcw1sQU8W8CUnd7TCh4A6RmEkV"
270 )
271 } else {
272 assert!(false)
273 }
274 }
275
276 #[test]
277 async fn state_channel_close_v1() {
278 let client = get_test_client();
279 let txn = transactions::get(&client, "vjtEQK0vn1w69fV3TMrlnN6L_qprsoWM_-7DVspmLL8")
280 .await
281 .expect("StateChannelCloseV1");
282 if let Transaction::StateChannelCloseV1(sc) = txn {
283 assert_eq!(
284 sc.closer,
285 "11QVeYckasapcrmqjZqtfGTjE154uHHUvYPPwW6EMwzrpsdr213"
286 )
287 } else {
288 assert!(false)
289 }
290 }
291
292 #[test]
293 async fn transfer_hotspot_v1() {
294 let client = get_test_client();
295 let txn = transactions::get(&client, "fSFua7A8G41K05QXAvJi5N2OB0QqmQ7xp7u-My4rYHc")
296 .await
297 .expect("TransferHotspotV1");
298 if let Transaction::TransferHotspotV1(th) = txn {
299 assert_eq!(
300 th.seller,
301 "14mo9fFGKYFaWh7xscpDLg7misWcuU5xqR8mc8gHr4c43nDnzeX"
302 )
303 } else {
304 assert!(false)
305 }
306 }
307
308 #[test]
309 async fn transfer_routing_v1_new_xor() {
310 let client = get_test_client();
311
312 let txn = transactions::get(&client, "EjL6nBsSxovJluW-kdAaPcEiRt0OPIATOmlHD1Lth4Y")
313 .await
314 .expect("RoutingV1_NewXor");
315
316 if let Transaction::RoutingV1(r) = txn {
317 assert_eq!(r.oui, 12);
318 assert_eq!(
319 r.owner,
320 "112ewJNEUfSg3Jvo276tMjzFC2JzmmZcJJ32CWz2fzYqbyCMMTe1",
321 );
322 if let RoutingAction::NewXor(nx) = r.action {
323 assert_eq!(nx.filter, "wVwCiewtCpELAAAAAAAAAAAAAAAAAAAAf2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
324 } else {
325 assert!(false)
326 }
327 } else {
328 assert!(false)
329 }
330 }
331
332 #[test]
333 async fn unstake_validator_v1() {
334 let client = get_test_client();
335
336 let txn = transactions::get(&client, "fMT-7_f2WQNKAYIQWX2-V258KsoI61HYbt_zAbN3A1I")
337 .await
338 .expect("UnstakeValidatorv1");
339
340 if let Transaction::UnstakeValidatorV1(uv) = txn {
341 assert_eq!(
342 uv.address,
343 "11cY9Ly5H3hU4Ai2k7G9niHLAxsKb1ragQYGLJ7E9vh4Vnx6Efb"
344 );
345 assert_eq!(uv.stake_amount, 1000000000000u64.into());
346 assert_eq!(uv.fee, 35000);
347 } else {
348 assert!(false)
349 }
350 }
351
352 #[test]
353 async fn vars_v1() {
354 let client = get_test_client();
355 let txn = transactions::get(&client, "SB47bwBKP3ud1KdASYAndxkoIhZCXgPtusLUIsS7Q2o")
356 .await
357 .expect("VarsV1");
358 if let Transaction::VarsV1(v) = txn {
359 assert_eq!(
360 v.proof,
361 "MEUCIAXq0Pi0bK_DutFRF7R7ItEVrdUW2rmY8Guut5bHRboxAiEA9-wrvs7z9QZNRCC7XTKm4sb1cpXFD6TGB8Re8GfOyyA"
362 );
363 assert!(v.vars.get("sc_max_actors").is_some())
364 } else {
365 assert!(false)
366 }
367 }
368}