@@ -2,19 +2,20 @@ pub mod errors;
2
2
pub mod receiver;
3
3
pub mod state;
4
4
pub mod types;
5
+ use self :: errors:: ActorError ;
6
+ use self :: state:: TokenState ;
7
+ use self :: types:: * ;
8
+ use crate :: runtime:: Runtime ;
5
9
10
+ use anyhow:: bail;
11
+ use anyhow:: Result ;
6
12
use fvm_ipld_blockstore:: Blockstore as IpldStore ;
7
13
use fvm_shared:: address:: Address ;
8
14
use fvm_shared:: bigint:: bigint_ser:: BigIntDe ;
9
15
use fvm_shared:: bigint:: BigInt ;
10
16
use fvm_shared:: bigint:: Zero ;
11
17
use fvm_shared:: econ:: TokenAmount ;
12
18
13
- use self :: errors:: ActorError ;
14
- use self :: state:: TokenState ;
15
- use self :: types:: * ;
16
- use crate :: runtime:: Runtime ;
17
-
18
19
/// A macro to abort concisely.
19
20
macro_rules! abort {
20
21
( $code: ident, $msg: literal $( , $ex: expr) * ) => {
@@ -25,8 +26,6 @@ macro_rules! abort {
25
26
} ;
26
27
}
27
28
28
- type Result < T > = std:: result:: Result < T , ActorError > ;
29
-
30
29
/// A standard fungible token interface allowing for on-chain transactions
31
30
pub trait Token {
32
31
/// Constructs the token
82
81
/// Injected blockstore
83
82
bs : BS ,
84
83
/// Access to the runtime
85
- _fvm : FVM ,
84
+ fvm : FVM ,
86
85
}
87
86
88
87
impl < BS , FVM > StandardToken < BS , FVM >
@@ -132,10 +131,9 @@ where
132
131
let mut state = self . load_state ( ) ;
133
132
let mut balances = state. get_balance_map ( & self . bs ) ;
134
133
135
- // FIXME: replace fvm_sdk with abstraction
136
- let holder = match fvm_sdk:: actor:: resolve_address ( & params. initial_holder ) {
137
- Some ( id) => id,
138
- None => {
134
+ let holder = match self . fvm . resolve_address ( & params. initial_holder ) {
135
+ Ok ( id) => id,
136
+ Err ( _) => {
139
137
return Ok ( MintReturn {
140
138
newly_minted : TokenAmount :: zero ( ) ,
141
139
successful : false ,
@@ -176,10 +174,7 @@ where
176
174
let balances = state. get_balance_map ( & self . bs ) ;
177
175
178
176
// Resolve the address
179
- let addr_id = match fvm_sdk:: actor:: resolve_address ( & holder) {
180
- Some ( id) => id,
181
- None => return Err ( ActorError :: AddrNotFound ( holder) ) ,
182
- } ;
177
+ let addr_id = self . fvm . resolve_address ( & holder) ?;
183
178
184
179
match balances. get ( & addr_id) {
185
180
Ok ( Some ( bal) ) => Ok ( bal. clone ( ) . 0 ) ,
@@ -196,23 +191,18 @@ where
196
191
// Load the HAMT holding balances
197
192
let state = self . load_state ( ) ;
198
193
199
- // FIXME: replace with runtime service call
200
- let caller_id = fvm_sdk:: message:: caller ( ) ;
194
+ let caller_id = self . fvm . caller ( ) ;
201
195
let mut caller_allowances_map = state. get_actor_allowance_map ( & self . bs , caller_id) ;
202
196
203
- let spender = match fvm_sdk:: actor:: resolve_address ( & params. spender ) {
204
- Some ( id) => id,
205
- None => return Err ( ActorError :: AddrNotFound ( params. spender ) ) ,
206
- } ;
207
-
197
+ let spender = self . fvm . resolve_address ( & & params. spender ) ?;
208
198
let new_amount = match caller_allowances_map. get ( & spender) ? {
209
199
// Allowance exists - attempt to calculate new allowance
210
200
Some ( existing_allowance) => match existing_allowance. 0 . checked_add ( & params. value ) {
211
201
Some ( new_allowance) => {
212
202
caller_allowances_map. set ( spender, BigIntDe ( new_allowance. clone ( ) ) ) ?;
213
203
new_allowance
214
204
}
215
- None => return Err ( ActorError :: Arithmetic ( String :: from ( "Allowance overflowed" ) ) ) ,
205
+ None => bail ! ( ActorError :: Arithmetic ( String :: from( "Allowance overflowed" ) ) ) ,
216
206
} ,
217
207
// No allowance recorded previously
218
208
None => {
@@ -234,13 +224,10 @@ where
234
224
// Load the HAMT holding balances
235
225
let state = self . load_state ( ) ;
236
226
237
- // FIXME: replace with runtime service call
238
- let caller_id = fvm_sdk:: message:: caller ( ) ;
227
+ let caller_id = self . fvm . caller ( ) ;
239
228
let mut caller_allowances_map = state. get_actor_allowance_map ( & self . bs , caller_id) ;
240
- let spender = match fvm_sdk:: actor:: resolve_address ( & params. spender ) {
241
- Some ( id) => id,
242
- None => return Err ( ActorError :: AddrNotFound ( params. spender ) ) ,
243
- } ;
229
+
230
+ let spender = self . fvm . resolve_address ( & & params. spender ) ?;
244
231
245
232
let new_allowance = match caller_allowances_map. get ( & spender) ? {
246
233
Some ( existing_allowance) => {
@@ -275,16 +262,13 @@ where
275
262
// Load the HAMT holding balances
276
263
let state = self . load_state ( ) ;
277
264
278
- // FIXME: replace with runtime service call
279
- let caller_id = fvm_sdk:: message:: caller ( ) ;
265
+ let caller_id = self . fvm . caller ( ) ;
280
266
let mut caller_allowances_map = state. get_actor_allowance_map ( & self . bs , caller_id) ;
281
- let spender = match fvm_sdk:: actor:: resolve_address ( & params. spender ) {
282
- Some ( id) => id,
283
- None => return Err ( ActorError :: AddrNotFound ( params. spender ) ) ,
284
- } ;
285
267
268
+ let spender = self . fvm . resolve_address ( & & params. spender ) ?;
286
269
let new_allowance = TokenAmount :: zero ( ) ;
287
270
caller_allowances_map. set ( spender, BigIntDe ( new_allowance. clone ( ) ) ) ?;
271
+
288
272
state. save ( & self . bs ) ;
289
273
290
274
Ok ( AllowanceReturn {
@@ -298,17 +282,10 @@ where
298
282
// Load the HAMT holding balances
299
283
let state = self . load_state ( ) ;
300
284
301
- // FIXME: replace with runtime service call
302
- let owner = match fvm_sdk:: actor:: resolve_address ( & params. owner ) {
303
- Some ( id) => id,
304
- None => return Err ( ActorError :: AddrNotFound ( params. spender ) ) ,
305
- } ;
306
-
285
+ let owner = self . fvm . resolve_address ( & params. owner ) ?;
307
286
let owner_allowances_map = state. get_actor_allowance_map ( & self . bs , owner) ;
308
- let spender = match fvm_sdk:: actor:: resolve_address ( & params. spender ) {
309
- Some ( id) => id,
310
- None => return Err ( ActorError :: AddrNotFound ( params. spender ) ) ,
311
- } ;
287
+
288
+ let spender = self . fvm . resolve_address ( & & params. spender ) ?;
312
289
313
290
let allowance = match owner_allowances_map. get ( & spender) ? {
314
291
Some ( allowance) => allowance. 0 . clone ( ) ,
0 commit comments