Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
c49a1ee
Remove stale TODOs
athei Oct 10, 2025
2c69ffd
Rename gas metering to weight metering
TorstenStueber Oct 25, 2025
faa5866
Implement general resource metering
TorstenStueber Oct 30, 2025
43e1bd1
Resolve rebase conflicts
TorstenStueber Oct 30, 2025
ef060f5
Fix conflicts and existing tests
TorstenStueber Nov 1, 2025
6a8afd8
Use max storage deposit for dry runs
TorstenStueber Nov 3, 2025
a96a66f
Use SignedGas instead of StorageDeposit
TorstenStueber Nov 4, 2025
11b57ce
Add doc comments
TorstenStueber Nov 4, 2025
548a143
Use correct gas handling in tracer
TorstenStueber Nov 5, 2025
bdeddd5
Merge master
TorstenStueber Nov 5, 2025
947a492
Add tweaks for dry running
TorstenStueber Nov 5, 2025
7454d91
Merge latest changes from master
TorstenStueber Nov 10, 2025
66cfae5
Add call stipends for *CALL instructions
TorstenStueber Nov 13, 2025
d8b2d89
Merge latest changes from master
TorstenStueber Nov 13, 2025
3115020
Fix errors in other crates
TorstenStueber Nov 13, 2025
695357c
Fix errors in other crates (2)
TorstenStueber Nov 13, 2025
3ee4ed5
Fix errors in other crates (3)
TorstenStueber Nov 13, 2025
9117c8c
Fix errors in other crates (4)
TorstenStueber Nov 13, 2025
cd7cbf2
Fix calculation of max storage deposit
TorstenStueber Nov 14, 2025
2a308bc
Merge branch 'master' into torsten/gas-fixes
pgherveou Nov 17, 2025
e5a3668
Add tests
TorstenStueber Nov 18, 2025
a20f8ed
Fix weight tracing (issue 8362)
TorstenStueber Nov 18, 2025
3fff1a5
Fix max deposit calculation
TorstenStueber Nov 19, 2025
0d2b69f
Merge branch 'torsten/gas-fixes' of github.com:paritytech/polkadot-sd…
TorstenStueber Nov 19, 2025
1c928c9
Add test for max deposits
TorstenStueber Nov 19, 2025
e644aff
Merge branch 'master' into torsten/gas-fixes
TorstenStueber Nov 19, 2025
14947c1
Fix issue with dry running length encoding
TorstenStueber Nov 19, 2025
ed242f0
Merge branch 'master' into torsten/gas-fixes
TorstenStueber Nov 19, 2025
74135f8
Set max block gas to u64::MAX
TorstenStueber Nov 19, 2025
631f6d5
Lower the concurrency of the DT framework
0xOmarA Nov 20, 2025
c7eefbd
Update the concurrency value of the DT framework.
0xOmarA Nov 20, 2025
57b1c13
Merge branch 'master' into torsten/gas-fixes
pgherveou Nov 20, 2025
2f5077e
fix BENCH_INIT_CODE
pgherveou Nov 20, 2025
2f6624a
master merge fix
pgherveou Nov 20, 2025
37e46f9
Add tracing logs
TorstenStueber Nov 21, 2025
7fd98e6
Clean up create call arguments
TorstenStueber Nov 21, 2025
dd3ca1e
Merge branch 'torsten/gas-fixes' of github.com:paritytech/polkadot-sd…
TorstenStueber Nov 21, 2025
c604122
Add optimizations and correct numerical calculations
TorstenStueber Nov 21, 2025
4466f09
Merge branch 'master' into torsten/gas-fixes
TorstenStueber Nov 21, 2025
8bbb05a
Fix code in other crates
TorstenStueber Nov 21, 2025
e722626
Set standard differential test concurrency
TorstenStueber Nov 23, 2025
43f54eb
Improve code consistency
TorstenStueber Nov 23, 2025
e6fcef8
Fix doc comment
TorstenStueber Nov 24, 2025
4f1419a
Lower differential testing concurrency
TorstenStueber Nov 24, 2025
cc32190
Make tests less brittle
TorstenStueber Nov 24, 2025
539a9e9
Update from github-actions[bot] running command 'prdoc --audience run…
github-actions[bot] Nov 24, 2025
5a0919b
Update from github-actions[bot] running command 'bench --runtime dev …
github-actions[bot] Nov 24, 2025
0f55b11
Implement PR feedback
TorstenStueber Nov 25, 2025
8e609dc
Merge branch 'torsten/gas-fixes' of github.com:paritytech/polkadot-sd…
TorstenStueber Nov 25, 2025
cab85be
Merge master
TorstenStueber Nov 25, 2025
116ba4f
Implement review feedback
TorstenStueber Nov 25, 2025
2dba778
Simplify return type of try_upload_code
TorstenStueber Nov 25, 2025
2c1acdf
Make some members crate public
TorstenStueber Nov 26, 2025
aa31d6e
simplify test
pgherveou Nov 26, 2025
7b3ae17
Merge changes from master (PR 10302, PR 10309)
TorstenStueber Nov 26, 2025
c8ced0e
Deprecate gas_meter API
TorstenStueber Nov 27, 2025
c40e273
Simplify deposit refund tests
TorstenStueber Nov 27, 2025
6d7c398
Merge remote-tracking branch 'origin/pg/gas-fix-comment' into torsten…
TorstenStueber Nov 27, 2025
7edd38f
Remove dead code
TorstenStueber Nov 27, 2025
6186657
Merge branch 'master' into torsten/gas-fixes
TorstenStueber Nov 27, 2025
9a412ae
Format
TorstenStueber Nov 27, 2025
93bf186
Fix compiler errors
TorstenStueber Nov 27, 2025
bc26308
Fix benchmark code
TorstenStueber Nov 27, 2025
8a626e7
Merge branch 'master' into torsten/gas-fixes
TorstenStueber Dec 1, 2025
72fde93
Implement PR feedback
TorstenStueber Dec 1, 2025
ac9155b
Merge branch 'master' into torsten/gas-fixes
TorstenStueber Dec 1, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/tests-evm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ jobs:
--platform ${{ matrix.platform }} \
--concurrency.number-of-nodes 10 \
--concurrency.number-of-threads 10 \
--concurrency.number-of-concurrent-tasks 1000 \
--concurrency.number-of-concurrent-tasks 100 \
--working-directory ./workdir \
--revive-dev-node.consensus manual-seal-200 \
--revive-dev-node.path ./target/release/revive-dev-node \
Expand Down
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ use frame_support::{
use hex_literal::hex;
use pallet_revive::{
test_utils::builder::{BareInstantiateBuilder, Contract},
Code,
Code, TransactionLimits,
};
use pallet_revive_fixtures::compile_module;
use pallet_uniques::{asset_ops::Item, asset_strategies::Attribute};
Expand Down Expand Up @@ -1706,8 +1706,10 @@ fn withdraw_and_deposit_erc20s() {
let initial_amount_u256 = U256::from(1_000_000_000_000u128);
let constructor_data = sol_data::Uint::<256>::abi_encode(&initial_amount_u256);
let Contract { addr: erc20_address, .. } = bare_instantiate(&sender, code)
.gas_limit(Weight::from_parts(500_000_000_000, 10 * 1024 * 1024))
.storage_deposit_limit(Balance::MAX)
.transaction_limits(TransactionLimits::WeightAndDeposit {
weight_limit: Weight::from_parts(500_000_000_000, 10 * 1024 * 1024),
deposit_limit: Balance::MAX,
})
.data(constructor_data)
.build_and_unwrap_contract();

Expand Down Expand Up @@ -1819,8 +1821,10 @@ fn smart_contract_not_erc20_will_error() {
let (code, _) = compile_module("dummy").unwrap();

let Contract { addr: non_erc20_address, .. } = bare_instantiate(&sender, code)
.gas_limit(Weight::from_parts(500_000_000_000, 10 * 1024 * 1024))
.storage_deposit_limit(Balance::MAX)
.transaction_limits(TransactionLimits::WeightAndDeposit {
weight_limit: Weight::from_parts(500_000_000_000, 10 * 1024 * 1024),
deposit_limit: Balance::MAX,
})
.build_and_unwrap_contract();

let wnd_amount_for_fees = 1_000_000_000_000u128;
Expand Down Expand Up @@ -1877,8 +1881,10 @@ fn smart_contract_does_not_return_bool_fails() {
let constructor_data = sol_data::Uint::<256>::abi_encode(&initial_amount_u256);

let Contract { addr: non_erc20_address, .. } = bare_instantiate(&sender, code)
.gas_limit(Weight::from_parts(500_000_000_000, 10 * 1024 * 1024))
.storage_deposit_limit(Balance::MAX)
.transaction_limits(TransactionLimits::WeightAndDeposit {
weight_limit: Weight::from_parts(500_000_000_000, 10 * 1024 * 1024),
deposit_limit: Balance::MAX,
})
.data(constructor_data)
.build_and_unwrap_contract();

Expand Down Expand Up @@ -1933,8 +1939,10 @@ fn expensive_erc20_runs_out_of_gas() {
let initial_amount_u256 = U256::from(1_000_000_000_000u128);
let constructor_data = sol_data::Uint::<256>::abi_encode(&initial_amount_u256);
let Contract { addr: non_erc20_address, .. } = bare_instantiate(&sender, code)
.gas_limit(Weight::from_parts(500_000_000_000, 10 * 1024 * 1024))
.storage_deposit_limit(Balance::MAX)
.transaction_limits(TransactionLimits::WeightAndDeposit {
weight_limit: Weight::from_parts(500_000_000_000, 10 * 1024 * 1024),
deposit_limit: Balance::MAX,
})
.data(constructor_data)
.build_and_unwrap_contract();

Expand Down
38 changes: 21 additions & 17 deletions cumulus/parachains/runtimes/assets/common/src/erc20_transactor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ use pallet_revive::{
primitives::{Address, U256 as EU256},
sol_types::SolCall,
},
AddressMapper, ContractResult, ExecConfig, MomentOf,
AddressMapper, ContractResult, ExecConfig, MomentOf, TransactionLimits,
};
use sp_core::{Get, H160, H256, U256};
use sp_runtime::Weight;
Expand All @@ -44,7 +44,7 @@ pub struct ERC20Transactor<
T,
Matcher,
AccountIdConverter,
GasLimit,
WeightLimit,
StorageDepositLimit,
AccountId,
TransfersCheckingAccount,
Expand All @@ -53,7 +53,7 @@ pub struct ERC20Transactor<
T,
Matcher,
AccountIdConverter,
GasLimit,
WeightLimit,
StorageDepositLimit,
AccountId,
TransfersCheckingAccount,
Expand All @@ -65,15 +65,15 @@ impl<
T: pallet_revive::Config<AccountId = AccountId>,
AccountIdConverter: ConvertLocation<AccountId>,
Matcher: MatchesFungibles<H160, u128>,
GasLimit: Get<Weight>,
WeightLimit: Get<Weight>,
StorageDepositLimit: Get<BalanceOf<T>>,
TransfersCheckingAccount: Get<AccountId>,
> TransactAsset
for ERC20Transactor<
T,
Matcher,
AccountIdConverter,
GasLimit,
WeightLimit,
StorageDepositLimit,
AccountId,
TransfersCheckingAccount,
Expand Down Expand Up @@ -116,24 +116,26 @@ where
// We need to map the 32 byte checking account to a 20 byte account.
let checking_account_eth = T::AddressMapper::to_address(&TransfersCheckingAccount::get());
let checking_address = Address::from(Into::<[u8; 20]>::into(checking_account_eth));
let gas_limit = GasLimit::get();
let weight_limit = WeightLimit::get();
// To withdraw, we actually transfer to the checking account.
// We do this using the solidity ERC20 interface.
let data =
IERC20::transferCall { to: checking_address, value: EU256::from(amount) }.abi_encode();
let ContractResult { result, gas_consumed, storage_deposit, .. } =
let ContractResult { result, weight_consumed, storage_deposit, .. } =
pallet_revive::Pallet::<T>::bare_call(
OriginFor::<T>::signed(who.clone()),
asset_id,
U256::zero(),
gas_limit,
StorageDepositLimit::get(),
TransactionLimits::WeightAndDeposit {
weight_limit,
deposit_limit: StorageDepositLimit::get(),
},
data,
ExecConfig::new_substrate_tx(),
);
// We need to return this surplus for the executor to allow refunding it.
let surplus = gas_limit.saturating_sub(gas_consumed);
tracing::trace!(target: "xcm::transactor::erc20::withdraw", ?gas_consumed, ?surplus, ?storage_deposit);
let surplus = weight_limit.saturating_sub(weight_consumed);
tracing::trace!(target: "xcm::transactor::erc20::withdraw", ?weight_consumed, ?surplus, ?storage_deposit);
if let Ok(return_value) = result {
tracing::trace!(target: "xcm::transactor::erc20::withdraw", ?return_value, "Return value by withdraw_asset");
if return_value.did_revert() {
Expand Down Expand Up @@ -179,20 +181,22 @@ where
// To deposit, we actually transfer from the checking account to the beneficiary.
// We do this using the solidity ERC20 interface.
let data = IERC20::transferCall { to: address, value: EU256::from(amount) }.abi_encode();
let gas_limit = GasLimit::get();
let ContractResult { result, gas_consumed, storage_deposit, .. } =
let weight_limit = WeightLimit::get();
let ContractResult { result, weight_consumed, storage_deposit, .. } =
pallet_revive::Pallet::<T>::bare_call(
OriginFor::<T>::signed(TransfersCheckingAccount::get()),
asset_id,
U256::zero(),
gas_limit,
StorageDepositLimit::get(),
TransactionLimits::WeightAndDeposit {
weight_limit,
deposit_limit: StorageDepositLimit::get(),
},
data,
ExecConfig::new_substrate_tx(),
);
// We need to return this surplus for the executor to allow refunding it.
let surplus = gas_limit.saturating_sub(gas_consumed);
tracing::trace!(target: "xcm::transactor::erc20::deposit", ?gas_consumed, ?surplus, ?storage_deposit);
let surplus = weight_limit.saturating_sub(weight_consumed);
tracing::trace!(target: "xcm::transactor::erc20::deposit", ?weight_consumed, ?surplus, ?storage_deposit);
if let Ok(return_value) = result {
tracing::trace!(target: "xcm::transactor::erc20::deposit", ?return_value, "Return value");
if return_value.did_revert() {
Expand Down
Loading
Loading