Skip to content
  1. May 25, 2021
    • Alexander Theißen's avatar
      contracts: Fix some minor bugs around instantiation (#8879) · c92d4a26
      Alexander Theißen authored
      
      
      * Fix output of wrongly outputted error
      
      The "Tombstoned a contract that is below the subsistence threshold: {:?}" was
      triggered when too few balance was provided. It was a false alarm.
      
      * Fix return of wrong code_len
      
      * Split up `NotCallable` into more fine grained errors
      
      * Fix typos in docs
      
      Co-authored-by: default avatarKeith Yeung <[email protected]>
      
      * RentNotPayed -> RentNotPaid
      
      * Fix typo: payed -> paid
      
      It is OK to change the in-storage field name because:
      
      1. The SCALE encoding is not based on names only on position.
      2. The struct is not public (only to the crate).
      
      Co-authored-by: default avatarKeith Yeung <[email protected]>
      c92d4a26
  2. May 20, 2021
  3. May 13, 2021
    • Alexander Theißen's avatar
      contracts: Move `Schedule` from Storage to `Config` (#8773) · 1ac95b6b
      Alexander Theißen authored
      * Move `Schedule` from Storage to Config
      
      * Updated CHANGELOG
      
      * Fix nits from review
      
      * Fix migration
      
      * Print the debug buffer as tracing message
      
      * Use `debug` instead of `trace` and update README
      
      * Add additional assert to test
      
      * Rename `schedule_version` to `instruction_weights_version`
      
      * Fixed typo
      
      * Added more comments to wat fixtures
      
      * Add clarification for the `debug_message` field
      1ac95b6b
  4. May 07, 2021
    • Alexander Theißen's avatar
      contracts: Refactor the exec module (#8604) · 9e894ce1
      Alexander Theißen authored
      
      
      * contracts: Add default implementation for Executable::occupied_storage()
      
      * contracts: Refactor the exec module
      
      * Let runtime specify the backing type of the call stack
      
      This removes the need for a runtime check of the specified
      `MaxDepth`. We can now garantuee that we don't need to
      allocate when a new call frame is pushed.
      
      * Fix doc typo
      
      Co-authored-by: default avatarGuillaume Thiolliere <[email protected]>
      
      * cargo run --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_contracts --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/contracts/src/weights.rs --template=./.maintain/frame-weight-template.hbs
      
      * Review nits
      
      * Fix defect in contract info caching behaviour
      
      * Add more docs
      
      * Fix wording and typos
      
      Co-authored-by: default avatarGuillaume Thiolliere <[email protected]>
      Co-authored-by: default avatarParity Benchmarking Bot <[email protected]>
      9e894ce1
  5. Apr 22, 2021
  6. Apr 19, 2021
  7. Apr 13, 2021
  8. Apr 07, 2021
  9. Mar 24, 2021
  10. Mar 23, 2021
  11. Mar 21, 2021
  12. Mar 18, 2021
    • Shaun Wang's avatar
      Replace 'Module' with 'Pallet' in construct_runtime macro (#8372) · 2e552244
      Shaun Wang authored
      * Use 'Pallet' struct in construct_runtime.
      
      * Fix genesis and metadata macro.
      
      * Fix 'Pallet' type alias.
      
      * Replace 'Module' with 'Pallet' for all construct_runtime use cases.
      
      * Replace more deprecated 'Module' struct.
      
      * Bring back AllModules and AllPalletsWithSystem type, but deprecate them.
      
      * Replace deprecated 'Module' struct from merge master.
      
      * Minor fix.
      
      * Fix UI tests.
      
      * Revert UI override in derive_no_bound.
      
      * Fix more deprecated 'Module' use from master branch.
      
      * Fix more deprecated 'Module' use from master branch.
      2e552244
  13. Mar 16, 2021
  14. Mar 12, 2021
    • Alexander Theißen's avatar
      contracts: Expose rent parameter to contracts (#8231) · a4e88758
      Alexander Theißen authored
      
      
      * contracts: Expose rent parameter to contracts
      
      * cargo run --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_contracts --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/contracts/src/weights.rs --template=./.maintain/frame-weight-template.hbs
      
      * Fix typos
      
      * Improve comments
      
      * Add rent parameter weights
      
      * Allow deploying a new schedule with the same version
      
      * Add storage migration for new schedule
      
      * Only decode the schedule version in storage migration
      
      * Remove confusing docs
      
      * Replace original_code_len() by aggregate_code_len()
      
      Co-authored-by: default avatarParity Benchmarking Bot <[email protected]>
      a4e88758
  15. Mar 02, 2021
  16. Feb 26, 2021
  17. Feb 22, 2021
  18. Feb 04, 2021
  19. Feb 02, 2021
  20. Jan 14, 2021
  21. Jan 05, 2021
  22. Jan 04, 2021
    • Alexander Theißen's avatar
      contracts: Lazy storage removal (#7740) · 3ba8fdfc
      Alexander Theißen authored
      * Do not evict a contract from within a call stack
      
      We don't want to trigger contract eviction automatically when
      a contract is called. This is because those changes can be
      reverted due to how storage transactions are used at the moment.
      More Information:
      https://github.com/paritytech/substrate/issues/6439#issuecomment-648754324
      
      It can be re-introduced once the linked issue is resolved. In the meantime
      `claim_surcharge` must be called to evict a contract.
      
      * Lazily delete storage in on_initialize instead of when removing the contract
      
      * Add missing documentation of new error
      
      * Make Module::claim_surcharge public
      
      It being the only dispatchable that is private is an oversight.
      
      * review: Add final newline
      
      * review: Simplify assert statement
      
      * Add test that checks that partial remove of a contract works
      
      * Premote warning to error
      
      * Added missing docs for seal_terminate
      
      * Lazy deletion should only take AVERAGE_ON_INITIALIZE_RATIO of the block
      
      * Added informational about the lazy deletion throughput
      
      * Avoid lazy deletion in case the block is already full
      
      * Prevent queue decoding in case of an already full block
      
      * Add test that checks that on_initialize honors block limits
      3ba8fdfc
    • Alexander Theißen's avatar
      contracts: Allow runtime authors to define a chain extension (#7548) · 51c37ecc
      Alexander Theißen authored
      * Make host functions return TrapReason
      
      This avoids the need to manually store any trap reasons
      to the `Runtime` from the host function. This adds the following
      benefits:
      
      * It properly composes with the upcoming chain extensions
      * Missing to set a trap value is now a compile error
      
      * Add chain extension
      
      The chain extension is a way for the contract author to add new
      host functions for contracts to call.
      
      * Add tests for chain extensions
      
      * Fix regression in set_rent.wat fixture
      
      Not all offsets where properly updated when changing the fixtures
      for the new salt on instantiate.
      
      * Pre-charge a weight amount based off the specified length
      
      * Improve fn write docs
      
      * Renamed state to phantom
      
      * Fix typo
      51c37ecc
    • Bastian Köcher's avatar
      Happy new year (#7814) · e3e651f7
      Bastian Köcher authored
      * Happy new year
      
      Updates the copyright years and fixes wrong license headers.
      
      * Fix the template
      
      * Split HEADER into HEADER-APACHE & HEADER-GPL
      e3e651f7
  23. Dec 29, 2020
  24. Nov 30, 2020
  25. Nov 24, 2020
    • Alexander Theißen's avatar
      contracts: Add `salt` argument to contract instantiation (#7482) · c3ca78fa
      Alexander Theißen authored
      
      
      * pallet-contracts: Fix seal_restore_to to output proper module errors
      
      Those errors where part of the decl_error for some time but where
      never actually returned. This allows proper debugging of failed
      restorations. Previously, any error did return the misleading
      `ContractTrapped`.
      
      * Bind UncheckedFrom<T::Hash> + AsRef<[u8]> everywhere
      
      This allows us to make assumptions about the AccoutId
      that are necessary for testing and in order to benchmark
      the module properly.
      
      This also groups free standing functions into inherent functions
      in order to minimize the places where the new bounds need to
      be specified.
      
      * Rework contract address determination
      
      * Do not allow override by runtime author
      * Instantiate gained a new parameter "salt"
      
      This change is done now in expecation of the upcoming code rent
      which needs to change the instantiation dispatchable and
      host function anyways.
      
      The situation in where we have only something that is like CREATE2
      makes it impossible for UIs to help the user to create an arbitrary
      amount of instantiations from the same code.
      
      With this change we have the same functionality as ethereum with
      a CREATE and CREATE2 instantation semantic.
      
      * Remove TrieIdGenerator
      
      The new trait bounds allows us to remove this workaround
      from the configuration trait.
      
      * Remove default parameters for config trait
      
      It should be solely the responsiblity to determine proper values for
      these parameter. As a matter of fact most runtime weren't using these
      values anyways.
      
      * Fix tests for new account id type
      
      Because of the new bounds on the trait tests can't get away by using
      u64 as accound id. Replacing the 8 byte value by a 32 byte value
      creates out quite a bit of code churn.
      
      * Fix benchmarks
      
      The benchmarks need adaption to the new instantiate semantics.
      
      * Fix compile errors caused by adding new trait bounds
      * Fix compile errors caused by renaming storage and rent functions
      * Adapt host functions and dispatchables to the new salt
      * Add tests for instantiate host functions (was not possible before)
      
      * Add benchmark results
      
      * Adapt to the new WeightInfo
      
      The new benchmarks add a new parameter for salt "s" to the instantiate weights
      that needs to be applied.
      
      * Fix deploying_wasm_contract_should_work integration test
      
      This test is adapted to use the new instantiate signature.
      
      * Break overlong line
      
      * Break more long lines
      
      Co-authored-by: default avatarParity Benchmarking Bot <[email protected]>
      c3ca78fa
  26. Nov 09, 2020
    • Alexander Theißen's avatar
      contracts: Add automated weights for wasm instructions (#7361) · 51c67fe8
      Alexander Theißen authored
      
      
      * pallet_contracts: Inline benchmark helper that is only used once
      
      * Move all max_* Schedule items into a new struct
      
      * Limit the number of globals a module can declare
      
      * The current limits are too high for wasmi to even execute
      
      * Limit the amount of parameters any wasm function is allowed to have
      
      * Limit the size the BrTable's immediate value
      
      * Add instruction benchmarks
      
      * Add new benchmarks to the schedule and make use of it
      
      * Add Benchmark Results generated by the bench bot
      
      * Add proc macro that implements `Debug` for `Schedule`
      
      * Add missing imports necessary for no_std build
      
      * Make the WeightDebug macro available for no_std
      
      In this case a dummy implementation is derived in order to not
      blow up the code size akin to the RuntimeDebug macro.
      
      * Rework instr_memory_grow benchmark to use only the maximum amount of pages allowed
      
      * Add maximum amount of memory when benching (seal_)call/instantiate
      
      * cargo run --release --features runtime-benchmarks --manifest-path bin/node/cli/Cargo.toml -- benchmark --chain dev --steps 50 --repeat 20 --extrinsic * --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output ./bin/node/runtime/src/weights --header ./HEADER --pallet pallet_contracts
      
      * Added utility benchmark that allows pretty printing of the real schedule
      
      * review: Add missing header to the proc-macro lib.rs
      
      * review: Clarify why #[allow(dead_code)] attribute is there
      
      * review: Fix pwasm-utils line
      
      * review: Fixup rand usage
      
      * review: Fix typo
      
      * review: Imported -> Exported
      
      * cargo run --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_contracts --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/contracts/src/weights.rs --template=./.maintain/frame-weight-template.hbs
      
      * contracts: Adapt to new weight structure
      
      * contracts: Fixup runtime WeightInfo
      
      * contracts: Remove unneeded fullpath of WeightInfo type
      
      * Apply suggestions from code review
      
      Co-authored-by: default avatarAndrew Jones <[email protected]>
      
      * Fix typo in schedule.rs
      
      Co-authored-by: default avatarAndrew Jones <[email protected]>
      
      * Fix docs in schedule.rs
      
      * Apply suggestions from code review
      
      Co-authored-by: default avatarNikolay Volf <[email protected]>
      
      * Don't publish proc-macro crate until 3.0.0 is ready
      
      * Optimize imports for less repetition
      
      * Break overlong line
      
      Co-authored-by: default avatarParity Benchmarking Bot <[email protected]>
      Co-authored-by: default avatarAndrew Jones <[email protected]>
      Co-authored-by: default avatarNikolay Volf <[email protected]>
      51c67fe8
  27. Oct 29, 2020
  28. Oct 23, 2020
  29. Oct 08, 2020
    • Alexander Theißen's avatar
      seal: Add automated weights for contract API calls (#7017) · 443725f0
      Alexander Theißen authored
      
      
      * seal: Add capability to put uninstrumented code (for benchmarks)
      
      Benchmarks should only measure the overhead of the API calls itself.
      For that reason we want to run them without instrumentation.
      
      * seal: Cap the the data length for deposited events
      
      Data used in events has storage implications for archive nodes.
      Those need to keep the events in storage forever. For that reason
      we want to limit the amount of storage that can be used inside events.
      
      * seal: Fix error reporting in the case out of bound sandbox access
      
      * seal: Refactor existing benchmarks
      
      * seal: Convert benchmark file to tabs
      
      * seal: Add benchmarks for functions called by contracts
      
      * seal: Create a default schedule from benchmark generated WeightInfo
      
      * seal: Make use of WeightInfo in extrinsic weight annotations
      
      * seal: Replace the old schedule by the benchmark generated one
      
      * Review: Fix copy paste typo in schedule construction
      
      * Review: Fix stale docs
      
      * Fix whitespace errors
      
      Co-authored-by: default avatarSergei Shulepov <[email protected]>
      
      * Review: Use checked_div in order to be more defensive
      
      * Review: Rename no_charge to already_charged
      
      * Review: Whitelist caller of extrinsics
      
      * Review: Remove trailing whitespace
      
      * Review: Remove confusing "self::" syntax
      
      * Review: Add docs for the benchmark prepration submodule
      
      * Review: Move code generation functions to own module
      
      * Review: Refactor and document benchmark helper functions
      
      * Remove additional empty line
      
      * Added missing comment on caller_funding
      
      * Update frame/contracts/src/benchmarking/code.rs
      
      Co-authored-by: default avatarSergei Shulepov <[email protected]>
      
      * Fix missing sp_std::prelude import in code.rs
      
      * cargo run --release --features runtime-benchmarks --manifest-path bin/node/cli/Cargo.toml -- benchmark --chain dev --steps 50 --repeat 20 --extrinsic * --execution=wasm --wasm-execution=compiled --output ./bin/node/runtime/src/weights --header ./HEADER --pallet pallet_contracts --heap-pages 4096
      
      * Use weights from the benchmark machine for the substrate node
      
      * Remove prefixes from Schedule members
      
      * Data lengths in the WeightInfo Trait are specified in kilobytes
      
      * Rename ApiWeights to HostFunctionWeights
      
      Co-authored-by: default avatarSergei Shulepov <[email protected]>
      Co-authored-by: default avatarShawn Tabrizi <[email protected]>
      443725f0
  30. Aug 10, 2020
    • Alexander Theißen's avatar
      seal: Change prefix and module name from "ext_" to "seal_" for contract callable functions (#6798) · 04b185e3
      Alexander Theißen authored
      * seal: Change prefix "ext_" to "seal_" for contract callable functions
      
      The word Ext is a overloaded term in the context of substrate. It usually
      is a trait which abstracts away access to external resources usually in order
      to mock them away for the purpose of tests. The contract module has its own
      `Ext` trait in addition the the substrate `Ext` which makes things even more
      confusing.
      
      In order to differentiate the contract callable functions more clearly from
      this `Ext` concept we rename them to use the "seal_" prefix instead.
      
      This should change no behaviour at all. This is a pure renaming commit.
      
      * seal: Rename import module from "env" to "seal0"
      
      * seal: Fixup integration test
      
      * seal: Add more tests for new import module names
      04b185e3
  31. Aug 03, 2020
    • Alexander Theißen's avatar
      seal: Fix and improve error reporting (#6773) · 6671d017
      Alexander Theißen authored
      * seal: Rework ext_transfer, ext_instantiate, ext_call error handling
      
      * Deny calling plain accounts (must use transfer now)
      * Return proper module error rather than ad-hoc strings
      * Return the correct error codes from call,instantiate (documentation was wrong)
      * Make ext_transfer fallible again to make it consistent with ext_call
      
      * seal: Improve error messages on memory access failures
      
      * seal: Convert contract trapped to module error
      
      * seal: Add additional tests for transfer, call, instantiate
      
      These tests verify that those functions return the error types
      which are declared in its docs.
      
      * Make it more pronounced that to_execution_result handles trap_reason
      
      * Improve ReturnCode docs
      
      * Fix whitespace issues in wat files
      
      * Improve ReturnCode doc
      
      * Improve ErrorOrigin doc and variant naming
      
      * Improve docs on ExecResult and ExecError
      
      * Encode u32 sentinel value as hex
      
      * with_nested_context no longer accepts an Option for trie
      
      * Fix successful typo
      
      * Rename InvalidContractCalled to NotCallable
      6671d017
  32. Jul 29, 2020
    • Gavin Wood's avatar
      Cleanup our sort usage (#6754) · 6bfbb7c6
      Gavin Wood authored
      6bfbb7c6
    • Alexander Theißen's avatar
      seal: Add benchmarks for dispatchables (#6715) · a2163420
      Alexander Theißen authored
      * seal: Fix syntax that confuses rust-analyzer
      
      * seal: Add benchmarks for Dispatchables
      
      These are only the benchmarks for the dispatchables of
      the pallet. Those are not listed in the Schedule because
      we do not want to pull the Schedule from storage before
      dispatching.
      
      This OK because those costs are not related to actual contract
      execution. Those costs (instruction costs, ext_* costs) will
      be benchmarked seperatly and entered into the default Schedule.
      
      * seal: Add a maximum code size
      
      * Fix comments from review
      
      * Removed SEED constant
      a2163420
  33. Jul 27, 2020
  34. Jul 10, 2020
  35. Jul 09, 2020
    • Alexander Theißen's avatar
      seal: Rework contracts API (#6573) · 25de5b5c
      Alexander Theißen authored
      * Transition getter functions to not use scratch buffer
      
      * Remove scratch buffer from ext_get_storage
      
      * Remove scratch buffer from ext_call
      
      * Remove scratch buffer from ext_instantiate
      
      * Add ext_input and remove scratch buffer
      
      * Rework error handling (changes RPC exposed data)
      
      * ext_return passes a flags field instead of a return code
      	* Flags is only for seal and not for the caller
      	* flags: u32 replaced status_code: u8 in RPC exposed type
      * API functions use a unified error type (ReturnCode)
      * ext_transfer now traps on error to be consistent with call and instantiate
      
      * Remove the no longer used `Dispatched` event
      
      * Updated inline documentation
      
      * Prevent skipping of copying the output for getter API
      
      * Return gas_consumed from the RPC contracts call interface
      
      * Updated COMPLEXTITY.md
      
      * Rename ext_gas_price to ext_weight_to_fee
      
      * Align comments with spaces
      
      * Removed no longer used `ExecError`
      
      * Remove possible panic in `from_typed_value`
      
      * Use a struct as associated data for SpecialTrap::Return
      
      * Fix nits in COMPLEXITY.md
      
      * Renamed SpecialTrap to TrapReason
      
      * Fix test
      
      * Finish renaming special_trap -> trap_reason
      
      * Remove no longer used get_runtime_storage
      
      * fixup! Remove no longer used get_runtime_storage
      
      * Removed tabs for comment aligment
      25de5b5c