@@ -5,7 +5,7 @@ use cid::Cid;
5
5
use fvm_ipld_encoding:: { to_vec, DAG_CBOR } ;
6
6
use fvm_sdk as sdk;
7
7
use fvm_shared:: econ:: TokenAmount ;
8
- use sdk:: error:: { StateReadError , StateUpdateError } ;
8
+ use sdk:: error:: { ActorDeleteError , StateReadError , StateUpdateError } ;
9
9
10
10
#[ no_mangle]
11
11
pub fn invoke ( _: u32 ) -> u32 {
@@ -30,8 +30,14 @@ pub fn invoke(_: u32) -> u32 {
30
30
let balance = sdk:: sself:: current_balance ( ) ;
31
31
assert_eq ! ( TokenAmount :: from_nano( 1_000_000 ) , balance) ;
32
32
33
- // now lets destroy the actor, burning the funds.
34
- sdk:: sself:: self_destruct ( ) . unwrap ( ) ;
33
+ // Now destroy the actor without burning funds. This should fail because we have unspent funds.
34
+ assert_eq ! (
35
+ sdk:: sself:: self_destruct( false ) . unwrap_err( ) ,
36
+ ActorDeleteError :: UnspentFunds
37
+ ) ;
38
+
39
+ // Now lets destroy the actor, burning the funds.
40
+ sdk:: sself:: self_destruct ( true ) . unwrap ( ) ;
35
41
36
42
// test that root/set_root/self_destruct fail when the actor has been deleted
37
43
// and balance is 0
@@ -43,7 +49,7 @@ pub fn invoke(_: u32) -> u32 {
43
49
assert_eq ! ( TokenAmount :: from_nano( 0 ) , sdk:: sself:: current_balance( ) ) ;
44
50
45
51
// calling destroy on an already destroyed actor should succeed (no-op)
46
- sdk:: sself:: self_destruct ( ) . expect ( "deleting an already deleted actor should succeed" ) ;
52
+ sdk:: sself:: self_destruct ( false ) . expect ( "deleting an already deleted actor should succeed" ) ;
47
53
48
54
#[ cfg( coverage) ]
49
55
sdk:: debug:: store_artifact ( "sself_actor.profraw" , minicov:: capture_coverage ( ) ) ;
0 commit comments