Skip to content

Commit

Permalink
do not byte swap storage values
Browse files Browse the repository at this point in the history
Signed-off-by: xermicus <[email protected]>
  • Loading branch information
xermicus committed Jun 3, 2024
1 parent 5ff17da commit 354b1c8
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 22 deletions.
4 changes: 2 additions & 2 deletions crates/integration/codesize.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
"Baseline": 934,
"Computation": 4360,
"DivisionArithmetics": 39448,
"ERC20": 52333,
"ERC20": 46512,
"Events": 1749,
"FibonacciIterative": 2973,
"Flipper": 3368,
"Flipper": 3549,
"SHA1": 32709
}
19 changes: 12 additions & 7 deletions crates/integration/src/mock_runtime.rs
Original file line number Diff line number Diff line change
Expand Up @@ -456,10 +456,12 @@ fn link_host_functions(engine: &Engine) -> Linker<Transaction> {
let key = caller.read_memory_into_vec(key_ptr, key_len)?;
let value = caller.read_memory_into_vec(value_ptr, value_len)?;

transaction.top_account_mut().storage.insert(
U256::from_be_bytes::<32>(key.try_into().unwrap()),
U256::from_be_bytes::<32>(value.try_into().unwrap()),
);
let key = U256::from_le_bytes::<32>(key.try_into().unwrap());
let value = U256::from_le_bytes::<32>(value.try_into().unwrap());

log::info!("set storage {key} = {value}");

transaction.top_account_mut().storage.insert(key, value);

Ok(0)
},
Expand All @@ -485,14 +487,17 @@ fn link_host_functions(engine: &Engine) -> Linker<Transaction> {
"spurious output buffer size: {out_len}"
);

let key = U256::from_le_bytes::<32>(key.try_into().unwrap());
let value = transaction
.top_account_mut()
.storage
.get(&U256::from_be_bytes::<32>(key.try_into().unwrap()))
.map(U256::to_be_bytes::<32>)
.get(&key)
.cloned()
.unwrap_or_default();

caller.write_memory(out_ptr, &value[..])?;
log::info!("get storage {key} = {value}");

caller.write_memory(out_ptr, &value.to_le_bytes::<32>())?;
caller.write_memory(out_len_ptr, &32u32.to_le_bytes())?;

Ok(0)
Expand Down
23 changes: 10 additions & 13 deletions crates/llvm-context/src/polkavm/context/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -689,8 +689,7 @@ where
self.word_type(),
"storage_ptr_to_int",
)?;
let storage_key_pointer =
self.build_alloca(storage_key_value.get_type(), "storage_key");
let storage_key_pointer = self.build_alloca(self.word_type(), "storage_key");
let storage_key_pointer_casted = self.builder().build_ptr_to_int(
storage_key_pointer.value,
self.xlen_type(),
Expand All @@ -717,7 +716,6 @@ where
// If a key doesn't exist the "zero" value is returned.

self.build_load(storage_value_pointer, "storage_value_load")
.and_then(|value| self.build_byte_swap(value))
}
AddressSpace::Code | AddressSpace::HeapAuxiliary => todo!(),
AddressSpace::Generic => Ok(self.build_byte_swap(self.build_load(
Expand Down Expand Up @@ -776,25 +774,24 @@ where
}
AddressSpace::TransientStorage => todo!(),
AddressSpace::Storage => {
assert_eq!(
value.as_basic_value_enum().get_type(),
self.word_type().as_basic_type_enum()
);

let storage_key_value = self.builder().build_ptr_to_int(
pointer.value,
self.word_type(),
"storage_ptr_to_int",
)?;
let storage_key_pointer =
self.build_alloca(storage_key_value.get_type(), "storage_key");

let storage_value_value = self
.build_byte_swap(value.as_basic_value_enum())?
.into_int_value();
let storage_value_pointer =
self.build_alloca(storage_value_value.get_type(), "storage_value");

let storage_key_pointer = self.build_alloca(self.word_type(), "storage_key");
let storage_key_pointer_casted = self.builder().build_ptr_to_int(
storage_key_pointer.value,
self.xlen_type(),
"storage_key_pointer_casted",
)?;

let storage_value_pointer = self.build_alloca(self.word_type(), "storage_value");
let storage_value_pointer_casted = self.builder().build_ptr_to_int(
storage_value_pointer.value,
self.xlen_type(),
Expand All @@ -804,7 +801,7 @@ where
self.builder()
.build_store(storage_key_pointer.value, storage_key_value)?;
self.builder()
.build_store(storage_value_pointer.value, storage_value_value)?;
.build_store(storage_value_pointer.value, value)?;

self.build_runtime_call(
runtime_api::imports::SET_STORAGE,
Expand Down

0 comments on commit 354b1c8

Please sign in to comment.