diff --git a/Cargo.lock b/Cargo.lock index 017690ce6e..762fdac1ea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1981,6 +1981,7 @@ dependencies = [ "serde_json", "starcoin-crypto", "starcoin-executor", + "starcoin-move-stdlib", "starcoin-state-api", "starcoin-types", "starcoin-vm-types", @@ -11150,9 +11151,11 @@ version = "0.1.1" dependencies = [ "dir-diff", "file_diff", + "include_dir", "move-core-types", "move-vm-runtime", "move-vm-types", + "once_cell", "sha2 0.9.9", "sha3", "smallvec 1.10.0", diff --git a/contrib-contracts/Cargo.toml b/contrib-contracts/Cargo.toml index 7c6f1399f5..d1f06ed06c 100644 --- a/contrib-contracts/Cargo.toml +++ b/contrib-contracts/Cargo.toml @@ -18,6 +18,7 @@ serde_json = { workspace = true } stdlib = { workspace = true } stest = { workspace = true } tempfile = { workspace = true } +starcoin-move-stdlib = { workspace = true } [package] authors = { workspace = true } diff --git a/contrib-contracts/src/merkle_distributor_test.rs b/contrib-contracts/src/merkle_distributor_test.rs index 824cf397d6..39db5dd1e0 100644 --- a/contrib-contracts/src/merkle_distributor_test.rs +++ b/contrib-contracts/src/merkle_distributor_test.rs @@ -10,8 +10,7 @@ use starcoin_vm_types::token::stc::stc_type_tag; use starcoin_vm_types::transaction::{EntryFunction, Package, TransactionPayload}; use starcoin_vm_types::value::MoveValue; use test_helper::executor::{ - association_execute, association_execute_should_success, compile_modules_with_address, - move_abort_code, prepare_genesis, + association_execute, association_execute_should_success, compile_modules_with_address, compile_modules_with_address_internal, move_abort_code, prepare_genesis }; #[derive(Serialize, Deserialize, Clone, Debug)] @@ -37,7 +36,12 @@ fn test_merkle_distributor() -> Result<()> { // deploy the module { let source = include_str!("../modules/MerkleDistributor.move"); - let modules = compile_modules_with_address(association_address(), source); + let mut source_files: Vec = starcoin_move_stdlib::MOVE_STDLIB_SOURCE_FILES.clone(); + let starcoin_stdlib_files: Vec = + starcoin_move_stdlib::STARCOIN_STDLIB_SOURCE_FILES.clone(); + source_files.extend(starcoin_stdlib_files); + + let modules = compile_modules_with_address_internal(association_address(), source, &source_files); let package = Package::new(modules, None)?; association_execute_should_success( diff --git a/test-helper/src/executor.rs b/test-helper/src/executor.rs index 037c78bbb7..8d7d2a31d6 100644 --- a/test-helper/src/executor.rs +++ b/test-helper/src/executor.rs @@ -109,10 +109,9 @@ pub fn get_balance(address: AccountAddress, chain_state: &S .expect("read balance resource should ok") } -pub fn compile_modules_with_address(address: AccountAddress, code: &str) -> Vec { - info!("YSG compile_modules_with_address: {:?}", stdlib_files()); +pub fn compile_modules_with_address_internal(address: AccountAddress, code: &str, libs: &Vec)-> Vec { let (_, compiled_result) = - starcoin_move_compiler::compile_source_string(code, &stdlib_files(), address) + starcoin_move_compiler::compile_source_string(code, libs, address) .expect("compile fail"); compiled_result @@ -121,6 +120,10 @@ pub fn compile_modules_with_address(address: AccountAddress, code: &str) -> Vec< .collect() } +pub fn compile_modules_with_address(address: AccountAddress, code: &str) -> Vec { + compile_modules_with_address_internal(address,code, &stdlib_files()) +} + pub fn compile_script(code: impl AsRef) -> Result> { let mut compile_unit = starcoin_move_compiler::compile_source_string_no_report( code.as_ref(), diff --git a/vm/framework/move-stdlib/Cargo.toml b/vm/framework/move-stdlib/Cargo.toml index 7e9575275a..c67b87a4e8 100644 --- a/vm/framework/move-stdlib/Cargo.toml +++ b/vm/framework/move-stdlib/Cargo.toml @@ -19,6 +19,8 @@ move-vm-types = { workspace = true } sha2 = "0.9.3" sha3 = "0.9.1" smallvec = "1.6.1" +include_dir = { workspace = true } +once_cell = { workspace = true } [dev-dependencies] dir-diff = "0.3.2" diff --git a/vm/framework/move-stdlib/src/lib.rs b/vm/framework/move-stdlib/src/lib.rs index c353dca86f..4a5430ce52 100644 --- a/vm/framework/move-stdlib/src/lib.rs +++ b/vm/framework/move-stdlib/src/lib.rs @@ -5,4 +5,48 @@ // Copyright (c) The Move Contributors // SPDX-License-Identifier: Apache-2.0 +use include_dir::{include_dir, Dir}; +use once_cell::sync::Lazy; +pub const MOVE_STDLIB_SOURCES_DIR: Dir = include_dir!("sources"); + +pub static MOVE_STDLIB_SOURCE_FILES: Lazy> = Lazy::new(|| { + MOVE_STDLIB_SOURCES_DIR + .files() + .iter() + .filter_map(|file| { + let ext = file.path().extension(); + if let Some(ext) = ext { + if ext == "move" { + Some(file.path().display().to_string()) + } else { + None + } + } else { + None + } + }) + .collect() +}); + +pub const STARCOIN_STDLIB_SOURCES_DIR: Dir = include_dir!("../../starcoin-stdlib/sources"); + +pub static STARCOIN_STDLIB_SOURCE_FILES: Lazy> = Lazy::new(|| { + STARCOIN_STDLIB_SOURCES_DIR + .files() + .iter() + .filter_map(|file| { + let ext = file.path().extension(); + if let Some(ext) = ext { + if ext == "move" { + Some(file.path().display().to_string()) + } else { + None + } + } else { + None + } + }) + .collect() +}); + pub mod natives;