3
Cargo.lock
generated
3
Cargo.lock
generated
@ -4214,6 +4214,8 @@ dependencies = [
|
|||||||
"bincode 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"num-derive 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_bytes 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_bytes 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -4231,6 +4233,7 @@ dependencies = [
|
|||||||
"solana_libra_vm_cache_map 0.0.1-sol4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"solana_libra_vm_cache_map 0.0.1-sol4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana_libra_vm_runtime 0.0.1-sol4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"solana_libra_vm_runtime 0.0.1-sol4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana_libra_vm_runtime_types 0.0.1-sol4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"solana_libra_vm_runtime_types 0.0.1-sol4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"thiserror 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
11
programs/move_loader/Cargo.lock
generated
11
programs/move_loader/Cargo.lock
generated
@ -1017,7 +1017,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memmap"
|
name = "memmap"
|
||||||
version = "0.6.2"
|
version = "0.7.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -2097,10 +2097,10 @@ name = "solana-move-loader-program"
|
|||||||
version = "0.24.0"
|
version = "0.24.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"num-derive 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_bytes 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_bytes 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -2118,6 +2118,7 @@ dependencies = [
|
|||||||
"solana_libra_vm_cache_map 0.0.1-sol4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"solana_libra_vm_cache_map 0.0.1-sol4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana_libra_vm_runtime 0.0.1-sol4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"solana_libra_vm_runtime 0.0.1-sol4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana_libra_vm_runtime_types 0.0.1-sol4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"solana_libra_vm_runtime_types 0.0.1-sol4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"thiserror 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -2135,7 +2136,7 @@ dependencies = [
|
|||||||
"hmac 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"hmac 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"memmap 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"num-derive 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"num-derive 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pbkdf2 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pbkdf2 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -3378,7 +3379,7 @@ dependencies = [
|
|||||||
"checksum mach_o_sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3e854583a83f20cf329bb9283366335387f7db59d640d1412167e05fedb98826"
|
"checksum mach_o_sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3e854583a83f20cf329bb9283366335387f7db59d640d1412167e05fedb98826"
|
||||||
"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
|
"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
|
||||||
"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
|
"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
|
||||||
"checksum memmap 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2ffa2c986de11a9df78620c01eeaaf27d94d3ff02bf81bfcca953102dd0c6ff"
|
"checksum memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b"
|
||||||
"checksum memoffset 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ce6075db033bbbb7ee5a0bbd3a3186bbae616f57fb001c485c7ff77955f8177f"
|
"checksum memoffset 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ce6075db033bbbb7ee5a0bbd3a3186bbae616f57fb001c485c7ff77955f8177f"
|
||||||
"checksum memsec 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ccabb92f665f997bcb4f3ade019a8e07315148d8bcef3e65fbc5dbd65a22eb04"
|
"checksum memsec 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ccabb92f665f997bcb4f3ade019a8e07315148d8bcef3e65fbc5dbd65a22eb04"
|
||||||
"checksum mime 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "dd1d63acd1b78403cc0c325605908475dd9b9a3acbf65ed8bcab97e27014afcf"
|
"checksum mime 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "dd1d63acd1b78403cc0c325605908475dd9b9a3acbf65ed8bcab97e27014afcf"
|
||||||
|
@ -23,8 +23,11 @@ bytecode_verifier = { version = "0.0.1-sol4", package = "solana_libra_bytecode_v
|
|||||||
canonical_serialization = { version = "0.0.1-sol4", package = "solana_libra_canonical_serialization" }
|
canonical_serialization = { version = "0.0.1-sol4", package = "solana_libra_canonical_serialization" }
|
||||||
compiler = { version = "0.0.1-sol4", package = "solana_libra_compiler" }
|
compiler = { version = "0.0.1-sol4", package = "solana_libra_compiler" }
|
||||||
failure = { version = "0.0.1-sol4", package = "solana_libra_failure_ext" }
|
failure = { version = "0.0.1-sol4", package = "solana_libra_failure_ext" }
|
||||||
|
num-derive = { version = "0.3" }
|
||||||
|
num-traits = { version = "0.2" }
|
||||||
state_view = { version = "0.0.1-sol4", package = "solana_libra_state_view" }
|
state_view = { version = "0.0.1-sol4", package = "solana_libra_state_view" }
|
||||||
stdlib = { version = "0.0.1-sol4", package = "solana_libra_stdlib" }
|
stdlib = { version = "0.0.1-sol4", package = "solana_libra_stdlib" }
|
||||||
|
thiserror = "1.0"
|
||||||
types = { version = "0.0.1-sol4", package = "solana_libra_types" }
|
types = { version = "0.0.1-sol4", package = "solana_libra_types" }
|
||||||
vm = { version = "0.0.1-sol4", package = "solana_libra_vm" }
|
vm = { version = "0.0.1-sol4", package = "solana_libra_vm" }
|
||||||
vm_cache_map = { version = "0.0.1-sol4", package = "solana_libra_vm_cache_map" }
|
vm_cache_map = { version = "0.0.1-sol4", package = "solana_libra_vm_cache_map" }
|
||||||
|
@ -65,7 +65,9 @@ impl DataStore {
|
|||||||
/// Read an account's resource
|
/// Read an account's resource
|
||||||
pub fn read_account_resource(&self, addr: &AccountAddress) -> Option<AccountResource> {
|
pub fn read_account_resource(&self, addr: &AccountAddress) -> Option<AccountResource> {
|
||||||
let access_path = create_access_path(&addr, account_config::account_struct_tag());
|
let access_path = create_access_path(&addr, account_config::account_struct_tag());
|
||||||
self.data.get(&access_path).and_then(|blob| { SimpleDeserializer::deserialize(blob).ok() })
|
self.data
|
||||||
|
.get(&access_path)
|
||||||
|
.and_then(|blob| SimpleDeserializer::deserialize(blob).ok())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sets a (key, value) pair within this data store.
|
/// Sets a (key, value) pair within this data store.
|
||||||
|
@ -42,6 +42,6 @@ pub fn map_err_vm_status(status: VMStatus) -> InstructionError {
|
|||||||
// The only defined StatusCode that fails is StatusCode::UNKNOWN_ERROR
|
// The only defined StatusCode that fails is StatusCode::UNKNOWN_ERROR
|
||||||
match <StatusCode as Into<u64>>::into(status.major_status).try_into() {
|
match <StatusCode as Into<u64>>::into(status.major_status).try_into() {
|
||||||
Ok(u) => InstructionError::CustomError(u),
|
Ok(u) => InstructionError::CustomError(u),
|
||||||
Err(_) => InstructionError::GenericError,
|
Err(_) => InstructionError::InvalidError,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,16 +3,19 @@ use crate::data_store::DataStore;
|
|||||||
use crate::error_mappers::*;
|
use crate::error_mappers::*;
|
||||||
use bytecode_verifier::verifier::{VerifiedModule, VerifiedScript};
|
use bytecode_verifier::verifier::{VerifiedModule, VerifiedScript};
|
||||||
use log::*;
|
use log::*;
|
||||||
|
use num_derive::{FromPrimitive, ToPrimitive};
|
||||||
use serde_derive::{Deserialize, Serialize};
|
use serde_derive::{Deserialize, Serialize};
|
||||||
use solana_sdk::{
|
use solana_sdk::{
|
||||||
account::KeyedAccount,
|
account::KeyedAccount,
|
||||||
account_utils::State,
|
account_utils::State,
|
||||||
instruction::InstructionError,
|
instruction::InstructionError,
|
||||||
move_loader::id,
|
move_loader::id,
|
||||||
|
program_utils::DecodeError,
|
||||||
program_utils::{is_executable, limited_deserialize, next_keyed_account},
|
program_utils::{is_executable, limited_deserialize, next_keyed_account},
|
||||||
pubkey::Pubkey,
|
pubkey::Pubkey,
|
||||||
sysvar::rent,
|
sysvar::rent,
|
||||||
};
|
};
|
||||||
|
use thiserror::Error;
|
||||||
use types::{
|
use types::{
|
||||||
account_address::AccountAddress,
|
account_address::AccountAddress,
|
||||||
account_config,
|
account_config,
|
||||||
@ -36,6 +39,20 @@ use vm_runtime::{
|
|||||||
};
|
};
|
||||||
use vm_runtime_types::value::Value;
|
use vm_runtime_types::value::Value;
|
||||||
|
|
||||||
|
#[derive(Error, Debug, Serialize, Clone, PartialEq, FromPrimitive, ToPrimitive)]
|
||||||
|
pub enum MoveError {
|
||||||
|
#[error("Invalid Move data store")]
|
||||||
|
InvalidDataStore,
|
||||||
|
#[error("Invaid Move script")]
|
||||||
|
InvalidScript,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T> DecodeError<T> for MoveError {
|
||||||
|
fn type_of() -> &'static str {
|
||||||
|
"MoveError"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Instruction data passed to perform a loader operation, must be based
|
/// Instruction data passed to perform a loader operation, must be based
|
||||||
/// on solana_sdk::loader_instruction::LoaderInstruction
|
/// on solana_sdk::loader_instruction::LoaderInstruction
|
||||||
#[derive(Serialize, Deserialize, Debug)]
|
#[derive(Serialize, Deserialize, Debug)]
|
||||||
@ -210,7 +227,7 @@ impl MoveProcessor {
|
|||||||
) -> Result<(), InstructionError> {
|
) -> Result<(), InstructionError> {
|
||||||
let mut write_sets = data_store
|
let mut write_sets = data_store
|
||||||
.into_write_sets()
|
.into_write_sets()
|
||||||
.map_err(|_| InstructionError::GenericError)?;
|
.map_err(|_| MoveError::InvalidDataStore)?;
|
||||||
|
|
||||||
let mut keyed_accounts_iter = keyed_accounts.iter();
|
let mut keyed_accounts_iter = keyed_accounts.iter();
|
||||||
|
|
||||||
@ -249,7 +266,7 @@ impl MoveProcessor {
|
|||||||
}
|
}
|
||||||
if !write_sets.is_empty() {
|
if !write_sets.is_empty() {
|
||||||
debug!("Error: Missing keyed accounts");
|
debug!("Error: Missing keyed accounts");
|
||||||
return Err(InstructionError::GenericError);
|
return Err(InstructionError::NotEnoughAccountKeys);
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -302,7 +319,7 @@ impl MoveProcessor {
|
|||||||
Ok(script) => script,
|
Ok(script) => script,
|
||||||
Err((_, errors)) => {
|
Err((_, errors)) => {
|
||||||
if errors.is_empty() {
|
if errors.is_empty() {
|
||||||
return Err(InstructionError::GenericError);
|
return Err(MoveError::InvalidScript.into());
|
||||||
} else {
|
} else {
|
||||||
return Err(map_err_vm_status(errors[0].clone()));
|
return Err(map_err_vm_status(errors[0].clone()));
|
||||||
}
|
}
|
||||||
@ -333,7 +350,7 @@ impl MoveProcessor {
|
|||||||
|
|
||||||
let mut write_sets = data_store
|
let mut write_sets = data_store
|
||||||
.into_write_sets()
|
.into_write_sets()
|
||||||
.map_err(|_| InstructionError::GenericError)?;
|
.map_err(|_| MoveError::InvalidDataStore)?;
|
||||||
|
|
||||||
let write_set = write_sets
|
let write_set = write_sets
|
||||||
.remove(&pubkey_to_address(finalized.unsigned_key()))
|
.remove(&pubkey_to_address(finalized.unsigned_key()))
|
||||||
@ -345,7 +362,7 @@ impl MoveProcessor {
|
|||||||
|
|
||||||
if !write_sets.is_empty() {
|
if !write_sets.is_empty() {
|
||||||
debug!("Error: Missing keyed accounts");
|
debug!("Error: Missing keyed accounts");
|
||||||
return Err(InstructionError::GenericError);
|
return Err(InstructionError::NotEnoughAccountKeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
info!("Finalize module: {:?}", finalized.unsigned_key());
|
info!("Finalize module: {:?}", finalized.unsigned_key());
|
||||||
|
Reference in New Issue
Block a user