mirror of
https://github.com/fluencelabs/aquavm
synced 2025-03-15 12:30:50 +00:00
* feat(avm-server)!: keypair and particle ID arguments Add `&fluence_keypair::KeyPair` argument to `AVM::call` and `AVMRunner::call`. This value is further forwarded in a deconstructed form to WASM Air interpreter, but is not used there yet. Also, `AVMRunner::call` gets `particle_id: String` argument. feat(air-interpreter)!: `invoke` methods have three new arguments: `key_format: u8`, `secret_key_bytes: Vec<u8>` and `paritcle_id: String`. feat(aquavm-air): `air::execute_air` has two three arguments: `key_format: u8`, `secret_key_bytes: Vec<u8>` and `paritcle_id: String`. feat(aquavm-air-cli)!: add `--random-key`/`--ed25519-key file` options to AIR CLI. * feat(avm-server)!: Add `RunnerError::KeypairError` * chore(bench): Add signature performance benchmarks These benchmarks contain valid signature, so they should work with verification out of the box. --------- Co-authored-by: Artsiom Shamsutdzinau <shamsartem@gmail.com> Co-authored-by: folex <0xdxdy@gmail.com>
80 lines
2.7 KiB
Rust
80 lines
2.7 KiB
Rust
/*
|
|
* Copyright 2020 Fluence Labs Limited
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
pub use avm_interface::CallSeDeErrors;
|
|
use avm_interface::ErrorAVMOutcome;
|
|
use marine::IValue;
|
|
use marine::MarineError;
|
|
|
|
use serde_json::Error as SerdeError;
|
|
use thiserror::Error as ThisError;
|
|
|
|
use std::io::Error as IOError;
|
|
use std::path::PathBuf;
|
|
|
|
#[derive(Debug, ThisError)]
|
|
pub enum AVMError<E> {
|
|
/// This error contains interpreter outcome in case when execution failed on the interpreter
|
|
/// side. A host should match on this error type explicitly to save provided data.
|
|
#[error("interpreter failed with: {0:?}")]
|
|
InterpreterFailed(ErrorAVMOutcome),
|
|
|
|
/// This errors are encountered from an AVM runner.
|
|
#[error(transparent)]
|
|
RunnerError(RunnerError),
|
|
|
|
/// This errors are encountered from a data store object.
|
|
#[error(transparent)]
|
|
DataStoreError(#[from] E),
|
|
|
|
/// This errors are encountered from serialization of data tracked during an anomaly.
|
|
#[error(transparent)]
|
|
AnomalyDataSeError(SerdeError),
|
|
}
|
|
|
|
#[derive(Debug, ThisError)]
|
|
pub enum RunnerError {
|
|
/// This errors are encountered from FaaS.
|
|
#[error(transparent)]
|
|
MarineError(#[from] MarineError),
|
|
|
|
/// Specified path to AIR interpreter .wasm file was invalid
|
|
#[error("path to AIR interpreter .wasm ({invalid_path:?}) is invalid: {reason}; IO Error: {io_error:?}")]
|
|
InvalidAIRPath {
|
|
invalid_path: PathBuf,
|
|
io_error: Option<IOError>,
|
|
reason: &'static str,
|
|
},
|
|
|
|
/// AIR interpreter result deserialization errors.
|
|
#[error("{0}")]
|
|
InterpreterResultDeError(String),
|
|
|
|
/// Marine call returns Vec<IValue> to support multi-value in a future,
|
|
/// but actually now it could return empty vec or a vec with one value.
|
|
/// This error is encountered when it returns vec with not a one value.
|
|
#[error("result `{0:?}` returned from Marine should contain only one element")]
|
|
IncorrectInterpreterResult(Vec<IValue>),
|
|
|
|
/// This errors are encountered from an call results/params se/de.
|
|
#[error(transparent)]
|
|
CallSeDeErrors(#[from] CallSeDeErrors),
|
|
|
|
/// Invalid secret key.
|
|
#[error(transparent)]
|
|
KeyError(eyre::Error),
|
|
}
|