Unverified Commit 321fe03a authored by Hero Bird's avatar Hero Bird Committed by GitHub

Implementation of ink! env (revision 3) (#312)

* [core] initial implementation of env revision 3

* add engine abstraction layer and implement api functions

* add support for dispatch_call to env3

* add missing invoke_runtime to api.rs

* [core] fix restore_contract docs

* [core] initial implementation of off-chain environment

* [core] clean-up of env3 fundamental types

* [core] add WasmEnv::reset_buffer

* show test submodule of env3 when compiling with rustdoc

* [core] initial implementation of the off-chain env instance

Also many other adjustments.

* [core] further enhancements to off-chain env

* [core] implement untyped Env for off-chain environment

* [core] implemented a good chunk of TypedEnv for the off-chain environment

* [core] minor improvements to env3

* [core] further improvements and additions to test-api of env3

* [core] remove former test-api file

* [core] env3: add support for ext_tombstone_deposit

* [core] env3: add setting of rent allowance in off-chain env

* [core] env3: remove buffer.rs

* [core] env3: remove property.rs

* [core] env3: mark some TypedEnv methods as not-todo

* [core] env3: enable off-chain api for non test/doc builds

* [core] env3: use a static buffer instead of Vec<u8>

* [core] env3: move static buffer into its own module

* fix doc comment
Co-Authored-By: Michael Müller's avatarMichael Müller <mich@elmueller.net>

* [core] env3: add missing license header

* [core] env3: remove deprecated doc note

* [core] env3: add off-chain {set/get}_runtime_storage

* [core] env3: add off-chain invoke_runtime dispatch

This also enables support for registering custom runtime call handlers.

* [core] env3: slightly improve env3::random docs comment

* [core] env3: move off-chain errors under EnvError

* [core] env3: add ext_random support for the off-chain environment

* [core] env3: minor clean ups

* [core] env3: improve TypedEncoded::assign

* [core] env3: un-mut some variables

* [core] env3: fix some clippy warnings

* [core] env3: add past_printlns to off-chain test api

* [core] env3: minor refactoring

* [core] env3: apply rustfmt

* [core] env3: clean up of call and instantiate contract

* [core] env3: rename moment -> time_stamp

* [core] env3: make get_runtime_storage return a Result instead of RetCode

* [core] env3: remove unneeded import

* [core] env3: add some trait impls for EnvTypes::Hash

* [core] env3: remove last remaining usages of RetCode

* [core] env3: refactor some errors

* [core] env3: document the EnvError enum

* [core] env3: add impls for fire methods on call and create builders

* [core] env3: add doc comment to past_printlns

* [core] env3: apply rustfmt

* [core] env3: update license headers

* [core] env3: support querying and emitting of events in off-chain env

* [core] env3: missing license header adjustment

* [core] env3: apply rustfmt

* [core] env3: rename some methods in off-chain test-api

* [core] env3: add doc comment to test::emitted_events

* [core] env3: add stub for test::advance_block

* [core] env3: rename some more test API methods

* [core] env3: initialize entropy of block randomly

* [core] env3: extend EnvTypes trait bounds

This change makes the trait bounds more similar to what Substrate defines.

* [core] env3: document SimpleArithmetic trait

* [core] env3: add From<u32> to SimpleArithmetic trait

* [core] env3: made some trait bounds more explicit in SimpleArithmetic trait

* [core] env3: add comment describing potential future extensions to SimpleArithmetic trait

* [core] env3: rename EnvTypes::Moment to TimeStamp

* [core] env3: add block_time to ChainSpec

* [core] env3: remove CodeDb again

Not needed right now. Maybe re-added at a later point.

* [core] env3: apply rustfmt

* [core] env3: implement off-chain test::advance_block

* [core] env3: fix bug in off-chain test::advance_block impl

* [core] env3: made SimpleArithmetic trait more explicit towards Output types

* [core] env3: add default initialization routines for off-chain environment

* [core] env3: remove test::create_user_account for now

* [core] env3: fix missing renaming from Moment -> TimeStamp

* [core] env3: impl PartialEq and Eq for off-chain error types

* [core] env3: add test::run_test for off-chain testing with default setup

* [core] env3: fix several minor bugs with the off-chain environment

* [core] convert key.rs tests to new env3

* [core] remove commented out code in key.rs tests

* [core] evn3: add test::get_contract_storage_rw

* [core] use env3 instead of env1 in storage cells

* [core] integrate env3 into storage::TypedChunk

* [core] remove storage::RawChunk and NonCloneMarker

* [core] adjust SyncChunk slightly for TypedChunk modifications

* [core] simplify transitioned env3 tests for TypedChunk

* [core] transition tests for SynChunk to env3

* [core] transition storage::Stash tests to env3

* [core] transition storage::HashMap tests to env3

* [core] transition storage::BinaryHeap tests to env3

* [lang] remove the entire ink! lang crate

It has been deprecated for a whole while.

* [model] remove ink! model crate entirely

It has been deprecated for a whole while.

* [core] remove the old env1 sub-module of ink_core

It has been deprecated for a whole while.

* [examples] remove model examples

* [examples] remove lang examples

* [examples] remove core examples

* remove "If given too few endowment" from docs
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* fix doc comment
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* fix doc comment
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* [lang2] initial steps towards basing on env3 instead of env2

With this commit `cargo contract build` already works.
However, cargo test etc. are still broken.

* [lang2] make macros work for `cargo test`

* [core, lang2] make contracts compile as ink-as-dependency

* [lang2] make events work for ink_lang2 on env3

* [lang2] remove AccessEnv - no longer needed

* [core] remove env2

* [lang2] fix tests

- Fix warning in ink_lang2
- Remove no longer needed test case
- Adjust some passing tests after default module import removal

* [*] apply rustfmt

* [lang2] silence unused warning for now

* [core] rename {create|Create}* to {instantiate|Instantiate}*

- CreateBuilder -> InstantiateBuilder
- CreateParams -> InstantiateParams
- create -> instantiate

* [core] rename endowment -> transferred_value for CallBuilder/Params

* [examples] adjust Delegator contracts for recents changes

* [core] rename now_in_ms -> block_timestamp

* [core] follow-up of the call renamings (transferred_value)

* [lang2] rename now_in_ms -> block_timestamp

* [examples] move examples out of the examples/lang2 folder

* [examples] fix runtime-storage example contract

* [examples] fix Flipper contract

* [examples] fix Incrementer contract

* [examples] fix Erc20 contract

* [utils] add Key and byte_utils to ink_utils

* [utils -> primitives] rename ink_utils -> ink_primitives

* [*] move all links from ink_utils -> ink_primitives

* [primitives] update Cargo.toml description

* [*] use ink_primitives::Key remove ink_core::Key

* [primitives] refactor new crate, make it more usable in ink! context

* [*] relink to ink_primitives for Key usage

* [abi] refactor macros and relink to ink_primitives::Key

* [lang2] fix usage of renamed Create{Builder, Params}

* [examples] fix examples under recent changes with ink_primitives

* [*] apply rustfmt

* [lang2/macro] remove deprecated feature usage of proc_macro_hygiene

* [examples] remove deprecated proc_macro_hygiene feature

* [core] remove test_utils

* [core] rename env3 to env

* [*] rename all usages of env3 to env

* [core] fix feature usage in num-traits of ink_core Cargo.toml

* [*] update README

* [primitives] conditionally compile type_metadata from ink_primitives

* [core] make env::get_contract_storage return Option<Result<T>>

* [core] fix some faulty doc comments

* [ci] fix GitLab CI

* [primitives] fix no_std compilation

* [primitives] fix warning

* [core] make `rand` dependency optional for `std` crate feature

* [core] remove the test-env crate feature from the ink_core crate

* [core,primitives] move some tests from primitives to core

* [lang] move lang2/ to lang/

* [*] rename all instances of ink_lang2 or lang2 to ink_lang or lang

* [lang/macro] fix ink_primitives dependency

* [*] apply rustfmt

* [core] fix clippy warning

* [ci] eliminate README from examples CI checks

* [examples] apply rustfmt

* [lang/macro] improve event codegen

* [core] rename TimeStamp/time_stamp to Timestamp/timestamp

* [lang] remove unused extern crate alloc

* [core] rename env::address to env::account_id

* [lang] perform renamings on ink_lang::EnvAccess but with deprecation instead of removal

* [core] fix missing time_stamp renamings

* [lang] fix missing TimeStamp renamings

* improve doc comment
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* improve doc comment
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* rename create_contract -> instantiate_contract
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* rename create_contract -> instantiate_contract
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* improve doc comment
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* impr
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* improve doc comment
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* improve doc comment
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* improve doc comment
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* rename endowment -> transferred_value
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* improve doc comment
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* rename create_contract -> instantiate_contract
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* rename create_contract -> instantiate_contract
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* rename time stamp to timestamp
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* rename SRML to env in docs
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* remove SRML word from docs
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* remove SRML word from docs
Co-Authored-By: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>

* [lang] fix doc comment for filtered_keys in restore_contract

* [core] rename create_contract -> instantiate_contract

* [core] rename create_contract -> instantiate_contract

* [core] fix some renamings around endowment -> transferred_value

* [lang] rename create_contract -> instantiate_contract follow-up

* [core] apply rustfmt

* [core] improve restore_contract doc comment

* [core, lang] link to ink_core::env::* doc comments from all api places

* [core] apply rustfmt
Co-authored-by: Michael Müller's avatarMichael Müller <mich@elmueller.net>
Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
parent 6fd834d0
Pipeline #77049 passed with stages
in 12 minutes and 9 seconds
...@@ -18,7 +18,7 @@ variables: ...@@ -18,7 +18,7 @@ variables:
CARGO_TARGET_DIR: "/ci-cache/${CI_PROJECT_NAME}/targets/${CI_COMMIT_REF_NAME}/${CI_JOB_NAME}" CARGO_TARGET_DIR: "/ci-cache/${CI_PROJECT_NAME}/targets/${CI_COMMIT_REF_NAME}/${CI_JOB_NAME}"
CI_SERVER_NAME: "GitLab CI" CI_SERVER_NAME: "GitLab CI"
REGISTRY: registry.parity.io/parity/infrastructure/scripts REGISTRY: registry.parity.io/parity/infrastructure/scripts
ALL_CRATES: "core alloc prelude utils lang2 lang2/macro" ALL_CRATES: "core alloc prelude primitives lang lang/macro"
.collect-artifacts: &collect-artifacts .collect-artifacts: &collect-artifacts
artifacts: artifacts:
...@@ -147,7 +147,7 @@ examples-test: ...@@ -147,7 +147,7 @@ examples-test:
stage: examples stage: examples
<<: *docker-env <<: *docker-env
script: script:
- for example in examples/lang2/*; do - for example in examples/*/; do
cargo test --verbose --manifest-path ${example}/Cargo.toml; cargo test --verbose --manifest-path ${example}/Cargo.toml;
done done
...@@ -155,7 +155,7 @@ examples-fmt: ...@@ -155,7 +155,7 @@ examples-fmt:
stage: examples stage: examples
<<: *docker-env <<: *docker-env
script: script:
- for example in examples/lang2/*; do - for example in examples/*/; do
cargo fmt --verbose --manifest-path ${example}/Cargo.toml -- --check; cargo fmt --verbose --manifest-path ${example}/Cargo.toml -- --check;
done done
...@@ -163,7 +163,7 @@ examples-clippy-std: ...@@ -163,7 +163,7 @@ examples-clippy-std:
stage: examples stage: examples
<<: *docker-env <<: *docker-env
script: script:
- for example in examples/lang2/*; do - for example in examples/*/; do
cargo clippy --verbose --manifest-path ${example}/Cargo.toml -- -D warnings; cargo clippy --verbose --manifest-path ${example}/Cargo.toml -- -D warnings;
done done
...@@ -171,7 +171,7 @@ examples-clippy-wasm: ...@@ -171,7 +171,7 @@ examples-clippy-wasm:
stage: examples stage: examples
<<: *docker-env <<: *docker-env
script: script:
- for example in examples/lang2/*; do - for example in examples/*/; do
cargo clippy --verbose --manifest-path ${example}/Cargo.toml --no-default-features --target wasm32-unknown-unknown -- -D warnings; cargo clippy --verbose --manifest-path ${example}/Cargo.toml --no-default-features --target wasm32-unknown-unknown -- -D warnings;
done done
...@@ -180,7 +180,7 @@ examples-contract-build: ...@@ -180,7 +180,7 @@ examples-contract-build:
<<: *docker-env <<: *docker-env
script: script:
- *update-cargo-contract - *update-cargo-contract
- for example in examples/lang2/*; do - for example in examples/*/; do
pushd $example && pushd $example &&
cargo contract build && cargo contract build &&
popd; popd;
...@@ -191,7 +191,7 @@ examples-generate-metadata: ...@@ -191,7 +191,7 @@ examples-generate-metadata:
<<: *docker-env <<: *docker-env
script: script:
- *update-cargo-contract - *update-cargo-contract
- for example in examples/lang2/*; do - for example in examples/*/; do
pushd $example && pushd $example &&
cargo contract generate-metadata && cargo contract generate-metadata &&
popd; popd;
......
...@@ -34,7 +34,7 @@ Following these will ensure that your pull request is going to be accepted. ...@@ -34,7 +34,7 @@ Following these will ensure that your pull request is going to be accepted.
1. Run `rustfmt` automatically. 1. Run `rustfmt` automatically.
1. Run `clippy` on your changes. 1. Run `clippy` on your changes.
1. Run tests in `debug` and `release` mode using `--features test-env` for off-chain testing. 1. Run tests via `cargo test --release` for off-chain testing.
1. For critical parts perform some manual on-chain tests. 1. For critical parts perform some manual on-chain tests.
1. Build the code and run tests also for the `wasm32` target. 1. Build the code and run tests also for the `wasm32` target.
1. Try to run some examples and see if they are still working correctly. 1. Try to run some examples and see if they are still working correctly.
......
...@@ -4,10 +4,8 @@ members = [ ...@@ -4,10 +4,8 @@ members = [
"abi", "abi",
"core", "core",
"lang", "lang",
"lang2",
"model",
"prelude", "prelude",
"utils", "primitives",
] ]
exclude = [ exclude = [
"examples/", "examples/",
......
// Copyright 2018-2019 Parity Technologies (UK) Ltd. // Copyright {20\d{2}}-{20\d{2}} Parity Technologies (UK) Ltd.
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
......
...@@ -14,8 +14,6 @@ ...@@ -14,8 +14,6 @@
[e2]: https://github.com/Aaronepower/tokei#badges [e2]: https://github.com/Aaronepower/tokei#badges
[f1]: https://img.shields.io/badge/docs-core-blue.svg [f1]: https://img.shields.io/badge/docs-core-blue.svg
[f2]: https://paritytech.github.io/ink/ink_core [f2]: https://paritytech.github.io/ink/ink_core
[g1]: https://img.shields.io/badge/docs-model-blue.svg
[g2]: https://paritytech.github.io/ink/ink_model
[h1]: https://img.shields.io/badge/docs-abi-blue.svg [h1]: https://img.shields.io/badge/docs-abi-blue.svg
[h2]: https://paritytech.github.io/ink/ink_abi [h2]: https://paritytech.github.io/ink/ink_abi
...@@ -27,9 +25,9 @@ For more information please visit [the ink! tutorial](https://substrate.dev/subs ...@@ -27,9 +25,9 @@ For more information please visit [the ink! tutorial](https://substrate.dev/subs
## Developer Documentation ## Developer Documentation
| `ink_abi` | `ink_core` | `ink_model` | | `ink_abi` | `ink_core` |
| ------------- | ------------- | ------------- | | ------------- | ------------- |
| [![][h1]][h2] | [![][f1]][f2] | [![][g1]][g2] | | [![][h1]][h2] | [![][f1]][f2] |
### Interaction with Substrate ### Interaction with Substrate
...@@ -81,14 +79,15 @@ To create your own version of the flipper contract, you first need to initialize ...@@ -81,14 +79,15 @@ To create your own version of the flipper contract, you first need to initialize
cargo contract new flipper cargo contract new flipper
``` ```
Below you can see the code using the `ink_lang2` version of ink!. Below you can see the code using the `ink_lang` version of ink!.
```rust ```rust
use ink_core::storage; use ink_lang as ink;
use ink_lang2 as ink;
#[ink::contract(version = "0.1.0")] #[ink::contract(version = "0.1.0")]
mod flipper { mod flipper {
use ink_core::storage;
/// The storage of the flipper contract. /// The storage of the flipper contract.
#[ink(storage)] #[ink(storage)]
struct Flipper { struct Flipper {
......
...@@ -64,7 +64,7 @@ contract! { ...@@ -64,7 +64,7 @@ contract! {
<td> <td>
```rust ```rust
use ink_lang2 as ink; use ink_lang as ink;
#[ink::contract(version = "0.1.0")] #[ink::contract(version = "0.1.0")]
mod erc20 { mod erc20 {
...@@ -78,7 +78,7 @@ mod erc20 { ...@@ -78,7 +78,7 @@ mod erc20 {
> Note: we now require a mandatory ink! version in the header. You're welcome. > Note: we now require a mandatory ink! version in the header. You're welcome.
See the [ERC20 example](https://github.com/paritytech/ink/blob/master/examples/lang2/erc20/src/lib.rs). See the [ERC20 example](https://github.com/paritytech/ink/blob/master/examples/erc20/src/lib.rs).
## ink! Contract Tag ## ink! Contract Tag
...@@ -146,7 +146,7 @@ struct Erc20 { ...@@ -146,7 +146,7 @@ struct Erc20 {
</tr> </tr>
</table> </table>
See the [ERC20 example](https://github.com/paritytech/ink/blob/master/examples/lang2/erc20/src/lib.rs). See the [ERC20 example](https://github.com/paritytech/ink/blob/master/examples/erc20/src/lib.rs).
## Declaring Events ## Declaring Events
...@@ -193,7 +193,7 @@ struct Transfer { ...@@ -193,7 +193,7 @@ struct Transfer {
</tr> </tr>
</table> </table>
See the [ERC20 example](https://github.com/paritytech/ink/blob/master/examples/lang2/erc20/src/lib.rs). See the [ERC20 example](https://github.com/paritytech/ink/blob/master/examples/erc20/src/lib.rs).
## Environment Handler ## Environment Handler
...@@ -275,7 +275,7 @@ fn total_supply(&self) -> Balance { ...@@ -275,7 +275,7 @@ fn total_supply(&self) -> Balance {
</tr> </tr>
</table> </table>
See the [ERC20 example](https://github.com/paritytech/ink/blob/master/examples/lang2/erc20/src/lib.rs). See the [ERC20 example](https://github.com/paritytech/ink/blob/master/examples/erc20/src/lib.rs).
## Defining a Constructor ## Defining a Constructor
...@@ -335,7 +335,7 @@ impl Erc20 { ...@@ -335,7 +335,7 @@ impl Erc20 {
</tr> </tr>
</table> </table>
See the [ERC20 example](https://github.com/paritytech/ink/blob/master/examples/lang2/erc20/src/lib.rs). See the [ERC20 example](https://github.com/paritytech/ink/blob/master/examples/erc20/src/lib.rs).
## Cross Contract Calls ## Cross Contract Calls
...@@ -355,7 +355,7 @@ struct Delegator { ...@@ -355,7 +355,7 @@ struct Delegator {
let result = self.adder.inc(by); let result = self.adder.inc(by);
``` ```
See the [delegator example](https://github.com/paritytech/ink/blob/master/examples/lang2/delegator/lib.rs). See the [delegator example](https://github.com/paritytech/ink/blob/master/examples/delegator/lib.rs).
## Factory Contracts ## Factory Contracts
...@@ -406,7 +406,7 @@ let accumulator = Accumulator::new(init_value) ...@@ -406,7 +406,7 @@ let accumulator = Accumulator::new(init_value)
</tr> </tr>
</table> </table>
See the [delegator example](https://github.com/paritytech/ink/blob/master/examples/lang2/delegator/lib.rs). See the [delegator example](https://github.com/paritytech/ink/blob/master/examples/delegator/lib.rs).
## Contract Tests ## Contract Tests
...@@ -432,7 +432,7 @@ let contract = MyContract::my_constructor(a, b); ...@@ -432,7 +432,7 @@ let contract = MyContract::my_constructor(a, b);
Messages can simply be called on the returned instance as if `MyContract::my_constructor` returns a Messages can simply be called on the returned instance as if `MyContract::my_constructor` returns a
`Self` instance. `Self` instance.
See the [flipper example](https://github.com/paritytech/ink/blob/master/examples/lang2/flipper/src/lib.rs). See the [flipper example](https://github.com/paritytech/ink/blob/master/examples/flipper/src/lib.rs).
**The off-chain test environment has lost a bit of power compared to the old ink! language.** **The off-chain test environment has lost a bit of power compared to the old ink! language.**
......
...@@ -19,6 +19,7 @@ serde = { version = "1.0", default-features = false, features = ["derive", "allo ...@@ -19,6 +19,7 @@ serde = { version = "1.0", default-features = false, features = ["derive", "allo
derive_more = { version = "0.99.2", default-features = false, features = ["from"] } derive_more = { version = "0.99.2", default-features = false, features = ["from"] }
ink_abi_derive = { path = "derive", default-features = false, optional = true } ink_abi_derive = { path = "derive", default-features = false, optional = true }
ink_prelude = { path = "../prelude/", default-features = false } ink_prelude = { path = "../prelude/", default-features = false }
ink_primitives = { path = "../primitives/", default-features = false }
type-metadata = { git = "https://github.com/type-metadata/type-metadata.git", default-features = false, features = ["derive"] } type-metadata = { git = "https://github.com/type-metadata/type-metadata.git", default-features = false, features = ["derive"] }
[dev-dependencies] [dev-dependencies]
......
...@@ -60,7 +60,7 @@ pub fn generate_impl(input: TokenStream2) -> Result<TokenStream2> { ...@@ -60,7 +60,7 @@ pub fn generate_impl(input: TokenStream2) -> Result<TokenStream2> {
} }
}; };
Ok(wrap(ident, "HAS_LAYOUT", has_layout_impl)) Ok(wrap(has_layout_impl))
} }
fn generate_fields_layout<'a>( fn generate_fields_layout<'a>(
...@@ -97,8 +97,7 @@ fn generate_struct_layout(data_struct: &DataStruct) -> TokenStream2 { ...@@ -97,8 +97,7 @@ fn generate_struct_layout(data_struct: &DataStruct) -> TokenStream2 {
Fields::Unnamed(ref fs) => generate_struct_fields_layout(&fs.unnamed), Fields::Unnamed(ref fs) => generate_struct_fields_layout(&fs.unnamed),
Fields::Unit => { Fields::Unit => {
quote! { quote! {
use type_metadata::Metadata as _; _ink_abi::LayoutStruct::new(<Self as type_metadata::Metadata>::meta_type(), Vec::new())
_ink_abi::LayoutStruct::new(Self::meta_type(), __core::vec![])
} }
} }
} }
......
...@@ -12,34 +12,13 @@ ...@@ -12,34 +12,13 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
#[cfg(not(feature = "std"))] use proc_macro2::TokenStream as TokenStream2;
use alloc::{
format,
string::{
String,
ToString,
},
};
use proc_macro2::{
Span,
TokenStream as TokenStream2,
};
use quote::quote; use quote::quote;
use syn::Ident;
pub fn wrap(
ident: &Ident,
trait_name: &'static str,
impl_quote: TokenStream2,
) -> TokenStream2 {
let mut renamed = format!("_IMPL_{}_FOR_", trait_name);
renamed.push_str(ident.to_string().trim_start_matches("r#"));
let dummy_const = Ident::new(&renamed, Span::call_site());
pub fn wrap(impl_quote: TokenStream2) -> TokenStream2 {
quote! { quote! {
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const #dummy_const: () = { const _: () = {
#[allow(unknown_lints)] #[allow(unknown_lints)]
#[cfg_attr(feature = "cargo-clippy", allow(useless_attribute))] #[cfg_attr(feature = "cargo-clippy", allow(useless_attribute))]
#[allow(rust_2018_idioms)] #[allow(rust_2018_idioms)]
......
...@@ -41,6 +41,19 @@ pub trait HasLayout { ...@@ -41,6 +41,19 @@ pub trait HasLayout {
fn layout(&self) -> StorageLayout; fn layout(&self) -> StorageLayout;
} }
impl From<ink_primitives::Key> for LayoutKey {
fn from(key: ink_primitives::Key) -> Self {
LayoutKey(key.0)
}
}
impl HasLayout for ink_primitives::Key {
fn layout(&self) -> StorageLayout {
LayoutRange::cell(*self, <[u8; 32] as type_metadata::Metadata>::meta_type())
.into()
}
}
/// Either a concrete layout bound or another layout sub-struct. /// Either a concrete layout bound or another layout sub-struct.
#[derive(Debug, PartialEq, Eq, Serialize, From)] #[derive(Debug, PartialEq, Eq, Serialize, From)]
#[serde(bound = "F::TypeId: Serialize")] #[serde(bound = "F::TypeId: Serialize")]
...@@ -73,7 +86,7 @@ impl IntoCompact for StorageLayout { ...@@ -73,7 +86,7 @@ impl IntoCompact for StorageLayout {
#[derive(Debug, PartialEq, Eq, From, Serialize)] #[derive(Debug, PartialEq, Eq, From, Serialize)]
#[serde(transparent)] #[serde(transparent)]
pub struct LayoutKey( pub struct LayoutKey(
/// Internals must be compatible with `ink_core::storage::Key`. /// Internals must be compatible with `ink_primitives::Key`.
pub [u8; 32], pub [u8; 32],
); );
......
...@@ -17,27 +17,35 @@ include = ["Cargo.toml", "src/**/*.rs", "README.md", "LICENSE"] ...@@ -17,27 +17,35 @@ include = ["Cargo.toml", "src/**/*.rs", "README.md", "LICENSE"]
[dependencies] [dependencies]
ink_abi = { path = "../abi/", default-features = false, features = ["derive"], optional = true } ink_abi = { path = "../abi/", default-features = false, features = ["derive"], optional = true }
ink_alloc = { path = "../alloc/", default-features = false } ink_alloc = { path = "../alloc/", default-features = false }
ink_utils = { path = "../utils/" } ink_primitives = { path = "../primitives/", default-features = false }
ink_core_derive = { path = "derive", default-features = false } ink_core_derive = { path = "derive", default-features = false }
ink_prelude = { path = "../prelude/", default-features = false } ink_prelude = { path = "../prelude/", default-features = false }
scale = { package = "parity-scale-codec", version = "1.1", default-features = false, features = ["derive", "full"] } scale = { package = "parity-scale-codec", version = "1.1", default-features = false, features = ["derive", "full"] }
type-metadata = { git = "https://github.com/type-metadata/type-metadata.git", default-features = false, features = ["derive"], optional = true } type-metadata = { git = "https://github.com/type-metadata/type-metadata.git", default-features = false, features = ["derive"], optional = true }
derive_more = { version = "0.99.2", default-features = false, features = ["from"] } derive_more = { version = "0.99.2", default-features = false, features = ["from", "display"] }
smallvec = { version = "1.0", default-features = false, features = ["union"] } smallvec = { version = "1.0", default-features = false, features = ["union"] }
cfg-if = "0.1" cfg-if = "0.1"
num-traits = { version = "0.2.1", default-features = false, features = ["i128"] }
# Only used in the off-chain environment.
#
# Sadly couldn't be marked as dev-dependency.
# Never use this crate outside of the off-chain environment!
rand = { version = "0.7", default-features = false, features = ["alloc"], optional = true }
[features] [features]
default = ["test-env"] default = ["std"]
test-env = [
"std",
]
std = [ std = [
"ink_abi/std", "ink_abi/std",
"ink_alloc/std", "ink_alloc/std",
"ink_prelude/std", "ink_prelude/std",
"ink_primitives/std",
"scale/std", "scale/std",
"type-metadata/std", "type-metadata/std",
"rand",
"rand/std",
"num-traits/std",
] ]
ink-generate-abi = [ ink-generate-abi = [
"ink_abi", "ink_abi",
......
...@@ -16,7 +16,7 @@ mod utils; ...@@ -16,7 +16,7 @@ mod utils;
use utils::*; use utils::*;
use ink_core::storage::Key; use ink_primitives::Key;
use ink_core_derive::AllocateUsing;