Skip to content

Commit 573f45d

Browse files
committed
Miner: Export RepayDebt
1 parent 1d54c88 commit 573f45d

File tree

2 files changed

+54
-2
lines changed

2 files changed

+54
-2
lines changed

actors/miner/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ pub enum Method {
130130
WithdrawBalanceExported = frc42_dispatch::method_hash!("WithdrawBalance"),
131131
ChangeMultiaddrsExported = frc42_dispatch::method_hash!("ChangeMultiaddrs"),
132132
ConfirmUpdateWorkerKeyExported = frc42_dispatch::method_hash!("ConfirmUpdateWorkerKey"),
133+
RepayDebtExported = frc42_dispatch::method_hash!("RepayDebt"),
133134
ChangeBenificiaryExported = frc42_dispatch::method_hash!("ChangeBeneficiary"),
134135
GetBeneficiaryExported = frc42_dispatch::method_hash!("GetBeneficiary"),
135136
GetOwnerExported = frc42_dispatch::method_hash!("GetOwner"),
@@ -5018,7 +5019,7 @@ impl ActorCode for Actor {
50185019
Self::confirm_update_worker_key(rt)?;
50195020
Ok(RawBytes::default())
50205021
}
5021-
Some(Method::RepayDebt) => {
5022+
Some(Method::RepayDebt) | Some(Method::RepayDebtExported) => {
50225023
Self::repay_debt(rt)?;
50235024
Ok(RawBytes::default())
50245025
}

actors/miner/tests/repay_debts.rs

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1-
use fil_actor_miner::locked_reward_from_reward;
1+
use fil_actor_miner::{locked_reward_from_reward, Actor, Method};
2+
use fil_actors_runtime::test_utils::{expect_abort_contains_message, make_identity_cid};
3+
use fil_actors_runtime::BURNT_FUNDS_ACTOR_ADDR;
4+
use fvm_ipld_encoding::RawBytes;
25
use fvm_shared::bigint::Zero;
36
use fvm_shared::clock::ChainEpoch;
47
use fvm_shared::econ::TokenAmount;
8+
use fvm_shared::error::ExitCode;
9+
use fvm_shared::METHOD_SEND;
510

611
mod util;
712
use util::*;
@@ -48,6 +53,52 @@ fn pay_debt_entirely_from_balance() {
4853
h.check_state(&rt);
4954
}
5055

56+
#[test]
57+
fn repay_debt_restricted_correctly() {
58+
let h = ActorHarness::new(PERIOD_OFFSET);
59+
let mut rt = h.new_runtime();
60+
h.construct_and_verify(&mut rt);
61+
62+
// introduce fee debt
63+
let mut st = h.get_state(&rt);
64+
let fee_debt: TokenAmount = 4 * &*BIG_BALANCE;
65+
st.fee_debt = fee_debt.clone();
66+
rt.replace_state(&st);
67+
68+
rt.set_caller(make_identity_cid(b"1234"), h.owner);
69+
70+
// fail to call the unexported method
71+
expect_abort_contains_message(
72+
ExitCode::USR_FORBIDDEN,
73+
"must be built-in",
74+
rt.call::<Actor>(Method::RepayDebt as u64, &RawBytes::default()),
75+
);
76+
77+
// can call the exported method
78+
79+
rt.expect_validate_caller_addr(h.caller_addrs());
80+
81+
rt.add_balance(fee_debt.clone());
82+
rt.set_received(fee_debt.clone());
83+
84+
rt.expect_send(
85+
BURNT_FUNDS_ACTOR_ADDR,
86+
METHOD_SEND,
87+
RawBytes::default(),
88+
fee_debt.clone(),
89+
RawBytes::default(),
90+
ExitCode::OK,
91+
);
92+
93+
rt.call::<Actor>(Method::RepayDebtExported as u64, &RawBytes::default()).unwrap();
94+
95+
rt.verify();
96+
97+
let st = h.get_state(&rt);
98+
assert!(st.fee_debt.is_zero());
99+
h.check_state(&rt);
100+
}
101+
51102
#[test]
52103
fn partially_repay_debt() {
53104
let h = ActorHarness::new(PERIOD_OFFSET);

0 commit comments

Comments
 (0)