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
use crate::error::Result;
use crate::tx_creation::{create_candidate, find_and_sum_other_tokens};
use crate::{NanoErg, P2PKAddressString};
use ergo_lib::ast::constant::Constant;
use ergo_lib::chain::ergo_box::{ErgoBox, ErgoBoxCandidate};
use ergo_lib::chain::token::Token;
pub struct ChangeBox {}
impl ChangeBox {
pub fn output_candidate(
tokens: &Vec<Token>,
value: NanoErg,
user_address: &P2PKAddressString,
current_height: u64,
) -> Result<ErgoBoxCandidate> {
create_candidate(value, &user_address, &tokens, &vec![], current_height)
}
}
pub struct TokensChangeBox {}
impl TokensChangeBox {
pub fn output_candidate(
input_boxes: &Vec<ErgoBox>,
value: NanoErg,
user_address: &P2PKAddressString,
current_height: u64,
) -> Result<ErgoBoxCandidate> {
let tc_tokens = find_and_sum_other_tokens(&vec![], input_boxes);
create_candidate(value, &user_address, &tc_tokens, &vec![], current_height)
}
pub fn output_candidate_filtered(
filter_tokens: &Vec<Token>,
input_boxes: &Vec<ErgoBox>,
value: NanoErg,
user_address: &P2PKAddressString,
current_height: u64,
) -> Result<ErgoBoxCandidate> {
TokensChangeBox::output_candidate_with_registers_filtered(
filter_tokens,
input_boxes,
value,
&vec![],
user_address,
current_height,
)
}
pub fn output_candidate_with_registers_filtered(
filter_tokens: &Vec<Token>,
input_boxes: &Vec<ErgoBox>,
value: NanoErg,
registers: &Vec<Constant>,
user_address: &P2PKAddressString,
current_height: u64,
) -> Result<ErgoBoxCandidate> {
let tc_tokens = find_and_sum_other_tokens(filter_tokens, input_boxes);
create_candidate(value, &user_address, &tc_tokens, registers, current_height)
}
}
pub struct TxFeeBox {}
impl TxFeeBox {
pub fn output_candidate(tx_fee: u64, current_height: u64) -> Result<ErgoBoxCandidate> {
create_candidate(
tx_fee,
&"2iHkR7CWvD1R4j1yZg5bkeDRQavjAaVPeTDFGGLZduHyfWMuYpmhHocX8GJoaieTx78FntzJbCBVL6rf96ocJoZdmWBL2fci7NqWgAirppPQmZ7fN9V6z13Ay6brPriBKYqLp1bT2Fk4FkFLCfdPpe".to_string(),
&vec![],
&vec![],
current_height,
)
}
}