* Add rent_payed field to the contract info
* Don't pay out more as reward as was spent in rent
* Make successful evictions free
* Add tests to check that surcharge reward is capped by rent payed
* review: Fixed docs
* Add `len` function that can return the length of a storage item efficiently
* Make use of the new len function in contracts
* Fix benchmarks
* 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
* Remove unused imports
Co-authored-by: Parity Benchmarking Bot <admin@parity.io>
* commented use of common
* hack to pass tests
* another hack
* remove all commented code
* fix the easy tests
* temp hack
* follow through comma hack until better solution
* patch macro
* missed one
* update benchmarks
* update docs
* fix docs
* removed too much
* fix changes
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
* 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
* 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: Parity Benchmarking Bot <admin@parity.io>
* 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: Andrew Jones <ascjones@gmail.com>
* Fix typo in schedule.rs
Co-authored-by: Andrew Jones <ascjones@gmail.com>
* Fix docs in schedule.rs
* Apply suggestions from code review
Co-authored-by: Nikolay Volf <nikvolf@gmail.com>
* Don't publish proc-macro crate until 3.0.0 is ready
* Optimize imports for less repetition
* Break overlong line
Co-authored-by: Parity Benchmarking Bot <admin@parity.io>
Co-authored-by: Andrew Jones <ascjones@gmail.com>
Co-authored-by: Nikolay Volf <nikvolf@gmail.com>
* contracts: Make use of existing type aliases for runtime API types
* contracts: Refactor the contracts call runtime API
* review: Fix comment typo
Co-authored-by: Andrew Jones <ascjones@gmail.com>
* Update frame/contracts/common/src/lib.rs
Co-authored-by: Nikolay Volf <nikvolf@gmail.com>
* Update frame/contracts/common/src/lib.rs
Co-authored-by: Nikolay Volf <nikvolf@gmail.com>
* Update frame/contracts/common/src/lib.rs
Co-authored-by: Nikolay Volf <nikvolf@gmail.com>
* Update frame/contracts/common/src/lib.rs
Co-authored-by: Nikolay Volf <nikvolf@gmail.com>
* Update frame/contracts/common/src/lib.rs
Co-authored-by: Nikolay Volf <nikvolf@gmail.com>
* Update lib.rs
* review: Group crate imports
Co-authored-by: Andrew Jones <ascjones@gmail.com>
Co-authored-by: Addie Wagenknecht <addie@nortd.com>
Co-authored-by: Nikolay Volf <nikvolf@gmail.com>
* 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: Sergei Shulepov <sergei@parity.io>
* 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: Sergei Shulepov <sergei@parity.io>
* 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: Sergei Shulepov <sergei@parity.io>
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>