1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
use crate::box_spec::BoxSpec;
use crate::box_traits::{ExplorerFindable, SpecifiedBox, WrappedBox};
use crate::encoding::unwrap_long;
use crate::error::{HeadlessDappError, Result};
use crate::SType::SLong;
use crate::WASMBox;
use crate::{RegisterSpec, TokenSpec};
use ergo_headless_dapp_framework_derive::{SpecBox, WrapBox};
use ergo_lib::chain::ergo_box::ErgoBox;
use ergo_lib_wasm::box_coll::ErgoBoxes;
use ergo_lib_wasm::ergo_box::ErgoBox as WErgoBox;
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
#[derive(Clone, Debug, WrapBox, SpecBox, WASMBox, Eq, PartialEq)]
pub struct ErgsBox {
ergo_box: ErgoBox,
}
impl SpecifiedBox for ErgsBox {
fn box_spec() -> BoxSpec {
BoxSpec::new(None, Some(1000000..u64::MAX), vec![], vec![])
}
}
impl ErgsBox {
pub fn convert_from_ergo_boxes(ergo_boxes: &ErgoBoxes) -> Result<Vec<ErgsBox>> {
let mut ergs_boxes: Vec<ErgsBox> = vec![];
let unwrapped_boxes: Vec<ErgoBox> = ergo_boxes.clone().into();
for b in unwrapped_boxes {
let ergs_box = ErgsBox::new(&b)?;
ergs_boxes.push(ergs_box);
}
Ok(ergs_boxes)
}
pub fn sum_ergs_boxes_value(boxes: &Vec<ErgsBox>) -> u64 {
boxes
.into_iter()
.fold(0, |acc, pb| pb.get_box().value.as_u64().clone() + acc)
}
}
#[wasm_bindgen]
#[derive(Clone, Debug, WrapBox, SpecBox, WASMBox)]
pub struct ErgUsdOraclePoolBox {
ergo_box: ErgoBox,
}
impl SpecifiedBox for ErgUsdOraclePoolBox {
fn box_spec() -> BoxSpec {
let registers = vec![RegisterSpec::new(Some(SLong), None)];
let tokens = vec![Some(TokenSpec::new(
1..2,
"54acaa0c6d5d3bc66b88364a423b5f156ed763f7236d437adb44d70787bc0f95",
))];
BoxSpec::new(None, None, registers, tokens)
}
}
#[wasm_bindgen]
impl ErgUsdOraclePoolBox {
#[wasm_bindgen]
pub fn datapoint(&self) -> u64 {
return unwrap_long(&self.registers()[0]).unwrap() as u64;
}
#[wasm_bindgen]
pub fn datapoint_in_cents(&self) -> u64 {
return (self.datapoint() / 100) as u64;
}
}
#[wasm_bindgen]
#[derive(Clone, Debug, WrapBox, SpecBox, WASMBox)]
pub struct AdaUsdOraclePoolBox {
ergo_box: ErgoBox,
}
impl SpecifiedBox for AdaUsdOraclePoolBox {
fn box_spec() -> BoxSpec {
let registers = vec![RegisterSpec::new(Some(SLong), None)];
let tokens = vec![Some(TokenSpec::new(
1..2,
"19475d9a78377ff0f36e9826cec439727bea522f6ffa3bda32e20d2f8b3103ac",
))];
BoxSpec::new(None, None, registers, tokens)
}
}
#[wasm_bindgen]
impl AdaUsdOraclePoolBox {
#[wasm_bindgen]
pub fn datapoint(&self) -> u64 {
return unwrap_long(&self.registers()[0]).unwrap() as u64;
}
#[wasm_bindgen]
pub fn datapoint_in_cents(&self) -> u64 {
return (self.datapoint() / 100) as u64;
}
}