Skip to content

Commit

Permalink
merge SessionAdapter to SessionExt
Browse files Browse the repository at this point in the history
* Rename SessionAdapter to SessionExt
* fix compiling errors
* remove VMAdapter trait
  • Loading branch information
simonjiao committed Oct 14, 2024
1 parent 23363d5 commit f24df10
Show file tree
Hide file tree
Showing 6 changed files with 83 additions and 143 deletions.
2 changes: 1 addition & 1 deletion vm/vm-runtime/src/parallel_executor/vm_wrapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
use crate::{
parallel_executor::{storage_wrapper::VersionedView, StarcoinTransactionOutput},
starcoin_vm::StarcoinVM,
vm_adapter::{PreprocessedTransaction, VMAdapter},
vm_adapter::PreprocessedTransaction,
};

use starcoin_parallel_executor::{
Expand Down
115 changes: 52 additions & 63 deletions vm/vm-runtime/src/starcoin_vm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ use crate::data_cache::{AsMoveResolver, RemoteStorage, StateViewCache};
use crate::errors::{
convert_normal_success_epilogue_error, convert_prologue_runtime_error, error_split,
};
use crate::move_vm_ext::{MoveVmExt, SessionId, StarcoinMoveResolver};
use crate::move_vm_ext::{MoveVmExt, SessionExt, SessionId, StarcoinMoveResolver};
use crate::vm_adapter::{
discard_error_output, discard_error_vm_status, PreprocessedTransaction,
PublishModuleBundleOption, SessionAdapter, VMAdapter,
PublishModuleBundleOption,
};
use anyhow::{bail, Error, Result};
use move_core_types::gas_algebra::{InternalGasPerByte, NumBytes};
Expand Down Expand Up @@ -38,32 +38,32 @@ use starcoin_types::{
TransactionPayload, TransactionStatus,
},
};
use starcoin_vm_types::access::{ModuleAccess, ScriptAccess};
use starcoin_vm_types::account_address::AccountAddress;
use starcoin_vm_types::account_config::{
core_code_address, genesis_address, upgrade::UpgradeEvent, ModuleUpgradeStrategy,
TwoPhaseUpgradeV2Resource, G_EPILOGUE_NAME, G_EPILOGUE_V2_NAME, G_PROLOGUE_NAME,
};
use starcoin_vm_types::errors::{Location, VMResult};
use starcoin_vm_types::file_format::{CompiledModule, CompiledScript};
use starcoin_vm_types::gas_schedule::G_LATEST_GAS_COST_TABLE;
use starcoin_vm_types::genesis_config::StdlibVersion;
use starcoin_vm_types::identifier::IdentStr;
use starcoin_vm_types::language_storage::{ModuleId, TypeTag};
use starcoin_vm_types::on_chain_config::{
FlexiDagConfig, GasSchedule, MoveLanguageVersion, OnChainConfig, VMConfig, Version,
G_GAS_CONSTANTS_IDENTIFIER, G_INSTRUCTION_SCHEDULE_IDENTIFIER, G_NATIVE_SCHEDULE_IDENTIFIER,
G_VM_CONFIG_IDENTIFIER,
use starcoin_vm_types::{
access::{ModuleAccess, ScriptAccess},
account_address::AccountAddress,
account_config::{
core_code_address, genesis_address, upgrade::UpgradeEvent, ModuleUpgradeStrategy,
TwoPhaseUpgradeV2Resource, G_EPILOGUE_NAME, G_EPILOGUE_V2_NAME, G_PROLOGUE_NAME,
},
errors::{Location, VMResult},
file_format::{CompiledModule, CompiledScript},
gas_schedule::G_LATEST_GAS_COST_TABLE,
genesis_config::StdlibVersion,
identifier::IdentStr,
language_storage::{ModuleId, TypeTag},
on_chain_config::{
FlexiDagConfig, GasSchedule, MoveLanguageVersion, OnChainConfig, VMConfig, Version,
G_GAS_CONSTANTS_IDENTIFIER, G_INSTRUCTION_SCHEDULE_IDENTIFIER,
G_NATIVE_SCHEDULE_IDENTIFIER, G_VM_CONFIG_IDENTIFIER,
},
state_store::{state_key::StateKey, StateView, TStateView},
state_view::StateReaderExt,
transaction::{DryRunTransaction, Package, TransactionPayloadType},
transaction_metadata::{TransactionMetadata, TransactionPayloadMetadata},
value::{serialize_values, MoveValue},
vm_status::{KeptVMStatus, StatusCode, VMStatus},
};
use starcoin_vm_types::state_store::{state_key::StateKey, StateView, TStateView};
use starcoin_vm_types::state_view::StateReaderExt;
use starcoin_vm_types::transaction::{DryRunTransaction, Package, TransactionPayloadType};
use starcoin_vm_types::transaction_metadata::{TransactionMetadata, TransactionPayloadMetadata};
use starcoin_vm_types::value::{serialize_values, MoveValue};
use starcoin_vm_types::vm_status::{KeptVMStatus, StatusCode, VMStatus};
use std::borrow::Borrow;
use std::cmp::min;
use std::sync::Arc;
use std::{borrow::Borrow, cmp::min, sync::Arc};

static EXECUTION_CONCURRENCY_LEVEL: OnceCell<usize> = OnceCell::new();

Expand Down Expand Up @@ -399,10 +399,9 @@ impl StarcoinVM {
) -> Result<(), VMStatus> {
let txn_data = TransactionMetadata::new(transaction)?;
let data_cache = remote_cache.as_move_resolver();
let mut session: SessionAdapter = self
let mut session = self
.move_vm
.new_session(&data_cache, SessionId::txn(transaction))
.into();
.new_session(&data_cache, SessionId::txn(transaction));
let gas_params = self.get_gas_parameters()?;
let mut gas_meter = StarcoinGasMeter::new(gas_params.clone(), txn_data.max_gas_amount());
gas_meter.set_metering(false);
Expand Down Expand Up @@ -550,7 +549,7 @@ impl StarcoinVM {

fn execute_package<S: StarcoinMoveResolver + StateView>(
&self,
mut session: SessionAdapter,
mut session: SessionExt,
gas_meter: &mut StarcoinGasMeter,
txn_data: &TransactionMetadata,
package: &Package,
Expand Down Expand Up @@ -661,7 +660,7 @@ impl StarcoinVM {

fn execute_script_or_script_function(
&self,
mut session: SessionAdapter,
mut session: SessionExt,
gas_meter: &mut StarcoinGasMeter,
txn_data: &TransactionMetadata,
payload: &TransactionPayload,
Expand Down Expand Up @@ -724,17 +723,15 @@ impl StarcoinVM {
}

fn validate_execute_entry_function(
session: &mut SessionAdapter,
session: &mut SessionExt,
module: &ModuleId,
function_name: &IdentStr,
ty_args: Vec<TypeTag>,
args: Vec<impl Borrow<[u8]>>,
gas_meter: &mut impl GasMeter,
sender: AccountAddress,
) -> VMResult<()> {
let loaded_func = session
.inner
.load_function(module, function_name, &ty_args)?;
let loaded_func = session.load_function(module, function_name, &ty_args)?;

verifier::transaction_arg_validation::validate_combine_singer_and_args(
session,
Expand All @@ -743,14 +740,14 @@ impl StarcoinVM {
&loaded_func,
)?;

let _final_args = SessionAdapter::check_and_rearrange_args_by_signer_position(
let _final_args = SessionExt::check_and_rearrange_args_by_signer_position(
loaded_func.borrow(),
args.iter().map(|b| b.borrow().to_vec()).collect(),
sender,
)?;

let tranversal_storage = TraversalStorage::new();
session.inner.execute_entry_function(
session.execute_entry_function(
loaded_func,
args,
gas_meter,
Expand All @@ -759,16 +756,14 @@ impl StarcoinVM {
}

fn validate_execute_script(
session: &mut SessionAdapter,
session: &mut SessionExt,
script: impl Borrow<[u8]>,
ty_args: Vec<TypeTag>,
args: Vec<impl Borrow<[u8]>>,
gas_meter: &mut impl GasMeter,
sender: AccountAddress,
) -> VMResult<()> {
let loaded_func = session
.inner
.load_script(script.borrow(), ty_args.as_ref())?;
let loaded_func = session.load_script(script.borrow(), ty_args.as_ref())?;

verifier::transaction_arg_validation::validate_combine_singer_and_args(
session,
Expand All @@ -777,14 +772,14 @@ impl StarcoinVM {
&loaded_func,
)?;

let _final_args = SessionAdapter::check_and_rearrange_args_by_signer_position(
let _final_args = SessionExt::check_and_rearrange_args_by_signer_position(
loaded_func.borrow(),
args.iter().map(|b| b.borrow().to_vec()).collect(),
sender,
)?;

let traversal_storage = TraversalStorage::new();
session.inner.execute_script(
session.execute_script(
script,
ty_args,
args,
Expand All @@ -797,7 +792,7 @@ impl StarcoinVM {
/// in the `ACCOUNT_MODULE` on chain.
fn run_prologue(
&self,
session: &mut SessionAdapter,
session: &mut SessionExt,
gas_meter: &mut StarcoinGasMeter,
txn_data: &TransactionMetadata,
) -> Result<(), VMStatus> {
Expand Down Expand Up @@ -829,7 +824,6 @@ impl StarcoinVM {
let traversal_storage = TraversalStorage::new();
// Run prologue by genesis account
session
.as_mut()
.execute_function_bypass_visibility(
&account_config::G_TRANSACTION_MANAGER_MODULE,
&G_PROLOGUE_NAME,
Expand Down Expand Up @@ -858,7 +852,7 @@ impl StarcoinVM {
/// in the `ACCOUNT_MODULE` on chain.
fn run_epilogue(
&self,
session: &mut SessionAdapter,
session: &mut SessionExt,
gas_meter: &mut StarcoinGasMeter,
txn_data: &TransactionMetadata,
success: bool,
Expand Down Expand Up @@ -925,7 +919,6 @@ impl StarcoinVM {
};
let traversal_storage = TraversalStorage::new();
session
.as_mut()
.execute_function_bypass_visibility(
&account_config::G_TRANSACTION_MANAGER_MODULE,
function_name,
Expand Down Expand Up @@ -990,10 +983,9 @@ impl StarcoinVM {
}
}
let args = serialize_values(&args_vec);
let mut session: SessionAdapter = self.move_vm.new_session(storage, session_id).into();
let mut session = self.move_vm.new_session(storage, session_id);
let traverse_storage = TraversalStorage::new();
session
.as_mut()
.execute_function_bypass_visibility(
&account_config::G_TRANSACTION_MANAGER_MODULE,
function_name,
Expand Down Expand Up @@ -1037,10 +1029,9 @@ impl StarcoinVM {
}
};

let session: SessionAdapter = self
let session = self
.move_vm
.new_session(storage, SessionId::txn_meta(&txn_data))
.into();
.new_session(storage, SessionId::txn_meta(&txn_data));
let mut gas_meter = StarcoinGasMeter::new(gas_params.clone(), txn_data.max_gas_amount());
gas_meter.set_metering(false);
// check signature
Expand Down Expand Up @@ -1116,8 +1107,7 @@ impl StarcoinVM {
};
let session = self
.move_vm
.new_session(storage, SessionId::txn_meta(&txn_data))
.into();
.new_session(storage, SessionId::txn_meta(&txn_data));
let mut gas_meter = StarcoinGasMeter::new(gas_params.clone(), txn_data.max_gas_amount());
gas_meter.set_metering(false);
let result = match txn.raw_txn.payload() {
Expand Down Expand Up @@ -1384,7 +1374,7 @@ impl StarcoinVM {

fn success_transaction_cleanup(
&self,
mut session: SessionAdapter,
mut session: SessionExt,
gas_meter: &mut StarcoinGasMeter,
txn_data: &TransactionMetadata,
) -> Result<(VMStatus, TransactionOutput), VMStatus> {
Expand All @@ -1411,10 +1401,9 @@ impl StarcoinVM {
storage: &S,
) -> (VMStatus, TransactionOutput) {
gas_meter.set_metering(false);
let mut session: SessionAdapter = self
let mut session = self
.move_vm
.new_session(storage, SessionId::txn_meta(txn_data))
.into();
.new_session(storage, SessionId::txn_meta(txn_data));

// init_script doesn't need run epilogue
if storage.is_genesis() {
Expand Down Expand Up @@ -1529,12 +1518,12 @@ pub fn chunk_block_transactions(txns: Vec<Transaction>) -> Vec<TransactionBlock>

pub(crate) fn charge_global_write_gas_usage(
gas_meter: &mut StarcoinGasMeter,
session: &SessionAdapter,
session: &SessionExt,
sender: &AccountAddress,
) -> Result<(), VMStatus> {
let write_set_gas = u64::from(gas_meter.cal_write_set_gas());
let total_cost = InternalGasPerByte::from(write_set_gas)
* NumBytes::new(session.as_ref().num_mutated_accounts(sender));
* NumBytes::new(session.num_mutated_accounts(sender));
#[cfg(testing)]
info!(
"charge_global_write_gas_usage {} {}",
Expand All @@ -1548,7 +1537,7 @@ pub(crate) fn charge_global_write_gas_usage(

pub(crate) fn get_transaction_output<A: AccessPathCache>(
ap_cache: &mut A,
session: SessionAdapter,
session: SessionExt,
gas_left: Gas,
max_gas_amount: Gas,
status: KeptVMStatus,
Expand Down Expand Up @@ -1651,7 +1640,7 @@ impl VMExecutor for StarcoinVM {
}
}

impl VMAdapter for StarcoinVM {
impl StarcoinVM {
fn should_restart_execution(output: &TransactionOutput) -> bool {
// XXX FIXME YSG if GasSchedule.move UpgradeEvent
for event in output.events() {
Expand Down
16 changes: 8 additions & 8 deletions vm/vm-runtime/src/verifier/transaction_arg_validation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
// see implementation in `aptos-core`
// https://github.com/aptos-labs/aptos-core/blob/3af88bc872221c4958e6163660c60bc07bf53d38/aptos-move/aptos-vm/src/verifier/transaction_arg_validation.rs#L1

use crate::vm_adapter::SessionAdapter;
use crate::move_vm_ext::SessionExt;
use move_binary_format::errors::{Location, PartialVMError, VMError, VMResult};
use move_binary_format::file_format::FunctionDefinitionIndex;
use move_binary_format::file_format_common::read_uleb128_as_u64;
Expand Down Expand Up @@ -86,12 +86,12 @@ fn get_allowed_structs() -> &'static ConstructorMap {
/// 3. check arg types are allowed after signers
///
pub(crate) fn validate_combine_singer_and_args(
session: &mut SessionAdapter,
session: &mut SessionExt,
senders: Vec<AccountAddress>,
args: &[impl Borrow<[u8]>],
func: &LoadedFunction,
) -> VMResult<()> {
SessionAdapter::check_script_return(func.return_tys())?;
SessionExt::check_script_return(func.return_tys())?;

let mut signer_param_cnt = 0;
// find all signer params at the beginning
Expand Down Expand Up @@ -166,7 +166,7 @@ pub(crate) fn validate_combine_singer_and_args(

// Return whether the argument is valid/allowed and whether it needs construction.
pub(crate) fn is_valid_txn_arg(
session: &SessionAdapter,
session: &SessionExt,
typ: &Type,
allowed_structs: &ConstructorMap,
) -> bool {
Expand All @@ -191,7 +191,7 @@ pub(crate) fn is_valid_txn_arg(
// construct arguments that require so.
// TODO: This needs a more solid story and a tighter integration with the VM.
pub(crate) fn construct_args(
session: &mut SessionAdapter,
session: &mut SessionExt,
types: &[Type],
args: &[impl Borrow<[u8]>],
ty_args: &[Type],
Expand Down Expand Up @@ -226,7 +226,7 @@ fn invalid_signature() -> VMError {
}

fn construct_arg(
session: &mut SessionAdapter,
session: &mut SessionExt,
ty: &Type,
allowed_structs: &ConstructorMap,
arg: Vec<u8>,
Expand Down Expand Up @@ -279,7 +279,7 @@ fn construct_arg(
// are parsing the BCS serialized implicit constructor invocation tree, while serializing the
// constructed types into the output parameter arg.
pub(crate) fn recursively_construct_arg(
session: &mut SessionAdapter,
session: &mut SessionExt,
ty: &Type,
allowed_structs: &ConstructorMap,
cursor: &mut Cursor<&[u8]>,
Expand Down Expand Up @@ -349,7 +349,7 @@ pub(crate) fn recursively_construct_arg(
// said struct as a parameter. In this function we execute the constructor constructing the
// value and returning the BCS serialized representation.
fn validate_and_construct(
session: &mut SessionAdapter,
session: &mut SessionExt,
expected_type: &Type,
constructor: &FunctionId,
allowed_structs: &ConstructorMap,
Expand Down
Loading

0 comments on commit f24df10

Please sign in to comment.