@@ -5,16 +5,15 @@ use cid::Cid;
5
5
use fvm_ipld_blockstore:: Blockstore ;
6
6
use fvm_ipld_hamt:: Error as HamtError ;
7
7
use fvm_shared:: address:: Address ;
8
- use fvm_shared:: bigint:: bigint_ser:: BigIntDe ;
9
8
use fvm_shared:: econ:: TokenAmount ;
10
- use num_traits:: { Signed , Zero } ;
9
+ use num_traits:: Zero ;
11
10
12
11
use fil_actors_runtime:: { make_empty_map, make_map_with_root_and_bitwidth, Map } ;
13
12
14
13
pub const BALANCE_TABLE_BITWIDTH : u32 = 6 ;
15
14
16
15
/// Balance table which handles getting and updating token balances specifically
17
- pub struct BalanceTable < ' a , BS > ( pub Map < ' a , BS , BigIntDe > ) ;
16
+ pub struct BalanceTable < ' a , BS > ( pub Map < ' a , BS , TokenAmount > ) ;
18
17
19
18
impl < ' a , BS > BalanceTable < ' a , BS >
20
19
where
38
37
/// Gets token amount for given address in balance table
39
38
pub fn get ( & self , key : & Address ) -> Result < TokenAmount , HamtError > {
40
39
if let Some ( v) = self . 0 . get ( & key. to_bytes ( ) ) ? {
41
- Ok ( v. 0 . clone ( ) )
40
+ Ok ( v. clone ( ) )
42
41
} else {
43
- Ok ( 0 . into ( ) )
42
+ Ok ( TokenAmount :: zero ( ) )
44
43
}
45
44
}
46
45
54
53
self . 0 . delete ( & key. to_bytes ( ) ) ?;
55
54
Ok ( ( ) )
56
55
} else {
57
- self . 0 . set ( key. to_bytes ( ) . into ( ) , BigIntDe ( sum) ) ?;
56
+ self . 0 . set ( key. to_bytes ( ) . into ( ) , sum) ?;
58
57
Ok ( ( ) )
59
58
}
60
59
}
@@ -93,10 +92,10 @@ where
93
92
/// Returns total balance held by this balance table
94
93
#[ allow( dead_code) ]
95
94
pub fn total ( & self ) -> Result < TokenAmount , HamtError > {
96
- let mut total = TokenAmount :: default ( ) ;
95
+ let mut total = TokenAmount :: zero ( ) ;
97
96
98
- self . 0 . for_each ( |_, v : & BigIntDe | {
99
- total += & v . 0 ;
97
+ self . 0 . for_each ( |_, v : & TokenAmount | {
98
+ total += v ;
100
99
Ok ( ( ) )
101
100
} ) ?;
102
101
@@ -119,7 +118,7 @@ mod tests {
119
118
let store = MemoryBlockstore :: default ( ) ;
120
119
let mut bt = BalanceTable :: new ( & store) ;
121
120
122
- assert_eq ! ( bt. total( ) . unwrap( ) , TokenAmount :: from ( 0u8 ) ) ;
121
+ assert ! ( bt. total( ) . unwrap( ) . is_zero ( ) ) ;
123
122
124
123
struct TotalTestCase < ' a > {
125
124
amount : u64 ,
@@ -134,9 +133,9 @@ mod tests {
134
133
] ;
135
134
136
135
for t in cases. iter ( ) {
137
- bt. add ( t. addr , & TokenAmount :: from ( t. amount ) ) . unwrap ( ) ;
136
+ bt. add ( t. addr , & TokenAmount :: from_atto ( t. amount ) ) . unwrap ( ) ;
138
137
139
- assert_eq ! ( bt. total( ) . unwrap( ) , TokenAmount :: from ( t. total) ) ;
138
+ assert_eq ! ( bt. total( ) . unwrap( ) , TokenAmount :: from_atto ( t. total) ) ;
140
139
}
141
140
}
142
141
@@ -146,29 +145,37 @@ mod tests {
146
145
let store = MemoryBlockstore :: default ( ) ;
147
146
let mut bt = BalanceTable :: new ( & store) ;
148
147
149
- bt. add ( & addr, & TokenAmount :: from ( 80u8 ) ) . unwrap ( ) ;
150
- assert_eq ! ( bt. get( & addr) . unwrap( ) , TokenAmount :: from ( 80u8 ) ) ;
148
+ bt. add ( & addr, & TokenAmount :: from_atto ( 80u8 ) ) . unwrap ( ) ;
149
+ assert_eq ! ( bt. get( & addr) . unwrap( ) , TokenAmount :: from_atto ( 80u8 ) ) ;
151
150
// Test subtracting past minimum only subtracts correct amount
152
151
assert_eq ! (
153
- bt. subtract_with_minimum( & addr, & TokenAmount :: from( 20u8 ) , & TokenAmount :: from( 70u8 ) )
154
- . unwrap( ) ,
155
- TokenAmount :: from( 10u8 )
152
+ bt. subtract_with_minimum(
153
+ & addr,
154
+ & TokenAmount :: from_atto( 20u8 ) ,
155
+ & TokenAmount :: from_atto( 70u8 )
156
+ )
157
+ . unwrap( ) ,
158
+ TokenAmount :: from_atto( 10u8 )
156
159
) ;
157
- assert_eq ! ( bt. get( & addr) . unwrap( ) , TokenAmount :: from ( 70u8 ) ) ;
160
+ assert_eq ! ( bt. get( & addr) . unwrap( ) , TokenAmount :: from_atto ( 70u8 ) ) ;
158
161
159
162
// Test subtracting to limit
160
163
assert_eq ! (
161
- bt. subtract_with_minimum( & addr, & TokenAmount :: from( 10u8 ) , & TokenAmount :: from( 60u8 ) )
162
- . unwrap( ) ,
163
- TokenAmount :: from( 10u8 )
164
+ bt. subtract_with_minimum(
165
+ & addr,
166
+ & TokenAmount :: from_atto( 10u8 ) ,
167
+ & TokenAmount :: from_atto( 60u8 )
168
+ )
169
+ . unwrap( ) ,
170
+ TokenAmount :: from_atto( 10u8 )
164
171
) ;
165
- assert_eq ! ( bt. get( & addr) . unwrap( ) , TokenAmount :: from ( 60u8 ) ) ;
172
+ assert_eq ! ( bt. get( & addr) . unwrap( ) , TokenAmount :: from_atto ( 60u8 ) ) ;
166
173
167
174
// Test must subtract success
168
- bt. must_subtract ( & addr, & TokenAmount :: from ( 10u8 ) ) . unwrap ( ) ;
169
- assert_eq ! ( bt. get( & addr) . unwrap( ) , TokenAmount :: from ( 50u8 ) ) ;
175
+ bt. must_subtract ( & addr, & TokenAmount :: from_atto ( 10u8 ) ) . unwrap ( ) ;
176
+ assert_eq ! ( bt. get( & addr) . unwrap( ) , TokenAmount :: from_atto ( 50u8 ) ) ;
170
177
171
178
// Test subtracting more than available
172
- assert ! ( bt. must_subtract( & addr, & TokenAmount :: from ( 100u8 ) ) . is_err( ) ) ;
179
+ assert ! ( bt. must_subtract( & addr, & TokenAmount :: from_atto ( 100u8 ) ) . is_err( ) ) ;
173
180
}
174
181
}
0 commit comments