1. 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
  2. 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
  3. 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
  4. Jul 27, 2020
  5. Jul 10, 2020
  6. 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
  7. Jun 24, 2020
  8. Jun 23, 2020
    • Sergey Pepyakin's avatar
      pallet-contracts: migrate to nested storage transaction mechanism (#6382) · f36b7857
      Sergey Pepyakin authored
      
      
      * Add a simple direct storage access module
      
      * WIP
      
      * Completely migrate to the transactional system.
      
      * Format
      
      * Fix wasm compilation
      
      * Get rid of account_db module
      
      * Make deposit event eager
      
      * Make restore_to eager
      
      * It almost compiles.
      
      * Make it compile.
      
      * Make the tests compile
      
      * Get rid of account_db
      
      * Drop the result.
      
      * Backport the book keeping.
      
      * Fix all remaining tests.
      
      * Make it compile for std
      
      * Remove a stale TODO marker
      
      * Remove another stale TODO
      
      * Add proof for `terminate`
      
      * Remove a stale comment.
      
      * Make restoration diverging.
      
      * Remove redudnant trait: `ComputeDispatchFee`
      
      * Update frame/contracts/src/exec.rs
      
      Co-authored-by: default avatarAlexander Theißen <[email protected]>
      
      * Introduce proper errors into the storage module.
      
      * Adds comments for contract storage module.
      
      * Inline `ExecutionContext::terminate`.
      
      * Restore_to should not let sacrifice itself if the contract present on the stack.
      
      * Inline `transfer` function
      
      * Update doc - add "if succeeded"
      
      * Adapt to TransactionOutcome changes
      
      * Updates the docs for `ext_restore_to`
      
      * Add a proper assert.
      
      * Update frame/contracts/src/wasm/runtime.rs
      
      Co-authored-by: default avatarAlexander Theißen <[email protected]>
      
      Co-authored-by: default avatarAlexander Theißen <[email protected]>
      Co-authored-by: default avatarAlexander Theißen <[email protected]>
      f36b7857
  9. Apr 24, 2020
  10. Mar 25, 2020
  11. Mar 20, 2020
    • Hero Bird's avatar
      Implement ext_ hashes for contracts (issue #5258) (#5326) · 017f2189
      Hero Bird authored
      * Implement ext_ hashes for contracts (issue #5258)
      
      * load cryto hash .wat from raw string literal instead of file
      
      * update .wat contents for testing crypto hashes
      
      * remove unnecessary 'static
      
      * fix bug in input (call_indirect required 1+ at least it seems)
      
      * no longer use scratch buffer for crypto hash functions
      
      * improve doc comments of ext_ hash functions
      
      * remove unnecessary comment in .wat test file
      
      * add return value (const 0) to contract test to hopefully enable result buffer
      
      * fix bug in contract assertion
      
      * implement proper output_len in contract
      
      * implement proper test for crypto hashes
      
      * bump spec_version 238 -> 239
      
      * fix COMPLEXITY description
      
      * remove final invalid instances of scratch buffer from docs
      017f2189
  12. Mar 17, 2020
    • Alexander Theißen's avatar
      Add `ext_terminate` (#5234) · 601f2538
      Alexander Theißen authored
      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.
      601f2538
  13. Mar 14, 2020
  14. Mar 11, 2020
  15. Feb 17, 2020
    • Shawn Tabrizi's avatar
      Fix various spelling errors (#4940) · c7a14db7
      Shawn Tabrizi authored
      
      
      * meaningfull -> meaningful
      
      * initialise -> initialize
      
      * tokans -> tokens
      
      * incentivise -> incentivize
      
      * lenght -> length
      
      * incentivisation -> incentivization
      
      * doesnt't -> doesn't
      
      * overwriten -> overwritten
      
      * lifecycle -> life cycle
      
      * lifecycle -> life cycle
      
      * usefull -> useful
      
      * noone -> no one
      
      * spaming -> spamming
      
      * defered -> deferred
      
      * hieght -> height
      
      * sumation -> summation
      
      * ingore -> ignore
      
      * registed -> registered
      
      * Auxialary -> Auxiliary
      
      * loggin -> logging
      
      * independance -> independence
      
      * trailling -> trailing
      
      * responsability -> responsibility
      
      * trunkated -> truncated
      
      * Weither -> Whether
      
      * informations -> information
      
      * Runtume -> Runtime
      
      * choosen -> chosen
      
      * delcataion -> declaration
      
      * Unchekced -> Unchecked
      
      * defintion -> definition
      
      * scrach -> scratch
      
      * imput -> input
      
      * transfered -> transferred
      
      * endownment -> endowment
      
      * Determinator -> Determiner
      
      * relevent -> relevant
      
      * emited -> emitted
      
      * acocunt -> account
      
      * proprotional -> proportional
      
      * instantiaion -> instantiation
      
      * commited -> committed
      
      * tombstonedead -> tombstone
      
      * uwnrap -> unwrap
      
      * acount -> account
      
      * specialised -> specialized
      
      * existant -> existent
      
      * requried -> required
      
      * Anull -> Annul
      
      * AUTHORITES -> AUTHORITIES
      
      * underyling -> underlying
      
      * recognisable -> recognizable
      
      * Capitalise -> Capitalize
      
      * reportfor -> report for
      
      * hearbeat -> heartbeat
      
      * onlineness -> being online
      
      * creater -> creator
      
      * Bytearray -> Byte array
      
      * Despoit -> Deposit
      
      * substratced -> subtracted
      
      * Curent -> Current
      
      * imbalanes -> imbalances
      
      * countfown -> countdown
      
      * inexisting -> inexistent
      
      * additionaly -> additionally
      
      * substracted -> subtracted
      
      * auxilary -> auxiliary
      
      * parital -> partial
      
      * in't -> isn't
      
      * compatability -> compatibility
      
      * infomation -> information
      
      * etected -> detected
      
      * extrinsiscs -> extrinsics
      
      * reprensentation -> representation
      
      * coonfiguration -> configuration
      
      * primtives -> primitives
      
      * miscelanious -> miscellaneous
      
      * VERISON -> VERSION
      
      * endcoded -> encoded
      
      * Genrates -> Generates
      
      * miliseconds -> milliseconds
      
      * occured -> occurred
      
      * trully -> truely
      
      * truely -> truly
      
      * conjuction -> conjunction
      
      * encouters -> encounters
      
      * customised -> customized
      
      * deterministicly -> deterministically
      
      * finalisation -> finalization
      
      * pluggable -> plugable
      
      * wakeup -> wake-up
      
      * interemdiate -> intermediate
      
      * intepreting -> interpreting
      
      * finalzied -> finalized
      
      * throgh -> through
      
      * extinsic -> extrinsic
      
      * convient -> convenient
      
      * allocater -> allocator
      
      * propagateable -> propagatable
      
      * succesfuly -> successfully
      
      * finalising -> finalizing
      
      * publically -> publicly
      
      * phrasee -> phrase
      
      * substration -> substractions
      
      * substractions -> subtractions
      
      * neccessarily -> necessarily
      
      * Inlucde -> Include
      
      * unefficient -> inefficient
      
      * thay -> they
      
      * funtion -> function
      
      * datastructures -> data structures
      
      * infromation -> information
      
      * propagatable -> propagable
      
      * ecountered -> encountered
      
      * recognise -> recognize
      
      * intergration -> integration
      
      * lastet -> latest
      
      * datatypes -> data types
      
      * datatype -> data type
      
      * Strongarming -> Strong Arming
      
      * avaible -> available
      
      * Commiting -> Committing
      
      * Retreiving -> Retrieving
      
      * shoud -> should
      
      * canonicaliziation -> canonicalization
      
      * comitted -> committed
      
      * clonable -> cloneable
      
      * Uknown -> Unknown
      
      * reponse -> response
      
      * arbitary -> arbitrary
      
      * Capapbilities -> Capabilities
      
      * responsbile -> responsible
      
      * initialisation -> initialization
      
      * cames -> came
      
      * intemediate -> intermediate
      
      * reqeust -> request
      
      * intance -> instance
      
      * explcitly -> explicitly
      
      * neighor -> neighbor
      
      * reolving -> resolving
      
      * untill -> until
      
      * Validte -> Validate
      
      * deserailize -> deserialize
      
      * literaly -> literally
      
      * preceeding -> preceding
      
      * abpve -> above
      
      * chcecked -> checked
      
      * numbet -> number
      
      * Unknow -> Unknown
      
      * halfs -> halves
      
      * gossup -> gossip
      
      * givent -> given
      
      * immediatelly -> immediately
      
      * slicable -> sliceable
      
      * conensus -> consensus
      
      * Mimicks -> Mimics
      
      * acccept -> accept
      
      * serialise -> serialize
      
      * exstrinsics -> extrinsics
      
      * panicks -> panics
      
      * maintaince -> maintenance
      
      * repeatidely -> repeatedly
      
      * anecstor -> ancestor
      
      * becasue -> because
      
      * processer -> processor
      
      * Prunning -> Pruning
      
      * insterested -> interested
      
      * unuseful -> not useful
      
      * yeided -> yielded
      
      * descendfing -> descending
      
      * corresponts -> corresponds
      
      * survivew -> survive
      
      * keps -> keeps
      
      * ligh -> light
      
      * prerequisities -> prerequisites
      
      * positiion -> position
      
      * depedency -> dependency
      
      * extrinisic -> extrinsic
      
      * atomicaly -> atomically
      
      * staticly -> statically
      
      * resul -> result
      
      * timestamb -> timestamp
      
      * Utilites -> Utilities
      
      * ammount -> amount
      
      * pocess -> process
      
      * exteral -> external
      
      * Update client/finality-grandpa/src/tests.rs
      
      * Update primitives/io/src/lib.rs
      
      Co-Authored-By: default avatarjoe petrowski <[email protected]>
      
      * Update primitives/blockchain/src/lib.rs
      
      Co-Authored-By: default avatarjoe petrowski <[email protected]>
      
      * Update frame/support/src/weights.rs
      
      Co-Authored-By: default avatarjoe petrowski <[email protected]>
      
      * Update bin/node/cli/tests/common.rs
      
      Co-Authored-By: default avatarjoe petrowski <[email protected]>
      
      * Update client/api/src/execution_extensions.rs
      
      Co-Authored-By: default avatarjoe petrowski <[email protected]>
      
      * Update client/cli/src/params.rs
      
      Co-Authored-By: default avatarjoe petrowski <[email protected]>
      
      * Update client/executor/common/src/sandbox.rs
      
      Co-Authored-By: default avatarjoe petrowski <[email protected]>
      
      * Update client/api/src/execution_extensions.rs
      
      Co-Authored-By: default avatarjoe petrowski <[email protected]>
      
      * Update client/finality-grandpa/src/communication/mod.rs
      
      Co-Authored-By: default avatarjoe petrowski <[email protected]>
      
      * Update client/state-db/src/pruning.rs
      
      Co-Authored-By: default avatarjoe petrowski <[email protected]>
      
      * Update frame/contracts/src/tests.rs
      
      Co-Authored-By: default avatarjoe petrowski <[email protected]>
      
      * Update client/api/src/execution_extensions.rs
      
      * bump impl
      
      * timestamb -> timestamp
      
      Co-authored-by: default avatarjoe petrowski <[email protected]>
      c7a14db7
  16. Feb 14, 2020
    • Alexander Theißen's avatar
      Allow to distinguish out of gas from other traps (#4883) · b999911b
      Alexander Theißen authored
      * 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
      b999911b
  17. Jan 29, 2020
  18. Jan 23, 2020
  19. Jan 21, 2020
    • Hero Bird's avatar
      contracts: New contract events + unconfusions (#4685) · caa6efa5
      Hero Bird authored and Sergey Pepyakin's avatar Sergey Pepyakin committed
      * 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
      caa6efa5
  20. Jan 05, 2020
  21. Dec 19, 2019
    • Bastian Köcher's avatar
      Make `decl_error!` errors usable (#4449) · 8e393aa5
      Bastian Köcher authored
      * 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
      8e393aa5
  22. Dec 16, 2019
    • Tomasz Drwięga's avatar
      [big refactor] Remove crate aliasing. (#4395) · 8778ca7d
      Tomasz Drwięga authored
      * Rename: Phase 1.
      
      * Unify codec.
      
      * Fixing: Phase 2
      
      * Fixing: Phase 3.
      
      * Fixing: Phase 4.
      
      * Fixing: Phase 5.
      
      * Fixing: Phase 6.
      
      * Fixing: Phase 7.
      
      * Fixing: Phase 8. Tests
      
      * Fixing: Phase 9. Tests!!!
      
      * Fixing: Phase 10. Moar tests!
      
      * Finally done!
      
      * More fixes.
      
      * Rename primitives:: to sp_core::
      
      * Apply renames in finality-grandpa.
      
      * Fix benches.
      
      * Fix benches 2.
      
      * Revert node-template.
      
      * Fix frame-system in our modules.
      8778ca7d
  23. Dec 10, 2019
  24. Dec 02, 2019
    • Benjamin Kampmann's avatar
      The crate rename (#4223) · 927e13c1
      Benjamin Kampmann authored
      * 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
      927e13c1
  25. Nov 22, 2019