With this patch forward this will be the only way for
a contract to destroy itself. This patch therefore changes
the semantics of all other contract initiated balance
transfers to fail if they would bring the caller below the
existential deposit.
* contracts: Add ext_transfer call
This call allows contracts to send balance to any account
contract or not. Previously, the only way to do that was
though ext_call.
* Apply suggestions from code review
Co-Authored-By: Nikolay Volf <nikvolf@gmail.com>
* The define_env! macro does not allow for trailing comma
* Update frame/contracts/src/exec.rs
Co-Authored-By: Nikolay Volf <nikvolf@gmail.com>
* Bump spec version
* Do not use nested gas meter
* Use explicit 0 or 1 as return value
* Remove superflous intermediate binding
Co-authored-by: Nikolay Volf <nikvolf@gmail.com>
* split out ext_clear_storage from ext_set_storage contracts API
* update tests to adjust for the ext_set_storage changes
* adjust COMPLEXITY for the ext_set_storage API changes
* remove value_len == 0 constraint for ext_set_storage
* bump spec_version
* remove guarantee from COMPLEXITY of ext_clear_storage
Co-authored-by: Gavin Wood <gavin@parity.io>
* contracts: Allow to distinguish out of gas from other traps
When a contract encounters a runtime error a wasm trap is
triggered and the execution is halted. Currently, no matter
what was the cause for the trap it is always reported as:
DispatchError::Other("contract trapped during execution").
However, the trap that is triggered if a contract exhausts
its gas budget is particulary interesting. Therefore we add
a seperate error message for this cause:
DispatchError::Other("ran out of gas during contract execution").
A test is added hat executes a contract that never terminates.
Therefore it always exhausts is gas budget.
* fixup! contracts: Allow to distinguish out of gas from other traps
Remove overlong lines.
* fixup! contracts: Allow to distinguish out of gas from other traps
Rename Contract to Contracts
* contracts: during execution -> contract trapped during execution
This message confused many people so we are improving it to make clear what happened.
* contracts: rename Event::Contract -> Event::ContractExecution
* contracts: fix tests after ContractExecution renaming
* contracts: Add Evicted and Restored events
* fix doc comment
* wrap to not go over (soft) 100 column line limit
* add event deposit for eventual eviction upon pay_rent
* contracts: adjust tests for the new events
* emit Evicted event immediately and add tombstone flag bool
* Make `decl_error!` errors usable
This pr implements support for returning errors of different pallets in
a pallet. These errors need to be declared with `decl_error!`.
The pr changes the following:
- Each dispatchable function now returns a `DispatchResult` which is an
alias for `Result<(), DispatchError>`.
- `DispatchError` is an enum that has 4 variants:
- `Other`: For storing string error messages
- `CannotLookup`: Variant that is returned when something returns a
`sp_runtime::LookupError`
- `BadOrigin`: Variant that is returned for any kind of bad origin
- `Module`: The error of a specific module. Contains the `index`,
`error` and the `message`. The index is the index of the module in
`construct_runtime!`. `error` is the index of the error in the error
enum declared by `decl_error!`. `message` is the message to the error
variant (this will not be encoded).
- `construct_runtime!` now creates a new struct `ModuleToIndex`. This
struct implements the trait `ModuleToIndex`.
- `frame_system::Trait` has a new associated type: `ModuleToIndex` that
expects the `ModuleToIndex` generated by `construct_runtime!`.
- All error strings returned in any module are being converted now to `DispatchError`.
- `BadOrigin` is the default error returned by any type that implements `EnsureOrigin`.
* Fix frame system benchmarks
* Adding script for rename, could be applicable for nodes on top of it, too
* add stderr and gitlab ci features
* apply script
* fix now minor details in expected stderr
* Update the Cargo.lock
* fix name: sc-transaction -> sc-tracing
* fix rename in script, too