From 8d0715a6c090e0fd08d6d65274608e674bfb5b2c Mon Sep 17 00:00:00 2001 From: BiancaIalangi Date: Mon, 13 May 2024 12:36:11 +0300 Subject: [PATCH 1/6] implement from conversion for MultiValueN --- .../feature-tests/scenario-tester/src/lib.rs | 11 ++++ .../src/scenario_tester_proxy.rs | 28 +++++++++++ .../scenario-tester/tests/st_blackbox_test.rs | 17 +++++++ .../scenario-tester/wasm/src/lib.rs | 6 ++- .../base/src/abi/type_abi_impl_codec_multi.rs | 50 +++++++++---------- 5 files changed, 85 insertions(+), 27 deletions(-) diff --git a/contracts/feature-tests/scenario-tester/src/lib.rs b/contracts/feature-tests/scenario-tester/src/lib.rs index 015b3e82c2..5b2365a741 100644 --- a/contracts/feature-tests/scenario-tester/src/lib.rs +++ b/contracts/feature-tests/scenario-tester/src/lib.rs @@ -27,4 +27,15 @@ pub trait ScenarioTester { fn add(&self, value: BigUint) { self.sum().update(|sum| *sum += value); } + + /// Tests "from" conversion for MultiValueN parameters + #[endpoint] + fn multi_param(&self, _value: MultiValue2) {} + + /// Tests "from" conversion for MultiValueN return function + #[endpoint] + fn multi_return(&self, value: BigUint) -> MultiValue2 { + let value1 = value.clone().add(1u32); + (value, value1).into() + } } diff --git a/contracts/feature-tests/scenario-tester/src/scenario_tester_proxy.rs b/contracts/feature-tests/scenario-tester/src/scenario_tester_proxy.rs index 3de83d499d..66976893c2 100644 --- a/contracts/feature-tests/scenario-tester/src/scenario_tester_proxy.rs +++ b/contracts/feature-tests/scenario-tester/src/scenario_tester_proxy.rs @@ -111,4 +111,32 @@ where .argument(&value) .original_result() } + + /// Tests "from" conversion for MultiValueN parameters + pub fn multi_param< + Arg0: ProxyArg, BigUint>>, + >( + self, + _value: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("multi_param") + .argument(&_value) + .original_result() + } + + /// Tests "from" conversion for MultiValueN return function + pub fn multi_return< + Arg0: ProxyArg>, + >( + self, + value: Arg0, + ) -> TxTypedCall, BigUint>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("multi_return") + .argument(&value) + .original_result() + } } diff --git a/contracts/feature-tests/scenario-tester/tests/st_blackbox_test.rs b/contracts/feature-tests/scenario-tester/tests/st_blackbox_test.rs index 20ff801864..90721fbd0d 100644 --- a/contracts/feature-tests/scenario-tester/tests/st_blackbox_test.rs +++ b/contracts/feature-tests/scenario-tester/tests/st_blackbox_test.rs @@ -95,6 +95,23 @@ fn st_blackbox() { .add(1u32) .run(); + world + .tx() + .from(OTHER_ADDRESS) + .to(ST_ADDRESS) + .typed(scenario_tester_proxy::ScenarioTesterProxy) + .multi_param(MultiValue2((1u32, 1u16))) + .run(); + + world + .tx() + .from(OTHER_ADDRESS) + .to(ST_ADDRESS) + .typed(scenario_tester_proxy::ScenarioTesterProxy) + .multi_return(1u32) + .returns(ExpectValue(MultiValue2((1u32, 2u32)))) + .run(); + world.write_scenario_trace("trace1.scen.json"); } diff --git a/contracts/feature-tests/scenario-tester/wasm/src/lib.rs b/contracts/feature-tests/scenario-tester/wasm/src/lib.rs index 28922bb61e..7976698233 100644 --- a/contracts/feature-tests/scenario-tester/wasm/src/lib.rs +++ b/contracts/feature-tests/scenario-tester/wasm/src/lib.rs @@ -6,9 +6,9 @@ // Init: 1 // Upgrade: 1 -// Endpoints: 2 +// Endpoints: 4 // Async Callback (empty): 1 -// Total number of exported functions: 5 +// Total number of exported functions: 7 #![no_std] @@ -22,6 +22,8 @@ multiversx_sc_wasm_adapter::endpoints! { upgrade => upgrade getSum => sum add => add + multi_param => multi_param + multi_return => multi_return ) } diff --git a/framework/base/src/abi/type_abi_impl_codec_multi.rs b/framework/base/src/abi/type_abi_impl_codec_multi.rs index 4fc42f37a6..fa27b98670 100644 --- a/framework/base/src/abi/type_abi_impl_codec_multi.rs +++ b/framework/base/src/abi/type_abi_impl_codec_multi.rs @@ -75,16 +75,16 @@ impl TypeAbi for OptionalValue { } macro_rules! multi_arg_impls { - ($(($mval_struct:ident $($n:tt $name:ident)+) )+) => { + ($(($mval_struct:ident $($n:tt $t:ident $u:ident)+) )+) => { $( - impl<$($name),+ > TypeAbiFrom for crate::codec::multi_types::$mval_struct<$($name,)+> + impl<$($t, $u),+ > TypeAbiFrom> for crate::codec::multi_types::$mval_struct<$($t,)+> where - $($name: TypeAbi,)+ + $($t: TypeAbiFrom<$u>,)+ {} - impl<$($name),+ > TypeAbi for crate::codec::multi_types::$mval_struct<$($name,)+> + impl<$($t),+ > TypeAbi for crate::codec::multi_types::$mval_struct<$($t,)+> where - $($name: TypeAbi,)+ + $($t: TypeAbi,)+ { type Unmanaged = Self; @@ -95,7 +95,7 @@ macro_rules! multi_arg_impls { if $n > 0 { repr.push(','); } - repr.push_str($name::type_name().as_str()); + repr.push_str($t::type_name().as_str()); )+ repr.push('>'); repr @@ -108,7 +108,7 @@ macro_rules! multi_arg_impls { if $n > 0 { repr.push_str(", "); } - repr.push_str($name::type_name_rust().as_str()); + repr.push_str($t::type_name_rust().as_str()); )+ repr.push('>'); repr @@ -116,7 +116,7 @@ macro_rules! multi_arg_impls { fn provide_type_descriptions(accumulator: &mut TDC) { $( - $name::provide_type_descriptions(accumulator); + $t::provide_type_descriptions(accumulator); )+ } @@ -128,10 +128,10 @@ macro_rules! multi_arg_impls { let mut result = OutputAbis::new(); $( if output_names.len() > $n { - result.append(&mut $name::output_abis(&[output_names[$n]])); + result.append(&mut $t::output_abis(&[output_names[$n]])); } else { - result.append(&mut $name::output_abis(&[])); + result.append(&mut $t::output_abis(&[])); } )+ @@ -143,19 +143,19 @@ macro_rules! multi_arg_impls { } multi_arg_impls! { - (MultiValue2 0 T0 1 T1) - (MultiValue3 0 T0 1 T1 2 T2) - (MultiValue4 0 T0 1 T1 2 T2 3 T3) - (MultiValue5 0 T0 1 T1 2 T2 3 T3 4 T4) - (MultiValue6 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5) - (MultiValue7 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6) - (MultiValue8 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7) - (MultiValue9 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8) - (MultiValue10 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9) - (MultiValue11 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10) - (MultiValue12 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11) - (MultiValue13 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11 12 T12) - (MultiValue14 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11 12 T12 13 T13) - (MultiValue15 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11 12 T12 13 T13 14 T14) - (MultiValue16 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11 12 T12 13 T13 14 T14 15 T15) + (MultiValue2 0 T0 U0 1 T1 U1) + (MultiValue3 0 T0 U0 1 T1 U1 2 T2 U2) + (MultiValue4 0 T0 U0 1 T1 U1 2 T2 U2 3 T3 U3) + (MultiValue5 0 T0 U0 1 T1 U1 2 T2 U2 3 T3 U3 4 T4 U4) + (MultiValue6 0 T0 U0 1 T1 U1 2 T2 U2 3 T3 U3 4 T4 U4 5 T5 U5) + (MultiValue7 0 T0 U0 1 T1 U1 2 T2 U2 3 T3 U3 4 T4 U4 5 T5 U5 6 T6 U6) + (MultiValue8 0 T0 U0 1 T1 U1 2 T2 U2 3 T3 U3 4 T4 U4 5 T5 U5 6 T6 U6 7 T7 U7) + (MultiValue9 0 T0 U0 1 T1 U1 2 T2 U2 3 T3 U3 4 T4 U4 5 T5 U5 6 T6 U6 7 T7 U7 8 T8 U8) + (MultiValue10 0 T0 U0 1 T1 U1 2 T2 U2 3 T3 U3 4 T4 U4 5 T5 U5 6 T6 U6 7 T7 U7 8 T8 U8 9 T9 U9) + (MultiValue11 0 T0 U0 1 T1 U1 2 T2 U2 3 T3 U3 4 T4 U4 5 T5 U5 6 T6 U6 7 T7 U7 8 T8 U8 9 T9 U9 10 T10 U10) + (MultiValue12 0 T0 U0 1 T1 U1 2 T2 U2 3 T3 U3 4 T4 U4 5 T5 U5 6 T6 U6 7 T7 U7 8 T8 U8 9 T9 U9 10 T10 U10 11 T11 U11) + (MultiValue13 0 T0 U0 1 T1 U1 2 T2 U2 3 T3 U3 4 T4 U4 5 T5 U5 6 T6 U6 7 T7 U7 8 T8 U8 9 T9 U9 10 T10 U10 11 T11 U11 12 T12 U12) + (MultiValue14 0 T0 U0 1 T1 U1 2 T2 U2 3 T3 U3 4 T4 U4 5 T5 U5 6 T6 U6 7 T7 U7 8 T8 U8 9 T9 U9 10 T10 U10 11 T11 U11 12 T12 U12 13 T13 U13) + (MultiValue15 0 T0 U0 1 T1 U1 2 T2 U2 3 T3 U3 4 T4 U4 5 T5 U5 6 T6 U6 7 T7 U7 8 T8 U8 9 T9 U9 10 T10 U10 11 T11 U11 12 T12 U12 13 T13 U13 14 T14 U14) + (MultiValue16 0 T0 U0 1 T1 U1 2 T2 U2 3 T3 U3 4 T4 U4 5 T5 U5 6 T6 U6 7 T7 U7 8 T8 U8 9 T9 U9 10 T10 U10 11 T11 U11 12 T12 U12 13 T13 U13 14 T14 U14 15 T15 U15) } From 6da405b581f3a6e14b3bf80461c7752d33429658 Mon Sep 17 00:00:00 2001 From: Andrei Marinica Date: Mon, 13 May 2024 14:42:27 +0300 Subject: [PATCH 2/6] clipply fix --- framework/base/src/abi.rs | 2 +- .../src/storage/mappers/ordered_binary_tree_mapper.rs | 2 +- .../cmd/contract/sc_config/contract_variant_settings.rs | 4 ++-- framework/scenario/src/api/local_api_vh/print_api_vh.rs | 2 +- framework/scenario/src/facade/expr/bech32_address.rs | 2 +- .../scenario/src/facade/world_tx/scenario_set_state.rs | 6 ++++-- framework/scenario/src/whitebox_legacy/tx_mandos.rs | 4 ++-- .../wasm-adapter/src/wasm_alloc/leaking_allocator.rs | 1 + framework/wasm-adapter/src/wasm_alloc/static_allocator.rs | 1 + sdk/core/src/crypto/private_key.rs | 8 +++++--- sdk/core/src/crypto/public_key.rs | 8 +++++--- sdk/core/src/data/address.rs | 8 ++++---- .../src/value_interpreter/reconstructor.rs | 2 +- .../mxpy-snippet-generator/src/mxpy_snippet_generator.rs | 2 +- .../general/claim_developer_rewards_mock.rs | 2 +- vm/src/tx_mock/tx_async_call_data.rs | 4 +++- vm/src/tx_mock/tx_cache_source.rs | 2 +- vm/src/world_mock/esdt_instances.rs | 4 ++-- 18 files changed, 37 insertions(+), 27 deletions(-) diff --git a/framework/base/src/abi.rs b/framework/base/src/abi.rs index 993518acb2..c031a62166 100644 --- a/framework/base/src/abi.rs +++ b/framework/base/src/abi.rs @@ -25,7 +25,7 @@ pub use type_description_container::*; pub type TypeName = alloc::string::String; -#[derive(Clone, Debug, PartialEq, Eq)] +#[derive(Clone, Default, Debug, PartialEq, Eq)] pub struct TypeNames { pub abi: alloc::string::String, pub rust: alloc::string::String, diff --git a/framework/base/src/storage/mappers/ordered_binary_tree_mapper.rs b/framework/base/src/storage/mappers/ordered_binary_tree_mapper.rs index fbc3de782f..064e90551c 100644 --- a/framework/base/src/storage/mappers/ordered_binary_tree_mapper.rs +++ b/framework/base/src/storage/mappers/ordered_binary_tree_mapper.rs @@ -239,7 +239,7 @@ where let mut opt_new_node_parent = None; let mut opt_current_node = self.get_root(); while opt_current_node.is_some() { - opt_new_node_parent = opt_current_node.clone(); + opt_new_node_parent.clone_from(&opt_current_node); let current_node = unsafe { opt_current_node.unwrap_unchecked() }; if new_node.data == current_node.data { diff --git a/framework/meta/src/cmd/contract/sc_config/contract_variant_settings.rs b/framework/meta/src/cmd/contract/sc_config/contract_variant_settings.rs index a6a40a4142..b0af57deef 100644 --- a/framework/meta/src/cmd/contract/sc_config/contract_variant_settings.rs +++ b/framework/meta/src/cmd/contract/sc_config/contract_variant_settings.rs @@ -81,7 +81,7 @@ impl ContractVariantProfile { result.codegen_units = codegen_units; } if let Some(opt_level) = &serde_profile.opt_level { - result.opt_level = opt_level.clone(); + result.opt_level.clone_from(opt_level); } if let Some(lto) = serde_profile.lto { result.lto = lto; @@ -90,7 +90,7 @@ impl ContractVariantProfile { result.debug = debug; } if let Some(panic) = &serde_profile.panic { - result.panic = panic.clone(); + result.panic.clone_from(panic); } if let Some(overflow_checks) = serde_profile.overflow_checks { result.overflow_checks = overflow_checks; diff --git a/framework/scenario/src/api/local_api_vh/print_api_vh.rs b/framework/scenario/src/api/local_api_vh/print_api_vh.rs index 58cdb7fd16..6d3f9b3dbe 100644 --- a/framework/scenario/src/api/local_api_vh/print_api_vh.rs +++ b/framework/scenario/src/api/local_api_vh/print_api_vh.rs @@ -8,7 +8,7 @@ use multiversx_sc::{ use crate::api::{VMHooksApi, VMHooksApiBackend}; thread_local!( - static PRINTED_MESSAGES: RefCell> = RefCell::new(Vec::new()) + static PRINTED_MESSAGES: RefCell> = const { RefCell::new(Vec::new()) } ); impl VMHooksApi { diff --git a/framework/scenario/src/facade/expr/bech32_address.rs b/framework/scenario/src/facade/expr/bech32_address.rs index d07cf207e0..c404d17e27 100644 --- a/framework/scenario/src/facade/expr/bech32_address.rs +++ b/framework/scenario/src/facade/expr/bech32_address.rs @@ -198,7 +198,7 @@ impl<'de> Deserialize<'de> for Bech32Address { // some old interactors have it serialized like this let mut bech32 = String::deserialize(deserializer)?; if let Some(stripped) = bech32.strip_prefix("bech32:") { - bech32 = stripped.to_owned(); + bech32 = stripped.to_string(); } Ok(Bech32Address::from_bech32_string(bech32)) } diff --git a/framework/scenario/src/facade/world_tx/scenario_set_state.rs b/framework/scenario/src/facade/world_tx/scenario_set_state.rs index aa9a4ccd9b..d036d647cd 100644 --- a/framework/scenario/src/facade/world_tx/scenario_set_state.rs +++ b/framework/scenario/src/facade/world_tx/scenario_set_state.rs @@ -74,7 +74,7 @@ impl ScenarioWorld { let accounts = &mut self.get_mut_state().accounts; for (vm_address_key, account) in accounts.iter_mut() { if vm_address_key == &address_value.to_vm_address() { - account.egld_balance = balance_value.value.clone(); + account.egld_balance.clone_from(&balance_value.value); } } } @@ -158,7 +158,9 @@ impl ScenarioWorld { let accounts = &mut self.get_mut_state().accounts; for (vm_address, account) in accounts.iter_mut() { if vm_address == &AddressKey::from(address).to_vm_address() { - account.developer_rewards = BigUintValue::from(developer_rewards).value.clone(); + account + .developer_rewards + .clone_from(&BigUintValue::from(developer_rewards).value); } } } diff --git a/framework/scenario/src/whitebox_legacy/tx_mandos.rs b/framework/scenario/src/whitebox_legacy/tx_mandos.rs index 6d7babb5ba..505591bc68 100644 --- a/framework/scenario/src/whitebox_legacy/tx_mandos.rs +++ b/framework/scenario/src/whitebox_legacy/tx_mandos.rs @@ -31,7 +31,7 @@ impl ScCallMandos { } pub fn add_egld_value(&mut self, egld_value: &num_bigint::BigUint) { - self.egld_value = egld_value.clone(); + self.egld_value.clone_from(egld_value); } pub fn add_esdt_transfer( @@ -101,6 +101,6 @@ impl TxExpectMandos { } pub fn set_message(&mut self, msg: &str) { - self.message = msg.to_owned(); + self.message = msg.to_string(); } } diff --git a/framework/wasm-adapter/src/wasm_alloc/leaking_allocator.rs b/framework/wasm-adapter/src/wasm_alloc/leaking_allocator.rs index 59bfa218ab..8a40b0ac68 100644 --- a/framework/wasm-adapter/src/wasm_alloc/leaking_allocator.rs +++ b/framework/wasm-adapter/src/wasm_alloc/leaking_allocator.rs @@ -19,6 +19,7 @@ pub struct LeakingAllocator { unsafe impl Sync for LeakingAllocator {} impl LeakingAllocator { + #[allow(clippy::new_without_default)] pub const fn new() -> Self { LeakingAllocator { used: UnsafeCell::new(0), diff --git a/framework/wasm-adapter/src/wasm_alloc/static_allocator.rs b/framework/wasm-adapter/src/wasm_alloc/static_allocator.rs index 0b0ae4d87e..00b7088d61 100644 --- a/framework/wasm-adapter/src/wasm_alloc/static_allocator.rs +++ b/framework/wasm-adapter/src/wasm_alloc/static_allocator.rs @@ -25,6 +25,7 @@ pub struct StaticAllocator { } impl StaticAllocator { + #[allow(clippy::new_without_default)] pub const fn new() -> Self { StaticAllocator { arena: UnsafeCell::new([0; SIZE]), diff --git a/sdk/core/src/crypto/private_key.rs b/sdk/core/src/crypto/private_key.rs index 16870e7230..58ef821974 100644 --- a/sdk/core/src/crypto/private_key.rs +++ b/sdk/core/src/crypto/private_key.rs @@ -1,3 +1,5 @@ +use std::fmt::Display; + use super::edwards25519::{sc_mul_add, sc_reduce}; use crate::crypto::edwards25519::extended_group_element::ExtendedGroupElement; use anyhow::{anyhow, Result}; @@ -126,9 +128,9 @@ impl PrivateKey { } } -impl ToString for PrivateKey { - fn to_string(&self) -> String { - hex::encode(&self.0[..32]) +impl Display for PrivateKey { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + hex::encode(&self.0[..32]).fmt(f) } } diff --git a/sdk/core/src/crypto/public_key.rs b/sdk/core/src/crypto/public_key.rs index 3013123dbd..89b5211262 100644 --- a/sdk/core/src/crypto/public_key.rs +++ b/sdk/core/src/crypto/public_key.rs @@ -1,3 +1,5 @@ +use std::fmt::Display; + use super::private_key::PrivateKey; use anyhow::Result; use bech32::{self, ToBase32, Variant}; @@ -44,9 +46,9 @@ impl<'a> From<&'a PrivateKey> for PublicKey { } } -impl ToString for PublicKey { - fn to_string(&self) -> String { - hex::encode(self.0) +impl Display for PublicKey { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + hex::encode(self.0).fmt(f) } } diff --git a/sdk/core/src/data/address.rs b/sdk/core/src/data/address.rs index 8c4af1fb37..f8ac4212c3 100644 --- a/sdk/core/src/data/address.rs +++ b/sdk/core/src/data/address.rs @@ -1,4 +1,4 @@ -use std::fmt::Debug; +use std::fmt::{Debug, Display}; use crate::crypto::public_key::PublicKey; use anyhow::Result; @@ -51,9 +51,9 @@ impl<'a> From<&'a PublicKey> for Address { } } -impl ToString for Address { - fn to_string(&self) -> String { - self.to_bech32_string().unwrap() +impl Display for Address { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str(self.to_bech32_string().unwrap().as_str()) } } diff --git a/sdk/scenario-format/src/value_interpreter/reconstructor.rs b/sdk/scenario-format/src/value_interpreter/reconstructor.rs index 8ff0b47bf8..6efacefba4 100644 --- a/sdk/scenario-format/src/value_interpreter/reconstructor.rs +++ b/sdk/scenario-format/src/value_interpreter/reconstructor.rs @@ -133,7 +133,7 @@ fn address_pretty(value: &[u8]) -> String { format!("address:{}", address_str.trim_end_matches('_').to_owned()) } else { let mut address_str = String::from_utf8_lossy(&value[..SC_ADDRESS_LENGTH - 1]).to_string(); - address_str = address_str.trim_end_matches('_').to_owned(); + address_str = address_str.trim_end_matches('_').to_string(); let shard_id = value[SC_ADDRESS_LENGTH - 1]; let address_expr = format!("address:{address_str}#{shard_id:02x}"); if !can_interpret_as_string(&[value[SC_ADDRESS_LENGTH - 1]]) { diff --git a/tools/mxpy-snippet-generator/src/mxpy_snippet_generator.rs b/tools/mxpy-snippet-generator/src/mxpy_snippet_generator.rs index 02521cbfad..4a4f397b98 100644 --- a/tools/mxpy-snippet-generator/src/mxpy_snippet_generator.rs +++ b/tools/mxpy-snippet-generator/src/mxpy_snippet_generator.rs @@ -133,7 +133,7 @@ impl MxpySnippetGenerator { } pub fn set_egld_value(&mut self, egld_value: &num_bigint::BigUint) { - self.egld_value = egld_value.clone(); + self.egld_value.clone_from(egld_value); } pub fn add_esdt_transfer( diff --git a/vm/src/tx_execution/builtin_function_mocks/general/claim_developer_rewards_mock.rs b/vm/src/tx_execution/builtin_function_mocks/general/claim_developer_rewards_mock.rs index 82bda4fa7d..0b7e9c694f 100644 --- a/vm/src/tx_execution/builtin_function_mocks/general/claim_developer_rewards_mock.rs +++ b/vm/src/tx_execution/builtin_function_mocks/general/claim_developer_rewards_mock.rs @@ -37,7 +37,7 @@ impl BuiltinFunction for ClaimDeveloperRewards { tx_cache.with_account_mut(&tx_input.to, |account| { if account.contract_owner == Some(tx_input.from.clone()) { - developer_rewards = account.developer_rewards.clone(); + developer_rewards.clone_from(&account.developer_rewards); account.developer_rewards = BigUint::zero(); caller_is_owner = true; } diff --git a/vm/src/tx_mock/tx_async_call_data.rs b/vm/src/tx_mock/tx_async_call_data.rs index f30cd9a3c2..45cbce639c 100644 --- a/vm/src/tx_mock/tx_async_call_data.rs +++ b/vm/src/tx_mock/tx_async_call_data.rs @@ -93,7 +93,9 @@ fn extract_callback_payments( if !token_transfers.is_empty() { callback_payments.esdt_values = token_transfers.transfers; } else { - callback_payments.egld_value = async_call.call_value.clone(); + callback_payments + .egld_value + .clone_from(&async_call.call_value); } break; } diff --git a/vm/src/tx_mock/tx_cache_source.rs b/vm/src/tx_mock/tx_cache_source.rs index aee7ff96c5..55540137a9 100644 --- a/vm/src/tx_mock/tx_cache_source.rs +++ b/vm/src/tx_mock/tx_cache_source.rs @@ -23,7 +23,7 @@ impl TxCacheSource for TxCache { impl TxCacheSource for BlockchainState { fn load_account(&self, address: &VMAddress) -> Option { - self.accounts.get(address).map(AccountData::clone) + self.accounts.get(address).cloned() } fn blockchain_ref(&self) -> &BlockchainState { diff --git a/vm/src/world_mock/esdt_instances.rs b/vm/src/world_mock/esdt_instances.rs index 7fd574fac5..74c2432281 100644 --- a/vm/src/world_mock/esdt_instances.rs +++ b/vm/src/world_mock/esdt_instances.rs @@ -57,9 +57,9 @@ impl EsdtInstances { .0 .entry(nonce) .and_modify(|instance| { - instance.balance = value.clone(); + instance.balance.clone_from(value); instance.nonce = nonce; - instance.metadata = metadata.clone(); + instance.metadata.clone_from(&metadata); }) .or_insert_with(|| EsdtInstance { nonce, From 93f53adeb0626a6a5c1235103be6ae60e4f1aa4e Mon Sep 17 00:00:00 2001 From: Andrei Marinica Date: Mon, 13 May 2024 14:42:38 +0300 Subject: [PATCH 3/6] rustfmt.toml fix --- rustfmt.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rustfmt.toml b/rustfmt.toml index 8484a95cce..29b99b9ba4 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -12,7 +12,7 @@ # This should actually automatically be shipped with cargo fmt or rustfmt itself! # ---------------------------------------------------------------------------------- -imports_granularity="Crate" +# imports_granularity="Crate" # Use verbose output. # Default: false From 1b6ab0d2ca5420b6f07de5db5b55884e0684ac0e Mon Sep 17 00:00:00 2001 From: Andrei Marinica Date: Mon, 13 May 2024 16:04:31 +0300 Subject: [PATCH 4/6] cargo update --- Cargo.lock | 161 +++++++++++++++++++---------------------------------- 1 file changed, 58 insertions(+), 103 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8dba3c1854..17d5b64293 100755 --- a/Cargo.lock +++ b/Cargo.lock @@ -100,47 +100,48 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.13" +version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" [[package]] name = "anstyle-parse" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -148,9 +149,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.82" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" [[package]] name = "arbitrary" @@ -169,9 +170,9 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" @@ -190,9 +191,9 @@ dependencies = [ [[package]] name = "base64" -version = "0.22.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9475866fec1451be56a3c2400fd081ff546538961565ccb5b7142cbd22bc7a51" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "basic-features" @@ -377,9 +378,9 @@ checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" [[package]] name = "cc" -version = "1.0.96" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065a29261d53ba54260972629f9ca6bffa69bac13cd1fed61420f7fa68b9f8bd" +checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4" [[package]] name = "cfg-if" @@ -464,9 +465,9 @@ checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" [[package]] name = "colored" @@ -902,9 +903,9 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -1266,9 +1267,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "js-sys", @@ -1515,6 +1516,12 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + [[package]] name = "itertools" version = "0.12.1" @@ -1889,7 +1896,7 @@ name = "multiversx-price-aggregator-sc" version = "0.50.0" dependencies = [ "arrayvec", - "getrandom 0.2.14", + "getrandom 0.2.15", "multiversx-sc", "multiversx-sc-modules", "multiversx-sc-scenario", @@ -2197,27 +2204,6 @@ dependencies = [ "libc", ] -[[package]] -name = "num_enum" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "object" version = "0.32.2" @@ -2470,15 +2456,6 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" -[[package]] -name = "proc-macro-crate" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" -dependencies = [ - "toml_edit 0.21.1", -] - [[package]] name = "proc-macro2" version = "1.0.82" @@ -2648,7 +2625,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.14", + "getrandom 0.2.15", ] [[package]] @@ -2846,9 +2823,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc_version" @@ -2890,9 +2867,9 @@ checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "same-file" @@ -2953,11 +2930,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" +checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "core-foundation", "core-foundation-sys", "libc", @@ -2966,9 +2943,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f3cc463c0ef97e11c3461a9d3787412d30e8e7eb907c79180c4a57bf7c04ef" +checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" dependencies = [ "core-foundation-sys", "libc", @@ -2993,9 +2970,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "send-tx-repeat" @@ -3015,18 +2992,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.199" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c9f6e76df036c77cd94996771fb40db98187f096dd0b9af39c6c6e452ba966a" +checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.199" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11bd257a6541e141e42ca6d24ae26f7714887b47e89aa739099104c7e4d3b7fc" +checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" dependencies = [ "proc-macro2", "quote", @@ -3035,9 +3012,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.116" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" dependencies = [ "indexmap", "itoa", @@ -3356,16 +3333,15 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] @@ -3378,7 +3354,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.12", + "toml_edit", ] [[package]] @@ -3390,17 +3366,6 @@ dependencies = [ "serde", ] -[[package]] -name = "toml_edit" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow 0.5.40", -] - [[package]] name = "toml_edit" version = "0.22.12" @@ -3411,7 +3376,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.7", + "winnow", ] [[package]] @@ -3885,18 +3850,9 @@ checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" [[package]] name = "winnow" -version = "0.5.40" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - -[[package]] -name = "winnow" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14b9415ee827af173ebb3f15f9083df5a122eb93572ec28741fb153356ea2578" +checksum = "c3c52e9c97a68071b23e836c9380edae937f17b9c4667bd021973efc689f618d" dependencies = [ "memchr", ] @@ -3953,9 +3909,9 @@ dependencies = [ [[package]] name = "zip" -version = "1.2.1" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "006d078b7b6fc587bb25e022ad39e7086f44e5c4fef6076964ea601533241beb" +checksum = "c700ea425e148de30c29c580c1f9508b93ca57ad31c9f4e96b83c194c37a7a8f" dependencies = [ "arbitrary", "crc32fast", @@ -3963,6 +3919,5 @@ dependencies = [ "displaydoc", "flate2", "indexmap", - "num_enum", "thiserror", ] From c8b5323849635b1480ace5e969e46399e0694064 Mon Sep 17 00:00:00 2001 From: Andrei Marinica Date: Mon, 13 May 2024 17:07:48 +0300 Subject: [PATCH 5/6] typo in type_name_rust --- framework/base/src/types/interaction/managed_arg_buffer.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/base/src/types/interaction/managed_arg_buffer.rs b/framework/base/src/types/interaction/managed_arg_buffer.rs index a2159bbd11..c6dae76afd 100644 --- a/framework/base/src/types/interaction/managed_arg_buffer.rs +++ b/framework/base/src/types/interaction/managed_arg_buffer.rs @@ -319,6 +319,6 @@ where } fn type_name_rust() -> TypeName { - "ManagedArgBufer<$API>".into() + "ManagedArgBuffer<$API>".into() } } From c1299d0f7ab1d1892ae96a3fcf0748660d3bbb67 Mon Sep 17 00:00:00 2001 From: BiancaIalangi Date: Mon, 13 May 2024 20:27:13 +0300 Subject: [PATCH 6/6] add changes from review - unmanaged type --- contracts/feature-tests/scenario-tester/src/lib.rs | 4 ++-- .../scenario-tester/tests/st_blackbox_test.rs | 13 +++++++++++++ framework/base/src/abi/type_abi_impl_codec_multi.rs | 6 +++--- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/contracts/feature-tests/scenario-tester/src/lib.rs b/contracts/feature-tests/scenario-tester/src/lib.rs index 5b2365a741..97c352adeb 100644 --- a/contracts/feature-tests/scenario-tester/src/lib.rs +++ b/contracts/feature-tests/scenario-tester/src/lib.rs @@ -35,7 +35,7 @@ pub trait ScenarioTester { /// Tests "from" conversion for MultiValueN return function #[endpoint] fn multi_return(&self, value: BigUint) -> MultiValue2 { - let value1 = value.clone().add(1u32); - (value, value1).into() + let value_plus_one = &value + 1u32; + (value, value_plus_one).into() } } diff --git a/contracts/feature-tests/scenario-tester/tests/st_blackbox_test.rs b/contracts/feature-tests/scenario-tester/tests/st_blackbox_test.rs index 90721fbd0d..e4ab2b4b4d 100644 --- a/contracts/feature-tests/scenario-tester/tests/st_blackbox_test.rs +++ b/contracts/feature-tests/scenario-tester/tests/st_blackbox_test.rs @@ -112,6 +112,19 @@ fn st_blackbox() { .returns(ExpectValue(MultiValue2((1u32, 2u32)))) .run(); + let value = world + .tx() + .from(OTHER_ADDRESS) + .to(ST_ADDRESS) + .typed(scenario_tester_proxy::ScenarioTesterProxy) + .multi_return(1u32) + .returns(ReturnsResultUnmanaged) + .run(); + assert_eq!( + value, + MultiValue2((RustBigUint::from(1u32), RustBigUint::from(2u32))) + ); + world.write_scenario_trace("trace1.scen.json"); } diff --git a/framework/base/src/abi/type_abi_impl_codec_multi.rs b/framework/base/src/abi/type_abi_impl_codec_multi.rs index fa27b98670..6b1cf9ab72 100644 --- a/framework/base/src/abi/type_abi_impl_codec_multi.rs +++ b/framework/base/src/abi/type_abi_impl_codec_multi.rs @@ -77,16 +77,16 @@ impl TypeAbi for OptionalValue { macro_rules! multi_arg_impls { ($(($mval_struct:ident $($n:tt $t:ident $u:ident)+) )+) => { $( - impl<$($t, $u),+ > TypeAbiFrom> for crate::codec::multi_types::$mval_struct<$($t,)+> + impl<$($t, $u),+> TypeAbiFrom> for crate::codec::multi_types::$mval_struct<$($t,)+> where $($t: TypeAbiFrom<$u>,)+ {} - impl<$($t),+ > TypeAbi for crate::codec::multi_types::$mval_struct<$($t,)+> + impl<$($t),+> TypeAbi for crate::codec::multi_types::$mval_struct<$($t,)+> where $($t: TypeAbi,)+ { - type Unmanaged = Self; + type Unmanaged = crate::codec::multi_types::$mval_struct<$($t::Unmanaged,)+>; fn type_name() -> TypeName { let mut repr = TypeName::from("multi");