* 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.
* 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
* 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
* 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
```
* 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.
* 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]
* 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.
* Add primitives for sandboxing.
* Add sandbox module.
* Implement the runtime part of the sandbox.
* Rebuild binaries.
* Implement smart-contract execution.
* Add more documentation.
* 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).