Skip to content

Commit

Permalink
create StorageAdapter with on-chain paremeters
Browse files Browse the repository at this point in the history
  • Loading branch information
simonjiao committed Feb 10, 2025
1 parent c854988 commit 232a7a0
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 29 deletions.
7 changes: 7 additions & 0 deletions types/src/vm/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,13 @@ pub fn get_max_binary_format_version(
}
}

pub fn starcoin_prod_deserializer_config(features: &Features) -> DeserializerConfig {
DeserializerConfig::new(
get_max_binary_format_version(features, None),
get_max_identifier_size(features),
)
}

pub fn get_max_identifier_size(features: &Features) -> u64 {
if features.is_enabled(FeatureFlag::LIMIT_MAX_IDENTIFIER_LENGTH) {
IDENTIFIER_SIZE_MAX
Expand Down
6 changes: 3 additions & 3 deletions vm/e2e-tests/src/executor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use starcoin_config::ChainNetwork;
use starcoin_crypto::keygen::KeyGen;
use starcoin_crypto::HashValue;
use starcoin_gas_meter::{StarcoinGasMeter, StarcoinGasParameters};
use starcoin_vm_runtime::data_cache::{AsMoveResolver, StorageAdapter};
use starcoin_vm_runtime::data_cache::AsMoveResolver;
use starcoin_vm_runtime::move_vm_ext::{MoveVmExt, SessionId};
use starcoin_vm_runtime::parallel_executor::ParallelStarcoinVM;
use starcoin_vm_runtime::starcoin_vm::StarcoinVM;
Expand Down Expand Up @@ -535,7 +535,7 @@ impl FakeExecutor {
&resolver,
)
.unwrap();
let remote_view = StorageAdapter::new(&self.data_store);
let remote_view = self.data_store.as_move_resolver();

let balance = gas_params.vm.txn.maximum_number_of_gas_units.clone();
let mut gas_meter = StarcoinGasMeter::new(gas_params, balance);
Expand Down Expand Up @@ -608,7 +608,7 @@ impl FakeExecutor {
&resolver,
)
.unwrap();
let remote_view = StorageAdapter::new(&self.data_store);
let remote_view = self.data_store.as_move_resolver();

let balance = gas_params.vm.txn.maximum_number_of_gas_units.clone();
let mut gas_meter = StarcoinGasMeter::new(gas_params, balance);
Expand Down
5 changes: 3 additions & 2 deletions vm/starcoin-transactional-test-harness/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ use starcoin_types::{
account_config::{genesis_address, AccountResource},
transaction::RawUserTransaction,
};
use starcoin_vm_runtime::data_cache::AsMoveResolver;
use starcoin_vm_runtime::session::SerializedReturnValues;
use starcoin_vm_runtime::{data_cache::StorageAdapter, starcoin_vm::StarcoinVM};
use starcoin_vm_types::account_config::{
Expand Down Expand Up @@ -706,7 +707,7 @@ impl<'a> StarcoinTestAdapter<'a> {
None,
)?;

let move_resolver = StorageAdapter::new(&self.context.storage);
let move_resolver = self.context.storage.as_move_resolver();
let annotator = move_resource_viewer::MoveValueAnnotator::new(move_resolver);
let rets = rets
.into_iter()
Expand Down Expand Up @@ -1371,7 +1372,7 @@ impl<'a> MoveTestAdapter<'a> for StarcoinTestAdapter<'a> {
resource: &IdentStr,
type_args: Vec<TypeTag>,
) -> anyhow::Result<String> {
let s = StorageAdapter::new(&self.context.storage);
let s = self.context.storage.as_move_resolver();
view_resource_in_move_storage(s, address, module, resource, type_args)
}

Expand Down
10 changes: 5 additions & 5 deletions vm/types/src/on_chain_config/starcoin_features.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ pub enum FeatureFlag {
LIMIT_MAX_IDENTIFIER_LENGTH = 38,
OPERATOR_BENEFICIARY_CHANGE = 39,
VM_BINARY_FORMAT_V7 = 40,
RESOURCE_GROUPS_CHARGE_AS_SIZE_SUM = 41,
RESOURCE_GROUPS_SPLIT_IN_VM_CHANGE_SET = 41, // default to be disabled
COMMISSION_CHANGE_DELEGATION_POOL = 42,
BN254_STRUCTURES = 43,
WEBAUTHN_SIGNATURE = 44,
Expand Down Expand Up @@ -216,14 +216,14 @@ impl Features {
/// Once enabled, Aggregator V2 functions become parallel.
pub fn is_aggregator_v2_delayed_fields_enabled(&self) -> bool {
// This feature depends on resource groups being split inside VMChange set,
// which is gated by RESOURCE_GROUPS_CHARGE_AS_SIZE_SUM feature, so
// which is gated by RESOURCE_GROUPS_SPLIT_IN_VM_CHANGE_SET feature, so
// require that feature to be enabled as well.
self.is_enabled(FeatureFlag::AGGREGATOR_V2_DELAYED_FIELDS)
&& self.is_resource_group_charge_as_size_sum_enabled()
&& self.is_resource_groups_split_in_vm_change_set_enabled()
}

pub fn is_resource_group_charge_as_size_sum_enabled(&self) -> bool {
self.is_enabled(FeatureFlag::RESOURCE_GROUPS_CHARGE_AS_SIZE_SUM)
pub fn is_resource_groups_split_in_vm_change_set_enabled(&self) -> bool {
self.is_enabled(FeatureFlag::RESOURCE_GROUPS_SPLIT_IN_VM_CHANGE_SET)
}
}

Expand Down
42 changes: 26 additions & 16 deletions vm/vm-runtime/src/data_cache.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,14 @@ use move_core_types::metadata::Metadata;
use move_core_types::resolver::{resource_size, ModuleResolver, ResourceResolver};
use move_core_types::value::MoveTypeLayout;
use move_table_extension::{TableHandle, TableResolver};
use starcoin_gas_schedule::LATEST_GAS_FEATURE_VERSION;
use starcoin_logger::prelude::*;
use starcoin_types::account_address::AccountAddress;
use starcoin_types::vm::config::starcoin_prod_deserializer_config;
use starcoin_vm_runtime_types::resolver::{
ExecutorView, ResourceGroupSize, TResourceGroupView, TResourceView,
};
use starcoin_vm_runtime_types::resource_group_adapter::ResourceGroupAdapter;
use starcoin_vm_types::on_chain_config::{Features, GasSchedule, OnChainConfig};
use starcoin_vm_types::state_store::{
errors::StateviewError, state_key::StateKey, state_storage_usage::StateStorageUsage,
state_value::StateValue, StateView, TStateView,
Expand Down Expand Up @@ -142,11 +143,11 @@ impl<'block, S: StateView> ModuleResolver for StateViewCache<'block, S> {
type Error = PartialVMError;

fn get_module_metadata(&self, module_id: &ModuleId) -> Vec<Metadata> {
StorageAdapter::new(self).get_module_metadata(module_id)
self.as_move_resolver().get_module_metadata(module_id)
}

fn get_module(&self, module_id: &ModuleId) -> Result<Option<Bytes>, Self::Error> {
StorageAdapter::new(self).get_module(module_id)
self.as_move_resolver().get_module(module_id)
}
}
impl<'block, S: StateView> ResourceResolver for StateViewCache<'block, S> {
Expand All @@ -159,22 +160,21 @@ impl<'block, S: StateView> ResourceResolver for StateViewCache<'block, S> {
metadata: &[Metadata],
layout: Option<&MoveTypeLayout>,
) -> Result<(Option<Bytes>, usize), Self::Error> {
StorageAdapter::new(self)
self.as_move_resolver()
.get_resource_bytes_with_metadata_and_layout(address, struct_tag, metadata, layout)
}
}

impl<'a, S: StateView> StorageAdapter<'a, S> {
pub fn new(state_store: &'a S) -> Self {
pub fn new(
state_store: &'a S,
deserializer_config: DeserializerConfig,
resource_group_view: ResourceGroupAdapter<'a>,
) -> Self {
Self {
executor_view: state_store,
_deserializer_config: DeserializerConfig::new(0, 0),
resource_group_view: ResourceGroupAdapter::new(
None,
state_store,
LATEST_GAS_FEATURE_VERSION,
false,
),
_deserializer_config: deserializer_config,
resource_group_view,
accessed_groups: RefCell::new(HashSet::new()),
}
}
Expand Down Expand Up @@ -317,7 +317,19 @@ pub trait AsMoveResolver<S> {

impl<S: StateView> AsMoveResolver<S> for S {
fn as_move_resolver(&self) -> StorageAdapter<S> {
StorageAdapter::new(self)
let features = Features::fetch_config(self).unwrap_or_default();
let deserializer_config = starcoin_prod_deserializer_config(&features);
assert!(!features.is_resource_groups_split_in_vm_change_set_enabled());

let gas_feature_version = GasSchedule::fetch_config(self).unwrap().feature_version;
let resource_group_adapter = ResourceGroupAdapter::new(
None,
self,
gas_feature_version,
// todo(simon): Currently it is disabled
features.is_resource_groups_split_in_vm_change_set_enabled(),
);
StorageAdapter::new(self, deserializer_config, resource_group_adapter)
}
}

Expand Down Expand Up @@ -459,8 +471,6 @@ pub(crate) mod tests {
resource_groups_split_in_vm_change_set_enabled,
);

// let features = Features::fetch_config(state_view).unwrap_or_default();
// let deserializer_config = aptos_prod_deserializer_config(&features);
StorageAdapter::new(state_view)
state_view.as_move_resolver()
}
}
6 changes: 3 additions & 3 deletions vm/vm-runtime/src/starcoin_vm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0

use crate::access_path_cache::AccessPathCache;
use crate::data_cache::{AsMoveResolver, StateViewCache, StorageAdapter};
use crate::data_cache::{AsMoveResolver, StateViewCache};
use crate::errors::{
convert_normal_success_epilogue_error, convert_prologue_runtime_error, error_split,
};
Expand Down Expand Up @@ -105,7 +105,7 @@ impl StarcoinVM {
});
let gas_params = StarcoinGasParameters::initial();
let native_params = gas_params.natives.clone();
let resolver = StorageAdapter::new(state);
let resolver = state.as_move_resolver();
let inner = MoveVmExt::new(
native_params.clone(),
gas_params.vm.misc.clone(),
Expand Down Expand Up @@ -211,7 +211,7 @@ impl StarcoinVM {
}

fn load_configs_impl<S: StateView>(&mut self, state: &S) -> Result<(), Error> {
let remote_storage = StorageAdapter::new(state);
let remote_storage = state.as_move_resolver();
self.version = Version::fetch_config(&remote_storage);
// move version can be none.
self.move_version = MoveLanguageVersion::fetch_config(&remote_storage);
Expand Down

0 comments on commit 232a7a0

Please sign in to comment.