Skip to content
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

Base Key on [u8; 32] #971

Merged
merged 14 commits into from
Oct 21, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .config/cargo_spellcheck.dic
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
100
110

ABI
AST
Expand Down Expand Up @@ -99,5 +99,6 @@ vector/S
implementer/S
deduplicated
wildcard/S
natively
payability
unpayable
11 changes: 4 additions & 7 deletions crates/env/src/engine/experimental_off_chain/impls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -189,18 +189,15 @@ impl EnvBackend for EnvInstance {
V: scale::Encode,
{
let v = scale::Encode::encode(value);
self.engine.set_storage(key.as_bytes(), &v[..]);
self.engine.set_storage(key.as_ref(), &v[..]);
}

fn get_contract_storage<R>(&mut self, key: &Key) -> Result<Option<R>>
where
R: scale::Decode,
{
let mut output: [u8; 9600] = [0; 9600];
match self
.engine
.get_storage(key.as_bytes(), &mut &mut output[..])
{
match self.engine.get_storage(key.as_ref(), &mut &mut output[..]) {
Ok(_) => (),
Err(ext::Error::KeyNotFound) => return Ok(None),
Err(_) => panic!("encountered unexpected error"),
Expand All @@ -210,7 +207,7 @@ impl EnvBackend for EnvInstance {
}

fn clear_contract_storage(&mut self, key: &Key) {
self.engine.clear_storage(key.as_bytes())
self.engine.clear_storage(key.as_ref())
}

fn decode_input<T>(&mut self) -> Result<T>
Expand Down Expand Up @@ -445,7 +442,7 @@ impl TypedEnvBackend for EnvInstance {
let enc_rent_allowance = &scale::Encode::encode(&rent_allowance)[..];

let filtered: Vec<&[u8]> =
filtered_keys.iter().map(|k| &k.as_bytes()[..]).collect();
filtered_keys.iter().map(|k| &k.as_ref()[..]).collect();
self.engine.restore_to(
enc_account_id,
enc_code_hash,
Expand Down
18 changes: 12 additions & 6 deletions crates/env/src/engine/off_chain/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,19 @@ fn store_load_clear() -> Result<()> {
})
}

fn add_key(key: &Key, offset: u64) -> Key {
let mut result = *key;
result += offset;
result
}

#[test]
fn key_add() -> Result<()> {
crate::test::run_test::<crate::DefaultEnvironment, _>(|_| {
let key00 = Key::from([0x0; 32]);
let key05 = key00 + 05_u64; // -> 5
let key10 = key00 + 10_u64; // -> 10 | same as key55
let key55 = key05 + 05_u64; // -> 5 + 5 = 10 | same as key10
let key05 = add_key(&key00, 5); // -> 5
let key10 = add_key(&key00, 10); // -> 10 | same as key55
let key55 = add_key(&key05, 5); // -> 5 + 5 = 10 | same as key10
crate::set_contract_storage(&key55, &42);
assert_eq!(crate::get_contract_storage::<i32>(&key10), Ok(Some(42)));
crate::set_contract_storage(&key10, &1337);
Expand All @@ -51,9 +57,9 @@ fn key_add_sub() -> Result<()> {
crate::test::run_test::<crate::DefaultEnvironment, _>(|_| {
// given
let key0a = Key::from([0x0; 32]);
let key1a = key0a + 1337_u64;
let key2a = key0a + 42_u64;
let key3a = key0a + 52_u64;
let key1a = add_key(&key0a, 1337);
let key2a = add_key(&key0a, 42);
let key3a = add_key(&key0a, 52);

// when
crate::set_contract_storage(&key0a, &1);
Expand Down
6 changes: 3 additions & 3 deletions crates/env/src/engine/on_chain/impls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -220,15 +220,15 @@ impl EnvBackend for EnvInstance {
V: scale::Encode,
{
let buffer = self.scoped_buffer().take_encoded(value);
ext::set_storage(key.as_bytes(), &buffer[..]);
ext::set_storage(key.as_ref(), &buffer[..]);
}

fn get_contract_storage<R>(&mut self, key: &Key) -> Result<Option<R>>
where
R: scale::Decode,
{
let output = &mut self.scoped_buffer().take_rest();
match ext::get_storage(key.as_bytes(), output) {
match ext::get_storage(key.as_ref(), output) {
Ok(_) => (),
Err(ExtError::KeyNotFound) => return Ok(None),
Err(_) => panic!("encountered unexpected error"),
Expand All @@ -238,7 +238,7 @@ impl EnvBackend for EnvInstance {
}

fn clear_contract_storage(&mut self, key: &Key) {
ext::clear_storage(key.as_bytes())
ext::clear_storage(key.as_ref())
}

fn decode_input<T>(&mut self) -> Result<T>
Expand Down
8 changes: 2 additions & 6 deletions crates/metadata/src/layout/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,17 +99,13 @@ impl<'de> serde::Deserialize<'de> for LayoutKey {

impl<'a> From<&'a Key> for LayoutKey {
fn from(key: &'a Key) -> Self {
Self {
key: key.to_bytes(),
}
Self { key: *key.as_ref() }
}
}

impl From<Key> for LayoutKey {
fn from(key: Key) -> Self {
Self {
key: key.to_bytes(),
}
Self { key: *key.as_ref() }
}
}

Expand Down
1 change: 1 addition & 0 deletions crates/primitives/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ include = ["/Cargo.toml", "src/**/*.rs", "/README.md", "/LICENSE"]
ink_prelude = { version = "3.0.0-rc6", path = "../prelude/", default-features = false }
scale = { package = "parity-scale-codec", version = "2", default-features = false, features = ["derive", "full"] }
scale-info = { version = "1.0", default-features = false, features = ["derive"], optional = true }
cfg-if = "1"

[dev-dependencies]
criterion = "0.3.1"
Expand Down
Loading