Skip to content

Commit 7cb3333

Browse files
author
Mikhail Tagirov
authored
VM assert (#495)
Signed-off-by: Mikhail Tagirov <[email protected]>
1 parent fe1a65e commit 7cb3333

File tree

109 files changed

+1059
-1546
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

109 files changed

+1059
-1546
lines changed

core/vm/actor/builtin/states/market/market_actor_state.cpp

Lines changed: 35 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,14 @@
1111

1212
namespace fc::vm::actor::builtin::states {
1313
using primitives::kChainEpochUndefined;
14-
using runtime::Runtime;
1514
using toolchain::Toolchain;
1615
using namespace types::market;
1716

1817
outcome::result<void> MarketActorState::unlockBalance(
19-
const Runtime &runtime,
2018
const Address &address,
2119
const TokenAmount &amount,
2220
BalanceLockingReason lock_reason) {
23-
VM_ASSERT(amount >= 0);
21+
OUTCOME_TRY(check(amount >= 0));
2422

2523
OUTCOME_TRY(locked_table.subtract(address, amount));
2624

@@ -39,41 +37,34 @@ namespace fc::vm::actor::builtin::states {
3937
}
4038

4139
outcome::result<void> MarketActorState::slashBalance(
42-
const Runtime &runtime,
4340
const Address &address,
4441
const TokenAmount &amount,
4542
BalanceLockingReason reason) {
46-
VM_ASSERT(amount >= 0);
43+
OUTCOME_TRY(check(amount >= 0));
4744
OUTCOME_TRY(escrow_table.subtract(address, amount));
48-
return unlockBalance(runtime, address, amount, reason);
45+
return unlockBalance(address, amount, reason);
4946
}
5047

5148
outcome::result<void> MarketActorState::transferBalance(
52-
const Runtime &runtime,
53-
const Address &from,
54-
const Address &to,
55-
const TokenAmount &amount) {
56-
VM_ASSERT(amount >= 0);
49+
const Address &from, const Address &to, const TokenAmount &amount) {
50+
OUTCOME_TRY(check(amount >= 0));
5751
CHANGE_ERROR_ABORT(escrow_table.subtract(from, amount),
5852
VMExitCode::kErrIllegalState);
5953
CHANGE_ERROR_ABORT(
60-
unlockBalance(
61-
runtime, from, amount, BalanceLockingReason::kClientStorageFee),
54+
unlockBalance(from, amount, BalanceLockingReason::kClientStorageFee),
6255
VMExitCode::kErrIllegalState);
6356
CHANGE_ERROR_ABORT(escrow_table.add(to, amount),
6457
VMExitCode::kErrIllegalState);
6558
return outcome::success();
6659
}
6760

6861
outcome::result<TokenAmount> MarketActorState::processDealInitTimedOut(
69-
const Runtime &runtime, const DealProposal &deal) {
70-
CHANGE_ERROR_ABORT(unlockBalance(runtime,
71-
deal.client,
62+
const DealProposal &deal) {
63+
CHANGE_ERROR_ABORT(unlockBalance(deal.client,
7264
deal.getTotalStorageFee(),
7365
BalanceLockingReason::kClientStorageFee),
7466
VMExitCode::kErrIllegalState);
75-
CHANGE_ERROR_ABORT(unlockBalance(runtime,
76-
deal.client,
67+
CHANGE_ERROR_ABORT(unlockBalance(deal.client,
7768
deal.client_collateral,
7869
BalanceLockingReason::kClientCollateral),
7970
VMExitCode::kErrIllegalState);
@@ -82,13 +73,11 @@ namespace fc::vm::actor::builtin::states {
8273
collateralPenaltyForDealActivationMissed(deal.provider_collateral);
8374
const auto amount_remaining = deal.providerBalanceRequirement() - slashed;
8475

85-
CHANGE_ERROR_ABORT(slashBalance(runtime,
86-
deal.provider,
87-
slashed,
88-
BalanceLockingReason::kProviderCollateral),
89-
VMExitCode::kErrIllegalState);
90-
CHANGE_ERROR_ABORT(unlockBalance(runtime,
91-
deal.provider,
76+
CHANGE_ERROR_ABORT(
77+
slashBalance(
78+
deal.provider, slashed, BalanceLockingReason::kProviderCollateral),
79+
VMExitCode::kErrIllegalState);
80+
CHANGE_ERROR_ABORT(unlockBalance(deal.provider,
9281
amount_remaining,
9382
BalanceLockingReason::kProviderCollateral),
9483
VMExitCode::kErrIllegalState);
@@ -97,18 +86,14 @@ namespace fc::vm::actor::builtin::states {
9786
}
9887

9988
outcome::result<void> MarketActorState::processDealExpired(
100-
const Runtime &runtime,
101-
const DealProposal &deal,
102-
const DealState &deal_state) {
103-
VM_ASSERT(deal_state.sector_start_epoch != kChainEpochUndefined);
89+
const DealProposal &deal, const DealState &deal_state) {
90+
OUTCOME_TRY(check(deal_state.sector_start_epoch != kChainEpochUndefined));
10491

105-
CHANGE_ERROR_ABORT(unlockBalance(runtime,
106-
deal.provider,
92+
CHANGE_ERROR_ABORT(unlockBalance(deal.provider,
10793
deal.provider_collateral,
10894
BalanceLockingReason::kProviderCollateral),
10995
VMExitCode::kErrIllegalState);
110-
CHANGE_ERROR_ABORT(unlockBalance(runtime,
111-
deal.client,
96+
CHANGE_ERROR_ABORT(unlockBalance(deal.client,
11297
deal.client_collateral,
11398
BalanceLockingReason::kClientCollateral),
11499
VMExitCode::kErrIllegalState);
@@ -127,16 +112,16 @@ namespace fc::vm::actor::builtin::states {
127112
const auto updated{deal_state.last_updated_epoch != kChainEpochUndefined};
128113
const auto slashed{deal_state.slash_epoch != kChainEpochUndefined};
129114

130-
VM_ASSERT(!updated || (deal_state.last_updated_epoch <= epoch));
115+
OUTCOME_TRY(check(!updated || (deal_state.last_updated_epoch <= epoch)));
131116

132117
if (deal.start_epoch > epoch) {
133118
return std::make_tuple(slashed_sum, kChainEpochUndefined, false);
134119
}
135120

136121
auto payment_end_epoch = deal.end_epoch;
137122
if (slashed) {
138-
VM_ASSERT(epoch >= deal_state.slash_epoch);
139-
VM_ASSERT(deal_state.slash_epoch <= deal.end_epoch);
123+
OUTCOME_TRY(check(epoch >= deal_state.slash_epoch));
124+
OUTCOME_TRY(check(deal_state.slash_epoch <= deal.end_epoch));
140125
payment_end_epoch = deal_state.slash_epoch;
141126
} else if (epoch < payment_end_epoch) {
142127
payment_end_epoch = epoch;
@@ -152,8 +137,7 @@ namespace fc::vm::actor::builtin::states {
152137
epochs_elapsed * deal.storage_price_per_epoch;
153138

154139
if (total_payment > 0) {
155-
OUTCOME_TRY(
156-
transferBalance(runtime, deal.client, deal.provider, total_payment));
140+
OUTCOME_TRY(transferBalance(deal.client, deal.provider, total_payment));
157141
}
158142

159143
const auto utils = Toolchain::createMarketUtils(runtime);
@@ -162,23 +146,20 @@ namespace fc::vm::actor::builtin::states {
162146
OUTCOME_TRY(remaining,
163147
utils->dealGetPaymentRemaining(deal, deal_state.slash_epoch));
164148

165-
CHANGE_ERROR_ABORT(unlockBalance(runtime,
166-
deal.client,
167-
remaining,
168-
BalanceLockingReason::kClientStorageFee),
169-
VMExitCode::kErrIllegalState);
149+
CHANGE_ERROR_ABORT(
150+
unlockBalance(
151+
deal.client, remaining, BalanceLockingReason::kClientStorageFee),
152+
VMExitCode::kErrIllegalState);
170153

171-
CHANGE_ERROR_ABORT(unlockBalance(runtime,
172-
deal.client,
154+
CHANGE_ERROR_ABORT(unlockBalance(deal.client,
173155
deal.client_collateral,
174156
BalanceLockingReason::kClientCollateral),
175157
VMExitCode::kErrIllegalState);
176158

177159
slashed_sum = deal.provider_collateral;
178160

179161
CHANGE_ERROR_ABORT(
180-
slashBalance(runtime,
181-
deal.provider,
162+
slashBalance(deal.provider,
182163
slashed_sum,
183164
BalanceLockingReason::kProviderCollateral),
184165
VMExitCode::kErrIllegalState);
@@ -187,7 +168,7 @@ namespace fc::vm::actor::builtin::states {
187168
}
188169

189170
if (epoch >= deal.end_epoch) {
190-
OUTCOME_TRY(processDealExpired(runtime, deal, deal_state));
171+
OUTCOME_TRY(processDealExpired(deal, deal_state));
191172
return std::make_tuple(slashed_sum, kChainEpochUndefined, true);
192173
}
193174

@@ -197,10 +178,8 @@ namespace fc::vm::actor::builtin::states {
197178
}
198179

199180
outcome::result<void> MarketActorState::maybeLockBalance(
200-
const Runtime &runtime,
201-
const Address &address,
202-
const TokenAmount &amount) {
203-
VM_ASSERT(amount >= 0);
181+
const Address &address, const TokenAmount &amount) {
182+
OUTCOME_TRY(check(amount >= 0));
204183

205184
CHANGE_ERROR_A(
206185
locked, locked_table.get(address), VMExitCode::kErrIllegalState);
@@ -218,11 +197,10 @@ namespace fc::vm::actor::builtin::states {
218197
}
219198

220199
outcome::result<void> MarketActorState::lockClientAndProviderBalances(
221-
const Runtime &runtime, const DealProposal &deal) {
222-
OUTCOME_TRY(maybeLockBalance(
223-
runtime, deal.client, deal.clientBalanceRequirement()));
224-
OUTCOME_TRY(maybeLockBalance(
225-
runtime, deal.provider, deal.providerBalanceRequirement()));
200+
const DealProposal &deal) {
201+
OUTCOME_TRY(maybeLockBalance(deal.client, deal.clientBalanceRequirement()));
202+
OUTCOME_TRY(
203+
maybeLockBalance(deal.provider, deal.providerBalanceRequirement()));
226204
total_client_locked_collateral += deal.client_collateral;
227205
total_client_storage_fee += deal.getTotalStorageFee();
228206
total_provider_locked_collateral += deal.provider_collateral;

core/vm/actor/builtin/states/market/market_actor_state.hpp

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,12 @@ namespace fc::vm::actor::builtin::states {
2727
using primitives::DealId;
2828
using primitives::TokenAmount;
2929
using primitives::address::Address;
30+
using runtime::Runtime;
31+
using types::Universal;
3032
using types::market::BalanceLockingReason;
3133
using types::market::DealProposal;
3234
using types::market::DealState;
3335
using types::market::PendingProposals;
34-
using types::Universal;
3536

3637
constexpr size_t kProposalsAmtBitwidth = 5;
3738
constexpr size_t kStatesAmtBitwidth = 6;
@@ -55,41 +56,39 @@ namespace fc::vm::actor::builtin::states {
5556
TokenAmount total_client_storage_fee{};
5657

5758
// Methods
58-
outcome::result<void> unlockBalance(const runtime::Runtime &runtime,
59-
const Address &address,
59+
outcome::result<void> unlockBalance(const Address &address,
6060
const TokenAmount &amount,
6161
BalanceLockingReason lock_reason);
6262

63-
outcome::result<void> slashBalance(const runtime::Runtime &runtime,
64-
const Address &address,
63+
outcome::result<void> slashBalance(const Address &address,
6564
const TokenAmount &amount,
6665
BalanceLockingReason reason);
6766

68-
outcome::result<void> transferBalance(const runtime::Runtime &runtime,
69-
const Address &from,
67+
outcome::result<void> transferBalance(const Address &from,
7068
const Address &to,
7169
const TokenAmount &amount);
7270

7371
outcome::result<TokenAmount> processDealInitTimedOut(
74-
const runtime::Runtime &runtime, const DealProposal &deal);
72+
const DealProposal &deal);
7573

76-
virtual outcome::result<void> processDealExpired(const runtime::Runtime &runtime,
77-
const DealProposal &deal,
78-
const DealState &deal_state);
74+
virtual outcome::result<void> processDealExpired(
75+
const DealProposal &deal, const DealState &deal_state);
7976

8077
virtual outcome::result<std::tuple<TokenAmount, ChainEpoch, bool>>
81-
updatePendingDealState(runtime::Runtime &runtime,
78+
updatePendingDealState(Runtime &runtime,
8279
DealId deal_id,
8380
const DealProposal &deal,
8481
const DealState &deal_state,
8582
ChainEpoch epoch);
8683

87-
outcome::result<void> maybeLockBalance(const runtime::Runtime &runtime,
88-
const Address &address,
84+
outcome::result<void> maybeLockBalance(const Address &address,
8985
const TokenAmount &amount);
9086

9187
outcome::result<void> lockClientAndProviderBalances(
92-
const runtime::Runtime &runtime, const DealProposal &deal);
88+
const DealProposal &deal);
89+
90+
protected:
91+
virtual outcome::result<void> check(bool condition) const = 0;
9392
};
9493

9594
using MarketActorStatePtr = Universal<MarketActorState>;

core/vm/actor/builtin/states/market/v0/market_actor_state.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,16 @@
88
#include "vm/actor/builtin/states/market/market_actor_state.hpp"
99

1010
#include "codec/cbor/streams_annotation.hpp"
11+
#include "vm/exit_code/exit_code.hpp"
1112

1213
namespace fc::vm::actor::builtin::v0::market {
1314

14-
struct MarketActorState : states::MarketActorState {};
15+
struct MarketActorState : states::MarketActorState {
16+
protected:
17+
outcome::result<void> check(bool condition) const override {
18+
return vm_assert(condition);
19+
}
20+
};
1521
CBOR_TUPLE(MarketActorState,
1622
proposals,
1723
states,

0 commit comments

Comments
 (0)