Skip to content

Commit 069a4d5

Browse files
committed
Market actor: Export PublishStorageDeals (#857)
1 parent 456c44d commit 069a4d5

File tree

2 files changed

+93
-2
lines changed

2 files changed

+93
-2
lines changed

actors/market/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ pub enum Method {
7878
// Method numbers derived from FRC-0042 standards
7979
AddBalanceExported = frc42_dispatch::method_hash!("AddBalance"),
8080
WithdrawBalanceExported = frc42_dispatch::method_hash!("WithdrawBalance"),
81+
PublishStorageDealsExported = frc42_dispatch::method_hash!("PublishStorageDeals"),
8182
GetBalanceExported = frc42_dispatch::method_hash!("GetBalance"),
8283
GetDealDataCommitmentExported = frc42_dispatch::method_hash!("GetDealDataCommitment"),
8384
GetDealClientExported = frc42_dispatch::method_hash!("GetDealClient"),
@@ -1362,7 +1363,7 @@ impl ActorCode for Actor {
13621363
let res = Self::withdraw_balance(rt, cbor::deserialize_params(params)?)?;
13631364
Ok(RawBytes::serialize(res)?)
13641365
}
1365-
Some(Method::PublishStorageDeals) => {
1366+
Some(Method::PublishStorageDeals) | Some(Method::PublishStorageDealsExported) => {
13661367
let res = Self::publish_storage_deals(rt, cbor::deserialize_params(params)?)?;
13671368
Ok(RawBytes::serialize(res)?)
13681369
}

actors/market/tests/market_actor_test.rs

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)