Commit Graph
49 Commits
Author SHA1 Message Date
Sergey Pepyakin e7d1933d25 Extract well known keys into a single place (#764)
* Extract well known keys into a single place

* Fixes.
2018-09-18 16:20:36 +02:00
Sergey Pepyakin ea1b9bf026 SRML: fix OOB in srml_staking new_era. (#755) 2018-09-17 17:26:47 +02:00
Sergey Pepyakin dcd181f31e Contracts: return arbitrary sized buffers (#711)
* WIP

* Direct return of output data.

* Docs and renamings.

* Add get_storage test.

* Overwrite the scratch buffer.
2018-09-15 12:46:59 +02:00
Sergey Pepyakin 56def2a38b Build project with --locked on CI (#743)
* Add --locked to the cargo build

* Remove trailing spaces

* Update Cargo.lock
2018-09-15 10:06:20 +02:00
Sergey Pepyakin 88ef57e4bd Contracts: fix transfer function. (#733) 2018-09-13 14:25:20 +02:00
Sergey Pepyakin 8fe5aa4c81 Extract SimpleAddressDeterminator (#716) 2018-09-11 18:39:31 +02:00
Sergey Pepyakin 7520d601e3 Contracts: Add contract's GenesisConfig in demo-runtime (#712)
* Add contracts to GenesisConfig in demo-runtime

* Update roots.
2018-09-11 18:10:24 +02:00
Sergey Pepyakin e8f4b85029 Timestamp module docs (#713)
* Timestamp docs

* Add missing /
2018-09-11 17:53:36 +02:00
Sergey Pepyakin d7d591cf54 Try to remove the caching from the build (#701) 2018-09-11 10:51:17 +02:00
Sergey Pepyakin 6c1b2c27d1 Integrate contracts into substrate-demo runtime (#675)
* Introduce data and salt into ContractAddressFor

* Accept salt arg in ext_create.

* Integrate contracts into the demo runtime

* Make libcontract compile to wasm

* Remove salt parameter.

This now is concern of userspace.

* Rebuild binaries.
2018-09-10 19:45:19 +02:00
Sergey Pepyakin 73ad673404 Contract runtime polishing (#601)
* Rename ext_transfer → ext_call

There are several tests where gas was changed. This is due to shrinking
the name and consequently a size of contracts.

* Fix macros

Specifically, make fixes that allows to use a function without arguments (apart from ctx).
For example:

```rust
ext_return_42(ctx) -> u32 => {
    Ok(42)
}
```

Also, add impl ConvertibleToWasm for u64.

* Implement passing input data buffer from top-level

This allows the transaction initiator to pass some input data that can be accessed from the executed contract.

However, this only works for the top-level contract. The contract still cannot pass input data to the callee contract. The reason for that is that API doesn't support this presently.
This will be addressed in the following commits.

* Input data passing thru `ext_call`

`ext_call` now takes a buffer (or more specifically, pointer  to the start of and size of a buffer).

This allows contracts to pass input data while calling into other contracts.

* Input data passing thru `ext_create`

Same as previous commit but for `ext_create`.

* Trap on decoding error instead of panicking

* Don't cascade failure in ext_call

Instead, if callee doesn't complete successfuly, return a non-zero status code.

This will prevent cascading traps up to the top-level. Due to this some tests were altered so that they now expect successful transfer instead of a failure.

* Don't cascade failure in ext_create

Same as previous commit but for ext_create.

* Specify how much gas to allot for a call

* Specify how much gas to allot for a create

* Update tests.rs
2018-09-01 12:02:10 +02:00
Sergey Pepyakin 2601392d6a Install llvm-tools-preview component (#643) 2018-08-31 18:04:05 +02:00
Sergey Pepyakin 283eb383c0 5 random fixes (#2) (#623)
* Tabs instead of spaces.

* Remove double spaces.

* Add spaces between ID and the following {

* Update to nightly 2018-08-27

* Align wat code properly
2018-08-29 11:26:44 +02:00
Sergey Pepyakin 20655af97b Contracts: Per block gas limit (#506)
* Add block gas limit check

* Fix formatting

* Add block_gas_limit test.

* Use ExtBuilder in tests

* Docs and clean-up.

* Correct style
2018-08-28 16:58:27 +01:00
Sergey Pepyakin 4e9f40840c Contract signatures checking (#478)
* Convert T in vm::Ext to a associated type

* WIP

* Fix BTreeMap

* Extract prepare module from vm.

* Move tests as well.

* Fix doc comment.

* macro for env defintion

* Fix prepare tests.

* Clean up

* Renamings

* Refactor scan_imports

* Improve docs

* Docs.

* Add some tests for sandbox module

* Clean up

* Use Error::Instantiate instead of ::Deserialize

* Add test for imports

* Add wrong sig import

* Clean up

* Rebuild binaries.

* Use "another_module" instead of obscure "vne"

Since "vne" looks like an actual typo
2018-08-27 16:09:10 +02:00
Sergey Pepyakin 969fcfb97f Minor fixes for nightly 2018-08-18 (#600)
* Don't use --export-table anymore

Because it was turned on by default in the recent nightlies.

See https://github.com/rust-lang/rust/pull/53237

* use_extern_macros stabilization

With recent nightlies rustc produces a warning

```
the feature `use_extern_macros` has been stable since 1.30.0 and no longer requires an attribute to enable
```
2018-08-25 11:59:52 +02:00
Sergey Pepyakin 3f366cc738 Implement it. (#569) 2018-08-19 18:50:42 +02:00
Sergey Pepyakin dce3e8c477 If contract reaches max depth, return Err (#503) 2018-08-08 20:11:30 +02:00
Sergey Pepyakin 917709dda0 Place call data into a newly allocated pages (#502) 2018-08-07 16:40:25 +02:00
Sergey Pepyakin 8c527f2999 Make contract a separate runtime module (#345)
* decl_module and extract runtime mod

* Invert dependency staking←→contract

* Remove CodeOf

* Remove StorageOf and move double_map

* Comment staking test

* Clean

* Add gas_price and gas_limit

* Commit.

* Renames

* Params

* WIP

* Rename transfer to call

* WIP

* Rebuild binaries.

* WIP

* Backport ctro changes

* Call wiring

* Commit overlay.

* Rename merge → commit, into_state → ..._change_set

* WIP

* Contract creation routines

* Set code of the created account.

* Fix the ID of `create` Call

* Fix most of the warning.

* Add the simplest test in the contract crate

* Transfers work!

* Add contract_create test.

* Clean

* Add top-level create test

* Clean a bit.

* Pass gas_limit and data via create.

* Introduce OnAccountKill callback in staking

* Hook up OnAccountKill

* Comments

* Pay for gas.

* Refund unused gas in call

* Tests for zero call and zero endownment.

* Add todo about rewriting docs

* Pay for gas in create transactions

* Fix refunds

* Clean unrelevant comments

* fixup! Fix refunds

* fixup! Clean unrelevant comments

* Move DetermineContractAddress to contract

Also restore account removal test

* fixup! Clean unrelevant comments

* Inline effect_transfer, remove effect_create

Remove account_db!

* Use own new_test_ext.

* Don't account for liability

* Add some docs

* Move contract_fee into contract module

* Take GasMeter in vm::execute

* Use GasMeter throughout contract module for meter

* gas module refactoring

* Clean

* Add base call fee

* note about gas price should be taken from storage

* Add base fee for create

* Rename send → call

* Clean

* Take fee expressed in dots in gas

* Add Checked{Add,Sub,Mul,Div} to SimpleArithmetic

* Make Gas generic

* Store {call,create}_base_fee in storage

* Clean

* Rename buy_gas

* Store gas_price in the storage

* Remove unneeded comment.

* Bail out if contract already has code.

* Todos

* Refund even if top-level contract fails.

* Fix error msg

* Fix caller issue

* Extract tests module

* Add max_depth var in storage

* Remove left over gas_left

* Refactor exec

* Add test oog test.

* set_free_balance_creating

* Docs and comments.

* Update storage roots because of ContractFee move

* Rebuild binaries.

* Simplify vm code.

* Wrapping.

* Refactor a bit.

* Typo

* UpdateBalanceOutcome enum

* Style grumbles.

* Rebuild binaries.

* Always consume the given amount of gas.

* [skip ci] endownment → endowment

* Rename `AccountId` generic in on_account_kill

* Fix Cargo.lock

* Refine docs for gas meter.

* [skip ci] Add comments for gas module

* Directly assign to `return_data` at declaration

* Use slices instead of vecs to pass the input data

* Add todo about passing return data without copy

* Use checked_add instead of add with overflow

* Use return_data directly.

* Rebuild binaries.

* Rebuild binaries.
2018-07-29 14:55:55 +01:00
Sergey Pepyakin 9bcecefbe0 Iterate over overlay to decide which keys to purge (#436) 2018-07-28 09:13:38 +01:00
Sergey Pepyakin 94be7783e2 5 random fixes (#1) (#435)
* ok_or → ok_or_else

* Correct the sides of the given and expected args

* Indent } properly

* Convert identation from tabs to spaces.

* Convert identation from tabs to spaces. [2]
2018-07-27 15:55:34 +02:00
Sergey Pepyakin 7dcbf77c9d Use create instead of open for export blocks (#356) 2018-07-17 22:52:42 +02:00
Sergey Pepyakin b45020175a Use --export-table from the latest LLD [2] (#325)
* It turned out that "table" was renamed.

To `__indirect_function_table`.

* Rebuild binaries.
2018-07-15 20:12:34 +02:00
Sergey Pepyakin fed50df6ed Use --export-table from the latest LLD (#316)
* Remove unused build.sh

* Don't use wasm-export-table anymore.

* Rebuild binaries.

* Fix build script.
2018-07-15 14:09:29 +02:00
Sergey Pepyakin a3b1b98a90 Fix for nightly 2018-07-10 (#296)
* Use [alloc_error_handler] instead of oom lang item

* Same fix for basic_add

* Drive by fix for duplicate generic parameter

* Rebuild binaries.
2018-07-11 15:40:33 +02:00
Sergey Pepyakin a472fe4430 Update pwasm to the latest nightly (#290)
- Update parity-wasm to 0.31
- Update pwasm-utils to 0.3.1
- Update usages of btree map in runtime-std
2018-07-09 19:18:01 +02:00
Sergey Pepyakin 181e7313d2 Bump wasmi to 0.3.0 (#278) 2018-07-04 15:47:16 +02:00
Sergey Pepyakin 2510774f3b Prevent account storage leakage (#270)
* WIP

* Iteration over all keys with the specified prefix

* Add clear_prefix in runtime-io

* Introduce a custom storage impl: Double Map

* Remove prefix

* Impl for_keys_with_prefix for light client

* Fix wasm_executor

* Test storage removal leads to removal of stroage

* Check for ok result in storage tests.

* Add docs.

* Remove commented code under decl_storage!

* Add clear_prefix test in runtime-io

* Add test for wasm_executor

* Prefix walking test.

* Rebuild binaries.
2018-07-03 20:52:08 +02:00
Sergey Pepyakin e6a7c64518 Bump wabt to 0.4. (#274) 2018-07-03 16:38:39 +02:00
Sergey Pepyakin b3e2a9e89c Restore previous version of ext_sandbox_invoke (#236)
* Restore previous version of ext_sandbox_invoke.

* Rebuild binaries.
2018-06-25 12:12:27 +02:00
Sergey Pepyakin 2f9ffb78e4 Update README.md (#242)
* Update README.md

* clang is not required
2018-06-25 11:42:33 +02:00
Sergey Pepyakin 9804056c4e Refactor travis: Build on minimal image (#243)
* Attempt 1

* minimal → generic

* Add -y to rustup script

* Remove clang

* Refactor.

* Remove CARGO_TARGET_DIR for now

* Display versions of tools from the rust toolchain

* Fix
2018-06-25 11:41:52 +02:00
Sergey Pepyakin f1b851871e Argument passing and returning values when invoking sandboxed funcs (#189) 2018-06-19 16:24:08 +03:00
Sergey Pepyakin aebfd38250 Merge pull request #214 from paritytech/dk-pwasm-alloc-fix
Fixes `WasmAllocator` to reflect recent nightly API changes
2018-06-15 13:10:05 +03:00
Sergey Pepyakin 4dc6af8019 Merge pull request #210 from paritytech/ser-refactor-build
Refactor build scripts.
2018-06-11 13:15:56 +03:00
Sergey Pepyakin ca48416968 Refactor build scripts. 2018-06-08 19:59:15 +03:00
Sergey Pepyakin 14675edcbc Build parachains (#207)
* Fix build of test-chains.

* Add test-chains into build and publish scripts
2018-06-08 12:52:58 +02:00
Sergey Pepyakin ff0d9c3359 Extract smart-contract runtime into the separate crate (#179)
* Apply inversion of control to contract module.

* Extract contract to it's own crate.

* Rebuild binaries.
2018-06-05 14:18:08 +02:00
Sergey Pepyakin 68e468f59c Use #[panic_implementation] attribute that was landed in the recent nightly (#199)
* Use [panic_implementation] instead of lang item

* Rebuild binaries.
2018-06-04 19:11:42 +02:00
Sergey Pepyakin 5f9aca2137 Contracts: Memory and Module instance teardowns (#171)
* Add teardowns.

* Rebuild binaries.
2018-05-24 13:18:55 +01:00
Sergey Pepyakin f3284e964a Contracts: Make Balance Slicable. (#168)
* Make Trait::Balance: Slicable

* Rebuild binaries.
2018-05-23 16:03:54 +01:00
Sergey Pepyakin 7312a26d09 Smart-contract inspection and instrumentation. (#165)
* Extract mock module.

* Wasm smart-contract instrumentation

* Rebuild binaries.

* Memory limits and tests.
2018-05-23 13:45:57 +02:00
Sergey Pepyakin 37029eb42f Sandbox: run start function. (#153)
* sandbox: run start function.

* Add docs.

* Add a missing_docs to sandbox module.

* Fix typo in the naming.
2018-05-17 12:54:56 +02:00
Sergey Pepyakin 5a56fbcea3 Sandboxing and the simplest smart-contract runtime (#140)
* Add primitives for sandboxing.

* Add sandbox module.

* Implement the runtime part of the sandbox.

* Rebuild binaries.

* Implement smart-contract execution.

* Add more documentation.
2018-05-01 20:32:01 +02:00
Sergey Pepyakin 052c50b536 Refactor Externalities to AccountDb. (#112)
* Refactor Externalities to AccountDb.

* Recompile wasm.
2018-04-11 14:24:57 +02:00
Sergey Pepyakin 633b9f4c0b Support without_std env in environmental! (#110)
* Make environmental crate support without_std env.

* Small doc fixes.
2018-04-05 17:23:43 +02:00
Sergey Pepyakin b0d8eeb526 Migrate from parity-wasmi to wasmi. (#103) 2018-04-04 21:39:41 +02:00
Sergey Pepyakin 96fb93b09c Fix wasm build (#102)
* Reserve pages for heap at initialization time

Since it is freshly allocated memory it won't collide with stack, data or whatever else.

* Compile all wasm files with LTO.

Modules compiled without LTO contain undesired imports and outright invalid (e.g. type mismatches inside the wasm).
2018-03-21 15:44:14 +08:00