mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 11:07:56 +00:00
Pre-Charge max size when contracts access storage (#10691)
* Fix seal_get_storage * Fix seal_take_storage * Add more benchmarks * cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_contracts --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/contracts/src/weights.rs --template=./.maintain/frame-weight-template.hbs * Fix seal_set_storage * Fix seal_contains_storage and seal_clear_storage * Fix benchmarks * cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_contracts --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/contracts/src/weights.rs --template=./.maintain/frame-weight-template.hbs * Get rid of mem::size_of in benchmarks * Fix up code loading * Apply suggestions from code review Co-authored-by: Hernando Castano <HCastano@users.noreply.github.com> * Fix test to call same function twice * Replaced u32::MAX by SENTINEL const * Fix seal_contains_storage benchmark * cargo run --quiet --profile=production --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_contracts --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/contracts/src/weights.rs --template=./.maintain/frame-weight-template.hbs Co-authored-by: Parity Bot <admin@parity.io> Co-authored-by: Hernando Castano <HCastano@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
e327b734bc
commit
dc45201a64
@@ -35,7 +35,7 @@ use crate::{
|
||||
storage::Storage,
|
||||
Pallet as Contracts, *,
|
||||
};
|
||||
use codec::Encode;
|
||||
use codec::{Encode, MaxEncodedLen};
|
||||
use frame_benchmarking::{account, benchmarks, whitelisted_caller};
|
||||
use frame_support::weights::Weight;
|
||||
use frame_system::RawOrigin;
|
||||
@@ -778,9 +778,10 @@ benchmarks! {
|
||||
seal_set_storage {
|
||||
let r in 0 .. API_BENCHMARK_BATCHES;
|
||||
let keys = (0 .. r * API_BENCHMARK_BATCH_SIZE)
|
||||
.flat_map(|n| T::Hashing::hash_of(&n).as_ref().to_vec())
|
||||
.map(|n| T::Hashing::hash_of(&n).as_ref().to_vec())
|
||||
.collect::<Vec<_>>();
|
||||
let key_len = sp_std::mem::size_of::<<T::Hashing as sp_runtime::traits::Hash>::Output>();
|
||||
let key_len = keys.get(0).map(|i| i.len() as u32).unwrap_or(0);
|
||||
let key_bytes = keys.iter().flatten().cloned().collect::<Vec<_>>();
|
||||
let code = WasmModule::<T>::from(ModuleDefinition {
|
||||
memory: Some(ImportedMemory::max::<T>()),
|
||||
imported_functions: vec![ImportedFunction {
|
||||
@@ -792,7 +793,7 @@ benchmarks! {
|
||||
data_segments: vec![
|
||||
DataSegment {
|
||||
offset: 0,
|
||||
value: keys,
|
||||
value: key_bytes,
|
||||
},
|
||||
],
|
||||
call_body: Some(body::repeated_dyn(r * API_BENCHMARK_BATCH_SIZE, vec![
|
||||
@@ -805,13 +806,28 @@ benchmarks! {
|
||||
.. Default::default()
|
||||
});
|
||||
let instance = Contract::<T>::new(code, vec![])?;
|
||||
let info = instance.info()?;
|
||||
for key in keys {
|
||||
Storage::<T>::write(
|
||||
&info.trie_id,
|
||||
key.as_slice().try_into().map_err(|e| "Key has wrong length")?,
|
||||
Some(vec![]),
|
||||
None,
|
||||
false,
|
||||
)
|
||||
.map_err(|_| "Failed to write to storage during setup.")?;
|
||||
}
|
||||
let origin = RawOrigin::Signed(instance.caller.clone());
|
||||
}: call(origin, instance.addr, 0u32.into(), Weight::MAX, None, vec![])
|
||||
|
||||
seal_set_storage_per_kb {
|
||||
#[skip_meta]
|
||||
seal_set_storage_per_new_kb {
|
||||
let n in 0 .. T::Schedule::get().limits.payload_len / 1024;
|
||||
let key = T::Hashing::hash_of(&1u32).as_ref().to_vec();
|
||||
let key_len = key.len();
|
||||
let keys = (0 .. API_BENCHMARK_BATCH_SIZE)
|
||||
.map(|n| T::Hashing::hash_of(&n).as_ref().to_vec())
|
||||
.collect::<Vec<_>>();
|
||||
let key_len = keys.get(0).map(|i| i.len() as u32).unwrap_or(0);
|
||||
let key_bytes = keys.iter().flatten().cloned().collect::<Vec<_>>();
|
||||
let code = WasmModule::<T>::from(ModuleDefinition {
|
||||
memory: Some(ImportedMemory::max::<T>()),
|
||||
imported_functions: vec![ImportedFunction {
|
||||
@@ -823,19 +839,76 @@ benchmarks! {
|
||||
data_segments: vec![
|
||||
DataSegment {
|
||||
offset: 0,
|
||||
value: key,
|
||||
value: key_bytes,
|
||||
},
|
||||
],
|
||||
call_body: Some(body::repeated(API_BENCHMARK_BATCH_SIZE, &[
|
||||
Instruction::I32Const(0), // key_ptr
|
||||
Instruction::I32Const(0), // value_ptr
|
||||
Instruction::I32Const((n * 1024) as i32), // value_len
|
||||
Instruction::Call(0),
|
||||
Instruction::Drop,
|
||||
call_body: Some(body::repeated_dyn(API_BENCHMARK_BATCH_SIZE, vec![
|
||||
Counter(0, key_len as u32), // key_ptr
|
||||
Regular(Instruction::I32Const(0)), // value_ptr
|
||||
Regular(Instruction::I32Const((n * 1024) as i32)), // value_len
|
||||
Regular(Instruction::Call(0)),
|
||||
Regular(Instruction::Drop),
|
||||
])),
|
||||
.. Default::default()
|
||||
});
|
||||
let instance = Contract::<T>::new(code, vec![])?;
|
||||
let info = instance.info()?;
|
||||
for key in keys {
|
||||
Storage::<T>::write(
|
||||
&info.trie_id,
|
||||
key.as_slice().try_into().map_err(|e| "Key has wrong length")?,
|
||||
Some(vec![]),
|
||||
None,
|
||||
false,
|
||||
)
|
||||
.map_err(|_| "Failed to write to storage during setup.")?;
|
||||
}
|
||||
let origin = RawOrigin::Signed(instance.caller.clone());
|
||||
}: call(origin, instance.addr, 0u32.into(), Weight::MAX, None, vec![])
|
||||
|
||||
#[skip_meta]
|
||||
seal_set_storage_per_old_kb {
|
||||
let n in 0 .. T::Schedule::get().limits.payload_len / 1024;
|
||||
let keys = (0 .. API_BENCHMARK_BATCH_SIZE)
|
||||
.map(|n| T::Hashing::hash_of(&n).as_ref().to_vec())
|
||||
.collect::<Vec<_>>();
|
||||
let key_len = keys.get(0).map(|i| i.len() as u32).unwrap_or(0);
|
||||
let key_bytes = keys.iter().flatten().cloned().collect::<Vec<_>>();
|
||||
let code = WasmModule::<T>::from(ModuleDefinition {
|
||||
memory: Some(ImportedMemory::max::<T>()),
|
||||
imported_functions: vec![ImportedFunction {
|
||||
module: "__unstable__",
|
||||
name: "seal_set_storage",
|
||||
params: vec![ValueType::I32, ValueType::I32, ValueType::I32],
|
||||
return_type: Some(ValueType::I32),
|
||||
}],
|
||||
data_segments: vec![
|
||||
DataSegment {
|
||||
offset: 0,
|
||||
value: key_bytes,
|
||||
},
|
||||
],
|
||||
call_body: Some(body::repeated_dyn(API_BENCHMARK_BATCH_SIZE, vec![
|
||||
Counter(0, key_len as u32), // key_ptr
|
||||
Regular(Instruction::I32Const(0)), // value_ptr
|
||||
Regular(Instruction::I32Const(0)), // value_len
|
||||
Regular(Instruction::Call(0)),
|
||||
Regular(Instruction::Drop),
|
||||
])),
|
||||
.. Default::default()
|
||||
});
|
||||
let instance = Contract::<T>::new(code, vec![])?;
|
||||
let info = instance.info()?;
|
||||
for key in keys {
|
||||
Storage::<T>::write(
|
||||
&info.trie_id,
|
||||
key.as_slice().try_into().map_err(|e| "Key has wrong length")?,
|
||||
Some(vec![42u8; (n * 1024) as usize]),
|
||||
None,
|
||||
false,
|
||||
)
|
||||
.map_err(|_| "Failed to write to storage during setup.")?;
|
||||
}
|
||||
let origin = RawOrigin::Signed(instance.caller.clone());
|
||||
}: call(origin, instance.addr, 0u32.into(), Weight::MAX, None, vec![])
|
||||
|
||||
@@ -849,7 +922,7 @@ benchmarks! {
|
||||
.map(|n| T::Hashing::hash_of(&n).as_ref().to_vec())
|
||||
.collect::<Vec<_>>();
|
||||
let key_bytes = keys.iter().flatten().cloned().collect::<Vec<_>>();
|
||||
let key_len = sp_std::mem::size_of::<<T::Hashing as sp_runtime::traits::Hash>::Output>();
|
||||
let key_len = keys.get(0).map(|i| i.len() as u32).unwrap_or(0);
|
||||
let code = WasmModule::<T>::from(ModuleDefinition {
|
||||
memory: Some(ImportedMemory::max::<T>()),
|
||||
imported_functions: vec![ImportedFunction {
|
||||
@@ -877,7 +950,7 @@ benchmarks! {
|
||||
Storage::<T>::write(
|
||||
&info.trie_id,
|
||||
key.as_slice().try_into().map_err(|e| "Key has wrong length")?,
|
||||
Some(vec![42; T::Schedule::get().limits.payload_len as usize]),
|
||||
Some(vec![]),
|
||||
None,
|
||||
false,
|
||||
)
|
||||
@@ -887,6 +960,50 @@ benchmarks! {
|
||||
let origin = RawOrigin::Signed(instance.caller.clone());
|
||||
}: call(origin, instance.addr, 0u32.into(), Weight::MAX, None, vec![])
|
||||
|
||||
#[skip_meta]
|
||||
seal_clear_storage_per_kb {
|
||||
let n in 0 .. T::Schedule::get().limits.payload_len / 1024;
|
||||
let keys = (0 .. API_BENCHMARK_BATCH_SIZE)
|
||||
.map(|n| T::Hashing::hash_of(&n).as_ref().to_vec())
|
||||
.collect::<Vec<_>>();
|
||||
let key_len = keys.get(0).map(|i| i.len() as u32).unwrap_or(0);
|
||||
let key_bytes = keys.iter().flatten().cloned().collect::<Vec<_>>();
|
||||
let code = WasmModule::<T>::from(ModuleDefinition {
|
||||
memory: Some(ImportedMemory::max::<T>()),
|
||||
imported_functions: vec![ImportedFunction {
|
||||
module: "__unstable__",
|
||||
name: "seal_clear_storage",
|
||||
params: vec![ValueType::I32],
|
||||
return_type: Some(ValueType::I32),
|
||||
}],
|
||||
data_segments: vec![
|
||||
DataSegment {
|
||||
offset: 0,
|
||||
value: key_bytes,
|
||||
},
|
||||
],
|
||||
call_body: Some(body::repeated_dyn(API_BENCHMARK_BATCH_SIZE, vec![
|
||||
Counter(0, key_len as u32), // key_ptr
|
||||
Regular(Instruction::Call(0)),
|
||||
Regular(Instruction::Drop),
|
||||
])),
|
||||
.. Default::default()
|
||||
});
|
||||
let instance = Contract::<T>::new(code, vec![])?;
|
||||
let info = instance.info()?;
|
||||
for key in keys {
|
||||
Storage::<T>::write(
|
||||
&info.trie_id,
|
||||
key.as_slice().try_into().map_err(|e| "Key has wrong length")?,
|
||||
Some(vec![42u8; (n * 1024) as usize]),
|
||||
None,
|
||||
false,
|
||||
)
|
||||
.map_err(|_| "Failed to write to storage during setup.")?;
|
||||
}
|
||||
let origin = RawOrigin::Signed(instance.caller.clone());
|
||||
}: call(origin, instance.addr, 0u32.into(), Weight::MAX, None, vec![])
|
||||
|
||||
// We make sure that all storage accesses are to unique keys.
|
||||
#[skip_meta]
|
||||
seal_get_storage {
|
||||
@@ -894,7 +1011,7 @@ benchmarks! {
|
||||
let keys = (0 .. r * API_BENCHMARK_BATCH_SIZE)
|
||||
.map(|n| T::Hashing::hash_of(&n).as_ref().to_vec())
|
||||
.collect::<Vec<_>>();
|
||||
let key_len = sp_std::mem::size_of::<<T::Hashing as sp_runtime::traits::Hash>::Output>();
|
||||
let key_len = keys.get(0).map(|i| i.len() as u32).unwrap_or(0);
|
||||
let key_bytes = keys.iter().flatten().cloned().collect::<Vec<_>>();
|
||||
let key_bytes_len = key_bytes.len();
|
||||
let code = WasmModule::<T>::from(ModuleDefinition {
|
||||
@@ -940,6 +1057,58 @@ benchmarks! {
|
||||
let origin = RawOrigin::Signed(instance.caller.clone());
|
||||
}: call(origin, instance.addr, 0u32.into(), Weight::MAX, None, vec![])
|
||||
|
||||
#[skip_meta]
|
||||
seal_get_storage_per_kb {
|
||||
let n in 0 .. T::Schedule::get().limits.payload_len / 1024;
|
||||
let keys = (0 .. API_BENCHMARK_BATCH_SIZE)
|
||||
.map(|n| T::Hashing::hash_of(&n).as_ref().to_vec())
|
||||
.collect::<Vec<_>>();
|
||||
let key_len = keys.get(0).map(|i| i.len() as u32).unwrap_or(0);
|
||||
let key_bytes = keys.iter().flatten().cloned().collect::<Vec<_>>();
|
||||
let key_bytes_len = key_bytes.len();
|
||||
let code = WasmModule::<T>::from(ModuleDefinition {
|
||||
memory: Some(ImportedMemory::max::<T>()),
|
||||
imported_functions: vec![ImportedFunction {
|
||||
module: "seal0",
|
||||
name: "seal_get_storage",
|
||||
params: vec![ValueType::I32, ValueType::I32, ValueType::I32],
|
||||
return_type: Some(ValueType::I32),
|
||||
}],
|
||||
data_segments: vec![
|
||||
DataSegment {
|
||||
offset: 0,
|
||||
value: key_bytes,
|
||||
},
|
||||
DataSegment {
|
||||
offset: key_bytes_len as u32,
|
||||
value: T::Schedule::get().limits.payload_len.to_le_bytes().into(),
|
||||
},
|
||||
],
|
||||
call_body: Some(body::repeated_dyn(API_BENCHMARK_BATCH_SIZE, vec![
|
||||
Counter(0, key_len as u32), // key_ptr
|
||||
Regular(Instruction::I32Const((key_bytes_len + 4) as i32)), // out_ptr
|
||||
Regular(Instruction::I32Const(key_bytes_len as i32)), // out_len_ptr
|
||||
Regular(Instruction::Call(0)),
|
||||
Regular(Instruction::Drop),
|
||||
])),
|
||||
.. Default::default()
|
||||
});
|
||||
let instance = Contract::<T>::new(code, vec![])?;
|
||||
let info = instance.info()?;
|
||||
for key in keys {
|
||||
Storage::<T>::write(
|
||||
&info.trie_id,
|
||||
key.as_slice().try_into().map_err(|e| "Key has wrong length")?,
|
||||
Some(vec![42u8; (n * 1024) as usize]),
|
||||
None,
|
||||
false,
|
||||
)
|
||||
.map_err(|_| "Failed to write to storage during setup.")?;
|
||||
}
|
||||
<ContractInfoOf<T>>::insert(&instance.account_id, info.clone());
|
||||
let origin = RawOrigin::Signed(instance.caller.clone());
|
||||
}: call(origin, instance.addr, 0u32.into(), Weight::MAX, None, vec![])
|
||||
|
||||
// We make sure that all storage accesses are to unique keys.
|
||||
#[skip_meta]
|
||||
seal_contains_storage {
|
||||
@@ -947,7 +1116,7 @@ benchmarks! {
|
||||
let keys = (0 .. r * API_BENCHMARK_BATCH_SIZE)
|
||||
.map(|n| T::Hashing::hash_of(&n).as_ref().to_vec())
|
||||
.collect::<Vec<_>>();
|
||||
let key_len = sp_std::mem::size_of::<<T::Hashing as sp_runtime::traits::Hash>::Output>();
|
||||
let key_len = keys.get(0).map(|i| i.len() as u32).unwrap_or(0);
|
||||
let key_bytes = keys.iter().flatten().cloned().collect::<Vec<_>>();
|
||||
let key_bytes_len = key_bytes.len();
|
||||
let code = WasmModule::<T>::from(ModuleDefinition {
|
||||
@@ -977,7 +1146,7 @@ benchmarks! {
|
||||
Storage::<T>::write(
|
||||
&info.trie_id,
|
||||
key.as_slice().try_into().map_err(|e| "Key has wrong length")?,
|
||||
Some(vec![42; T::Schedule::get().limits.payload_len as usize]),
|
||||
Some(vec![]),
|
||||
None,
|
||||
false,
|
||||
)
|
||||
@@ -987,48 +1156,47 @@ benchmarks! {
|
||||
let origin = RawOrigin::Signed(instance.caller.clone());
|
||||
}: call(origin, instance.addr, 0u32.into(), Weight::MAX, None, vec![])
|
||||
|
||||
seal_get_storage_per_kb {
|
||||
#[skip_meta]
|
||||
seal_contains_storage_per_kb {
|
||||
let n in 0 .. T::Schedule::get().limits.payload_len / 1024;
|
||||
let key = T::Hashing::hash_of(&1u32).as_ref().to_vec();
|
||||
let key_len = key.len();
|
||||
let keys = (0 .. API_BENCHMARK_BATCH_SIZE)
|
||||
.map(|n| T::Hashing::hash_of(&n).as_ref().to_vec())
|
||||
.collect::<Vec<_>>();
|
||||
let key_len = keys.get(0).map(|i| i.len() as u32).unwrap_or(0);
|
||||
let key_bytes = keys.iter().flatten().cloned().collect::<Vec<_>>();
|
||||
let code = WasmModule::<T>::from(ModuleDefinition {
|
||||
memory: Some(ImportedMemory::max::<T>()),
|
||||
imported_functions: vec![ImportedFunction {
|
||||
module: "seal0",
|
||||
name: "seal_get_storage",
|
||||
params: vec![ValueType::I32, ValueType::I32, ValueType::I32],
|
||||
module: "__unstable__",
|
||||
name: "seal_contains_storage",
|
||||
params: vec![ValueType::I32],
|
||||
return_type: Some(ValueType::I32),
|
||||
}],
|
||||
data_segments: vec![
|
||||
DataSegment {
|
||||
offset: 0,
|
||||
value: key.clone(),
|
||||
},
|
||||
DataSegment {
|
||||
offset: key_len as u32,
|
||||
value: T::Schedule::get().limits.payload_len.to_le_bytes().into(),
|
||||
value: key_bytes,
|
||||
},
|
||||
],
|
||||
call_body: Some(body::repeated(API_BENCHMARK_BATCH_SIZE, &[
|
||||
// call at key_ptr
|
||||
Instruction::I32Const(0), // key_ptr
|
||||
Instruction::I32Const((key_len + 4) as i32), // out_ptr
|
||||
Instruction::I32Const(key_len as i32), // out_len_ptr
|
||||
Instruction::Call(0),
|
||||
Instruction::Drop,
|
||||
call_body: Some(body::repeated_dyn(API_BENCHMARK_BATCH_SIZE, vec![
|
||||
Counter(0, key_len as u32), // key_ptr
|
||||
Regular(Instruction::Call(0)),
|
||||
Regular(Instruction::Drop),
|
||||
])),
|
||||
.. Default::default()
|
||||
});
|
||||
let instance = Contract::<T>::new(code, vec![])?;
|
||||
let info = instance.info()?;
|
||||
Storage::<T>::write(
|
||||
&info.trie_id,
|
||||
key.as_slice().try_into().map_err(|e| "Key has wrong length")?,
|
||||
Some(vec![42u8; (n * 1024) as usize]),
|
||||
None,
|
||||
false,
|
||||
)
|
||||
.map_err(|_| "Failed to write to storage during setup.")?;
|
||||
for key in keys {
|
||||
Storage::<T>::write(
|
||||
&info.trie_id,
|
||||
key.as_slice().try_into().map_err(|e| "Key has wrong length")?,
|
||||
Some(vec![42u8; (n * 1024) as usize]),
|
||||
None,
|
||||
false,
|
||||
)
|
||||
.map_err(|_| "Failed to write to storage during setup.")?;
|
||||
}
|
||||
<ContractInfoOf<T>>::insert(&instance.account_id, info.clone());
|
||||
let origin = RawOrigin::Signed(instance.caller.clone());
|
||||
}: call(origin, instance.addr, 0u32.into(), Weight::MAX, None, vec![])
|
||||
@@ -1039,7 +1207,7 @@ benchmarks! {
|
||||
let keys = (0 .. r * API_BENCHMARK_BATCH_SIZE)
|
||||
.map(|n| T::Hashing::hash_of(&n).as_ref().to_vec())
|
||||
.collect::<Vec<_>>();
|
||||
let key_len = sp_std::mem::size_of::<<T::Hashing as sp_runtime::traits::Hash>::Output>();
|
||||
let key_len = keys.get(0).map(|i| i.len() as u32).unwrap_or(0);
|
||||
let key_bytes = keys.iter().flatten().cloned().collect::<Vec<_>>();
|
||||
let key_bytes_len = key_bytes.len();
|
||||
let code = WasmModule::<T>::from(ModuleDefinition {
|
||||
@@ -1091,7 +1259,7 @@ benchmarks! {
|
||||
let keys = (0 .. API_BENCHMARK_BATCH_SIZE)
|
||||
.map(|n| T::Hashing::hash_of(&n).as_ref().to_vec())
|
||||
.collect::<Vec<_>>();
|
||||
let key_len = sp_std::mem::size_of::<<T::Hashing as sp_runtime::traits::Hash>::Output>();
|
||||
let key_len = keys.get(0).map(|i| i.len() as u32).unwrap_or(0);
|
||||
let key_bytes = keys.iter().flatten().cloned().collect::<Vec<_>>();
|
||||
let key_bytes_len = key_bytes.len();
|
||||
let code = WasmModule::<T>::from(ModuleDefinition {
|
||||
@@ -1238,7 +1406,7 @@ benchmarks! {
|
||||
Regular(Instruction::I32Const(value_len as i32)), // value_len
|
||||
Regular(Instruction::I32Const(0)), // input_data_ptr
|
||||
Regular(Instruction::I32Const(0)), // input_data_len
|
||||
Regular(Instruction::I32Const(u32::max_value() as i32)), // output_ptr
|
||||
Regular(Instruction::I32Const(SENTINEL as i32)), // output_ptr
|
||||
Regular(Instruction::I32Const(0)), // output_len_ptr
|
||||
Regular(Instruction::Call(0)),
|
||||
Regular(Instruction::Drop),
|
||||
@@ -1361,7 +1529,7 @@ benchmarks! {
|
||||
assert!(value > 0u32.into());
|
||||
let value_bytes = value.encode();
|
||||
let value_len = value_bytes.len();
|
||||
let addr_len = sp_std::mem::size_of::<T::AccountId>();
|
||||
let addr_len = T::AccountId::max_encoded_len();
|
||||
|
||||
// offsets where to place static data in contract memory
|
||||
let value_offset = 0;
|
||||
@@ -1415,7 +1583,7 @@ benchmarks! {
|
||||
Regular(Instruction::I32Const(0)), // input_data_len
|
||||
Regular(Instruction::I32Const(addr_offset as i32)), // address_ptr
|
||||
Regular(Instruction::I32Const(addr_len_offset as i32)), // address_len_ptr
|
||||
Regular(Instruction::I32Const(u32::max_value() as i32)), // output_ptr
|
||||
Regular(Instruction::I32Const(SENTINEL as i32)), // output_ptr
|
||||
Regular(Instruction::I32Const(0)), // output_len_ptr
|
||||
Regular(Instruction::I32Const(0)), // salt_ptr
|
||||
Regular(Instruction::I32Const(0)), // salt_ptr_len
|
||||
@@ -1485,7 +1653,7 @@ benchmarks! {
|
||||
assert!(value > 0u32.into());
|
||||
let value_bytes = value.encode();
|
||||
let value_len = value_bytes.len();
|
||||
let addr_len = sp_std::mem::size_of::<T::AccountId>();
|
||||
let addr_len = T::AccountId::max_encoded_len();
|
||||
|
||||
// offsets where to place static data in contract memory
|
||||
let input_offset = 0;
|
||||
|
||||
Reference in New Issue
Block a user