-
Notifications
You must be signed in to change notification settings - Fork 426
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Storage refactoring new hope for review #1331
Storage refactoring new hope for review #1331
Commits on Jul 21, 2022
-
Import new unstable functions with transparent hashing.
Updated the API to work with the generic key `K: Encode` instead of the old `Key`. Also, the change contains optimization to reduce the size of contracts. In most cases, it is `#[inline(always)]`; but `return_value` also got small optimization; removed usage of `extract_from_slice` where it is not needed.
Configuration menu - View commit details
-
Copy full SHA for 2b26752 - Browse repository at this point
Copy the full SHA 2b26752View commit details -
Removed old 32 bytes `Key`. Replaced it with `u32`. Added `KeyComposer`, it is a helper struct that does all manipulation with the storage key. It allows concat two storage keys into one, compute storage key for fields based on the filed, struct, enum, variants names. Removed all tests and benches. Didn't add it for new primitives because the key is standard `u32` and all keys are calculated during compilation. storage crate: Removed `SpreadLayout`, `PackedLayout`, `SpreadAllocate`, `PackedAllocate`, and all related helper functions. Removed `Packed` struct cause it is the default behavior for storage right now. Added `Lazy` struct that allows `get`/`set` value from/into the storage. It is similar to `Mapping` but works with one storage key and one value. Introduced new main traits to work with storage in `storage/src/traits/storage.rs`. Also added a new `OnCallInitializer` trait to improve the flow with upgradable contracts and support initialization on demand by default. Added `pull_or_init` macro that inits the storage struct if it is impossible to load it. It also can be used as optimization for contracts without an explicit constructor. Replaced implementation of old traits for main primitives with a new one. Added blanket implementation of new traits for structures that are `Packed` by default. It reduces the amount of code and adds support of generic structures but adds problems with tuples(now tuples implement new traits only if inner items are `Packed`). Introduced `AutoKey` and `ManualKey` that allows specifying which key the user wants to use. Added support of it into all traits and structures. Refactored `Mapping` to follow new rules.
Configuration menu - View commit details
-
Copy full SHA for 8dbf040 - Browse repository at this point
Copy the full SHA 8dbf040View commit details -
Updated storage layout in the metadata. Introduces the concept of roots and leafs. Root defines the storage key for all sub-tree until there will be another Root. Leafs are common types that are part of the sub-tree and serialized/deserialized together into one storage key. Replaced 32 bytes storage key with `u32`. Added validation that all root storage keys don't overlap. Maybe better to add that error or reuse that validator on the `cargo-contract` side to show a more user-friendly error. `RootLayout` and validator are used in codegen(next commit). The contract is wrapped into `RootLayout`, and we do validation for that tree. Metadata now contains name for each struct/enum/variant/field. It is useful information because now the storage key is calculated based on the name of struct/enum/variant/field. storage crate: Added a new helper crate `storage/codegen`. It contains some useful functional that is used in `ink_storage_derive` and in `ink_lang_codegen` crates. It has a method that returns all types of the struct/enum/unit and a method that finds "salt" in the generics of the struct/enum. It uses magic constant "KeyHolder"(about that you can read in issue) to find salt, so I tried to have only one place where we are using that constant. Replaced derive implementation of old trait with new one. You can check the tests to see how the implementation looks like. `Storable` recursively call `encode` and `decode` for all fields. `KeyHolder` return key of the salt. `Item` uses `AutoKey` or key specified by the user. I want to highlight that `PreferredKey` only is used with the `AutoItem` trait. If `PreferredKey` is `AutoKey`, then `AutoItem<AutoGenerated>` select auto-generated key, otherwise preferred. So `AutoItem` trait decides that key to use. It is why derive macro only set `PreferredKey`. Updated drive for `StorageLayout`, now it uses `u32` and pass name of the struct into metadata.
Configuration menu - View commit details
-
Copy full SHA for 341c48b - Browse repository at this point
Copy the full SHA 341c48bView commit details -
Removed
initialize_contract
and related to initialization stuff. No……w the codegen uses `pull_or_init` in the `call`. Updated `execute_constructor` to work with new storage methods. Allowed usage of generics during the declaration of the primary contract storage. Users can specify the default storage key with `KeyHolder` via generic. Added parser for `storage_item` macro with its config.
Configuration menu - View commit details
-
Copy full SHA for 346529c - Browse repository at this point
Copy the full SHA 346529cView commit details -
Removed the old codegen related to spread and packed layout. If some …
…object implements `Decode` and `Encode`, it is `Packed`, and it uses the blanket implementation of new traits. In dispatch, codegen started to use a new method to work with storage. In metadata codegen added usage of new `RootLayout`. We wrap the contract into that layout because the contract has its storage key for all inner fields by default. Also added a run of validation logic during metadata generation. Added `storage_item` macro. It transforms all types from autokey into manual key(if types support it). It calculates the storage key based on the name(it uses the `KeyComposer::compute_key` function from the primitives crate). Also, macro generates an additional `Check` structure that includes all raw fields. It helps show correct errors to the user in case of typos, wrong types, etc.
Configuration menu - View commit details
-
Copy full SHA for b731f92 - Browse repository at this point
Copy the full SHA b731f92View commit details -
Updated all examples to use a new API.
Simplified delegate call example very well causes of new `OnCallInitializer` trait and support of manual specifying key.
Configuration menu - View commit details
-
Copy full SHA for d6db8de - Browse repository at this point
Copy the full SHA d6db8deView commit details -
Configuration menu - View commit details
-
Copy full SHA for f967986 - Browse repository at this point
Copy the full SHA f967986View commit details
Commits on Aug 15, 2022
-
Configuration menu - View commit details
-
Copy full SHA for fc3fcb0 - Browse repository at this point
Copy the full SHA fc3fcb0View commit details -
Configuration menu - View commit details
-
Copy full SHA for 8f511ec - Browse repository at this point
Copy the full SHA 8f511ecView commit details -
Configuration menu - View commit details
-
Copy full SHA for 7e094eb - Browse repository at this point
Copy the full SHA 7e094ebView commit details -
Configuration menu - View commit details
-
Copy full SHA for 8c9942d - Browse repository at this point
Copy the full SHA 8c9942dView commit details -
Configuration menu - View commit details
-
Copy full SHA for 9188ca7 - Browse repository at this point
Copy the full SHA 9188ca7View commit details -
Configuration menu - View commit details
-
Copy full SHA for 7375b4c - Browse repository at this point
Copy the full SHA 7375b4cView commit details -
Configuration menu - View commit details
-
Copy full SHA for 906b1d8 - Browse repository at this point
Copy the full SHA 906b1d8View commit details
Commits on Aug 16, 2022
-
- In most cases it is comments=) - Moved `pull_or_init` on one level upper. - Put the tests into the `impls/mod.rs`
Configuration menu - View commit details
-
Copy full SHA for 290b384 - Browse repository at this point
Copy the full SHA 290b384View commit details -
Configuration menu - View commit details
-
Copy full SHA for 1f7603f - Browse repository at this point
Copy the full SHA 1f7603fView commit details -
Configuration menu - View commit details
-
Copy full SHA for 09c24e1 - Browse repository at this point
Copy the full SHA 09c24e1View commit details -
Configuration menu - View commit details
-
Copy full SHA for 07a71ea - Browse repository at this point
Copy the full SHA 07a71eaView commit details
Commits on Aug 17, 2022
-
Configuration menu - View commit details
-
Copy full SHA for 07889af - Browse repository at this point
Copy the full SHA 07889afView commit details -
Configuration menu - View commit details
-
Copy full SHA for f64d7f7 - Browse repository at this point
Copy the full SHA f64d7f7View commit details -
Configuration menu - View commit details
-
Copy full SHA for efff8bf - Browse repository at this point
Copy the full SHA efff8bfView commit details -
Configuration menu - View commit details
-
Copy full SHA for 556ce20 - Browse repository at this point
Copy the full SHA 556ce20View commit details -
Configuration menu - View commit details
-
Copy full SHA for 5ce970d - Browse repository at this point
Copy the full SHA 5ce970dView commit details
Commits on Aug 18, 2022
-
Configuration menu - View commit details
-
Copy full SHA for 8fcdab2 - Browse repository at this point
Copy the full SHA 8fcdab2View commit details
Commits on Aug 19, 2022
-
Configuration menu - View commit details
-
Copy full SHA for ca9f95b - Browse repository at this point
Copy the full SHA ca9f95bView commit details -
Configuration menu - View commit details
-
Copy full SHA for 8eb4cb9 - Browse repository at this point
Copy the full SHA 8eb4cb9View commit details
Commits on Aug 22, 2022
-
Add UI test for double storage_item. Applied suggestion from the review.
Configuration menu - View commit details
-
Copy full SHA for 66a6901 - Browse repository at this point
Copy the full SHA 66a6901View commit details -
Configuration menu - View commit details
-
Copy full SHA for 8854be8 - Browse repository at this point
Copy the full SHA 8854be8View commit details -
Configuration menu - View commit details
-
Copy full SHA for 15563de - Browse repository at this point
Copy the full SHA 15563deView commit details -
Configuration menu - View commit details
-
Copy full SHA for 4f35230 - Browse repository at this point
Copy the full SHA 4f35230View commit details
Commits on Aug 26, 2022
-
Configuration menu - View commit details
-
Copy full SHA for 5065b07 - Browse repository at this point
Copy the full SHA 5065b07View commit details -
Merge branch 'master' into feature/storage-rework-new-hope
# Conflicts: # crates/lang/codegen/Cargo.toml # crates/lang/codegen/src/generator/metadata.rs # crates/lang/macro/Cargo.toml
Configuration menu - View commit details
-
Copy full SHA for 3247ee2 - Browse repository at this point
Copy the full SHA 3247ee2View commit details -
Configuration menu - View commit details
-
Copy full SHA for 63e3909 - Browse repository at this point
Copy the full SHA 63e3909View commit details -
Configuration menu - View commit details
-
Copy full SHA for c07b471 - Browse repository at this point
Copy the full SHA c07b471View commit details -
Configuration menu - View commit details
-
Copy full SHA for 72c84a8 - Browse repository at this point
Copy the full SHA 72c84a8View commit details -
Configuration menu - View commit details
-
Copy full SHA for cad9234 - Browse repository at this point
Copy the full SHA cad9234View commit details
Commits on Aug 29, 2022
-
Merge branch 'master' into feature/storage-rework-new-hope
# Conflicts: # crates/lang/macro/Cargo.toml
Configuration menu - View commit details
-
Copy full SHA for 7371905 - Browse repository at this point
Copy the full SHA 7371905View commit details
Commits on Aug 30, 2022
-
Configuration menu - View commit details
-
Copy full SHA for 477e4cf - Browse repository at this point
Copy the full SHA 477e4cfView commit details
Commits on Aug 31, 2022
-
Removed `delegate-call` example with `OnCallInitializer`
Configuration menu - View commit details
-
Copy full SHA for 235d649 - Browse repository at this point
Copy the full SHA 235d649View commit details -
Configuration menu - View commit details
-
Copy full SHA for 8b9ccbc - Browse repository at this point
Copy the full SHA 8b9ccbcView commit details -
Merge remote-tracking branch 'parity/master' into feature/storage-rew…
…ork-new-hope # Conflicts: # .gitlab-ci.yml
Configuration menu - View commit details
-
Copy full SHA for a42bc9d - Browse repository at this point
Copy the full SHA a42bc9dView commit details -
Configuration menu - View commit details
-
Copy full SHA for be1563e - Browse repository at this point
Copy the full SHA be1563eView commit details -
Configuration menu - View commit details
-
Copy full SHA for 300b139 - Browse repository at this point
Copy the full SHA 300b139View commit details -
Configuration menu - View commit details
-
Copy full SHA for 7b8733d - Browse repository at this point
Copy the full SHA 7b8733dView commit details -
Configuration menu - View commit details
-
Copy full SHA for 3e3fbd7 - Browse repository at this point
Copy the full SHA 3e3fbd7View commit details
Commits on Sep 1, 2022
-
Configuration menu - View commit details
-
Copy full SHA for 5808157 - Browse repository at this point
Copy the full SHA 5808157View commit details