From 78c45768627e42918b51f0a480c28fb43503473d Mon Sep 17 00:00:00 2001 From: Ivan Boldyrev Date: Wed, 7 Feb 2024 17:30:46 +0100 Subject: [PATCH] Get rid of RawValue It is not needed anymore --- .../execution_context/cid_state.rs | 13 +++--- .../features/signatures/corruption.rs | 2 +- .../uncatchable_trace_unrelated.rs | 5 +-- .../air-lib/interpreter-data/src/cid_info.rs | 6 +-- .../air-lib/interpreter-data/src/cid_store.rs | 19 -------- .../interpreter-data/src/executed_state.rs | 5 +-- .../src/executed_state/impls.rs | 5 +-- crates/air-lib/interpreter-data/src/lib.rs | 2 - .../air-lib/interpreter-data/src/raw_value.rs | 45 ------------------- .../air-lib/test-utils/src/executed_state.rs | 14 +++--- 10 files changed, 20 insertions(+), 96 deletions(-) delete mode 100644 crates/air-lib/interpreter-data/src/raw_value.rs diff --git a/air/src/execution_step/execution_context/cid_state.rs b/air/src/execution_step/execution_context/cid_state.rs index 27960505..2b1431f8 100644 --- a/air/src/execution_step/execution_context/cid_state.rs +++ b/air/src/execution_step/execution_context/cid_state.rs @@ -24,7 +24,6 @@ use air_interpreter_data::CanonCidAggregate; use air_interpreter_data::CanonResultCidAggregate; use air_interpreter_data::CidInfo; use air_interpreter_data::CidTracker; -use air_interpreter_data::RawValue; use air_interpreter_data::ServiceResultCidAggregate; use air_interpreter_data::TracePos; use polyplets::SecurityTetraplet; @@ -33,7 +32,7 @@ use std::rc::Rc; #[derive(Debug, Default, Clone)] pub struct ExecutionCidState { - pub value_tracker: CidTracker, + pub value_tracker: CidTracker, pub tetraplet_tracker: CidTracker, pub canon_element_tracker: CidTracker, pub canon_result_tracker: CidTracker, @@ -73,8 +72,7 @@ impl ExecutionCidState { tetraplet: RcSecurityTetraplet, argument_hash: Rc, ) -> Result, UncatchableError> { - let vm_value = RawValue::from_value(value); - let value_cid = self.value_tracker.track_raw_value(vm_value); + let value_cid = self.value_tracker.track_value(value)?; let tetraplet_cid = self.tetraplet_tracker.track_value(tetraplet)?; let service_result_agg = ServiceResultCidAggregate::new(value_cid, argument_hash, tetraplet_cid); @@ -87,8 +85,7 @@ impl ExecutionCidState { &mut self, canon_value: &ValueAggregate, ) -> Result, UncatchableError> { - let vm_value = RawValue::from_value(canon_value.get_result().clone()); - let value_cid = self.value_tracker.track_raw_value(vm_value); + let value_cid = self.value_tracker.track_value(canon_value.get_result().clone())?; let tetraplet = self.tetraplet_tracker.track_value(canon_value.get_tetraplet())?; let canon_value_aggregate = CanonCidAggregate::new(value_cid, tetraplet, canon_value.get_provenance()); @@ -97,11 +94,11 @@ impl ExecutionCidState { .map_err(UncatchableError::from) } - pub(crate) fn get_value_by_cid(&self, cid: &CID) -> Result { + pub(crate) fn get_value_by_cid(&self, cid: &CID) -> Result { self.value_tracker .get(cid) + .map(|v| (*v).clone()) .ok_or_else(|| UncatchableError::ValueForCidNotFound("value", cid.get_inner())) - .map(|vm_value| vm_value.get_value()) } pub(crate) fn get_tetraplet_by_cid( diff --git a/air/tests/test_module/features/signatures/corruption.rs b/air/tests/test_module/features/signatures/corruption.rs index 1f232cc7..42605d9a 100644 --- a/air/tests/test_module/features/signatures/corruption.rs +++ b/air/tests/test_module/features/signatures/corruption.rs @@ -96,7 +96,7 @@ fn test_attack_replace_value() { PreparationError::CidStoreVerificationError( CidVerificationError::ValueMismatch { // fragile: it is OK if this exact string changes on compiler upgrade - type_name: "air_interpreter_data::raw_value::RawValue", + type_name: "air_interpreter_value::JValue", cid_repr: "bagaaihrayhxgqijfajraxivb7hxwshhbsdqk4j5zyqypb54zggmn5v7mmwxq".into(), } .into() diff --git a/air/tests/test_module/negative_tests/uncatchable_trace_unrelated.rs b/air/tests/test_module/negative_tests/uncatchable_trace_unrelated.rs index c09b2585..87e57d57 100644 --- a/air/tests/test_module/negative_tests/uncatchable_trace_unrelated.rs +++ b/air/tests/test_module/negative_tests/uncatchable_trace_unrelated.rs @@ -17,7 +17,6 @@ use air::interpreter_data::ExecutedState; use air::ExecutionCidState; use air::UncatchableError::*; -use air_interpreter_data::RawValue; use air_interpreter_data::ValueRef; use air_test_framework::AirScriptExecutor; use air_test_utils::prelude::*; @@ -140,9 +139,7 @@ fn malformed_call_service_failed() { // Craft an artificial incorrect error result let value = json!("error"); - let value_cid = cid_state - .value_tracker - .track_raw_value(RawValue::from_value(value.clone())); + let value_cid = cid_state.value_tracker.track_value(value.clone()); let tetraplet = SecurityTetraplet::literal_tetraplet(peer_id); let tetraplet_cid = cid_state.tetraplet_tracker.track_value(tetraplet).unwrap(); let service_result_agg = ServiceResultCidAggregate { diff --git a/crates/air-lib/interpreter-data/src/cid_info.rs b/crates/air-lib/interpreter-data/src/cid_info.rs index 2bb8e035..7f3293cb 100644 --- a/crates/air-lib/interpreter-data/src/cid_info.rs +++ b/crates/air-lib/interpreter-data/src/cid_info.rs @@ -19,9 +19,9 @@ use crate::CidStoreVerificationError; use crate::CanonCidAggregate; use crate::CanonResultCidAggregate; -use crate::RawValue; use crate::ServiceResultCidAggregate; +use air_interpreter_value::JValue; use polyplets::SecurityTetraplet; use serde::Deserialize; use serde::Serialize; @@ -40,7 +40,7 @@ use serde::Serialize; #[archive(check_bytes)] pub struct CidInfo { /// Map CID to value. - pub value_store: CidStore, + pub value_store: CidStore, /// Map CID to a tetraplet. pub tetraplet_store: CidStore, @@ -68,7 +68,7 @@ impl CidInfo { } fn verify_value_store(&self) -> Result<(), CidStoreVerificationError> { - self.value_store.verify_raw_value() + self.value_store.verify() } fn verify_tetraplet_store(&self) -> Result<(), CidStoreVerificationError> { diff --git a/crates/air-lib/interpreter-data/src/cid_store.rs b/crates/air-lib/interpreter-data/src/cid_store.rs index df4562c1..7ef8fb54 100644 --- a/crates/air-lib/interpreter-data/src/cid_store.rs +++ b/crates/air-lib/interpreter-data/src/cid_store.rs @@ -15,7 +15,6 @@ */ use crate::JValue; -use crate::RawValue; use air_interpreter_cid::value_to_json_cid; use air_interpreter_cid::verify_value; @@ -82,15 +81,6 @@ impl CidStore { } } -impl CidStore { - pub fn verify_raw_value(&self) -> Result<(), CidStoreVerificationError> { - for (cid, value) in &self.0 { - verify_value(cid, value)?; - } - Ok(()) - } -} - #[derive(ThisError, Debug)] pub enum CidStoreVerificationError { #[error(transparent)] @@ -146,15 +136,6 @@ impl CidTracker { } } -impl CidTracker { - pub fn track_raw_value(&mut self, value: impl Into>) -> CID { - let value = value.into(); - let cid = value_to_json_cid(&*value).expect("TODO refcator"); - self.cids.insert(cid.clone(), value); - cid - } -} - impl Default for CidTracker { fn default() -> Self { Self { diff --git a/crates/air-lib/interpreter-data/src/executed_state.rs b/crates/air-lib/interpreter-data/src/executed_state.rs index 831eb49b..f15b7a5e 100644 --- a/crates/air-lib/interpreter-data/src/executed_state.rs +++ b/crates/air-lib/interpreter-data/src/executed_state.rs @@ -19,7 +19,6 @@ mod se_de; use crate::GenerationIdx; use crate::JValue; -use crate::RawValue; use crate::TracePos; use air_interpreter_cid::CID; @@ -156,7 +155,7 @@ impl CallServiceFailed { #[archive(check_bytes)] /// A proof of service result execution result. pub struct ServiceResultCidAggregate { - pub value_cid: CID, + pub value_cid: CID, /// Hash of the call arguments. pub argument_hash: Rc, /// The tetraplet of the call result. @@ -268,7 +267,7 @@ pub struct CanonResultCidAggregate { )] #[archive(check_bytes)] pub struct CanonCidAggregate { - pub value: CID, + pub value: CID, pub tetraplet: CID, pub provenance: Provenance, } diff --git a/crates/air-lib/interpreter-data/src/executed_state/impls.rs b/crates/air-lib/interpreter-data/src/executed_state/impls.rs index cad7dc8a..78333032 100644 --- a/crates/air-lib/interpreter-data/src/executed_state/impls.rs +++ b/crates/air-lib/interpreter-data/src/executed_state/impls.rs @@ -15,7 +15,6 @@ */ use super::*; -use crate::RawValue; impl ParResult { pub fn new(left_size: u32, right_size: u32) -> Self { @@ -123,7 +122,7 @@ impl CanonResultCidAggregate { impl CanonCidAggregate { pub fn new( - value: CID, + value: CID, tetraplet: CID, provenance: Provenance, ) -> Self { @@ -137,7 +136,7 @@ impl CanonCidAggregate { impl ServiceResultCidAggregate { pub fn new( - value_cid: CID, + value_cid: CID, argument_hash: Rc, tetraplet_cid: CID, ) -> Self { diff --git a/crates/air-lib/interpreter-data/src/lib.rs b/crates/air-lib/interpreter-data/src/lib.rs index a14ee55d..104394ab 100644 --- a/crates/air-lib/interpreter-data/src/lib.rs +++ b/crates/air-lib/interpreter-data/src/lib.rs @@ -31,7 +31,6 @@ mod cid_store; mod executed_state; mod generation_idx; mod interpreter_data; -mod raw_value; mod rkyv; mod trace; mod trace_pos; @@ -41,7 +40,6 @@ pub use cid_store::*; pub use executed_state::*; pub use generation_idx::*; pub use interpreter_data::*; -pub use raw_value::*; pub use trace::*; pub use trace_pos::*; diff --git a/crates/air-lib/interpreter-data/src/raw_value.rs b/crates/air-lib/interpreter-data/src/raw_value.rs deleted file mode 100644 index 3fb554dd..00000000 --- a/crates/air-lib/interpreter-data/src/raw_value.rs +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2023 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. - */ - -use crate::JValue; - -use serde::Deserialize; -use serde::Serialize; - -#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] -#[serde(transparent)] -#[derive(::rkyv::Archive, ::rkyv::Serialize, ::rkyv::Deserialize)] -#[archive(check_bytes)] -pub struct RawValue { - value: JValue, -} - -impl RawValue { - pub fn from_value(value: impl Into) -> Self { - let value = value.into(); - Self { value } - } - - pub fn get_value(&self) -> JValue { - self.value.clone() - } -} - -impl From for RawValue { - fn from(value: JValue) -> Self { - Self::from_value(value) - } -} diff --git a/crates/air-lib/test-utils/src/executed_state.rs b/crates/air-lib/test-utils/src/executed_state.rs index c8f4e8de..25386c66 100644 --- a/crates/air-lib/test-utils/src/executed_state.rs +++ b/crates/air-lib/test-utils/src/executed_state.rs @@ -36,7 +36,6 @@ use air_interpreter_cid::CID; use air_interpreter_data::CanonCidAggregate; use air_interpreter_data::GenerationIdx; use air_interpreter_data::Provenance; -use air_interpreter_data::RawValue; use air_interpreter_data::ServiceResultCidAggregate; use avm_server::SecurityTetraplet; use serde::Deserialize; @@ -49,9 +48,8 @@ pub fn simple_value_aggregate_cid( cid_state: &mut ExecutionCidState, ) -> CID { let value = result.into(); - let vm_value = RawValue::from_value(value); - let value_cid = cid_state.value_tracker.track_raw_value(vm_value); + let value_cid = cid_state.value_tracker.track_value(value).unwrap(); let tetraplet = SecurityTetraplet::default(); let tetraplet_cid = cid_state.tetraplet_tracker.track_value(tetraplet).unwrap(); let service_result_agg = ServiceResultCidAggregate { @@ -72,8 +70,7 @@ pub fn value_aggregate_cid( cid_state: &mut ExecutionCidState, ) -> CID { let value = result.into(); - let vm_value = RawValue::from_value(value); - let value_cid = cid_state.value_tracker.track_raw_value(vm_value); + let value_cid = cid_state.value_tracker.track_value(value).unwrap(); let tetraplet_cid = cid_state.tetraplet_tracker.track_value(tetraplet).unwrap(); let arguments = JValue::array(args); @@ -175,9 +172,10 @@ pub fn canon_tracked( .values .iter() .map(|value| { - let vm_value = RawValue::from_value(value.result.clone()); - - let value_cid = cid_state.value_tracker.track_raw_value(vm_value); + let value_cid = cid_state + .value_tracker + .track_value(value.result.clone()) + .unwrap(); let tetraplet_cid = cid_state .tetraplet_tracker .track_value(value.tetraplet.clone())?;