diff --git a/contracts/feature-tests/basic-features/scenarios/storage_mapper_get_at_address.scen.json b/contracts/feature-tests/basic-features/scenarios/storage_mapper_get_at_address.scen.json index 3076c1e82b..0196df08ee 100644 --- a/contracts/feature-tests/basic-features/scenarios/storage_mapper_get_at_address.scen.json +++ b/contracts/feature-tests/basic-features/scenarios/storage_mapper_get_at_address.scen.json @@ -153,6 +153,29 @@ "refund": "*" } }, + { + "step": "scCall", + "id": "len at address", + "tx": { + "from": "address:an_account", + "to": "sc:caller", + "function": "len_at_addresses", + "arguments": [ + "sc:to-be-called" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, { "step": "scCall", "id": "next at address", @@ -332,7 +355,9 @@ "from": "address:an_account", "to": "sc:caller", "function": "contains_unordered_at_address", - "arguments": ["5"], + "arguments": [ + "5" + ], "gasLimit": "50,000,000", "gasPrice": "0" }, diff --git a/contracts/feature-tests/basic-features/src/storage_mapper_get_at_address.rs b/contracts/feature-tests/basic-features/src/storage_mapper_get_at_address.rs index a3eff89cdb..082e1f0ec7 100644 --- a/contracts/feature-tests/basic-features/src/storage_mapper_get_at_address.rs +++ b/contracts/feature-tests/basic-features/src/storage_mapper_get_at_address.rs @@ -18,6 +18,13 @@ pub trait StorageMapperGetAtAddress { self.set_mapper_from_address(address).is_empty() } + #[endpoint] + fn len_at_addresses(&self, address: ManagedAddress) -> usize { + let contract_address = self.contract_address().get(); + self.set_mapper_from_address_with_keys(contract_address, address) + .len() + } + #[endpoint] fn contains_at_address(&self, item: u32) -> bool { let address = self.contract_address().get(); @@ -90,6 +97,13 @@ pub trait StorageMapperGetAtAddress { #[storage_mapper_from_address("set_mapper")] fn set_mapper_from_address(&self, address: ManagedAddress) -> SetMapper; + #[storage_mapper_from_address("set_mapper")] + fn set_mapper_from_address_with_keys( + &self, + address1: ManagedAddress, + address2: ManagedAddress, + ) -> SetMapper; + #[storage_mapper("map_mapper")] fn map_mapper(&self) -> MapMapper; diff --git a/contracts/feature-tests/basic-features/wasm/src/lib.rs b/contracts/feature-tests/basic-features/wasm/src/lib.rs index 6dcb5c59be..3c600ab91e 100644 --- a/contracts/feature-tests/basic-features/wasm/src/lib.rs +++ b/contracts/feature-tests/basic-features/wasm/src/lib.rs @@ -5,9 +5,9 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 389 +// Endpoints: 390 // Async Callback: 1 -// Total number of exported functions: 391 +// Total number of exported functions: 392 #![no_std] @@ -394,6 +394,7 @@ multiversx_sc_wasm_adapter::endpoints! { non_zero_usize_macro => non_zero_usize_macro set_contract_address => set_contract_address is_empty_at_address => is_empty_at_address + len_at_addresses => len_at_addresses contains_at_address => contains_at_address len_at_address => len_at_address next_at_address => next_at_address