@@ -15,8 +15,8 @@ use fil_actor_datacap::{
1515 DestroyParams , Method as DataCapMethod , MintParams , State as DataCapState ,
1616} ;
1717use fil_actor_verifreg:: {
18- AddVerifierClientParams , RemoveDataCapParams , RemoveDataCapRequest , RemoveDataCapReturn ,
19- SIGNATURE_DOMAIN_SEPARATION_REMOVE_DATA_CAP ,
18+ AddVerifierClientParams , DataCap , RemoveDataCapParams , RemoveDataCapRequest ,
19+ RemoveDataCapReturn , SIGNATURE_DOMAIN_SEPARATION_REMOVE_DATA_CAP ,
2020} ;
2121use fil_actor_verifreg:: { AddrPairKey , Method as VerifregMethod } ;
2222use fil_actor_verifreg:: { RemoveDataCapProposal , RemoveDataCapProposalID , State as VerifregState } ;
@@ -25,7 +25,7 @@ use fil_actors_runtime::{
2525 make_map_with_root_and_bitwidth, DATACAP_TOKEN_ACTOR_ADDR , STORAGE_MARKET_ACTOR_ADDR ,
2626 VERIFIED_REGISTRY_ACTOR_ADDR ,
2727} ;
28- use test_vm:: util:: { apply_ok, create_accounts, verifreg_add_verifier} ;
28+ use test_vm:: util:: { apply_code , apply_ok, create_accounts, verifreg_add_verifier} ;
2929use test_vm:: { ExpectInvocation , TEST_VERIFREG_ROOT_ADDR , VM } ;
3030
3131#[ test]
@@ -267,6 +267,63 @@ fn remove_datacap_simple_successful_path() {
267267 assert_eq ! ( 2u64 , verifier2_proposal_id. id) ;
268268 v. assert_state_invariants ( ) ;
269269}
270+ #[ test]
271+ fn remove_datacap_fails_on_verifreg ( ) {
272+ let store = MemoryBlockstore :: new ( ) ;
273+ let v = VM :: new_with_singletons ( & store) ;
274+ let addrs = create_accounts ( & v, 2 , TokenAmount :: from_whole ( 10_000 ) ) ;
275+ let ( verifier1, verifier2) = ( addrs[ 0 ] , addrs[ 1 ] ) ;
276+
277+ let verifier1_id_addr = v. normalize_address ( & verifier1) . unwrap ( ) ;
278+ let verifier2_id_addr = v. normalize_address ( & verifier2) . unwrap ( ) ;
279+ let verifier_allowance = StoragePower :: from ( 2 * 1048576u64 ) ;
280+ let allowance_to_remove: StoragePower = DataCap :: from ( 100 ) ;
281+
282+ // register verifier1 and verifier2
283+ verifreg_add_verifier ( & v, verifier1, verifier_allowance. clone ( ) ) ;
284+ verifreg_add_verifier ( & v, verifier2, verifier_allowance) ;
285+
286+ let remove_proposal = RemoveDataCapProposal {
287+ verified_client : VERIFIED_REGISTRY_ACTOR_ADDR ,
288+ data_cap_amount : allowance_to_remove. clone ( ) ,
289+ removal_proposal_id : RemoveDataCapProposalID { id : 0 } ,
290+ } ;
291+
292+ let mut remove_proposal_ser = to_vec ( & remove_proposal) . unwrap ( ) ;
293+ let mut remove_proposal_payload = SIGNATURE_DOMAIN_SEPARATION_REMOVE_DATA_CAP . to_vec ( ) ;
294+ remove_proposal_payload. append ( & mut remove_proposal_ser) ;
295+
296+ let remove_datacap_params = RemoveDataCapParams {
297+ verified_client_to_remove : VERIFIED_REGISTRY_ACTOR_ADDR ,
298+ data_cap_amount_to_remove : allowance_to_remove,
299+ verifier_request_1 : RemoveDataCapRequest {
300+ verifier : verifier1_id_addr,
301+ signature : Signature {
302+ sig_type : SignatureType :: Secp256k1 ,
303+ bytes : remove_proposal_payload. clone ( ) ,
304+ } ,
305+ } ,
306+ verifier_request_2 : RemoveDataCapRequest {
307+ verifier : verifier2_id_addr,
308+ signature : Signature {
309+ sig_type : SignatureType :: Secp256k1 ,
310+ bytes : remove_proposal_payload,
311+ } ,
312+ } ,
313+ } ;
314+
315+ apply_code (
316+ & v,
317+ TEST_VERIFREG_ROOT_ADDR ,
318+ VERIFIED_REGISTRY_ACTOR_ADDR ,
319+ TokenAmount :: zero ( ) ,
320+ VerifregMethod :: RemoveVerifiedClientDataCap as u64 ,
321+ remove_datacap_params,
322+ ExitCode :: USR_ILLEGAL_ARGUMENT ,
323+ ) ;
324+
325+ v. assert_state_invariants ( ) ;
326+ }
270327
271328fn expect_remove_datacap ( params : & RemoveDataCapParams ) -> ExpectInvocation {
272329 ExpectInvocation {
0 commit comments