mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 20:31:13 +00:00
Rewrap all comments to 100 line width (#9490)
* reformat everything again * manual formatting * last manual fix * Fix build
This commit is contained in:
@@ -114,7 +114,8 @@ where
|
||||
Endow::CollectRent => {
|
||||
// storage_size cannot be zero because otherwise a contract that is just above
|
||||
// the subsistence threshold does not pay rent given a large enough subsistence
|
||||
// threshold. But we need rent payments to occur in order to benchmark for worst cases.
|
||||
// threshold. But we need rent payments to occur in order to benchmark for worst
|
||||
// cases.
|
||||
let storage_size = u32::MAX / 10;
|
||||
|
||||
// Endowment should be large but not as large to inhibit rent payments.
|
||||
|
||||
@@ -86,8 +86,8 @@ pub trait ChainExtension<C: Config> {
|
||||
/// imported wasm function.
|
||||
///
|
||||
/// # Parameters
|
||||
/// - `func_id`: The first argument to `seal_call_chain_extension`. Usually used to
|
||||
/// determine which function to realize.
|
||||
/// - `func_id`: The first argument to `seal_call_chain_extension`. Usually used to determine
|
||||
/// which function to realize.
|
||||
/// - `env`: Access to the remaining arguments and the execution environment.
|
||||
///
|
||||
/// # Return
|
||||
|
||||
@@ -173,8 +173,8 @@ pub trait Ext: sealing::Sealed {
|
||||
/// Instantiate a contract from the given code.
|
||||
///
|
||||
/// Returns the original code size of the called contract.
|
||||
/// The newly created account will be associated with `code`. `value` specifies the amount of value
|
||||
/// transferred from this to the newly created account (also known as endowment).
|
||||
/// The newly created account will be associated with `code`. `value` specifies the amount of
|
||||
/// value transferred from this to the newly created account (also known as endowment).
|
||||
///
|
||||
/// # Return Value
|
||||
///
|
||||
@@ -190,8 +190,8 @@ pub trait Ext: sealing::Sealed {
|
||||
|
||||
/// Transfer all funds to `beneficiary` and delete the contract.
|
||||
///
|
||||
/// Since this function removes the self contract eagerly, if succeeded, no further actions should
|
||||
/// be performed on this `Ext` instance.
|
||||
/// Since this function removes the self contract eagerly, if succeeded, no further actions
|
||||
/// should be performed on this `Ext` instance.
|
||||
///
|
||||
/// This function will fail if the same contract is present on the contract
|
||||
/// call stack.
|
||||
@@ -199,8 +199,8 @@ pub trait Ext: sealing::Sealed {
|
||||
|
||||
/// Restores the given destination contract sacrificing the current one.
|
||||
///
|
||||
/// Since this function removes the self contract eagerly, if succeeded, no further actions should
|
||||
/// be performed on this `Ext` instance.
|
||||
/// Since this function removes the self contract eagerly, if succeeded, no further actions
|
||||
/// should be performed on this `Ext` instance.
|
||||
///
|
||||
/// This function will fail if the same contract is present
|
||||
/// on the contract call stack.
|
||||
@@ -1283,8 +1283,8 @@ mod sealing {
|
||||
|
||||
/// These tests exercise the executive layer.
|
||||
///
|
||||
/// In these tests the VM/loader are mocked. Instead of dealing with wasm bytecode they use simple closures.
|
||||
/// This allows you to tackle executive logic more thoroughly without writing a
|
||||
/// In these tests the VM/loader are mocked. Instead of dealing with wasm bytecode they use simple
|
||||
/// closures. This allows you to tackle executive logic more thoroughly without writing a
|
||||
/// wasm VM code.
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
|
||||
@@ -17,43 +17,47 @@
|
||||
|
||||
//! # Contract Pallet
|
||||
//!
|
||||
//! The Contract module provides functionality for the runtime to deploy and execute WebAssembly smart-contracts.
|
||||
//! The Contract module provides functionality for the runtime to deploy and execute WebAssembly
|
||||
//! smart-contracts.
|
||||
//!
|
||||
//! - [`Config`]
|
||||
//! - [`Call`]
|
||||
//!
|
||||
//! ## Overview
|
||||
//!
|
||||
//! This module extends accounts based on the [`Currency`] trait to have smart-contract functionality. It can
|
||||
//! be used with other modules that implement accounts based on [`Currency`]. These "smart-contract accounts"
|
||||
//! have the ability to instantiate smart-contracts and make calls to other contract and non-contract accounts.
|
||||
//! This module extends accounts based on the [`Currency`] trait to have smart-contract
|
||||
//! functionality. It can be used with other modules that implement accounts based on [`Currency`].
|
||||
//! These "smart-contract accounts" have the ability to instantiate smart-contracts and make calls
|
||||
//! to other contract and non-contract accounts.
|
||||
//!
|
||||
//! The smart-contract code is stored once in a code cache, and later retrievable via its hash.
|
||||
//! This means that multiple smart-contracts can be instantiated from the same hash, without replicating
|
||||
//! the code each time.
|
||||
//! This means that multiple smart-contracts can be instantiated from the same hash, without
|
||||
//! replicating the code each time.
|
||||
//!
|
||||
//! When a smart-contract is called, its associated code is retrieved via the code hash and gets executed.
|
||||
//! This call can alter the storage entries of the smart-contract account, instantiate new smart-contracts,
|
||||
//! or call other smart-contracts.
|
||||
//! When a smart-contract is called, its associated code is retrieved via the code hash and gets
|
||||
//! executed. This call can alter the storage entries of the smart-contract account, instantiate new
|
||||
//! smart-contracts, or call other smart-contracts.
|
||||
//!
|
||||
//! Finally, when an account is reaped, its associated code and storage of the smart-contract account
|
||||
//! will also be deleted.
|
||||
//! Finally, when an account is reaped, its associated code and storage of the smart-contract
|
||||
//! account will also be deleted.
|
||||
//!
|
||||
//! ### Gas
|
||||
//!
|
||||
//! Senders must specify a gas limit with every call, as all instructions invoked by the smart-contract require gas.
|
||||
//! Unused gas is refunded after the call, regardless of the execution outcome.
|
||||
//! Senders must specify a gas limit with every call, as all instructions invoked by the
|
||||
//! smart-contract require gas. Unused gas is refunded after the call, regardless of the execution
|
||||
//! outcome.
|
||||
//!
|
||||
//! If the gas limit is reached, then all calls and state changes (including balance transfers) are only
|
||||
//! reverted at the current call's contract level. For example, if contract A calls B and B runs out of gas mid-call,
|
||||
//! then all of B's calls are reverted. Assuming correct error handling by contract A, A's other calls and state
|
||||
//! changes still persist.
|
||||
//! If the gas limit is reached, then all calls and state changes (including balance transfers) are
|
||||
//! only reverted at the current call's contract level. For example, if contract A calls B and B
|
||||
//! runs out of gas mid-call, then all of B's calls are reverted. Assuming correct error handling by
|
||||
//! contract A, A's other calls and state changes still persist.
|
||||
//!
|
||||
//! ### Notable Scenarios
|
||||
//!
|
||||
//! Contract call failures are not always cascading. When failures occur in a sub-call, they do not "bubble up",
|
||||
//! and the call will only revert at the specific contract level. For example, if contract A calls contract B, and B
|
||||
//! fails, A can decide how to handle that failure, either proceeding or reverting A's changes.
|
||||
//! Contract call failures are not always cascading. When failures occur in a sub-call, they do not
|
||||
//! "bubble up", and the call will only revert at the specific contract level. For example, if
|
||||
//! contract A calls contract B, and B fails, A can decide how to handle that failure, either
|
||||
//! proceeding or reverting A's changes.
|
||||
//!
|
||||
//! ## Interface
|
||||
//!
|
||||
@@ -226,17 +230,18 @@ pub mod pallet {
|
||||
/// deposited while the contract is alive. Costs for additional storage are added to
|
||||
/// this base cost.
|
||||
///
|
||||
/// This is a simple way to ensure that contracts with empty storage eventually get deleted by
|
||||
/// making them pay rent. This creates an incentive to remove them early in order to save rent.
|
||||
/// This is a simple way to ensure that contracts with empty storage eventually get deleted
|
||||
/// by making them pay rent. This creates an incentive to remove them early in order to save
|
||||
/// rent.
|
||||
#[pallet::constant]
|
||||
type DepositPerContract: Get<BalanceOf<Self>>;
|
||||
|
||||
/// The balance a contract needs to deposit per storage byte to stay alive indefinitely.
|
||||
///
|
||||
/// Let's suppose the deposit is 1,000 BU (balance units)/byte and the rent is 1 BU/byte/day,
|
||||
/// then a contract with 1,000,000 BU that uses 1,000 bytes of storage would pay no rent.
|
||||
/// But if the balance reduced to 500,000 BU and the storage stayed the same at 1,000,
|
||||
/// then it would pay 500 BU/day.
|
||||
/// Let's suppose the deposit is 1,000 BU (balance units)/byte and the rent is 1
|
||||
/// BU/byte/day, then a contract with 1,000,000 BU that uses 1,000 bytes of storage would
|
||||
/// pay no rent. But if the balance reduced to 500,000 BU and the storage stayed the same at
|
||||
/// 1,000, then it would pay 500 BU/day.
|
||||
#[pallet::constant]
|
||||
type DepositPerStorageByte: Get<BalanceOf<Self>>;
|
||||
|
||||
@@ -353,7 +358,8 @@ pub mod pallet {
|
||||
///
|
||||
/// Instantiation is executed as follows:
|
||||
///
|
||||
/// - The supplied `code` is instrumented, deployed, and a `code_hash` is created for that code.
|
||||
/// - The supplied `code` is instrumented, deployed, and a `code_hash` is created for that
|
||||
/// code.
|
||||
/// - If the `code_hash` already exists on the chain the underlying `code` will be shared.
|
||||
/// - The destination address is computed based on the sender, code_hash and the salt.
|
||||
/// - The smart-contract account is created at the computed address.
|
||||
@@ -458,7 +464,8 @@ pub mod pallet {
|
||||
|
||||
// Add some advantage for block producers (who send unsigned extrinsics) by
|
||||
// adding a handicap: for signed extrinsics we use a slightly older block number
|
||||
// for the eviction check. This can be viewed as if we pushed regular users back in past.
|
||||
// for the eviction check. This can be viewed as if we pushed regular users back in
|
||||
// past.
|
||||
let handicap = if signed { T::SignedClaimHandicap::get() } else { Zero::zero() };
|
||||
|
||||
// If poking the contract has lead to eviction of the contract, give out the rewards.
|
||||
@@ -530,8 +537,8 @@ pub mod pallet {
|
||||
/// # Params
|
||||
///
|
||||
/// - `contract`: The contract that emitted the event.
|
||||
/// - `data`: Data supplied by the contract. Metadata generated during contract
|
||||
/// compilation is needed to decode it.
|
||||
/// - `data`: Data supplied by the contract. Metadata generated during contract compilation
|
||||
/// is needed to decode it.
|
||||
ContractEmitted(T::AccountId, Vec<u8>),
|
||||
|
||||
/// A code with the specified hash was removed.
|
||||
|
||||
@@ -96,8 +96,8 @@ where
|
||||
///
|
||||
/// The `handicap` parameter gives a way to check the rent to a moment in the past instead
|
||||
/// of current block. E.g. if the contract is going to be evicted at the current block,
|
||||
/// `handicap = 1` can defer the eviction for 1 block. This is useful to handicap certain snitchers
|
||||
/// relative to others.
|
||||
/// `handicap = 1` can defer the eviction for 1 block. This is useful to handicap certain
|
||||
/// snitchers relative to others.
|
||||
///
|
||||
/// NOTE this function performs eviction eagerly. All changes are read and written directly to
|
||||
/// storage.
|
||||
@@ -148,12 +148,12 @@ where
|
||||
/// accessed at the beginning of the current block. Returns `None` in case if the contract was
|
||||
/// evicted before or as a result of the rent collection.
|
||||
///
|
||||
/// The returned value is only an estimation. It doesn't take into account any top ups, changing the
|
||||
/// rent allowance, or any problems coming from withdrawing the dues.
|
||||
/// The returned value is only an estimation. It doesn't take into account any top ups, changing
|
||||
/// the rent allowance, or any problems coming from withdrawing the dues.
|
||||
///
|
||||
/// NOTE that this is not a side-effect free function! It will actually collect rent and then
|
||||
/// compute the projection. This function is only used for implementation of an RPC method through
|
||||
/// `RuntimeApi` meaning that the changes will be discarded anyway.
|
||||
/// compute the projection. This function is only used for implementation of an RPC method
|
||||
/// through `RuntimeApi` meaning that the changes will be discarded anyway.
|
||||
pub fn compute_projection(account: &T::AccountId) -> RentProjectionResult<T::BlockNumber> {
|
||||
use ContractAccessError::IsTombstone;
|
||||
|
||||
@@ -357,8 +357,8 @@ where
|
||||
|
||||
/// Returns amount of funds available to consume by rent mechanism.
|
||||
///
|
||||
/// Rent mechanism cannot consume more than `rent_allowance` set by the contract and it cannot make
|
||||
/// the balance lower than [`subsistence_threshold`].
|
||||
/// Rent mechanism cannot consume more than `rent_allowance` set by the contract and it cannot
|
||||
/// make the balance lower than [`subsistence_threshold`].
|
||||
///
|
||||
/// In case the toal_balance is below the subsistence threshold, this function returns `None`.
|
||||
fn rent_budget(
|
||||
@@ -381,8 +381,8 @@ where
|
||||
|
||||
/// Consider the case for rent payment of the given account and returns a `Verdict`.
|
||||
///
|
||||
/// Use `handicap` in case you want to change the reference block number. (To get more details see
|
||||
/// `try_eviction` ).
|
||||
/// Use `handicap` in case you want to change the reference block number. (To get more details
|
||||
/// see `try_eviction` ).
|
||||
fn consider_case(
|
||||
account: &T::AccountId,
|
||||
current_block_number: T::BlockNumber,
|
||||
@@ -435,8 +435,8 @@ where
|
||||
.unwrap_or_else(|| <BalanceOf<T>>::max_value());
|
||||
let insufficient_rent = rent_budget < dues;
|
||||
|
||||
// If the rent payment cannot be withdrawn due to locks on the account balance, then evict the
|
||||
// account.
|
||||
// If the rent payment cannot be withdrawn due to locks on the account balance, then evict
|
||||
// the account.
|
||||
//
|
||||
// NOTE: This seems problematic because it provides a way to tombstone an account while
|
||||
// avoiding the last rent payment. In effect, someone could retroactively set rent_allowance
|
||||
@@ -566,8 +566,8 @@ impl<T: Config> OutstandingAmount<T> {
|
||||
enum Verdict<T: Config> {
|
||||
/// The contract is exempted from paying rent.
|
||||
///
|
||||
/// For example, it already paid its rent in the current block, or it has enough deposit for not
|
||||
/// paying rent at all.
|
||||
/// For example, it already paid its rent in the current block, or it has enough deposit for
|
||||
/// not paying rent at all.
|
||||
Exempt,
|
||||
/// The contract cannot afford payment within its rent budget so it gets evicted. However,
|
||||
/// because its balance is greater than the subsistence threshold it leaves a tombstone.
|
||||
|
||||
@@ -167,8 +167,8 @@ where
|
||||
{
|
||||
/// Reads a storage kv pair of a contract.
|
||||
///
|
||||
/// The read is performed from the `trie_id` only. The `address` is not necessary. If the contract
|
||||
/// doesn't store under the given `key` `None` is returned.
|
||||
/// The read is performed from the `trie_id` only. The `address` is not necessary. If the
|
||||
/// contract doesn't store under the given `key` `None` is returned.
|
||||
pub fn read(trie_id: &TrieId, key: &StorageKey) -> Option<Vec<u8>> {
|
||||
child::get_raw(&child_trie_info(&trie_id), &blake2_256(key))
|
||||
}
|
||||
@@ -230,7 +230,8 @@ where
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Creates a new contract descriptor in the storage with the given code hash at the given address.
|
||||
/// Creates a new contract descriptor in the storage with the given code hash at the given
|
||||
/// address.
|
||||
///
|
||||
/// Returns `Err` if there is already a contract (or a tombstone) exists at the given address.
|
||||
pub fn new_contract(
|
||||
|
||||
@@ -23,9 +23,10 @@
|
||||
//! - Before running contract code we check if the cached code has the schedule version that
|
||||
//! is equal to the current saved schedule.
|
||||
//! If it is equal then run the code, if it isn't reinstrument with the current schedule.
|
||||
//! - When we update the schedule we want it to have strictly greater version than the current saved one:
|
||||
//! this guarantees that every instrumented contract code in cache cannot have the version equal to the current one.
|
||||
//! Thus, before executing a contract it should be reinstrument with new schedule.
|
||||
//! - When we update the schedule we want it to have strictly greater version than the current saved
|
||||
//! one:
|
||||
//! this guarantees that every instrumented contract code in cache cannot have the version equal to
|
||||
//! the current one. Thus, before executing a contract it should be reinstrument with new schedule.
|
||||
|
||||
#[cfg(feature = "runtime-benchmarks")]
|
||||
pub use self::private::reinstrument;
|
||||
|
||||
@@ -279,8 +279,7 @@ impl<'a, T: Config> ContractModule<'a, T> {
|
||||
///
|
||||
/// This accomplishes two tasks:
|
||||
///
|
||||
/// - checks any imported function against defined host functions set, incl.
|
||||
/// their signatures.
|
||||
/// - checks any imported function against defined host functions set, incl. their signatures.
|
||||
/// - if there is a memory import, returns it's descriptor
|
||||
/// `import_fn_banlist`: list of function names that are disallowed to be imported
|
||||
fn scan_imports<C: ImportSatisfyCheck>(
|
||||
|
||||
@@ -534,8 +534,8 @@ where
|
||||
/// when the caller is not interested in the result.
|
||||
///
|
||||
/// `create_token` can optionally instruct this function to charge the gas meter with the token
|
||||
/// it returns. `create_token` receives the variable amount of bytes that are about to be copied by
|
||||
/// this function.
|
||||
/// it returns. `create_token` receives the variable amount of bytes that are about to be copied
|
||||
/// by this function.
|
||||
///
|
||||
/// In addition to the error conditions of `write_sandbox_memory` this functions returns
|
||||
/// `Err` if the size of the buffer located at `out_ptr` is too small to fit `buf`.
|
||||
|
||||
Reference in New Issue
Block a user