diff --git a/core/extensions/impl/storage_extension.cpp b/core/extensions/impl/storage_extension.cpp index 5fa42c19fd..45ed90b29c 100644 --- a/core/extensions/impl/storage_extension.cpp +++ b/core/extensions/impl/storage_extension.cpp @@ -126,17 +126,16 @@ namespace kagome::extensions { runtime::WasmSpan key_pos, runtime::WasmSpan value_out, runtime::WasmOffset offset) { - static constexpr runtime::WasmSpan kErrorSpan = -1; - auto [key_ptr, key_size] = runtime::WasmResult(key_pos); auto [value_ptr, value_size] = runtime::WasmResult(value_out); auto key = memory_->loadN(key_ptr, key_size); + boost::optional res{boost::none}; if (auto data = get(key, offset, value_size)) { memory_->storeBuffer(value_ptr, data.value()); - return runtime::WasmResult(0, data.value().size()).combine(); + res = value_size; } - return kErrorSpan; + return memory_->storeBuffer(scale::encode(res).value()); } void StorageExtension::ext_set_storage(const runtime::WasmPointer key_data, diff --git a/test/core/extensions/storage_extension_test.cpp b/test/core/extensions/storage_extension_test.cpp index 4c45f305e7..480b1cd4b0 100644 --- a/test/core/extensions/storage_extension_test.cpp +++ b/test/core/extensions/storage_extension_test.cpp @@ -437,6 +437,8 @@ TEST_P(OutcomeParameterizedTest, StorageReadTest) { WasmResult value(42, 41); Buffer value_data(8, 'v'); WasmOffset offset = 0; + EXPECT_OUTCOME_TRUE(encoded_opt_val_size, kagome::scale::encode(boost::make_optional(value.length))); + WasmSpan res_wasm_span = 1337; // expect key loaded, than data stored EXPECT_CALL(*memory_, loadN(key.address, key.length)) @@ -446,9 +448,13 @@ TEST_P(OutcomeParameterizedTest, StorageReadTest) { EXPECT_CALL(*trie_batch_, get(key_data)).WillOnce(Return(value_data)); EXPECT_CALL(*memory_, storeBuffer(value.address, gsl::span(value_data))); + EXPECT_CALL(*memory_, + storeBuffer(gsl::span(encoded_opt_val_size))) + .WillOnce(Return(res_wasm_span)); - storage_extension_->ext_storage_read_version_1( - key.combine(), value.combine(), offset); + ASSERT_EQ(res_wasm_span, + storage_extension_->ext_storage_read_version_1( + key.combine(), value.combine(), offset)); } INSTANTIATE_TEST_CASE_P(Instance,