parent
1046c5e32c
commit
c3a941086d
|
@ -1,4 +1,4 @@
|
|||
#![allow(dead_code)]
|
||||
//! Helpers to create Libra accounts for testing
|
||||
|
||||
use crate::data_store::DataStore;
|
||||
use compiler::Compiler;
|
||||
|
@ -78,6 +78,7 @@ impl LibraAccountState {
|
|||
let arena = Arena::new();
|
||||
let state_view = DataStore::default();
|
||||
let vm_cache = VMModuleCache::new(&arena);
|
||||
// Libra enforces the mint address to be 0x0 (see Libra's `mint_to_address` function)
|
||||
let mint_address = AccountAddress::default();
|
||||
// TODO: Need this?
|
||||
let genesis_auth_key = ByteArray::new(mint_address.to_vec());
|
||||
|
|
|
@ -44,7 +44,7 @@ impl DataStore {
|
|||
}
|
||||
|
||||
/// Returns a `WriteSet` for each account in the `DataStore`
|
||||
pub fn into_write_sets(mut self) -> HashMap<AccountAddress, WriteSet> {
|
||||
pub fn into_write_sets(mut self) -> Result<HashMap<AccountAddress, WriteSet>> {
|
||||
let mut write_set_muts: HashMap<AccountAddress, WriteSetMut> = HashMap::new();
|
||||
for (access_path, value) in self.data.drain() {
|
||||
match write_set_muts.get_mut(&access_path.address) {
|
||||
|
@ -60,9 +60,9 @@ impl DataStore {
|
|||
// Freeze each WriteSet
|
||||
let mut write_sets: HashMap<AccountAddress, WriteSet> = HashMap::new();
|
||||
for (address, write_set_mut) in write_set_muts.drain() {
|
||||
write_sets.insert(address, write_set_mut.freeze().unwrap());
|
||||
write_sets.insert(address, write_set_mut.freeze()?);
|
||||
}
|
||||
write_sets
|
||||
Ok(write_sets)
|
||||
}
|
||||
|
||||
/// Read an account's resource
|
||||
|
|
|
@ -86,7 +86,13 @@ impl MoveProcessor {
|
|||
}
|
||||
fn map_vm_binary_error(err: vm::errors::BinaryError) -> InstructionError {
|
||||
debug!("Error: Script deserialize failed: {:?}", err);
|
||||
InstructionError::GenericError
|
||||
InstructionError::InvalidInstructionData
|
||||
}
|
||||
fn map_vm_verification_error(
|
||||
err: std::vec::Vec<vm::errors::VerificationStatus>,
|
||||
) -> InstructionError {
|
||||
debug!("Error: Script verification failed: {:?}", err);
|
||||
InstructionError::InvalidInstructionData
|
||||
}
|
||||
#[allow(clippy::needless_pass_by_value)]
|
||||
fn map_data_error(err: std::boxed::Box<bincode::ErrorKind>) -> InstructionError {
|
||||
|
@ -238,9 +244,8 @@ impl MoveProcessor {
|
|||
let mut data_store = Self::keyed_accounts_to_data_store(&keyed_accounts[GENESIS_INDEX..])?;
|
||||
|
||||
let (verified_script, modules) =
|
||||
// TODO: This function calls `.expect()`, switch to verify_program
|
||||
static_verify_program(&invoke_info.sender_address, compiled_script, modules)
|
||||
.expect("verification failure");
|
||||
static_verify_program(&invoke_info.sender_address, compiled_script, modules)
|
||||
.map_err(Self::map_vm_verification_error)?;
|
||||
let output = Self::execute(invoke_info, verified_script, modules, &data_store)?;
|
||||
for event in output.events() {
|
||||
trace!("Event: {:?}", event);
|
||||
|
@ -248,7 +253,9 @@ impl MoveProcessor {
|
|||
data_store.apply_write_set(&output.write_set());
|
||||
|
||||
// Break data store into a list of address keyed WriteSets
|
||||
let mut write_sets = data_store.into_write_sets();
|
||||
let mut write_sets = data_store
|
||||
.into_write_sets()
|
||||
.map_err(|_| InstructionError::GenericError)?;
|
||||
|
||||
// Genesis account holds both mint and stdlib under address 0x0
|
||||
let write_set = write_sets
|
||||
|
|
Loading…
Reference in New Issue