1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
pub mod stdlib;
pub mod transaction_scripts;
use lazy_static::lazy_static;
use solana_libra_bytecode_verifier::{verify_module_dependencies, VerifiedModule};
use solana_libra_ir_to_bytecode::compiler::compile_module;
use solana_libra_types::{account_address::AccountAddress, account_config};
lazy_static! {
static ref STDLIB_MODULES: Vec<VerifiedModule> =
build_stdlib(account_config::core_code_address());
}
pub fn stdlib_modules() -> &'static [VerifiedModule] {
&*STDLIB_MODULES
}
pub fn build_stdlib(address: AccountAddress) -> Vec<VerifiedModule> {
let mut stdlib_modules = vec![];
for module_def in stdlib::module_defs() {
let compiled_module = compile_module(address, (*module_def).clone(), &stdlib_modules)
.expect("stdlib module failed to compile");
let verified_module =
VerifiedModule::new(compiled_module).expect("stdlib module failed to verify");
let verification_errors = verify_module_dependencies(&verified_module, &stdlib_modules);
for e in &verification_errors {
println!("{:?}", e);
}
assert!(verification_errors.is_empty());
stdlib_modules.push(verified_module);
}
stdlib_modules
}