Remove more unwraps (#5267)

automerge
This commit is contained in:
Jack May 2019-07-24 12:30:43 -07:00 committed by Grimes
parent 1046c5e32c
commit c3a941086d
3 changed files with 17 additions and 9 deletions

View File

@ -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());

View File

@ -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

View File

@ -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