Skip to content

Commit f7630fa

Browse files
committed
chore: remove magic numbers in tests
1 parent 977e915 commit f7630fa

File tree

14 files changed

+98
-134
lines changed

14 files changed

+98
-134
lines changed

actors/miner/src/ext.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ pub mod power {
9393
pub const SUBMIT_POREP_FOR_BULK_VERIFY_METHOD: u64 = 8;
9494
pub const CURRENT_TOTAL_POWER_METHOD: u64 = 9;
9595

96-
#[derive(Serialize_tuple, Deserialize_tuple)]
96+
#[derive(Serialize_tuple, Deserialize_tuple, Default)]
9797
pub struct CurrentTotalPowerReturn {
9898
#[serde(with = "bigint_ser")]
9999
pub raw_byte_power: StoragePower,
@@ -104,6 +104,7 @@ pub mod power {
104104
pub ramp_start_epoch: i64,
105105
pub ramp_duration_epochs: u64,
106106
}
107+
107108
#[derive(Serialize_tuple, Deserialize_tuple)]
108109
pub struct EnrollCronEventParams {
109110
pub event_epoch: ChainEpoch,

actors/miner/src/lib.rs

Lines changed: 11 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -186,12 +186,7 @@ impl Actor {
186186
check_valid_post_proof_type(rt.policy(), params.window_post_proof_type)?;
187187

188188
let balance = rt.current_balance();
189-
let sector_size = params
190-
.window_post_proof_type
191-
.sector_size()
192-
.map_err(|e| actor_error!(illegal_argument, "invalid sector size: {}", e))?;
193-
194-
let deposit = calculate_create_miner_deposit(rt, params.network_qap, sector_size)?;
189+
let deposit = calculate_create_miner_deposit(rt)?;
195190
if balance < deposit {
196191
return Err(actor_error!(insufficient_funds;
197192
"not enough balance to lock for create miner deposit: \
@@ -5446,36 +5441,19 @@ fn activate_new_sector_infos(
54465441

54475442
/// Calculate create miner deposit by MINIMUM_CONSENSUS_POWER x StateMinerInitialPledgeCollateral
54485443
/// See FIP-0077, https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0077.md
5449-
pub fn calculate_create_miner_deposit(
5450-
rt: &impl Runtime,
5451-
network_qap: FilterEstimate,
5452-
sector_size: SectorSize,
5453-
) -> Result<TokenAmount, ActorError> {
5454-
// set network pledge inputs
5444+
pub fn calculate_create_miner_deposit(rt: &impl Runtime) -> Result<TokenAmount, ActorError> {
54555445
let rew = request_current_epoch_block_reward(rt)?;
54565446
let pwr = request_current_total_power(rt)?;
5457-
let circulating_supply = rt.total_fil_circ_supply();
5458-
let pledge_inputs = NetworkPledgeInputs {
5459-
network_qap,
5460-
network_baseline: rew.this_epoch_baseline_power,
5461-
circulating_supply,
5462-
epoch_reward: rew.this_epoch_reward_smoothed,
5463-
epochs_since_ramp_start: rt.curr_epoch() - pwr.ramp_start_epoch,
5464-
ramp_duration_epochs: pwr.ramp_duration_epochs,
5465-
};
54665447

5467-
let sector_number = MINIMUM_CONSENSUS_POWER / sector_size as i64;
5468-
let power = qa_power_for_weight(sector_size, MIN_SECTOR_EXPIRATION, &BigInt::zero());
5469-
let sector_initial_pledge = initial_pledge_for_power(
5470-
&power,
5471-
&pledge_inputs.network_baseline,
5472-
&pledge_inputs.epoch_reward,
5473-
&pledge_inputs.network_qap,
5474-
&pledge_inputs.circulating_supply,
5475-
pledge_inputs.epochs_since_ramp_start,
5476-
pledge_inputs.ramp_duration_epochs,
5477-
);
5478-
Ok(sector_initial_pledge * sector_number)
5448+
Ok(initial_pledge_for_power(
5449+
&BigInt::from(MINIMUM_CONSENSUS_POWER),
5450+
&rew.this_epoch_baseline_power,
5451+
&rew.this_epoch_reward_smoothed,
5452+
&pwr.quality_adj_power_smoothed,
5453+
&rt.total_fil_circ_supply(),
5454+
rt.curr_epoch() - pwr.ramp_start_epoch,
5455+
pwr.ramp_duration_epochs,
5456+
))
54795457
}
54805458

54815459
pub struct SectorPiecesActivationInput {

actors/miner/src/types.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ pub struct MinerConstructorParams {
4545
#[serde(with = "strict_bytes")]
4646
pub peer_id: Vec<u8>,
4747
pub multi_addresses: Vec<BytesDe>,
48-
pub network_qap: FilterEstimate,
4948
}
5049

5150
#[derive(Serialize_tuple, Deserialize_tuple)]

actors/miner/tests/miner_actor_test_construction.rs

Lines changed: 15 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
use fil_actors_runtime::reward::FilterEstimate;
2+
use fil_actors_runtime::{INIT_ACTOR_ADDR, REWARD_ACTOR_ADDR};
3+
use fil_actors_runtime::{STORAGE_POWER_ACTOR_ADDR, test_utils::*};
4+
15
use fil_actor_account::Method as AccountMethod;
26
use fil_actor_miner::{
37
Actor, Deadline, Deadlines, Method, MinerConstructorParams as ConstructorParams, State,
48
};
59
use fil_actor_power::{CurrentTotalPowerReturn, Method as PowerMethod};
610
use fil_actor_reward::{Method as RewardMethod, ThisEpochRewardReturn};
7-
use fil_actors_runtime::reward::FilterEstimate;
8-
use fil_actors_runtime::{INIT_ACTOR_ADDR, REWARD_ACTOR_ADDR};
9-
use fil_actors_runtime::{STORAGE_POWER_ACTOR_ADDR, test_utils::*};
1011

1112
use fvm_ipld_encoding::{BytesDe, CborStore};
1213
use fvm_shared::address::Address;
@@ -20,6 +21,7 @@ use fvm_ipld_encoding::ipld_block::IpldBlock;
2021
use num_traits::{FromPrimitive, Zero};
2122

2223
mod util;
24+
use util::minimum_initial_pledge;
2325

2426
#[allow(dead_code)]
2527
struct TestEnv {
@@ -40,7 +42,6 @@ fn prepare_env() -> TestEnv {
4042
let reward = TokenAmount::from_whole(10);
4143
let power = StoragePower::from_i128(1 << 50).unwrap();
4244
let epoch_reward_smooth = FilterEstimate::new(reward.atto().clone(), BigInt::from(0u8));
43-
4445
let mut env = TestEnv {
4546
receiver: Address::new_id(1000),
4647
owner: Address::new_id(100),
@@ -64,7 +65,7 @@ fn prepare_env() -> TestEnv {
6465
env.rt.caller.replace(INIT_ACTOR_ADDR);
6566
env.rt.caller_type.replace(*INIT_ACTOR_CODE_ID);
6667
// add balance for create miner deposit
67-
env.rt.add_balance(TokenAmount::from_atto(798245441765376000u64));
68+
env.rt.add_balance(minimum_initial_pledge(&env.rt, &env.power, &env.epoch_reward_smooth));
6869
env
6970
}
7071

@@ -76,7 +77,6 @@ fn constructor_params(env: &TestEnv) -> ConstructorParams {
7677
window_post_proof_type: RegisteredPoStProof::StackedDRGWindow32GiBV1P1,
7778
peer_id: env.peer_id.clone(),
7879
multi_addresses: env.multiaddrs.clone(),
79-
network_qap: env.epoch_reward_smooth.clone(),
8080
}
8181
}
8282

@@ -87,14 +87,7 @@ fn simple_construction() {
8787
this_epoch_baseline_power: env.power.clone(),
8888
this_epoch_reward_smoothed: env.epoch_reward_smooth.clone(),
8989
};
90-
let current_total_power = CurrentTotalPowerReturn {
91-
raw_byte_power: Default::default(),
92-
quality_adj_power: Default::default(),
93-
pledge_collateral: Default::default(),
94-
quality_adj_power_smoothed: Default::default(),
95-
ramp_start_epoch: Default::default(),
96-
ramp_duration_epochs: Default::default(),
97-
};
90+
let current_total_power = CurrentTotalPowerReturn::default();
9891

9992
let params = constructor_params(&env);
10093

@@ -145,7 +138,10 @@ fn simple_construction() {
145138
assert_eq!(2349, info.window_post_partition_sectors);
146139

147140
assert_eq!(TokenAmount::zero(), state.pre_commit_deposits);
148-
assert_eq!(TokenAmount::from_atto(633318697598976000u64), state.locked_funds);
141+
assert_eq!(
142+
minimum_initial_pledge(&env.rt, &env.power, &env.epoch_reward_smooth),
143+
state.locked_funds
144+
);
149145
assert_eq!(180, state.vesting_funds.load(&env.rt.store).unwrap().len());
150146
assert_ne!(Cid::default(), state.pre_committed_sectors);
151147
assert_ne!(Cid::default(), state.sectors);
@@ -156,8 +152,8 @@ fn simple_construction() {
156152
env.rt.replace_state(&state);
157153

158154
let state = env.rt.get_state::<State>();
159-
let create_depost_vesting_funds = state.vesting_funds.load(&env.rt.store).unwrap();
160-
assert!(create_depost_vesting_funds.is_empty());
155+
let create_deposit_vesting_funds = state.vesting_funds.load(&env.rt.store).unwrap();
156+
assert!(create_deposit_vesting_funds.is_empty());
161157
assert!(state.locked_funds.is_zero());
162158

163159
// according to original specs-actors test, this is set by running the code; magic...
@@ -192,14 +188,7 @@ fn fails_if_insufficient_to_cover_the_miner_creation_deposit() {
192188
this_epoch_baseline_power: env.power.clone(),
193189
this_epoch_reward_smoothed: env.epoch_reward_smooth.clone(),
194190
};
195-
let current_total_power = CurrentTotalPowerReturn {
196-
raw_byte_power: Default::default(),
197-
quality_adj_power: Default::default(),
198-
pledge_collateral: Default::default(),
199-
quality_adj_power_smoothed: Default::default(),
200-
ramp_start_epoch: Default::default(),
201-
ramp_duration_epochs: Default::default(),
202-
};
191+
let current_total_power = CurrentTotalPowerReturn::default();
203192

204193
let params = constructor_params(&env);
205194

@@ -237,14 +226,7 @@ fn control_addresses_are_resolved_during_construction() {
237226
this_epoch_baseline_power: env.power.clone(),
238227
this_epoch_reward_smoothed: env.epoch_reward_smooth.clone(),
239228
};
240-
let current_total_power = CurrentTotalPowerReturn {
241-
raw_byte_power: Default::default(),
242-
quality_adj_power: Default::default(),
243-
pledge_collateral: Default::default(),
244-
quality_adj_power_smoothed: Default::default(),
245-
ramp_start_epoch: Default::default(),
246-
ramp_duration_epochs: Default::default(),
247-
};
229+
let current_total_power = CurrentTotalPowerReturn::default();
248230

249231
let control1 = new_bls_addr(1);
250232
let control1id = Address::new_id(555);

actors/miner/tests/util.rs

Lines changed: 37 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use std::ops::Neg;
88
use anyhow::anyhow;
99
use cid::Cid;
1010
use fil_actors_runtime::reward::FilterEstimate;
11+
use fil_actors_runtime::runtime::policy_constants::MINIMUM_CONSENSUS_POWER;
1112
use fvm_ipld_amt::Amt;
1213
use fvm_ipld_bitfield::iter::Ranges;
1314
use fvm_ipld_bitfield::{BitField, UnvalidatedBitField, Validate};
@@ -38,7 +39,7 @@ use fvm_shared::{ActorID, HAMT_BIT_WIDTH, METHOD_SEND};
3839
use itertools::Itertools;
3940
use lazy_static::lazy_static;
4041
use multihash_codetable::MultihashDigest;
41-
use num_traits::{FromPrimitive, Signed};
42+
use num_traits::Signed;
4243

4344
use fil_actor_account::Method as AccountMethod;
4445
use fil_actor_market::{
@@ -132,6 +133,24 @@ pub fn setup() -> (ActorHarness, MockRuntime) {
132133
(h, rt)
133134
}
134135

136+
pub fn minimum_initial_pledge(
137+
rt: &MockRuntime,
138+
baseline_power: &StoragePower,
139+
reward_estimated: &FilterEstimate,
140+
) -> TokenAmount {
141+
let pwr = CurrentTotalPowerReturn::default();
142+
143+
initial_pledge_for_power(
144+
&BigInt::from(MINIMUM_CONSENSUS_POWER),
145+
baseline_power,
146+
reward_estimated,
147+
&pwr.quality_adj_power_smoothed,
148+
&rt.circulating_supply.borrow(),
149+
*rt.epoch.borrow() - pwr.ramp_start_epoch,
150+
pwr.ramp_duration_epochs,
151+
)
152+
}
153+
135154
pub struct ActorHarness {
136155
pub receiver: Address,
137156
pub owner: Address,
@@ -155,8 +174,6 @@ pub struct ActorHarness {
155174
pub epoch_reward_smooth: FilterEstimate,
156175
pub epoch_qa_power_smooth: FilterEstimate,
157176

158-
pub create_depost: TokenAmount,
159-
160177
pub options: HarnessOptions,
161178
}
162179

@@ -206,8 +223,6 @@ impl ActorHarness {
206223
epoch_reward_smooth: FilterEstimate::new(rwd.atto().clone(), BigInt::from(0)),
207224
epoch_qa_power_smooth: FilterEstimate::new(pwr, BigInt::from(0)),
208225

209-
create_depost: TokenAmount::from_atto(798245441765376000u64),
210-
211226
options,
212227
}
213228
}
@@ -224,24 +239,27 @@ impl ActorHarness {
224239
check_state_invariants_from_mock_runtime(rt);
225240
}
226241

227-
pub fn check_create_miner_depost_and_reset_state(&self, rt: &MockRuntime) {
242+
pub fn check_create_miner_deposit_and_reset_state(&self, rt: &MockRuntime) {
243+
let create_deposit =
244+
minimum_initial_pledge(rt, &self.baseline_power, &self.epoch_reward_smooth);
245+
228246
let mut st = self.get_state(&rt);
229-
let create_depost_vesting_funds = st.vesting_funds.load(&rt.store).unwrap();
247+
let create_deposit_vesting_funds = st.vesting_funds.load(&rt.store).unwrap();
230248

231249
// create miner deposit
232-
assert!(create_depost_vesting_funds.len() == 180);
233-
assert!(st.locked_funds == self.create_depost);
250+
assert!(create_deposit_vesting_funds.len() == 180);
251+
assert!(st.locked_funds == create_deposit);
234252

235253
// reset create miner deposit vesting funds
236254
st.vesting_funds = Default::default();
237255
st.locked_funds = TokenAmount::zero();
238256
rt.replace_state(&st);
239-
rt.set_balance(rt.get_balance() - &self.create_depost);
257+
rt.set_balance(rt.get_balance() - &create_deposit);
240258

241259
let st = self.get_state(&rt);
242-
let create_depost_vesting_funds = st.vesting_funds.load(&rt.store).unwrap();
260+
let create_deposit_vesting_funds = st.vesting_funds.load(&rt.store).unwrap();
243261

244-
assert!(create_depost_vesting_funds.is_empty());
262+
assert!(create_deposit_vesting_funds.is_empty());
245263
assert!(st.locked_funds.is_zero());
246264
}
247265

@@ -271,23 +289,12 @@ impl ActorHarness {
271289
}
272290

273291
pub fn construct_and_verify(&self, rt: &MockRuntime) {
274-
let reward = TokenAmount::from_whole(10);
275-
let power = StoragePower::from_i128(1 << 50).unwrap();
276-
let epoch_reward_smooth = FilterEstimate::new(reward.atto().clone(), BigInt::from(0u8));
277-
278292
let current_reward = ThisEpochRewardReturn {
279-
this_epoch_baseline_power: power.clone(),
280-
this_epoch_reward_smoothed: epoch_reward_smooth.clone(),
293+
this_epoch_baseline_power: self.baseline_power.clone(),
294+
this_epoch_reward_smoothed: self.epoch_reward_smooth.clone(),
281295
};
282296

283-
let current_total_power = CurrentTotalPowerReturn {
284-
raw_byte_power: Default::default(),
285-
quality_adj_power: Default::default(),
286-
pledge_collateral: Default::default(),
287-
quality_adj_power_smoothed: Default::default(),
288-
ramp_start_epoch: Default::default(),
289-
ramp_duration_epochs: Default::default(),
290-
};
297+
let current_total_power = CurrentTotalPowerReturn::default();
291298

292299
let params = ConstructorParams {
293300
owner: self.owner,
@@ -296,7 +303,6 @@ impl ActorHarness {
296303
window_post_proof_type: self.window_post_proof_type,
297304
peer_id: vec![0],
298305
multi_addresses: vec![],
299-
network_qap: epoch_reward_smooth,
300306
};
301307

302308
rt.actor_code_cids.borrow_mut().insert(self.owner, *ACCOUNT_ACTOR_CODE_ID);
@@ -305,7 +311,9 @@ impl ActorHarness {
305311
rt.actor_code_cids.borrow_mut().insert(*a, *ACCOUNT_ACTOR_CODE_ID);
306312
}
307313

308-
rt.add_balance(self.create_depost.clone());
314+
// set circulating supply non-zero so we get non-zero fees
315+
rt.set_circulating_supply(TokenAmount::from_whole(500_000));
316+
rt.add_balance(minimum_initial_pledge(rt, &self.baseline_power, &self.epoch_reward_smooth));
309317
rt.set_caller(*INIT_ACTOR_CODE_ID, INIT_ACTOR_ADDR);
310318
rt.expect_validate_caller_addr(vec![INIT_ACTOR_ADDR]);
311319
rt.expect_send_simple(
@@ -332,15 +340,13 @@ impl ActorHarness {
332340
IpldBlock::serialize_cbor(&self.worker_key).unwrap(),
333341
ExitCode::OK,
334342
);
335-
// set circulating supply non-zero so we get non-zero fees
336-
rt.set_circulating_supply(TokenAmount::from_whole(500_000));
337343

338344
let result = rt
339345
.call::<Actor>(Method::Constructor as u64, IpldBlock::serialize_cbor(&params).unwrap())
340346
.unwrap();
341347
expect_empty(result);
342348
rt.verify();
343-
self.check_create_miner_depost_and_reset_state(rt);
349+
self.check_create_miner_deposit_and_reset_state(rt);
344350
}
345351

346352
pub fn set_peer_id(&self, rt: &MockRuntime, new_id: Vec<u8>) {

actors/power/src/ext.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ pub mod miner {
4646
#[serde(with = "strict_bytes")]
4747
pub peer_id: Vec<u8>,
4848
pub multi_addresses: Vec<BytesDe>,
49-
pub network_qap: FilterEstimate,
5049
}
5150

5251
#[derive(Serialize_tuple, Deserialize_tuple)]

actors/power/src/lib.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,13 @@ impl Actor {
8383
rt.validate_immediate_caller_accept_any()?;
8484
let value = rt.message().value_received();
8585

86-
let state: State = rt.state()?;
8786
let constructor_params = RawBytes::serialize(ext::miner::MinerConstructorParams {
8887
owner: params.owner,
8988
worker: params.worker,
9089
window_post_proof_type: params.window_post_proof_type,
9190
peer_id: params.peer,
9291
multi_addresses: params.multiaddrs,
9392
control_addresses: Default::default(),
94-
network_qap: state.this_epoch_qa_power_smoothed,
9593
})?;
9694

9795
let miner_actor_code_cid = rt.get_code_cid_for_type(Type::Miner);

actors/power/src/types.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ pub struct UpdatePledgeTotalParams {
6060
pub pledge_delta: TokenAmount,
6161
}
6262

63-
#[derive(Serialize_tuple, Deserialize_tuple, Debug, Clone, Eq, PartialEq)]
63+
#[derive(Serialize_tuple, Deserialize_tuple, Debug, Default, Clone, Eq, PartialEq)]
6464
pub struct CurrentTotalPowerReturn {
6565
#[serde(with = "bigint_ser")]
6666
pub raw_byte_power: StoragePower,

0 commit comments

Comments
 (0)