4
4
use std:: collections:: BTreeSet ;
5
5
use std:: convert:: TryInto ;
6
6
7
- use anyhow:: anyhow;
8
7
use ext:: init;
9
8
use fil_actors_runtime:: runtime:: { ActorCode , Runtime } ;
10
9
use fil_actors_runtime:: {
11
- actor_error, cbor, make_map_with_root_and_bitwidth, ActorDowncast , ActorError , Multimap ,
12
- CRON_ACTOR_ADDR , INIT_ACTOR_ADDR , REWARD_ACTOR_ADDR , SYSTEM_ACTOR_ADDR ,
10
+ actor_error, cbor, make_map_with_root_and_bitwidth, ActorContext , ActorDowncast , ActorError ,
11
+ Multimap , CRON_ACTOR_ADDR , INIT_ACTOR_ADDR , REWARD_ACTOR_ADDR , SYSTEM_ACTOR_ADDR ,
13
12
} ;
14
13
use fvm_ipld_blockstore:: Blockstore ;
15
14
use fvm_ipld_encoding:: RawBytes ;
@@ -74,9 +73,7 @@ impl Actor {
74
73
{
75
74
rt. validate_immediate_caller_is ( std:: iter:: once ( & * SYSTEM_ACTOR_ADDR ) ) ?;
76
75
77
- let st = State :: new ( rt. store ( ) ) . map_err ( |e| {
78
- e. downcast_default ( ExitCode :: USR_ILLEGAL_STATE , "Failed to create power actor state" )
79
- } ) ?;
76
+ let st = State :: new ( rt. store ( ) ) . context ( "Failed to create power actor state" ) ?;
80
77
rt. create ( & st) ?;
81
78
Ok ( ( ) )
82
79
}
@@ -130,12 +127,8 @@ impl Actor {
130
127
raw_byte_power : Default :: default ( ) ,
131
128
} ,
132
129
)
133
- . map_err ( |e| {
134
- e. downcast_default (
135
- ExitCode :: USR_ILLEGAL_STATE ,
136
- "failed to put power in claimed table while creating miner" ,
137
- )
138
- } ) ?;
130
+ . context ( "failed to put power in claimed table while creating miner" ) ?;
131
+
139
132
st. miner_count += 1 ;
140
133
141
134
st. update_stats_for_new_miner ( window_post_proof_type) . map_err ( |e| {
@@ -180,13 +173,10 @@ impl Actor {
180
173
& params. raw_byte_delta ,
181
174
& params. quality_adjusted_delta ,
182
175
)
183
- . map_err ( |e| {
184
- e. downcast_default (
185
- ExitCode :: USR_ILLEGAL_STATE ,
186
- format ! (
187
- "failed to update power raw {}, qa {}" ,
188
- params. raw_byte_delta, params. quality_adjusted_delta,
189
- ) ,
176
+ . with_context ( || {
177
+ format ! (
178
+ "failed to update power raw {}, qa {}" ,
179
+ params. raw_byte_delta, params. quality_adjusted_delta,
190
180
)
191
181
} ) ?;
192
182
@@ -225,17 +215,12 @@ impl Actor {
225
215
CRON_QUEUE_HAMT_BITWIDTH ,
226
216
CRON_QUEUE_AMT_BITWIDTH ,
227
217
)
228
- . map_err ( |e| {
229
- e. downcast_default ( ExitCode :: USR_ILLEGAL_STATE , "failed to load cron events" )
230
- } ) ?;
218
+ . context ( "failed to load cron events" ) ?;
231
219
232
- st. append_cron_event ( & mut events, params. event_epoch , miner_event) . map_err ( |e| {
233
- e. downcast_default ( ExitCode :: USR_ILLEGAL_STATE , "failed to enroll cron event" )
234
- } ) ?;
220
+ st. append_cron_event ( & mut events, params. event_epoch , miner_event)
221
+ . context ( "failed to enroll cron event" ) ?;
235
222
236
- st. cron_event_queue = events. root ( ) . map_err ( |e| {
237
- e. downcast_default ( ExitCode :: USR_ILLEGAL_STATE , "failed to flush cron events" )
238
- } ) ?;
223
+ st. cron_event_queue = events. root ( ) . context ( "failed to flush cron events" ) ?;
239
224
Ok ( ( ) )
240
225
} ) ?;
241
226
Ok ( ( ) )
@@ -326,22 +311,14 @@ impl Actor {
326
311
HAMT_BIT_WIDTH ,
327
312
PROOF_VALIDATION_BATCH_AMT_BITWIDTH ,
328
313
)
329
- . map_err ( |e| {
330
- e. downcast_default (
331
- ExitCode :: USR_ILLEGAL_STATE ,
332
- "failed to load proof batching set" ,
333
- )
334
- } ) ?
314
+ . context ( "failed to load proof batching set" ) ?
335
315
} else {
336
316
debug ! ( "ProofValidationBatch created" ) ;
337
317
Multimap :: new ( rt. store ( ) , HAMT_BIT_WIDTH , PROOF_VALIDATION_BATCH_AMT_BITWIDTH )
338
318
} ;
339
319
let miner_addr = rt. message ( ) . caller ( ) ;
340
- let arr = mmap. get :: < SealVerifyInfo > ( & miner_addr. to_bytes ( ) ) . map_err ( |e| {
341
- e. downcast_default (
342
- ExitCode :: USR_ILLEGAL_STATE ,
343
- format ! ( "failed to get seal verify infos at addr {}" , miner_addr) ,
344
- )
320
+ let arr = mmap. get :: < SealVerifyInfo > ( & miner_addr. to_bytes ( ) ) . with_context ( || {
321
+ format ! ( "failed to get seal verify infos at addr {}" , miner_addr)
345
322
} ) ?;
346
323
if let Some ( arr) = arr {
347
324
if arr. count ( ) >= MAX_MINER_PROVE_COMMITS_PER_EPOCH {
@@ -355,13 +332,10 @@ impl Actor {
355
332
}
356
333
}
357
334
358
- mmap. add ( miner_addr. to_bytes ( ) . into ( ) , seal_info) . map_err ( |e| {
359
- e. downcast_default ( ExitCode :: USR_ILLEGAL_STATE , "failed to insert proof into set" )
360
- } ) ?;
335
+ mmap. add ( miner_addr. to_bytes ( ) . into ( ) , seal_info)
336
+ . context ( "failed to insert proof into set" ) ?;
361
337
362
- let mmrc = mmap. root ( ) . map_err ( |e| {
363
- e. downcast_default ( ExitCode :: USR_ILLEGAL_STATE , "failed to flush proofs batch map" )
364
- } ) ?;
338
+ let mmrc = mmap. root ( ) . context ( "failed to flush proofs batch map" ) ?;
365
339
366
340
rt. charge_gas ( "OnSubmitVerifySeal" , GAS_ON_SUBMIT_VERIFY_SEAL ) ;
367
341
st. proof_validation_batch = Some ( mmrc) ;
@@ -434,35 +408,37 @@ impl Actor {
434
408
}
435
409
} ;
436
410
437
- if let Err ( e) = mmap. for_all :: < _ , SealVerifyInfo > ( |k, arr| {
411
+ if let Err ( e) = mmap. for_all :: < _ , SealVerifyInfo , _ > ( |k, arr| {
438
412
let addr = match Address :: from_bytes ( & k. 0 ) {
439
413
Ok ( addr) => addr,
440
414
Err ( e) => {
441
- return Err ( anyhow ! ( "failed to parse address key: {}" , e) ) ;
415
+ return Err ( format ! ( "failed to parse address key: {}" , e) ) ;
442
416
}
443
417
} ;
444
418
445
419
let contains_claim = match claims. contains_key ( & addr. to_bytes ( ) ) {
446
420
Ok ( contains_claim) => contains_claim,
447
- Err ( e) => return Err ( anyhow ! ( "failed to look up clain: {}" , e) ) ,
421
+ Err ( e) => return Err ( format ! ( "failed to look up clain: {}" , e) ) ,
448
422
} ;
449
423
450
424
if !contains_claim {
451
425
debug ! ( "skipping batch verifies for unknown miner: {}" , addr) ;
452
426
return Ok ( ( ) ) ;
453
427
}
454
428
455
- let num_proofs: usize = arr. count ( ) . try_into ( ) ?;
429
+ let num_proofs: usize = arr
430
+ . count ( )
431
+ . try_into ( )
432
+ . map_err ( |_| "can not convert u64 to usize" . to_string ( ) ) ?;
456
433
infos. reserve ( num_proofs) ;
457
- arr. for_each ( |_, svi| {
434
+ arr. for_each :: < _ , ActorError > ( |_, svi| {
458
435
infos. push ( svi. clone ( ) ) ;
459
436
Ok ( ( ) )
460
437
} )
461
438
. map_err ( |e| {
462
- anyhow ! (
439
+ format ! (
463
440
"failed to iterate over proof verify array for miner {}: {}" ,
464
- addr,
465
- e
441
+ addr, e
466
442
)
467
443
} ) ?;
468
444
@@ -545,22 +521,16 @@ impl Actor {
545
521
CRON_QUEUE_HAMT_BITWIDTH ,
546
522
CRON_QUEUE_AMT_BITWIDTH ,
547
523
)
548
- . map_err ( |e| {
549
- e. downcast_default ( ExitCode :: USR_ILLEGAL_STATE , "failed to load cron events" )
550
- } ) ?;
524
+ . context ( "failed to load cron events" ) ?;
551
525
552
526
let claims =
553
527
make_map_with_root_and_bitwidth :: < _ , Claim > ( & st. claims , rt. store ( ) , HAMT_BIT_WIDTH )
554
528
. map_err ( |e| {
555
529
e. downcast_default ( ExitCode :: USR_ILLEGAL_STATE , "failed to load claims" )
556
530
} ) ?;
557
531
for epoch in st. first_cron_epoch ..=rt_epoch {
558
- let epoch_events = load_cron_events ( & events, epoch) . map_err ( |e| {
559
- e. downcast_default (
560
- ExitCode :: USR_ILLEGAL_STATE ,
561
- format ! ( "failed to load cron events at {}" , epoch) ,
562
- )
563
- } ) ?;
532
+ let epoch_events = load_cron_events ( & events, epoch)
533
+ . with_context ( || format ! ( "failed to load cron events at {}" , epoch) ) ?;
564
534
565
535
if epoch_events. is_empty ( ) {
566
536
continue ;
@@ -581,18 +551,13 @@ impl Actor {
581
551
cron_events. push ( evt) ;
582
552
}
583
553
584
- events. remove_all ( & epoch_key ( epoch) ) . map_err ( |e| {
585
- e. downcast_default (
586
- ExitCode :: USR_ILLEGAL_STATE ,
587
- format ! ( "failed to clear cron events at {}" , epoch) ,
588
- )
589
- } ) ?;
554
+ events
555
+ . remove_all ( & epoch_key ( epoch) )
556
+ . with_context ( || format ! ( "failed to clear cron events at {}" , epoch) ) ?;
590
557
}
591
558
592
559
st. first_cron_epoch = rt_epoch + 1 ;
593
- st. cron_event_queue = events. root ( ) . map_err ( |e| {
594
- e. downcast_default ( ExitCode :: USR_ILLEGAL_STATE , "failed to flush events" )
595
- } ) ?;
560
+ st. cron_event_queue = events. root ( ) . context ( "failed to flush events" ) ?;
596
561
597
562
Ok ( ( ) )
598
563
} ) ?;
0 commit comments