miden-objects 0.17.0-rc.6

Canonical Protobuf representations for Miden protocol objects
Documentation
use alloc::vec;

use miden_protocol::block::BlockNumber;
use miden_protocol::note::{Note, PartialNote};
use miden_protocol::transaction::{
    InputNote,
    InputNotes,
    RawOutputNote,
    RawOutputNotes,
    TransactionEffects,
};
use prost::Message;

use crate::decoded::account::test_utils::account_patch;
use crate::test_utils::dummy_word;
use crate::{DecodeMessage, Verify, proto};

fn transaction_effects() -> TransactionEffects {
    let input_notes =
        InputNotes::new(vec![InputNote::unauthenticated(Note::mock_noop(dummy_word(1)))]).unwrap();
    let output_notes = RawOutputNotes::new(vec![
        RawOutputNote::Full(Note::mock_noop(dummy_word(2))),
        RawOutputNote::Partial(PartialNote::from(Note::mock_noop(dummy_word(3)))),
    ])
    .unwrap();

    TransactionEffects::new(
        dummy_word(4),
        dummy_word(5),
        account_patch(),
        input_notes,
        output_notes,
        BlockNumber::from(17_u32),
        dummy_word(6),
        BlockNumber::from(42_u32),
    )
}

#[test]
fn transaction_effects_roundtrips_through_protobuf() {
    let effects = transaction_effects();

    let encoded = proto::transaction::TransactionEffects::from(&effects).encode_to_vec();
    let message = proto::transaction::TransactionEffects::decode(encoded.as_slice()).unwrap();

    assert_eq!(message.decode_fields().unwrap().verify().unwrap(), effects);
}