miden_lib/transaction/procedures/mod.rs
1use alloc::vec::Vec;
2
3use kernel_v0::KERNEL0_PROCEDURES;
4use miden_objects::{Felt, Hasher, Word};
5
6use super::TransactionKernel;
7
8// Include kernel v0 procedure roots generated in build.rs
9#[rustfmt::skip]
10mod kernel_v0;
11
12// TRANSACTION KERNEL
13// ================================================================================================
14
15impl TransactionKernel {
16 // CONSTANTS
17 // --------------------------------------------------------------------------------------------
18
19 /// Number of currently used kernel versions.
20 pub const NUM_VERSIONS: usize = 1;
21
22 /// Array of all available kernels.
23 pub const PROCEDURES: [&'static [Word]; Self::NUM_VERSIONS] = [&KERNEL0_PROCEDURES];
24
25 // PUBLIC ACCESSORS
26 // --------------------------------------------------------------------------------------------
27
28 /// Returns procedures of the kernel specified by the `kernel_version` as vector of Felts.
29 pub fn procedures_as_elements(kernel_version: u8) -> Vec<Felt> {
30 Word::words_as_elements(
31 Self::PROCEDURES
32 .get(kernel_version as usize)
33 .expect("provided kernel index is out of bounds"),
34 )
35 .to_vec()
36 }
37
38 /// Computes the accumulative hash of all procedures of the kernel specified by the
39 /// `kernel_version`.
40 pub fn commitment(kernel_version: u8) -> Word {
41 Hasher::hash_elements(&Self::procedures_as_elements(kernel_version))
42 }
43
44 /// Computes a hash from all kernel commitments.
45 pub fn kernel_commitment() -> Word {
46 Hasher::hash_elements(&[Self::commitment(0).as_elements()].concat())
47 }
48}