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
use crate::errors::*;
use types::transaction::{Program, TransactionArgument};
use vm::file_format::CompiledProgram;
pub fn serialize_program(program: &CompiledProgram) -> Result<(Vec<u8>, Vec<Vec<u8>>)> {
let mut script_blob = vec![];
program.script.serialize(&mut script_blob)?;
let module_blobs = program
.modules
.iter()
.map(|m| {
let mut module_blob = vec![];
m.serialize(&mut module_blob)?;
Ok(module_blob)
})
.collect::<Result<Vec<_>>>()?;
Ok((script_blob, module_blobs))
}
pub fn make_transaction_program(
program: &CompiledProgram,
args: &[TransactionArgument],
) -> Result<Program> {
let (script_blob, module_blobs) = serialize_program(program)?;
Ok(Program::new(script_blob, module_blobs, args.to_vec()))
}