Skip to content

Commit e5ce844

Browse files
authored
Consume all available gas when gas limit has been reached (#1650)
* Consume all available gas when gas limit has been reached * update mozilla-actions/sccache-action * fix test
1 parent 3de7b5b commit e5ce844

File tree

4 files changed

+24
-21
lines changed

4 files changed

+24
-21
lines changed

.github/workflows/lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ jobs:
4545
${{ runner.os }}-cargo-
4646
4747
- name: Run sccache
48-
uses: mozilla-actions/[email protected].7
48+
uses: mozilla-actions/[email protected].9
4949

5050
- name: Install Rust toolchain
5151
run: make setup

.github/workflows/test.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ jobs:
4141
${{ runner.os }}-cargo-
4242
4343
- name: Run sccache
44-
uses: mozilla-actions/[email protected].7
44+
uses: mozilla-actions/[email protected].9
4545

4646
- name: Install Rust toolchain
4747
run: make setup
@@ -75,7 +75,7 @@ jobs:
7575
${{ runner.os }}-cargo-
7676
7777
- name: Run sccache
78-
uses: mozilla-actions/[email protected].7
78+
uses: mozilla-actions/[email protected].9
7979

8080
- name: Install Rust toolchain
8181
run: make setup

frame/evm/src/tests.rs

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,8 @@ mod proof_size_test {
415415
let mut weight_limit = FixedGasWeightMapping::<Test>::gas_to_weight(gas_limit, true);
416416

417417
// Artifically set a lower proof size limit so we OOG this instead gas.
418-
*weight_limit.proof_size_mut() = weight_limit.proof_size() / 2;
418+
let proof_size_limit = weight_limit.proof_size() / 2;
419+
*weight_limit.proof_size_mut() = proof_size_limit;
419420

420421
// Create proof size test contract
421422
let result = create_proof_size_test_contract(gas_limit, None).expect("create succeeds");
@@ -442,25 +443,13 @@ mod proof_size_test {
442443
)
443444
.expect("call succeeds");
444445

445-
// Find how many random balance reads can we do with the available proof size.
446-
let reading_main_contract_len =
447-
AccountCodes::<Test>::get(call_contract_address).len() as u64;
448-
let overhead = reading_main_contract_len
449-
+ ACCOUNT_CODES_METADATA_PROOF_SIZE
450-
+ IS_EMPTY_CHECK_PROOF_SIZE;
451-
let available_proof_size = weight_limit.proof_size() - overhead;
452-
let number_balance_reads =
453-
available_proof_size.saturating_div(ACCOUNT_BASIC_PROOF_SIZE);
454-
// The actual proof size consumed by those balance reads.
455-
let expected_proof_size = overhead + (number_balance_reads * ACCOUNT_BASIC_PROOF_SIZE);
456-
457446
let actual_proof_size = result
458447
.weight_info
459448
.expect("weight info")
460449
.proof_size_usage
461450
.expect("proof size usage");
462451

463-
assert_eq!(expected_proof_size, actual_proof_size);
452+
assert_eq!(proof_size_limit, actual_proof_size);
464453
});
465454
}
466455

primitives/evm/src/lib.rs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,15 @@ impl WeightInfo {
130130
if let (Some(ref_time_usage), Some(ref_time_limit)) =
131131
(self.ref_time_usage, self.ref_time_limit)
132132
{
133-
let ref_time_usage = self.try_consume(cost, ref_time_limit, ref_time_usage)?;
134-
self.ref_time_usage = Some(ref_time_usage);
133+
match self.try_consume(cost, ref_time_limit, ref_time_usage) {
134+
Ok(ref_time_usage) => {
135+
self.ref_time_usage = Some(ref_time_usage);
136+
}
137+
Err(e) => {
138+
self.ref_time_usage = Some(ref_time_limit);
139+
return Err(e);
140+
}
141+
}
135142
}
136143
Ok(())
137144
}
@@ -140,8 +147,15 @@ impl WeightInfo {
140147
if let (Some(proof_size_usage), Some(proof_size_limit)) =
141148
(self.proof_size_usage, self.proof_size_limit)
142149
{
143-
let proof_size_usage = self.try_consume(cost, proof_size_limit, proof_size_usage)?;
144-
self.proof_size_usage = Some(proof_size_usage);
150+
match self.try_consume(cost, proof_size_limit, proof_size_usage) {
151+
Ok(proof_size_usage) => {
152+
self.proof_size_usage = Some(proof_size_usage);
153+
}
154+
Err(e) => {
155+
self.proof_size_usage = Some(proof_size_limit);
156+
return Err(e);
157+
}
158+
}
145159
}
146160
Ok(())
147161
}

0 commit comments

Comments
 (0)