casper_execution_engine/resolvers/
mod.rs

1//! This module is responsible for resolving host functions from within the WASM engine.
2pub mod error;
3pub mod memory_resolver;
4pub(crate) mod v1_function_index;
5mod v1_resolver;
6
7use casper_wasmi::ModuleImportResolver;
8
9use casper_types::ProtocolVersion;
10
11use self::error::ResolverError;
12use super::engine_state::EngineConfig;
13use crate::resolvers::memory_resolver::MemoryResolver;
14
15/// Creates a module resolver for given protocol version.
16///
17/// * `protocol_version` Version of the protocol. Can't be lower than 1.
18pub(crate) fn create_module_resolver(
19    _protocol_version: ProtocolVersion,
20    engine_config: &EngineConfig,
21) -> Result<impl ModuleImportResolver + MemoryResolver, ResolverError> {
22    Ok(v1_resolver::RuntimeModuleImportResolver::new(
23        engine_config.wasm_config().v1().max_memory(),
24    ))
25    // if in future it is necessary to pick a different resolver
26    // based on the protocol version, modify this logic accordingly
27    // if there is an unsupported / unknown protocol version return the following error:
28    // Err(ResolverError::UnknownProtocolVersion(protocol_version))
29}
30
31#[cfg(test)]
32mod tests {
33    use casper_types::ProtocolVersion;
34
35    use super::*;
36
37    #[test]
38    fn resolve_invalid_module() {
39        // NOTE: we are currently not enforcing underlying logic
40        assert!(
41            create_module_resolver(ProtocolVersion::default(), &EngineConfig::default()).is_ok()
42        );
43    }
44
45    #[test]
46    fn protocol_version_1_always_resolves() {
47        assert!(create_module_resolver(ProtocolVersion::V1_0_0, &EngineConfig::default()).is_ok());
48    }
49}