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 transition leaf version. 28 const TRANSITION_LEAF_VERSION: u8 = 1u8; 29 30 /// The Merkle leaf for an input or output ID in the transition. 31 #[derive(Copy, Clone, PartialEq, Eq)] 32 pub struct TransitionLeaf<N: Network> { 33 /// The version of the Merkle leaf. 34 version: u8, 35 /// The index of the Merkle leaf. 36 index: u8, 37 /// The variant of the Merkle leaf. 38 variant: u8, 39 /// The ID. 40 id: Field<N>, 41 } 42 43 impl<N: Network> TransitionLeaf<N> { 44 /// Initializes a new instance of `TransitionLeaf`. 45 pub const fn new_with_version(index: u8, variant: u8, id: Field<N>) -> Self { 46 Self { version: TRANSITION_LEAF_VERSION, index, variant, id } 47 } 48 49 /// Initializes a new instance of `TransitionLeaf`. 50 pub const fn from(version: u8, index: u8, variant: u8, id: Field<N>) -> Self { 51 Self { version, index, variant, id } 52 } 53 54 /// Returns the version of the Merkle leaf. 55 pub const fn version(&self) -> u8 { 56 self.version 57 } 58 59 /// Returns the index of the Merkle leaf. 60 pub const fn index(&self) -> u8 { 61 self.index 62 } 63 64 /// Returns the variant of the Merkle leaf. 65 pub const fn variant(&self) -> u8 { 66 self.variant 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) -> TransitionLeaf<CurrentNetwork> { 83 // Construct a new leaf. 84 TransitionLeaf::new_with_version(rng.r#gen(), rng.r#gen(), Uniform::rand(rng)) 85 } 86 }