mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-27 17:28:00 +00:00
Contracts remove deposit accounts (#14589)
* contracts: refactor currency to use fungible traits * contracts: refactor currency to use fungible traits * contracts: add minor improvements * contracts: max holds config set * contracts: fix some typos * contracts: map token errors * fix typo * contracts: add 0 balance transfer to test * contracts: not transfer if value is zero * contracts: [WIP] add StorageDepositHold * contracts: add storage deposit held event * contracts: clean up some code and comments * contracts: add deposit storage released event * contracts: update comment * contracts: update slash cannot kill account test * contracts: fix tests * contracts: add some comments to the slashing test * contracts: add some comments to the slashing test * contracts: remove references to Currency * contracts: do not transfer if from equals to * bound BalanceOf<T> * added FixedPointOperand to Balance trait * move migrate sequence to config * remove commented out code * Update frame/contracts/src/lib.rs Co-authored-by: PG Herveou <pgherveou@gmail.com> * remove Migrations generic * make runtime use noop migrations * restrict is_upgrade_supported * undo is_upgrade_supported change * Update bin/node/runtime/src/lib.rs Co-authored-by: PG Herveou <pgherveou@gmail.com> * add rust doc example for `Migrations` * feature gate NoopMigration * fix example code * improve example * wip * remove FixedPointOperand from trait * trait bound BalanceOf * more trait bound BalanceOf * update to use RuntimeHoldReason * replace Fungible for Currency * update runtime * WIP * make v10 benchmark generic over currency * solve merge conflicts * make v12 migration benchmarking generic over DepositPerItem and DepositPerByte * give some format * fix tests and old migrations * add migration v13 placholder * wip * wip * add benchmarking * add weights * wip * [pallet_collective] Enforce prime is a valid member of collective in set_members extrinsic (#14354) * Updated set_members extrinsic to enforce prime is valid member of collective * Added additional tests for set_members extrinsic * applied the code review suggestions * update to docify 0.2.0 / crate-relative embed paths (#14570) * Fix Society v2 migration (#14421) * fix society v2 migration * Update frame/society/src/migrations.rs * Update frame/society/src/migrations.rs Co-authored-by: Bastian Köcher <git@kchr.de> * Update frame/society/src/migrations.rs Co-authored-by: Bastian Köcher <git@kchr.de> * update for versioned upgrade * fix society v2 migration * remove references to members being sorted from commnets * fix type * fix can_migrate check * add sanity log * fix sanity check * kick ci * kick ci * run tests with --experimental flag * versioned migration cleanup * revert pipeline change * use defensive! * semicolons * defensive and doc comment * address pr comment * feature gate the versioned migration * defensive_unwrap_or * fix test * fix doc comment * change defensive to a log warning * remove can_migrate anti-pattern * Update frame/society/Cargo.toml Co-authored-by: Bastian Köcher <git@kchr.de> * add experimental feature warning to doc comment * update doc comment * bump ci * kick ci * kick ci * kick ci --------- Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Co-authored-by: Bastian Köcher <git@kchr.de> * Moves `Block` to `frame_system` instead of `construct_runtime` and removes `Header` and `BlockNumber` (#14437) * Initial setup * Adds node block * Uses UncheckedExtrinsic and removes Where section * Updates frame_system to use Block * Adds deprecation warning * Fixes pallet-timestamp * Removes Header and BlockNumber * Addresses review comments * Addresses review comments * Adds comment about compiler bug * Removes where clause * Refactors code * Fixes errors in cargo check * Fixes errors in cargo check * Fixes warnings in cargo check * Formatting * Fixes construct_runtime tests * Uses import instead of full path for BlockNumber * Uses import instead of full path for Header * Formatting * Fixes construct_runtime tests * Fixes imports in benchmarks * Formatting * Fixes construct_runtime tests * Formatting * Minor updates * Fixes construct_runtime ui tests * Fixes construct_runtime ui tests with 1.70 * Fixes docs * Fixes docs * Adds u128 mock block type * Fixes split example * fixes for cumulus * ".git/.scripts/commands/fmt/fmt.sh" * Updates new tests * Fixes fully-qualified path in few places * Formatting * Update frame/examples/default-config/src/lib.rs Co-authored-by: Juan <juangirini@gmail.com> * Update frame/support/procedural/src/construct_runtime/mod.rs Co-authored-by: Juan <juangirini@gmail.com> * ".git/.scripts/commands/fmt/fmt.sh" * Addresses some review comments * Fixes build * ".git/.scripts/commands/fmt/fmt.sh" * Update frame/democracy/src/lib.rs Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Update frame/democracy/src/lib.rs Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Update frame/support/procedural/src/construct_runtime/mod.rs Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Update frame/support/procedural/src/construct_runtime/mod.rs Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Addresses review comments * Updates trait bounds * Minor fix * ".git/.scripts/commands/fmt/fmt.sh" * Removes unnecessary bound * ".git/.scripts/commands/fmt/fmt.sh" * Updates test * Fixes build * Adds a bound for header * ".git/.scripts/commands/fmt/fmt.sh" * Removes where block * Minor fix * Minor fix * Fixes tests * ".git/.scripts/commands/update-ui/update-ui.sh" 1.70 * Updates test * Update primitives/runtime/src/traits.rs Co-authored-by: Bastian Köcher <git@kchr.de> * Update primitives/runtime/src/traits.rs Co-authored-by: Bastian Köcher <git@kchr.de> * Updates doc * Updates doc --------- Co-authored-by: command-bot <> Co-authored-by: Juan <juangirini@gmail.com> Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> Co-authored-by: Bastian Köcher <git@kchr.de> * Refactor the asset-conversion-tx-payment pallet (#14558) * Code refactoring * Fix imports * Typo * Update frame/asset-conversion/src/types.rs Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com> * Sync docs --------- Co-authored-by: parity-processbot <> Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com> * wip * wip * wip * improve try-runtime imports * remove deposit account * wip * wip * fix benchmark test * improved rustdocs * improved rustdocs * remove log * ignore variable * reduce caller funding * wip * fix tests * fix tests * move v13 out * add v14 * update v13 migration * v13 migration * benchmark v13_migration * fix broken compilation * ".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime=dev --target_dir=substrate --pallet=pallet_contracts * remove all the `where BalanceOf` * add Balance to Config * improve docs * add new deposit storage error * remove todo message * wip * rename migration v13 pre rebase * fix tests * add missing migration; * bump storage version * apply review suggestions * improved comment * remove unnecessary code * simplify migrations * mock balance * mock more for benchmarks * make room for rebaes * make room for rebase * fix benchmarking tests * fix benchmarking tests with caller * improve cargo toml * solve nit * Update frame/contracts/src/lib.rs Co-authored-by: Alexander Theißen <alex.theissen@me.com> * Update frame/contracts/src/exec.rs Co-authored-by: Alexander Theißen <alex.theissen@me.com> * Update frame/contracts/src/exec.rs Co-authored-by: Alexander Theißen <alex.theissen@me.com> * Update frame/contracts/src/storage/meter.rs Co-authored-by: Alexander Theißen <alex.theissen@me.com> * review improvements * remove extra events * update cargo * undo update cargo * review updates * wip * wip * fix test * remove type Balance * add extra fields to events * fix zepter ci * fix tests * remove commented out code * remove deposit_account from benchmarking * update v15 migration * wip * remove deposit account from codebase * add contract info to v15 * make try-runtime fixes * fix wrong v14 logs * add extra post upgrade steps * remove old comments * wip * fix delegate deposit test * ".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime=dev --target_dir=substrate --pallet=pallet_contracts * wip * wip * wip * implement review updates * ".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime=dev --target_dir=substrate --pallet=pallet_contracts * fix documentation * fix consumers/providers * fix consumers/providers * do not check consumers in migration * review comments addressed * update fully qualified System * wip * wip * Transfer to beneficiary after `transfer_on_hold` (#14767) * transfer to beneficiary after transfer_on_hold * wip * add consumer comment * review updates * fix typo * make clippy happy * refactor `Terminated` * rename ContractStatus to ContractState * rename status to state * replace Contribution::Alive to ContractState::Alive * defer storage deposit charge * ".git/.scripts/commands/fmt/fmt.sh" * remove unused imports * Update frame/contracts/src/migration/v15.rs Co-authored-by: Sasha Gryaznov <hi@agryaznov.com> * Update frame/contracts/src/storage/meter.rs Co-authored-by: Sasha Gryaznov <hi@agryaznov.com> --------- Co-authored-by: PG Herveou <pgherveou@gmail.com> Co-authored-by: Toufeeq Pasha <47236805+ToufeeqP@users.noreply.github.com> Co-authored-by: Sam Johnson <sam@durosoft.com> Co-authored-by: Liam Aharon <liam.aharon@hotmail.com> Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Co-authored-by: Bastian Köcher <git@kchr.de> Co-authored-by: gupnik <17176722+gupnik@users.noreply.github.com> Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> Co-authored-by: Jegor Sidorenko <5252494+jsidorenko@users.noreply.github.com> Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com> Co-authored-by: command-bot <> Co-authored-by: Alexander Theißen <alex.theissen@me.com> Co-authored-by: Sasha Gryaznov <hi@agryaznov.com>
This commit is contained in:
@@ -19,10 +19,10 @@
|
||||
use crate::unsafe_debug::ExecutionObserver;
|
||||
use crate::{
|
||||
gas::GasMeter,
|
||||
storage::{self, meter::Diff, DepositAccount, WriteOutcome},
|
||||
storage::{self, meter::Diff, WriteOutcome},
|
||||
BalanceOf, CodeHash, CodeInfo, CodeInfoOf, Config, ContractInfo, ContractInfoOf,
|
||||
DebugBufferVec, Determinism, Error, Event, Nonce, Origin, Pallet as Contracts, Schedule,
|
||||
System, WasmBlob, LOG_TARGET,
|
||||
WasmBlob, LOG_TARGET,
|
||||
};
|
||||
use frame_support::{
|
||||
crypto::ecdsa::ECDSAExt,
|
||||
@@ -33,7 +33,7 @@ use frame_support::{
|
||||
storage::{with_transaction, TransactionOutcome},
|
||||
traits::{
|
||||
fungible::{Inspect, Mutate},
|
||||
tokens::{Fortitude::Polite, Preservation},
|
||||
tokens::Preservation,
|
||||
Contains, OriginTrait, Randomness, Time,
|
||||
},
|
||||
weights::Weight,
|
||||
@@ -547,7 +547,7 @@ enum CachedContract<T: Config> {
|
||||
///
|
||||
/// In this case a reload is neither allowed nor possible. Please note that recursive
|
||||
/// calls cannot remove a contract as this is checked and denied.
|
||||
Terminated(DepositAccount<T>),
|
||||
Terminated,
|
||||
}
|
||||
|
||||
impl<T: Config> CachedContract<T> {
|
||||
@@ -568,15 +568,6 @@ impl<T: Config> CachedContract<T> {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns `Some` iff the contract is not `Cached::Invalidated`.
|
||||
fn deposit_account(&self) -> Option<&DepositAccount<T>> {
|
||||
match self {
|
||||
CachedContract::Cached(contract) => Some(contract.deposit_account()),
|
||||
CachedContract::Terminated(deposit_account) => Some(&deposit_account),
|
||||
CachedContract::Invalidated => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Config> Frame<T> {
|
||||
@@ -655,9 +646,7 @@ impl<T: Config> CachedContract<T> {
|
||||
/// Terminate and return the contract info.
|
||||
fn terminate(&mut self, account_id: &T::AccountId) -> ContractInfo<T> {
|
||||
self.load(account_id);
|
||||
let contract = get_cached_or_panic_after_load!(self);
|
||||
let deposit_account = contract.deposit_account().clone();
|
||||
get_cached_or_panic_after_load!(mem::replace(self, Self::Terminated(deposit_account)))
|
||||
get_cached_or_panic_after_load!(mem::replace(self, Self::Terminated))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -955,7 +944,7 @@ where
|
||||
match (entry_point, delegated_code_hash) {
|
||||
(ExportedFunction::Constructor, _) => {
|
||||
// It is not allowed to terminate a contract inside its constructor.
|
||||
if matches!(frame.contract_info, CachedContract::Terminated(_)) {
|
||||
if matches!(frame.contract_info, CachedContract::Terminated) {
|
||||
return Err(Error::<T>::TerminatedInConstructor.into())
|
||||
}
|
||||
|
||||
@@ -1059,18 +1048,8 @@ where
|
||||
// in its contract info. The load is necessary to pull it from storage in case
|
||||
// it was invalidated.
|
||||
frame.contract_info.load(account_id);
|
||||
let deposit_account = frame
|
||||
.contract_info
|
||||
.deposit_account()
|
||||
.expect(
|
||||
"Is only `None` when the info is invalidated.
|
||||
We just re-loaded from storage which either makes the state `Cached` or `Terminated`.
|
||||
qed",
|
||||
)
|
||||
.clone();
|
||||
let mut contract = frame.contract_info.into_contract();
|
||||
prev.nested_storage
|
||||
.absorb(frame.nested_storage, deposit_account, contract.as_mut());
|
||||
prev.nested_storage.absorb(frame.nested_storage, account_id, contract.as_mut());
|
||||
|
||||
// In case the contract wasn't terminated we need to persist changes made to it.
|
||||
if let Some(contract) = contract {
|
||||
@@ -1105,14 +1084,10 @@ where
|
||||
if !persist {
|
||||
return
|
||||
}
|
||||
let deposit_account = self.first_frame.contract_info.deposit_account().expect(
|
||||
"Is only `None` when the info is invalidated. The first frame can't be invalidated.
|
||||
qed",
|
||||
).clone();
|
||||
let mut contract = self.first_frame.contract_info.as_contract();
|
||||
self.storage_meter.absorb(
|
||||
mem::take(&mut self.first_frame.nested_storage),
|
||||
deposit_account,
|
||||
&self.first_frame.account_id,
|
||||
contract.as_deref_mut(),
|
||||
);
|
||||
if let Some(contract) = contract {
|
||||
@@ -1311,14 +1286,8 @@ where
|
||||
}
|
||||
let frame = self.top_frame_mut();
|
||||
let info = frame.terminate();
|
||||
frame.nested_storage.terminate(&info);
|
||||
System::<T>::dec_consumers(&frame.account_id);
|
||||
Self::transfer(
|
||||
Preservation::Expendable,
|
||||
&frame.account_id,
|
||||
beneficiary,
|
||||
T::Currency::reducible_balance(&frame.account_id, Preservation::Expendable, Polite),
|
||||
)?;
|
||||
frame.nested_storage.terminate(&info, beneficiary.clone());
|
||||
|
||||
info.queue_trie_for_deletion();
|
||||
ContractInfoOf::<T>::remove(&frame.account_id);
|
||||
E::decrement_refcount(info.code_hash);
|
||||
@@ -1327,7 +1296,7 @@ where
|
||||
E::decrement_refcount(*code_hash);
|
||||
frame
|
||||
.nested_storage
|
||||
.charge_deposit(info.deposit_account().clone(), StorageDeposit::Refund(*deposit));
|
||||
.charge_deposit(frame.account_id.clone(), StorageDeposit::Refund(*deposit));
|
||||
}
|
||||
|
||||
Contracts::<T>::deposit_event(
|
||||
@@ -1521,8 +1490,7 @@ where
|
||||
let deposit = StorageDeposit::Charge(new_base_deposit)
|
||||
.saturating_sub(&StorageDeposit::Charge(old_base_deposit));
|
||||
|
||||
let deposit_account = info.deposit_account().clone();
|
||||
frame.nested_storage.charge_deposit(deposit_account, deposit);
|
||||
frame.nested_storage.charge_deposit(frame.account_id.clone(), deposit);
|
||||
|
||||
E::increment_refcount(hash)?;
|
||||
E::decrement_refcount(prev_hash);
|
||||
@@ -1573,7 +1541,7 @@ where
|
||||
<WasmBlob<T>>::increment_refcount(code_hash)?;
|
||||
frame
|
||||
.nested_storage
|
||||
.charge_deposit(info.deposit_account().clone(), StorageDeposit::Charge(deposit));
|
||||
.charge_deposit(frame.account_id.clone(), StorageDeposit::Charge(deposit));
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -1589,7 +1557,7 @@ where
|
||||
|
||||
frame
|
||||
.nested_storage
|
||||
.charge_deposit(info.deposit_account().clone(), StorageDeposit::Refund(deposit));
|
||||
.charge_deposit(frame.account_id.clone(), StorageDeposit::Refund(deposit));
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user