From 15177d06b2d946ef4326aa76f5b749a448ebdab9 Mon Sep 17 00:00:00 2001 From: tomyrd Date: Fri, 9 Aug 2024 17:06:49 -0300 Subject: [PATCH 1/2] feat: implement serialization for `TransactionScript` --- objects/src/transaction/tx_args.rs | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/objects/src/transaction/tx_args.rs b/objects/src/transaction/tx_args.rs index 438ded634..5be3b4e3a 100644 --- a/objects/src/transaction/tx_args.rs +++ b/objects/src/transaction/tx_args.rs @@ -1,8 +1,10 @@ use alloc::{collections::BTreeMap, vec::Vec}; use core::ops::Deref; +use assembly::ast::AstSerdeOptions; use miden_crypto::merkle::InnerNodeInfo; -use vm_processor::{AdviceInputs, AdviceMap}; +use vm_core::utils::{ByteReader, ByteWriter, Deserializable, Serializable}; +use vm_processor::{AdviceInputs, AdviceMap, DeserializationError}; use super::{Digest, Felt, Word}; use crate::{ @@ -154,7 +156,7 @@ impl TransactionArgs { /// - [hash](TransactionScript::hash): the hash of the compiled transaction script. /// - [inputs](TransactionScript::inputs): a map of key, value inputs that are loaded into the /// advice inputs' map such that the transaction script can access them. -#[derive(Clone, Debug)] +#[derive(Clone, Debug, PartialEq, Eq)] pub struct TransactionScript { code: ProgramAst, hash: Digest, @@ -222,3 +224,26 @@ impl TransactionScript { &self.inputs } } + +// SERIALIZATION +// ================================================================================================ + +impl Serializable for TransactionScript { + fn write_into(&self, target: &mut W) { + self.code.write_into(target, AstSerdeOptions { serialize_imports: true }); + self.code.write_source_locations(target); + self.hash.write_into(target); + self.inputs.write_into(target); + } +} + +impl Deserializable for TransactionScript { + fn read_from(source: &mut R) -> Result { + let mut code = ProgramAst::read_from(source)?; + code.load_source_locations(source)?; + let hash = Digest::read_from(source)?; + let inputs = BTreeMap::>::read_from(source)?; + + Ok(Self { code, hash, inputs }) + } +} From 5461c71b576759a06ea1d6bc38ae484376413a69 Mon Sep 17 00:00:00 2001 From: tomyrd Date: Fri, 9 Aug 2024 18:07:28 -0300 Subject: [PATCH 2/2] update: CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 299e632ce..68d83da90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ - [BREAKING] Changed the `NoteFile::NoteDetails` type to struct and added a `after_block_num` field (#823). - Implemented `cteate_note` and `move_asset_into_note` basic wallet procedures (#808). - [BREAKING] Interface of the `miden::tx::add_asset_to_note` procedure was changed (#808). +- Added serialization and equality comparison for `TransactionScript` (#824). ## 0.4.0 (2024-07-03)