From bac0ec71395c93620b215573bbaf5a4e4a9b8e85 Mon Sep 17 00:00:00 2001 From: Evgeny Kuzyakov Date: Tue, 6 Apr 2021 14:16:58 -0700 Subject: [PATCH] [3.1.0] Introduce BorshStorageKey (#352) ### `3.1.0` * Introduce trait `IntoStorageKey` and updating all persistent collections to take it instead of `Vec`. It's a non-breaking change. * Introduce a macro derive `BorshStorageKey` that implements `IntoStorageKey` using borsh serialization. Example: ```rust use near_sdk::BorshStorageKey; #[derive(BorshSerialize, BorshStorageKey)] enum StorageKey { Records, UniqueValues, } #[near_bindgen] #[derive(BorshDeserialize, BorshSerialize, PanicOnDefault)] pub struct StatusMessage { pub records: LookupMap, pub unique_values: LookupSet, } #[near_bindgen] impl StatusMessage { #[init] pub fn new() -> Self { Self { records: LookupMap::new(StorageKey::Records), unique_values: LookupSet::new(StorageKey::UniqueValues), } } } ``` --- CHANGELOG.md | 52 ++++++-- Cargo.lock | 110 ++++------------- README.md | 56 +++++---- examples/cross-contract-high-level/Cargo.lock | 106 ++++------------- .../res/cross_contract_high_level.wasm | Bin 287911 -> 288155 bytes examples/cross-contract-low-level/Cargo.lock | 106 ++++------------- .../res/cross_contract_low_level.wasm | Bin 308160 -> 308415 bytes examples/fungible-token/Cargo.lock | 112 ++++-------------- examples/fungible-token/Cargo.toml | 2 +- examples/fungible-token/ft/Cargo.toml | 4 +- examples/fungible-token/ft/src/lib.rs | 14 ++- examples/fungible-token/res/defi.wasm | Bin 138151 -> 137398 bytes .../fungible-token/res/fungible_token.wasm | Bin 224130 -> 224084 bytes examples/gas-fee-tester/Cargo.lock | 56 +++------ .../gas-fee-tester/res/gas_fee_tester.wasm | Bin 177587 -> 177587 bytes examples/lockable-fungible-token/Cargo.lock | 56 +++------ .../res/lockable_fungible_token.wasm | Bin 166135 -> 166291 bytes examples/lockable-fungible-token/src/lib.rs | 2 +- examples/mission-control/Cargo.lock | 56 +++------ .../mission-control/res/mission_control.wasm | Bin 160688 -> 160921 bytes .../status-message-collections/Cargo.lock | 36 +++--- .../status-message-collections/Cargo.toml | 2 +- .../res/status_message_collections.wasm | Bin 110900 -> 112008 bytes .../status-message-collections/src/lib.rs | 12 +- examples/status-message/Cargo.lock | 34 +++--- .../status-message/res/status_message.wasm | Bin 142814 -> 143102 bytes examples/test-contract/Cargo.lock | 34 +++--- examples/test-contract/res/test_contract.wasm | Bin 37517 -> 38117 bytes examples/test-contract/src/lib.rs | 14 ++- near-contract-standards/Cargo.toml | 4 +- .../src/fungible_token/core_impl.rs | 9 +- near-sdk-core/Cargo.toml | 2 +- near-sdk-macros/Cargo.toml | 4 +- near-sdk-macros/src/lib.rs | 27 ++++- near-sdk-sim/Cargo.toml | 4 +- near-sdk-sim/README.md | 8 +- near-sdk/Cargo.toml | 8 +- near-sdk/compilation_tests/all.rs | 1 + .../compilation_tests/borsh_storage_key.rs | 37 ++++++ near-sdk/src/collections/lazy_option.rs | 16 ++- near-sdk/src/collections/legacy_tree_map.rs | 17 ++- near-sdk/src/collections/lookup_map.rs | 23 ++-- near-sdk/src/collections/lookup_set.rs | 21 ++-- near-sdk/src/collections/tree_map.rs | 17 ++- near-sdk/src/collections/unordered_map.rs | 36 +++--- near-sdk/src/collections/unordered_set.rs | 30 +++-- near-sdk/src/collections/vector.rs | 9 +- near-sdk/src/lib.rs | 3 +- near-sdk/src/utils/mod.rs | 2 + near-sdk/src/utils/storage_key_impl.rs | 63 ++++++++++ 50 files changed, 542 insertions(+), 663 deletions(-) create mode 100644 near-sdk/compilation_tests/borsh_storage_key.rs create mode 100644 near-sdk/src/utils/storage_key_impl.rs diff --git a/CHANGELOG.md b/CHANGELOG.md index 1bef527dd..5ca804650 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,45 @@ # Changelog +## `3.1.0` + +* Updated dependencies for `near-sdk` +* Introduce trait `IntoStorageKey` and updating all persistent collections to take it instead of `Vec`. + It's a non-breaking change. +* Introduce a macro derive `BorshStorageKey` that implements `IntoStorageKey` using borsh serialization. Example: +```rust +use near_sdk::BorshStorageKey; + +#[derive(BorshSerialize, BorshStorageKey)] +enum StorageKey { + Records, + UniqueValues, +} + +#[near_bindgen] +#[derive(BorshDeserialize, BorshSerialize, PanicOnDefault)] +pub struct StatusMessage { + pub records: LookupMap, + pub unique_values: LookupSet, +} + +#[near_bindgen] +impl StatusMessage { + #[init] + pub fn new() -> Self { + Self { + records: LookupMap::new(StorageKey::Records), + unique_values: LookupSet::new(StorageKey::UniqueValues), + } + } +} +``` + ## `3.0.1` * Introduced `#[private]` method decorator, that verifies `predecessor_account_id() == current_account_id()`. -NOTE: Usually, when a contract has to have a callback for a remote cross-contract call, this callback method should -only be called by the contract itself. It's to avoid someone else calling it and messing the state. Pretty common pattern -is to have an assert that validates that the direct caller (predecessor account ID) matches to the contract's account (current account ID). + NOTE: Usually, when a contract has to have a callback for a remote cross-contract call, this callback method should + only be called by the contract itself. It's to avoid someone else calling it and messing the state. Pretty common pattern + is to have an assert that validates that the direct caller (predecessor account ID) matches to the contract's account (current account ID). * Added how to build contracts with reproducible builds. * Added `log!` macro to log a string from a contract similar to `println!` macro. * Added `test_utils` mod from `near_sdk` that contains a bunch of helper methods and structures, e.g. @@ -14,10 +48,10 @@ is to have an assert that validates that the direct caller (predecessor account * Added `VMContextBuilder` to help construct a `VMContext` for tests * Added `get_logs` method that returns current logs from the contract execution. * **TEST_BREAKING** `env::created_receipts` moved to `test_utils::get_created_receipts`. - `env` shouldn't contain testing methods. + `env` shouldn't contain testing methods. * Updated a few examples to use `log!` macro * Added `#[derive(PanicOnDefault)]` that automatically implements `Default` trait that panics when called. -This is helpful to prevent contracts from being initialized using `Default` by removing boilerplate code. + This is helpful to prevent contracts from being initialized using `Default` by removing boilerplate code. * Introduce `setup_alloc` macro that generates the same boilerplate as before, but also adds a #[cfg(target_arch = "wasm32")], which prevents the allocator from being used when the contract's main file is used in simulation testing. * Introduce `Base58CryptoHash` and `CryptoHash` to represent `32` bytes slice of `u8`. * Introduce `LazyOption` to keep a single large value with lazy deserialization. @@ -38,12 +72,12 @@ This is helpful to prevent contracts from being initialized using `Default` by r ### API changes * Introduce `LookupMap` and `LookupSet` that are faster implementations of `UnorderedMap` and `UnorderedSet`, but without support for iterators. -Most read/lookup/write are done in 1 storage access instead of 2 or 3 for `Unordered*` implementations. + Most read/lookup/write are done in 1 storage access instead of 2 or 3 for `Unordered*` implementations. * **BREAKING** `Default` is removed from `near_sdk::collections` to avoid implicit state conflicts. -Collections should be initialized by explicitly specifying prefix using `new` method. + Collections should be initialized by explicitly specifying prefix using `new` method. * **BREAKING** `TreeMap` implementation was updated to use `LookupMap`. -Previous `TreeMap` implementation was renamed to `LegacyTreeMap` and was deprecated. -It should only be used if the contract was already deployed and state has to be compatible with the previous implementation. + Previous `TreeMap` implementation was renamed to `LegacyTreeMap` and was deprecated. + It should only be used if the contract was already deployed and state has to be compatible with the previous implementation. ## `1.0.1` diff --git a/Cargo.lock b/Cargo.lock index 88c9bcb21..9db106354 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -114,12 +114,6 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "base64" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" - [[package]] name = "base64" version = "0.13.0" @@ -982,7 +976,7 @@ checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" [[package]] name = "fungible-token" -version = "1.0.0" +version = "1.1.0" dependencies = [ "near-contract-standards", "near-sdk", @@ -1500,7 +1494,7 @@ checksum = "0debeb9fcf88823ea64d64e4a815ab1643f33127d995978e099942ce38f25238" [[package]] name = "near-contract-standards" -version = "3.0.1" +version = "3.1.0" dependencies = [ "near-sdk", ] @@ -1559,7 +1553,7 @@ version = "0.1.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75ed2263518ca67a3c158c144813832fd96f48ab239494bb9d7793d315f31417" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "byteorder", @@ -1570,9 +1564,9 @@ dependencies = [ "jemallocator", "lazy_static", "near-crypto", - "near-primitives-core 0.4.0", + "near-primitives-core", "near-rpc-error-macro", - "near-vm-errors 4.0.0-pre.1", + "near-vm-errors", "num-rational", "primitive-types", "rand 0.7.3", @@ -1585,31 +1579,13 @@ dependencies = [ "validator", ] -[[package]] -name = "near-primitives-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92035b79bf9983502fe7b67b5a9fecea7604e979d439727827fd0d8f0d77720e" -dependencies = [ - "base64 0.11.0", - "borsh", - "bs58", - "derive_more", - "hex", - "lazy_static", - "num-rational", - "serde", - "serde_json", - "sha2", -] - [[package]] name = "near-primitives-core" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2b3fb5acf3a494aed4e848446ef2d6ebb47dbe91c681105d4d1786c2ee63e52" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "derive_more", @@ -1663,10 +1639,10 @@ dependencies = [ "near-crypto", "near-metrics", "near-primitives", - "near-runtime-utils 4.0.0-pre.1", + "near-runtime-utils", "near-store", - "near-vm-errors 4.0.0-pre.1", - "near-vm-logic 4.0.0-pre.1", + "near-vm-errors", + "near-vm-logic", "near-vm-runner", "num-bigint", "num-rational", @@ -1676,16 +1652,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "near-runtime-utils" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47f5c1891cec5a03e3dc99f985031408b19516305e2e59d64c4ce52b409e46a0" -dependencies = [ - "lazy_static", - "regex", -] - [[package]] name = "near-runtime-utils" version = "4.0.0-pre.1" @@ -1698,14 +1664,14 @@ dependencies = [ [[package]] name = "near-sdk" -version = "3.0.1" +version = "3.1.0" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", - "near-primitives-core 0.1.0", + "near-primitives-core", "near-sdk-macros", - "near-vm-logic 3.0.0", + "near-vm-logic", "quickcheck", "rand 0.7.3", "rand_xorshift", @@ -1718,7 +1684,7 @@ dependencies = [ [[package]] name = "near-sdk-core" -version = "3.0.1" +version = "3.1.0" dependencies = [ "Inflector", "proc-macro2", @@ -1728,7 +1694,7 @@ dependencies = [ [[package]] name = "near-sdk-macros" -version = "3.0.1" +version = "3.1.0" dependencies = [ "near-sdk-core", "proc-macro2", @@ -1738,7 +1704,7 @@ dependencies = [ [[package]] name = "near-sdk-sim" -version = "3.0.1" +version = "3.1.0" dependencies = [ "fungible-token", "funty", @@ -1749,7 +1715,7 @@ dependencies = [ "near-runtime", "near-sdk", "near-store", - "near-vm-logic 4.0.0-pre.1", + "near-vm-logic", "quickcheck", "quickcheck_macros", ] @@ -1776,18 +1742,6 @@ dependencies = [ "strum", ] -[[package]] -name = "near-vm-errors" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a100dda565c5375ac061126167afc5c33cdba1f2e325cfae3ce08f4a5a432a" -dependencies = [ - "borsh", - "hex", - "near-rpc-error-macro", - "serde", -] - [[package]] name = "near-vm-errors" version = "4.0.0-pre.1" @@ -1800,37 +1754,19 @@ dependencies = [ "serde", ] -[[package]] -name = "near-vm-logic" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12201244dd59ae79506767afe7a8f51b5eb7bd0aa237d355dfa635f7b777c4a" -dependencies = [ - "base64 0.13.0", - "borsh", - "bs58", - "byteorder", - "near-primitives-core 0.1.0", - "near-runtime-utils 3.0.0", - "near-vm-errors 3.0.0", - "serde", - "sha2", - "sha3", -] - [[package]] name = "near-vm-logic" version = "4.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e11cb28a2d07f37680efdaf860f4c9802828c44fc50c08009e7884de75d982c5" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "byteorder", - "near-primitives-core 0.4.0", - "near-runtime-utils 4.0.0-pre.1", - "near-vm-errors 4.0.0-pre.1", + "near-primitives-core", + "near-runtime-utils", + "near-vm-errors", "serde", "sha2", "sha3", @@ -1847,8 +1783,8 @@ dependencies = [ "cached", "log", "near-primitives", - "near-vm-errors 4.0.0-pre.1", - "near-vm-logic 4.0.0-pre.1", + "near-vm-errors", + "near-vm-logic", "parity-wasm", "pwasm-utils", "tracing", diff --git a/README.md b/README.md index f64990bed..e0d40f9c4 100644 --- a/README.md +++ b/README.md @@ -33,29 +33,39 @@ ## Release notes -### Version `3.0.1` - -* Introduced `#[private]` method decorator, that verifies `predecessor_account_id() == current_account_id()`. - NOTE: Usually, when a contract has to have a callback for a remote cross-contract call, this callback method should - only be called by the contract itself. It's to avoid someone else calling it and messing the state. Pretty common pattern - is to have an assert that validates that the direct caller (predecessor account ID) matches to the contract's account (current account ID). -* Added how to build contracts with reproducible builds. -* Added `log!` macro to log a string from a contract similar to `println!` macro. -* Added `test_utils` mod from `near_sdk` that contains a bunch of helper methods and structures, e.g. - * `test_env` - simple test environment mod used internally. - * Expanded `testing_env` to be able to pass promise results - * Added `VMContextBuilder` to help construct a `VMContext` for tests - * Added `get_logs` method that returns current logs from the contract execution. - * **TEST_BREAKING** `env::created_receipts` moved to `test_utils::get_created_receipts`. - `env` shouldn't contain testing methods. - * Updated a few examples to use `log!` macro -* Added `#[derive(PanicOnDefault)]` that automatically implements `Default` trait that panics when called. - This is helpful to prevent contracts from being initialized using `Default` by removing boilerplate code. -* Introduce `setup_alloc` macro that generates the same boilerplate as before, but also adds a #[cfg(target_arch = "wasm32")], which prevents the allocator from being used when the contract's main file is used in simulation testing. -* Introduce `Base58CryptoHash` and `CryptoHash` to represent `32` bytes slice of `u8`. -* Introduce `LazyOption` to keep a single large value with lazy deserialization. -* **BREAKING** `#[init]` now checks that the state is not initialized. This is expected behavior. To ignore state check you can call `#[init(ignore_state)]` -* NOTE: `3.0.0` is not published, due to tag conflicts on the `near-sdk-rs` repo. +### `3.1.0` + +* Updated dependencies for `near-sdk` +* Introduce trait `IntoStorageKey` and updating all persistent collections to take it instead of `Vec`. + It's a non-breaking change. +* Introduce a macro derive `BorshStorageKey` that implements `IntoStorageKey` using borsh serialization. Example: +```rust +use near_sdk::BorshStorageKey; + +#[derive(BorshSerialize, BorshStorageKey)] +enum StorageKey { + Records, + UniqueValues, +} + +#[near_bindgen] +#[derive(BorshDeserialize, BorshSerialize, PanicOnDefault)] +pub struct StatusMessage { + pub records: LookupMap, + pub unique_values: LookupSet, +} + +#[near_bindgen] +impl StatusMessage { + #[init] + pub fn new() -> Self { + Self { + records: LookupMap::new(StorageKey::Records), + unique_values: LookupSet::new(StorageKey::UniqueValues), + } + } +} +``` **Previous version [CHANGELOG](CHANGELOG.md)** diff --git a/examples/cross-contract-high-level/Cargo.lock b/examples/cross-contract-high-level/Cargo.lock index 1a515e1c5..9f0196ff3 100644 --- a/examples/cross-contract-high-level/Cargo.lock +++ b/examples/cross-contract-high-level/Cargo.lock @@ -114,12 +114,6 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "base64" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" - [[package]] name = "base64" version = "0.13.0" @@ -1555,7 +1549,7 @@ version = "0.1.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75ed2263518ca67a3c158c144813832fd96f48ab239494bb9d7793d315f31417" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "byteorder", @@ -1566,9 +1560,9 @@ dependencies = [ "jemallocator", "lazy_static", "near-crypto", - "near-primitives-core 0.4.0", + "near-primitives-core", "near-rpc-error-macro", - "near-vm-errors 4.0.0-pre.1", + "near-vm-errors", "num-rational", "primitive-types", "rand 0.7.3", @@ -1581,31 +1575,13 @@ dependencies = [ "validator", ] -[[package]] -name = "near-primitives-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92035b79bf9983502fe7b67b5a9fecea7604e979d439727827fd0d8f0d77720e" -dependencies = [ - "base64 0.11.0", - "borsh", - "bs58", - "derive_more", - "hex", - "lazy_static", - "num-rational", - "serde", - "serde_json", - "sha2", -] - [[package]] name = "near-primitives-core" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2b3fb5acf3a494aed4e848446ef2d6ebb47dbe91c681105d4d1786c2ee63e52" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "derive_more", @@ -1659,10 +1635,10 @@ dependencies = [ "near-crypto", "near-metrics", "near-primitives", - "near-runtime-utils 4.0.0-pre.1", + "near-runtime-utils", "near-store", - "near-vm-errors 4.0.0-pre.1", - "near-vm-logic 4.0.0-pre.1", + "near-vm-errors", + "near-vm-logic", "near-vm-runner", "num-bigint", "num-rational", @@ -1672,16 +1648,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "near-runtime-utils" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47f5c1891cec5a03e3dc99f985031408b19516305e2e59d64c4ce52b409e46a0" -dependencies = [ - "lazy_static", - "regex", -] - [[package]] name = "near-runtime-utils" version = "4.0.0-pre.1" @@ -1694,14 +1660,14 @@ dependencies = [ [[package]] name = "near-sdk" -version = "3.0.1" +version = "3.1.0" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", - "near-primitives-core 0.1.0", + "near-primitives-core", "near-sdk-macros", - "near-vm-logic 3.0.0", + "near-vm-logic", "serde", "serde_json", "wee_alloc", @@ -1709,7 +1675,7 @@ dependencies = [ [[package]] name = "near-sdk-core" -version = "3.0.1" +version = "3.1.0" dependencies = [ "Inflector", "proc-macro2", @@ -1719,7 +1685,7 @@ dependencies = [ [[package]] name = "near-sdk-macros" -version = "3.0.1" +version = "3.1.0" dependencies = [ "near-sdk-core", "proc-macro2", @@ -1729,7 +1695,7 @@ dependencies = [ [[package]] name = "near-sdk-sim" -version = "3.0.1" +version = "3.1.0" dependencies = [ "funty", "lazy-static-include", @@ -1739,7 +1705,7 @@ dependencies = [ "near-runtime", "near-sdk", "near-store", - "near-vm-logic 4.0.0-pre.1", + "near-vm-logic", ] [[package]] @@ -1764,18 +1730,6 @@ dependencies = [ "strum", ] -[[package]] -name = "near-vm-errors" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a100dda565c5375ac061126167afc5c33cdba1f2e325cfae3ce08f4a5a432a" -dependencies = [ - "borsh", - "hex", - "near-rpc-error-macro", - "serde", -] - [[package]] name = "near-vm-errors" version = "4.0.0-pre.1" @@ -1788,37 +1742,19 @@ dependencies = [ "serde", ] -[[package]] -name = "near-vm-logic" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12201244dd59ae79506767afe7a8f51b5eb7bd0aa237d355dfa635f7b777c4a" -dependencies = [ - "base64 0.13.0", - "borsh", - "bs58", - "byteorder", - "near-primitives-core 0.1.0", - "near-runtime-utils 3.0.0", - "near-vm-errors 3.0.0", - "serde", - "sha2", - "sha3", -] - [[package]] name = "near-vm-logic" version = "4.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e11cb28a2d07f37680efdaf860f4c9802828c44fc50c08009e7884de75d982c5" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "byteorder", - "near-primitives-core 0.4.0", - "near-runtime-utils 4.0.0-pre.1", - "near-vm-errors 4.0.0-pre.1", + "near-primitives-core", + "near-runtime-utils", + "near-vm-errors", "serde", "sha2", "sha3", @@ -1835,8 +1771,8 @@ dependencies = [ "cached", "log", "near-primitives", - "near-vm-errors 4.0.0-pre.1", - "near-vm-logic 4.0.0-pre.1", + "near-vm-errors", + "near-vm-logic", "parity-wasm", "pwasm-utils", "tracing", diff --git a/examples/cross-contract-high-level/res/cross_contract_high_level.wasm b/examples/cross-contract-high-level/res/cross_contract_high_level.wasm index 40c4aafd625c174158b35a2037de28a278af657e..fa9b0d8708a15abf520b5a978d7ba3e169122d4b 100755 GIT binary patch delta 35639 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

p>A?fh_c3_L93iG=wMF}z?E>_GTk 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 delta 35332 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 diff --git a/examples/cross-contract-low-level/Cargo.lock b/examples/cross-contract-low-level/Cargo.lock index 64c3ffb39..6cc81d703 100644 --- a/examples/cross-contract-low-level/Cargo.lock +++ b/examples/cross-contract-low-level/Cargo.lock @@ -114,12 +114,6 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "base64" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" - [[package]] name = "base64" version = "0.13.0" @@ -1574,7 +1568,7 @@ version = "0.1.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75ed2263518ca67a3c158c144813832fd96f48ab239494bb9d7793d315f31417" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "byteorder", @@ -1585,9 +1579,9 @@ dependencies = [ "jemallocator", "lazy_static", "near-crypto", - "near-primitives-core 0.4.0", + "near-primitives-core", "near-rpc-error-macro", - "near-vm-errors 4.0.0-pre.1", + "near-vm-errors", "num-rational", "primitive-types", "rand 0.7.3", @@ -1600,31 +1594,13 @@ dependencies = [ "validator", ] -[[package]] -name = "near-primitives-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92035b79bf9983502fe7b67b5a9fecea7604e979d439727827fd0d8f0d77720e" -dependencies = [ - "base64 0.11.0", - "borsh", - "bs58", - "derive_more", - "hex", - "lazy_static", - "num-rational", - "serde", - "serde_json", - "sha2", -] - [[package]] name = "near-primitives-core" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2b3fb5acf3a494aed4e848446ef2d6ebb47dbe91c681105d4d1786c2ee63e52" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "derive_more", @@ -1678,10 +1654,10 @@ dependencies = [ "near-crypto", "near-metrics", "near-primitives", - "near-runtime-utils 4.0.0-pre.1", + "near-runtime-utils", "near-store", - "near-vm-errors 4.0.0-pre.1", - "near-vm-logic 4.0.0-pre.1", + "near-vm-errors", + "near-vm-logic", "near-vm-runner", "num-bigint", "num-rational", @@ -1691,16 +1667,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "near-runtime-utils" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47f5c1891cec5a03e3dc99f985031408b19516305e2e59d64c4ce52b409e46a0" -dependencies = [ - "lazy_static", - "regex", -] - [[package]] name = "near-runtime-utils" version = "4.0.0-pre.1" @@ -1713,14 +1679,14 @@ dependencies = [ [[package]] name = "near-sdk" -version = "3.0.1" +version = "3.1.0" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", - "near-primitives-core 0.1.0", + "near-primitives-core", "near-sdk-macros", - "near-vm-logic 3.0.0", + "near-vm-logic", "serde", "serde_json", "wee_alloc", @@ -1728,7 +1694,7 @@ dependencies = [ [[package]] name = "near-sdk-core" -version = "3.0.1" +version = "3.1.0" dependencies = [ "Inflector", "proc-macro2", @@ -1738,7 +1704,7 @@ dependencies = [ [[package]] name = "near-sdk-macros" -version = "3.0.1" +version = "3.1.0" dependencies = [ "near-sdk-core", "proc-macro2", @@ -1748,7 +1714,7 @@ dependencies = [ [[package]] name = "near-sdk-sim" -version = "3.0.1" +version = "3.1.0" dependencies = [ "funty", "lazy-static-include", @@ -1758,7 +1724,7 @@ dependencies = [ "near-runtime", "near-sdk", "near-store", - "near-vm-logic 4.0.0-pre.1", + "near-vm-logic", ] [[package]] @@ -1783,18 +1749,6 @@ dependencies = [ "strum", ] -[[package]] -name = "near-vm-errors" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a100dda565c5375ac061126167afc5c33cdba1f2e325cfae3ce08f4a5a432a" -dependencies = [ - "borsh", - "hex", - "near-rpc-error-macro", - "serde", -] - [[package]] name = "near-vm-errors" version = "4.0.0-pre.1" @@ -1807,37 +1761,19 @@ dependencies = [ "serde", ] -[[package]] -name = "near-vm-logic" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12201244dd59ae79506767afe7a8f51b5eb7bd0aa237d355dfa635f7b777c4a" -dependencies = [ - "base64 0.13.0", - "borsh", - "bs58", - "byteorder", - "near-primitives-core 0.1.0", - "near-runtime-utils 3.0.0", - "near-vm-errors 3.0.0", - "serde", - "sha2", - "sha3", -] - [[package]] name = "near-vm-logic" version = "4.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e11cb28a2d07f37680efdaf860f4c9802828c44fc50c08009e7884de75d982c5" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "byteorder", - "near-primitives-core 0.4.0", - "near-runtime-utils 4.0.0-pre.1", - "near-vm-errors 4.0.0-pre.1", + "near-primitives-core", + "near-runtime-utils", + "near-vm-errors", "serde", "sha2", "sha3", @@ -1854,8 +1790,8 @@ dependencies = [ "cached", "log", "near-primitives", - "near-vm-errors 4.0.0-pre.1", - "near-vm-logic 4.0.0-pre.1", + "near-vm-errors", + "near-vm-logic", "parity-wasm", "pwasm-utils", "tracing", diff --git a/examples/cross-contract-low-level/res/cross_contract_low_level.wasm b/examples/cross-contract-low-level/res/cross_contract_low_level.wasm index ad70aafee3910dd4114899103749b9a66bdb0533..f95e9189ac7b770446c60289700bf23dc87a89bf 100755 GIT binary patch delta 40517 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 Wvt-L(MvLg;@KB1fuO6cF=Kle`%;@C+ delta 40607 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"] edition = "2018" diff --git a/examples/fungible-token/ft/Cargo.toml b/examples/fungible-token/ft/Cargo.toml index ba5531ad2..06d2a2303 100644 --- a/examples/fungible-token/ft/Cargo.toml +++ b/examples/fungible-token/ft/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fungible-token" -version = "1.0.0" +version = "1.1.0" authors = ["Near Inc "] edition = "2018" @@ -9,4 +9,4 @@ crate-type = ["cdylib", "rlib"] [dependencies] near-sdk = { path = "../../../near-sdk" } -near-contract-standards = { path = "../../../near-contract-standards" } \ No newline at end of file +near-contract-standards = { path = "../../../near-contract-standards" } diff --git a/examples/fungible-token/ft/src/lib.rs b/examples/fungible-token/ft/src/lib.rs index 9580da065..823d8f495 100644 --- a/examples/fungible-token/ft/src/lib.rs +++ b/examples/fungible-token/ft/src/lib.rs @@ -22,7 +22,9 @@ use near_contract_standards::fungible_token::FungibleToken; use near_sdk::borsh::{self, BorshDeserialize, BorshSerialize}; use near_sdk::collections::LazyOption; use near_sdk::json_types::{ValidAccountId, U128}; -use near_sdk::{env, log, near_bindgen, AccountId, Balance, PanicOnDefault, PromiseOrValue}; +use near_sdk::{ + env, log, near_bindgen, AccountId, Balance, BorshStorageKey, PanicOnDefault, PromiseOrValue, +}; near_sdk::setup_alloc!(); @@ -35,6 +37,12 @@ pub struct Contract { const DATA_IMAGE_SVG_NEAR_ICON: &str = "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 288 288'%3E%3Cg id='l' data-name='l'%3E%3Cpath d='M187.58,79.81l-30.1,44.69a3.2,3.2,0,0,0,4.75,4.2L191.86,103a1.2,1.2,0,0,1,2,.91v80.46a1.2,1.2,0,0,1-2.12.77L102.18,77.93A15.35,15.35,0,0,0,90.47,72.5H87.34A15.34,15.34,0,0,0,72,87.84V201.16A15.34,15.34,0,0,0,87.34,216.5h0a15.35,15.35,0,0,0,13.08-7.31l30.1-44.69a3.2,3.2,0,0,0-4.75-4.2L96.14,186a1.2,1.2,0,0,1-2-.91V104.61a1.2,1.2,0,0,1,2.12-.77l89.55,107.23a15.35,15.35,0,0,0,11.71,5.43h3.13A15.34,15.34,0,0,0,216,201.16V87.84A15.34,15.34,0,0,0,200.66,72.5h0A15.35,15.35,0,0,0,187.58,79.81Z'/%3E%3C/g%3E%3C/svg%3E"; +#[derive(BorshSerialize, BorshStorageKey)] +enum StorageKey { + FungibleToken, + Metadata, +} + #[near_bindgen] impl Contract { /// Initializes the contract with the given total supply owned by the given `owner_id` with @@ -67,8 +75,8 @@ impl Contract { assert!(!env::state_exists(), "Already initialized"); metadata.assert_valid(); let mut this = Self { - token: FungibleToken::new(b"a".to_vec()), - metadata: LazyOption::new(b"m".to_vec(), Some(&metadata)), + token: FungibleToken::new(StorageKey::FungibleToken), + metadata: LazyOption::new(StorageKey::Metadata, Some(&metadata)), }; this.token.internal_register_account(owner_id.as_ref()); this.token.internal_deposit(owner_id.as_ref(), total_supply.into()); diff --git a/examples/fungible-token/res/defi.wasm b/examples/fungible-token/res/defi.wasm index 005fac70ba1b8bfd3ca8faa202d8081e089499fb..d5f6a133f8d1675a3fb504701a022a16df67771f 100755 GIT binary patch delta 20218 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 delta 20112 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�q*J}=ThUIk?txCyX~!_2wt=&3_)P4hYydba0w!X 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 delta 520 zcmYLGO=uHQ5T0+J*+RFW8%ev>AiR|xR7#}^f*`ahc<`1Oo3u%Lm()v@VxgstEdEeX zN^=;{~K?7l*j?bQDE|7P?DpoZLV?KA;5Q>k;yt@*9KjY3rV;Dk z_9Pf57ag$d8$MI3xSh9m_Hnonon7}If@?mN!ddQ?qWxWD3~4%M(D^WF3iy`QBX_}$ z21guud-0}d5A&lm&KW;Ep1z1@|MS`T-hvqMY6_1J22~8H9-vm4pQdn^vwTj~Xi6}RcSUeQuM=SpWC@f$e#fTkcmBBS>%JmF> zVU4ejV!8MvtE;_Z@L)7NZY&|jv+L;KwX8Jj1J|>-hbCXi;W9q)Mh?gEng8Ta!pGaC aaa2p=M!6?4D+8Sq_YLBm)!ei(I`kKLn4V4m diff --git a/examples/lockable-fungible-token/Cargo.lock b/examples/lockable-fungible-token/Cargo.lock index c3af16249..df3701775 100644 --- a/examples/lockable-fungible-token/Cargo.lock +++ b/examples/lockable-fungible-token/Cargo.lock @@ -27,12 +27,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" -[[package]] -name = "base64" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" - [[package]] name = "base64" version = "0.13.0" @@ -179,12 +173,6 @@ dependencies = [ "generic-array 0.14.4", ] -[[package]] -name = "fake-simd" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" - [[package]] name = "generic-array" version = "0.12.3" @@ -283,11 +271,11 @@ checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" [[package]] name = "near-primitives-core" -version = "0.1.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92035b79bf9983502fe7b67b5a9fecea7604e979d439727827fd0d8f0d77720e" +checksum = "c2b3fb5acf3a494aed4e848446ef2d6ebb47dbe91c681105d4d1786c2ee63e52" dependencies = [ - "base64 0.11.0", + "base64", "borsh", "bs58", "derive_more", @@ -296,7 +284,7 @@ dependencies = [ "num-rational", "serde", "serde_json", - "sha2 0.9.3", + "sha2", ] [[package]] @@ -328,9 +316,9 @@ dependencies = [ [[package]] name = "near-runtime-utils" -version = "3.0.0" +version = "4.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47f5c1891cec5a03e3dc99f985031408b19516305e2e59d64c4ce52b409e46a0" +checksum = "a48d80c4ca1d4cf99bc16490e1e3d49826c150dfc4410ac498918e45c7d98e07" dependencies = [ "lazy_static", "regex", @@ -338,9 +326,9 @@ dependencies = [ [[package]] name = "near-sdk" -version = "3.0.1" +version = "3.1.0" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "near-primitives-core", @@ -353,7 +341,7 @@ dependencies = [ [[package]] name = "near-sdk-core" -version = "3.0.1" +version = "3.1.0" dependencies = [ "Inflector", "proc-macro2", @@ -363,7 +351,7 @@ dependencies = [ [[package]] name = "near-sdk-macros" -version = "3.0.1" +version = "3.1.0" dependencies = [ "near-sdk-core", "proc-macro2", @@ -373,9 +361,9 @@ dependencies = [ [[package]] name = "near-vm-errors" -version = "3.0.0" +version = "4.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a100dda565c5375ac061126167afc5c33cdba1f2e325cfae3ce08f4a5a432a" +checksum = "e281d8730ed8cb0e3e69fb689acee6b93cdb43824cd69a8ffd7e1bfcbd1177d7" dependencies = [ "borsh", "hex", @@ -385,11 +373,11 @@ dependencies = [ [[package]] name = "near-vm-logic" -version = "3.0.0" +version = "4.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12201244dd59ae79506767afe7a8f51b5eb7bd0aa237d355dfa635f7b777c4a" +checksum = "e11cb28a2d07f37680efdaf860f4c9802828c44fc50c08009e7884de75d982c5" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "byteorder", @@ -397,7 +385,7 @@ dependencies = [ "near-runtime-utils", "near-vm-errors", "serde", - "sha2 0.8.2", + "sha2", "sha3", ] @@ -545,18 +533,6 @@ dependencies = [ "serde", ] -[[package]] -name = "sha2" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" -dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", - "fake-simd", - "opaque-debug 0.2.3", -] - [[package]] name = "sha2" version = "0.9.3" diff --git a/examples/lockable-fungible-token/res/lockable_fungible_token.wasm b/examples/lockable-fungible-token/res/lockable_fungible_token.wasm index bc0ca65ddfdd761ca4b65274ee16d83da56a99fe..0d3e691cfec0446273ae1134fd9cb464d40dc052 100755 GIT binary patch delta 19044 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 VNrcrLpIX{|9(v4%Ywx delta 19059 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 lOmk$^Ba)ajy%3|xqtj30J2fKe5iaGiB$)2(lE Self { let total_supply = u128::from_str(&total_supply).expect("Failed to parse total supply"); - let mut ft = Self { accounts: UnorderedMap::new(b"a".to_vec()), total_supply }; + let mut ft = Self { accounts: UnorderedMap::new(b"a"), total_supply }; let mut account = ft.get_account(&owner_id); account.balance = total_supply; ft.accounts.insert(&owner_id, &account); diff --git a/examples/mission-control/Cargo.lock b/examples/mission-control/Cargo.lock index 420f20eea..d3ec5f6b8 100644 --- a/examples/mission-control/Cargo.lock +++ b/examples/mission-control/Cargo.lock @@ -27,12 +27,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" -[[package]] -name = "base64" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" - [[package]] name = "base64" version = "0.13.0" @@ -179,12 +173,6 @@ dependencies = [ "generic-array 0.14.4", ] -[[package]] -name = "fake-simd" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" - [[package]] name = "generic-array" version = "0.12.3" @@ -283,11 +271,11 @@ dependencies = [ [[package]] name = "near-primitives-core" -version = "0.1.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92035b79bf9983502fe7b67b5a9fecea7604e979d439727827fd0d8f0d77720e" +checksum = "c2b3fb5acf3a494aed4e848446ef2d6ebb47dbe91c681105d4d1786c2ee63e52" dependencies = [ - "base64 0.11.0", + "base64", "borsh", "bs58", "derive_more", @@ -296,7 +284,7 @@ dependencies = [ "num-rational", "serde", "serde_json", - "sha2 0.9.3", + "sha2", ] [[package]] @@ -328,9 +316,9 @@ dependencies = [ [[package]] name = "near-runtime-utils" -version = "3.0.0" +version = "4.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47f5c1891cec5a03e3dc99f985031408b19516305e2e59d64c4ce52b409e46a0" +checksum = "a48d80c4ca1d4cf99bc16490e1e3d49826c150dfc4410ac498918e45c7d98e07" dependencies = [ "lazy_static", "regex", @@ -338,9 +326,9 @@ dependencies = [ [[package]] name = "near-sdk" -version = "3.0.1" +version = "3.1.0" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "near-primitives-core", @@ -353,7 +341,7 @@ dependencies = [ [[package]] name = "near-sdk-core" -version = "3.0.1" +version = "3.1.0" dependencies = [ "Inflector", "proc-macro2", @@ -363,7 +351,7 @@ dependencies = [ [[package]] name = "near-sdk-macros" -version = "3.0.1" +version = "3.1.0" dependencies = [ "near-sdk-core", "proc-macro2", @@ -373,9 +361,9 @@ dependencies = [ [[package]] name = "near-vm-errors" -version = "3.0.0" +version = "4.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a100dda565c5375ac061126167afc5c33cdba1f2e325cfae3ce08f4a5a432a" +checksum = "e281d8730ed8cb0e3e69fb689acee6b93cdb43824cd69a8ffd7e1bfcbd1177d7" dependencies = [ "borsh", "hex", @@ -385,11 +373,11 @@ dependencies = [ [[package]] name = "near-vm-logic" -version = "3.0.0" +version = "4.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12201244dd59ae79506767afe7a8f51b5eb7bd0aa237d355dfa635f7b777c4a" +checksum = "e11cb28a2d07f37680efdaf860f4c9802828c44fc50c08009e7884de75d982c5" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "byteorder", @@ -397,7 +385,7 @@ dependencies = [ "near-runtime-utils", "near-vm-errors", "serde", - "sha2 0.8.2", + "sha2", "sha3", ] @@ -545,18 +533,6 @@ dependencies = [ "serde", ] -[[package]] -name = "sha2" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" -dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", - "fake-simd", - "opaque-debug 0.2.3", -] - [[package]] name = "sha2" version = "0.9.3" diff --git a/examples/mission-control/res/mission_control.wasm b/examples/mission-control/res/mission_control.wasm index 10dc96d105f4e2cc91e6de88fbc1051979e7c133..d09130f6fd6a2207069d00b2c36007f089c97e5b 100755 GIT binary patch delta 2256 zcma)74RBP|6@K4+Z+BmI!|?LE*++Ksb`xPqLO{kLAr|WfLW_un22zxOK*e!(h$6Iu zRhk5|*xD*hd#B!Dt3=DRSS?6jr(0^kDA+)VCJGV(4L`x3wt|U2v=W0o_ib>dbvkmB zx#!&Po^#&0-#Pd0v+t&D`FmPRPLMS=D9hEx2AWAl!*Y#uDcvM@O|AAcsv48SOT!T? z8jY%os;a?>#U&*!7A;jLO)85jZhgS0LF*VW&+kEv%|$JK4_KJ~QwsQMH4 zp!x>i>Mb1eigs2T(VASJYoBTV<~`n4_wV-T?e1xO=-ynr**8YVF#mbh0EX@FXU_-w zZNl!%`8W$FdHcjNn*TX5#_r!_mlfa1@Us0_>1l>;yK!=jR(Uef)TCIuIeJT^({Jwo9 z{H13KN$c8ow;kKRQS$P1=T3fmXMnG+)H(lK;TOm(9JinD+zuS!Yq}!*mIIsk@WJmn zt7Yi3d%AuI9JS|lm#TzqJvQEM>q!#A=XDR**S>Zm8%1{<*(>epk6ul7_SR#4(x(3C z`}TL=tWMd?;^+ELppW--J;;C2^)-t9vr~&@Q2MOxJ^N%4UQGT$$G3oPF_MP6l54#f zaEmAWC>0wsFxh=t*3Nt+6O(X2lx4!g9BR94(Vc-@{eb9bQetO+DLx+uzZjc^4Q2N? zkv;WPOpnL3wZ>m$3#G$noRD#12rE8nqrXa&Yz%RSAJg%MsLeo0ULJKAHDDwqVu%~5 zkBfPkc&Ljfdd*oJ33F8Y2i2x&RyyV~r z!)IZXO*Llm&|`kLv*i=ReoXbH?l&xE91#_HXc~WIM;85gXf5945FXb4Pc4a9)n}=e zcA40U9Bjq|qB94IdLeA@1(sbqsZ>$BSQf( zD}r)r{S6UJz_8dB!FmiQ^9vE3oP6-xl!p5V7#bPBG?<%yK#5l=<*Ib9;43;z>a>$J z$U&6v-V8$7%S1rcwtbVyg?Ps~1+$^_oObji?=Avw% z(Ydf;CjF){O3r6c2`y?kx^Jh*QS8h|zWDvkSSuc{M+tj7Ar93ez^|JfX745VirGc@ zGoMi%WbY(+UG)?;l;E4IL+o6F@2HN5`nypi@^3*a`!K9mVUfLk->*Q@S)Iv5Zd1@}}o$w#`!^@rk delta 2227 zcma)74RBP|6@K4+FS{@MlJfGq*++Ksb`!#q#DIt~r0tZ|S{q6!G=f+HBpEW}WK_hT zp~aB|lIW=5V6Sos>ZsJ2!c6(=)7dJ4#D-#m3i2Z)L?I+m&|(EdAd0rnNq_V69UU>JOt37mDadz;;r6Brm1rHXtUoDlYb@(Gqsub*0g$uUJj;c#5N{rJJVdwIW{2t0)V2HPmD<%2&aWVE@i&I*3FT;N4g_08td!5GdRa(VROH-3#Gg~#Amdh20 zJJSVYDKX7-nh7)vrpW(v#a7HO+zpEP4<}{PkcuPDnVV(;$M}Sbd|p5KW?F5S{Ftk^ zxiZSnRW#%sOYDj%WlS4onE$Oh5C3rDD4cUPPi+Rf+#>!|hLAIJ+7NJ_w^u*ubWT6c zaNc=o<^#Z&PG;3D>c0&`v)2G0IZNlnG_to>uS~)TURiew2KcJF(Ihw4?fo7yl}8q~ zd=DMVOY5_VtDgE|e&2ttoSyn<8WG4#i~QWTq(v@QFS(bdKmYcoCmdC#85`LqEU|M7u2(nKG0wBhvy=#KwU$FG3B;$kuu zC5|7j_hHzBZZS0tztNYsQbv|hNwt?L=1+tke&?CaCMC9;swbv5#CnC)hMy&AZg`Y@ z6@!m2w)p0oyrMG=e)NjoG}u}Ppz?uB*eBm zNsJ+^7*v6;OVn0Hc{(0Nv*<{NKl2(6OsvjAg=o%3mDrh%oNN1pGx16y{LKh!hOJR2 zydfS5U_DxeZ6R3bh9+Z@VJF#|`G)*@nA~D!LjfI^j-nY`AWqzkOfew`mI!3w7bWB+ zGjR#|ADKWfKW5(b*F;*j8f7VEEZ0`$N{>*-<<#nTeEPF zd#Ax`-TT!YqQ=5%bj8nFcnPBtZVd0i*TXl&PWG@B#hTpkws|LIogt7{3ObLTXWup7+n z;vO4!VW&83;}qIOM;Lcthww)*2OZ+R2*zSWtc_p^M&f2ZqT|KMF#O#7nZ_r)W(0Mc zQ9;lJ9+uI+!-t_McD(G@$Of<7@x1TtgxP$zg%5OQiY;|06p`CegyZpF-i{35ps1aN zAL9e@;w=1}v{SPXAozJ=WmUL7mQ19K>4uRBG`c+zW(kbQ=RdhEB1SJpVf@KjjC_i@;={?TD&9Md Hy*c(@F6p@S diff --git a/examples/status-message-collections/Cargo.lock b/examples/status-message-collections/Cargo.lock index cdcaa1ffd..3dd6ab57f 100644 --- a/examples/status-message-collections/Cargo.lock +++ b/examples/status-message-collections/Cargo.lock @@ -27,12 +27,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" -[[package]] -name = "base64" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" - [[package]] name = "base64" version = "0.13.0" @@ -270,11 +264,11 @@ checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" [[package]] name = "near-primitives-core" -version = "0.1.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92035b79bf9983502fe7b67b5a9fecea7604e979d439727827fd0d8f0d77720e" +checksum = "c2b3fb5acf3a494aed4e848446ef2d6ebb47dbe91c681105d4d1786c2ee63e52" dependencies = [ - "base64 0.11.0", + "base64", "borsh", "bs58", "derive_more", @@ -315,9 +309,9 @@ dependencies = [ [[package]] name = "near-runtime-utils" -version = "3.0.0" +version = "4.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47f5c1891cec5a03e3dc99f985031408b19516305e2e59d64c4ce52b409e46a0" +checksum = "a48d80c4ca1d4cf99bc16490e1e3d49826c150dfc4410ac498918e45c7d98e07" dependencies = [ "lazy_static", "regex", @@ -325,9 +319,9 @@ dependencies = [ [[package]] name = "near-sdk" -version = "3.0.1" +version = "3.1.0" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "near-primitives-core", @@ -340,7 +334,7 @@ dependencies = [ [[package]] name = "near-sdk-core" -version = "3.0.1" +version = "3.1.0" dependencies = [ "Inflector", "proc-macro2", @@ -350,7 +344,7 @@ dependencies = [ [[package]] name = "near-sdk-macros" -version = "3.0.1" +version = "3.1.0" dependencies = [ "near-sdk-core", "proc-macro2", @@ -360,9 +354,9 @@ dependencies = [ [[package]] name = "near-vm-errors" -version = "3.0.0" +version = "4.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a100dda565c5375ac061126167afc5c33cdba1f2e325cfae3ce08f4a5a432a" +checksum = "e281d8730ed8cb0e3e69fb689acee6b93cdb43824cd69a8ffd7e1bfcbd1177d7" dependencies = [ "borsh", "hex", @@ -372,11 +366,11 @@ dependencies = [ [[package]] name = "near-vm-logic" -version = "3.0.0" +version = "4.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12201244dd59ae79506767afe7a8f51b5eb7bd0aa237d355dfa635f7b777c4a" +checksum = "e11cb28a2d07f37680efdaf860f4c9802828c44fc50c08009e7884de75d982c5" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "byteorder", @@ -560,7 +554,7 @@ dependencies = [ [[package]] name = "status-message-collections" -version = "0.1.0" +version = "0.2.0" dependencies = [ "near-sdk", ] diff --git a/examples/status-message-collections/Cargo.toml b/examples/status-message-collections/Cargo.toml index 5aefe2fb8..398d971fa 100644 --- a/examples/status-message-collections/Cargo.toml +++ b/examples/status-message-collections/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "status-message-collections" -version = "0.1.0" +version = "0.2.0" authors = ["Near Inc "] edition = "2018" diff --git a/examples/status-message-collections/res/status_message_collections.wasm b/examples/status-message-collections/res/status_message_collections.wasm index cbd36a15b4137d68beebab32f81f8389142e5453..c99f24c02ca5bb37a965262b8dca602ad5aa20d9 100755 GIT binary patch delta 23279 zcmbt+3t$vQ(*M-#CYxk8$p9hbo!vYjKmy?v-jD%AIgpp2=jrhVNkE?hlA|eL@1_>xiP*fBYP!v=|P!L4)z(Ykv{r{?GX0r+Cci;bu&ZDZUtE;Q4s;j$a z+4*_!oUely$JKEZKK7V0L@j)b9vkAsJDxkTJ_~ZZ?tD!|2Di>sVio^iXi{Qgh!PSK zmmCr+{|ku?b%n&ng_uB`m=GL$ufwVGUl{)6LrqCZaVQRlBQZ5CJv~TGsqbjeAR{Fu zEL{x_3QA8=U9pwkl5JR z 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 k#ZRh@hFfV^VxSf5Kye`ays>F3b*^SZ delta 22685 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 Self { Self { - records: LookupMap::new(b"r".to_vec()), - unique_values: LookupSet::new(b"s".to_vec()), + records: LookupMap::new(StorageKey::Records), + unique_values: LookupSet::new(StorageKey::UniqueValues), } } } diff --git a/examples/status-message/Cargo.lock b/examples/status-message/Cargo.lock index ed95d0a61..f182f7260 100644 --- a/examples/status-message/Cargo.lock +++ b/examples/status-message/Cargo.lock @@ -27,12 +27,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" -[[package]] -name = "base64" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" - [[package]] name = "base64" version = "0.13.0" @@ -270,11 +264,11 @@ checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" [[package]] name = "near-primitives-core" -version = "0.1.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92035b79bf9983502fe7b67b5a9fecea7604e979d439727827fd0d8f0d77720e" +checksum = "c2b3fb5acf3a494aed4e848446ef2d6ebb47dbe91c681105d4d1786c2ee63e52" dependencies = [ - "base64 0.11.0", + "base64", "borsh", "bs58", "derive_more", @@ -315,9 +309,9 @@ dependencies = [ [[package]] name = "near-runtime-utils" -version = "3.0.0" +version = "4.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47f5c1891cec5a03e3dc99f985031408b19516305e2e59d64c4ce52b409e46a0" +checksum = "a48d80c4ca1d4cf99bc16490e1e3d49826c150dfc4410ac498918e45c7d98e07" dependencies = [ "lazy_static", "regex", @@ -325,9 +319,9 @@ dependencies = [ [[package]] name = "near-sdk" -version = "3.0.1" +version = "3.1.0" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "near-primitives-core", @@ -340,7 +334,7 @@ dependencies = [ [[package]] name = "near-sdk-core" -version = "3.0.1" +version = "3.1.0" dependencies = [ "Inflector", "proc-macro2", @@ -350,7 +344,7 @@ dependencies = [ [[package]] name = "near-sdk-macros" -version = "3.0.1" +version = "3.1.0" dependencies = [ "near-sdk-core", "proc-macro2", @@ -360,9 +354,9 @@ dependencies = [ [[package]] name = "near-vm-errors" -version = "3.0.0" +version = "4.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a100dda565c5375ac061126167afc5c33cdba1f2e325cfae3ce08f4a5a432a" +checksum = "e281d8730ed8cb0e3e69fb689acee6b93cdb43824cd69a8ffd7e1bfcbd1177d7" dependencies = [ "borsh", "hex", @@ -372,11 +366,11 @@ dependencies = [ [[package]] name = "near-vm-logic" -version = "3.0.0" +version = "4.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12201244dd59ae79506767afe7a8f51b5eb7bd0aa237d355dfa635f7b777c4a" +checksum = "e11cb28a2d07f37680efdaf860f4c9802828c44fc50c08009e7884de75d982c5" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "byteorder", diff --git a/examples/status-message/res/status_message.wasm b/examples/status-message/res/status_message.wasm index 06e5f9b5d5d1ec82c571959814c409323c9bccc2..f37ad07e4c2ad712c63fa3051248e92bd7a3a33d 100755 GIT binary patch delta 12953 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 delta 13057 zcmbta30M@z^52@BSr(RKxCI0jkV^!`1I2qho?^T;8qb*bGzZ?A_!5%{22ebr#8%r| zi1&>yvfhFkgSV(rqo{b`6{BKQy!}`A>@KS&`SQL$pLWkwS65e8SN*!WXJ1{=Up%kR z@^%$c#%Ts%0pkW}Q^su!6Lngun?EsOV@(h^Q{c z#MFq0aEcamk`x^w=>25b!7tpw&q1T{)P(8%G+}-kjXu^-uOY1*s-qAx!eLMY2Yiq9 z^9$1Z`RkF#DGa;$10rD5B2V@-Dce?-7N8>xK>;zt{1mSYsBr+4yjnYC0-YAiU-Aw;#qNnctSiTn#EsJ#BJhn zag%sJ+$ye=w&?PupQJTXp0rUiNk2*}q*c;dX|uFmIw&2ImPm)CBhpf7xwK3=EuE9j zNWV&_q+g_y(rf97v{Lt*bX6L!%g{~GZO~nlo=KTHqMNDPrJJRjt)sf_x*fWmI;V{F z4zqL#04ZUq_@^PaPq>h5XE)Pe!!5z_y9^{5HS$qYKi6d3CRme2m@azo2^mJ3A z_gRp$(-{vaFgiqwtS?E3@4w-tDcyIKJCu{S==N}fd>!2!%N@}hU?v$-eRh@GOs>XY zgeXB{)Ef24M$xDrEZ-phF)fj?e@q>?O=iS2#Sx2Rx*#R2MmsEr)u@IdNex9fpJqB; zBOPEC=@VBAO32i>L9oR1AkGMI+vHhmH~24QYWW)lrB-q^J~M+e&cq1vd~zo~7#0xc z+QIUI3CLvd)))mg0UW|ggmG>684gT2{oaR%uIM6Qc2e1IwY|E7`Q`b)*poBv-%VHa~N6H zzyltUEe&GfCb`}q$?bu~&?0If$u~*U#D?$CCMKR1US*IE8#aaOWKqL^;Q+_YAw<_G z1x-Go(J~ZWqj7&&L8dfrBBV|rhnqx@`;CvfT(HRoxr7{Q5((w>r4NJ?$BGb=*z~CH z8w@Hl1<=uvM(`pRnmIv{sY$cp;8elPWWYJ6lKkew{YxxzwTf(6IyZyNWzmsUz(_t+ zqI~|Ghb&YYqBF#A@gjGWu`q@7IT>u4(Bdk7vHAVv2)IA#4t)%-T;dQ#{ zllNOO+S(qWSRU&Uhvlmtr!Zbl_Uy>QrdOXr)*jH$FW@$FK4&msY&z7}Mj5q=F&T@f zWcfDf)bD+7-i`sGjn?Yx3%GV#r9eX#e^8GY`gA}Uz52wF&b`9Xf5!Ccr>NY>D~IY@ zyoR(E+O95KHYm=?^6%f_SVk>|R)~n>;e!||B?whm+$dF&6%oVItM>;eb!hK+EEo3< z^RgRXwv2ByZS7YT;0H3|KZ{^LaT^$jW$8zO@DthiVGn5wTQ<|~em?(y7UKR%7&$O7 z$GL)sD4>$^Vlrk>yp2#RS3e_%sj!jm*@mhxWi_gJB71>ITC?@wpFw zp243t4@*S6yEiNZ>F&e7K%R-i!?0X4JPFH3!y945#E)RD-9`*RO5TVJ_?v-BGRFerEk#ve<07#jV0Jn`*^Y=h8 z8M0t9oS(zdbC$w|wiKtO-Hx}@_WK%echI0(xT ziz5*k=Pd3URLFvl!SdTxLvWdHud0h> z@al<l)0AX6i|OxgNFwoZUL<)M-(RjfYO1 z0EyeQ#5Rzfg}acv zm(w8xcMg!Z65ox%h;sEe*7s1eEI=EdVJrsw8O3er*7$#!kuBvg90dVV1akRvA5wFz z4~aC5wM|Mg7$rWbjV3Q~H-MJ7bz)qDTsXX~GfD`u?&&0Ft*_UgEQXe>+wgtu|6MCG zc4J-g?fUnc;4J^~!dFfx2egm^;|L7)C09)&5m?{PYvPd3GvFztaJvuLkk?ZMTKNbw zBqn6{i1+4(E+w-Ia7C7~65Y7(<_RsmH9~WS1zxRP7~3gscka?Gc229kacFrW^LGPg z2t22?9Vc+|bWv6C3w2`MIX`1k|8dp}77Z>EZGJ4ABJuhC$Zz?6LRLD_nX3n?u7+V$ zhiSr&5vT|z47e;jl{J!~=6|DW9ybr*3E^@z86*{30)>nWQeGTJ61N8VST`PqP}bd% z?K@jDF`Ih4wFQ=m+q%@SOh`Uynb-nEz!J+d?)6r3DZ+^TASt`T@Tj(A*Fy>B zkvaQv5zLZ)3WK?1=ugePRD5;AP{QEK&1RacCWY8MkCgp16j{6N?^Ms4WP{C#jDo=p zSB!1nAkX2h<7IhAqKL#r zIzljxvL5#*2}e`iZd&>y+TwZg0r~0ZAZ(2}b`Iv6bjRJma~|{I%3#7(UP_{hzY4Va zl3?>C>!D6#=)vN|o1838M(=ETA|A^TC%XT|8IK;T0+9qx_5zB>yM1q+LTj8_4b*hz zR2>1E4QIN;b<=<|<=TMRs#z_WoR0DuQ(?(^fH`Eu#cwf1yL+)6z$TJd+62r0mPTUeEH3SV13oToExXm%{2Pj9on$>wjL0|-UoX?4Dl|nTICW?-?YkWXsB^xAgH({<7LJrl2o1)bX{Gr z01lH3tXW3If{sOSsVTQS5#Xlj_Jc8idHqKZy_`!e$smIFEi(RLJ-AQI54U>WXJmFF zlz3ug)XBe*v`5M4Wp^KixydLPp@iLZJU~W{?WE&lg?mmN7kAc-NTA0tpAzpUO>y(- z{v=Ym%#`DYdf^q0u0;IZn!|IF_4I3aNSvSb5}u{eVn660JWr!Wf9OQsdmbjdP9r0p ze~X8vyU+WwN4_re8LB>NaTrh zdM&5|6UdR50SKYDUJmstP+1f`9z-opJdKn+sp0bjcPW{V^N$clYE9Lt5TdpIs+{2>}=c~&lj&I*E>uy9sK=!NAiocIdSVfCa z4HnRjB1HISb8Dip)RhU2l~a5dv!b!P*Tm+>MReHq4xiL4IQ+JA1f*ZDjNp z5ym;rU<(&2$%OWmpquA3{;F&30!E!O0Hw=?bdLlrVJ6k-pb)ZXkq)~1ELZiwq46R@ zuM{0*5_i+u4$uKs(NqUW^jT?R5$#!yIY3SK-*_88-f+)YMcwoe0;_4f9y6EK^^On$Q)o>`@Nt>K7L;9L>XYTEw5uaTB`oE;Zsjg) zVlwUhg9X`6PON0wOmiKf1!U7d9HE-;OJ)jxXFLY5YtI!&3osxgIh)2g;d;EJ-JBrY z%7ghk<5|mj^vE+Ed900s+L&h(fQ>;8smD;B{F2^t0&g5qGC(y&9TC~($*POul&qI~ zn8Z~on)jCCTljk!(D>GPXLzrXjwGCQ3t*j5t1WCK)I5jDkZ(CR&;d+zu5as zGudWDjMS;>@C?W-Le_90F6d|2CAiY!jF~ochA?Fj>*K=LOo3J6t@-8-8c{&9b_yDHS-YyVZ z^&Q44$XHOx*wtaqp#tnRjlOV!NTDp9Z6jp*D~Wb?g*fYjGacs&{nTv0i{5ty2gsyP zTp`lYcF#A>zZu-8O?*-N7j%FxMA~-2 z${=CM5?$yE)r8V?GNPguJS905!NS9IQrt9@xSn!mMyfn*;5q%(A2G0$Mg~A{;Ym8_ zeEKW;A^;ll^{$E=%XRaNsxTkWvEqUdyCyMzch(rt0p!WFOAz?O_jE`QMB01|9r+B! zi=S|qLw^c_K`@!d1j8c)zYrs=feZAA5n97svu6mxG@PeBLvfS|=8d6{0Wh1^uLeUR z=JBY)K(bDbdnRrpY$pMkZvuv&=`bS%&}-EY-!7RQ!yz6l_g^rdj*mdRT|iexz(ANz zT_W*A&>q?;5{II6RU`zW0zXHBn*fXGnP}LH)0DKn>jQ9AlxWdIOf~#jVYCRd#X&!i0*J#6mCq3O=JUElY~MNZcJA z>G-;_3q#?&UkXw+3WKWbIPgm0u;(nRAbkHcYm-$hbjH|X9WHUAyM^eg5|4ADn}z72 z5_iAB>8uh>oak)f#D!!sS97AHoRh*3%-Kn$&f`?;@Qx}mixZtJ{q-s_jT3Payt{)+ ze9C8L<uh4KfLLOe{juF$ zO#$8_s`F^YyvE0$=jaMOUVz;VayHW*_d5jE$+TuYh(m?@*F$BB%oFOtAwbuxl?dMS zlllmA3#nfN_)y}S&3NfYXEy-1Fje?lBdTgxzN+q`MGfG+KyFqNxw*hFs$Y#!Y~J(AfR@x4KdWSY1f9R-Ag*QA%wfAxdWGp3~L)g z0NS#sA;xeCebx|G>Gv=zX$-Atc_Z+pdm2Gix9|9jS?bMGe3t$$v(wY-@qC}@Wd!{nQ|^2+6022&^)yX)C0p& zweJ-HB$`zZZFspUjKJl~YYquCvl)DbN_b?xk&+y$ zbzz7s$kSO95-YbDBfo!RM>Q2X&$6kZ^PSYv;YPg1I_3y^^S3SWc%-^?DBaQu8lm#& z*I{}AGX`|c^E9|M?iu{n!6=;1pxx`hOpCX-e%ITr`e7D?$FF2OnHqRz5AuH1u)Z2) z<+%dX!(G|IYWceP;J)*V3bw5Y8VK4kWd!JE_Tba)R$ ztUOxS1HOg1v{_I10xP%KxcWzWg2C&NDjp4*in~z-TaQQdPER~p6q##&0PJ%ao!<)r z8r@}#{sy5rB6fjhB)=tAvM#cL9Ax{(RIoIz<&CcLU0U7?s&=sO7@3b(8peA2R7tTK zxRUZGJhXRjT*STR^xlZhwkxp8E@kF=eepnA_g!IDO65ve#p{fsl8whtn$r)?;HLgn zf0&4Vgc+R=zK#D7p&<4{XyRMQU0l(G;MY}Ur6YbrW8FAM*A%tUD7F}nX_;JKn<*kw zmdKbEAQSH@G)F7CD4Mny7$Q6OILSA-b@6QryzyF!-^i@3?1UpKnM{_^Ww0WDuE<|l zI^wdRNM|L5b{zmd3BTJ*1KIY^=s`&`FFZ#0AS#l3kQHs>&_<<;*BHb zO6>0G20i;9Fj~kyNIt7eR#?vKIM7D+MRF>By3)!w%nb*^HW8&g`V}8POkZUSY0RMlTHk?^uh^D{D)cdj%?oSuIjXedERQ!#?8x;02dL^gaq|qZ`IpV|dksK{P7zKg;c46+UhB?1tb;M|yJ_-*_ zH|Xk75L!izOZ5gem&Ls`5U-8G!$l!=9}ROba#oLqHkf)o7!6YeOZ<5nCFQK3hUN4z zw)pcxaw_5j3(JB^vNw`fVi2>iEFS}}Bn-g&-$2)9RwJ-4MmMk88{zdO=K2_8_O5S> z$4t(9osRz&yrZo#mdPV8L0PFbs+PyavHDjT-Hq(lK>ZVsc*kY!oYGHP&BOm>39Qf6@PNEVDtW&R~Sb6OHoOVdT z3y{5ZObW!>ejmub5fxo6pqU+@GZj*KT9cRx`BE3lDjL~uB^KPba|NRlQg+x=6svO- z-DP~%^|ylcS(QqgPXO;;)<&yyJb9yw4Xp3k3$nuQoHwYC&NGh;RPstVFI_(YzQO#5 zRgEoq5BgNGM%luLuvkP{$%G(=pS2febi_Fw=5xAfzB&;vHQ}cDX(rSWF@KN!9-hN} zbM!R4bi_buIUSO1JCzIedsxmCD5C|_!MnP3ep!sDR8#VJqt%%9`q0uqR0{lSxtcLLBRx3MW&Y?_Y(~zxuSP5HOB}93` zG1|IFnSU^9u(FcXm>L(X#?LA9&G%QsHSnF!j1r<{Xw0UJ$sN1in{WPYEqtbhKj{1T z{RQrszs$v(A=Ds#6NJS6Ps5p0Hi4d9rDd9|$0;xBnuouM$utM#fh%jOz8RByiwRAe z@i+){7RWe0IJ zZ_!^4;yvdrTI~>QKz}`T2ud-QHXnu^SdBUYJGNo!z#1@t= zMx*J9|Jfhl|8DrdJA1)D_WnNp@4;U1kG=OayWWE-zR-;}eF%-{0G;4yzNiz7QU3>~ Cgw=Nd diff --git a/examples/test-contract/Cargo.lock b/examples/test-contract/Cargo.lock index 72771704a..c975eae8b 100644 --- a/examples/test-contract/Cargo.lock +++ b/examples/test-contract/Cargo.lock @@ -27,12 +27,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" -[[package]] -name = "base64" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" - [[package]] name = "base64" version = "0.13.0" @@ -270,11 +264,11 @@ checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" [[package]] name = "near-primitives-core" -version = "0.1.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92035b79bf9983502fe7b67b5a9fecea7604e979d439727827fd0d8f0d77720e" +checksum = "c2b3fb5acf3a494aed4e848446ef2d6ebb47dbe91c681105d4d1786c2ee63e52" dependencies = [ - "base64 0.11.0", + "base64", "borsh", "bs58", "derive_more", @@ -315,9 +309,9 @@ dependencies = [ [[package]] name = "near-runtime-utils" -version = "3.0.0" +version = "4.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47f5c1891cec5a03e3dc99f985031408b19516305e2e59d64c4ce52b409e46a0" +checksum = "a48d80c4ca1d4cf99bc16490e1e3d49826c150dfc4410ac498918e45c7d98e07" dependencies = [ "lazy_static", "regex", @@ -325,9 +319,9 @@ dependencies = [ [[package]] name = "near-sdk" -version = "3.0.1" +version = "3.1.0" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "near-primitives-core", @@ -340,7 +334,7 @@ dependencies = [ [[package]] name = "near-sdk-core" -version = "3.0.1" +version = "3.1.0" dependencies = [ "Inflector", "proc-macro2", @@ -350,7 +344,7 @@ dependencies = [ [[package]] name = "near-sdk-macros" -version = "3.0.1" +version = "3.1.0" dependencies = [ "near-sdk-core", "proc-macro2", @@ -360,9 +354,9 @@ dependencies = [ [[package]] name = "near-vm-errors" -version = "3.0.0" +version = "4.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a100dda565c5375ac061126167afc5c33cdba1f2e325cfae3ce08f4a5a432a" +checksum = "e281d8730ed8cb0e3e69fb689acee6b93cdb43824cd69a8ffd7e1bfcbd1177d7" dependencies = [ "borsh", "hex", @@ -372,11 +366,11 @@ dependencies = [ [[package]] name = "near-vm-logic" -version = "3.0.0" +version = "4.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12201244dd59ae79506767afe7a8f51b5eb7bd0aa237d355dfa635f7b777c4a" +checksum = "e11cb28a2d07f37680efdaf860f4c9802828c44fc50c08009e7884de75d982c5" dependencies = [ - "base64 0.13.0", + "base64", "borsh", "bs58", "byteorder", diff --git a/examples/test-contract/res/test_contract.wasm b/examples/test-contract/res/test_contract.wasm index 07e8f694ee91f3bcca8a08de0c946e8d74ca7e3c..a515d8879dc81f9bb8adabd64ea156df47711227 100755 GIT binary patch delta 8529 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 AVgLXD delta 8645 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 F{|3yXBE0|r diff --git a/examples/test-contract/src/lib.rs b/examples/test-contract/src/lib.rs index ecc5e92be..6bd637713 100644 --- a/examples/test-contract/src/lib.rs +++ b/examples/test-contract/src/lib.rs @@ -17,13 +17,19 @@ impl Default for TestContract { impl TestContract { #[init] pub fn new() -> Self { - assert!(!env::state_exists(), "Already initialized"); Self {} } - #[init] - pub fn migrate() -> Self { - unimplemented!("Unimplemented"); + #[init(ignore_state)] + pub fn migrate_state() -> Self { + #[derive(BorshDeserialize)] + struct OldContract { + // ... + }; + + let _old_contract: OldContract = env::state_read().expect("Old state doesn't exist"); + + Self {} } pub fn test_panic_macro(&mut self) { diff --git a/near-contract-standards/Cargo.toml b/near-contract-standards/Cargo.toml index 6e8192cce..c5e009028 100644 --- a/near-contract-standards/Cargo.toml +++ b/near-contract-standards/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "near-contract-standards" -version = "3.0.1" +version = "3.1.0" authors = ["Near Inc "] edition = "2018" license = "GPL-3.0" @@ -12,4 +12,4 @@ NEAR smart contracts standard library. """ [dependencies] -near-sdk = { path = "../near-sdk", version = "=3.0.1" } +near-sdk = { path = "../near-sdk", version = "=3.1.0" } diff --git a/near-contract-standards/src/fungible_token/core_impl.rs b/near-contract-standards/src/fungible_token/core_impl.rs index 46a51f725..cb8bfe356 100644 --- a/near-contract-standards/src/fungible_token/core_impl.rs +++ b/near-contract-standards/src/fungible_token/core_impl.rs @@ -4,8 +4,8 @@ use near_sdk::borsh::{self, BorshDeserialize, BorshSerialize}; use near_sdk::collections::LookupMap; use near_sdk::json_types::{ValidAccountId, U128}; use near_sdk::{ - assert_one_yocto, env, ext_contract, log, AccountId, Balance, Gas, PromiseOrValue, - PromiseResult, StorageUsage, + assert_one_yocto, env, ext_contract, log, AccountId, Balance, Gas, IntoStorageKey, + PromiseOrValue, PromiseResult, StorageUsage, }; const GAS_FOR_RESOLVE_TRANSFER: Gas = 5_000_000_000_000; @@ -75,7 +75,10 @@ pub struct FungibleToken { } impl FungibleToken { - pub fn new(prefix: Vec) -> Self { + pub fn new(prefix: S) -> Self + where + S: IntoStorageKey, + { let mut this = Self { accounts: LookupMap::new(prefix), total_supply: 0, account_storage_usage: 0 }; this.measure_account_storage_usage(); diff --git a/near-sdk-core/Cargo.toml b/near-sdk-core/Cargo.toml index 23145ca10..96a4770fa 100644 --- a/near-sdk-core/Cargo.toml +++ b/near-sdk-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "near-sdk-core" -version = "3.0.1" +version = "3.1.0" authors = ["Near Inc "] edition = "2018" license = "Apache-2.0" diff --git a/near-sdk-macros/Cargo.toml b/near-sdk-macros/Cargo.toml index 853fa0a92..eacc54b40 100644 --- a/near-sdk-macros/Cargo.toml +++ b/near-sdk-macros/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "near-sdk-macros" -version = "3.0.1" +version = "3.1.0" authors = ["Near Inc "] edition = "2018" license = "Apache-2.0" @@ -15,7 +15,7 @@ Main macro of the library for writing NEAR smart contracts. proc-macro = true [dependencies] -near-sdk-core = { path = "../near-sdk-core", version = "=3.0.1"} +near-sdk-core = { path = "../near-sdk-core", version = "=3.1.0"} proc-macro2 = "1.0" syn = {version = "=1.0.57", features = ["full", "fold", "visit"] } quote = "1.0" diff --git a/near-sdk-macros/src/lib.rs b/near-sdk-macros/src/lib.rs index ec7771c42..0c27b1432 100644 --- a/near-sdk-macros/src/lib.rs +++ b/near-sdk-macros/src/lib.rs @@ -7,7 +7,7 @@ use near_sdk_core::*; use proc_macro2::Span; use quote::quote; use syn::visit::Visit; -use syn::{File, ItemImpl, ItemStruct, ItemTrait}; +use syn::{File, ItemEnum, ItemImpl, ItemStruct, ItemTrait}; #[proc_macro_attribute] pub fn near_bindgen(_attr: TokenStream, item: TokenStream) -> TokenStream { @@ -146,7 +146,7 @@ pub fn metadata(item: TokenStream) -> TokenStream { /// `PanicOnDefault` generates implementation for `Default` trait that panics with the following /// message `The contract is not initialized` when `default()` is called. /// This is a helpful macro in case the contract is required to be initialized with either `init` or -/// `init_once`. +/// `init(ignore_state)`. #[proc_macro_derive(PanicOnDefault)] pub fn derive_no_default(item: TokenStream) -> TokenStream { if let Ok(input) = syn::parse::(item.clone()) { @@ -168,3 +168,26 @@ pub fn derive_no_default(item: TokenStream) -> TokenStream { ) } } + +/// `BorshStorageKey` generates implementation for `BorshIntoStorageKey` trait. +/// It allows the type to be passed as a unique prefix for persistent collections. +/// The type should also implement or derive `BorshSerialize` trait. +#[proc_macro_derive(BorshStorageKey)] +pub fn borsh_storage_key(item: TokenStream) -> TokenStream { + let name = if let Ok(input) = syn::parse::(item.clone()) { + input.ident + } else if let Ok(input) = syn::parse::(item.clone()) { + input.ident + } else { + return TokenStream::from( + syn::Error::new( + Span::call_site(), + "BorshStorageKey can only be used as a derive on enums or structs.", + ) + .to_compile_error(), + ); + }; + TokenStream::from(quote! { + impl near_sdk::BorshIntoStorageKey for #name {} + }) +} diff --git a/near-sdk-sim/Cargo.toml b/near-sdk-sim/Cargo.toml index b2b088735..52982af34 100644 --- a/near-sdk-sim/Cargo.toml +++ b/near-sdk-sim/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "near-sdk-sim" -version = "3.0.1" +version = "3.1.0" authors = ["Near Inc "] edition = "2018" license = "GPL-3.0" @@ -13,7 +13,7 @@ NEAR Simulator & cross-contract testing library [dependencies] -near-sdk = { path = "../near-sdk", version = "=3.0.1" } +near-sdk = { path = "../near-sdk", version = "=3.1.0" } near-crypto = "=0.1.0" near-primitives = "=0.1.0-pre.1" near-vm-logic = "=4.0.0-pre.1" diff --git a/near-sdk-sim/README.md b/near-sdk-sim/README.md index b5c1c49d8..fe4092b3b 100644 --- a/near-sdk-sim/README.md +++ b/near-sdk-sim/README.md @@ -22,7 +22,7 @@ Currently this crate depends on a the GitHub repo of [nearcore](https://github.c ```toml [dev-dependencies] -near-sdk-sim = "=3.0.1-pre.1" +near-sdk-sim = "=3.1.0" ``` @@ -30,7 +30,7 @@ And update `near-sdk` too: ```toml [dependencies] -near-sdk = "=3.0.1-pre.1" +near-sdk = "=3.1.0" ``` @@ -55,8 +55,8 @@ Now in the root of the project (`contract-wrap`), create a new `Cargo.toml`. You ```toml [dev-dependencies] -near-sdk = { git = "https://github.com/near/near-sdk-rs.git", tag="3.0.0" } -near-sdk-sim = { git = "https://github.com/near/near-sdk-rs.git", tag="3.0.0" } +near-sdk = "=3.1.0" +near-sdk-sim = "=3.1.0" contract = { path = "./contract" } [workspace] diff --git a/near-sdk/Cargo.toml b/near-sdk/Cargo.toml index 0480c3ddc..e7525805f 100644 --- a/near-sdk/Cargo.toml +++ b/near-sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "near-sdk" -version = "3.0.1" +version = "3.1.0" authors = ["Near Inc "] edition = "2018" license = "GPL-3.0" @@ -20,12 +20,12 @@ path = "compilation_tests/all.rs" # Provide near_bidgen macros. serde = { version = "1", features = ["derive"] } serde_json = "1" -near-sdk-macros = { path = "../near-sdk-macros", version = "=3.0.1"} +near-sdk-macros = { path = "../near-sdk-macros", version = "=3.1.0"} base64 = "0.13" borsh = "0.8.1" bs58 = "0.4" -near-vm-logic = "3.0.0" -near-primitives-core = "0.1.0" +near-vm-logic = "=4.0.0-pre.1" +near-primitives-core = "=0.4.0" # Export dependencies for contracts wee_alloc = { version = "0.4.5", default-features = false, features = [] } diff --git a/near-sdk/compilation_tests/all.rs b/near-sdk/compilation_tests/all.rs index b9dcbe32d..9e01ee1d6 100644 --- a/near-sdk/compilation_tests/all.rs +++ b/near-sdk/compilation_tests/all.rs @@ -17,4 +17,5 @@ fn compilation_tests() { t.pass("compilation_tests/lifetime_method.rs"); t.pass("compilation_tests/cond_compilation.rs"); t.compile_fail("compilation_tests/payable_view.rs"); + t.pass("compilation_tests/borsh_storage_key.rs"); } diff --git a/near-sdk/compilation_tests/borsh_storage_key.rs b/near-sdk/compilation_tests/borsh_storage_key.rs new file mode 100644 index 000000000..72badcdfd --- /dev/null +++ b/near-sdk/compilation_tests/borsh_storage_key.rs @@ -0,0 +1,37 @@ +//! Testing BorshStorageKey macro. + +use borsh::{BorshDeserialize, BorshSerialize}; +use near_sdk::collections::LookupMap; +use near_sdk::{near_bindgen, BorshStorageKey}; + +#[derive(BorshStorageKey, BorshSerialize)] +struct StorageKeyStruct { + key: String, +} + +#[derive(BorshStorageKey, BorshSerialize)] +enum StorageKeyEnum { + Accounts, + SubAccounts { account_id: String }, +} + +#[near_bindgen] +#[derive(BorshDeserialize, BorshSerialize)] +struct Contract { + map1: LookupMap, + map2: LookupMap, +} + +impl Default for Contract { + fn default() -> Self { + Self { + map1: LookupMap::new(StorageKeyStruct { key: "bla".to_string() }), + map2: LookupMap::new(StorageKeyEnum::Accounts), + } + } +} + +#[near_bindgen] +impl Contract {} + +fn main() {} diff --git a/near-sdk/src/collections/lazy_option.rs b/near-sdk/src/collections/lazy_option.rs index c8017db8b..19177824a 100644 --- a/near-sdk/src/collections/lazy_option.rs +++ b/near-sdk/src/collections/lazy_option.rs @@ -8,6 +8,7 @@ use std::marker::PhantomData; use borsh::{BorshDeserialize, BorshSerialize}; use crate::env; +use crate::IntoStorageKey; const ERR_VALUE_SERIALIZATION: &[u8] = b"Cannot serialize value with Borsh"; const ERR_VALUE_DESERIALIZATION: &[u8] = b"Cannot deserialize value with Borsh"; @@ -69,8 +70,11 @@ where T: BorshSerialize + BorshDeserialize, { /// Create a new lazy option with the given `storage_key` and the initial value. - pub fn new(storage_key: Vec, value: Option<&T>) -> Self { - let mut this = Self { storage_key, el: PhantomData }; + pub fn new(storage_key: S, value: Option<&T>) -> Self + where + S: IntoStorageKey, + { + let mut this = Self { storage_key: storage_key.into_storage_key(), el: PhantomData }; if let Some(value) = value { this.set(&value); } @@ -129,7 +133,7 @@ mod tests { #[test] pub fn test_all() { test_env::setup(); - let mut a = LazyOption::new(b"a".to_vec(), None); + let mut a = LazyOption::new(b"a", None); assert!(a.is_none()); a.set(&42u32); assert!(a.is_some()); @@ -152,8 +156,8 @@ mod tests { #[test] pub fn test_multi() { test_env::setup(); - let mut a = LazyOption::new(b"a".to_vec(), None); - let mut b = LazyOption::new(b"b".to_vec(), None); + let mut a = LazyOption::new(b"a", None); + let mut b = LazyOption::new(b"b", None); assert!(a.is_none()); assert!(b.is_none()); a.set(&42u32); @@ -170,7 +174,7 @@ mod tests { #[test] pub fn test_init_value() { test_env::setup(); - let a = LazyOption::new(b"a".to_vec(), Some(&42u32)); + let a = LazyOption::new(b"a", Some(&42u32)); assert!(a.is_some()); assert_eq!(a.get(), Some(42)); } diff --git a/near-sdk/src/collections/legacy_tree_map.rs b/near-sdk/src/collections/legacy_tree_map.rs index f87166540..8aa4f0d89 100644 --- a/near-sdk/src/collections/legacy_tree_map.rs +++ b/near-sdk/src/collections/legacy_tree_map.rs @@ -6,6 +6,7 @@ use std::ops::Bound; use crate::collections::UnorderedMap; use crate::collections::{append, Vector}; +use crate::IntoStorageKey; /// TreeMap based on AVL-tree /// @@ -46,11 +47,15 @@ where K: Ord + Clone + BorshSerialize + BorshDeserialize, V: BorshSerialize + BorshDeserialize, { - pub fn new(id: Vec) -> Self { + pub fn new(prefix: S) -> Self + where + S: IntoStorageKey, + { + let prefix = prefix.into_storage_key(); Self { root: 0, - val: UnorderedMap::new(append(&id, b'v')), - tree: Vector::new(append(&id, b'n')), + val: UnorderedMap::new(append(&prefix, b'v')), + tree: Vector::new(append(&prefix, b'n')), } } @@ -759,7 +764,7 @@ mod tests { fn test_empty() { test_env::setup(); - let map: LegacyTreeMap = LegacyTreeMap::new(vec![b't']); + let map: LegacyTreeMap = LegacyTreeMap::new(b't'); assert_eq!(map.len(), 0); assert_eq!(height(&map), 0); assert_eq!(map.get(&42), None); @@ -909,7 +914,7 @@ mod tests { let n: u64 = 30; let vec = random(n); - let mut map: LegacyTreeMap = LegacyTreeMap::new(vec![b't']); + let mut map: LegacyTreeMap = LegacyTreeMap::new(b't'); for x in vec.iter().rev() { map.insert(x, &1); } @@ -925,7 +930,7 @@ mod tests { let n: u64 = 30; let vec = random(n); - let mut map: LegacyTreeMap = LegacyTreeMap::new(vec![b't']); + let mut map: LegacyTreeMap = LegacyTreeMap::new(b't'); for x in vec.iter().rev() { map.insert(x, &1); } diff --git a/near-sdk/src/collections/lookup_map.rs b/near-sdk/src/collections/lookup_map.rs index de2ca815f..5ced42bc9 100644 --- a/near-sdk/src/collections/lookup_map.rs +++ b/near-sdk/src/collections/lookup_map.rs @@ -6,7 +6,7 @@ use std::marker::PhantomData; use borsh::{BorshDeserialize, BorshSerialize}; use crate::collections::append_slice; -use crate::env; +use crate::{env, IntoStorageKey}; const ERR_KEY_SERIALIZATION: &[u8] = b"Cannot serialize key with Borsh"; const ERR_VALUE_DESERIALIZATION: &[u8] = b"Cannot deserialize value with Borsh"; @@ -22,8 +22,11 @@ pub struct LookupMap { impl LookupMap { /// Create a new map. Use `key_prefix` as a unique prefix for keys. - pub fn new(key_prefix: Vec) -> Self { - Self { key_prefix, el: PhantomData } + pub fn new(key_prefix: S) -> Self + where + S: IntoStorageKey, + { + Self { key_prefix: key_prefix.into_storage_key(), el: PhantomData } } fn raw_key_to_storage_key(&self, raw_key: &[u8]) -> Vec { @@ -138,7 +141,7 @@ mod tests { #[test] pub fn test_insert() { test_env::setup(); - let mut map = LookupMap::new(b"m".to_vec()); + let mut map = LookupMap::new(b"m"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(0); for _ in 0..500 { let key = rng.gen::(); @@ -150,7 +153,7 @@ mod tests { #[test] pub fn test_insert_has_key() { test_env::setup(); - let mut map = LookupMap::new(b"m".to_vec()); + let mut map = LookupMap::new(b"m"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(0); let mut key_to_value = HashMap::new(); for _ in 0..100 { @@ -173,7 +176,7 @@ mod tests { #[test] pub fn test_insert_remove() { test_env::setup(); - let mut map = LookupMap::new(b"m".to_vec()); + let mut map = LookupMap::new(b"m"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(1); let mut keys = vec![]; let mut key_to_value = HashMap::new(); @@ -194,7 +197,7 @@ mod tests { #[test] pub fn test_remove_last_reinsert() { test_env::setup(); - let mut map = LookupMap::new(b"m".to_vec()); + let mut map = LookupMap::new(b"m"); let key1 = 1u64; let value1 = 2u64; map.insert(&key1, &value1); @@ -212,7 +215,7 @@ mod tests { #[test] pub fn test_insert_override_remove() { test_env::setup(); - let mut map = LookupMap::new(b"m".to_vec()); + let mut map = LookupMap::new(b"m"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(2); let mut keys = vec![]; let mut key_to_value = HashMap::new(); @@ -240,7 +243,7 @@ mod tests { #[test] pub fn test_get_non_existent() { test_env::setup(); - let mut map = LookupMap::new(b"m".to_vec()); + let mut map = LookupMap::new(b"m"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(3); let mut key_to_value = HashMap::new(); for _ in 0..500 { @@ -258,7 +261,7 @@ mod tests { #[test] pub fn test_extend() { test_env::setup(); - let mut map = LookupMap::new(b"m".to_vec()); + let mut map = LookupMap::new(b"m"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(4); let mut key_to_value = HashMap::new(); for _ in 0..100 { diff --git a/near-sdk/src/collections/lookup_set.rs b/near-sdk/src/collections/lookup_set.rs index 144c01183..84fe27728 100644 --- a/near-sdk/src/collections/lookup_set.rs +++ b/near-sdk/src/collections/lookup_set.rs @@ -6,7 +6,7 @@ use std::marker::PhantomData; use borsh::{BorshDeserialize, BorshSerialize}; use crate::collections::append_slice; -use crate::env; +use crate::{env, IntoStorageKey}; const ERR_ELEMENT_SERIALIZATION: &[u8] = b"Cannot serialize element with Borsh"; @@ -20,8 +20,11 @@ pub struct LookupSet { impl LookupSet { /// Create a new map. Use `element_prefix` as a unique prefix for trie keys. - pub fn new(element_prefix: Vec) -> Self { - Self { element_prefix, el: PhantomData } + pub fn new(element_prefix: S) -> Self + where + S: IntoStorageKey, + { + Self { element_prefix: element_prefix.into_storage_key(), el: PhantomData } } fn raw_element_to_storage_key(&self, element_raw: &[u8]) -> Vec { @@ -97,7 +100,7 @@ mod tests { #[test] pub fn test_insert() { test_env::setup(); - let mut set = LookupSet::new(b"s".to_vec()); + let mut set = LookupSet::new(b"s"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(0); for _ in 0..500 { let key = rng.gen::(); @@ -108,7 +111,7 @@ mod tests { #[test] pub fn test_insert_remove() { test_env::setup(); - let mut set = LookupSet::new(b"s".to_vec()); + let mut set = LookupSet::new(b"s"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(1); let mut keys = vec![]; for _ in 0..100 { @@ -125,7 +128,7 @@ mod tests { #[test] pub fn test_remove_last_reinsert() { test_env::setup(); - let mut set = LookupSet::new(b"s".to_vec()); + let mut set = LookupSet::new(b"s"); let key1 = 1u64; set.insert(&key1); let key2 = 2u64; @@ -141,7 +144,7 @@ mod tests { #[test] pub fn test_insert_override_remove() { test_env::setup(); - let mut set = LookupSet::new(b"s".to_vec()); + let mut set = LookupSet::new(b"s"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(2); let mut keys = vec![]; for _ in 0..100 { @@ -162,7 +165,7 @@ mod tests { #[test] pub fn test_contains_non_existent() { test_env::setup(); - let mut set = LookupSet::new(b"s".to_vec()); + let mut set = LookupSet::new(b"s"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(3); let mut set_tmp = HashSet::new(); for _ in 0..500 { @@ -179,7 +182,7 @@ mod tests { #[test] pub fn test_extend() { test_env::setup(); - let mut set = LookupSet::new(b"s".to_vec()); + let mut set = LookupSet::new(b"s"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(4); let mut keys = HashSet::new(); for _ in 0..100 { diff --git a/near-sdk/src/collections/tree_map.rs b/near-sdk/src/collections/tree_map.rs index 9f9e0eeab..db9e080df 100644 --- a/near-sdk/src/collections/tree_map.rs +++ b/near-sdk/src/collections/tree_map.rs @@ -3,6 +3,7 @@ use std::ops::Bound; use crate::collections::LookupMap; use crate::collections::{append, Vector}; +use crate::IntoStorageKey; /// TreeMap based on AVL-tree /// @@ -43,11 +44,15 @@ where K: Ord + Clone + BorshSerialize + BorshDeserialize, V: BorshSerialize + BorshDeserialize, { - pub fn new(id: Vec) -> Self { + pub fn new(prefix: S) -> Self + where + S: IntoStorageKey, + { + let prefix = prefix.into_storage_key(); Self { root: 0, - val: LookupMap::new(append(&id, b'v')), - tree: Vector::new(append(&id, b'n')), + val: LookupMap::new(append(&prefix, b'v')), + tree: Vector::new(append(&prefix, b'n')), } } @@ -757,7 +762,7 @@ mod tests { fn test_empty() { test_env::setup(); - let map: TreeMap = TreeMap::new(vec![b't']); + let map: TreeMap = TreeMap::new(b't'); assert_eq!(map.len(), 0); assert_eq!(height(&map), 0); assert_eq!(map.get(&42), None); @@ -907,7 +912,7 @@ mod tests { let n: u64 = 30; let vec = random(n); - let mut map: TreeMap = TreeMap::new(vec![b't']); + let mut map: TreeMap = TreeMap::new(b't'); for x in vec.iter().rev() { map.insert(x, &1); } @@ -923,7 +928,7 @@ mod tests { let n: u64 = 30; let vec = random(n); - let mut map: TreeMap = TreeMap::new(vec![b't']); + let mut map: TreeMap = TreeMap::new(b't'); for x in vec.iter().rev() { map.insert(x, &1); } diff --git a/near-sdk/src/collections/unordered_map.rs b/near-sdk/src/collections/unordered_map.rs index 2133de31a..a16462c82 100644 --- a/near-sdk/src/collections/unordered_map.rs +++ b/near-sdk/src/collections/unordered_map.rs @@ -1,7 +1,7 @@ //! A map implemented on a trie. Unlike `std::collections::HashMap` the keys in this map are not //! hashed but are instead serialized. use crate::collections::{append, append_slice, Vector}; -use crate::env; +use crate::{env, IntoStorageKey}; use borsh::{BorshDeserialize, BorshSerialize}; use std::mem::size_of; @@ -41,11 +41,15 @@ impl UnorderedMap { } } - /// Create new map with zero elements. Use `id` as a unique identifier. - pub fn new(id: Vec) -> Self { - let key_index_prefix = append(&id, b'i'); - let index_key_id = append(&id, b'k'); - let index_value_id = append(&id, b'v'); + /// Create new map with zero elements. Use `prefix` as a unique identifier. + pub fn new(prefix: S) -> Self + where + S: IntoStorageKey, + { + let prefix = prefix.into_storage_key(); + let key_index_prefix = append(&prefix, b'i'); + let index_key_id = append(&prefix, b'k'); + let index_value_id = append(&prefix, b'v'); Self { key_index_prefix, @@ -249,7 +253,7 @@ mod tests { #[test] pub fn test_insert() { test_env::setup(); - let mut map = UnorderedMap::new(b"m".to_vec()); + let mut map = UnorderedMap::new(b"m"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(0); for _ in 0..500 { let key = rng.gen::(); @@ -261,7 +265,7 @@ mod tests { #[test] pub fn test_insert_remove() { test_env::setup(); - let mut map = UnorderedMap::new(b"m".to_vec()); + let mut map = UnorderedMap::new(b"m"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(1); let mut keys = vec![]; let mut key_to_value = HashMap::new(); @@ -282,7 +286,7 @@ mod tests { #[test] pub fn test_remove_last_reinsert() { test_env::setup(); - let mut map = UnorderedMap::new(b"m".to_vec()); + let mut map = UnorderedMap::new(b"m"); let key1 = 1u64; let value1 = 2u64; map.insert(&key1, &value1); @@ -300,7 +304,7 @@ mod tests { #[test] pub fn test_insert_override_remove() { test_env::setup(); - let mut map = UnorderedMap::new(b"m".to_vec()); + let mut map = UnorderedMap::new(b"m"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(2); let mut keys = vec![]; let mut key_to_value = HashMap::new(); @@ -328,7 +332,7 @@ mod tests { #[test] pub fn test_get_non_existent() { test_env::setup(); - let mut map = UnorderedMap::new(b"m".to_vec()); + let mut map = UnorderedMap::new(b"m"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(3); let mut key_to_value = HashMap::new(); for _ in 0..500 { @@ -346,7 +350,7 @@ mod tests { #[test] pub fn test_to_vec() { test_env::setup(); - let mut map = UnorderedMap::new(b"m".to_vec()); + let mut map = UnorderedMap::new(b"m"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(4); let mut key_to_value = HashMap::new(); for _ in 0..400 { @@ -362,7 +366,7 @@ mod tests { #[test] pub fn test_clear() { test_env::setup(); - let mut map = UnorderedMap::new(b"m".to_vec()); + let mut map = UnorderedMap::new(b"m"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(5); for _ in 0..10 { for _ in 0..=(rng.gen::() % 20 + 1) { @@ -379,7 +383,7 @@ mod tests { #[test] pub fn test_keys_values() { test_env::setup(); - let mut map = UnorderedMap::new(b"m".to_vec()); + let mut map = UnorderedMap::new(b"m"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(4); let mut key_to_value = HashMap::new(); for _ in 0..400 { @@ -402,7 +406,7 @@ mod tests { #[test] pub fn test_iter() { test_env::setup(); - let mut map = UnorderedMap::new(b"m".to_vec()); + let mut map = UnorderedMap::new(b"m"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(4); let mut key_to_value = HashMap::new(); for _ in 0..400 { @@ -418,7 +422,7 @@ mod tests { #[test] pub fn test_extend() { test_env::setup(); - let mut map = UnorderedMap::new(b"m".to_vec()); + let mut map = UnorderedMap::new(b"m"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(4); let mut key_to_value = HashMap::new(); for _ in 0..100 { diff --git a/near-sdk/src/collections/unordered_set.rs b/near-sdk/src/collections/unordered_set.rs index eb5bcbd2e..122cc2001 100644 --- a/near-sdk/src/collections/unordered_set.rs +++ b/near-sdk/src/collections/unordered_set.rs @@ -1,7 +1,7 @@ //! A set implemented on a trie. Unlike `std::collections::HashSet` the elements in this set are not //! hashed but are instead serialized. use crate::collections::{append, append_slice, Vector}; -use crate::env; +use crate::{env, IntoStorageKey}; use borsh::{BorshDeserialize, BorshSerialize}; use std::mem::size_of; @@ -27,9 +27,13 @@ impl UnorderedSet { } /// Create new map with zero elements. Use `id` as a unique identifier. - pub fn new(id: Vec) -> Self { - let element_index_prefix = append(&id, b'i'); - let elements_prefix = append(&id, b'e'); + pub fn new(prefix: S) -> Self + where + S: IntoStorageKey, + { + let prefix = prefix.into_storage_key(); + let element_index_prefix = append(&prefix, b'i'); + let elements_prefix = append(&prefix, b'e'); Self { element_index_prefix, elements: Vector::new(elements_prefix) } } @@ -179,7 +183,7 @@ mod tests { #[test] pub fn test_insert() { test_env::setup(); - let mut set = UnorderedSet::new(b"s".to_vec()); + let mut set = UnorderedSet::new(b"s"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(0); for _ in 0..500 { let key = rng.gen::(); @@ -190,7 +194,7 @@ mod tests { #[test] pub fn test_insert_remove() { test_env::setup(); - let mut set = UnorderedSet::new(b"s".to_vec()); + let mut set = UnorderedSet::new(b"s"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(1); let mut keys = vec![]; for _ in 0..100 { @@ -207,7 +211,7 @@ mod tests { #[test] pub fn test_remove_last_reinsert() { test_env::setup(); - let mut set = UnorderedSet::new(b"s".to_vec()); + let mut set = UnorderedSet::new(b"s"); let key1 = 1u64; set.insert(&key1); let key2 = 2u64; @@ -223,7 +227,7 @@ mod tests { #[test] pub fn test_insert_override_remove() { test_env::setup(); - let mut set = UnorderedSet::new(b"s".to_vec()); + let mut set = UnorderedSet::new(b"s"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(2); let mut keys = vec![]; for _ in 0..100 { @@ -244,7 +248,7 @@ mod tests { #[test] pub fn test_contains_non_existent() { test_env::setup(); - let mut set = UnorderedSet::new(b"s".to_vec()); + let mut set = UnorderedSet::new(b"s"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(3); let mut set_tmp = HashSet::new(); for _ in 0..500 { @@ -261,7 +265,7 @@ mod tests { #[test] pub fn test_to_vec() { test_env::setup(); - let mut set = UnorderedSet::new(b"s".to_vec()); + let mut set = UnorderedSet::new(b"s"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(4); let mut keys = HashSet::new(); for _ in 0..500 { @@ -276,7 +280,7 @@ mod tests { #[test] pub fn test_clear() { test_env::setup(); - let mut set = UnorderedSet::new(b"s".to_vec()); + let mut set = UnorderedSet::new(b"s"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(5); for _ in 0..10 { for _ in 0..=(rng.gen::() % 20 + 1) { @@ -292,7 +296,7 @@ mod tests { #[test] pub fn test_iter() { test_env::setup(); - let mut set = UnorderedSet::new(b"s".to_vec()); + let mut set = UnorderedSet::new(b"s"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(4); let mut keys = HashSet::new(); for _ in 0..500 { @@ -307,7 +311,7 @@ mod tests { #[test] pub fn test_extend() { test_env::setup(); - let mut set = UnorderedSet::new(b"s".to_vec()); + let mut set = UnorderedSet::new(b"s"); let mut rng = rand_xorshift::XorShiftRng::seed_from_u64(4); let mut keys = HashSet::new(); for _ in 0..100 { diff --git a/near-sdk/src/collections/vector.rs b/near-sdk/src/collections/vector.rs index 2e64b44b2..717e46fa4 100644 --- a/near-sdk/src/collections/vector.rs +++ b/near-sdk/src/collections/vector.rs @@ -5,7 +5,7 @@ use std::marker::PhantomData; use borsh::{BorshDeserialize, BorshSerialize}; use crate::collections::append_slice; -use crate::env; +use crate::{env, IntoStorageKey}; const ERR_INCONSISTENT_STATE: &[u8] = b"The collection is an inconsistent state. Did previous smart contract execution terminate unexpectedly?"; const ERR_ELEMENT_DESERIALIZATION: &[u8] = b"Cannot deserialize element"; @@ -35,8 +35,11 @@ impl Vector { } /// Create new vector with zero elements. Use `id` as a unique identifier on the trie. - pub fn new(id: Vec) -> Self { - Self { len: 0, prefix: id, el: PhantomData } + pub fn new(prefix: S) -> Self + where + S: IntoStorageKey, + { + Self { len: 0, prefix: prefix.into_storage_key(), el: PhantomData } } fn index_to_lookup_key(&self, index: u64) -> Vec { diff --git a/near-sdk/src/lib.rs b/near-sdk/src/lib.rs index 6d93cca7a..3d7237b86 100644 --- a/near-sdk/src/lib.rs +++ b/near-sdk/src/lib.rs @@ -3,7 +3,7 @@ extern crate quickcheck; pub use near_sdk_macros::{ callback, callback_vec, ext_contract, init, metadata, near_bindgen, result_serializer, - serializer, PanicOnDefault, + serializer, BorshStorageKey, PanicOnDefault, }; pub mod collections; @@ -28,6 +28,7 @@ pub use near_vm_logic::VMConfig; pub use near_vm_logic::VMContext; pub mod utils; +pub use crate::utils::storage_key_impl::*; pub use crate::utils::*; pub use environment::blockchain_interface::BlockchainInterface; diff --git a/near-sdk/src/utils/mod.rs b/near-sdk/src/utils/mod.rs index b91a19d1b..8a47b1059 100644 --- a/near-sdk/src/utils/mod.rs +++ b/near-sdk/src/utils/mod.rs @@ -1,3 +1,5 @@ +pub(crate) mod storage_key_impl; + use crate::{env, AccountId, PromiseResult}; #[macro_export] diff --git a/near-sdk/src/utils/storage_key_impl.rs b/near-sdk/src/utils/storage_key_impl.rs new file mode 100644 index 000000000..8e2d4fd2c --- /dev/null +++ b/near-sdk/src/utils/storage_key_impl.rs @@ -0,0 +1,63 @@ +use borsh::BorshSerialize; + +/// Converts Self into a `Vec` that is used for a storage key. +pub trait IntoStorageKey { + fn into_storage_key(self) -> Vec; +} + +impl IntoStorageKey for Vec { + #[inline] + fn into_storage_key(self) -> Vec { + self + } +} + +impl<'a> IntoStorageKey for &'a [u8] { + #[inline] + fn into_storage_key(self) -> Vec { + self.to_vec() + } +} + +impl<'a> IntoStorageKey for &'a [u8; 1] { + #[inline] + fn into_storage_key(self) -> Vec { + self.to_vec() + } +} + +impl IntoStorageKey for u8 { + #[inline] + fn into_storage_key(self) -> Vec { + vec![self] + } +} + +/// Converts a Borsh serializable object into a `Vec` that is used for a storage key. +/// +/// ``` +/// use near_sdk::borsh::BorshSerialize; +/// use near_sdk::BorshIntoStorageKey; +/// use near_sdk::collections::LookupMap; +/// +/// #[derive(BorshSerialize)] +/// enum StorageKey { +/// FungibleToken, +/// Metadata { sub_key: String }, +/// } +/// +/// impl BorshIntoStorageKey for StorageKey {} +/// +/// let lookup_map_1: LookupMap = LookupMap::new(StorageKey::Metadata { sub_key: String::from("yo") }); +/// let lookup_map_2: LookupMap = LookupMap::new(StorageKey::FungibleToken); +/// ``` +pub trait BorshIntoStorageKey: BorshSerialize {} + +impl IntoStorageKey for T +where + T: BorshIntoStorageKey, +{ + fn into_storage_key(self) -> Vec { + self.try_to_vec().unwrap() + } +}