mod.rs
1 // Copyright (c) 2025-2026 ACDC Network 2 // This file is part of the alphavm library. 3 // 4 // Alpha Chain | Delta Chain Protocol 5 // International Monetary Graphite. 6 // 7 // Derived from Aleo (https://aleo.org) and ProvableHQ (https://provable.com). 8 // They built world-class ZK infrastructure. We installed the EASY button. 9 // Their cryptography: elegant. Our modifications: bureaucracy-compatible. 10 // Original brilliance: theirs. Robert's Rules: ours. Bugs: definitely ours. 11 // 12 // Original Aleo/ProvableHQ code subject to Apache 2.0 https://www.apache.org/licenses/LICENSE-2.0 13 // All modifications and new work: CC0 1.0 Universal Public Domain Dedication. 14 // No rights reserved. No permission required. No warranty. No refunds. 15 // 16 // https://creativecommons.org/publicdomain/zero/1.0/ 17 // SPDX-License-Identifier: CC0-1.0 18 19 mod bytes; 20 mod serialize; 21 mod string; 22 mod to_bits; 23 24 use alphavm_console_network::prelude::*; 25 use alphavm_console_types::Field; 26 27 /// The Merkle leaf for a function or transition in the transaction. 28 #[derive(Copy, Clone, PartialEq, Eq)] 29 pub struct TransactionLeaf<N: Network> { 30 /// The variant of the Merkle leaf. 31 variant: u8, 32 /// The index of the Merkle leaf. 33 index: u16, 34 /// The ID. 35 id: Field<N>, 36 } 37 38 impl<N: Network> TransactionLeaf<N> { 39 /// Initializes a new instance of `TransactionLeaf`. 40 pub const fn new_deployment(index: u16, id: Field<N>) -> Self { 41 Self { variant: 0, index, id } 42 } 43 44 /// Initializes a new instance of `TransactionLeaf`. 45 pub const fn new_execution(index: u16, id: Field<N>) -> Self { 46 Self { variant: 1, index, id } 47 } 48 49 /// Initializes a new instance of `TransactionLeaf`. 50 pub const fn new_fee(index: u16, id: Field<N>) -> Self { 51 Self { variant: 1, index, id } 52 } 53 54 /// Initializes a new instance of `TransactionLeaf`. 55 pub const fn from(variant: u8, index: u16, id: Field<N>) -> Self { 56 Self { variant, index, id } 57 } 58 59 /// Returns the variant of the Merkle leaf. 60 pub const fn variant(&self) -> u8 { 61 self.variant 62 } 63 64 /// Returns the index of the Merkle leaf. 65 pub const fn index(&self) -> u16 { 66 self.index 67 } 68 69 /// Returns the ID in the Merkle leaf. 70 pub const fn id(&self) -> Field<N> { 71 self.id 72 } 73 } 74 75 #[cfg(test)] 76 mod test_helpers { 77 use super::*; 78 use alphavm_console_network::MainnetV0; 79 80 type CurrentNetwork = MainnetV0; 81 82 pub(super) fn sample_leaf(rng: &mut TestRng) -> TransactionLeaf<CurrentNetwork> { 83 // Construct a new leaf. 84 TransactionLeaf::from(rng.r#gen(), rng.r#gen(), Uniform::rand(rng)) 85 } 86 }