@@ -1953,7 +1953,7 @@ fn add_balance_restricted_correctly() {
19531953 rt. set_value ( amount) ;
19541954
19551955 // set caller to not-builtin
1956- rt. set_caller ( make_identity_cid ( b"1234" ) , Address :: new_id ( 1000 ) ) ;
1956+ rt. set_caller ( make_identity_cid ( b"1234" ) , Address :: new_id ( 1234 ) ) ;
19571957
19581958 // cannot call the unexported method num
19591959 expect_abort_contains_message (
@@ -1975,3 +1975,93 @@ fn add_balance_restricted_correctly() {
19751975
19761976 rt. verify ( ) ;
19771977}
1978+
1979+ #[ test]
1980+ fn psd_restricted_correctly ( ) {
1981+ let mut rt = setup ( ) ;
1982+
1983+ let deal = generate_deal_proposal (
1984+ CLIENT_ADDR ,
1985+ PROVIDER_ADDR ,
1986+ ChainEpoch :: from ( 1 ) ,
1987+ 200 * EPOCHS_IN_DAY ,
1988+ ) ;
1989+
1990+ // Client gets enough funds
1991+ add_participant_funds ( & mut rt, CLIENT_ADDR , deal. client_balance_requirement ( ) ) ;
1992+
1993+ // Provider has enough funds
1994+ rt. set_caller ( * ACCOUNT_ACTOR_CODE_ID , OWNER_ADDR ) ;
1995+ rt. set_value ( deal. provider_balance_requirement ( ) . clone ( ) ) ;
1996+ rt. expect_validate_caller_any ( ) ;
1997+ expect_provider_control_address ( & mut rt, PROVIDER_ADDR , OWNER_ADDR , WORKER_ADDR ) ;
1998+
1999+ assert_eq ! (
2000+ RawBytes :: default ( ) ,
2001+ rt. call:: <MarketActor >(
2002+ Method :: AddBalance as u64 ,
2003+ & RawBytes :: serialize( PROVIDER_ADDR ) . unwrap( ) ,
2004+ )
2005+ . unwrap( )
2006+ ) ;
2007+
2008+ rt. verify ( ) ;
2009+
2010+ // Prep the message
2011+
2012+ let buf = RawBytes :: serialize ( & deal) . expect ( "failed to marshal deal proposal" ) ;
2013+
2014+ let sig = Signature :: new_bls ( buf. to_vec ( ) ) ;
2015+
2016+ let params = PublishStorageDealsParams {
2017+ deals : vec ! [ ClientDealProposal { proposal: deal. clone( ) , client_signature: sig } ] ,
2018+ } ;
2019+
2020+ // set caller to not-builtin
2021+ rt. set_caller ( make_identity_cid ( b"1234" ) , WORKER_ADDR ) ;
2022+
2023+ // cannot call the unexported method num
2024+ expect_abort_contains_message (
2025+ ExitCode :: USR_FORBIDDEN ,
2026+ "must be built-in" ,
2027+ rt. call :: < MarketActor > (
2028+ Method :: PublishStorageDeals as MethodNum ,
2029+ & RawBytes :: serialize ( params. clone ( ) ) . unwrap ( ) ,
2030+ ) ,
2031+ ) ;
2032+
2033+ // can call the exported method num
2034+
2035+ let authenticate_param1 = RawBytes :: serialize ( AuthenticateMessageParams {
2036+ signature : buf. to_vec ( ) ,
2037+ message : buf. to_vec ( ) ,
2038+ } )
2039+ . unwrap ( ) ;
2040+
2041+ rt. expect_validate_caller_any ( ) ;
2042+ expect_provider_control_address ( & mut rt, PROVIDER_ADDR , OWNER_ADDR , WORKER_ADDR ) ;
2043+ expect_query_network_info ( & mut rt) ;
2044+
2045+ rt. expect_send (
2046+ deal. client ,
2047+ AUTHENTICATE_MESSAGE_METHOD as u64 ,
2048+ authenticate_param1,
2049+ TokenAmount :: zero ( ) ,
2050+ RawBytes :: default ( ) ,
2051+ ExitCode :: OK ,
2052+ ) ;
2053+
2054+ let ret: PublishStorageDealsReturn = rt
2055+ . call :: < MarketActor > (
2056+ Method :: PublishStorageDealsExported as MethodNum ,
2057+ & RawBytes :: serialize ( params) . unwrap ( ) ,
2058+ )
2059+ . unwrap ( )
2060+ . deserialize ( )
2061+ . unwrap ( ) ;
2062+
2063+ assert ! ( ret. valid_deals. get( 0 ) ) ;
2064+
2065+ rt. verify ( ) ;
2066+ check_state ( & rt) ;
2067+ }
0 commit comments