Skip to content

Commit 7e4a291

Browse files
Feature/power actor methods (#123)
Signed-off-by: turuslan <[email protected]> Co-authored-by: Ruslan Tushov <[email protected]>
1 parent 25d0eb5 commit 7e4a291

File tree

16 files changed

+856
-561
lines changed

16 files changed

+856
-561
lines changed

core/vm/actor/builtin/miner/miner_actor.cpp

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,19 @@ namespace fc::vm::actor::builtin::miner {
3030
using runtime::DomainSeparationTag;
3131
using storage::amt::Amt;
3232
using storage::hamt::Hamt;
33-
using storage_power::EnrollCronEventParams;
33+
using storage_power::EnrollCronEventParameters;
3434
using storage_power::kEnrollCronEventMethodNumber;
35-
using storage_power::kOnMinerSurprisePoStFailureMethodNumber;
36-
using storage_power::kOnMinerSurprisePoStSuccessMethodNumber;
35+
using storage_power::kOnMinerWindowedPoStFailureMethodNumber;
36+
using storage_power::kOnMinerWindowedPoStSuccessMethodNumber;
3737
using storage_power::kOnSectorModifyWeightDescMethodNumber;
3838
using storage_power::kOnSectorProveCommitMethodNumber;
3939
using storage_power::kOnSectorTemporaryFaultEffectiveBeginMethodNumber;
4040
using storage_power::kOnSectorTemporaryFaultEffectiveEndMethodNumber;
4141
using storage_power::kOnSectorTerminateMethodNumber;
42-
using storage_power::OnMinerWindowedPoStFailureParams;
43-
using storage_power::OnSectorModifyWeightDescParams;
42+
using storage_power::kWindowedPostChallengeDuration;
43+
using storage_power::kWindowedPostFailureLimit;
44+
using storage_power::OnMinerWindowedPoStFailureParameters;
45+
using storage_power::OnSectorModifyWeightDescParameters;
4446
using storage_power::OnSectorProveCommitParameters;
4547
using storage_power::OnSectorTemporaryFaultEffectiveBeginParameters;
4648
using storage_power::OnSectorTemporaryFaultEffectiveEndParameters;
@@ -99,7 +101,7 @@ namespace fc::vm::actor::builtin::miner {
99101
OUTCOME_TRY(payload2, codec::cbor::encode(payload));
100102
OUTCOME_TRY(runtime.sendP(kStoragePowerAddress,
101103
kEnrollCronEventMethodNumber,
102-
EnrollCronEventParams{
104+
EnrollCronEventParameters{
103105
.event_epoch = event_epoch,
104106
.payload = Buffer{payload2},
105107
},
@@ -478,8 +480,8 @@ namespace fc::vm::actor::builtin::miner {
478480
OUTCOME_TRY(requestTerminateDeals(runtime, deals));
479481
}
480482
OUTCOME_TRY(runtime.sendP(kStoragePowerAddress,
481-
kOnMinerSurprisePoStFailureMethodNumber,
482-
OnMinerWindowedPoStFailureParams{
483+
kOnMinerWindowedPoStFailureMethodNumber,
484+
OnMinerWindowedPoStFailureParameters{
483485
.num_consecutive_failures =
484486
state.post_state.num_consecutive_failures,
485487
},
@@ -589,7 +591,7 @@ namespace fc::vm::actor::builtin::miner {
589591
state.proving_set = state.sectors;
590592
OUTCOME_TRY(runtime.commitState(state));
591593
OUTCOME_TRY(runtime.send(
592-
kStoragePowerAddress, kOnMinerSurprisePoStSuccessMethodNumber, {}, 0));
594+
kStoragePowerAddress, kOnMinerWindowedPoStSuccessMethodNumber, {}, 0));
593595
return outcome::success();
594596
}
595597

@@ -768,7 +770,7 @@ namespace fc::vm::actor::builtin::miner {
768770
runtime.sendPR<TokenAmount>(
769771
kStoragePowerAddress,
770772
kOnSectorModifyWeightDescMethodNumber,
771-
OnSectorModifyWeightDescParams{
773+
OnSectorModifyWeightDescParameters{
772774
.prev_weight = prev_weight,
773775
.prev_pledge = sector.pledge_requirement,
774776
.new_weight = new_weight,

core/vm/actor/builtin/miner/policy.hpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,6 @@ namespace fc::vm::actor::builtin::miner {
1515
using primitives::SectorStorageWeightDesc;
1616
using primitives::TokenAmount;
1717

18-
// TODO(turuslan): FIL-128 move to storage power actor
19-
constexpr EpochDuration kWindowedPostChallengeDuration{240};
20-
21-
// TODO(turuslan): FIL-128 move to storage power actor
22-
constexpr size_t kWindowedPostFailureLimit{3};
23-
2418
constexpr ChainEpoch kPoStLookback{1};
2519

2620
constexpr auto kElectionLookback{kPoStLookback};

core/vm/actor/builtin/storage_power/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ add_library(storage_power_actor
1010
)
1111
target_link_libraries(storage_power_actor
1212
actor
13+
block
1314
builtin_shared
1415
chain_epoch_codec
1516
balance_table_hamt

core/vm/actor/builtin/storage_power/policy.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
#include "vm/actor/builtin/storage_power/policy.hpp"
77

8+
#include <boost/multiprecision/cpp_int.hpp>
9+
810
namespace fc::vm::actor::builtin::storage_power {
911

1012
TokenAmount pledgePenaltyForSectorTermination(
@@ -30,4 +32,35 @@ namespace fc::vm::actor::builtin::storage_power {
3032
return weight.sector_size * weight.duration * kEpochTotalExpectedReward
3133
* kPledgeFactor / network_power;
3234
}
35+
36+
TokenAmount pledgePenaltyForWindowedPoStFailure(TokenAmount pledge,
37+
int64_t failures) {
38+
return TokenAmount{0};
39+
}
40+
41+
outcome::result<TokenAmount> pledgePenaltyForConsensusFault(
42+
TokenAmount pledge, ConsensusFaultType fault_type) {
43+
switch (fault_type) {
44+
case ConsensusFaultType::ConsensusFaultDoubleForkMining:
45+
case ConsensusFaultType::ConsensusFaultParentGrinding:
46+
case ConsensusFaultType::ConsensusFaultTimeOffsetMining:
47+
return outcome::success(pledge);
48+
}
49+
return outcome::failure(VMExitCode::STORAGE_POWER_ILLEGAL_ARGUMENT);
50+
}
51+
52+
TokenAmount rewardForConsensusSlashReport(ChainEpoch elapsed_epoch,
53+
TokenAmount collateral) {
54+
BigInt slasher_share_numerator = boost::multiprecision::pow(
55+
ConsensusFaultReporterShareGrowthRate::numerator, elapsed_epoch);
56+
BigInt slasher_share_denominator = boost::multiprecision::pow(
57+
ConsensusFaultReporterShareGrowthRate::denominator, elapsed_epoch);
58+
59+
BigInt num = slasher_share_numerator
60+
* ConsensusFaultReporterInitialShare::numerator * collateral;
61+
BigInt denom = slasher_share_denominator
62+
* ConsensusFaultReporterInitialShare::denominator;
63+
return boost::multiprecision::min((num / denom), collateral);
64+
}
65+
3366
} // namespace fc::vm::actor::builtin::storage_power

core/vm/actor/builtin/storage_power/policy.hpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,23 @@
1010

1111
namespace fc::vm::actor::builtin::storage_power {
1212

13+
using fc::primitives::ChainEpoch;
14+
using fc::primitives::EpochDuration;
1315
using fc::primitives::SectorStorageWeightDesc;
1416
using fc::primitives::StoragePower;
1517
using fc::primitives::TokenAmount;
1618
using fc::vm::actor::builtin::reward::kBlockRewardTarget;
1719

20+
enum class ConsensusFaultType : int64_t {
21+
ConsensusFaultDoubleForkMining = 1,
22+
ConsensusFaultParentGrinding = 2,
23+
ConsensusFaultTimeOffsetMining = 3
24+
};
25+
26+
constexpr EpochDuration kWindowedPostChallengeDuration{240};
27+
28+
constexpr size_t kWindowedPostFailureLimit{3};
29+
1830
/**
1931
* Total expected block reward per epoch (per-winner reward * expected
2032
* winners), as input to pledge requirement
@@ -27,6 +39,16 @@ namespace fc::vm::actor::builtin::storage_power {
2739
*/
2840
inline static const BigInt kPledgeFactor{3};
2941

42+
struct ConsensusFaultReporterInitialShare {
43+
inline static const BigInt numerator{1};
44+
inline static const BigInt denominator{1000};
45+
};
46+
47+
struct ConsensusFaultReporterShareGrowthRate {
48+
inline static const BigInt numerator{102813};
49+
inline static const BigInt denominator{100000};
50+
};
51+
3052
enum class SectorTerminationType : int {
3153
// Implicit termination after all deals expire
3254
SECTOR_TERMINATION_EXPIRED = 0,
@@ -49,6 +71,17 @@ namespace fc::vm::actor::builtin::storage_power {
4971
TokenAmount pledgeForWeight(const SectorStorageWeightDesc &weight,
5072
StoragePower network_power);
5173

74+
/** Penalty to pledge collateral for repeated failure to prove storage */
75+
TokenAmount pledgePenaltyForWindowedPoStFailure(TokenAmount pledge,
76+
int64_t failures);
77+
78+
/** Penalty to pledge collateral for a consensus fault */
79+
outcome::result<TokenAmount> pledgePenaltyForConsensusFault(
80+
TokenAmount pledge, ConsensusFaultType fault_type);
81+
82+
TokenAmount rewardForConsensusSlashReport(ChainEpoch elapsed_epoch,
83+
TokenAmount collateral);
84+
5285
} // namespace fc::vm::actor::builtin::storage_power
5386

5487
#endif // CPP_FILECOIN_VM_ACTOR_BUILTIN_STORAGE_POWER_POLICY_HPP

0 commit comments

Comments
 (0)