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
#[cfg(not(all(target_arch = "wasm32", not(target_os = "emscripten"))))]
use noop_proc_macro::wasm_bindgen;
#[cfg(all(target_arch = "wasm32", not(target_os = "emscripten")))]
use wasm_bindgen::prelude::*;
use crate::{Withdrawals, Certificates, CertificateEnum, TransactionBody, error::JsError};
use super::value::{BigNum, Value, to_bignum, Coin};
pub fn internal_get_implicit_input(
withdrawals: &Option<Withdrawals>,
certs: &Option<Certificates>,
pool_deposit: &BigNum, key_deposit: &BigNum, ) -> Result<Value, JsError> {
let withdrawal_sum = match &withdrawals {
None => to_bignum(0),
Some(x) => x.0
.values()
.try_fold(
to_bignum(0),
|acc, withdrawal_amt| acc.checked_add(withdrawal_amt)
)?,
};
let certificate_refund = match &certs {
None => to_bignum(0),
Some(certs) => certs.0
.iter()
.try_fold(
to_bignum(0),
|acc, cert| match &cert.0 {
CertificateEnum::PoolRetirement(_cert) => acc.checked_add(pool_deposit),
CertificateEnum::StakeDeregistration(_cert) => acc.checked_add(key_deposit),
_ => Ok(acc),
}
)?
};
Ok(Value::new(&withdrawal_sum.checked_add(&certificate_refund)?))
}
pub fn internal_get_deposit(
certs: &Option<Certificates>,
pool_deposit: &BigNum, key_deposit: &BigNum, ) -> Result<Coin, JsError> {
let certificate_refund = match &certs {
None => to_bignum(0),
Some(certs) => certs.0
.iter()
.try_fold(
to_bignum(0),
|acc, cert| match &cert.0 {
CertificateEnum::PoolRegistration(_cert) => acc.checked_add(pool_deposit),
CertificateEnum::StakeRegistration(_cert) => acc.checked_add(key_deposit),
_ => Ok(acc),
}
)?
};
Ok(certificate_refund)
}
#[wasm_bindgen]
pub fn get_implicit_input(
txbody: &TransactionBody,
pool_deposit: &BigNum, key_deposit: &BigNum, ) -> Result<Value, JsError> {
internal_get_implicit_input(
&txbody.withdrawals,
&txbody.certs,
pool_deposit,
key_deposit,
)
}
#[wasm_bindgen]
pub fn get_deposit(
txbody: &TransactionBody,
pool_deposit: &BigNum, key_deposit: &BigNum, ) -> Result<Coin, JsError> {
internal_get_deposit(
&txbody.certs,
pool_deposit,
key_deposit,
)
}