{
    "file_map": {
        "6": {
            "path": "std/collections/bounded_vec.nr",
            "source": "use crate::{cmp::Eq, convert::From, runtime::is_unconstrained, static_assert};\n\n/// A `BoundedVec<T, MaxLen>` is a growable storage similar to a built-in vector except that it\n/// is bounded with a maximum possible length. `BoundedVec` is also not\n/// subject to the same restrictions vectors are (notably, nested vectors are disallowed).\n///\n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n///\n/// For these reasons `BoundedVec<T, N>` should generally be preferred over vectors when there\n/// is a reasonable maximum bound that can be placed on the vector.\n///\n/// Example:\n///\n/// ```noir\n/// let mut vector: BoundedVec<Field, 10> = BoundedVec::new();\n/// for i in 0..5 {\n///     vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\npub struct BoundedVec<T, let MaxLen: u32> {\n    storage: [T; MaxLen],\n    len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n    /// Creates a new, empty vector of length zero.\n    ///\n    /// Since this container is backed by an array internally, it still needs an initial value\n    /// to give each element. To resolve this, each element is zeroed internally. This value\n    /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let empty_vector: BoundedVec<Field, 10> = BoundedVec::new();\n    /// assert(empty_vector.len() == 0);\n    /// ```\n    ///\n    /// Note that whenever calling `new` the maximum length of the vector should always be specified\n    /// via a type signature:\n    ///\n    /// ```noir\n    /// fn good() -> BoundedVec<Field, 10> {\n    ///     // Ok! MaxLen is specified with a type annotation\n    ///     let v1: BoundedVec<Field, 3> = BoundedVec::new();\n    ///     let v2 = BoundedVec::new();\n    ///\n    ///     // Ok! MaxLen is known from the type of `good`'s return value\n    ///     v2\n    /// }\n    ///\n    /// fn bad() {\n    ///     // Error: Type annotation needed\n    ///     // The compiler can't infer `MaxLen` from the following code:\n    ///     let mut v3 = BoundedVec::new();\n    ///     v3.push(5);\n    /// }\n    /// ```\n    ///\n    /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n    /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a\n    /// constraint failure at runtime when the vec is pushed to.\n    pub fn new() -> Self {\n        let zeroed = crate::mem::zeroed();\n        BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n    }\n\n    /// Retrieves an element from the vector at the given index, starting from zero.\n    ///\n    /// If the given index is equal to or greater than the length of the vector, this\n    /// will issue a constraint failure.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n    ///     let first = v.get(0);\n    ///     let last = v.get(v.len() - 1);\n    ///     assert(first != last);\n    /// }\n    /// ```\n    pub fn get(self, index: u32) -> T {\n        assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n        self.get_unchecked(index)\n    }\n\n    /// Retrieves an element from the vector at the given index, starting from zero, without\n    /// performing a bounds check.\n    ///\n    /// Since this function does not perform a bounds check on length before accessing the element,\n    /// it is unsafe! Use at your own risk!\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// fn sum_of_first_three<let N: u32>(v: BoundedVec<u32, N>) -> u32 {\n    ///     // Always ensure the length is larger than the largest\n    ///     // index passed to get_unchecked\n    ///     assert(v.len() > 2);\n    ///     let first = v.get_unchecked(0);\n    ///     let second = v.get_unchecked(1);\n    ///     let third = v.get_unchecked(2);\n    ///     first + second + third\n    /// }\n    /// ```\n    pub fn get_unchecked(self, index: u32) -> T {\n        self.storage[index]\n    }\n\n    /// Writes an element to the vector at the given index, starting from zero.\n    ///\n    /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n    ///     let first = v.get(0);\n    ///     assert(first != 42);\n    ///     v.set(0, 42);\n    ///     let new_first = v.get(0);\n    ///     assert(new_first == 42);\n    /// }\n    /// ```\n    pub fn set(&mut self, index: u32, value: T) {\n        assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n        self.set_unchecked(index, value)\n    }\n\n    /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n    ///\n    /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// fn set_unchecked_example() {\n    ///     let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n    ///     vec.extend_from_array([1, 2]);\n    ///\n    ///     // Here we're safely writing within the valid range of `vec`\n    ///     // `vec` now has the value [42, 2]\n    ///     vec.set_unchecked(0, 42);\n    ///\n    ///     // We can then safely read this value back out of `vec`.\n    ///     // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n    ///     assert_eq(vec.get(0), 42);\n    ///\n    ///     // We've now written past the end of `vec`.\n    ///     // As this index is still within the maximum potential length of `v`,\n    ///     // it won't cause a constraint failure.\n    ///     vec.set_unchecked(2, 42);\n    ///     println(vec);\n    ///\n    ///     // This will write past the end of the maximum potential length of `vec`,\n    ///     // it will then trigger a constraint failure.\n    ///     vec.set_unchecked(5, 42);\n    ///     println(vec);\n    /// }\n    /// ```\n    pub fn set_unchecked(&mut self, index: u32, value: T) {\n        self.storage[index] = value;\n    }\n\n    /// Pushes an element to the end of the vector. This increases the length\n    /// of the vector by one.\n    ///\n    /// Panics if the new length of the vector will be greater than the max length.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n    ///\n    /// v.push(1);\n    /// v.push(2);\n    ///\n    /// // Panics with failed assertion \"push out of bounds\"\n    /// v.push(3);\n    /// ```\n    pub fn push(&mut self, elem: T) {\n        assert(self.len < MaxLen, \"push out of bounds\");\n\n        self.storage[self.len] = elem;\n        self.len += 1;\n    }\n\n    /// Returns the current length of this vector\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let mut v: BoundedVec<Field, 4> = BoundedVec::new();\n    /// assert(v.len() == 0);\n    ///\n    /// v.push(100);\n    /// assert(v.len() == 1);\n    ///\n    /// v.push(200);\n    /// v.push(300);\n    /// v.push(400);\n    /// assert(v.len() == 4);\n    ///\n    /// let _ = v.pop();\n    /// let _ = v.pop();\n    /// assert(v.len() == 2);\n    /// ```\n    pub fn len(self) -> u32 {\n        self.len\n    }\n\n    /// Returns the maximum length of this vector. This is always\n    /// equal to the `MaxLen` parameter this vector was initialized with.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n    ///\n    /// assert(v.max_len() == 5);\n    /// v.push(10);\n    /// assert(v.max_len() == 5);\n    /// ```\n    pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n        MaxLen\n    }\n\n    /// Returns the internal array within this vector.\n    ///\n    /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n    /// the storage held internally by this vector.\n    ///\n    /// Note that uninitialized elements may be zeroed out!\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n    ///\n    /// assert(v.storage() == [0, 0, 0, 0, 0]);\n    ///\n    /// v.push(57);\n    /// assert(v.storage() == [57, 0, 0, 0, 0]);\n    /// ```\n    pub fn storage(self) -> [T; MaxLen] {\n        self.storage\n    }\n\n    /// Pushes each element from the given array to this vector.\n    ///\n    /// Panics if pushing each element would cause the length of this vector\n    /// to exceed the maximum length.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n    /// vec.extend_from_array([2, 4]);\n    ///\n    /// assert(vec.len == 2);\n    /// assert(vec.get(0) == 2);\n    /// assert(vec.get(1) == 4);\n    /// ```\n    pub fn extend_from_array<let Len: u32>(&mut self, array: [T; Len]) {\n        let new_len = self.len + array.len();\n        assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n        for i in 0..array.len() {\n            self.storage[self.len + i] = array[i];\n        }\n        self.len = new_len;\n    }\n\n    /// Pushes each element from the given vector to this vector.\n    ///\n    /// Panics if pushing each element would cause the length of this vector\n    /// to exceed the maximum length.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n    /// vec.extend_from_vector([2, 4].as_vector());\n    ///\n    /// assert(vec.len == 2);\n    /// assert(vec.get(0) == 2);\n    /// assert(vec.get(1) == 4);\n    /// ```\n    pub fn extend_from_vector(&mut self, vector: [T]) {\n        let new_len = self.len + vector.len();\n        assert(new_len <= MaxLen, \"extend_from_vector out of bounds\");\n        for i in 0..vector.len() {\n            self.storage[self.len + i] = vector[i];\n        }\n        self.len = new_len;\n    }\n\n    /// Pushes each element from the other vector to this vector. The length of\n    /// the other vector is left unchanged.\n    ///\n    /// Panics if pushing each element would cause the length of this vector\n    /// to exceed the maximum length.\n    ///\n    /// ```noir\n    /// let mut v1: BoundedVec<Field, 5> = BoundedVec::new();\n    /// let mut v2: BoundedVec<Field, 7> = BoundedVec::new();\n    ///\n    /// v2.extend_from_array([1, 2, 3]);\n    /// v1.extend_from_bounded_vec(v2);\n    ///\n    /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n    /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n    /// ```\n    pub fn extend_from_bounded_vec<let Len: u32>(&mut self, vec: BoundedVec<T, Len>) {\n        let append_len = vec.len();\n        let new_len = self.len + append_len;\n        assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n        if is_unconstrained() {\n            for i in 0..append_len {\n                self.storage[self.len + i] = vec.get_unchecked(i);\n            }\n        } else {\n            for i in 0..Len {\n                if i < append_len {\n                    self.storage[self.len + i] = vec.get_unchecked(i);\n                }\n            }\n        }\n        self.len = new_len;\n    }\n\n    /// Creates a new vector, populating it with values derived from an array input.\n    /// The maximum length of the vector is determined based on the type signature.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array([1, 2, 3])\n    /// ```\n    pub fn from_array<let Len: u32>(array: [T; Len]) -> Self {\n        static_assert(Len <= MaxLen, \"from array out of bounds\");\n        let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n        vec.extend_from_array(array);\n        vec\n    }\n\n    /// Pops the element at the end of the vector. This will decrease the length\n    /// of the vector by one.\n    ///\n    /// Panics if the vector is empty.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n    /// v.push(1);\n    /// v.push(2);\n    ///\n    /// let two = v.pop();\n    /// let one = v.pop();\n    ///\n    /// assert(two == 2);\n    /// assert(one == 1);\n    ///\n    /// // error: cannot pop from an empty vector\n    /// let _ = v.pop();\n    /// ```\n    pub fn pop(&mut self) -> T {\n        assert(self.len > 0, \"cannot pop from an empty vector\");\n        self.len -= 1;\n\n        let elem = self.storage[self.len];\n        self.storage[self.len] = crate::mem::zeroed();\n        elem\n    }\n\n    /// Returns true if the given predicate returns true for any element\n    /// in this vector.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let mut v: BoundedVec<u32, 3> = BoundedVec::new();\n    /// v.extend_from_array([2, 4, 6]);\n    ///\n    /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n    /// assert(all_even);\n    /// ```\n    pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n        let mut ret = false;\n        if is_unconstrained() {\n            for i in 0..self.len {\n                ret |= predicate(self.storage[i]);\n            }\n        } else {\n            let mut exceeded_len = false;\n            for i in 0..MaxLen {\n                exceeded_len |= i == self.len;\n                if !exceeded_len {\n                    ret |= predicate(self.storage[i]);\n                }\n            }\n        }\n        ret\n    }\n\n    /// Creates a new vector of equal size by calling a closure on each element in this vector.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n    /// let result = vec.map(|value| value * 2);\n    ///\n    /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n    /// assert_eq(result, expected);\n    /// ```\n    pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n        let mut ret = BoundedVec::new();\n        ret.len = self.len();\n\n        if is_unconstrained() {\n            for i in 0..self.len() {\n                ret.storage[i] = f(self.get_unchecked(i));\n            }\n        } else {\n            for i in 0..MaxLen {\n                if i < self.len() {\n                    ret.storage[i] = f(self.get_unchecked(i));\n                }\n            }\n        }\n\n        ret\n    }\n\n    /// Creates a new vector of equal size by calling a closure on each element\n    /// in this vector, along with its index.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n    /// let result = vec.mapi(|i, value| i + value * 2);\n    ///\n    /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n    /// assert_eq(result, expected);\n    /// ```\n    pub fn mapi<U, Env>(self, f: fn[Env](u32, T) -> U) -> BoundedVec<U, MaxLen> {\n        let mut ret = BoundedVec::new();\n        ret.len = self.len();\n\n        if is_unconstrained() {\n            for i in 0..self.len() {\n                ret.storage[i] = f(i, self.get_unchecked(i));\n            }\n        } else {\n            for i in 0..MaxLen {\n                if i < self.len() {\n                    ret.storage[i] = f(i, self.get_unchecked(i));\n                }\n            }\n        }\n\n        ret\n    }\n\n    /// Calls a closure on each element in this vector.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n    /// let mut result = BoundedVec::<u32, 4>::new();\n    /// vec.for_each(|value| result.push(value * 2));\n    ///\n    /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n    /// assert_eq(result, expected);\n    /// ```\n    pub fn for_each<Env>(self, f: fn[Env](T) -> ()) {\n        if is_unconstrained() {\n            for i in 0..self.len() {\n                f(self.get_unchecked(i));\n            }\n        } else {\n            for i in 0..MaxLen {\n                if i < self.len() {\n                    f(self.get_unchecked(i));\n                }\n            }\n        }\n    }\n\n    /// Calls a closure on each element in this vector, along with its index.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n    /// let mut result = BoundedVec::<u32, 4>::new();\n    /// vec.for_eachi(|i, value| result.push(i + value * 2));\n    ///\n    /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n    /// assert_eq(result, expected);\n    /// ```\n    pub fn for_eachi<Env>(self, f: fn[Env](u32, T) -> ()) {\n        if is_unconstrained() {\n            for i in 0..self.len() {\n                f(i, self.get_unchecked(i));\n            }\n        } else {\n            for i in 0..MaxLen {\n                if i < self.len() {\n                    f(i, self.get_unchecked(i));\n                }\n            }\n        }\n    }\n\n    /// Creates a new BoundedVec from the given array and length.\n    /// The given length must be less than or equal to the length of the array.\n    ///\n    /// This function will zero out any elements at or past index `len` of `array`.\n    /// This incurs an extra runtime cost of O(MaxLen). If you are sure your array is\n    /// zeroed after that index, you can use [`from_parts_unchecked`][Self::from_parts_unchecked] to remove the extra loop.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let vec: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 0], 3);\n    /// assert_eq(vec.len(), 3);\n    /// ```\n    pub fn from_parts(mut array: [T; MaxLen], len: u32) -> Self {\n        assert(len <= MaxLen);\n        let zeroed = crate::mem::zeroed();\n\n        if is_unconstrained() {\n            for i in len..MaxLen {\n                array[i] = zeroed;\n            }\n        } else {\n            for i in 0..MaxLen {\n                if i >= len {\n                    array[i] = zeroed;\n                }\n            }\n        }\n\n        BoundedVec { storage: array, len }\n    }\n\n    /// Creates a new BoundedVec from the given array and length.\n    /// The given length must be less than or equal to the length of the array.\n    ///\n    /// This function is unsafe because it expects all elements past the `len` index\n    /// of `array` to be zeroed, but does not check for this internally. Use `from_parts`\n    /// for a safe version of this function which does zero out any indices past the\n    /// given length. Invalidating this assumption can notably cause `BoundedVec::eq`\n    /// to give incorrect results since it will check even elements past `len`.\n    ///\n    /// Example:\n    ///\n    /// ```noir\n    /// let vec: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n    /// assert_eq(vec.len(), 3);\n    ///\n    /// // invalid use!\n    /// let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n    /// let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n    ///\n    /// // both vecs have length 3 so we'd expect them to be equal, but this\n    /// // fails because elements past the length are still checked in eq\n    /// assert_eq(vec1, vec2); // fails\n    /// ```\n    pub fn from_parts_unchecked(array: [T; MaxLen], len: u32) -> Self {\n        assert(len <= MaxLen);\n        BoundedVec { storage: array, len }\n    }\n}\n\nimpl<T, let MaxLen: u32> Eq for BoundedVec<T, MaxLen>\nwhere\n    T: Eq,\n{\n    fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n        // TODO: https://github.com/noir-lang/noir/issues/4837\n        //\n        // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n        // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n        if self.len == other.len {\n            self.storage == other.storage\n        } else {\n            false\n        }\n    }\n}\n\nimpl<T, let MaxLen: u32, let Len: u32> From<[T; Len]> for BoundedVec<T, MaxLen> {\n    fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n        BoundedVec::from_array(array)\n    }\n}\n\nmod bounded_vec_tests {\n\n    mod get {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n        fn panics_when_reading_elements_past_end_of_vec() {\n            let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n            let _ = vec.get(0);\n        }\n\n        #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n        fn panics_when_reading_beyond_length() {\n            let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n            let _ = vec.get(3);\n        }\n\n        #[test]\n        fn get_works_within_bounds() {\n            let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n            assert_eq(vec.get(0), 1);\n            assert_eq(vec.get(2), 3);\n            assert_eq(vec.get(4), 5);\n        }\n\n        #[test]\n        fn get_unchecked_works() {\n            let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n            assert_eq(vec.get_unchecked(0), 1);\n            assert_eq(vec.get_unchecked(2), 3);\n        }\n\n        #[test]\n        fn get_unchecked_works_past_len() {\n            let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n            assert_eq(vec.get_unchecked(4), 0);\n        }\n    }\n\n    mod set {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn set_updates_values_properly() {\n            let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n            vec.set(0, 42);\n            assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n            vec.set(1, 43);\n            assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n            vec.set(2, 44);\n            assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n            vec.set(1, 10);\n            assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n            vec.set(0, 0);\n            assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n        }\n\n        #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n        fn panics_when_writing_elements_past_end_of_vec() {\n            let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n            vec.set(0, 42);\n        }\n\n        #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n        fn panics_when_setting_beyond_length() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n            vec.set(3, 4);\n        }\n\n        #[test]\n        fn set_unchecked_operations() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n            vec.push(1);\n            vec.push(2);\n\n            vec.set_unchecked(0, 10);\n            assert_eq(vec.get(0), 10);\n        }\n\n        #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n        fn set_unchecked_operations_past_len() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n            vec.push(1);\n            vec.push(2);\n\n            vec.set_unchecked(3, 40);\n            assert_eq(vec.get(3), 40);\n        }\n\n        #[test]\n        fn set_preserves_other_elements() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n\n            vec.set(2, 30);\n            assert_eq(vec.get(0), 1);\n            assert_eq(vec.get(1), 2);\n            assert_eq(vec.get(2), 30);\n            assert_eq(vec.get(3), 4);\n            assert_eq(vec.get(4), 5);\n        }\n    }\n\n    mod any {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn returns_false_if_predicate_not_satisfied() {\n            let vec: BoundedVec<bool, 4> = BoundedVec::from_array([false, false, false, false]);\n            let result = vec.any(|value| value);\n\n            assert(!result);\n        }\n\n        #[test]\n        fn returns_true_if_predicate_satisfied() {\n            let vec: BoundedVec<bool, 4> = BoundedVec::from_array([false, false, true, true]);\n            let result = vec.any(|value| value);\n\n            assert(result);\n        }\n\n        #[test]\n        fn returns_false_on_empty_boundedvec() {\n            let vec: BoundedVec<bool, 0> = BoundedVec::new();\n            let result = vec.any(|value| value);\n\n            assert(!result);\n        }\n\n        #[test]\n        fn any_with_complex_predicates() {\n            let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n\n            assert(vec.any(|x| x > 3));\n            assert(!vec.any(|x| x > 10));\n            assert(vec.any(|x| x % 2 == 0)); // has a even number\n            assert(vec.any(|x| x == 3)); // has a specific value\n        }\n\n        #[test]\n        fn any_with_partial_vector() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n            vec.push(1);\n            vec.push(2);\n\n            assert(vec.any(|x| x == 1));\n            assert(vec.any(|x| x == 2));\n            assert(!vec.any(|x| x == 3));\n        }\n    }\n\n    mod map {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn applies_function_correctly() {\n            // docs:start:bounded-vec-map-example\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n            let result = vec.map(|value| value * 2);\n            // docs:end:bounded-vec-map-example\n            let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n            assert_eq(result, expected);\n        }\n\n        #[test]\n        fn applies_function_that_changes_return_type() {\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n            let result = vec.map(|value| (value * 2) as Field);\n            let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n            assert_eq(result, expected);\n        }\n\n        #[test]\n        fn does_not_apply_function_past_len() {\n            let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n            let result = vec.map(|value| if value == 0 { 5 } else { value });\n            let expected = BoundedVec::from_array([5, 1]);\n\n            assert_eq(result, expected);\n            assert_eq(result.get_unchecked(2), 0);\n        }\n\n        #[test]\n        fn map_with_conditional_logic() {\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n\n            let result = vec.map(|x| if x % 2 == 0 { x * 2 } else { x });\n            let expected = BoundedVec::from_array([1, 4, 3, 8]);\n            assert_eq(result, expected);\n        }\n\n        #[test]\n        fn map_preserves_length() {\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n            let result = vec.map(|x| x * 2);\n\n            assert_eq(result.len(), vec.len());\n            assert_eq(result.max_len(), vec.max_len());\n        }\n\n        #[test]\n        fn map_on_empty_vector() {\n            let vec: BoundedVec<u32, 5> = BoundedVec::new();\n            let result = vec.map(|x| x * 2);\n            assert_eq(result, vec);\n            assert_eq(result.len(), 0);\n            assert_eq(result.max_len(), 5);\n        }\n    }\n\n    mod mapi {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn applies_function_correctly() {\n            // docs:start:bounded-vec-mapi-example\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n            let result = vec.mapi(|i, value| i + value * 2);\n            // docs:end:bounded-vec-mapi-example\n            let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n            assert_eq(result, expected);\n        }\n\n        #[test]\n        fn applies_function_that_changes_return_type() {\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n            let result = vec.mapi(|i, value| (i + value * 2) as Field);\n            let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 5, 8, 11]);\n\n            assert_eq(result, expected);\n        }\n\n        #[test]\n        fn does_not_apply_function_past_len() {\n            let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n            let result = vec.mapi(|_, value| if value == 0 { 5 } else { value });\n            let expected = BoundedVec::from_array([5, 1]);\n\n            assert_eq(result, expected);\n            assert_eq(result.get_unchecked(2), 0);\n        }\n\n        #[test]\n        fn mapi_with_index_branching_logic() {\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n\n            let result = vec.mapi(|i, x| if i % 2 == 0 { x * 2 } else { x });\n            let expected = BoundedVec::from_array([2, 2, 6, 4]);\n            assert_eq(result, expected);\n        }\n    }\n\n    mod for_each {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        // map in terms of for_each\n        fn for_each_map<T, U, Env, let MaxLen: u32>(\n            input: BoundedVec<T, MaxLen>,\n            f: fn[Env](T) -> U,\n        ) -> BoundedVec<U, MaxLen> {\n            let mut output = BoundedVec::<U, MaxLen>::new();\n            let output_ref = &mut output;\n            input.for_each(|x| output_ref.push(f(x)));\n            output\n        }\n\n        #[test]\n        fn smoke_test() {\n            let mut acc = 0;\n            let acc_ref = &mut acc;\n            // docs:start:bounded-vec-for-each-example\n            let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n            vec.for_each(|value| { *acc_ref += value; });\n            // docs:end:bounded-vec-for-each-example\n            assert_eq(acc, 6);\n        }\n\n        #[test]\n        fn applies_function_correctly() {\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n            let result = for_each_map(vec, |value| value * 2);\n            let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n            assert_eq(result, expected);\n        }\n\n        #[test]\n        fn applies_function_that_changes_return_type() {\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n            let result = for_each_map(vec, |value| (value * 2) as Field);\n            let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n            assert_eq(result, expected);\n        }\n\n        #[test]\n        fn does_not_apply_function_past_len() {\n            let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n            let result = for_each_map(vec, |value| if value == 0 { 5 } else { value });\n            let expected = BoundedVec::from_array([5, 1]);\n\n            assert_eq(result, expected);\n            assert_eq(result.get_unchecked(2), 0);\n        }\n\n        #[test]\n        fn for_each_on_empty_vector() {\n            let vec: BoundedVec<u32, 5> = BoundedVec::new();\n            let mut count = 0;\n            let count_ref = &mut count;\n            vec.for_each(|_| { *count_ref += 1; });\n            assert_eq(count, 0);\n        }\n\n        #[test]\n        fn for_each_with_side_effects() {\n            let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n            let mut seen = BoundedVec::<u32, 3>::new();\n            let seen_ref = &mut seen;\n            vec.for_each(|x| seen_ref.push(x));\n            assert_eq(seen, vec);\n        }\n    }\n\n    mod for_eachi {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        // mapi in terms of for_eachi\n        fn for_eachi_mapi<T, U, Env, let MaxLen: u32>(\n            input: BoundedVec<T, MaxLen>,\n            f: fn[Env](u32, T) -> U,\n        ) -> BoundedVec<U, MaxLen> {\n            let mut output = BoundedVec::<U, MaxLen>::new();\n            let output_ref = &mut output;\n            input.for_eachi(|i, x| output_ref.push(f(i, x)));\n            output\n        }\n\n        #[test]\n        fn smoke_test() {\n            let mut acc = 0;\n            let acc_ref = &mut acc;\n            // docs:start:bounded-vec-for-eachi-example\n            let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n            vec.for_eachi(|i, value| { *acc_ref += i * value; });\n            // docs:end:bounded-vec-for-eachi-example\n\n            // 0 * 1 + 1 * 2 + 2 * 3\n            assert_eq(acc, 8);\n        }\n\n        #[test]\n        fn applies_function_correctly() {\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n            let result = for_eachi_mapi(vec, |i, value| i + value * 2);\n            let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n            assert_eq(result, expected);\n        }\n\n        #[test]\n        fn applies_function_that_changes_return_type() {\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n            let result = for_eachi_mapi(vec, |i, value| (i + value * 2) as Field);\n            let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 5, 8, 11]);\n\n            assert_eq(result, expected);\n        }\n\n        #[test]\n        fn does_not_apply_function_past_len() {\n            let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n            let result = for_eachi_mapi(vec, |_, value| if value == 0 { 5 } else { value });\n            let expected = BoundedVec::from_array([5, 1]);\n\n            assert_eq(result, expected);\n            assert_eq(result.get_unchecked(2), 0);\n        }\n\n        #[test]\n        fn for_eachi_on_empty_vector() {\n            let vec: BoundedVec<u32, 5> = BoundedVec::new();\n            let mut count = 0;\n            let count_ref = &mut count;\n            vec.for_eachi(|_, _| { *count_ref += 1; });\n            assert_eq(count, 0);\n        }\n\n        #[test]\n        fn for_eachi_with_index_tracking() {\n            let vec: BoundedVec<u32, 3> = BoundedVec::from_array([10, 20, 30]);\n            let mut indices = BoundedVec::<u32, 3>::new();\n            let indices_ref = &mut indices;\n            vec.for_eachi(|i, _| indices_ref.push(i));\n\n            let expected = BoundedVec::from_array([0, 1, 2]);\n            assert_eq(indices, expected);\n        }\n\n    }\n\n    mod from_array {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn empty() {\n            let empty_array: [Field; 0] = [];\n            let bounded_vec = BoundedVec::from_array([]);\n\n            assert_eq(bounded_vec.max_len(), 0);\n            assert_eq(bounded_vec.len(), 0);\n            assert_eq(bounded_vec.storage(), empty_array);\n        }\n\n        #[test]\n        fn equal_len() {\n            let array = [1, 2, 3];\n            let bounded_vec = BoundedVec::from_array(array);\n\n            assert_eq(bounded_vec.max_len(), 3);\n            assert_eq(bounded_vec.len(), 3);\n            assert_eq(bounded_vec.storage(), array);\n        }\n\n        #[test]\n        fn max_len_greater_then_array_len() {\n            let array = [1, 2, 3];\n            let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n            assert_eq(bounded_vec.max_len(), 10);\n            assert_eq(bounded_vec.len(), 3);\n            assert_eq(bounded_vec.get(0), 1);\n            assert_eq(bounded_vec.get(1), 2);\n            assert_eq(bounded_vec.get(2), 3);\n        }\n\n        #[test(should_fail_with = \"from array out of bounds\")]\n        fn max_len_lower_then_array_len() {\n            let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n        }\n\n        #[test]\n        fn from_array_preserves_order() {\n            let array = [5, 3, 1, 4, 2];\n            let vec: BoundedVec<u32, 5> = BoundedVec::from_array(array);\n            for i in 0..array.len() {\n                assert_eq(vec.get(i), array[i]);\n            }\n        }\n\n        #[test]\n        fn from_array_with_different_types() {\n            let bool_array = [true, false, true];\n            let bool_vec: BoundedVec<bool, 3> = BoundedVec::from_array(bool_array);\n            assert_eq(bool_vec.len(), 3);\n            assert_eq(bool_vec.get(0), true);\n            assert_eq(bool_vec.get(1), false);\n        }\n    }\n\n    mod trait_from {\n        use crate::collections::bounded_vec::BoundedVec;\n        use crate::convert::From;\n\n        #[test]\n        fn simple() {\n            let array = [1, 2];\n            let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n            assert_eq(bounded_vec.max_len(), 10);\n            assert_eq(bounded_vec.len(), 2);\n            assert_eq(bounded_vec.get(0), 1);\n            assert_eq(bounded_vec.get(1), 2);\n        }\n    }\n\n    mod trait_eq {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn empty_equality() {\n            let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n            let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n            assert_eq(bounded_vec1, bounded_vec2);\n        }\n\n        #[test]\n        fn inequality() {\n            let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n            let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n            bounded_vec1.push(1);\n            bounded_vec2.push(2);\n\n            assert(bounded_vec1 != bounded_vec2);\n        }\n    }\n\n    mod from_parts {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn from_parts() {\n            // docs:start:from-parts\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 0], 3);\n            assert_eq(vec.len(), 3);\n\n            // Any elements past the given length are zeroed out, so these\n            // two BoundedVecs will be completely equal\n            let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 1], 3);\n            let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 2], 3);\n            assert_eq(vec1, vec2);\n            // docs:end:from-parts\n        }\n\n        #[test]\n        fn from_parts_unchecked() {\n            // docs:start:from-parts-unchecked\n            let vec: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n            assert_eq(vec.len(), 3);\n\n            // invalid use!\n            let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n            let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n\n            // both vecs have length 3 so we'd expect them to be equal, but this\n            // fails because elements past the length are still checked in eq\n            assert(vec1 != vec2);\n            // docs:end:from-parts-unchecked\n        }\n    }\n\n    mod push_pop {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn push_and_pop_operations() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n\n            assert_eq(vec.len(), 0);\n\n            vec.push(1);\n            assert_eq(vec.len(), 1);\n            assert_eq(vec.get(0), 1);\n\n            vec.push(2);\n            assert_eq(vec.len(), 2);\n            assert_eq(vec.get(1), 2);\n\n            let popped = vec.pop();\n            assert_eq(popped, 2);\n            assert_eq(vec.len(), 1);\n\n            let popped2 = vec.pop();\n            assert_eq(popped2, 1);\n            assert_eq(vec.len(), 0);\n        }\n\n        #[test(should_fail_with = \"push out of bounds\")]\n        fn push_to_full_vector() {\n            let mut vec: BoundedVec<u32, 2> = BoundedVec::new();\n            vec.push(1);\n            vec.push(2);\n            vec.push(3); // should panic\n        }\n\n        #[test(should_fail_with = \"cannot pop from an empty vector\")]\n        fn pop_from_empty_vector() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n            let _ = vec.pop(); // should panic\n        }\n\n        #[test]\n        fn push_pop_cycle() {\n            let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n\n            // push to full\n            vec.push(1);\n            vec.push(2);\n            vec.push(3);\n            assert_eq(vec.len(), 3);\n\n            // pop all\n            assert_eq(vec.pop(), 3);\n            assert_eq(vec.pop(), 2);\n            assert_eq(vec.pop(), 1);\n            assert_eq(vec.len(), 0);\n\n            // push again\n            vec.push(4);\n            assert_eq(vec.len(), 1);\n            assert_eq(vec.get(0), 4);\n        }\n    }\n\n    mod extend {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn extend_from_array() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n            vec.push(1);\n            vec.extend_from_array([2, 3]);\n\n            assert_eq(vec.len(), 3);\n            assert_eq(vec.get(0), 1);\n            assert_eq(vec.get(1), 2);\n            assert_eq(vec.get(2), 3);\n        }\n\n        #[test]\n        fn extend_from_vector() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n            vec.push(1);\n            vec.extend_from_vector([2, 3].as_vector());\n\n            assert_eq(vec.len(), 3);\n            assert_eq(vec.get(0), 1);\n            assert_eq(vec.get(1), 2);\n            assert_eq(vec.get(2), 3);\n        }\n\n        #[test]\n        fn extend_from_bounded_vec() {\n            let mut vec1: BoundedVec<u32, 5> = BoundedVec::new();\n            let mut vec2: BoundedVec<u32, 3> = BoundedVec::new();\n\n            vec1.push(1);\n            vec2.push(2);\n            vec2.push(3);\n\n            vec1.extend_from_bounded_vec(vec2);\n\n            assert_eq(vec1.len(), 3);\n            assert_eq(vec1.get(0), 1);\n            assert_eq(vec1.get(1), 2);\n            assert_eq(vec1.get(2), 3);\n        }\n\n        #[test(should_fail_with = \"extend_from_array out of bounds\")]\n        fn extend_array_beyond_max_len() {\n            let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n            vec.push(1);\n            vec.extend_from_array([2, 3, 4]); // should panic\n        }\n\n        #[test(should_fail_with = \"extend_from_vector out of bounds\")]\n        fn extend_vector_beyond_max_len() {\n            let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n            vec.push(1);\n            vec.extend_from_vector([2, 3, 4].as_vector()); // S]should panic\n        }\n\n        #[test(should_fail_with = \"extend_from_bounded_vec out of bounds\")]\n        fn extend_bounded_vec_beyond_max_len() {\n            let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n            let other: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n            vec.extend_from_bounded_vec(other); // should panic\n        }\n\n        #[test]\n        fn extend_with_empty_collections() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n            let original_len = vec.len();\n\n            vec.extend_from_array([]);\n            assert_eq(vec.len(), original_len);\n\n            vec.extend_from_vector([].as_vector());\n            assert_eq(vec.len(), original_len);\n\n            let empty: BoundedVec<u32, 3> = BoundedVec::new();\n            vec.extend_from_bounded_vec(empty);\n            assert_eq(vec.len(), original_len);\n        }\n    }\n\n    mod storage {\n        use crate::collections::bounded_vec::BoundedVec;\n\n        #[test]\n        fn storage_consistency() {\n            let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n\n            // test initial storage state\n            assert_eq(vec.storage(), [0, 0, 0, 0, 0]);\n\n            vec.push(1);\n            vec.push(2);\n\n            // test storage after modifications\n            assert_eq(vec.storage(), [1, 2, 0, 0, 0]);\n\n            // storage doesn't change length\n            assert_eq(vec.len(), 2);\n            assert_eq(vec.max_len(), 5);\n        }\n\n        #[test]\n        fn storage_after_pop() {\n            let mut vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n\n            let _ = vec.pop();\n            // after pop, the last element should be zeroed\n            assert_eq(vec.storage(), [1, 2, 0]);\n            assert_eq(vec.len(), 2);\n        }\n\n        #[test]\n        fn vector_immutable() {\n            let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n            let storage = vec.storage();\n\n            assert_eq(storage, [1, 2, 3]);\n\n            // Verify that the original vector is unchanged\n            assert_eq(vec.len(), 3);\n            assert_eq(vec.get(0), 1);\n            assert_eq(vec.get(1), 2);\n            assert_eq(vec.get(2), 3);\n        }\n    }\n}\n"
        },
        "17": {
            "path": "std/field/bn254.nr",
            "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\npub(crate) global PLO: Field = 53438638232309528389504892708671455233;\npub(crate) global PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n    // Here's we're taking advantage of truncating 128 bit limbs from the input field\n    // and then subtracting them from the input such the field division is equivalent to integer division.\n    let low = (x as u128) as Field;\n    let high = (x - low) / TWO_POW_128;\n\n    (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n    compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n    if x == y {\n        true\n    } else {\n        field_less_than(x, y)\n    }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n    let (alo, ahi) = a;\n    let (blo, bhi) = b;\n    // Safety: borrow is enforced to be boolean due to its type.\n    // if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n    // if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n    unsafe {\n        let borrow = lte_hint(alo, blo);\n\n        let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n        let rhi = ahi - bhi - (borrow as Field);\n\n        rlo.assert_max_bit_size::<128>();\n        rhi.assert_max_bit_size::<128>();\n    }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n    if is_unconstrained() {\n        compute_decomposition(x)\n    } else {\n        // Safety: decomposition is properly checked below\n        unsafe {\n            // Take hints of the decomposition\n            let (xlo, xhi) = decompose_hint(x);\n\n            // Range check the limbs\n            xlo.assert_max_bit_size::<128>();\n            xhi.assert_max_bit_size::<128>();\n\n            // Check that the decomposition is correct\n            assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n            // Assert that the decomposition of P is greater than the decomposition of x\n            assert_gt_limbs((PLO, PHI), (xlo, xhi));\n            (xlo, xhi)\n        }\n    }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n    if is_unconstrained() {\n        assert(\n            // Safety: already unconstrained\n            unsafe { field_less_than(b, a) },\n        );\n    } else {\n        // Decompose a and b\n        let a_limbs = decompose(a);\n        let b_limbs = decompose(b);\n\n        // Assert that a_limbs is greater than b_limbs\n        assert_gt_limbs(a_limbs, b_limbs)\n    }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n    assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n    if is_unconstrained() {\n        // Safety: unsafe in unconstrained\n        unsafe {\n            field_less_than(b, a)\n        }\n    } else if a == b {\n        false\n    } else {\n        // Safety: Take a hint of the comparison and verify it\n        unsafe {\n            if field_less_than(a, b) {\n                assert_gt(b, a);\n                false\n            } else {\n                assert_gt(a, b);\n                true\n            }\n        }\n    }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n    gt(b, a)\n}\n\nmod tests {\n    // TODO: Allow imports from \"super\"\n    use crate::field::bn254::{assert_gt, decompose, gt, lt, lte_hint, PHI, PLO, TWO_POW_128};\n\n    #[test]\n    fn check_decompose() {\n        assert_eq(decompose(TWO_POW_128), (0, 1));\n        assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n        assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n    }\n\n    #[test]\n    unconstrained fn check_lte_hint() {\n        assert(lte_hint(0, 1));\n        assert(lte_hint(0, 0x100));\n        assert(lte_hint(0x100, TWO_POW_128 - 1));\n        assert(!lte_hint(0 - 1, 0));\n\n        assert(lte_hint(0, 0));\n        assert(lte_hint(0x100, 0x100));\n        assert(lte_hint(0 - 1, 0 - 1));\n    }\n\n    #[test]\n    fn check_gt() {\n        assert(gt(1, 0));\n        assert(gt(0x100, 0));\n        assert(gt((0 - 1), (0 - 2)));\n        assert(gt(TWO_POW_128, 0));\n        assert(!gt(0, 0));\n        assert(!gt(0, 0x100));\n        assert(gt(0 - 1, 0 - 2));\n        assert(!gt(0 - 2, 0 - 1));\n        assert_gt(0 - 1, 0);\n    }\n\n    #[test]\n    fn check_plo_phi() {\n        assert_eq(PLO + PHI * TWO_POW_128, 0);\n        let p_bytes = crate::field::modulus_le_bytes();\n        let mut p_low: Field = 0;\n        let mut p_high: Field = 0;\n\n        let mut offset = 1;\n        for i in 0..16 {\n            p_low += (p_bytes[i] as Field) * offset;\n            p_high += (p_bytes[i + 16] as Field) * offset;\n            offset *= 256;\n        }\n        assert_eq(p_low, PLO);\n        assert_eq(p_high, PHI);\n    }\n\n    #[test]\n    fn check_decompose_edge_cases() {\n        assert_eq(decompose(0), (0, 0));\n        assert_eq(decompose(TWO_POW_128 - 1), (TWO_POW_128 - 1, 0));\n        assert_eq(decompose(TWO_POW_128 + 1), (1, 1));\n        assert_eq(decompose(TWO_POW_128 * 2), (0, 2));\n        assert_eq(decompose(TWO_POW_128 * 2 + 0x1234567890), (0x1234567890, 2));\n    }\n\n    #[test]\n    fn check_decompose_large_values() {\n        let large_field = 0xffffffffffffffff;\n        let (lo, hi) = decompose(large_field);\n        assert_eq(large_field, lo + TWO_POW_128 * hi);\n\n        let large_value = large_field - TWO_POW_128;\n        let (lo2, hi2) = decompose(large_value);\n        assert_eq(large_value, lo2 + TWO_POW_128 * hi2);\n    }\n\n    #[test]\n    fn check_lt_comprehensive() {\n        assert(lt(0, 1));\n        assert(!lt(1, 0));\n        assert(!lt(0, 0));\n        assert(!lt(42, 42));\n\n        assert(lt(TWO_POW_128 - 1, TWO_POW_128));\n        assert(!lt(TWO_POW_128, TWO_POW_128 - 1));\n    }\n}\n"
        },
        "18": {
            "path": "std/field/mod.nr",
            "source": "pub mod bn254;\nuse crate::{runtime::is_unconstrained, static_assert};\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n    /// Asserts that `self` can be represented in `bit_size` bits.\n    ///\n    /// # Failures\n    /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n    // docs:start:assert_max_bit_size\n    pub fn assert_max_bit_size<let BIT_SIZE: u32>(self) {\n        // docs:end:assert_max_bit_size\n        static_assert(\n            BIT_SIZE < modulus_num_bits() as u32,\n            \"BIT_SIZE must be less than modulus_num_bits\",\n        );\n        __assert_max_bit_size(self, BIT_SIZE);\n    }\n\n    /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n    /// This array will be zero padded should not all bits be necessary to represent `self`.\n    ///\n    /// # Failures\n    /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting array will not\n    /// be able to represent the original `Field`.\n    ///\n    /// # Safety\n    /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n    // docs:start:to_le_bits\n    pub fn to_le_bits<let N: u32>(self: Self) -> [u1; N] {\n        // docs:end:to_le_bits\n        let bits = __to_le_bits(self);\n\n        if !is_unconstrained() {\n            // Ensure that the byte decomposition does not overflow the modulus\n            let p = modulus_le_bits();\n            assert(bits.len() <= p.len());\n            let mut ok = bits.len() != p.len();\n            for i in 0..N {\n                if !ok {\n                    if (bits[N - 1 - i] != p[N - 1 - i]) {\n                        assert(p[N - 1 - i] == 1);\n                        ok = true;\n                    }\n                }\n            }\n            assert(ok);\n        }\n        bits\n    }\n\n    /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n    /// This array will be zero padded should not all bits be necessary to represent `self`.\n    ///\n    /// # Failures\n    /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting array will not\n    /// be able to represent the original `Field`.\n    ///\n    /// # Safety\n    /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n    // docs:start:to_be_bits\n    pub fn to_be_bits<let N: u32>(self: Self) -> [u1; N] {\n        // docs:end:to_be_bits\n        let bits = __to_be_bits(self);\n\n        if !is_unconstrained() {\n            // Ensure that the decomposition does not overflow the modulus\n            let p = modulus_be_bits();\n            assert(bits.len() <= p.len());\n            let mut ok = bits.len() != p.len();\n            for i in 0..N {\n                if !ok {\n                    if (bits[i] != p[i]) {\n                        assert(p[i] == 1);\n                        ok = true;\n                    }\n                }\n            }\n            assert(ok);\n        }\n        bits\n    }\n\n    /// Decomposes `self` into its little endian byte decomposition as a `[u8;N]` array\n    /// This array will be zero padded should not all bytes be necessary to represent `self`.\n    ///\n    /// # Failures\n    ///  The length N of the array must be big enough to contain all the bytes of the 'self',\n    ///  and no more than the number of bytes required to represent the field modulus\n    ///\n    /// # Safety\n    /// The result is ensured to be the canonical decomposition of the field element\n    // docs:start:to_le_bytes\n    pub fn to_le_bytes<let N: u32>(self: Self) -> [u8; N] {\n        // docs:end:to_le_bytes\n        static_assert(\n            N <= modulus_le_bytes().len(),\n            \"N must be less than or equal to modulus_le_bytes().len()\",\n        );\n        // Compute the byte decomposition\n        let bytes = self.to_le_radix(256);\n\n        if !is_unconstrained() {\n            // Ensure that the byte decomposition does not overflow the modulus\n            let p = modulus_le_bytes();\n            assert(bytes.len() <= p.len());\n            let mut ok = bytes.len() != p.len();\n            for i in 0..N {\n                if !ok {\n                    if (bytes[N - 1 - i] != p[N - 1 - i]) {\n                        assert(bytes[N - 1 - i] < p[N - 1 - i]);\n                        ok = true;\n                    }\n                }\n            }\n            assert(ok);\n        }\n        bytes\n    }\n\n    /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n    /// This array will be zero padded should not all bytes be necessary to represent `self`.\n    ///\n    /// # Failures\n    ///  The length N of the array must be big enough to contain all the bytes of the 'self',\n    ///  and no more than the number of bytes required to represent the field modulus\n    ///\n    /// # Safety\n    /// The result is ensured to be the canonical decomposition of the field element\n    // docs:start:to_be_bytes\n    pub fn to_be_bytes<let N: u32>(self: Self) -> [u8; N] {\n        // docs:end:to_be_bytes\n        static_assert(\n            N <= modulus_le_bytes().len(),\n            \"N must be less than or equal to modulus_le_bytes().len()\",\n        );\n        // Compute the byte decomposition\n        let bytes = self.to_be_radix(256);\n\n        if !is_unconstrained() {\n            // Ensure that the byte decomposition does not overflow the modulus\n            let p = modulus_be_bytes();\n            assert(bytes.len() <= p.len());\n            let mut ok = bytes.len() != p.len();\n            for i in 0..N {\n                if !ok {\n                    if (bytes[i] != p[i]) {\n                        assert(bytes[i] < p[i]);\n                        ok = true;\n                    }\n                }\n            }\n            assert(ok);\n        }\n        bytes\n    }\n\n    fn to_le_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n        // Brillig does not need an immediate radix\n        if !crate::runtime::is_unconstrained() {\n            static_assert(1 < radix, \"radix must be greater than 1\");\n            static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n            static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n        }\n        __to_le_radix(self, radix)\n    }\n\n    fn to_be_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n        // Brillig does not need an immediate radix\n        if !crate::runtime::is_unconstrained() {\n            static_assert(1 < radix, \"radix must be greater than 1\");\n            static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n            static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n        }\n        __to_be_radix(self, radix)\n    }\n\n    // Returns self to the power of the given exponent value.\n    // Caution: we assume the exponent fits into 32 bits\n    // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n    pub fn pow_32(self, exponent: Field) -> Field {\n        let mut r: Field = 1;\n        let b: [u1; 32] = exponent.to_le_bits();\n\n        for i in 1..33 {\n            r *= r;\n            r = (b[32 - i] as Field) * (r * self) + (1 - b[32 - i] as Field) * r;\n        }\n        r\n    }\n\n    // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n    pub fn sgn0(self) -> u1 {\n        self as u1\n    }\n\n    pub fn lt(self, another: Field) -> bool {\n        if crate::compat::is_bn254() {\n            bn254_lt(self, another)\n        } else {\n            lt_fallback(self, another)\n        }\n    }\n\n    /// Convert a little endian byte array to a field element.\n    /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n    pub fn from_le_bytes<let N: u32>(bytes: [u8; N]) -> Field {\n        static_assert(\n            N <= modulus_le_bytes().len(),\n            \"N must be less than or equal to modulus_le_bytes().len()\",\n        );\n        let mut v = 1;\n        let mut result = 0;\n\n        for i in 0..N {\n            result += (bytes[i] as Field) * v;\n            v = v * 256;\n        }\n        result\n    }\n\n    /// Convert a big endian byte array to a field element.\n    /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n    pub fn from_be_bytes<let N: u32>(bytes: [u8; N]) -> Field {\n        let mut v = 1;\n        let mut result = 0;\n\n        for i in 0..N {\n            result += (bytes[N - 1 - i] as Field) * v;\n            v = v * 256;\n        }\n        result\n    }\n}\n\n#[builtin(apply_range_constraint)]\nfn __assert_max_bit_size(value: Field, bit_size: u32) {}\n\n// `_radix` must be less than 256\n#[builtin(to_le_radix)]\nfn __to_le_radix<let N: u32>(value: Field, radix: u32) -> [u8; N] {}\n\n// `_radix` must be less than 256\n#[builtin(to_be_radix)]\nfn __to_be_radix<let N: u32>(value: Field, radix: u32) -> [u8; N] {}\n\n/// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n/// This array will be zero padded should not all bits be necessary to represent `self`.\n///\n/// # Failures\n/// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting array will not\n/// be able to represent the original `Field`.\n///\n/// # Safety\n/// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n/// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n/// wrap around due to overflow when verifying the decomposition.\n#[builtin(to_le_bits)]\nfn __to_le_bits<let N: u32>(value: Field) -> [u1; N] {}\n\n/// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n/// This array will be zero padded should not all bits be necessary to represent `self`.\n///\n/// # Failures\n/// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting array will not\n/// be able to represent the original `Field`.\n///\n/// # Safety\n/// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n/// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n/// wrap around due to overflow when verifying the decomposition.\n#[builtin(to_be_bits)]\nfn __to_be_bits<let N: u32>(value: Field) -> [u1; N] {}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n/// An unconstrained only built in to efficiently compare fields.\n#[builtin(field_less_than)]\nunconstrained fn __field_less_than(x: Field, y: Field) -> bool {}\n\npub(crate) unconstrained fn field_less_than(x: Field, y: Field) -> bool {\n    __field_less_than(x, y)\n}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n    // Convert it to a field element\n    let mut v = 1;\n    let mut high = 0 as Field;\n    let mut low = 0 as Field;\n\n    for i in 0..16 {\n        high = high + (bytes32[15 - i] as Field) * v;\n        low = low + (bytes32[16 + 15 - i] as Field) * v;\n        v = v * 256;\n    }\n    // Abuse that a % p + b % p = (a + b) % p and that low < p\n    low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n    if is_unconstrained() {\n        // Safety: unconstrained context\n        unsafe {\n            field_less_than(x, y)\n        }\n    } else {\n        let x_bytes: [u8; 32] = x.to_le_bytes();\n        let y_bytes: [u8; 32] = y.to_le_bytes();\n        let mut x_is_lt = false;\n        let mut done = false;\n        for i in 0..32 {\n            if (!done) {\n                let x_byte = x_bytes[32 - 1 - i] as u8;\n                let y_byte = y_bytes[32 - 1 - i] as u8;\n                let bytes_match = x_byte == y_byte;\n                if !bytes_match {\n                    x_is_lt = x_byte < y_byte;\n                    done = true;\n                }\n            }\n        }\n        x_is_lt\n    }\n}\n\nmod tests {\n    use crate::{panic::panic, runtime, static_assert};\n    use super::{\n        field_less_than, modulus_be_bits, modulus_be_bytes, modulus_le_bits, modulus_le_bytes,\n    };\n\n    #[test]\n    // docs:start:to_be_bits_example\n    fn test_to_be_bits() {\n        let field = 2;\n        let bits: [u1; 8] = field.to_be_bits();\n        assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n    }\n    // docs:end:to_be_bits_example\n\n    #[test]\n    // docs:start:to_le_bits_example\n    fn test_to_le_bits() {\n        let field = 2;\n        let bits: [u1; 8] = field.to_le_bits();\n        assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n    }\n    // docs:end:to_le_bits_example\n\n    #[test]\n    // docs:start:to_be_bytes_example\n    fn test_to_be_bytes() {\n        let field = 2;\n        let bytes: [u8; 8] = field.to_be_bytes();\n        assert_eq(bytes, [0, 0, 0, 0, 0, 0, 0, 2]);\n        assert_eq(Field::from_be_bytes::<8>(bytes), field);\n    }\n    // docs:end:to_be_bytes_example\n\n    #[test]\n    // docs:start:to_le_bytes_example\n    fn test_to_le_bytes() {\n        let field = 2;\n        let bytes: [u8; 8] = field.to_le_bytes();\n        assert_eq(bytes, [2, 0, 0, 0, 0, 0, 0, 0]);\n        assert_eq(Field::from_le_bytes::<8>(bytes), field);\n    }\n    // docs:end:to_le_bytes_example\n\n    #[test]\n    // docs:start:to_be_radix_example\n    fn test_to_be_radix() {\n        // 259, in base 256, big endian, is [1, 3].\n        // i.e. 3 * 256^0 + 1 * 256^1\n        let field = 259;\n\n        // The radix (in this example, 256) must be a power of 2.\n        // The length of the returned byte array can be specified to be\n        // >= the amount of space needed.\n        let bytes: [u8; 8] = field.to_be_radix(256);\n        assert_eq(bytes, [0, 0, 0, 0, 0, 0, 1, 3]);\n        assert_eq(Field::from_be_bytes::<8>(bytes), field);\n    }\n    // docs:end:to_be_radix_example\n\n    #[test]\n    // docs:start:to_le_radix_example\n    fn test_to_le_radix() {\n        // 259, in base 256, little endian, is [3, 1].\n        // i.e. 3 * 256^0 + 1 * 256^1\n        let field = 259;\n\n        // The radix (in this example, 256) must be a power of 2.\n        // The length of the returned byte array can be specified to be\n        // >= the amount of space needed.\n        let bytes: [u8; 8] = field.to_le_radix(256);\n        assert_eq(bytes, [3, 1, 0, 0, 0, 0, 0, 0]);\n        assert_eq(Field::from_le_bytes::<8>(bytes), field);\n    }\n    // docs:end:to_le_radix_example\n\n    #[test(should_fail_with = \"radix must be greater than 1\")]\n    fn test_to_le_radix_1() {\n        // this test should only fail in constrained mode\n        if !runtime::is_unconstrained() {\n            let field = 2;\n            let _: [u8; 8] = field.to_le_radix(1);\n        } else {\n            panic(\"radix must be greater than 1\");\n        }\n    }\n\n    // Updated test to account for Brillig restriction that radix must be greater than 2\n    #[test(should_fail_with = \"radix must be greater than 1\")]\n    fn test_to_le_radix_brillig_1() {\n        // this test should only fail in constrained mode\n        if !runtime::is_unconstrained() {\n            let field = 1;\n            let _: [u8; 8] = field.to_le_radix(1);\n        } else {\n            panic(\"radix must be greater than 1\");\n        }\n    }\n\n    #[test(should_fail_with = \"radix must be a power of 2\")]\n    fn test_to_le_radix_3() {\n        // this test should only fail in constrained mode\n        if !runtime::is_unconstrained() {\n            let field = 2;\n            let _: [u8; 8] = field.to_le_radix(3);\n        } else {\n            panic(\"radix must be a power of 2\");\n        }\n    }\n\n    #[test]\n    fn test_to_le_radix_brillig_3() {\n        // this test should only fail in constrained mode\n        if runtime::is_unconstrained() {\n            let field = 1;\n            let out: [u8; 8] = field.to_le_radix(3);\n            let mut expected = [0; 8];\n            expected[0] = 1;\n            assert(out == expected, \"unexpected result\");\n        }\n    }\n\n    #[test(should_fail_with = \"radix must be less than or equal to 256\")]\n    fn test_to_le_radix_512() {\n        // this test should only fail in constrained mode\n        if !runtime::is_unconstrained() {\n            let field = 2;\n            let _: [u8; 8] = field.to_le_radix(512);\n        } else {\n            panic(\"radix must be less than or equal to 256\")\n        }\n    }\n\n    #[test(should_fail_with = \"Field failed to decompose into specified 16 limbs\")]\n    unconstrained fn not_enough_limbs_brillig() {\n        let _: [u8; 16] = 0x100000000000000000000000000000000.to_le_bytes();\n    }\n\n    #[test(should_fail_with = \"Field failed to decompose into specified 16 limbs\")]\n    fn not_enough_limbs() {\n        let _: [u8; 16] = 0x100000000000000000000000000000000.to_le_bytes();\n    }\n\n    #[test]\n    unconstrained fn test_field_less_than() {\n        assert(field_less_than(0, 1));\n        assert(field_less_than(0, 0x100));\n        assert(field_less_than(0x100, 0 - 1));\n        assert(!field_less_than(0 - 1, 0));\n    }\n\n    #[test]\n    unconstrained fn test_large_field_values_unconstrained() {\n        let large_field = 0xffffffffffffffff;\n\n        let bits: [u1; 64] = large_field.to_le_bits();\n        assert_eq(bits[0], 1);\n\n        let bytes: [u8; 8] = large_field.to_le_bytes();\n        assert_eq(Field::from_le_bytes::<8>(bytes), large_field);\n\n        let radix_bytes: [u8; 8] = large_field.to_le_radix(256);\n        assert_eq(Field::from_le_bytes::<8>(radix_bytes), large_field);\n    }\n\n    #[test]\n    fn test_large_field_values() {\n        let large_val = 0xffffffffffffffff;\n\n        let bits: [u1; 64] = large_val.to_le_bits();\n        assert_eq(bits[0], 1);\n\n        let bytes: [u8; 8] = large_val.to_le_bytes();\n        assert_eq(Field::from_le_bytes::<8>(bytes), large_val);\n\n        let radix_bytes: [u8; 8] = large_val.to_le_radix(256);\n        assert_eq(Field::from_le_bytes::<8>(radix_bytes), large_val);\n    }\n\n    #[test]\n    fn test_decomposition_edge_cases() {\n        let zero_bits: [u1; 8] = 0.to_le_bits();\n        assert_eq(zero_bits, [0; 8]);\n\n        let zero_bytes: [u8; 8] = 0.to_le_bytes();\n        assert_eq(zero_bytes, [0; 8]);\n\n        let one_bits: [u1; 8] = 1.to_le_bits();\n        let expected: [u1; 8] = [1, 0, 0, 0, 0, 0, 0, 0];\n        assert_eq(one_bits, expected);\n\n        let pow2_bits: [u1; 8] = 4.to_le_bits();\n        let expected: [u1; 8] = [0, 0, 1, 0, 0, 0, 0, 0];\n        assert_eq(pow2_bits, expected);\n    }\n\n    #[test]\n    fn test_pow_32() {\n        assert_eq(2.pow_32(3), 8);\n        assert_eq(3.pow_32(2), 9);\n        assert_eq(5.pow_32(0), 1);\n        assert_eq(7.pow_32(1), 7);\n\n        assert_eq(2.pow_32(10), 1024);\n\n        assert_eq(0.pow_32(5), 0);\n        assert_eq(0.pow_32(0), 1);\n\n        assert_eq(1.pow_32(100), 1);\n    }\n\n    #[test]\n    fn test_sgn0() {\n        assert_eq(0.sgn0(), 0);\n        assert_eq(2.sgn0(), 0);\n        assert_eq(4.sgn0(), 0);\n        assert_eq(100.sgn0(), 0);\n\n        assert_eq(1.sgn0(), 1);\n        assert_eq(3.sgn0(), 1);\n        assert_eq(5.sgn0(), 1);\n        assert_eq(101.sgn0(), 1);\n    }\n\n    #[test(should_fail_with = \"Field failed to decompose into specified 8 limbs\")]\n    fn test_bit_decomposition_overflow() {\n        // 8 bits can't represent large field values\n        let large_val = 0x1000000000000000;\n        let _: [u1; 8] = large_val.to_le_bits();\n    }\n\n    #[test(should_fail_with = \"Field failed to decompose into specified 4 limbs\")]\n    fn test_byte_decomposition_overflow() {\n        // 4 bytes can't represent large field values\n        let large_val = 0x1000000000000000;\n        let _: [u8; 4] = large_val.to_le_bytes();\n    }\n\n    #[test]\n    fn test_to_from_be_bytes_bn254_edge_cases() {\n        if crate::compat::is_bn254() {\n            // checking that decrementing this byte produces the expected 32 BE bytes for (modulus - 1)\n            let mut p_minus_1_bytes: [u8; 32] = modulus_be_bytes().as_array();\n            assert(p_minus_1_bytes[32 - 1] > 0);\n            p_minus_1_bytes[32 - 1] -= 1;\n\n            let p_minus_1 = Field::from_be_bytes::<32>(p_minus_1_bytes);\n            assert_eq(p_minus_1 + 1, 0);\n\n            // checking that converting (modulus - 1) from and then to 32 BE bytes produces the same bytes\n            let p_minus_1_converted_bytes: [u8; 32] = p_minus_1.to_be_bytes();\n            assert_eq(p_minus_1_converted_bytes, p_minus_1_bytes);\n\n            // checking that incrementing this byte produces 32 BE bytes for (modulus + 1)\n            let mut p_plus_1_bytes: [u8; 32] = modulus_be_bytes().as_array();\n            assert(p_plus_1_bytes[32 - 1] < 255);\n            p_plus_1_bytes[32 - 1] += 1;\n\n            let p_plus_1 = Field::from_be_bytes::<32>(p_plus_1_bytes);\n            assert_eq(p_plus_1, 1);\n\n            // checking that converting p_plus_1 to 32 BE bytes produces the same\n            // byte set to 1 as p_plus_1_bytes and otherwise zeroes\n            let mut p_plus_1_converted_bytes: [u8; 32] = p_plus_1.to_be_bytes();\n            assert_eq(p_plus_1_converted_bytes[32 - 1], 1);\n            p_plus_1_converted_bytes[32 - 1] = 0;\n            assert_eq(p_plus_1_converted_bytes, [0; 32]);\n\n            // checking that Field::from_be_bytes::<32> on the Field modulus produces 0\n            assert_eq(modulus_be_bytes().len(), 32);\n            let p = Field::from_be_bytes::<32>(modulus_be_bytes().as_array());\n            assert_eq(p, 0);\n\n            // checking that converting 0 to 32 BE bytes produces 32 zeroes\n            let p_bytes: [u8; 32] = 0.to_be_bytes();\n            assert_eq(p_bytes, [0; 32]);\n        }\n    }\n\n    #[test]\n    fn test_to_from_le_bytes_bn254_edge_cases() {\n        if crate::compat::is_bn254() {\n            // checking that decrementing this byte produces the expected 32 LE bytes for (modulus - 1)\n            let mut p_minus_1_bytes: [u8; 32] = modulus_le_bytes().as_array();\n            assert(p_minus_1_bytes[0] > 0);\n            p_minus_1_bytes[0] -= 1;\n\n            let p_minus_1 = Field::from_le_bytes::<32>(p_minus_1_bytes);\n            assert_eq(p_minus_1 + 1, 0);\n\n            // checking that converting (modulus - 1) from and then to 32 BE bytes produces the same bytes\n            let p_minus_1_converted_bytes: [u8; 32] = p_minus_1.to_le_bytes();\n            assert_eq(p_minus_1_converted_bytes, p_minus_1_bytes);\n\n            // checking that incrementing this byte produces 32 LE bytes for (modulus + 1)\n            let mut p_plus_1_bytes: [u8; 32] = modulus_le_bytes().as_array();\n            assert(p_plus_1_bytes[0] < 255);\n            p_plus_1_bytes[0] += 1;\n\n            let p_plus_1 = Field::from_le_bytes::<32>(p_plus_1_bytes);\n            assert_eq(p_plus_1, 1);\n\n            // checking that converting p_plus_1 to 32 LE bytes produces the same\n            // byte set to 1 as p_plus_1_bytes and otherwise zeroes\n            let mut p_plus_1_converted_bytes: [u8; 32] = p_plus_1.to_le_bytes();\n            assert_eq(p_plus_1_converted_bytes[0], 1);\n            p_plus_1_converted_bytes[0] = 0;\n            assert_eq(p_plus_1_converted_bytes, [0; 32]);\n\n            // checking that Field::from_le_bytes::<32> on the Field modulus produces 0\n            assert_eq(modulus_le_bytes().len(), 32);\n            let p = Field::from_le_bytes::<32>(modulus_le_bytes().as_array());\n            assert_eq(p, 0);\n\n            // checking that converting 0 to 32 LE bytes produces 32 zeroes\n            let p_bytes: [u8; 32] = 0.to_le_bytes();\n            assert_eq(p_bytes, [0; 32]);\n        }\n    }\n\n    /// Convert a little endian bit array to a field element.\n    /// If the provided bit array overflows the field modulus then the Field will silently wrap around.\n    fn from_le_bits<let N: u32>(bits: [u1; N]) -> Field {\n        static_assert(\n            N <= modulus_le_bits().len(),\n            \"N must be less than or equal to modulus_le_bits().len()\",\n        );\n        let mut v = 1;\n        let mut result = 0;\n\n        for i in 0..N {\n            result += (bits[i] as Field) * v;\n            v = v * 2;\n        }\n        result\n    }\n\n    /// Convert a big endian bit array to a field element.\n    /// If the provided bit array overflows the field modulus then the Field will silently wrap around.\n    fn from_be_bits<let N: u32>(bits: [u1; N]) -> Field {\n        let mut v = 1;\n        let mut result = 0;\n\n        for i in 0..N {\n            result += (bits[N - 1 - i] as Field) * v;\n            v = v * 2;\n        }\n        result\n    }\n\n    #[test]\n    fn test_to_from_be_bits_bn254_edge_cases() {\n        if crate::compat::is_bn254() {\n            // checking that decrementing this bit produces the expected 254 BE bits for (modulus - 1)\n            let mut p_minus_1_bits: [u1; 254] = modulus_be_bits().as_array();\n            assert(p_minus_1_bits[254 - 1] > 0);\n            p_minus_1_bits[254 - 1] -= 1;\n\n            let p_minus_1 = from_be_bits::<254>(p_minus_1_bits);\n            assert_eq(p_minus_1 + 1, 0);\n\n            // checking that converting (modulus - 1) from and then to 254 BE bits produces the same bits\n            let p_minus_1_converted_bits: [u1; 254] = p_minus_1.to_be_bits();\n            assert_eq(p_minus_1_converted_bits, p_minus_1_bits);\n\n            // checking that incrementing this bit produces 254 BE bits for (modulus + 4)\n            let mut p_plus_4_bits: [u1; 254] = modulus_be_bits().as_array();\n            assert(p_plus_4_bits[254 - 3] < 1);\n            p_plus_4_bits[254 - 3] += 1;\n\n            let p_plus_4 = from_be_bits::<254>(p_plus_4_bits);\n            assert_eq(p_plus_4, 4);\n\n            // checking that converting p_plus_4 to 254 BE bits produces the same\n            // bit set to 1 as p_plus_4_bits and otherwise zeroes\n            let mut p_plus_4_converted_bits: [u1; 254] = p_plus_4.to_be_bits();\n            assert_eq(p_plus_4_converted_bits[254 - 3], 1);\n            p_plus_4_converted_bits[254 - 3] = 0;\n            assert_eq(p_plus_4_converted_bits, [0; 254]);\n\n            // checking that Field::from_be_bits::<254> on the Field modulus produces 0\n            assert_eq(modulus_be_bits().len(), 254);\n            let p = from_be_bits::<254>(modulus_be_bits().as_array());\n            assert_eq(p, 0);\n\n            // checking that converting 0 to 254 BE bytes produces 254 zeroes\n            let p_bits: [u1; 254] = 0.to_be_bits();\n            assert_eq(p_bits, [0; 254]);\n        }\n    }\n\n    #[test]\n    fn test_to_from_le_bits_bn254_edge_cases() {\n        if crate::compat::is_bn254() {\n            // checking that decrementing this bit produces the expected 254 LE bits for (modulus - 1)\n            let mut p_minus_1_bits: [u1; 254] = modulus_le_bits().as_array();\n            assert(p_minus_1_bits[0] > 0);\n            p_minus_1_bits[0] -= 1;\n\n            let p_minus_1 = from_le_bits::<254>(p_minus_1_bits);\n            assert_eq(p_minus_1 + 1, 0);\n\n            // checking that converting (modulus - 1) from and then to 254 BE bits produces the same bits\n            let p_minus_1_converted_bits: [u1; 254] = p_minus_1.to_le_bits();\n            assert_eq(p_minus_1_converted_bits, p_minus_1_bits);\n\n            // checking that incrementing this bit produces 254 LE bits for (modulus + 4)\n            let mut p_plus_4_bits: [u1; 254] = modulus_le_bits().as_array();\n            assert(p_plus_4_bits[2] < 1);\n            p_plus_4_bits[2] += 1;\n\n            let p_plus_4 = from_le_bits::<254>(p_plus_4_bits);\n            assert_eq(p_plus_4, 4);\n\n            // checking that converting p_plus_4 to 254 LE bits produces the same\n            // bit set to 1 as p_plus_4_bits and otherwise zeroes\n            let mut p_plus_4_converted_bits: [u1; 254] = p_plus_4.to_le_bits();\n            assert_eq(p_plus_4_converted_bits[2], 1);\n            p_plus_4_converted_bits[2] = 0;\n            assert_eq(p_plus_4_converted_bits, [0; 254]);\n\n            // checking that Field::from_le_bits::<254> on the Field modulus produces 0\n            assert_eq(modulus_le_bits().len(), 254);\n            let p = from_le_bits::<254>(modulus_le_bits().as_array());\n            assert_eq(p, 0);\n\n            // checking that converting 0 to 254 LE bytes produces 254 zeroes\n            let p_bits: [u1; 254] = 0.to_le_bits();\n            assert_eq(p_bits, [0; 254]);\n        }\n    }\n}\n"
        },
        "19": {
            "path": "std/hash/mod.nr",
            "source": "// Exposed only for usage in `std::meta`\npub(crate) mod poseidon2;\n\nuse crate::default::Default;\nuse crate::embedded_curve_ops::{\n    EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul, multi_scalar_mul_array_return,\n};\nuse crate::meta::derive_via;\n\n#[foreign(sha256_compression)]\n// docs:start:sha256_compression\npub fn sha256_compression(input: [u32; 16], state: [u32; 8]) -> [u32; 8] {}\n// docs:end:sha256_compression\n\n#[foreign(keccakf1600)]\n// docs:start:keccakf1600\npub fn keccakf1600(input: [u64; 25]) -> [u64; 25] {}\n// docs:end:keccakf1600\n\npub mod keccak {\n    #[deprecated(\"This function has been moved to std::hash::keccakf1600\")]\n    pub fn keccakf1600(input: [u64; 25]) -> [u64; 25] {\n        super::keccakf1600(input)\n    }\n}\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n// docs:start:blake3\npub fn blake3<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{\n    if crate::runtime::is_unconstrained() {\n        // Temporary measure while Barretenberg is main proving system.\n        // Please open an issue if you're working on another proving system and running into problems due to this.\n        crate::static_assert(\n            N <= 1024,\n            \"Barretenberg cannot prove blake3 hashes with inputs larger than 1024 bytes\",\n        );\n    }\n    __blake3(input)\n}\n\n#[foreign(blake3)]\nfn __blake3<let N: u32>(input: [u8; N]) -> [u8; 32] {}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment<let N: u32>(input: [Field; N]) -> EmbeddedCurvePoint {\n    // docs:end:pedersen_commitment\n    pedersen_commitment_with_separator(input, 0)\n}\n\n#[inline_always]\npub fn pedersen_commitment_with_separator<let N: u32>(\n    input: [Field; N],\n    separator: u32,\n) -> EmbeddedCurvePoint {\n    let mut points = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N];\n    for i in 0..N {\n        // we use the unsafe version because the multi_scalar_mul will constrain the scalars.\n        points[i] = from_field_unsafe(input[i]);\n    }\n    let generators = derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n    multi_scalar_mul(generators, points)\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<let N: u32>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n    pedersen_hash_with_separator(input, 0)\n}\n\n#[no_predicates]\npub fn pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {\n    let mut scalars: [EmbeddedCurveScalar; N + 1] = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N + 1];\n    let mut generators: [EmbeddedCurvePoint; N + 1] =\n        [EmbeddedCurvePoint::point_at_infinity(); N + 1];\n    crate::assert_constant(separator);\n    let domain_generators: [EmbeddedCurvePoint; N] =\n        derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n\n    for i in 0..N {\n        scalars[i] = from_field_unsafe(input[i]);\n        generators[i] = domain_generators[i];\n    }\n    scalars[N] = EmbeddedCurveScalar { lo: N as Field, hi: 0 as Field };\n\n    let length_generator: [EmbeddedCurvePoint; 1] =\n        derive_generators(\"pedersen_hash_length\".as_bytes(), 0);\n    generators[N] = length_generator[0];\n    multi_scalar_mul_array_return(generators, scalars, true)[0].x\n}\n\n#[field(bn254)]\n#[inline_always]\npub fn derive_generators<let N: u32, let M: u32>(\n    domain_separator_bytes: [u8; M],\n    starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {\n    crate::assert_constant(domain_separator_bytes);\n    crate::assert_constant(starting_index);\n    __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators<let N: u32, let M: u32>(\n    domain_separator_bytes: [u8; M],\n    starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n// Decompose the input 'bn254 scalar' into two 128 bits limbs.\n// It is called 'unsafe' because it does not assert the limbs are 128 bits\n// Assuming the limbs are 128 bits:\n// Assert the decomposition does not overflow the field size.\nfn from_field_unsafe(scalar: Field) -> EmbeddedCurveScalar {\n    // Safety: xlo and xhi decomposition is checked below\n    let (xlo, xhi) = unsafe { crate::field::bn254::decompose_hint(scalar) };\n    // Check that the decomposition is correct\n    assert_eq(scalar, xlo + crate::field::bn254::TWO_POW_128 * xhi);\n    // Check that the decomposition does not overflow the field size\n    let (a, b) = if xhi == crate::field::bn254::PHI {\n        (xlo, crate::field::bn254::PLO)\n    } else {\n        (xhi, crate::field::bn254::PHI)\n    };\n    crate::field::bn254::assert_lt(a, b);\n\n    EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\n\npub fn poseidon2_permutation<let N: u32>(input: [Field; N], state_len: u32) -> [Field; N] {\n    assert_eq(input.len(), state_len);\n    poseidon2_permutation_internal(input)\n}\n\n#[foreign(poseidon2_permutation)]\nfn poseidon2_permutation_internal<let N: u32>(input: [Field; N]) -> [Field; N] {}\n\n// Generic hashing support.\n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\n#[derive_via(derive_hash)]\npub trait Hash {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher;\n}\n\n// docs:start:derive_hash\ncomptime fn derive_hash(s: TypeDefinition) -> Quoted {\n    let name = quote { $crate::hash::Hash };\n    let signature = quote { fn hash<H>(_self: Self, _state: &mut H) where H: $crate::hash::Hasher };\n    let for_each_field = |name| quote { _self.$name.hash(_state); };\n    crate::meta::make_trait_impl(\n        s,\n        name,\n        signature,\n        for_each_field,\n        quote {},\n        |fields| fields,\n    )\n}\n// docs:end:derive_hash\n\n// Hasher trait shall be implemented by algorithms to provide hash-agnostic means.\n// TODO: consider making the types generic here ([u8], [Field], etc.)\npub trait Hasher {\n    fn finish(self) -> Field;\n\n    fn write(&mut self, input: Field);\n}\n\n// BuildHasher is a factory trait, responsible for production of specific Hasher.\npub trait BuildHasher {\n    type H: Hasher;\n\n    fn build_hasher(self) -> H;\n}\n\npub struct BuildHasherDefault<H>;\n\nimpl<H> BuildHasher for BuildHasherDefault<H>\nwhere\n    H: Hasher + Default,\n{\n    type H = H;\n\n    fn build_hasher(_self: Self) -> H {\n        H::default()\n    }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere\n    H: Hasher + Default,\n{\n    fn default() -> Self {\n        BuildHasherDefault {}\n    }\n}\n\nimpl Hash for Field {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self);\n    }\n}\n\nimpl Hash for u1 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as Field);\n    }\n}\n\nimpl Hash for u8 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as Field);\n    }\n}\n\nimpl Hash for u16 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as Field);\n    }\n}\n\nimpl Hash for u32 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as Field);\n    }\n}\n\nimpl Hash for u64 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as Field);\n    }\n}\n\nimpl Hash for u128 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as Field);\n    }\n}\n\nimpl Hash for i8 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as u8 as Field);\n    }\n}\n\nimpl Hash for i16 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as u16 as Field);\n    }\n}\n\nimpl Hash for i32 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as u32 as Field);\n    }\n}\n\nimpl Hash for i64 {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as u64 as Field);\n    }\n}\n\nimpl Hash for bool {\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        H::write(state, self as Field);\n    }\n}\n\nimpl Hash for () {\n    fn hash<H>(_self: Self, _state: &mut H)\n    where\n        H: Hasher,\n    {}\n}\n\nimpl<T, let N: u32> Hash for [T; N]\nwhere\n    T: Hash,\n{\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        for elem in self {\n            elem.hash(state);\n        }\n    }\n}\n\nimpl<T> Hash for [T]\nwhere\n    T: Hash,\n{\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        self.len().hash(state);\n        for elem in self {\n            elem.hash(state);\n        }\n    }\n}\n\nimpl<A, B> Hash for (A, B)\nwhere\n    A: Hash,\n    B: Hash,\n{\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        self.0.hash(state);\n        self.1.hash(state);\n    }\n}\n\nimpl<A, B, C> Hash for (A, B, C)\nwhere\n    A: Hash,\n    B: Hash,\n    C: Hash,\n{\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        self.0.hash(state);\n        self.1.hash(state);\n        self.2.hash(state);\n    }\n}\n\nimpl<A, B, C, D> Hash for (A, B, C, D)\nwhere\n    A: Hash,\n    B: Hash,\n    C: Hash,\n    D: Hash,\n{\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        self.0.hash(state);\n        self.1.hash(state);\n        self.2.hash(state);\n        self.3.hash(state);\n    }\n}\n\nimpl<A, B, C, D, E> Hash for (A, B, C, D, E)\nwhere\n    A: Hash,\n    B: Hash,\n    C: Hash,\n    D: Hash,\n    E: Hash,\n{\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        self.0.hash(state);\n        self.1.hash(state);\n        self.2.hash(state);\n        self.3.hash(state);\n        self.4.hash(state);\n    }\n}\n\n// Some test vectors for Pedersen hash and Pedersen Commitment.\n// They have been generated using the same functions so the tests are for now useless\n// but they will be useful when we switch to Noir implementation.\n#[test]\nfn assert_pedersen() {\n    assert_eq(\n        pedersen_hash_with_separator([1], 1),\n        0x1b3f4b1a83092a13d8d1a59f7acb62aba15e7002f4440f2275edb99ebbc2305f,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1], 1),\n        EmbeddedCurvePoint {\n            x: 0x054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde402,\n            y: 0x209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac126,\n            is_infinite: false,\n        },\n    );\n\n    assert_eq(\n        pedersen_hash_with_separator([1, 2], 2),\n        0x26691c129448e9ace0c66d11f0a16d9014a9e8498ee78f4d69f0083168188255,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1, 2], 2),\n        EmbeddedCurvePoint {\n            x: 0x2e2b3b191e49541fe468ec6877721d445dcaffe41728df0a0eafeb15e87b0753,\n            y: 0x2ff4482400ad3a6228be17a2af33e2bcdf41be04795f9782bd96efe7e24f8778,\n            is_infinite: false,\n        },\n    );\n    assert_eq(\n        pedersen_hash_with_separator([1, 2, 3], 3),\n        0x0bc694b7a1f8d10d2d8987d07433f26bd616a2d351bc79a3c540d85b6206dbe4,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1, 2, 3], 3),\n        EmbeddedCurvePoint {\n            x: 0x1fee4e8cf8d2f527caa2684236b07c4b1bad7342c01b0f75e9a877a71827dc85,\n            y: 0x2f9fedb9a090697ab69bf04c8bc15f7385b3e4b68c849c1536e5ae15ff138fd1,\n            is_infinite: false,\n        },\n    );\n    assert_eq(\n        pedersen_hash_with_separator([1, 2, 3, 4], 4),\n        0xdae10fb32a8408521803905981a2b300d6a35e40e798743e9322b223a5eddc,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1, 2, 3, 4], 4),\n        EmbeddedCurvePoint {\n            x: 0x07ae3e202811e1fca39c2d81eabe6f79183978e6f12be0d3b8eda095b79bdbc9,\n            y: 0x0afc6f892593db6fbba60f2da558517e279e0ae04f95758587760ba193145014,\n            is_infinite: false,\n        },\n    );\n    assert_eq(\n        pedersen_hash_with_separator([1, 2, 3, 4, 5], 5),\n        0xfc375b062c4f4f0150f7100dfb8d9b72a6d28582dd9512390b0497cdad9c22,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1, 2, 3, 4, 5], 5),\n        EmbeddedCurvePoint {\n            x: 0x1754b12bd475a6984a1094b5109eeca9838f4f81ac89c5f0a41dbce53189bb29,\n            y: 0x2da030e3cfcdc7ddad80eaf2599df6692cae0717d4e9f7bfbee8d073d5d278f7,\n            is_infinite: false,\n        },\n    );\n    assert_eq(\n        pedersen_hash_with_separator([1, 2, 3, 4, 5, 6], 6),\n        0x1696ed13dc2730062a98ac9d8f9de0661bb98829c7582f699d0273b18c86a572,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6], 6),\n        EmbeddedCurvePoint {\n            x: 0x190f6c0e97ad83e1e28da22a98aae156da083c5a4100e929b77e750d3106a697,\n            y: 0x1f4b60f34ef91221a0b49756fa0705da93311a61af73d37a0c458877706616fb,\n            is_infinite: false,\n        },\n    );\n    assert_eq(\n        pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7], 7),\n        0x128c0ff144fc66b6cb60eeac8a38e23da52992fc427b92397a7dffd71c45ede3,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7], 7),\n        EmbeddedCurvePoint {\n            x: 0x015441e9d29491b06563fac16fc76abf7a9534c715421d0de85d20dbe2965939,\n            y: 0x1d2575b0276f4e9087e6e07c2cb75aa1baafad127af4be5918ef8a2ef2fea8fc,\n            is_infinite: false,\n        },\n    );\n    assert_eq(\n        pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8),\n        0x2f960e117482044dfc99d12fece2ef6862fba9242be4846c7c9a3e854325a55c,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8),\n        EmbeddedCurvePoint {\n            x: 0x1657737676968887fceb6dd516382ea13b3a2c557f509811cd86d5d1199bc443,\n            y: 0x1f39f0cb569040105fa1e2f156521e8b8e08261e635a2b210bdc94e8d6d65f77,\n            is_infinite: false,\n        },\n    );\n    assert_eq(\n        pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9),\n        0x0c96db0790602dcb166cc4699e2d306c479a76926b81c2cb2aaa92d249ec7be7,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9),\n        EmbeddedCurvePoint {\n            x: 0x0a3ceae42d14914a432aa60ec7fded4af7dad7dd4acdbf2908452675ec67e06d,\n            y: 0xfc19761eaaf621ad4aec9a8b2e84a4eceffdba78f60f8b9391b0bd9345a2f2,\n            is_infinite: false,\n        },\n    );\n    assert_eq(\n        pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),\n        0x2cd37505871bc460a62ea1e63c7fe51149df5d0801302cf1cbc48beb8dff7e94,\n    );\n    assert_eq(\n        pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),\n        EmbeddedCurvePoint {\n            x: 0x2fb3f8b3d41ddde007c8c3c62550f9a9380ee546fcc639ffbb3fd30c8d8de30c,\n            y: 0x300783be23c446b11a4c0fabf6c91af148937cea15fcf5fb054abf7f752ee245,\n            is_infinite: false,\n        },\n    );\n}\n"
        },
        "42": {
            "path": "std/option.nr",
            "source": "use crate::cmp::{Eq, Ord, Ordering};\nuse crate::default::Default;\nuse crate::hash::{Hash, Hasher};\n\npub struct Option<T> {\n    _is_some: bool,\n    _value: T,\n}\n\nimpl<T> Option<T> {\n    /// Constructs a None value\n    pub fn none() -> Self {\n        Self { _is_some: false, _value: crate::mem::zeroed() }\n    }\n\n    /// Constructs a Some wrapper around the given value\n    pub fn some(_value: T) -> Self {\n        Self { _is_some: true, _value }\n    }\n\n    /// True if this Option is None\n    pub fn is_none(self) -> bool {\n        !self._is_some\n    }\n\n    /// True if this Option is Some\n    pub fn is_some(self) -> bool {\n        self._is_some\n    }\n\n    /// Asserts `self.is_some()` and returns the wrapped value.\n    pub fn unwrap(self) -> T {\n        assert(self._is_some);\n        self._value\n    }\n\n    /// Returns the inner value without asserting `self.is_some()`\n    /// Note that if `self` is `None`, there is no guarantee what value will be returned,\n    /// only that it will be of type `T`.\n    pub fn unwrap_unchecked(self) -> T {\n        self._value\n    }\n\n    /// Returns the wrapped value if `self.is_some()`. Otherwise, returns the given default value.\n    pub fn unwrap_or(self, default: T) -> T {\n        if self._is_some {\n            self._value\n        } else {\n            default\n        }\n    }\n\n    /// Returns the wrapped value if `self.is_some()`. Otherwise, calls the given function to return\n    /// a default value.\n    pub fn unwrap_or_else<Env>(self, default: fn[Env]() -> T) -> T {\n        if self._is_some {\n            self._value\n        } else {\n            default()\n        }\n    }\n\n    /// Asserts `self.is_some()` with a provided custom message and returns the contained `Some` value\n    pub fn expect<let N: u32, MessageTypes>(self, message: fmtstr<N, MessageTypes>) -> T {\n        assert(self.is_some(), message);\n        self._value\n    }\n\n    /// If self is `Some(x)`, this returns `Some(f(x))`. Otherwise, this returns `None`.\n    pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> Option<U> {\n        if self._is_some {\n            Option::some(f(self._value))\n        } else {\n            Option::none()\n        }\n    }\n\n    /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns the given default value.\n    pub fn map_or<U, Env>(self, default: U, f: fn[Env](T) -> U) -> U {\n        if self._is_some {\n            f(self._value)\n        } else {\n            default\n        }\n    }\n\n    /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns `default()`.\n    pub fn map_or_else<U, Env1, Env2>(self, default: fn[Env1]() -> U, f: fn[Env2](T) -> U) -> U {\n        if self._is_some {\n            f(self._value)\n        } else {\n            default()\n        }\n    }\n\n    /// Returns None if self is None. Otherwise, this returns `other`.\n    pub fn and(self, other: Self) -> Self {\n        if self.is_none() {\n            Option::none()\n        } else {\n            other\n        }\n    }\n\n    /// If self is None, this returns None. Otherwise, this calls the given function\n    /// with the Some value contained within self, and returns the result of that call.\n    ///\n    /// In some languages this function is called `flat_map` or `bind`.\n    pub fn and_then<U, Env>(self, f: fn[Env](T) -> Option<U>) -> Option<U> {\n        if self._is_some {\n            f(self._value)\n        } else {\n            Option::none()\n        }\n    }\n\n    /// If self is Some, return self. Otherwise, return `other`.\n    pub fn or(self, other: Self) -> Self {\n        if self._is_some {\n            self\n        } else {\n            other\n        }\n    }\n\n    /// If self is Some, return self. Otherwise, return `default()`.\n    pub fn or_else<Env>(self, default: fn[Env]() -> Self) -> Self {\n        if self._is_some {\n            self\n        } else {\n            default()\n        }\n    }\n\n    // If only one of the two Options is Some, return that option.\n    // Otherwise, if both options are Some or both are None, None is returned.\n    pub fn xor(self, other: Self) -> Self {\n        if self._is_some {\n            if other._is_some {\n                Option::none()\n            } else {\n                self\n            }\n        } else if other._is_some {\n            other\n        } else {\n            Option::none()\n        }\n    }\n\n    /// Returns `Some(x)` if self is `Some(x)` and `predicate(x)` is true.\n    /// Otherwise, this returns `None`\n    pub fn filter<Env>(self, predicate: fn[Env](T) -> bool) -> Self {\n        if self._is_some {\n            if predicate(self._value) {\n                self\n            } else {\n                Option::none()\n            }\n        } else {\n            Option::none()\n        }\n    }\n\n    /// Flattens an Option<Option<T>> into a Option<T>.\n    /// This returns None if the outer Option is None. Otherwise, this returns the inner Option.\n    pub fn flatten(option: Option<Option<T>>) -> Option<T> {\n        if option._is_some {\n            option._value\n        } else {\n            Option::none()\n        }\n    }\n}\n\nimpl<T> Default for Option<T> {\n    fn default() -> Self {\n        Option::none()\n    }\n}\n\nimpl<T> Eq for Option<T>\nwhere\n    T: Eq,\n{\n    fn eq(self, other: Self) -> bool {\n        if self._is_some == other._is_some {\n            if self._is_some {\n                self._value == other._value\n            } else {\n                true\n            }\n        } else {\n            false\n        }\n    }\n}\n\nimpl<T> Hash for Option<T>\nwhere\n    T: Hash,\n{\n    fn hash<H>(self, state: &mut H)\n    where\n        H: Hasher,\n    {\n        self._is_some.hash(state);\n        if self._is_some {\n            self._value.hash(state);\n        }\n    }\n}\n\n// For this impl we're declaring Option::none < Option::some\nimpl<T> Ord for Option<T>\nwhere\n    T: Ord,\n{\n    fn cmp(self, other: Self) -> Ordering {\n        if self._is_some {\n            if other._is_some {\n                self._value.cmp(other._value)\n            } else {\n                Ordering::greater()\n            }\n        } else if other._is_some {\n            Ordering::less()\n        } else {\n            Ordering::equal()\n        }\n    }\n}\n"
        },
        "43": {
            "path": "std/panic.nr",
            "source": "pub fn panic<T, U>(message: T) -> U\nwhere\n    T: StringLike,\n{\n    assert(false, message);\n    crate::mem::zeroed()\n}\n\ntrait StringLike {}\n\nimpl<let N: u32> StringLike for str<N> {}\nimpl<let N: u32, T> StringLike for fmtstr<N, T> {}\n"
        },
        "75": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/capsules/mod.nr",
            "source": "use crate::oracle::capsules;\nuse crate::protocol::{address::AztecAddress, traits::{Deserialize, Serialize}};\n\n/// A dynamically sized array backed by PXE's non-volatile database (called capsules). Values are persisted until\n/// deleted, so they can be e.g. stored during simulation of a transaction and later retrieved during witness\n/// generation. All values are scoped per contract address, so external contracts cannot access them.\npub struct CapsuleArray<T> {\n    contract_address: AztecAddress,\n    /// The base slot is where the array length is stored in capsules. Array elements are stored in consecutive slots\n    /// after the base slot. For example, with base slot 5: the length is at slot 5, the first element (index 0) is at\n    /// slot 6, the second element (index 1) is at slot 7, and so on.\n    base_slot: Field,\n    /// Scope for capsule isolation. Capsule operations are scoped to the given address, allowing multiple independent\n    /// namespaces within the same contract.\n    scope: AztecAddress,\n}\n\nimpl<T> CapsuleArray<T> {\n    /// Returns a CapsuleArray scoped to a specific address.\n    ///\n    /// Array elements are stored in contiguous slots\n    /// following the base slot, so there should be sufficient space between array base slots to accommodate elements.\n    /// A reasonable strategy is to make the base slot a hash of a unique value.\n    pub unconstrained fn at(contract_address: AztecAddress, base_slot: Field, scope: AztecAddress) -> Self {\n        Self { contract_address, base_slot, scope }\n    }\n\n    /// Returns the number of elements stored in the array.\n    pub unconstrained fn len(self) -> u32 {\n        // An uninitialized array defaults to a length of 0.\n        capsules::load(self.contract_address, self.base_slot, self.scope).unwrap_or(0) as u32\n    }\n\n    /// Stores a value at the end of the array.\n    pub unconstrained fn push(self, value: T)\n    where\n        T: Serialize,\n    {\n        let current_length = self.len();\n\n        // The slot corresponding to the index `current_length` is the first slot immediately after the end of the\n        // array, which is where we want to place the new value.\n        capsules::store(\n            self.contract_address,\n            self.slot_at(current_length),\n            value,\n            self.scope,\n        );\n\n        // Then we simply update the length.\n        let new_length = current_length + 1;\n        capsules::store(\n            self.contract_address,\n            self.base_slot,\n            new_length,\n            self.scope,\n        );\n    }\n\n    /// Retrieves the value stored in the array at `index`. Throws if the index is out of bounds.\n    pub unconstrained fn get(self, index: u32) -> T\n    where\n        T: Deserialize,\n    {\n        assert(index < self.len(), \"Attempted to read past the length of a CapsuleArray\");\n\n        capsules::load(self.contract_address, self.slot_at(index), self.scope).unwrap()\n    }\n\n    /// Deletes the value stored in the array at `index`. Throws if the index is out of bounds.\n    pub unconstrained fn remove(self, index: u32) {\n        let current_length = self.len();\n        assert(index < current_length, \"Attempted to delete past the length of a CapsuleArray\");\n\n        // In order to be able to remove elements at arbitrary indices, we need to shift the entire contents of the\n        // array past the removed element one slot backward so that we don't end up with a gap and preserve the\n        // contiguous slots. We can skip this when deleting the last element however.\n        if index != current_length - 1 {\n            // The source and destination regions overlap, but `copy` supports this.\n            capsules::copy(\n                self.contract_address,\n                self.slot_at(index + 1),\n                self.slot_at(index),\n                current_length - index - 1,\n                self.scope,\n            );\n        }\n\n        // We can now delete the last element (which has either been copied to the slot immediately before it, or was\n        // the element we meant to delete in the first place) and update the length.\n        capsules::delete(\n            self.contract_address,\n            self.slot_at(current_length - 1),\n            self.scope,\n        );\n        capsules::store(\n            self.contract_address,\n            self.base_slot,\n            current_length - 1,\n            self.scope,\n        );\n    }\n\n    /// Calls a function on each element of the array.\n    ///\n    /// The function `f` is called once with each array value and its corresponding index. The order in which values\n    /// are processed is arbitrary.\n    ///\n    /// ## Array Mutation\n    ///\n    /// It is safe to delete the current element (and only the current element) from inside the callback via `remove`:\n    /// ```noir\n    /// array.for_each(|index, value| {\n    ///   if some_condition(value) {\n    ///     array.remove(index); // safe only for this index\n    ///   }\n    /// }\n    /// ```\n    ///\n    /// If all elements in the array need to iterated over and then removed, then using `for_each` results in optimal\n    /// efficiency.\n    ///\n    /// It is **not** safe to push new elements into the array from inside the callback.\n    pub unconstrained fn for_each<Env>(self, f: unconstrained fn[Env](u32, T) -> ())\n    where\n        T: Deserialize,\n    {\n        // Iterating over all elements is simple, but we want to do it in such a way that a) deleting the current\n        // element is safe to do, and b) deleting *all* elements is optimally efficient. This is because CapsuleArrays\n        // are typically used to hold pending tasks, so iterating them while clearing completed tasks (sometimes\n        // unconditionally, resulting in a full clear) is a very common access pattern.\n        //\n        // The way we achieve this is by iterating backwards: each element can always be deleted since it won't change\n        // any preceding (lower) indices, and if every element is deleted then every element will (in turn) be the last\n        // element. This results in an optimal full clear since `remove` will be able to skip the `capsules::copy` call\n        // to shift any elements past the deleted one (because there will be none).\n        let mut i = self.len();\n        while i > 0 {\n            i -= 1;\n            f(i, self.get(i));\n        }\n    }\n\n    unconstrained fn slot_at(self, index: u32) -> Field {\n        // Elements are stored immediately after the base slot, so we add 1 to it to compute the slot for the first\n        // element.\n        self.base_slot + 1 + index as Field\n    }\n}\n\nmod test {\n    use crate::protocol::address::AztecAddress;\n    use crate::test::helpers::test_environment::TestEnvironment;\n    use super::CapsuleArray;\n\n    global SLOT: Field = 1230;\n    global SCOPE: AztecAddress = AztecAddress { inner: 0xface };\n\n    #[test]\n    unconstrained fn empty_array() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let array: CapsuleArray<Field> = CapsuleArray::at(contract_address, SLOT, SCOPE);\n            assert_eq(array.len(), 0);\n        });\n    }\n\n    #[test(should_fail_with = \"Attempted to read past the length of a CapsuleArray\")]\n    unconstrained fn empty_array_read() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n            let _: Field = array.get(0);\n        });\n    }\n\n    #[test]\n    unconstrained fn array_push() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n            array.push(5);\n\n            assert_eq(array.len(), 1);\n            assert_eq(array.get(0), 5);\n        });\n    }\n\n    #[test(should_fail_with = \"Attempted to read past the length of a CapsuleArray\")]\n    unconstrained fn read_past_len() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n            array.push(5);\n\n            let _ = array.get(1);\n        });\n    }\n\n    #[test]\n    unconstrained fn array_remove_last() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n\n            array.push(5);\n            array.remove(0);\n\n            assert_eq(array.len(), 0);\n        });\n    }\n\n    #[test]\n    unconstrained fn array_remove_some() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n\n            array.push(7);\n            array.push(8);\n            array.push(9);\n\n            assert_eq(array.len(), 3);\n            assert_eq(array.get(0), 7);\n            assert_eq(array.get(1), 8);\n            assert_eq(array.get(2), 9);\n\n            array.remove(1);\n\n            assert_eq(array.len(), 2);\n            assert_eq(array.get(0), 7);\n            assert_eq(array.get(1), 9);\n        });\n    }\n\n    #[test]\n    unconstrained fn array_remove_all() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n\n            array.push(7);\n            array.push(8);\n            array.push(9);\n\n            array.remove(1);\n            array.remove(1);\n            array.remove(0);\n\n            assert_eq(array.len(), 0);\n        });\n    }\n\n    #[test]\n    unconstrained fn for_each_called_with_all_elements() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n\n            array.push(4);\n            array.push(5);\n            array.push(6);\n\n            // We store all values that we were called with and check that all (value, index) tuples are present. Note\n            // that we do not care about the order in which each tuple was passed to the closure.\n            let called_with = &mut BoundedVec::<(u32, Field), 3>::new();\n            array.for_each(|index, value| { called_with.push((index, value)); });\n\n            assert_eq(called_with.len(), 3);\n            assert(called_with.any(|(index, value)| (index == 0) & (value == 4)));\n            assert(called_with.any(|(index, value)| (index == 1) & (value == 5)));\n            assert(called_with.any(|(index, value)| (index == 2) & (value == 6)));\n        });\n    }\n\n    #[test]\n    unconstrained fn for_each_remove_some() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n\n            array.push(4);\n            array.push(5);\n            array.push(6);\n\n            array.for_each(|index, _| {\n                if index == 1 {\n                    array.remove(index);\n                }\n            });\n\n            assert_eq(array.len(), 2);\n            assert_eq(array.get(0), 4);\n            assert_eq(array.get(1), 6);\n        });\n    }\n\n    #[test]\n    unconstrained fn for_each_remove_all() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n\n            array.push(4);\n            array.push(5);\n            array.push(6);\n\n            array.for_each(|index, _| { array.remove(index); });\n\n            assert_eq(array.len(), 0);\n        });\n    }\n\n    #[test]\n    unconstrained fn for_each_remove_all_no_copy() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let array = CapsuleArray::at(contract_address, SLOT, SCOPE);\n\n            array.push(4);\n            array.push(5);\n            array.push(6);\n\n            // We test that the aztec_utl_copyCapsule was never called, which is the expensive operation we want to\n            // avoid.\n            let mock = std::test::OracleMock::mock(\"aztec_utl_copyCapsule\");\n\n            array.for_each(|index, _| { array.remove(index); });\n\n            assert_eq(mock.times_called(), 0);\n        });\n    }\n\n    #[test]\n    unconstrained fn different_scopes_are_isolated() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let scope_a = AztecAddress { inner: 0xaaa };\n            let scope_b = AztecAddress { inner: 0xbbb };\n\n            let array_a = CapsuleArray::at(contract_address, SLOT, scope_a);\n            let array_b = CapsuleArray::at(contract_address, SLOT, scope_b);\n\n            array_a.push(10);\n            array_a.push(20);\n            array_b.push(99);\n\n            assert_eq(array_a.len(), 2);\n            assert_eq(array_a.get(0), 10);\n            assert_eq(array_a.get(1), 20);\n\n            assert_eq(array_b.len(), 1);\n            assert_eq(array_b.get(0), 99);\n        });\n    }\n}\n"
        },
        "85": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/context/private_context.nr",
            "source": "use crate::{\n    context::{inputs::PrivateContextInputs, NoteExistenceRequest, NullifierExistenceRequest, ReturnsHash},\n    hash::{hash_args, hash_calldata_array},\n    keys::constants::{NULLIFIER_INDEX, NUM_KEY_TYPES, OUTGOING_INDEX, public_key_domain_separators},\n    messaging::process_l1_to_l2_message,\n    oracle::{\n        block_header::get_block_header_at,\n        call_private_function::call_private_function_internal,\n        execution_cache,\n        key_validation_request::get_key_validation_request,\n        logs::notify_created_contract_class_log,\n        notes::notify_nullified_note,\n        nullifiers::notify_created_nullifier,\n        public_call::assert_valid_public_call_data,\n        tx_phase::{is_execution_in_revertible_phase, notify_revertible_phase_start},\n    },\n};\nuse crate::logging::aztecnr_trace_log_format;\nuse crate::protocol::{\n    abis::{\n        block_header::BlockHeader,\n        call_context::CallContext,\n        function_selector::FunctionSelector,\n        gas_settings::GasSettings,\n        log_hash::LogHash,\n        note_hash::NoteHash,\n        nullifier::Nullifier,\n        private_call_request::PrivateCallRequest,\n        private_circuit_public_inputs::PrivateCircuitPublicInputs,\n        private_log::{PrivateLog, PrivateLogData},\n        public_call_request::PublicCallRequest,\n        validation_requests::{KeyValidationRequest, KeyValidationRequestAndSeparator},\n    },\n    address::{AztecAddress, EthAddress},\n    constants::{\n        CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, MAX_CONTRACT_CLASS_LOGS_PER_CALL, MAX_ENQUEUED_CALLS_PER_CALL,\n        MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL,\n        MAX_NOTE_HASHES_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n        MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PRIVATE_LOGS_PER_CALL, MAX_TX_LIFETIME,\n        NULL_MSG_SENDER_CONTRACT_ADDRESS, PRIVATE_LOG_CIPHERTEXT_LEN,\n    },\n    hash::poseidon2_hash,\n    messaging::l2_to_l1_message::L2ToL1Message,\n    side_effect::{Counted, scoped::Scoped},\n    traits::{Empty, Hash, ToField},\n    utils::arrays::{ClaimedLengthArray, trimmed_array_length_hint},\n};\n\n/// # PrivateContext\n///\n/// The **main interface** between an #[external(\"private\")] function and the Aztec blockchain.\n///\n/// An instance of the PrivateContext is initialized automatically at the outset of every private function, within the\n/// #[external(\"private\")] macro, so you'll never need to consciously instantiate this yourself.\n///\n/// The instance is always named `context`, and it is always be available within the body of every\n/// #[external(\"private\")] function in your smart contract.\n///\n/// > For those used to \"vanilla\" Noir, it might be jarring to have access to > `context` without seeing a declaration\n/// `let context = PrivateContext::new(...)` > within the body of your function. This is just a consequence of using >\n/// macros to tidy-up verbose boilerplate. You can use `nargo expand` to > expand all macros, if you dare.\n///\n/// Typical usage for a smart contract developer will be to call getter methods of the PrivateContext.\n///\n/// _Pushing_ data and requests to the context is mostly handled within aztec-nr's own functions, so typically a smart\n/// contract developer won't need to call any setter methods directly.\n///\n/// > Advanced users might occasionally wish to push data to the context > directly for lower-level control. If you\n/// find yourself doing this, please > open an issue on GitHub to describe your use case: it might be that > new\n/// functionality should be added to aztec-nr.\n///\n/// ## Responsibilities\n/// - Exposes contextual data to a private function:\n/// - Data relating to how this private function was called.\n/// - msg_sender\n/// - this_address - (the contract address of the private function being executed)\n/// - See `CallContext` for more data.\n/// - Data relating to the transaction in which this private function is being executed.\n/// - chain_id\n/// - version\n/// - gas_settings\n/// - Provides state access:\n/// - Access to the \"Anchor block\" header. Recall, a private function cannot read from the \"current\" block header, but\n/// must read from some historical block header, because as soon as private function execution begins (asynchronously,\n/// on a user's device), the public state of the chain (the \"current state\") will have progressed forward. We call this\n/// reference the \"Anchor block\". See `BlockHeader`.\n///   - Enables consumption of L1->L2 messages.\n/// - Enables calls to functions of other smart contracts:\n/// - Private function calls\n/// - Enqueueing of public function call requests (Since public functions are executed at a later time, by a block\n/// proposer, we say they are \"enqueued\").\n/// - Writes data to the blockchain:\n/// - New notes\n/// - New nullifiers\n/// - Private logs (for sending encrypted note contents or encrypted events)\n///   - New L2->L1 messages.\n/// - Provides args to the private function (handled by the #[external(\"private\")] macro).\n/// - Returns the return values of this private function (handled by the\n///   #[external(\"private\")] macro).\n/// - Makes Key Validation Requests.\n/// - Private functions are not allowed to see master secret keys, because we do not trust them. They are instead given\n/// \"app-siloed\" secret keys with a claim that they relate to a master public key. They can then request validation of\n/// this claim, by making a \"key validation request\" to the protocol's kernel circuits (which _are_ allowed to see\n/// certain master secret keys).\n///\n/// ## Advanced Responsibilities\n///\n/// - Ultimately, the PrivateContext is responsible for constructing the PrivateCircuitPublicInputs of the private\n/// function being executed. All private functions on Aztec must have public inputs which adhere to the rigid layout of\n/// the PrivateCircuitPublicInputs, in order to be compatible with the protocol's kernel circuits. A well-known\n/// misnomer:\n/// - \"public inputs\" contain both inputs and outputs of this function.\n/// - By \"outputs\" we mean a lot more side-effects than just the \"return values\" of the function.\n/// - Most of the so-called \"public inputs\" are kept _private_, and never leak to the outside world, because they are\n/// 'swallowed' by the protocol's kernel circuits before the tx is sent to the network. Only the following are exposed\n/// to the outside world:\n/// - New note_hashes\n/// - New nullifiers\n/// - New private logs\n///     - New L2->L1 messages\n/// - New enqueued public function call requests All the above-listed arrays of side-effects can be padded by the\n/// user's wallet (through instructions to the kernel circuits, via the PXE) to obscure their true lengths.\n///\n/// ## Syntax Justification\n///\n/// Both user-defined functions _and_ most functions in aztec-nr need access to the PrivateContext instance to\n/// read/write data. This is why you'll see the arguably-ugly pervasiveness of the \"context\" throughout your smart\n/// contract and the aztec-nr library. For example, `&mut context` is prevalent. In some languages, you can access and\n/// mutate a global variable (such as a PrivateContext instance) from a function without polluting the function's\n/// parameters. With Noir, a function must explicitly pass control of a mutable variable to another function, by\n/// reference. Since many functions in aztec-nr need to be able to push new data to the PrivateContext, they need to be\n/// handed a mutable reference _to_ the context as a parameter. For example, `Context` is prevalent as a generic\n/// parameter, to give better type safety at compile time. Many `aztec-nr` functions don't make sense if they're called\n/// in a particular runtime (private, public or utility), and so are intentionally only implemented over certain\n/// [Private|Public|Utility]Context structs. This gives smart contract developers a much faster feedback loop if\n/// they're making a mistake, as an error will be thrown by the LSP or when they compile their contract.\n///\n#[derive(Eq)]\npub struct PrivateContext {\n    // docs:start:private-context\n    pub inputs: PrivateContextInputs,\n    pub side_effect_counter: u32,\n\n    pub min_revertible_side_effect_counter: u32,\n    pub is_fee_payer: bool,\n\n    pub args_hash: Field,\n    pub return_hash: Field,\n\n    pub expiration_timestamp: u64,\n\n    pub(crate) note_hash_read_requests: BoundedVec<Scoped<Counted<Field>>, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n    pub(crate) nullifier_read_requests: BoundedVec<Scoped<Counted<Field>>, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n    key_validation_requests_and_separators: BoundedVec<KeyValidationRequestAndSeparator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n    pub note_hashes: BoundedVec<Counted<NoteHash>, MAX_NOTE_HASHES_PER_CALL>,\n    pub nullifiers: BoundedVec<Counted<Nullifier>, MAX_NULLIFIERS_PER_CALL>,\n\n    pub private_call_requests: BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n    pub public_call_requests: BoundedVec<Counted<PublicCallRequest>, MAX_ENQUEUED_CALLS_PER_CALL>,\n    pub public_teardown_call_request: PublicCallRequest,\n    pub l2_to_l1_msgs: BoundedVec<Counted<L2ToL1Message>, MAX_L2_TO_L1_MSGS_PER_CALL>,\n    // docs:end:private-context\n\n    // Header of a block whose state is used during private execution (not the block the transaction is included in).\n    pub anchor_block_header: BlockHeader,\n\n    pub private_logs: BoundedVec<Counted<PrivateLogData>, MAX_PRIVATE_LOGS_PER_CALL>,\n    pub contract_class_logs_hashes: BoundedVec<Counted<LogHash>, MAX_CONTRACT_CLASS_LOGS_PER_CALL>,\n\n    // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n    // fetching the same request multiple times. The index of the array corresponds to the key type (0 nullifier, 1\n    // incoming, 2 outgoing, 3 tagging).\n    pub last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n\n    pub expected_non_revertible_side_effect_counter: u32,\n    pub expected_revertible_side_effect_counter: u32,\n}\n\nimpl PrivateContext {\n    pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n        PrivateContext {\n            inputs,\n            side_effect_counter: inputs.start_side_effect_counter + 1,\n            min_revertible_side_effect_counter: 0,\n            is_fee_payer: false,\n            args_hash,\n            return_hash: 0,\n            expiration_timestamp: inputs.anchor_block_header.timestamp() + MAX_TX_LIFETIME,\n            note_hash_read_requests: BoundedVec::new(),\n            nullifier_read_requests: BoundedVec::new(),\n            key_validation_requests_and_separators: BoundedVec::new(),\n            note_hashes: BoundedVec::new(),\n            nullifiers: BoundedVec::new(),\n            anchor_block_header: inputs.anchor_block_header,\n            private_call_requests: BoundedVec::new(),\n            public_call_requests: BoundedVec::new(),\n            public_teardown_call_request: PublicCallRequest::empty(),\n            l2_to_l1_msgs: BoundedVec::new(),\n            private_logs: BoundedVec::new(),\n            contract_class_logs_hashes: BoundedVec::new(),\n            last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n            expected_non_revertible_side_effect_counter: 0,\n            expected_revertible_side_effect_counter: 0,\n        }\n    }\n\n    /// Returns the contract address that initiated this function call.\n    ///\n    /// This is similar to `msg.sender` in Solidity (hence the name).\n    ///\n    /// Important Note: Since Aztec doesn't have a concept of an EoA (Externally-owned Account), the msg_sender is\n    /// \"none\" for the first function call of every transaction. The first function call of a tx is likely to be a call\n    /// to the user's account contract, so this quirk will most often be handled by account contract developers.\n    ///\n    /// # Returns\n    /// * `Option<AztecAddress>` - The address of the smart contract that called this function (be it an app contract\n    /// or a user's account contract). Returns `Option<AztecAddress>::none` for the first function call of the tx. No\n    /// other _private_ function calls in the tx will have a `none` msg_sender, but _public_ function calls might (see\n    /// the PublicContext).\n    pub fn maybe_msg_sender(self) -> Option<AztecAddress> {\n        let maybe_msg_sender = self.inputs.call_context.msg_sender;\n        if maybe_msg_sender == NULL_MSG_SENDER_CONTRACT_ADDRESS {\n            Option::none()\n        } else {\n            Option::some(maybe_msg_sender)\n        }\n    }\n\n    /// Returns the contract address of the current function being executed.\n    ///\n    /// This is equivalent to `address(this)` in Solidity (hence the name). Use this to identify the current contract's\n    /// address, commonly needed for access control or when interacting with other contracts.\n    ///\n    /// # Returns\n    /// * `AztecAddress` - The contract address of the current function being executed.\n    ///\n    pub fn this_address(self) -> AztecAddress {\n        self.inputs.call_context.contract_address\n    }\n\n    /// Returns the chain ID of the current network.\n    ///\n    /// This is similar to `block.chainid` in Solidity. Returns the unique identifier for the blockchain network this\n    /// transaction is executing on.\n    ///\n    /// Helps prevent cross-chain replay attacks. Useful if implementing multi-chain contract logic.\n    ///\n    /// # Returns\n    /// * `Field` - The chain ID as a field element\n    ///\n    pub fn chain_id(self) -> Field {\n        self.inputs.tx_context.chain_id\n    }\n\n    /// Returns the Aztec protocol version that this transaction is executing under. Different versions may have\n    /// different rules, opcodes, or cryptographic primitives.\n    ///\n    /// This is similar to how Ethereum has different EVM versions.\n    ///\n    /// Useful for forward/backward compatibility checks\n    ///\n    /// Not to be confused with contract versions; this is the protocol version.\n    ///\n    /// # Returns\n    /// * `Field` - The protocol version as a field element\n    ///\n    pub fn version(self) -> Field {\n        self.inputs.tx_context.version\n    }\n\n    /// Returns the gas settings for the current transaction.\n    ///\n    /// This provides information about gas limits and pricing for the transaction, similar to `tx.gasprice` and gas\n    /// limits in Ethereum. However, Aztec has a more sophisticated gas model with separate accounting for L2\n    /// computation and data availability (DA) costs.\n    ///\n    /// # Returns\n    /// * `GasSettings` - Struct containing gas limits and fee information\n    ///\n    pub fn gas_settings(self) -> GasSettings {\n        self.inputs.tx_context.gas_settings\n    }\n\n    /// Returns the function selector of the currently executing function.\n    ///\n    /// Low-level function: Ordinarily, smart contract developers will not need to access this.\n    ///\n    /// This is similar to `msg.sig` in Solidity, which returns the first 4 bytes of the function signature. In Aztec,\n    /// the selector uniquely identifies which function within the contract is being called.\n    ///\n    /// # Returns\n    /// * `FunctionSelector` - The 4-byte function identifier\n    ///\n    /// # Advanced\n    /// Only #[external(\"private\")] functions have a function selector as a protocol- enshrined concept. The function\n    /// selectors of private functions are baked into the preimage of the contract address, and are used by the\n    /// protocol's kernel circuits to identify each private function and ensure the correct one is being executed.\n    ///\n    /// Used internally for function dispatch and call verification.\n    ///\n    pub fn selector(self) -> FunctionSelector {\n        self.inputs.call_context.function_selector\n    }\n\n    /// Returns the hash of the arguments passed to the current function.\n    ///\n    /// Very low-level function: You shouldn't need to call this. The #[external(\"private\")] macro calls this, and it\n    /// makes the arguments neatly available to the body of your private function.\n    ///\n    /// # Returns\n    /// * `Field` - Hash of the function arguments\n    ///\n    /// # Advanced\n    /// * Arguments are hashed to reduce proof size and verification time\n    /// * Enables efficient argument passing in recursive function calls\n    /// * The hash can be used to retrieve the original arguments from the PXE.\n    ///\n    pub fn get_args_hash(self) -> Field {\n        self.args_hash\n    }\n\n    /// Pushes a new note_hash to the Aztec blockchain's global Note Hash Tree (a state tree).\n    ///\n    /// A note_hash is a commitment to a piece of private state.\n    ///\n    /// Low-level function: Ordinarily, smart contract developers will not need to manually call this. Aztec-nr's state\n    /// variables (see `../state_vars/`) are designed to understand when to create and push new note hashes.\n    ///\n    /// # Arguments\n    /// * `note_hash` - The new note_hash.\n    ///\n    /// # Advanced\n    /// From here, the protocol's kernel circuits will take over and insert the note_hash into the protocol's \"note\n    /// hash tree\" (in the Base Rollup circuit). Before insertion, the protocol will:\n    /// - \"Silo\" the `note_hash` with the contract address of this function, to yield a `siloed_note_hash`. This\n    /// prevents state collisions between different smart contracts.\n    /// - Ensure uniqueness of the `siloed_note_hash`, to prevent Faerie-Gold attacks, by hashing the\n    /// `siloed_note_hash` with a unique value, to yield a `unique_siloed_note_hash` (see the protocol spec for more).\n    ///\n    /// In addition to calling this function, aztec-nr provides the contents of the newly-created note to the PXE, via\n    /// the `notify_created_note` oracle.\n    ///\n    /// > Advanced users might occasionally wish to push data to the context > directly for lower-level control. If you\n    /// find yourself doing this, > please open an issue on GitHub to describe your use case: it might be > that new\n    /// functionality should be added to aztec-nr.\n    ///\n    pub fn push_note_hash(&mut self, note_hash: Field) {\n        self.note_hashes.push(Counted::new(note_hash, self.next_counter()));\n    }\n\n    /// Creates a new [nullifier](crate::nullifier).\n    ///\n    /// ## Safety\n    ///\n    /// This is a low-level function that must be used with great care to avoid subtle corruption of contract state.\n    /// Instead of calling this function, consider using the higher-level [`crate::state_vars::SingleUseClaim`].\n    ///\n    /// In particular, callers must ensure all nullifiers created by a contract are properly domain-separated, so that\n    /// unrelated components don't interfere with one another (e.g. a transaction nullifier accidentally marking a\n    /// variable as initialized). Only [`PrivateContext::push_nullifier_for_note_hash`] should be used for note\n    /// nullifiers, never this one.\n    ///\n    /// ## Advanced\n    ///\n    /// The raw `nullifier` is not what is inserted into the Aztec state tree: it will be first siloed by contract\n    /// address via [`crate::protocol::hash::compute_siloed_nullifier`] in order to prevent accidental or malicious\n    /// interference of nullifiers from different contracts.\n    pub fn push_nullifier(&mut self, nullifier: Field) {\n        notify_created_nullifier(nullifier);\n        self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0 }.count(self.next_counter()));\n    }\n\n    /// Creates a new [nullifier](crate::nullifier) associated with a note.\n    ///\n    /// This is a variant of [`PrivateContext::push_nullifier`] that is used for note nullifiers, i.e. nullifiers that\n    /// correspond to a note. If a note and its nullifier are created in the same transaction, then the private kernels\n    /// will 'squash' these values, deleting them both as if they never existed and reducing transaction fees.\n    ///\n    /// The `nullification_note_hash` must be the result of calling\n    /// [`crate::note::utils::compute_confirmed_note_hash_for_nullification`] for pending notes, and `0` for settled\n    /// notes (which cannot be squashed).\n    ///\n    /// ## Safety\n    ///\n    /// This is a low-level function that must be used with great care to avoid subtle corruption of contract state.\n    /// Instead of calling this function, consider using the higher-level [`crate::note::lifecycle::destroy_note`].\n    ///\n    /// The precautions listed for [`PrivateContext::push_nullifier`] apply here as well, and callers should\n    /// additionally ensure `nullification_note_hash` corresponds to a note emitted by this contract, with its hash\n    /// computed in the same transaction execution phase as the call to this function. Finally, only this function\n    /// should be used for note nullifiers, never [`PrivateContext::push_nullifier`].\n    ///\n    /// Failure to do these things can result in unprovable contexts, accidental deletion of notes, or double-spend\n    /// attacks.\n    pub fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullification_note_hash: Field) {\n        let nullifier_counter = self.next_counter();\n        notify_nullified_note(nullifier, nullification_note_hash, nullifier_counter);\n        self.nullifiers.push(Nullifier { value: nullifier, note_hash: nullification_note_hash }.count(\n            nullifier_counter,\n        ));\n    }\n\n    /// Returns the anchor block header - the historical block header that this private function is reading from.\n    ///\n    /// A private function CANNOT read from the \"current\" block header, but must read from some older block header,\n    /// because as soon as private function execution begins (asynchronously, on a user's device), the public state of\n    /// the chain (the \"current state\") will have progressed forward.\n    ///\n    /// # Returns\n    /// * `BlockHeader` - The anchor block header.\n    ///\n    /// # Advanced\n    /// * All private functions of a tx read from the same anchor block header.\n    /// * The protocol asserts that the `expiration_timestamp` of every tx is at most 24 hours beyond the timestamp of\n    /// the tx's chosen anchor block header. This enables the network's nodes to safely prune old txs from the mempool.\n    /// Therefore, the chosen block header _must_ be one from within the last 24 hours.\n    ///\n    pub fn get_anchor_block_header(self) -> BlockHeader {\n        self.anchor_block_header\n    }\n\n    /// Returns the header of any historical block at or before the anchor block.\n    ///\n    /// This enables private contracts to access information from even older blocks than the anchor block header.\n    ///\n    /// Useful for time-based contract logic that needs to compare against multiple historical points.\n    ///\n    /// # Arguments\n    /// * `block_number` - The block number to retrieve (must be <= anchor block number)\n    ///\n    /// # Returns\n    /// * `BlockHeader` - The header of the requested historical block\n    ///\n    /// # Advanced\n    /// This function uses an oracle to fetch block header data from the user's PXE. Depending on how much blockchain\n    /// data the user's PXE has been set up to store, this might require a query from the PXE to another Aztec node to\n    /// get the data. > This is generally true of all oracle getters (see `../oracle`).\n    ///\n    /// Each block header gets hashed and stored as a leaf in the protocol's Archive Tree. In fact, the i-th block\n    /// header gets stored at the i-th leaf index of the Archive Tree. Behind the scenes, this `get_block_header_at`\n    /// function will add Archive Tree merkle-membership constraints (~3k) to your smart contract function's circuit,\n    /// to prove existence of the block header in the Archive Tree.\n    ///\n    /// Note: we don't do any caching, so avoid making duplicate calls for the same block header, because each call\n    /// will add duplicate constraints.\n    ///\n    /// Calling this function is more expensive (constraint-wise) than getting the anchor block header (via\n    /// `get_block_header`). This is because the anchor block's merkle membership proof is handled by Aztec's protocol\n    /// circuits, and is only performed once for the entire tx because all private functions of a tx share a common\n    /// anchor block header. Therefore, the cost (constraint-wise) of calling `get_block_header` is effectively free.\n    ///\n    pub fn get_block_header_at(self, block_number: u32) -> BlockHeader {\n        get_block_header_at(block_number, self)\n    }\n\n    /// Sets the hash of the return values for this private function.\n    ///\n    /// Very low-level function: this is called by the #[external(\"private\")] macro.\n    ///\n    /// # Arguments\n    /// * `serialized_return_values` - The serialized return values as a field array\n    ///\n    pub fn set_return_hash<let N: u32>(&mut self, serialized_return_values: [Field; N]) {\n        let return_hash = hash_args(serialized_return_values);\n        self.return_hash = return_hash;\n        execution_cache::store(serialized_return_values, return_hash);\n    }\n\n    /// Builds the PrivateCircuitPublicInputs for this private function, to ensure compatibility with the protocol's\n    /// kernel circuits.\n    ///\n    /// Very low-level function: This function is automatically called by the #[external(\"private\")] macro.\n    pub fn finish(self) -> PrivateCircuitPublicInputs {\n        PrivateCircuitPublicInputs {\n            call_context: self.inputs.call_context,\n            args_hash: self.args_hash,\n            returns_hash: self.return_hash,\n            min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n            is_fee_payer: self.is_fee_payer,\n            expiration_timestamp: self.expiration_timestamp,\n            note_hash_read_requests: ClaimedLengthArray::from_bounded_vec(self.note_hash_read_requests),\n            nullifier_read_requests: ClaimedLengthArray::from_bounded_vec(self.nullifier_read_requests),\n            key_validation_requests_and_separators: ClaimedLengthArray::from_bounded_vec(\n                self.key_validation_requests_and_separators,\n            ),\n            note_hashes: ClaimedLengthArray::from_bounded_vec(self.note_hashes),\n            nullifiers: ClaimedLengthArray::from_bounded_vec(self.nullifiers),\n            private_call_requests: ClaimedLengthArray::from_bounded_vec(self.private_call_requests),\n            public_call_requests: ClaimedLengthArray::from_bounded_vec(self.public_call_requests),\n            public_teardown_call_request: self.public_teardown_call_request,\n            l2_to_l1_msgs: ClaimedLengthArray::from_bounded_vec(self.l2_to_l1_msgs),\n            start_side_effect_counter: self.inputs.start_side_effect_counter,\n            end_side_effect_counter: self.side_effect_counter,\n            private_logs: ClaimedLengthArray::from_bounded_vec(self.private_logs),\n            contract_class_logs_hashes: ClaimedLengthArray::from_bounded_vec(self.contract_class_logs_hashes),\n            anchor_block_header: self.anchor_block_header,\n            tx_context: self.inputs.tx_context,\n            expected_non_revertible_side_effect_counter: self.expected_non_revertible_side_effect_counter,\n            expected_revertible_side_effect_counter: self.expected_revertible_side_effect_counter,\n        }\n    }\n\n    /// Designates this contract as the fee payer for the transaction.\n    ///\n    /// Unlike Ethereum, where the transaction sender always pays fees, Aztec allows any contract to voluntarily pay\n    /// transaction fees. This enables patterns like sponsored transactions or fee abstraction where users don't need\n    /// to hold fee-juice themselves. (Fee juice is a fee-paying asset for Aztec).\n    ///\n    /// Only one contract per transaction can declare itself as the fee payer, and it must have sufficient fee-juice\n    /// balance (>= the gas limits specified in the TxContext) by the time we reach the public setup phase of the tx.\n    ///\n    pub fn set_as_fee_payer(&mut self) {\n        aztecnr_trace_log_format!(\"Setting {0} as fee payer\")([self.this_address().to_field()]);\n        self.is_fee_payer = true;\n    }\n\n    pub fn in_revertible_phase(&mut self) -> bool {\n        let current_counter = self.side_effect_counter;\n\n        // Safety: Kernel will validate that the claim is correct by validating the expected counters.\n        let is_revertible = unsafe { is_execution_in_revertible_phase(current_counter) };\n\n        if is_revertible {\n            if (self.expected_revertible_side_effect_counter == 0)\n                | (current_counter < self.expected_revertible_side_effect_counter) {\n                self.expected_revertible_side_effect_counter = current_counter;\n            }\n        } else if current_counter > self.expected_non_revertible_side_effect_counter {\n            self.expected_non_revertible_side_effect_counter = current_counter;\n        }\n\n        is_revertible\n    }\n\n    /// Declares the end of the \"setup phase\" of this tx.\n    ///\n    /// Only one function per tx can declare the end of the setup phase.\n    ///\n    /// Niche function: Only wallet developers and paymaster contract developers (aka Fee-payment contracts) will need\n    /// to make use of this function.\n    ///\n    /// Aztec supports a three-phase execution model: setup, app logic, teardown. The phases exist to enable a fee\n    /// payer to take on the risk of paying a transaction fee, safe in the knowledge that their payment (in whatever\n    /// token or method the user chooses) will succeed, regardless of whether the app logic will succeed. The \"setup\"\n    /// phase enables such a payment to be made, because the setup phase _cannot revert_: a reverting function within\n    /// the setup phase would result in an invalid block which cannot be proven. Any side-effects generated during that\n    /// phase are guaranteed to be inserted into Aztec's state trees (except for squashed notes & nullifiers, of\n    /// course).\n    ///\n    /// Even though the end of the setup phase is declared within a private function, you might have noticed that\n    /// _public_ functions can also execute within the setup phase. This is because any public function calls which\n    /// were enqueued _within the setup phase_ by a private function are considered part of the setup phase.\n    ///\n    /// # Advanced\n    /// * Sets the minimum revertible side effect counter of this tx to be the PrivateContext's _current_ side effect\n    /// counter.\n    ///\n    pub fn end_setup(&mut self) {\n        // Incrementing the side effect counter when ending setup ensures non ambiguity for the counter where we change\n        // phases.\n        self.side_effect_counter += 1;\n        aztecnr_trace_log_format!(\"Ending setup at counter {0}\")([self.side_effect_counter as Field]);\n        self.min_revertible_side_effect_counter = self.next_counter();\n        notify_revertible_phase_start(self.min_revertible_side_effect_counter);\n    }\n\n    /// Sets a deadline (an \"include-by timestamp\") for when this transaction must be included in a block.\n    ///\n    /// Other functions in this tx might call this setter with differing values for the include-by timestamp. To ensure\n    /// that all functions' deadlines are met, the _minimum_ of all these include-by timestamps will be exposed when\n    /// this tx is submitted to the network.\n    ///\n    /// If the transaction is not included in a block by its include-by timestamp, it becomes invalid and it will never\n    /// be included.\n    ///\n    /// This expiry timestamp is publicly visible. See the \"Advanced\" section for privacy concerns.\n    ///\n    /// # Arguments\n    /// * `expiration_timestamp` - Unix timestamp (seconds) deadline for inclusion. The include-by timestamp of this tx\n    /// will be _at most_ the timestamp specified.\n    ///\n    /// # Advanced\n    /// * If multiple functions set differing `expiration_timestamp`s, the kernel circuits will set it to be the\n    /// _minimum_ of the two. This ensures the tx expiry requirements of all functions in the tx are met.\n    /// * Rollup circuits will reject expired txs.\n    /// * The protocol enforces that all transactions must be included within 24 hours of their chosen anchor block's\n    /// timestamp, to enable safe mempool pruning.\n    /// * The DelayedPublicMutable design makes heavy use of this functionality, to enable private functions to read\n    /// public state.\n    /// * A sophisticated Wallet should cleverly set an include-by timestamp to improve the privacy of the user and the\n    /// network as a whole. For example, if a contract interaction sets include-by to some publicly-known value (e.g.\n    /// the time when a contract upgrades), then the wallet might wish to set an even lower one to avoid revealing that\n    /// this tx is interacting with said contract. Ideally, all wallets should standardize on an approach in order to\n    ///   provide users with a large privacy set -- although the exact approach\n    /// will need to be discussed. Wallets that deviate from a standard might accidentally reveal which wallet each\n    /// transaction originates from.\n    ///\n    // docs:start:expiration-timestamp\n    pub fn set_expiration_timestamp(&mut self, expiration_timestamp: u64) {\n        // docs:end:expiration-timestamp\n        self.expiration_timestamp = std::cmp::min(self.expiration_timestamp, expiration_timestamp);\n    }\n\n    /// Asserts that a note has been created.\n    ///\n    /// This function will cause the transaction to fail unless the requested note exists. This is the preferred\n    /// mechanism for performing this check, and the only one that works for pending notes.\n    ///\n    /// ## Pending Notes\n    ///\n    /// Both settled notes (created in prior transactions) and pending notes (created in the current transaction) will\n    /// be considered by this function. Pending notes must have been created **before** this call is made for the check\n    /// to pass.\n    ///\n    /// ## Historical Notes\n    ///\n    /// If you need to assert that a note existed _by some specific block in the past_, instead of simply proving that\n    /// it exists by the current anchor block, use [`crate::history::note::assert_note_existed_by`] instead.\n    ///\n    /// ## Cost\n    ///\n    /// This uses up one of the call's kernel note hash read requests, which are limited. Like all kernel requests,\n    /// proving time costs are only incurred when the total number of requests exceeds the kernel's capacity, requiring\n    /// an additional invocation of the kernel reset circuit.\n    pub fn assert_note_exists(&mut self, note_existence_request: NoteExistenceRequest) {\n        // Note that the `note_hash_read_requests` array does not hold `NoteExistenceRequest` objects, but rather a\n        // custom kernel type. We convert from the aztec-nr type into it.\n\n        let note_hash = note_existence_request.note_hash();\n        let contract_address = note_existence_request.maybe_contract_address().unwrap_or(AztecAddress::zero());\n\n        let side_effect = Scoped::new(\n            Counted::new(note_hash, self.next_counter()),\n            contract_address,\n        );\n\n        self.note_hash_read_requests.push(side_effect);\n    }\n\n    /// Asserts that a nullifier has been emitted.\n    ///\n    /// This function will cause the transaction to fail unless the requested nullifier exists. This is the preferred\n    /// mechanism for performing this check, and the only one that works for pending nullifiers.\n    ///\n    /// ## Pending Nullifiers\n    ///\n    /// Both settled nullifiers (emitted in prior transactions) and pending nullifiers (emitted in the current\n    /// transaction) will be considered by this function. Pending nullifiers must have been emitted **before** this\n    /// call is made for the check to pass.\n    ///\n    /// ## Historical Nullifiers\n    ///\n    /// If you need to assert that a nullifier existed _by some specific block in the past_, instead of simply proving\n    /// that it exists by the current anchor block, use [`crate::history::nullifier::assert_nullifier_existed_by`]\n    /// instead.\n    ///\n    /// ## Public vs Private\n    ///\n    /// In general, it is unsafe to check for nullifier non-existence in private, as that will not consider the\n    /// possibility of the nullifier having been emitted in any transaction between the anchor block and the inclusion\n    /// block. Private functions instead prove existence via this function and 'prove' non-existence by _emitting_ the\n    /// nullifer, which would cause the transaction to fail if the nullifier existed.\n    ///\n    /// This is not the case in public functions, which do have access to the tip of the blockchain and so can reliably\n    /// prove whether a nullifier exists or not via\n    /// [`crate::context::public_context::PublicContext::nullifier_exists_unsafe`].\n    ///\n    /// ## Cost\n    ///\n    /// This uses up one of the call's kernel nullifier read requests, which are limited. Like all kernel requests,\n    /// proving time costs are only incurred when the total number of requests exceeds the kernel's capacity, requiring\n    /// an additional invocation of the kernel reset circuit.\n    pub fn assert_nullifier_exists(&mut self, nullifier_existence_request: NullifierExistenceRequest) {\n        let nullifier = nullifier_existence_request.nullifier();\n        let contract_address = nullifier_existence_request.maybe_contract_address().unwrap_or(AztecAddress::zero());\n\n        let request = Scoped::new(\n            Counted::new(nullifier, self.next_counter()),\n            contract_address,\n        );\n\n        self.nullifier_read_requests.push(request);\n    }\n\n    /// Requests the app-siloed nullifier hiding key (nhk_app) for the given (hashed) master nullifier public key\n    /// (npk_m), from the user's PXE.\n    ///\n    /// Advanced function: Only needed if you're designing your own notes and/or nullifiers.\n    ///\n    /// Contracts are not allowed to compute nullifiers for other contracts, as that would let them read parts of their\n    /// private state. Because of this, a contract is only given an \"app-siloed key\", which is constructed by\n    /// hashing the user's master nullifier hiding key with the contract's address. However, because contracts cannot\n    /// be trusted with a user's master nullifier hiding key (because we don't know which contracts are honest or\n    /// malicious), the PXE refuses to provide any master secret keys to any app smart contract function. This means\n    /// app functions are unable to prove that the derivation of an app-siloed nullifier hiding key has been computed\n    /// correctly. Instead, an app function can request to the kernel (via `request_nhk_app`) that it validates the\n    /// siloed derivation, since the kernel has been vetted to not leak any master secret keys.\n    ///\n    /// A common nullification scheme is to inject a nullifier hiding key into the preimage of a nullifier, to make the\n    /// nullifier deterministic but random-looking. This function enables that flow.\n    ///\n    /// # Arguments\n    /// * `npk_m_hash` - A hash of the master nullifier public key of the user whose PXE is executing this function.\n    ///\n    /// # Returns\n    /// * The app-siloed nullifier hiding key that corresponds to the given `npk_m_hash`.\n    ///\n    pub fn request_nhk_app(&mut self, npk_m_hash: Field) -> Field {\n        self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n    }\n\n    /// Requests the app-siloed nullifier secret key (nsk_app) for the given (hashed) master nullifier public key\n    /// (npk_m), from the user's PXE.\n    ///\n    /// See `request_nsk_app` and `request_sk_app` for more info.\n    ///\n    /// The intention of the \"outgoing\" keypair is to provide a second secret key for all of a user's outgoing activity\n    /// (i.e. for notes that a user creates, as opposed to notes that a user receives from others). The separation of\n    /// incoming and outgoing data was a distinction made by zcash, with the intention of enabling a user to optionally\n    /// share with a 3rd party a controlled view of only incoming or outgoing notes. Similar functionality of sharing\n    /// select data can be achieved with offchain zero-knowledge proofs. It is up to an app developer whether they\n    /// choose to make use of a user's outgoing keypair within their application logic, or instead simply use the same\n    /// keypair (the address keypair (which is effectively the same as the \"incoming\" keypair)) for all incoming &\n    /// outgoing messages to a user.\n    ///\n    /// Currently, all of the exposed encryption functions in aztec-nr ignore the outgoing viewing keys, and instead\n    /// encrypt all note logs and event logs to a user's address public key.\n    ///\n    /// # Arguments\n    /// * `ovpk_m_hash` - Hash of the outgoing viewing public key master\n    ///\n    /// # Returns\n    /// * The application-specific outgoing viewing secret key\n    ///\n    pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n        self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n    }\n\n    /// Pushes a Key Validation Request to the kernel.\n    ///\n    /// Private functions are not allowed to see a user's master secret keys, because we do not trust them. They are\n    /// instead given \"app-siloed\" secret keys with a claim that they relate to a master public key. They can then\n    /// request validation of this claim, by making a \"key validation request\" to the protocol's kernel circuits (which\n    /// _are_ allowed to see certain master secret keys).\n    ///\n    /// When a Key Validation Request tuple of (sk_app, Pk_m, app_address) is submitted to the kernel, it will perform\n    /// the following derivations to validate the relationship between the claimed sk_app and the user's Pk_m:\n    ///\n    ///       (sk_m) ----> * G ----> Pk_m\n    ///         |                     |\n    ///         v                       We use the kernel to prove this\n    ///  h(sk_m, app_address)         | sk_app-Pk_m relationship, because app\n    ///         |                       circuits must not be trusted to see sk_m.\n    ///         v                     |\n    /// sk_app - -  - - - - - - -\n    ///\n    /// The function is named \"request_\" instead of \"get_\" to remind the user that a Key Validation Request will be\n    /// emitted to the kernel.\n    ///\n    fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n        let cached_request =\n            self.last_key_validation_requests[key_index as u32].unwrap_or(KeyValidationRequest::empty());\n\n        if cached_request.pk_m.hash() == pk_m_hash {\n            // We get a match so the cached request is the latest one\n            cached_request.sk_app\n        } else {\n            // We didn't get a match meaning the cached result is stale Typically we'd validate keys by showing that\n            // they are the preimage of `pk_m_hash`, but that'd require the oracle returning the master secret keys,\n            // which could cause malicious contracts to leak it or learn about secrets from other contracts. We\n            // therefore silo secret keys, and rely on the private kernel to validate that we siloed secret key\n            // corresponds to correct siloing of the master secret key that hashes to `pk_m_hash`.\n\n            // Safety: Kernels verify that the key validation request is valid and below we verify that a request for\n            // the correct public key has been received.\n            let request = unsafe { get_key_validation_request(pk_m_hash, key_index) };\n            assert(!request.pk_m.is_infinite, \"Infinite public key points are not allowed\");\n            assert_eq(request.pk_m.hash(), pk_m_hash, \"Obtained invalid key validation request\");\n\n            self.key_validation_requests_and_separators.push(\n                KeyValidationRequestAndSeparator {\n                    request,\n                    key_type_domain_separator: public_key_domain_separators[key_index as u32],\n                },\n            );\n            self.last_key_validation_requests[key_index as u32] = Option::some(request);\n            request.sk_app\n        }\n    }\n\n    /// Sends an \"L2 -> L1 message\" from this function (Aztec, L2) to a smart contract on Ethereum (L1). L1 contracts\n    /// which are designed to send/receive messages to/from Aztec are called \"Portal Contracts\".\n    ///\n    /// Common use cases include withdrawals, cross-chain asset transfers, and triggering L1 actions based on L2 state\n    /// changes.\n    ///\n    /// The message will be inserted into an Aztec \"Outbox\" contract on L1, when this transaction's block is proposed\n    /// to L1. Sending the message will not result in any immediate state changes in the target portal contract. The\n    /// message will need to be manually consumed from the Outbox through a separate Ethereum transaction: a user will\n    /// need to call a function of the portal contract -- a function specifically designed to make a call to the Outbox\n    /// to consume the message. The message will only be available for consumption once the _epoch_ proof has been\n    /// submitted. Given that there are multiple Aztec blocks within an epoch, it might take some time for this epoch\n    /// proof to be submitted -- especially if the block was near the start of an epoch.\n    ///\n    /// # Arguments\n    /// * `recipient` - Ethereum address that will receive the message\n    /// * `content` - Message content (32 bytes as a Field element). This content has a very\n    /// specific layout. docs:start:context_message_portal\n    pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n        let message = L2ToL1Message { recipient, content };\n        self.l2_to_l1_msgs.push(message.count(self.next_counter()));\n    }\n\n    /// Consumes a message sent from Ethereum (L1) to Aztec (L2).\n    ///\n    /// Common use cases include token bridging, cross-chain governance, and triggering L2 actions based on L1 events.\n    ///\n    /// Use this function if you only want the message to ever be \"referred to\" once. Once consumed using this method,\n    /// the message cannot be consumed again, because a nullifier is emitted. If your use case wants for the message to\n    /// be read unlimited times, then you can always read any historic message from the L1-to-L2 messages tree;\n    /// messages never technically get deleted from that tree.\n    ///\n    /// The message will first be inserted into an Aztec \"Inbox\" smart contract on L1. Sending the message will not\n    /// result in any immediate state changes in the target L2 contract. The message will need to be manually consumed\n    /// by the target contract through a separate Aztec transaction. The message will not be available for consumption\n    /// immediately. Messages get copied over from the L1 Inbox to L2 by the next Proposer in batches. So you will need\n    /// to wait until the messages are copied before you can consume them.\n    ///\n    /// # Arguments\n    /// * `content` - The message content that was sent from L1\n    /// * `secret` - Secret value used for message privacy (if needed)\n    /// * `sender` - Ethereum address that sent the message\n    /// * `leaf_index` - Index of the message in the L1-to-L2 message tree\n    ///\n    /// # Advanced\n    /// Validates message existence in the L1-to-L2 message tree and nullifies the message to prevent\n    /// double-consumption.\n    pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress, leaf_index: Field) {\n        let nullifier = process_l1_to_l2_message(\n            self.anchor_block_header.state.l1_to_l2_message_tree.root,\n            self.this_address(),\n            sender,\n            self.chain_id(),\n            self.version(),\n            content,\n            secret,\n            leaf_index,\n        );\n\n        // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n        self.push_nullifier(nullifier)\n    }\n\n    /// Emits a private log (an array of Fields) that will be published to an Ethereum blob.\n    ///\n    /// Private logs are intended for the broadcasting of ciphertexts: that is, encrypted events or encrypted note\n    /// contents. Since the data in the logs is meant to be _encrypted_, private_logs are broadcast to publicly-visible\n    /// Ethereum blobs. The intended recipients of such encrypted messages can then discover and decrypt these\n    /// encrypted logs using their viewing secret key. (See `../messages/discovery` for more details).\n    ///\n    /// Important note: This function DOES NOT _do_ any encryption of the input `log` fields. This function blindly\n    /// publishes whatever input `log` data is fed into it, so the caller of this function should have already\n    /// performed the encryption, and the `log` should be the result of that encryption.\n    ///\n    /// The protocol does not dictate what encryption scheme should be used: a smart contract developer can choose\n    /// whatever encryption scheme they like. Aztec-nr includes some off-the-shelf encryption libraries that developers\n    /// might wish to use, for convenience. These libraries not only encrypt a plaintext (to produce a ciphertext);\n    /// they also prepend the ciphertext with a `tag` and `ephemeral public key` for easier message discovery. This is\n    /// a very dense topic, and we will be writing more libraries and docs soon.\n    ///\n    /// > Currently, AES128 CBC encryption is the main scheme included in > aztec.nr. > We are currently making\n    /// significant changes to the interfaces of the > encryption library.\n    ///\n    /// In some niche use cases, an app might be tempted to publish _un-encrypted_ data via a private log, because\n    /// _public logs_ are not available to private functions. Be warned that emitting public data via private logs is\n    /// strongly discouraged, and is considered a \"privacy anti-pattern\", because it reveals identifiable information\n    /// about _which_ function has been executed. A tx which leaks such information does not contribute to the privacy\n    /// set of the network.\n    ///\n    /// * Unlike `emit_raw_note_log_unsafe`, this log is not tied to any specific note\n    ///\n    /// # Arguments\n    /// * `tag` - A tag placed at `fields[0]` of the emitted log. Used by recipients and nodes to identify and\n    /// filter for relevant logs without scanning all of them.\n    /// * `log` - The log data that will be publicly broadcast (so make sure it's already been encrypted before you\n    /// call this function). Private logs are bounded in size (`PRIVATE_LOG_CIPHERTEXT_LEN`), to encourage all logs\n    /// from all smart contracts look identical.\n    /// * `length` - The actual length of `log` (measured in number of Fields). Although the input log has a max\n    /// size of `PRIVATE_LOG_CIPHERTEXT_LEN`, the latter values of the array might all be 0's for small logs. This\n    /// `length` should reflect the trimmed length of the array. The protocol's kernel circuits can then append\n    /// random fields as \"padding\" after the `length`, so that the logs of this smart contract look\n    /// indistinguishable from (the same length as) the logs of all other applications. It's up to wallets how much\n    /// padding to apply, so ideally all wallets should agree on standards for this.\n    ///\n    /// ## Safety\n    ///\n    /// The `tag` should be domain-separated (e.g. via [`crate::protocol::hash::compute_log_tag`]) to prevent\n    /// collisions between logs from different sources. Without domain separation, two unrelated log types that\n    /// happen to share a raw tag value become indistinguishable. Prefer the higher-level APIs\n    /// ([`crate::messages::message_delivery::MessageDelivery`] for messages, `self.emit(event)` for events) which\n    /// handle tagging automatically.\n    pub fn emit_private_log_unsafe(&mut self, tag: Field, log: [Field; PRIVATE_LOG_CIPHERTEXT_LEN], length: u32) {\n        let counter = self.next_counter();\n        let full_log = [tag].concat(log);\n        self.private_logs.push(PrivateLogData { log: PrivateLog::new(full_log, length + 1), note_hash_counter: 0 }\n            .count(counter));\n    }\n\n    // TODO: rename.\n    /// Emits a private log that is explicitly tied to a newly-emitted note_hash, to convey to the kernel: \"this log\n    /// relates to this note\".\n    ///\n    /// This linkage is important in case the note gets squashed (due to being read later in this same tx), since we\n    /// can then squash the log as well.\n    ///\n    /// See `emit_private_log_unsafe` for more info about private log emission.\n    ///\n    /// # Arguments\n    /// * `tag` - A tag placed at `fields[0]`. See `emit_private_log_unsafe`.\n    /// * `log` - The log data as an array of Field elements\n    /// * `length` - The actual length of the `log` (measured in number of Fields).\n    /// * `note_hash_counter` - The side-effect counter that was assigned to the new note_hash when it was pushed to\n    /// this `PrivateContext`.\n    ///\n    /// Important: If your application logic requires the log to always be emitted regardless of note squashing,\n    /// consider using `emit_private_log_unsafe` instead, or emitting additional events.\n    ///\n    /// ## Safety\n    ///\n    /// Same as [`PrivateContext::emit_private_log_unsafe`]: the `tag` should be domain-separated.\n    pub fn emit_raw_note_log_unsafe(\n        &mut self,\n        tag: Field,\n        log: [Field; PRIVATE_LOG_CIPHERTEXT_LEN],\n        length: u32,\n        note_hash_counter: u32,\n    ) {\n        let counter = self.next_counter();\n        let full_log = [tag].concat(log);\n        let private_log = PrivateLogData { log: PrivateLog::new(full_log, length + 1), note_hash_counter };\n        self.private_logs.push(private_log.count(counter));\n    }\n\n    pub fn emit_contract_class_log<let N: u32>(&mut self, log: [Field; N]) {\n        let contract_address = self.this_address();\n        let counter = self.next_counter();\n\n        let log_to_emit: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS] =\n            log.concat([0; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - N]);\n        // Note: the length is not always N, it is the number of fields we want to broadcast, omitting trailing zeros\n        // to save blob space.\n        // Safety: The below length is constrained in the base rollup, which will make sure that all the fields beyond\n        // length are zero. However, it won't be able to check that we didn't add extra padding (trailing zeroes) or\n        // that we cut trailing zeroes from the end.\n        let length = unsafe { trimmed_array_length_hint(log_to_emit) };\n        // We hash the entire padded log to ensure a user cannot pass a shorter length and so emit incorrect shorter\n        // bytecode.\n        let log_hash = poseidon2_hash(log_to_emit);\n        // Safety: the below only exists to broadcast the raw log, so we can provide it to the base rollup later to be\n        // constrained.\n        unsafe {\n            notify_created_contract_class_log(contract_address, log_to_emit, length, counter);\n        }\n\n        self.contract_class_logs_hashes.push(LogHash { value: log_hash, length: length }.count(counter));\n    }\n\n    /// Calls a private function on another contract (or the same contract).\n    ///\n    /// Very low-level function.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the function\n    /// * `function_selector` - 4-byte identifier of the function to call\n    /// * `args` - Array of arguments to pass to the called function\n    ///\n    /// # Returns\n    /// * `ReturnsHash` - Hash of the called function's return values. Use `.get_preimage()` to extract the actual\n    /// return values.\n    ///\n    /// This enables contracts to interact with each other while maintaining privacy. This \"composability\" of private\n    /// contract functions is a key feature of the Aztec network.\n    ///\n    /// If a user's transaction includes multiple private function calls, then by the design of Aztec, the following\n    /// information will remain private[1]:\n    /// - The function selectors and contract addresses of all private function calls will remain private, so an\n    /// observer of the public mempool will not be able to look at a tx and deduce which private functions have been\n    /// executed.\n    /// - The arguments and return values of all private function calls will remain private.\n    /// - The person who initiated the tx will remain private.\n    /// - The notes and nullifiers and private logs that are emitted by all private function calls will (if designed\n    /// well) not leak any user secrets, nor leak which functions have been executed.\n    ///\n    /// [1] Caveats: Some of these privacy guarantees depend on how app developers design their smart contracts. Some\n    /// actions _can_ leak information, such as:\n    /// - Calling an internal public function.\n    /// - Calling a public function and not setting msg_sender to Option::none (feature not built yet - see github).\n    /// - Calling any public function will always leak details about the nature of the transaction, so devs should be\n    /// careful in their contract designs. If it can be done in a private function, then that will give the best\n    /// privacy.\n    /// - Not padding the side-effects of a tx to some standardized, uniform size. The kernel circuits can take hints\n    /// to pad side-effects, so a wallet should be able to request for a particular amount of padding. Wallets should\n    /// ideally agree on some standard.\n    /// - Padding should include:\n    /// - Padding the lengths of note & nullifier arrays\n    /// - Padding private logs with random fields, up to some standardized size. See also:\n    /// https://docs.aztec.network/developers/resources/considerations/privacy_considerations\n    ///\n    /// # Advanced\n    /// * The call is added to the private call stack and executed by kernel circuits after this function completes\n    /// * The called function can modify its own contract's private state\n    /// * Side effects from the called function are included in this transaction\n    /// * The call inherits the current transaction's context and gas limits\n    ///\n    pub fn call_private_function<let ArgsCount: u32>(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n        args: [Field; ArgsCount],\n    ) -> ReturnsHash {\n        let args_hash = hash_args(args);\n        execution_cache::store(args, args_hash);\n        self.call_private_function_with_args_hash(contract_address, function_selector, args_hash, false)\n    }\n\n    /// Makes a read-only call to a private function on another contract.\n    ///\n    /// This is similar to Solidity's `staticcall`. The called function cannot modify state, emit L2->L2 messages, nor\n    /// emit events. Any nested calls are constrained to also be staticcalls.\n    ///\n    /// See `call_private_function` for more general info on private function calls.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract to call\n    /// * `function_selector` - 4-byte identifier of the function to call\n    /// * `args` - Array of arguments to pass to the called function\n    ///\n    /// # Returns\n    /// * `ReturnsHash` - Hash of the called function's return values. Use `.get_preimage()` to extract the actual\n    /// return values.\n    ///\n    pub fn static_call_private_function<let ArgsCount: u32>(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n        args: [Field; ArgsCount],\n    ) -> ReturnsHash {\n        let args_hash = hash_args(args);\n        execution_cache::store(args, args_hash);\n        self.call_private_function_with_args_hash(contract_address, function_selector, args_hash, true)\n    }\n\n    /// Calls a private function that takes no arguments.\n    ///\n    /// This is a convenience function for calling private functions that don't require any input parameters. It's\n    /// equivalent to `call_private_function` but slightly more efficient to use when no arguments are needed.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the function\n    /// * `function_selector` - 4-byte identifier of the function to call\n    ///\n    /// # Returns\n    /// * `ReturnsHash` - Hash of the called function's return values. Use `.get_preimage()` to extract the actual\n    /// return values.\n    ///\n    pub fn call_private_function_no_args(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n    ) -> ReturnsHash {\n        self.call_private_function_with_args_hash(contract_address, function_selector, 0, false)\n    }\n\n    /// Makes a read-only call to a private function which takes no arguments.\n    ///\n    /// This combines the optimisation of `call_private_function_no_args` with the safety of\n    /// `static_call_private_function`.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the function\n    /// * `function_selector` - 4-byte identifier of the function to call\n    ///\n    /// # Returns\n    /// * `ReturnsHash` - Hash of the called function's return values. Use `.get_preimage()` to extract the actual\n    /// return values.\n    ///\n    pub fn static_call_private_function_no_args(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n    ) -> ReturnsHash {\n        self.call_private_function_with_args_hash(contract_address, function_selector, 0, true)\n    }\n\n    /// Low-level private function call.\n    ///\n    /// This is the underlying implementation used by all other private function call methods. Instead of taking raw\n    /// arguments, it accepts a hash of the arguments.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the function\n    /// * `function_selector` - 4-byte identifier of the function to call\n    /// * `args_hash` - Pre-computed hash of the function arguments\n    /// * `is_static_call` - Whether this should be a read-only call\n    ///\n    /// # Returns\n    /// * `ReturnsHash` - Hash of the called function's return values\n    ///\n    pub fn call_private_function_with_args_hash(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n        args_hash: Field,\n        is_static_call: bool,\n    ) -> ReturnsHash {\n        let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n        let start_side_effect_counter = self.side_effect_counter;\n\n        // Safety: The oracle simulates the private call and returns the value of the side effects counter after\n        // execution of the call (which means that end_side_effect_counter - start_side_effect_counter is the number of\n        // side effects that took place), along with the hash of the return values. We validate these by requesting a\n        // private kernel iteration in which the return values are constrained to hash to `returns_hash` and the side\n        // effects counter to increment from start to end.\n        let (end_side_effect_counter, returns_hash) = unsafe {\n            call_private_function_internal(\n                contract_address,\n                function_selector,\n                args_hash,\n                start_side_effect_counter,\n                is_static_call,\n            )\n        };\n\n        self.private_call_requests.push(\n            PrivateCallRequest {\n                call_context: CallContext {\n                    msg_sender: self.this_address(),\n                    contract_address,\n                    function_selector,\n                    is_static_call,\n                },\n                args_hash,\n                returns_hash,\n                start_side_effect_counter,\n                end_side_effect_counter,\n            },\n        );\n\n        // TODO (fees) figure out why this crashes the prover and enable it we need this in order to pay fees inside\n        // child call contexts assert(\n        //     (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n        //     | (item.public_inputs.min_revertible_side_effect_counter\n        //         > self.min_revertible_side_effect_counter)\n        // ); if item.public_inputs.min_revertible_side_effect_counter\n        //     > self.min_revertible_side_effect_counter { self.min_revertible_side_effect_counter =\n        // item.public_inputs.min_revertible_side_effect_counter; }\n        self.side_effect_counter = end_side_effect_counter + 1; // TODO: call `next_counter`\n        // instead, for consistency\n        ReturnsHash::new(returns_hash)\n    }\n\n    /// Enqueues a call to a public function to be executed later.\n    ///\n    /// Unlike private functions which execute immediately on the user's device, public function calls are \"enqueued\"\n    /// and executed some time later by a block proposer.\n    ///\n    /// This means a public function cannot return any values back to a private function, because by the time the\n    /// public function is being executed, the private function which called it has already completed execution. (In\n    /// fact, the private function has been executed and proven, along with all other private function calls of the\n    /// user's tx. A single proof of the tx has been submitted to the Aztec network, and some time later a proposer has\n    /// picked the tx up from the mempool and begun executing all of the enqueued public functions).\n    ///\n    /// # Privacy warning Enqueueing a public function call is an inherently leaky action. Many interesting applications will require some interaction with public state, but smart contract developers should try to use public function calls sparingly, and carefully. _Internal_ public function calls are especially leaky, because they completely leak which private contract made the call. See also: https://docs.aztec.network/developers/resources/considerations/privacy_considerations\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the function\n    /// * `function_selector` - 4-byte identifier of the function to call\n    /// * `args` - Array of arguments to pass to the public function\n    /// * `hide_msg_sender` - the called function will see a \"null\" value for `msg_sender` if set to `true`\n    ///\n    pub fn call_public_function<let ArgsCount: u32>(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n        args: [Field; ArgsCount],\n        hide_msg_sender: bool,\n    ) {\n        let calldata = [function_selector.to_field()].concat(args);\n        let calldata_hash = hash_calldata_array(calldata);\n        execution_cache::store(calldata, calldata_hash);\n        self.call_public_function_with_calldata_hash(contract_address, calldata_hash, false, hide_msg_sender)\n    }\n\n    /// Enqueues a read-only call to a public function.\n    ///\n    /// This is similar to Solidity's `staticcall`. The called function cannot modify state or emit events. Any nested\n    /// calls are constrained to also be staticcalls.\n    ///\n    /// See also `call_public_function` for more important information about making private -> public function calls.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the function\n    /// * `function_selector` - 4-byte identifier of the function to call\n    /// * `args` - Array of arguments to pass to the public function\n    /// * `hide_msg_sender` - the called function will see a \"null\" value for `msg_sender` if set to `true`\n    ///\n    pub fn static_call_public_function<let ArgsCount: u32>(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n        args: [Field; ArgsCount],\n        hide_msg_sender: bool,\n    ) {\n        let calldata = [function_selector.to_field()].concat(args);\n        let calldata_hash = hash_calldata_array(calldata);\n        execution_cache::store(calldata, calldata_hash);\n        self.call_public_function_with_calldata_hash(contract_address, calldata_hash, true, hide_msg_sender)\n    }\n\n    /// Enqueues a call to a public function that takes no arguments.\n    ///\n    /// This is an optimisation for calling public functions that don't take any input parameters. It's otherwise\n    /// equivalent to `call_public_function`.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the function\n    /// * `function_selector` - 4-byte identifier of the function to call\n    /// * `hide_msg_sender` - the called function will see a \"null\" value for `msg_sender` if set to `true`\n    ///\n    pub fn call_public_function_no_args(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n        hide_msg_sender: bool,\n    ) {\n        let calldata_hash = hash_calldata_array([function_selector.to_field()]);\n        self.call_public_function_with_calldata_hash(contract_address, calldata_hash, false, hide_msg_sender)\n    }\n\n    /// Enqueues a read-only call to a public function with no arguments.\n    ///\n    /// This combines the optimisation of `call_public_function_no_args` with the safety of\n    /// `static_call_public_function`.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the function\n    /// * `function_selector` - 4-byte identifier of the function to call\n    /// * `hide_msg_sender` - the called function will see a \"null\" value for `msg_sender` if set to `true`\n    ///\n    pub fn static_call_public_function_no_args(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n        hide_msg_sender: bool,\n    ) {\n        let calldata_hash = hash_calldata_array([function_selector.to_field()]);\n        self.call_public_function_with_calldata_hash(contract_address, calldata_hash, true, hide_msg_sender)\n    }\n\n    /// Low-level public function call.\n    ///\n    /// This is the underlying implementation used by all other public function call methods. Instead of taking raw\n    /// arguments, it accepts a hash of the arguments.\n    ///\n    /// Advanced function: Most developers should use `call_public_function` or `static_call_public_function` instead.\n    /// This function is exposed for performance optimization and advanced use cases.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the function\n    /// * `calldata_hash` - Hash of the function calldata\n    /// * `is_static_call` - Whether this should be a read-only call\n    /// * `hide_msg_sender` - the called function will see a \"null\" value for `msg_sender` if set to `true`\n    ///\n    pub fn call_public_function_with_calldata_hash(\n        &mut self,\n        contract_address: AztecAddress,\n        calldata_hash: Field,\n        is_static_call: bool,\n        hide_msg_sender: bool,\n    ) {\n        let counter = self.next_counter();\n\n        let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n\n        assert_valid_public_call_data(calldata_hash);\n\n        let msg_sender = if hide_msg_sender {\n            NULL_MSG_SENDER_CONTRACT_ADDRESS\n        } else {\n            self.this_address()\n        };\n\n        let call_request = PublicCallRequest { msg_sender, contract_address, is_static_call, calldata_hash };\n\n        self.public_call_requests.push(Counted::new(call_request, counter));\n    }\n\n    /// Enqueues a public function call, and designates it to be the teardown function for this tx. Only one teardown\n    /// function call can be made by a tx.\n    ///\n    /// Niche function: Only wallet developers and paymaster contract developers (aka Fee-payment contracts) will need\n    /// to make use of this function.\n    ///\n    /// Aztec supports a three-phase execution model: setup, app logic, teardown. The phases exist to enable a fee\n    /// payer to take on the risk of paying a transaction fee, safe in the knowledge that their payment (in whatever\n    /// token or method the user chooses) will succeed, regardless of whether the app logic will succeed. The \"setup\"\n    /// phase ensures the fee payer has sufficient balance to pay the proposer their fees. The teardown phase is\n    /// primarily intended to: calculate exactly how much the user owes, based on gas consumption, and refund the user\n    /// any change.\n    ///\n    /// Note: in some cases, the cost of refunding the user (i.e. DA costs of tx side-effects) might exceed the refund\n    /// amount. For app logic with fairly stable and predictable gas consumption, a material refund amount is unlikely.\n    /// For app logic with unpredictable gas consumption, a refund might be important to the user (e.g. if a hefty\n    /// function reverts very early). Wallet/FPC/Paymaster developers should be mindful of this.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the teardown function\n    /// * `function_selector` - 4-byte identifier of the function to call\n    /// * `args` - An array of fields to pass to the function.\n    /// * `hide_msg_sender` - the called function will see a \"null\" value for `msg_sender` if set to `true`\n    pub fn set_public_teardown_function<let ArgsCount: u32>(\n        &mut self,\n        contract_address: AztecAddress,\n        function_selector: FunctionSelector,\n        args: [Field; ArgsCount],\n        hide_msg_sender: bool,\n    ) {\n        let calldata = [function_selector.to_field()].concat(args);\n        let calldata_hash = hash_calldata_array(calldata);\n        execution_cache::store(calldata, calldata_hash);\n        self.set_public_teardown_function_with_calldata_hash(contract_address, calldata_hash, false, hide_msg_sender)\n    }\n\n    /// Low-level function to set the public teardown function.\n    ///\n    /// This is the underlying implementation for setting the teardown function call that will execute at the end of\n    /// the transaction. Instead of taking raw arguments, it accepts a hash of the arguments.\n    ///\n    /// Advanced function: Most developers should use `set_public_teardown_function` instead.\n    ///\n    /// # Arguments\n    /// * `contract_address` - Address of the contract containing the teardown function\n    /// * `calldata_hash` - Hash of the function calldata\n    /// * `is_static_call` - Whether this should be a read-only call\n    /// * `hide_msg_sender` - the called function will see a \"null\" value for `msg_sender` if set to `true`\n    ///\n    pub fn set_public_teardown_function_with_calldata_hash(\n        &mut self,\n        contract_address: AztecAddress,\n        calldata_hash: Field,\n        is_static_call: bool,\n        hide_msg_sender: bool,\n    ) {\n        let is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n\n        assert_valid_public_call_data(calldata_hash);\n\n        let msg_sender = if hide_msg_sender {\n            NULL_MSG_SENDER_CONTRACT_ADDRESS\n        } else {\n            self.this_address()\n        };\n\n        self.public_teardown_call_request =\n            PublicCallRequest { msg_sender, contract_address, is_static_call, calldata_hash };\n    }\n\n    /// Increments the side-effect counter.\n    ///\n    /// Very low-level function.\n    ///\n    /// # Advanced\n    ///\n    /// Every side-effect of a private function is given a \"side-effect counter\", based on when it is created. This\n    /// PrivateContext is in charge of assigning the counters.\n    ///\n    /// The reason we have side-effect counters is complicated. Consider this illustrative pseudocode of inter-contract\n    /// function calls:\n    /// ```\n    /// contract A {\n    ///    let x = 5; // pseudocode for storage var x.\n    ///    fn a1 {\n    ///        read x; // value: 5, counter: 1.\n    ///        x = x + 1;\n    ///        write x; // value: 6, counter: 2.\n    ///\n    ///        B.b(); // start_counter: 2, end_counter: 4\n    ///\n    ///        read x; // value: 36, counter: 5.\n    ///        x = x + 1;\n    ///        write x; // value: 37, counter: 6.\n    ///    }\n    ///\n    ///    fn a2 {\n    ///        read x; // value: 6, counter: 3.\n    ///        x = x * x;\n    ///        write x; // value: 36, counter: 4.\n    ///    }\n    /// }\n    ///\n    /// contract B {\n    ///     fn b() {\n    ///         A.a2();\n    ///     }\n    /// }\n    /// ```\n    ///\n    /// Suppose a1 is the first function called. The comments show the execution counter of each side-effect, and what\n    /// the new value of `x` is.\n    ///\n    /// These (private) functions are processed by Aztec's kernel circuits in an order that is different from execution\n    /// order: All of A.a1 is proven before B.b is proven, before A.a2 is proven. So when we're in the 2nd execution\n    /// frame of A.a1 (after the call to B.b), the circuit needs to justify why x went from being `6` to `36`. But the\n    /// circuit doesn't know why, and given the order of proving, the kernel hasn't _seen_ a value of 36 get written\n    /// yet. The kernel needs to track big arrays of all side-effects of all private functions in a tx. Then, as it\n    /// recurses and processes B.b(), it will eventually see a value of 36 get written.\n    ///\n    /// Suppose side-effect counters weren't exposed: The kernel would only see this ordering (in order of proof\n    /// verification): [ A.a1.read, A.a1.write, A.a1.read, A.a1.write, A.a2.read, A.a2.write ]\n    /// [         5,          6,        36,         37,         6,         36 ]\n    /// The kernel wouldn't know _when_ B.b() was called within A.a1(), because it can't see what's going on within an\n    /// app circuit. So the kernel wouldn't know that the ordering of reads and writes should actually be: [ A.a1.read,\n    /// A.a1.write, A.a2.read, A.a2.write, A.a1.read, A.a1.write ]\n    /// [         5,          6,        6,         36,         36,         37 ]\n    ///\n    /// And so, we introduced side-effect counters: every private function must assign side-effect counters alongside\n    /// every side-effect that it emits, and also expose to the kernel the counters that it started and ended with.\n    /// This gives the kernel enough information to arrange all side-effects in the correct order. It can then catch\n    /// (for example) if a function tries to read state before it has been written (e.g. if A.a2() maliciously tried to\n    /// read a value of x=37) (e.g. if A.a1() maliciously tried to read x=6).\n    ///\n    /// If a malicious app contract _lies_ and does not count correctly:\n    /// - It cannot lie about its start and end counters because the kernel will catch this.\n    /// - It _could_ lie about its intermediate counters:\n    /// - 1. It could not increment its side-effects correctly\n    /// - 2. It could label its side-effects with counters outside of its start and end counters' range. The kernel\n    /// will catch 2. The kernel will not catch 1., but this would only cause corruption to the private state of the\n    /// malicious contract, and not any other contracts (because a contract can only modify its own state). If a \"good\"\n    /// contract is given _read access_ to a maliciously-counting contract (via an external getter function, or by\n    /// reading historic state from the archive tree directly), and they then make state changes to their _own_ state\n    /// accordingly, that could be dangerous. Developers should be mindful not to trust the claimed innards of external\n    /// contracts unless they have audited/vetted the contracts including vetting the side-effect counter\n    /// incrementation. This is a similar paradigm to Ethereum smart contract development: you must vet external\n    /// contracts that your contract relies upon, and you must not make any presumptions about their claimed behaviour.\n    /// (Hopefully if a contract imports a version of aztec-nr, we will get contract verification tooling that can\n    /// validate the authenticity of the imported aztec-nr package, and hence infer that the side- effect counting will\n    /// be correct, without having to re-audit such logic for every contract).\n    ///\n    fn next_counter(&mut self) -> u32 {\n        let counter = self.side_effect_counter;\n        self.side_effect_counter += 1;\n        counter\n    }\n}\n\nimpl Empty for PrivateContext {\n    fn empty() -> Self {\n        PrivateContext {\n            inputs: PrivateContextInputs::empty(),\n            side_effect_counter: 0 as u32,\n            min_revertible_side_effect_counter: 0 as u32,\n            is_fee_payer: false,\n            args_hash: 0,\n            return_hash: 0,\n            expiration_timestamp: 0,\n            note_hash_read_requests: BoundedVec::new(),\n            nullifier_read_requests: BoundedVec::new(),\n            key_validation_requests_and_separators: BoundedVec::new(),\n            note_hashes: BoundedVec::new(),\n            nullifiers: BoundedVec::new(),\n            private_call_requests: BoundedVec::new(),\n            public_call_requests: BoundedVec::new(),\n            public_teardown_call_request: PublicCallRequest::empty(),\n            l2_to_l1_msgs: BoundedVec::new(),\n            anchor_block_header: BlockHeader::empty(),\n            private_logs: BoundedVec::new(),\n            contract_class_logs_hashes: BoundedVec::new(),\n            last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n            expected_non_revertible_side_effect_counter: 0,\n            expected_revertible_side_effect_counter: 0,\n        }\n    }\n}\n"
        },
        "87": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/context/returns_hash.nr",
            "source": "use crate::{hash::hash_args, oracle::execution_cache};\nuse crate::protocol::traits::Deserialize;\n\n/// The hash of a private contract function call's return value.\n///\n/// Use [`ReturnsHash::get_preimage`] to get the underlying value.\n///\n/// The kernels don't process the actual return values but instead their hashes, so it is up to contracts to populate\n/// oracles with the preimages of these hashes on return to make them available to their callers.\n///\n/// Public calls don't utilize this mechanism since the AVM does process the full return values.\npub struct ReturnsHash {\n    hash: Field,\n}\n\nimpl ReturnsHash {\n    pub fn new(hash: Field) -> Self {\n        ReturnsHash { hash }\n    }\n\n    /// Fetches the underlying return value from an oracle, constraining that it corresponds to the return data hash.\n    pub fn get_preimage<T>(self) -> T\n    where\n        T: Deserialize,\n    {\n        // Safety: We verify that the value returned by `load` is the preimage of `hash`, fully constraining it. If `T`\n        // is `()`, then `preimage` must be an array of length 0 (since that is `()`'s deserialization length).\n        // `hash_args` handles empty arrays following the protocol rules (i.e. an empty args array is signaled with a\n        // zero hash), correctly constraining `self.hash`.\n        let preimage = unsafe { execution_cache::load(self.hash) };\n        assert_eq(self.hash, hash_args(preimage), \"Preimage mismatch\");\n\n        Deserialize::deserialize(preimage)\n    }\n}\n\nmod test {\n    use crate::{\n        hash::hash_args,\n        oracle::execution_cache,\n        test::{helpers::test_environment::TestEnvironment, mocks::MockStruct},\n    };\n    use crate::protocol::traits::Serialize;\n    use super::ReturnsHash;\n    use std::test::OracleMock;\n\n    #[test]\n    unconstrained fn retrieves_preimage() {\n        let env = TestEnvironment::new();\n        env.private_context(|_| {\n            let value = MockStruct::new(4, 7);\n            let serialized = value.serialize();\n\n            let hash = hash_args(serialized);\n            execution_cache::store(serialized, hash);\n\n            assert_eq(ReturnsHash::new(hash).get_preimage(), value);\n        });\n    }\n\n    #[test]\n    unconstrained fn retrieves_empty_preimage() {\n        let env = TestEnvironment::new();\n        env.private_context(|_| {\n            let value = ();\n            let serialized = [];\n\n            let hash = hash_args(serialized);\n            execution_cache::store(serialized, hash);\n\n            assert_eq(ReturnsHash::new(hash).get_preimage(), value);\n        });\n    }\n\n    #[test(should_fail_with = \"Preimage mismatch\")]\n    unconstrained fn rejects_bad_preimage() {\n        let value = MockStruct::new(4, 7);\n        let serialized = value.serialize();\n\n        let mut bad_serialized = serialized;\n        bad_serialized[0] += 1;\n\n        let hash = hash_args(serialized);\n\n        let _ = OracleMock::mock(\"aztec_prv_getHashPreimage\").returns(bad_serialized);\n        assert_eq(ReturnsHash::new(hash).get_preimage(), value);\n    }\n}\n"
        },
        "88": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/context/utility_context.nr",
            "source": "use crate::oracle::{execution::get_utility_context, storage::storage_read};\nuse crate::protocol::{abis::block_header::BlockHeader, address::AztecAddress, traits::Packable};\n\n// If you'll modify this struct don't forget to update utility_context.ts as well.\npub struct UtilityContext {\n    block_header: BlockHeader,\n    contract_address: AztecAddress,\n}\n\nimpl UtilityContext {\n    pub unconstrained fn new() -> Self {\n        get_utility_context()\n    }\n\n    pub unconstrained fn at(contract_address: AztecAddress) -> Self {\n        // We get a context with default contract address, and then we construct the final context with the provided\n        // contract address.\n        let default_context = get_utility_context();\n\n        Self { block_header: default_context.block_header, contract_address }\n    }\n\n    pub fn block_header(self) -> BlockHeader {\n        self.block_header\n    }\n\n    pub fn block_number(self) -> u32 {\n        self.block_header.block_number()\n    }\n\n    pub fn timestamp(self) -> u64 {\n        self.block_header.timestamp()\n    }\n\n    pub fn this_address(self) -> AztecAddress {\n        self.contract_address\n    }\n\n    pub fn version(self) -> Field {\n        self.block_header.version()\n    }\n\n    pub fn chain_id(self) -> Field {\n        self.block_header.chain_id()\n    }\n\n    pub unconstrained fn raw_storage_read<let N: u32>(self: Self, storage_slot: Field) -> [Field; N] {\n        storage_read(self.block_header, self.this_address(), storage_slot)\n    }\n\n    pub unconstrained fn storage_read<T>(self, storage_slot: Field) -> T\n    where\n        T: Packable,\n    {\n        T::unpack(self.raw_storage_read(storage_slot))\n    }\n}\n"
        },
        "94": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/event/event_interface.nr",
            "source": "use crate::{event::EventSelector, messages::logs::event::MAX_EVENT_SERIALIZED_LEN};\nuse crate::protocol::{\n    constants::DOM_SEP__EVENT_COMMITMENT,\n    hash::{poseidon2_hash_with_separator, poseidon2_hash_with_separator_bounded_vec},\n    traits::{Serialize, ToField},\n};\n\npub trait EventInterface {\n    fn get_event_type_id() -> EventSelector;\n}\n\n/// A private event's commitment is a value stored on-chain which is used to verify that the event was indeed emitted.\n///\n/// It requires a `randomness` value that must be produced alongside the event in order to perform said validation.\n/// This random value prevents attacks in which someone guesses plausible events (e.g. 'Alice transfers to Bob an\n/// amount of 10'), since they will not be able to test for existence of their guessed events without brute-forcing the\n/// entire `Field` space by guessing `randomness` values.\npub fn compute_private_event_commitment<Event>(event: Event, randomness: Field) -> Field\nwhere\n    Event: EventInterface + Serialize,\n{\n    poseidon2_hash_with_separator(\n        [randomness, Event::get_event_type_id().to_field()].concat(event.serialize()),\n        DOM_SEP__EVENT_COMMITMENT,\n    )\n}\n\n/// Unconstrained variant of [`compute_private_event_commitment`] which takes the event in serialized form.\n///\n/// This function is unconstrained as the mechanism it uses to compute the commitment would be very inefficient in a\n/// constrained environment (due to the hashing of a dynamically sized array). This is not an issue as it is typically\n/// invoked when processing event messages, which is an unconstrained operation.\npub unconstrained fn compute_private_serialized_event_commitment(\n    serialized_event: BoundedVec<Field, MAX_EVENT_SERIALIZED_LEN>,\n    randomness: Field,\n    event_type_id: Field,\n) -> Field {\n    let mut commitment_preimage =\n        BoundedVec::<_, 2 + MAX_EVENT_SERIALIZED_LEN>::from_array([randomness, event_type_id]);\n    commitment_preimage.extend_from_bounded_vec(serialized_event);\n\n    poseidon2_hash_with_separator_bounded_vec(commitment_preimage, DOM_SEP__EVENT_COMMITMENT)\n}\n\nmod test {\n    use crate::event::event_interface::{\n        compute_private_event_commitment, compute_private_serialized_event_commitment, EventInterface,\n    };\n    use crate::messages::logs::event::MAX_EVENT_SERIALIZED_LEN;\n    use crate::protocol::traits::{Serialize, ToField};\n    use crate::test::mocks::mock_event::MockEvent;\n\n    global VALUE: Field = 7;\n    global RANDOMNESS: Field = 10;\n\n    #[test]\n    unconstrained fn max_size_serialized_event_commitment() {\n        let serialized_event = BoundedVec::from_array([0; MAX_EVENT_SERIALIZED_LEN]);\n        let _ = compute_private_serialized_event_commitment(serialized_event, 0, 0);\n    }\n\n    #[test]\n    unconstrained fn event_commitment_equivalence() {\n        let event = MockEvent::new(VALUE).build_event();\n\n        assert_eq(\n            compute_private_event_commitment(event, RANDOMNESS),\n            compute_private_serialized_event_commitment(\n                BoundedVec::from_array(event.serialize()),\n                RANDOMNESS,\n                MockEvent::get_event_type_id().to_field(),\n            ),\n        );\n    }\n}\n"
        },
        "96": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/event/event_selector.nr",
            "source": "use crate::protocol::{hash::poseidon2_hash_bytes, traits::{Deserialize, Empty, FromField, Serialize, ToField}};\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct EventSelector {\n    // 1st 4-bytes (big-endian leftmost) of abi-encoding of an event.\n    inner: u32,\n}\n\nimpl FromField for EventSelector {\n    fn from_field(field: Field) -> Self {\n        Self { inner: field as u32 }\n    }\n}\n\nimpl ToField for EventSelector {\n    fn to_field(self) -> Field {\n        self.inner as Field\n    }\n}\n\nimpl Empty for EventSelector {\n    fn empty() -> Self {\n        Self { inner: 0 as u32 }\n    }\n}\n\nimpl EventSelector {\n    pub fn from_u32(value: u32) -> Self {\n        Self { inner: value }\n    }\n\n    pub fn from_signature<let N: u32>(signature: str<N>) -> Self {\n        let bytes = signature.as_bytes();\n        let hash = poseidon2_hash_bytes(bytes);\n\n        // `hash` is automatically truncated to fit within 32 bits.\n        EventSelector::from_field(hash)\n    }\n\n    pub fn zero() -> Self {\n        Self { inner: 0 }\n    }\n}\n"
        },
        "98": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/hash.nr",
            "source": "//! Aztec hash functions.\n\nuse crate::protocol::{\n    address::{AztecAddress, EthAddress},\n    constants::{\n        DOM_SEP__FUNCTION_ARGS, DOM_SEP__MESSAGE_NULLIFIER, DOM_SEP__PUBLIC_BYTECODE, DOM_SEP__PUBLIC_CALLDATA,\n        DOM_SEP__SECRET_HASH, MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS,\n    },\n    hash::{poseidon2_hash_subarray, poseidon2_hash_with_separator, sha256_to_field},\n    traits::ToField,\n};\n\npub use crate::protocol::hash::compute_siloed_nullifier;\n\npub fn compute_secret_hash(secret: Field) -> Field {\n    poseidon2_hash_with_separator([secret], DOM_SEP__SECRET_HASH)\n}\n\npub fn compute_l1_to_l2_message_hash(\n    sender: EthAddress,\n    chain_id: Field,\n    recipient: AztecAddress,\n    version: Field,\n    content: Field,\n    secret_hash: Field,\n    leaf_index: Field,\n) -> Field {\n    let mut hash_bytes = [0 as u8; 224];\n    let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n    let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n    let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n    let version_bytes: [u8; 32] = version.to_be_bytes();\n    let content_bytes: [u8; 32] = content.to_be_bytes();\n    let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n    let leaf_index_bytes: [u8; 32] = leaf_index.to_be_bytes();\n\n    for i in 0..32 {\n        hash_bytes[i] = sender_bytes[i];\n        hash_bytes[i + 32] = chain_id_bytes[i];\n        hash_bytes[i + 64] = recipient_bytes[i];\n        hash_bytes[i + 96] = version_bytes[i];\n        hash_bytes[i + 128] = content_bytes[i];\n        hash_bytes[i + 160] = secret_hash_bytes[i];\n        hash_bytes[i + 192] = leaf_index_bytes[i];\n    }\n\n    sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret\npub fn compute_l1_to_l2_message_nullifier(message_hash: Field, secret: Field) -> Field {\n    poseidon2_hash_with_separator([message_hash, secret], DOM_SEP__MESSAGE_NULLIFIER)\n}\n\n// Computes the hash of input arguments or return values for private functions, or for authwit creation.\npub fn hash_args<let N: u32>(args: [Field; N]) -> Field {\n    if args.len() == 0 {\n        0\n    } else {\n        poseidon2_hash_with_separator(args, DOM_SEP__FUNCTION_ARGS)\n    }\n}\n\n// Computes the hash of calldata for public functions.\npub fn hash_calldata_array<let N: u32>(calldata: [Field; N]) -> Field {\n    poseidon2_hash_with_separator(calldata, DOM_SEP__PUBLIC_CALLDATA)\n}\n\n/// Computes the public bytecode commitment for a contract class. The commitment is `hash([(length | separator),\n/// ...bytecode])`.\n///\n/// @param packed_bytecode - The packed bytecode of the contract class. 0th word is the length in bytes.\n/// packed_bytecode is mutable so that we can avoid copying the array to construct one starting with first_field\n/// instead of length. @returns The public bytecode commitment.\npub fn compute_public_bytecode_commitment(\n    mut packed_public_bytecode: [Field; MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS],\n) -> Field {\n    // First field element contains the length of the bytecode\n    let bytecode_length_in_bytes: u32 = packed_public_bytecode[0] as u32;\n    let bytecode_length_in_fields: u32 = (bytecode_length_in_bytes / 31) + (bytecode_length_in_bytes % 31 != 0) as u32;\n    // Don't allow empty public bytecode. AVM doesn't handle execution of contracts that exist with empty bytecode.\n    assert(bytecode_length_in_fields != 0);\n    assert(bytecode_length_in_fields < MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS);\n\n    // Packed_bytecode's 0th entry is the length. Append it to the separator before hashing.\n    let first_field = DOM_SEP__PUBLIC_BYTECODE.to_field() + (packed_public_bytecode[0] as u64 << 32) as Field;\n    packed_public_bytecode[0] = first_field;\n\n    // `fields_to_hash` is the number of fields from the start of `packed_public_bytecode` that should be included in\n    // the hash. Fields after this length are ignored. +1 to account for the prepended field.\n    let num_fields_to_hash = bytecode_length_in_fields + 1;\n\n    poseidon2_hash_subarray(packed_public_bytecode, num_fields_to_hash)\n}\n\n#[test]\nunconstrained fn secret_hash_matches_typescript() {\n    let secret = 8;\n    let hash = compute_secret_hash(secret);\n\n    // The following value was generated by `yarn-project/stdlib/src/hash/hash.test.ts`\n    let secret_hash_from_ts = 0x1848b066724ab0ffb50ecb0ee3398eb839f162823d262bad959721a9c13d1e96;\n\n    assert_eq(hash, secret_hash_from_ts);\n}\n\n#[test]\nunconstrained fn var_args_hash_matches_typescript() {\n    let mut input = [0; 100];\n    for i in 0..100 {\n        input[i] = i as Field;\n    }\n    let hash = hash_args(input);\n\n    // The following value was generated by `yarn-project/stdlib/src/hash/hash.test.ts`\n    let var_args_hash_from_ts = 0x262e5e121a8efc0382566ab42f0ae2a78bd85db88484f83018fe07fc2552ba0c;\n\n    assert_eq(hash, var_args_hash_from_ts);\n}\n\n#[test]\nunconstrained fn compute_calldata_hash() {\n    let mut input = [0; 100];\n    for i in 0..input.len() {\n        input[i] = i as Field;\n    }\n    let hash = hash_calldata_array(input);\n\n    // The following value was generated by `yarn-project/stdlib/src/hash/hash.test.ts`\n    let calldata_hash_from_ts = 0x14a1539bdb1d26e03097cf4d40c87e02ca03f0bb50a3e617ace5a7bfd3943944;\n\n    // Used in cpp vm2 tests:\n    assert_eq(hash, calldata_hash_from_ts);\n}\n\n#[test]\nunconstrained fn public_bytecode_commitment() {\n    let mut input = [0; MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS];\n    let len = 99;\n    for i in 1..len + 1 {\n        input[i] = i as Field;\n    }\n    input[0] = (len as Field) * 31;\n    let hash = compute_public_bytecode_commitment(input);\n    // Used in cpp vm2 tests:\n    assert_eq(hash, 0x09348974e76c3602893d7a4b4bb52c2ec746f1ade5004ac471d0fbb4587a81a6);\n}\n"
        },
        "109": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/keys/ecdh_shared_secret.nr",
            "source": "use crate::protocol::{\n    address::aztec_address::AztecAddress,\n    constants::{DOM_SEP__APP_SILOED_ECDH_SHARED_SECRET, DOM_SEP__ECDH_FIELD_MASK, DOM_SEP__ECDH_SUBKEY},\n    hash::poseidon2_hash_with_separator,\n    point::Point,\n    scalar::Scalar,\n    traits::{FromField, ToField},\n};\nuse std::{embedded_curve_ops::multi_scalar_mul, ops::Neg};\n\n/// Computes a standard ECDH shared secret: secret * public_key = shared_secret.\n///\n/// The input secret is known only to one party. The output shared secret can be derived given knowledge of\n/// `public_key`'s key-pair and the public ephemeral secret, using this same function (with reversed inputs).\n///\n/// E.g.: Epk = esk * G // ephemeral key-pair\n///       Pk = sk * G // recipient key-pair\n///       Shared secret S = esk * Pk = sk * Epk\n///\n/// See also: https://en.wikipedia.org/wiki/Elliptic-curve_Diffie%E2%80%93Hellman\npub fn derive_ecdh_shared_secret(secret: Scalar, public_key: Point) -> Point {\n    multi_scalar_mul([public_key], [secret])\n}\n\n/// Computes an app-siloed shared secret from a raw ECDH shared secret point and a contract address.\n///\n/// `s_app = h(DOM_SEP__APP_SILOED_ECDH_SHARED_SECRET, S.x, S.y, contract_address)`\npub(crate) fn compute_app_siloed_shared_secret(shared_secret: Point, contract_address: AztecAddress) -> Field {\n    poseidon2_hash_with_separator(\n        [shared_secret.x, shared_secret.y, contract_address.to_field()],\n        DOM_SEP__APP_SILOED_ECDH_SHARED_SECRET,\n    )\n}\n\n/// Derives an indexed subkey from an app-siloed shared secret, used for AES key/IV derivation.\n///\n/// `s_i = h(DOM_SEP__ECDH_SUBKEY + i, s_app)`\npub(crate) fn derive_shared_secret_subkey(s_app: Field, index: u32) -> Field {\n    poseidon2_hash_with_separator([s_app], DOM_SEP__ECDH_SUBKEY + index)\n}\n\n/// Derives an indexed field mask from an app-siloed shared secret, used for masking ciphertext fields.\n///\n/// `m_i = h(DOM_SEP__ECDH_FIELD_MASK + i, s_app)`\npub(crate) fn derive_shared_secret_field_mask(s_app: Field, index: u32) -> Field {\n    poseidon2_hash_with_separator([s_app], DOM_SEP__ECDH_FIELD_MASK + index)\n}\n\n#[test]\nunconstrained fn test_consistency_with_typescript() {\n    let secret = Scalar {\n        lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n        hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06,\n    };\n    let point = Point {\n        x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n        y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n        is_infinite: false,\n    };\n\n    let shared_secret = derive_ecdh_shared_secret(secret, point);\n\n    // This is just pasted from a test run. The original typescript code from which this could be generated seems to\n    // have been deleted by someone, and soon the typescript code for encryption and decryption won't be needed, so\n    // this will have to do.\n    let hard_coded_shared_secret = Point {\n        x: 0x15d55a5b3b2caa6a6207f313f05c5113deba5da9927d6421bcaa164822b911bc,\n        y: 0x0974c3d0825031ae933243d653ebb1a0b08b90ee7f228f94c5c74739ea3c871e,\n        is_infinite: false,\n    };\n    assert_eq(shared_secret, hard_coded_shared_secret);\n}\n\n#[test]\nunconstrained fn test_shared_secret_computation_in_both_directions() {\n    let secret_a = Scalar { lo: 0x1234, hi: 0x2345 };\n    let secret_b = Scalar { lo: 0x3456, hi: 0x4567 };\n\n    let pk_a = std::embedded_curve_ops::fixed_base_scalar_mul(secret_a);\n    let pk_b = std::embedded_curve_ops::fixed_base_scalar_mul(secret_b);\n\n    let shared_secret = derive_ecdh_shared_secret(secret_a, pk_b);\n    let shared_secret_alt = derive_ecdh_shared_secret(secret_b, pk_a);\n\n    assert_eq(shared_secret, shared_secret_alt);\n}\n\n#[test]\nunconstrained fn test_shared_secret_computation_from_address_in_both_directions() {\n    let secret_a = Scalar { lo: 0x1234, hi: 0x2345 };\n    let secret_b = Scalar { lo: 0x3456, hi: 0x4567 };\n\n    let mut pk_a = std::embedded_curve_ops::fixed_base_scalar_mul(secret_a);\n    let mut pk_b = std::embedded_curve_ops::fixed_base_scalar_mul(secret_b);\n\n    let address_b = AztecAddress::from_field(pk_b.x);\n\n    // We were lazy in deriving the secret keys, and didn't check the resulting y-coordinates of the pk_a or pk_b to be\n    // less than half the field modulus. If needed, we negate the pk's so that they yield valid address points. (We\n    // could also have negated the secrets, but there's no negate method for EmbeddedCurvesScalar).\n    pk_a = if (AztecAddress::from_field(pk_a.x).to_address_point().unwrap().inner == pk_a) {\n        pk_a\n    } else {\n        pk_a.neg()\n    };\n    pk_b = if (address_b.to_address_point().unwrap().inner == pk_b) {\n        pk_b\n    } else {\n        pk_b.neg()\n    };\n\n    let shared_secret = derive_ecdh_shared_secret(secret_a, address_b.to_address_point().unwrap().inner);\n    let shared_secret_alt = derive_ecdh_shared_secret(secret_b, pk_a);\n\n    assert_eq(shared_secret, shared_secret_alt);\n}\n\n#[test]\nunconstrained fn test_app_siloed_shared_secret_differs_per_contract() {\n    let secret_a = Scalar { lo: 0x1234, hi: 0x2345 };\n    let pk_b = std::embedded_curve_ops::fixed_base_scalar_mul(Scalar { lo: 0x3456, hi: 0x4567 });\n\n    let shared_secret = derive_ecdh_shared_secret(secret_a, pk_b);\n\n    let contract_a = AztecAddress::from_field(0xAAAA);\n    let contract_b = AztecAddress::from_field(0xBBBB);\n\n    let s_app_a = compute_app_siloed_shared_secret(shared_secret, contract_a);\n    let s_app_b = compute_app_siloed_shared_secret(shared_secret, contract_b);\n\n    assert(s_app_a != s_app_b, \"app-siloed secrets must differ for different contracts\");\n}\n"
        },
        "114": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/logging.nr",
            "source": "// Not all log levels are currently used, but we provide the full set so that new call sites can use any level. Because\n// of that we tag all with `#[allow(dead_code)]` to prevent warnings.\n//\n// All wrappers resolve function paths at comptime via `resolve_fn` so that the emitted `Quoted` code works both inside\n// aztec-nr (where `crate::` = aztec) and inside macro-generated contract code (where `crate::` = the contract).\n\nuse std::meta::ctstring::AsCtString;\n\ncomptime fn log_prefix<let N: u32>(msg: str<N>) -> CtString {\n    \"[aztec-nr] \".as_ctstring().append_str(msg)\n}\n\n// --- No-args variants (direct call) ---\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_fatal_log<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::fatal_log });\n    quote { $f($msg) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_error_log<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::error_log });\n    quote { $f($msg) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_warn_log<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::warn_log });\n    quote { $f($msg) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_info_log<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::info_log });\n    quote { $f($msg) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_verbose_log<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::verbose_log });\n    quote { $f($msg) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_debug_log<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::debug_log });\n    quote { $f($msg) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_trace_log<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::trace_log });\n    quote { $f($msg) }\n}\n\n// --- Format variants (return lambda for runtime args) ---\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_fatal_log_format<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::fatal_log_format });\n    quote { (|args| $f($msg, args)) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_error_log_format<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::error_log_format });\n    quote { (|args| $f($msg, args)) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_warn_log_format<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::warn_log_format });\n    quote { (|args| $f($msg, args)) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_info_log_format<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::info_log_format });\n    quote { (|args| $f($msg, args)) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_verbose_log_format<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::verbose_log_format });\n    quote { (|args| $f($msg, args)) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_debug_log_format<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::debug_log_format });\n    quote { (|args| $f($msg, args)) }\n}\n\n#[allow(dead_code)]\npub(crate) comptime fn aztecnr_trace_log_format<let N: u32>(msg: str<N>) -> Quoted {\n    let msg = log_prefix(msg);\n    let f = resolve_fn(quote { crate::protocol::logging::trace_log_format });\n    quote { (|args| $f($msg, args)) }\n}\n\n// See module-level comment for why this is needed.\ncomptime fn resolve_fn(path: Quoted) -> TypedExpr {\n    path.as_expr().unwrap().resolve(Option::none())\n}\n"
        },
        "116": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/macros/aztec/compute_note_hash_and_nullifier.nr",
            "source": "use crate::logging;\nuse crate::macros::{notes::NOTES, utils::get_trait_impl_method};\n\n/// Generates two contract library methods called `_compute_note_hash` and `_compute_note_nullifier`, plus a\n/// (deprecated) wrapper called `_compute_note_hash_and_nullifier`, which are used for note discovery (i.e. these are\n/// of the `aztec::messages::discovery::ComputeNoteHash` and `aztec::messages::discovery::ComputeNoteNullifier` types).\npub(crate) comptime fn generate_contract_library_methods_compute_note_hash_and_nullifier() -> Quoted {\n    let compute_note_hash = generate_contract_library_method_compute_note_hash();\n    let compute_note_nullifier = generate_contract_library_method_compute_note_nullifier();\n\n    quote {\n        $compute_note_hash\n        $compute_note_nullifier\n\n        /// Unpacks an array into a note corresponding to `note_type_id` and then computes its note hash (non-siloed) and inner nullifier (non-siloed) assuming the note has been inserted into the note hash tree with `note_nonce`.\n        ///\n        /// This function is automatically injected by the `#[aztec]` macro.\n        #[contract_library_method]\n        #[allow(dead_code)]\n        unconstrained fn _compute_note_hash_and_nullifier(\n            packed_note: BoundedVec<Field, aztec::messages::logs::note::MAX_NOTE_PACKED_LEN>,\n            owner: aztec::protocol::address::AztecAddress,\n            storage_slot: Field,\n            note_type_id: Field,\n            contract_address: aztec::protocol::address::AztecAddress,\n            randomness: Field,\n            note_nonce: Field,\n        ) -> Option<aztec::messages::discovery::NoteHashAndNullifier> {\n            _compute_note_hash(packed_note, owner, storage_slot, note_type_id, contract_address, randomness).map(|note_hash| {\n\n                let siloed_note_hash = aztec::protocol::hash::compute_siloed_note_hash(contract_address, note_hash);\n                let unique_note_hash = aztec::protocol::hash::compute_unique_note_hash(note_nonce, siloed_note_hash);\n                \n                let inner_nullifier = _compute_note_nullifier(unique_note_hash, packed_note, owner, storage_slot, note_type_id, contract_address, randomness);\n\n                aztec::messages::discovery::NoteHashAndNullifier {\n                    note_hash,\n                    inner_nullifier,\n                }\n            })\n        }\n    }\n}\n\ncomptime fn generate_contract_library_method_compute_note_hash() -> Quoted {\n    if NOTES.len() == 0 {\n        // Contracts with no notes still implement this function to avoid having special-casing, the implementation\n        // simply throws immediately.\n        quote {\n            /// This contract does not use private notes, so this function should never be called as it will unconditionally fail.\n            ///\n            /// This function is automatically injected by the `#[aztec]` macro.\n            #[contract_library_method]\n            unconstrained fn _compute_note_hash(\n                _packed_note: BoundedVec<Field, aztec::messages::logs::note::MAX_NOTE_PACKED_LEN>,\n                _owner: aztec::protocol::address::AztecAddress,\n                _storage_slot: Field,\n                _note_type_id: Field,\n                _contract_address: aztec::protocol::address::AztecAddress,\n                _randomness: Field,\n            ) -> Option<Field> {\n                panic(f\"This contract does not use private notes\")\n            }\n        }\n    } else {\n        // Contracts that do define notes produce an if-else chain where `note_type_id` is matched against the\n        // `get_note_type_id()` function of each note type that we know of, in order to identify the note type. Once we\n        // know it we call the correct `unpack` method from the `Packable` trait to obtain the underlying note type,\n        // and\n        // compute the note hash (non-siloed).\n\n        // We resolve the log format calls here so that the resulting Quoted values can be spliced into the quote\n        // block below.\n        let warn_length_mismatch = logging::aztecnr_warn_log_format(\n            \"Packed note length mismatch for note type id {0}: expected {1} fields, got {2}. Skipping note.\",\n        );\n        let warn_unknown_note_type = logging::aztecnr_warn_log_format(\"Unknown note type id {0}. Skipping note.\");\n\n        let mut if_note_type_id_match_statements_list = @[];\n        for i in 0..NOTES.len() {\n            let typ = NOTES.get(i);\n\n            let get_note_type_id = get_trait_impl_method(\n                typ,\n                quote { crate::note::note_interface::NoteType },\n                quote { get_id },\n            );\n            let unpack = get_trait_impl_method(\n                typ,\n                quote { crate::protocol::traits::Packable },\n                quote { unpack },\n            );\n\n            let compute_note_hash = get_trait_impl_method(\n                typ,\n                quote { crate::note::note_interface::NoteHash },\n                quote { compute_note_hash },\n            );\n\n            let if_or_else_if = if i == 0 {\n                quote { if }\n            } else {\n                quote { else if }\n            };\n\n            if_note_type_id_match_statements_list = if_note_type_id_match_statements_list.push_back(\n                quote {\n                    $if_or_else_if note_type_id == $get_note_type_id() {\n                        // As an extra safety check we make sure that the packed_note BoundedVec has the expected\n                        // length, since we're about to interpret its raw storage as a fixed-size array by calling the\n                        // unpack function on it.\n                        let expected_len = <$typ as $crate::protocol::traits::Packable>::N;\n                        let actual_len = packed_note.len();\n                        if actual_len != expected_len {\n                            $warn_length_mismatch([note_type_id, expected_len as Field, actual_len as Field]);\n                            Option::none()\n                        } else {\n                            let note = $unpack(aztec::utils::array::subarray(packed_note.storage(), 0));\n\n                            Option::some($compute_note_hash(note, owner, storage_slot, randomness))\n                        }\n                    }\n                },\n            );\n        }\n\n        let if_note_type_id_match_statements = if_note_type_id_match_statements_list.join(quote {});\n\n        quote {\n            /// Unpacks an array into a note corresponding to `note_type_id` and then computes its note hash (non-siloed).\n            ///\n            /// The signature of this function notably matches the `aztec::messages::discovery::ComputeNoteHash` type, and so it can be used to call functions from that module such as `do_sync_state` and `attempt_note_discovery`.\n            ///\n            /// This function is automatically injected by the `#[aztec]` macro.\n            #[contract_library_method]\n            unconstrained fn _compute_note_hash(\n                packed_note: BoundedVec<Field, aztec::messages::logs::note::MAX_NOTE_PACKED_LEN>,\n                owner: aztec::protocol::address::AztecAddress,\n                storage_slot: Field,\n                note_type_id: Field,\n                _contract_address: aztec::protocol::address::AztecAddress,\n                randomness: Field,\n            ) -> Option<Field> {\n                $if_note_type_id_match_statements\n                else {\n                    $warn_unknown_note_type([note_type_id]);\n                    Option::none()\n                }\n            }\n        }\n    }\n}\n\ncomptime fn generate_contract_library_method_compute_note_nullifier() -> Quoted {\n    if NOTES.len() == 0 {\n        // Contracts with no notes still implement this function to avoid having special-casing, the implementation\n        // simply throws immediately.\n        quote {\n            /// This contract does not use private notes, so this function should never be called as it will unconditionally fail.\n            ///\n            /// This function is automatically injected by the `#[aztec]` macro.\n            #[contract_library_method]\n            unconstrained fn _compute_note_nullifier(\n                _unique_note_hash: Field,\n                _packed_note: BoundedVec<Field, aztec::messages::logs::note::MAX_NOTE_PACKED_LEN>,\n                _owner: aztec::protocol::address::AztecAddress,\n                _storage_slot: Field,\n                _note_type_id: Field,\n                _contract_address: aztec::protocol::address::AztecAddress,\n                _randomness: Field,\n            ) -> Option<Field> {\n                panic(f\"This contract does not use private notes\")\n            }\n        }\n    } else {\n        // Contracts that do define notes produce an if-else chain where `note_type_id` is matched against the\n        // `get_note_type_id()` function of each note type that we know of, in order to identify the note type. Once we\n        // know it we call the correct `unpack` method from the `Packable` trait to obtain the underlying note type,\n        // and\n        // compute the inner nullifier (non-siloed).\n\n        // We resolve the log format calls here so that the resulting Quoted values can be spliced into the quote\n        // block below.\n        let warn_length_mismatch = logging::aztecnr_warn_log_format(\n            \"Packed note length mismatch for note type id {0}: expected {1} fields, got {2}. Skipping note.\",\n        );\n        let warn_unknown_note_type = logging::aztecnr_warn_log_format(\"Unknown note type id {0}. Skipping note.\");\n\n        let mut if_note_type_id_match_statements_list = @[];\n        for i in 0..NOTES.len() {\n            let typ = NOTES.get(i);\n\n            let get_note_type_id = get_trait_impl_method(\n                typ,\n                quote { crate::note::note_interface::NoteType },\n                quote { get_id },\n            );\n            let unpack = get_trait_impl_method(\n                typ,\n                quote { crate::protocol::traits::Packable },\n                quote { unpack },\n            );\n\n            let compute_nullifier_unconstrained = get_trait_impl_method(\n                typ,\n                quote { crate::note::note_interface::NoteHash },\n                quote { compute_nullifier_unconstrained },\n            );\n\n            let if_or_else_if = if i == 0 {\n                quote { if }\n            } else {\n                quote { else if }\n            };\n\n            if_note_type_id_match_statements_list = if_note_type_id_match_statements_list.push_back(\n                quote {\n                    $if_or_else_if note_type_id == $get_note_type_id() {\n                        // As an extra safety check we make sure that the packed_note BoundedVec has the expected\n                        // length, since we're about to interpret its raw storage as a fixed-size array by calling the\n                        // unpack function on it.\n                        let expected_len = <$typ as $crate::protocol::traits::Packable>::N;\n                        let actual_len = packed_note.len();\n                        if actual_len != expected_len {\n                            $warn_length_mismatch([note_type_id, expected_len as Field, actual_len as Field]);\n                            Option::none()\n                        } else {\n                            let note = $unpack(aztec::utils::array::subarray(packed_note.storage(), 0));\n\n                            // The message discovery process finds settled notes, that is, notes that were created in\n                            // prior transactions and are therefore already part of the note hash tree. The note hash\n                            // for nullification is hence the unique note hash.\n                            $compute_nullifier_unconstrained(note, owner, unique_note_hash)\n                        }\n                    }\n                },\n            );\n        }\n\n        let if_note_type_id_match_statements = if_note_type_id_match_statements_list.join(quote {});\n\n        quote {\n            /// Computes a note's inner nullifier (non-siloed) given its unique note hash, preimage and extra data.\n            ///\n            /// The signature of this function notably matches the `aztec::messages::discovery::ComputeNoteNullifier` type, and so it can be used to call functions from that module such as `do_sync_state` and `attempt_note_discovery`.\n            ///\n            /// This function is automatically injected by the `#[aztec]` macro.\n            #[contract_library_method]\n            unconstrained fn _compute_note_nullifier(\n                unique_note_hash: Field,\n                packed_note: BoundedVec<Field, aztec::messages::logs::note::MAX_NOTE_PACKED_LEN>,\n                owner: aztec::protocol::address::AztecAddress,\n                _storage_slot: Field,\n                note_type_id: Field,\n                _contract_address: aztec::protocol::address::AztecAddress,\n                _randomness: Field,\n            ) -> Option<Field> {\n                $if_note_type_id_match_statements\n                else {\n                    $warn_unknown_note_type([note_type_id]);\n                    Option::none()\n                }\n            }\n        }\n    }\n}\n"
        },
        "117": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/macros/aztec.nr",
            "source": "mod compute_note_hash_and_nullifier;\n\nuse crate::{\n    macros::{\n        calls_generation::{\n            external_functions::{generate_external_function_calls, generate_external_function_self_calls_structs},\n            internal_functions::generate_call_internal_struct,\n        },\n        dispatch::generate_public_dispatch,\n        emit_public_init_nullifier::generate_emit_public_init_nullifier,\n        internals_functions_generation::{create_fn_abi_exports, process_functions},\n        storage::STORAGE_LAYOUT_NAME,\n        utils::{is_fn_contract_library_method, is_fn_external, is_fn_internal, is_fn_test, module_has_storage},\n    },\n    messages::discovery::CustomMessageHandler,\n};\n\nuse compute_note_hash_and_nullifier::generate_contract_library_methods_compute_note_hash_and_nullifier;\n\n/// Configuration for the [`aztec`] macro.\n///\n/// This type lets users override different parts of the default aztec-nr contract behavior, such\n/// as message handling. These are advanced features that require careful understanding of\n/// the behavior of these systems.\n///\n/// ## Examples\n///\n/// ```noir\n/// #[aztec(aztec::macros::AztecConfig::new().custom_message_handler(my_handler))]\n/// contract MyContract { ... }\n/// ```\npub struct AztecConfig {\n    custom_message_handler: Option<CustomMessageHandler<()>>,\n}\n\nimpl AztecConfig {\n    /// Creates a new `AztecConfig` with default values.\n    ///\n    /// Calling `new` is equivalent to invoking the [`aztec`] macro with no parameters. The different methods\n    /// (e.g. [`AztecConfig::custom_message_handler`]) can then be used to change the default behavior.\n    pub comptime fn new() -> Self {\n        Self { custom_message_handler: Option::none() }\n    }\n\n    /// Sets a handler for custom messages.\n    ///\n    /// This enables contracts to process non-standard messages (i.e. any with a message type that is not in\n    /// [`crate::messages::msg_type`]).\n    ///\n    /// `handler` must be a `#[contract_library_method]` function that conforms to the\n    /// [`crate::messages::discovery::CustomMessageHandler`] type signature.\n    pub comptime fn custom_message_handler(_self: Self, handler: CustomMessageHandler<()>) -> Self {\n        Self { custom_message_handler: Option::some(handler) }\n    }\n}\n\n/// Enables aztec-nr features on a `contract`.\n///\n/// All aztec-nr contracts should have this macro invoked on them, as it is the one that processes all contract\n/// functions, notes, storage, generates interfaces for external calls, and creates the message processing\n/// boilerplate.\n///\n/// ## Examples\n///\n/// Most contracts can simply invoke the macro with no parameters, resulting in default aztec-nr behavior:\n/// ```noir\n/// #[aztec]\n/// contract MyContract { ... }\n/// ```\n///\n/// Advanced contracts can use [`AztecConfig`] to customize parts of its behavior, such as message\n/// processing.\n/// ```noir\n/// #[aztec(aztec::macros::AztecConfig::new().custom_message_handler(my_handler))]\n/// contract MyAdvancedContract { ... }\n/// ```\n#[varargs]\npub comptime fn aztec(m: Module, args: [AztecConfig]) -> Quoted {\n    let num_args = args.len();\n    let config = if num_args == 0 {\n        AztecConfig::new()\n    } else if num_args == 1 {\n        args[0]\n    } else {\n        panic(f\"#[aztec] expects 0 or 1 arguments, got {num_args}\")\n    };\n\n    // Functions that don't have #[external(...)], #[contract_library_method], or #[test] are not allowed in contracts.\n    check_each_fn_macroified(m);\n\n    // We generate new functions prefixed with `__aztec_nr_internals__` and we replace the original functions' bodies\n    // with `static_assert(false, ...)` to prevent them from being called directly from within the contract.\n    let functions = process_functions(m);\n\n    // We generate structs and their implementations necessary for convenient functions calls.\n    let interface = generate_contract_interface(m);\n    let self_call_structs = generate_external_function_self_calls_structs(m);\n    let call_internal_struct = generate_call_internal_struct(m);\n\n    // We generate ABI exports for all the external functions in the contract.\n    let fn_abi_exports = create_fn_abi_exports(m);\n\n    // We generate `_compute_note_hash`, `_compute_note_nullifier` (and the deprecated\n    // `_compute_note_hash_and_nullifier` wrapper) and `sync_state` functions only if they are not already implemented.\n    // If they are implemented we just insert empty quotes.\n    let contract_library_method_compute_note_hash_and_nullifier = if !m.functions().any(|f| {\n        // Note that we don't test for `_compute_note_hash` or `_compute_note_nullifier` in order to make this simpler\n        // - users must either implement all three or none.\n        // Down the line we'll remove this check and use `AztecConfig`.\n        f.name() == quote { _compute_note_hash_and_nullifier }\n    }) {\n        generate_contract_library_methods_compute_note_hash_and_nullifier()\n    } else {\n        quote {}\n    };\n    let process_custom_message_option = if config.custom_message_handler.is_some() {\n        let handler = config.custom_message_handler.unwrap();\n        quote { Option::some($handler) }\n    } else {\n        quote { Option::<aztec::messages::discovery::CustomMessageHandler<()>>::none() }\n    };\n\n    let offchain_inbox_sync_option = quote {\n        Option::some(aztec::messages::processing::offchain::sync_inbox)\n    };\n\n    let sync_state_fn_and_abi_export = if !m.functions().any(|f| f.name() == quote { sync_state }) {\n        generate_sync_state(process_custom_message_option, offchain_inbox_sync_option)\n    } else {\n        quote {}\n    };\n\n    if m.functions().any(|f| f.name() == quote { offchain_receive }) {\n        panic(\n            \"User-defined 'offchain_receive' is not allowed. The function is auto-injected by the #[aztec] macro. See https://docs.aztec.network/errors/7\",\n        );\n    }\n    let offchain_receive_fn_and_abi_export = generate_offchain_receive();\n\n    let (has_public_init_nullifier_fn, emit_public_init_nullifier_fn_body) = generate_emit_public_init_nullifier(m);\n    let public_dispatch = generate_public_dispatch(m, has_public_init_nullifier_fn);\n\n    quote {\n        $interface\n        $self_call_structs\n        $call_internal_struct\n        $functions\n        $fn_abi_exports\n        $contract_library_method_compute_note_hash_and_nullifier\n        $public_dispatch\n        $sync_state_fn_and_abi_export\n        $emit_public_init_nullifier_fn_body\n        $offchain_receive_fn_and_abi_export\n    }\n}\n\ncomptime fn generate_contract_interface(m: Module) -> Quoted {\n    let calls = generate_external_function_calls(m);\n\n    let module_name = m.name();\n\n    let has_storage_layout = module_has_storage(m) & STORAGE_LAYOUT_NAME.get(m).is_some();\n    let storage_layout_getter = if has_storage_layout {\n        let storage_layout_name = STORAGE_LAYOUT_NAME.get(m).unwrap();\n        quote {\n            pub fn storage_layout() -> StorageLayoutFields {\n                $storage_layout_name.fields\n            }\n        }\n    } else {\n        quote {}\n    };\n\n    let library_storage_layout_getter = if has_storage_layout {\n        quote {\n            #[contract_library_method]\n            $storage_layout_getter\n        }\n    } else {\n        quote {}\n    };\n\n    quote {\n        pub struct $module_name {\n            pub target_contract: aztec::protocol::address::AztecAddress\n        }\n\n        impl $module_name {\n            $calls\n\n            pub fn at(\n                addr: aztec::protocol::address::AztecAddress\n            ) -> Self {\n                Self { target_contract: addr }\n            }\n\n            pub fn interface() -> Self {\n                Self { target_contract: aztec::protocol::address::AztecAddress::zero() }\n            }\n\n            $storage_layout_getter\n        }\n\n        #[contract_library_method]\n        pub fn at(\n            addr: aztec::protocol::address::AztecAddress\n        ) -> $module_name {\n            $module_name { target_contract: addr }\n        }\n\n        #[contract_library_method]\n        pub fn interface() -> $module_name {\n            $module_name { target_contract: aztec::protocol::address::AztecAddress::zero() }\n        }\n\n        $library_storage_layout_getter\n\n    }\n}\n\n/// Generates the `sync_state` utility function that performs message discovery.\ncomptime fn generate_sync_state(process_custom_message_option: Quoted, offchain_inbox_sync_option: Quoted) -> Quoted {\n    quote {\n        pub struct sync_state_parameters {\n            pub scope: aztec::protocol::address::AztecAddress,\n        }\n\n        #[abi(functions)]\n        pub struct sync_state_abi {\n            parameters: sync_state_parameters,\n        }\n\n        #[aztec::macros::internals_functions_generation::abi_attributes::abi_utility]\n        unconstrained fn sync_state(scope: aztec::protocol::address::AztecAddress) {\n            let address = aztec::context::UtilityContext::new().this_address();\n            aztec::messages::discovery::do_sync_state(\n                address,\n                _compute_note_hash,\n                _compute_note_nullifier,\n                $process_custom_message_option,\n                $offchain_inbox_sync_option,\n                scope,\n            );\n        }\n    }\n}\n\n/// Generates an `offchain_receive` utility function that lets callers add messages to the offchain message inbox.\n///\n/// For more details, see `aztec::messages::processing::offchain::receive`.\ncomptime fn generate_offchain_receive() -> Quoted {\n    quote {\n        pub struct offchain_receive_parameters {\n            pub messages: BoundedVec<\n                aztec::messages::processing::offchain::OffchainMessage,\n                aztec::messages::processing::offchain::MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL,\n            >,\n        }\n\n        #[abi(functions)]\n        pub struct offchain_receive_abi {\n            parameters: offchain_receive_parameters,\n        }\n\n        /// Receives offchain messages into this contract's offchain inbox for subsequent processing.\n        ///\n        /// Each message is routed to the inbox scoped to its `recipient` field.\n        ///\n        /// For more details, see `aztec::messages::processing::offchain::receive`.\n        ///\n        /// This function is automatically injected by the `#[aztec]` macro.\n        #[aztec::macros::internals_functions_generation::abi_attributes::abi_utility]\n        unconstrained fn offchain_receive(\n            messages: BoundedVec<\n                aztec::messages::processing::offchain::OffchainMessage,\n                aztec::messages::processing::offchain::MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL,\n            >,\n        ) {\n            let address = aztec::context::UtilityContext::new().this_address();\n            aztec::messages::processing::offchain::receive(address, messages);\n        }\n    }\n}\n\n/// Checks that all functions in the module have a context macro applied.\n///\n/// Non-macroified functions are not allowed in contracts. They must all be one of\n/// [`crate::macros::functions::external`], [`crate::macros::functions::internal`] or `test`.\ncomptime fn check_each_fn_macroified(m: Module) {\n    for f in m.functions() {\n        let name = f.name();\n        if !is_fn_external(f) & !is_fn_contract_library_method(f) & !is_fn_internal(f) & !is_fn_test(f) {\n            // We  don't suggest that #[contract_library_method] is allowed because we don't want to introduce another\n            // concept\n            panic(\n                f\"Function {name} must be marked as either #[external(...)], #[internal(...)], or #[test]\",\n            );\n        }\n    }\n}\n"
        },
        "132": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/macros/internals_functions_generation/external/private.nr",
            "source": "use crate::macros::{\n    functions::initialization_utils::has_public_init_checked_functions,\n    internals_functions_generation::external::helpers::{create_authorize_once_check, get_abi_relevant_attributes},\n    utils::{\n        fn_has_allow_phase_change, fn_has_authorize_once, fn_has_noinitcheck, is_fn_initializer, is_fn_only_self,\n        is_fn_view, module_has_initializer, module_has_storage,\n    },\n};\nuse crate::protocol::meta::utils::derive_serialization_quotes;\nuse std::meta::type_of;\n\npub(crate) comptime fn generate_private_external(f: FunctionDefinition) -> Quoted {\n    let module_has_initializer = module_has_initializer(f.module());\n    let module_has_storage = module_has_storage(f.module());\n\n    // Private functions undergo a lot of transformations from their Aztec.nr form into a circuit that can be fed to\n    // the Private Kernel Circuit. First we change the function signature so that it also receives\n    // `PrivateContextInputs`, which contain information about the execution context (e.g. the caller).\n    let original_params = f.parameters();\n\n    let original_params_quotes =\n        original_params.map(|(param_name, param_type)| quote { $param_name: $param_type }).join(quote {, });\n\n    let params = quote { inputs: aztec::context::inputs::PrivateContextInputs, $original_params_quotes };\n\n    let mut body = f.body().as_block().unwrap();\n\n    // The original params are hashed and passed to the `context` object, so that the kernel can verify we've received\n    // the correct values.\n    let (args_serialization, _, serialized_args_name) = derive_serialization_quotes(original_params, false);\n\n    let storage_init = if module_has_storage {\n        // Contract has Storage defined so we initialize it.\n        quote {\n            let storage = Storage::init(&mut context);\n        }\n    } else {\n        // Contract does not have Storage defined, so we set storage to the unit type `()`. ContractSelfPrivate\n        // requires a storage struct in its constructor. Using an Option type would lead to worse developer experience\n        // and higher constraint counts so we use the unit type `()` instead.\n        quote {\n            let storage = ();\n        }\n    };\n\n    let contract_self_creation = quote {\n        #[allow(unused_variables)]\n        let mut self = {\n            $args_serialization\n            let args_hash = aztec::hash::hash_args($serialized_args_name);\n            let mut context = aztec::context::PrivateContext::new(inputs, args_hash);\n            $storage_init\n            let self_address = context.this_address();\n            let call_self: CallSelf<&mut aztec::context::PrivateContext> = CallSelf { address: self_address, context: &mut context };\n            let enqueue_self: EnqueueSelf<&mut aztec::context::PrivateContext> = EnqueueSelf { address: self_address, context: &mut context };\n            let call_self_static: CallSelfStatic<&mut aztec::context::PrivateContext> = CallSelfStatic { address: self_address, context: &mut context };\n            let enqueue_self_static: EnqueueSelfStatic<&mut aztec::context::PrivateContext> = EnqueueSelfStatic { address: self_address, context: &mut context };\n            let internal: CallInternal<&mut aztec::context::PrivateContext> = CallInternal { context: &mut context };\n            aztec::contract_self::ContractSelfPrivate::new(&mut context, storage, call_self, enqueue_self, call_self_static, enqueue_self_static, internal)\n        };\n    };\n\n    let original_function_name = f.name();\n\n    // Modifications introduced by the different marker attributes.\n    let internal_check = if is_fn_only_self(f) {\n        let assertion_message = f\"Function {original_function_name} can only be called by the same contract\";\n        quote { assert(self.msg_sender() == self.address, $assertion_message); }\n    } else {\n        quote {}\n    };\n\n    let view_check = if is_fn_view(f) {\n        let assertion_message = f\"Function {original_function_name} can only be called statically\".as_quoted_str();\n        quote { assert(self.context.inputs.call_context.is_static_call, $assertion_message); }\n    } else {\n        quote {}\n    };\n\n    let (assert_initializer, mark_as_initialized) = if is_fn_initializer(f) {\n        let has_public_fns_with_init_check = has_public_init_checked_functions(f.module());\n        (\n            quote { aztec::macros::functions::initialization_utils::assert_initialization_matches_address_preimage_private(*self.context); },\n            quote { aztec::macros::functions::initialization_utils::mark_as_initialized_from_private_initializer(self.context, $has_public_fns_with_init_check); },\n        )\n    } else {\n        (quote {}, quote {})\n    };\n\n    // Initialization checks are not included in contracts that don't have initializers.\n    let init_check = if module_has_initializer & !is_fn_initializer(f) & !fn_has_noinitcheck(f) {\n        quote { aztec::macros::functions::initialization_utils::assert_is_initialized_private(self.context); }\n    } else {\n        quote {}\n    };\n\n    // Phase checks are skipped in functions that request to manually handle phases\n    let initial_phase_store = if fn_has_allow_phase_change(f) {\n        quote {}\n    } else {\n        quote { let within_revertible_phase: bool = self.context.in_revertible_phase(); }\n    };\n\n    let no_phase_change_check = if fn_has_allow_phase_change(f) {\n        quote {}\n    } else {\n        quote {   \n            assert_eq(\n                within_revertible_phase,\n                self.context.in_revertible_phase(),\n                f\"Phase change detected on function with phase check. If this is expected, use #[allow_phase_change]\",\n            ); \n        }\n    };\n\n    // Inject the authwit check if the function is marked with #[authorize_once].\n    let authorize_once_check = if fn_has_authorize_once(f) {\n        create_authorize_once_check(f, true)\n    } else {\n        quote {}\n    };\n\n    // Finally, we need to change the return type to be `PrivateCircuitPublicInputs`, which is what the Private Kernel\n    // circuit expects.\n    let return_value_var_name = quote { macro__returned__values };\n\n    let return_value_type = f.return_type();\n    let return_value = if body.len() == 0 {\n        quote {}\n    } else if return_value_type != type_of(()) {\n        // The original return value is serialized and hashed before being passed to the context.\n        let (body_without_return, last_body_expr) = body.pop_back();\n        let return_value = last_body_expr.quoted();\n        let return_value_assignment = quote { let $return_value_var_name: $return_value_type = $return_value; };\n\n        let (return_serialization, _, serialized_return_name) =\n            derive_serialization_quotes([(return_value_var_name, return_value_type)], false);\n\n        body = body_without_return;\n\n        quote {\n            $return_value_assignment\n            $return_serialization\n            self.context.set_return_hash($serialized_return_name);\n        }\n    } else {\n        let (body_without_return, last_body_expr) = body.pop_back();\n        if !last_body_expr.has_semicolon()\n            & last_body_expr.as_for().is_none()\n            & last_body_expr.as_assert().is_none()\n            & last_body_expr.as_for_range().is_none()\n            & last_body_expr.as_assert_eq().is_none()\n            & last_body_expr.as_let().is_none() {\n            let unused_return_value_name = f\"_{return_value_var_name}\".quoted_contents();\n            body = body_without_return.push_back(quote { let $unused_return_value_name = $last_body_expr; }\n                .as_expr()\n                .unwrap());\n        }\n        quote {}\n    };\n\n    let context_finish = quote { self.context.finish() };\n\n    // Preserve all attributes that are relevant to the function's ABI.\n    let abi_relevant_attributes = get_abi_relevant_attributes(f);\n\n    let fn_name = f\"__aztec_nr_internals__{original_function_name}\".quoted_contents();\n\n    let to_prepend = quote {\n        aztec::oracle::version::assert_compatible_oracle_version();\n        $contract_self_creation\n        $initial_phase_store\n        $assert_initializer\n        $init_check\n        $internal_check\n        $view_check\n        $authorize_once_check\n    };\n\n    let body_quote = body.map(|expr| expr.quoted()).join(quote { });\n\n    // `mark_as_initialized` is placed after the user's function body. If it ran at the beginning, the contract\n    // would appear initialized while the initializer is still running, allowing contracts called by the initializer\n    // to re-enter into a half-initialized contract.\n    let to_append = quote {\n        $return_value\n        $mark_as_initialized\n        $no_phase_change_check\n        $context_finish\n    };\n\n    quote {\n        #[aztec::macros::internals_functions_generation::abi_attributes::abi_private]\n        $abi_relevant_attributes\n        fn $fn_name($params) -> return_data aztec::protocol::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs {\n            $to_prepend\n            $body_quote\n            $to_append\n        }\n    }\n}\n"
        },
        "143": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/discovery/mod.nr",
            "source": "use crate::logging::{aztecnr_debug_log, aztecnr_debug_log_format, aztecnr_warn_log_format};\nuse crate::protocol::address::AztecAddress;\n\npub(crate) mod nonce_discovery;\npub(crate) mod partial_notes;\npub(crate) mod private_events;\npub mod private_notes;\npub mod process_message;\n\nuse crate::{\n    capsules::CapsuleArray,\n    messages::{\n        discovery::process_message::process_message_ciphertext,\n        encoding::MAX_MESSAGE_CONTENT_LEN,\n        logs::note::MAX_NOTE_PACKED_LEN,\n        processing::{\n            get_private_logs, MessageContext, offchain::OffchainInboxSync, OffchainMessageWithContext,\n            pending_tagged_log::PendingTaggedLog, validate_and_store_enqueued_notes_and_events,\n        },\n    },\n    utils::array,\n};\n\npub struct NoteHashAndNullifier {\n    /// The result of [`crate::note::note_interface::NoteHash::compute_note_hash`].\n    pub note_hash: Field,\n    /// The result of [`crate::note::note_interface::NoteHash::compute_nullifier_unconstrained`].\n    ///\n    /// This value is unconstrained, as all of message discovery is unconstrained. It is `None` if the nullifier\n    /// cannot be computed (e.g. because the nullifier hiding key is not available).\n    pub inner_nullifier: Option<Field>,\n}\n\n/// A contract's way of computing note hashes.\n///\n/// Each contract in the network is free to compute their note's hash as they see fit - the hash function itself is not\n/// enshrined or standardized. Some aztec-nr functions however do need to know the details of this computation (e.g.\n/// when finding new notes), which is what this type represents.\n///\n/// This function takes a note's packed content, storage slot, note type ID, address of the emitting contract and\n/// randomness, and attempts to compute its inner note hash (not siloed by address nor uniqued by nonce).\n///\n/// ## Transient Notes\n///\n/// This function is meant to always be used on **settled** notes, i.e. those that have been inserted into the trees\n/// and for which the nonce is known. It is never invoked in the context of a transient note, as those are not involved\n/// in message processing.\n///\n/// ## Automatic Implementation\n///\n/// The [`[#aztec]`](crate::macros::aztec::aztec) macro automatically creates a correct implementation of this function\n/// for each contract by inspecting all note types in use and the storage layout. This injected function is a\n/// `#[contract_library_method]` called `_compute_note_hash`, and it looks something like this:\n///\n/// ```noir\n/// |packed_note, owner, storage_slot, note_type_id, _contract_address, randomness| {\n///     if note_type_id == MyNoteType::get_id() {\n///         if packed_note.len() != MY_NOTE_TYPE_SERIALIZATION_LENGTH {\n///             Option::none()\n///         } else {\n///             let note = MyNoteType::unpack(aztec::utils::array::subarray(packed_note.storage(), 0));\n///             Option::some(note.compute_note_hash(owner, storage_slot, randomness))\n///         }\n///     } else if note_type_id == MyOtherNoteType::get_id() {\n///           ... // Similar to above but calling MyOtherNoteType::unpack\n///     } else {\n///         Option::none() // Unknown note type ID\n///     };\n/// }\n/// ```\npub type ComputeNoteHash = unconstrained fn(/* packed_note */BoundedVec<Field, MAX_NOTE_PACKED_LEN>, /*\n owner */ AztecAddress, /* storage_slot */ Field, /* note_type_id */ Field, /* contract_address */ AztecAddress, /*\nrandomness */ Field) -> Option<Field>;\n\n/// A contract's way of computing note nullifiers.\n///\n/// Like [`ComputeNoteHash`], each contract is free to derive nullifiers as they see fit. This function takes the\n/// unique note hash (used as the note hash for nullification for settled notes), plus the note's packed content and\n/// metadata, and attempts to compute the inner nullifier (not siloed by address).\n///\n/// ## Automatic Implementation\n///\n/// The [`[#aztec]`](crate::macros::aztec::aztec) macro automatically creates a correct implementation of this function\n/// for each contract called `_compute_note_nullifier`. It dispatches on `note_type_id` similarly to\n/// [`ComputeNoteHash`], then calls the note's\n/// [`compute_nullifier_unconstrained`](crate::note::note_interface::NoteHash::compute_nullifier_unconstrained) method.\npub type ComputeNoteNullifier = unconstrained fn(/* unique_note_hash */Field, /* packed_note */ BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n/* owner */ AztecAddress, /* storage_slot */ Field, /* note_type_id */ Field, /* contract_address */ AztecAddress,\n/* randomness */ Field) -> Option<Field>;\n\n/// Deprecated: use [`ComputeNoteHash`] and [`ComputeNoteNullifier`] instead.\npub type ComputeNoteHashAndNullifier<Env> = unconstrained fn[Env](/* packed_note */BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n/* owner */ AztecAddress, /* storage_slot */ Field, /* note_type_id */ Field, /* contract_address */ AztecAddress,\n/*randomness */ Field, /* note nonce */ Field) -> Option<NoteHashAndNullifier>;\n\n/// A handler for custom messages.\n///\n/// Contracts that emit custom messages (i.e. any with a message type that is not in [`crate::messages::msg_type`])\n/// need to use [`crate::macros::AztecConfig::custom_message_handler`] with a function of this type in order to\n/// process them. They will otherwise be **silently ignored**.\npub type CustomMessageHandler<Env> = unconstrained fn[Env](\n/* contract_address */AztecAddress,\n/* msg_type_id */ u64,\n/* msg_metadata */ u64,\n/* msg_content */ BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>,\n/* message_context */ MessageContext,\n/* scope */ AztecAddress);\n\n/// Synchronizes the contract's private state with the network.\n///\n/// As blocks are mined, it is possible for a contract's private state to change (e.g. with new notes being created),\n/// but because these changes are private they will be invisible to most actors. This is the function that processes\n/// new transactions in order to discover new notes, events, and other kinds of private state changes.\n///\n/// The private state will be synchronized up to the block that will be used for private transactions (i.e. the anchor\n/// block. This will typically be close to the tip of the chain.\npub unconstrained fn do_sync_state<CustomMessageHandlerEnv>(\n    contract_address: AztecAddress,\n    compute_note_hash: ComputeNoteHash,\n    compute_note_nullifier: ComputeNoteNullifier,\n    process_custom_message: Option<CustomMessageHandler<CustomMessageHandlerEnv>>,\n    offchain_inbox_sync: Option<OffchainInboxSync<()>>,\n    scope: AztecAddress,\n) {\n    aztecnr_debug_log!(\"Performing state synchronization\");\n\n    // First we process all private logs, which can contain different kinds of messages e.g. private notes, partial\n    // notes, private events, etc.\n    let logs = get_private_logs(contract_address, scope);\n    logs.for_each(|i, pending_tagged_log: PendingTaggedLog| {\n        if pending_tagged_log.log.len() == 0 {\n            aztecnr_warn_log_format!(\"Skipping empty log from tx {0}\")([pending_tagged_log.context.tx_hash]);\n        } else {\n            aztecnr_debug_log_format!(\"Processing log with tag {0}\")([pending_tagged_log.log.get(0)]);\n\n            // We remove the tag from the pending tagged log and process the message ciphertext contained in it.\n            let message_ciphertext = array::subbvec(pending_tagged_log.log, 1);\n\n            process_message_ciphertext(\n                contract_address,\n                compute_note_hash,\n                compute_note_nullifier,\n                process_custom_message,\n                message_ciphertext,\n                pending_tagged_log.context,\n                scope,\n            );\n        }\n\n        // We need to delete each log from the array so that we won't process them again. `CapsuleArray::for_each`\n        // allows deletion of the current element during iteration, so this is safe.\n        // Note that this (and all other database changes) will only be committed if contract execution succeeds,\n        // including any enqueued validation requests.\n        logs.remove(i);\n    });\n\n    if offchain_inbox_sync.is_some() {\n        let msgs: CapsuleArray<OffchainMessageWithContext> = offchain_inbox_sync.unwrap()(contract_address, scope);\n        msgs.for_each(|i, msg| {\n            process_message_ciphertext(\n                contract_address,\n                compute_note_hash,\n                compute_note_nullifier,\n                process_custom_message,\n                msg.message_ciphertext,\n                msg.message_context,\n                scope,\n            );\n            // The inbox sync returns _a copy_ of messages to process, so we clear them as we do so. This is a\n            // volatile array with the to-process message, not the actual persistent storage of them.\n            msgs.remove(i);\n        });\n    }\n\n    // Then we process all pending partial notes, regardless of whether they were found in the current or previous\n    // executions.\n    partial_notes::fetch_and_process_partial_note_completion_logs(\n        contract_address,\n        compute_note_hash,\n        compute_note_nullifier,\n        scope,\n    );\n\n    // Finally we validate all notes and events that were found as part of the previous processes, resulting in them\n    // being added to PXE's database and retrievable via oracles (get_notes) and our TS API (PXE::getPrivateEvents).\n    validate_and_store_enqueued_notes_and_events(contract_address, scope);\n}\n\nmod test {\n    use crate::{\n        capsules::CapsuleArray,\n        messages::{\n            discovery::{CustomMessageHandler, do_sync_state},\n            logs::note::MAX_NOTE_PACKED_LEN,\n            processing::{\n                offchain::OffchainInboxSync, pending_tagged_log::PendingTaggedLog, PENDING_TAGGED_LOG_ARRAY_BASE_SLOT,\n            },\n        },\n        test::helpers::test_environment::TestEnvironment,\n    };\n    use crate::protocol::address::AztecAddress;\n\n    global SCOPE: AztecAddress = AztecAddress { inner: 0xcafe };\n\n    #[test]\n    unconstrained fn do_sync_state_does_not_panic_on_empty_logs() {\n        let env = TestEnvironment::new();\n\n        let contract_address = AztecAddress { inner: 0xdeadbeef };\n\n        env.utility_context_at(contract_address, |_| {\n            let base_slot = PENDING_TAGGED_LOG_ARRAY_BASE_SLOT;\n\n            let logs: CapsuleArray<PendingTaggedLog> = CapsuleArray::at(contract_address, base_slot, SCOPE);\n            logs.push(PendingTaggedLog { log: BoundedVec::new(), context: std::mem::zeroed() });\n            assert_eq(logs.len(), 1);\n\n            let no_inbox_sync: Option<OffchainInboxSync<()>> = Option::none();\n            let no_handler: Option<CustomMessageHandler<()>> = Option::none();\n            do_sync_state(\n                contract_address,\n                dummy_compute_note_hash,\n                dummy_compute_note_nullifier,\n                no_handler,\n                no_inbox_sync,\n                SCOPE,\n            );\n\n            assert_eq(logs.len(), 0);\n        });\n    }\n\n    unconstrained fn dummy_compute_note_hash(\n        _packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n        _owner: AztecAddress,\n        _storage_slot: Field,\n        _note_type_id: Field,\n        _contract_address: AztecAddress,\n        _randomness: Field,\n    ) -> Option<Field> {\n        Option::none()\n    }\n\n    unconstrained fn dummy_compute_note_nullifier(\n        _unique_note_hash: Field,\n        _packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n        _owner: AztecAddress,\n        _storage_slot: Field,\n        _note_type_id: Field,\n        _contract_address: AztecAddress,\n        _randomness: Field,\n    ) -> Option<Field> {\n        Option::none()\n    }\n}\n"
        },
        "144": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/discovery/nonce_discovery.nr",
            "source": "use crate::messages::{discovery::{ComputeNoteHash, ComputeNoteNullifier}, logs::note::MAX_NOTE_PACKED_LEN};\n\nuse crate::logging::{aztecnr_debug_log_format, aztecnr_warn_log_format};\nuse crate::protocol::{\n    address::AztecAddress,\n    constants::MAX_NOTE_HASHES_PER_TX,\n    hash::{compute_note_hash_nonce, compute_siloed_note_hash, compute_unique_note_hash},\n    traits::ToField,\n};\n\n/// A struct with the discovered information of a complete note, required for delivery to PXE. Note that this is *not*\n/// the complete note information, since it does not include content, storage slot, etc.\npub(crate) struct DiscoveredNoteInfo {\n    pub(crate) note_nonce: Field,\n    pub(crate) note_hash: Field,\n    pub(crate) inner_nullifier: Field,\n}\n\n/// Searches for note nonces that will result in a note that was emitted in a transaction. While rare, it is possible\n/// for multiple notes to have the exact same packed content and storage slot but different nonces, resulting in\n/// different unique note hashes. Because of this this function returns a *vector* of discovered notes, though in most\n/// cases it will contain a single element.\n///\n/// Due to how nonces are computed, this function requires knowledge of the transaction in which the note was created,\n/// more specifically the list of all unique note hashes in it plus the value of its first nullifier.\npub(crate) unconstrained fn attempt_note_nonce_discovery(\n    unique_note_hashes_in_tx: BoundedVec<Field, MAX_NOTE_HASHES_PER_TX>,\n    first_nullifier_in_tx: Field,\n    compute_note_hash: ComputeNoteHash,\n    compute_note_nullifier: ComputeNoteNullifier,\n    contract_address: AztecAddress,\n    owner: AztecAddress,\n    storage_slot: Field,\n    randomness: Field,\n    note_type_id: Field,\n    packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n) -> BoundedVec<DiscoveredNoteInfo, MAX_NOTE_HASHES_PER_TX> {\n    let discovered_notes = &mut BoundedVec::new();\n\n    aztecnr_debug_log_format!(\n        \"Attempting nonce discovery on {0} potential notes on contract {1} for storage slot {2}\",\n    )(\n        [unique_note_hashes_in_tx.len() as Field, contract_address.to_field(), storage_slot],\n    );\n\n    let maybe_note_hash = compute_note_hash(\n        packed_note,\n        owner,\n        storage_slot,\n        note_type_id,\n        contract_address,\n        randomness,\n    );\n\n    if maybe_note_hash.is_none() {\n        aztecnr_warn_log_format!(\n            \"Unable to compute note hash for note of id {0} with packed length {1}, skipping nonce discovery\",\n        )(\n            [note_type_id, packed_note.len() as Field],\n        );\n    } else {\n        let note_hash = maybe_note_hash.unwrap();\n        let siloed_note_hash = compute_siloed_note_hash(contract_address, note_hash);\n\n        // We need to find nonces (typically just one) that result in the siloed note hash that being uniqued into one\n        // of the transaction's effects.\n        // The nonce is meant to be derived from the index of the note hash in the transaction effects array. However,\n        // due to an issue in the kernels the nonce might actually use any of the possible note hash indices - not\n        // necessarily the one that corresponds to the note hash. Hence, we need to try them all.\n        for i in 0..MAX_NOTE_HASHES_PER_TX {\n            let nonce_for_i = compute_note_hash_nonce(first_nullifier_in_tx, i);\n            let unique_note_hash_for_i = compute_unique_note_hash(nonce_for_i, siloed_note_hash);\n\n            let matching_notes = bvec_filter(\n                unique_note_hashes_in_tx,\n                |unique_note_hash_in_tx| unique_note_hash_in_tx == unique_note_hash_for_i,\n            );\n            if matching_notes.len() > 1 {\n                let identical_note_hashes = matching_notes.len();\n                // Note that we don't actually check that the note hashes array contains unique values, only that the\n                // note we found is unique. We don't expect for this to ever happen (it'd indicate a malicious node or\n                // PXE, which are both assumed to be cooperative) so testing for it just in case is unnecessary, but we\n                // _do_ need to handle it if we find a duplicate.\n                panic(\n                    f\"Received {identical_note_hashes} identical note hashes for a transaction - these should all be unique\",\n                )\n            } else if matching_notes.len() == 1 {\n                let maybe_inner_nullifier_for_i = compute_note_nullifier(\n                    unique_note_hash_for_i,\n                    packed_note,\n                    owner,\n                    storage_slot,\n                    note_type_id,\n                    contract_address,\n                    randomness,\n                );\n\n                if maybe_inner_nullifier_for_i.is_none() {\n                    // TODO: down the line we want to be able to store notes for which we don't know their nullifier,\n                    // e.g. notes that belong to someone that is not us (and for which we therefore don't know their\n                    // associated app-siloed nullifer hiding secret key).\n                    // https://linear.app/aztec-labs/issue/F-265/store-external-notes\n                    aztecnr_warn_log_format!(\n                        \"Unable to compute nullifier of unique note {0} with note type id {1} and owner {2}, skipping PXE insertion\",\n                    )(\n                        [unique_note_hash_for_i, note_type_id, owner.to_field()],\n                    );\n                } else {\n                    // Note that while we did check that the note hash is the preimage of a unique note hash, we\n                    // perform no validations on the nullifier - we fundamentally cannot, since only the application\n                    // knows how to compute nullifiers. We simply trust it to have provided the correct one: if it\n                    // hasn't, then PXE may fail to realize that a given note has been nullified already, and calls to\n                    // the application could result in invalid transactions (with duplicate nullifiers). This is not a\n                    // concern because an application already has more direct means of making a call to it fail the\n                    // transaction.\n                    discovered_notes.push(\n                        DiscoveredNoteInfo {\n                            note_nonce: nonce_for_i,\n                            note_hash,\n                            inner_nullifier: maybe_inner_nullifier_for_i.unwrap(),\n                        },\n                    );\n                }\n                // We don't exit the loop - it is possible (though rare) for the exact same note content to be present\n                // multiple times in the same transaction with different nonces. This typically doesn't happen due to\n                // notes containing random values in order to hide their contents.\n            }\n        }\n    }\n\n    *discovered_notes\n}\n\n// There is no BoundedVec::filter in the stdlib, so we use this until that is implemented.\nunconstrained fn bvec_filter<Env, T, let MAX_LEN: u32>(\n    bvec: BoundedVec<T, MAX_LEN>,\n    filter: fn[Env](T) -> bool,\n) -> BoundedVec<T, MAX_LEN> {\n    let filtered = &mut BoundedVec::new();\n\n    bvec.for_each(|value| {\n        if filter(value) {\n            filtered.push(value);\n        }\n    });\n\n    *filtered\n}\n\nmod test {\n    use crate::{\n        messages::logs::note::MAX_NOTE_PACKED_LEN,\n        note::{\n            note_interface::{NoteHash, NoteType},\n            note_metadata::SettledNoteMetadata,\n            utils::compute_note_hash_for_nullification,\n        },\n        oracle::random::random,\n        test::mocks::mock_note::MockNote,\n        utils::array,\n    };\n\n    use crate::protocol::{\n        address::AztecAddress,\n        hash::{compute_note_hash_nonce, compute_siloed_note_hash, compute_unique_note_hash},\n        traits::{FromField, Packable},\n    };\n\n    use super::attempt_note_nonce_discovery;\n\n    // This implementation could be simpler, but this serves as a nice example of the expected flow in a real\n    // implementation, and as a sanity check that the interface is sufficient.\n\n    unconstrained fn compute_note_hash(\n        packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n        owner: AztecAddress,\n        storage_slot: Field,\n        note_type_id: Field,\n        _contract_address: AztecAddress,\n        randomness: Field,\n    ) -> Option<Field> {\n        if (note_type_id == MockNote::get_id()) & (packed_note.len() == <MockNote as Packable>::N) {\n            let note = MockNote::unpack(array::subarray(packed_note.storage(), 0));\n            Option::some(note.compute_note_hash(owner, storage_slot, randomness))\n        } else {\n            Option::none()\n        }\n    }\n\n    unconstrained fn compute_note_nullifier(\n        unique_note_hash: Field,\n        packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n        owner: AztecAddress,\n        _storage_slot: Field,\n        note_type_id: Field,\n        _contract_address: AztecAddress,\n        _randomness: Field,\n    ) -> Option<Field> {\n        if (note_type_id == MockNote::get_id()) & (packed_note.len() == <MockNote as Packable>::N) {\n            let note = MockNote::unpack(array::subarray(packed_note.storage(), 0));\n            note.compute_nullifier_unconstrained(owner, unique_note_hash)\n        } else {\n            Option::none()\n        }\n    }\n\n    global VALUE: Field = 7;\n    global FIRST_NULLIFIER_IN_TX: Field = 47;\n    global CONTRACT_ADDRESS: AztecAddress = AztecAddress::from_field(13);\n    global OWNER: AztecAddress = AztecAddress::from_field(14);\n    global STORAGE_SLOT: Field = 99;\n    global RANDOMNESS: Field = 99;\n\n    #[test]\n    unconstrained fn no_note_hashes() {\n        let unique_note_hashes_in_tx = BoundedVec::new();\n        let packed_note = BoundedVec::new();\n\n        let discovered_notes = attempt_note_nonce_discovery(\n            unique_note_hashes_in_tx,\n            FIRST_NULLIFIER_IN_TX,\n            compute_note_hash,\n            compute_note_nullifier,\n            CONTRACT_ADDRESS,\n            OWNER,\n            STORAGE_SLOT,\n            RANDOMNESS,\n            MockNote::get_id(),\n            packed_note,\n        );\n\n        assert_eq(discovered_notes.len(), 0);\n    }\n\n    #[test]\n    unconstrained fn failed_hash_computation_is_ignored() {\n        let unique_note_hashes_in_tx = BoundedVec::from_array([random()]);\n\n        let discovered_notes = attempt_note_nonce_discovery(\n            unique_note_hashes_in_tx,\n            FIRST_NULLIFIER_IN_TX,\n            |_, _, _, _, _, _| Option::none(),\n            compute_note_nullifier,\n            CONTRACT_ADDRESS,\n            OWNER,\n            STORAGE_SLOT,\n            RANDOMNESS,\n            MockNote::get_id(),\n            BoundedVec::new(),\n        );\n\n        assert_eq(discovered_notes.len(), 0);\n    }\n\n    #[test]\n    unconstrained fn failed_nullifier_computation_is_ignored() {\n        let note_index_in_tx = 2;\n        let note_and_data = construct_note(VALUE, note_index_in_tx);\n\n        let mut unique_note_hashes_in_tx = BoundedVec::from_array([\n            random(), random(), random(), random(), random(), random(), random(),\n        ]);\n        unique_note_hashes_in_tx.set(note_index_in_tx, note_and_data.unique_note_hash);\n\n        let discovered_notes = attempt_note_nonce_discovery(\n            unique_note_hashes_in_tx,\n            FIRST_NULLIFIER_IN_TX,\n            compute_note_hash,\n            |_, _, _, _, _, _, _| Option::none(),\n            CONTRACT_ADDRESS,\n            OWNER,\n            STORAGE_SLOT,\n            RANDOMNESS,\n            MockNote::get_id(),\n            BoundedVec::from_array(note_and_data.note.pack()),\n        );\n\n        assert_eq(discovered_notes.len(), 0);\n    }\n\n    struct NoteAndData {\n        note: MockNote,\n        note_nonce: Field,\n        note_hash: Field,\n        unique_note_hash: Field,\n        inner_nullifier: Field,\n    }\n\n    unconstrained fn construct_note(value: Field, note_index_in_tx: u32) -> NoteAndData {\n        let note_nonce = compute_note_hash_nonce(FIRST_NULLIFIER_IN_TX, note_index_in_tx);\n\n        let hinted_note = MockNote::new(value)\n            .contract_address(CONTRACT_ADDRESS)\n            .owner(OWNER)\n            .randomness(RANDOMNESS)\n            .storage_slot(STORAGE_SLOT)\n            .note_metadata(SettledNoteMetadata::new(note_nonce).into())\n            .build_hinted_note();\n        let note = hinted_note.note;\n\n        let note_hash = note.compute_note_hash(OWNER, STORAGE_SLOT, RANDOMNESS);\n        let unique_note_hash = compute_unique_note_hash(\n            note_nonce,\n            compute_siloed_note_hash(CONTRACT_ADDRESS, note_hash),\n        );\n        let inner_nullifier = note\n            .compute_nullifier_unconstrained(OWNER, compute_note_hash_for_nullification(hinted_note))\n            .expect(f\"Could not compute nullifier for note owned by {OWNER}\");\n\n        NoteAndData { note, note_nonce, note_hash, unique_note_hash, inner_nullifier }\n    }\n\n    #[test]\n    unconstrained fn single_note() {\n        let note_index_in_tx = 2;\n        let note_and_data = construct_note(VALUE, note_index_in_tx);\n\n        let mut unique_note_hashes_in_tx = BoundedVec::from_array([\n            random(), random(), random(), random(), random(), random(), random(),\n        ]);\n        unique_note_hashes_in_tx.set(note_index_in_tx, note_and_data.unique_note_hash);\n\n        let discovered_notes = attempt_note_nonce_discovery(\n            unique_note_hashes_in_tx,\n            FIRST_NULLIFIER_IN_TX,\n            compute_note_hash,\n            compute_note_nullifier,\n            CONTRACT_ADDRESS,\n            OWNER,\n            STORAGE_SLOT,\n            RANDOMNESS,\n            MockNote::get_id(),\n            BoundedVec::from_array(note_and_data.note.pack()),\n        );\n\n        assert_eq(discovered_notes.len(), 1);\n        let discovered_note = discovered_notes.get(0);\n\n        assert_eq(discovered_note.note_nonce, note_and_data.note_nonce);\n        assert_eq(discovered_note.note_hash, note_and_data.note_hash);\n        assert_eq(discovered_note.inner_nullifier, note_and_data.inner_nullifier);\n    }\n\n    #[test]\n    unconstrained fn multiple_notes_same_preimage() {\n        let first_note_index_in_tx = 3;\n        let first_note_and_data = construct_note(VALUE, first_note_index_in_tx);\n\n        let second_note_index_in_tx = 5;\n        let second_note_and_data = construct_note(VALUE, second_note_index_in_tx);\n\n        // Both notes have the same preimage (and therefore packed representation), so both should be found in the same\n        // call.\n        assert_eq(first_note_and_data.note, second_note_and_data.note);\n        let packed_note = first_note_and_data.note.pack();\n\n        let mut unique_note_hashes_in_tx = BoundedVec::from_array([\n            random(), random(), random(), random(), random(), random(), random(),\n        ]);\n        unique_note_hashes_in_tx.set(first_note_index_in_tx, first_note_and_data.unique_note_hash);\n        unique_note_hashes_in_tx.set(second_note_index_in_tx, second_note_and_data.unique_note_hash);\n\n        let discovered_notes = attempt_note_nonce_discovery(\n            unique_note_hashes_in_tx,\n            FIRST_NULLIFIER_IN_TX,\n            compute_note_hash,\n            compute_note_nullifier,\n            CONTRACT_ADDRESS,\n            OWNER,\n            STORAGE_SLOT,\n            RANDOMNESS,\n            MockNote::get_id(),\n            BoundedVec::from_array(packed_note),\n        );\n\n        assert_eq(discovered_notes.len(), 2);\n\n        assert(discovered_notes.any(|discovered_note| {\n            (discovered_note.note_nonce == first_note_and_data.note_nonce)\n                & (discovered_note.note_hash == first_note_and_data.note_hash)\n                & (discovered_note.inner_nullifier == first_note_and_data.inner_nullifier)\n        }));\n\n        assert(discovered_notes.any(|discovered_note| {\n            (discovered_note.note_nonce == second_note_and_data.note_nonce)\n                & (discovered_note.note_hash == second_note_and_data.note_hash)\n                & (discovered_note.inner_nullifier == second_note_and_data.inner_nullifier)\n        }));\n    }\n\n    #[test]\n    unconstrained fn single_note_misaligned_nonce() {\n        let note_index_in_tx = 2;\n        let note_and_data = construct_note(VALUE, note_index_in_tx);\n\n        let mut unique_note_hashes_in_tx = BoundedVec::from_array([\n            random(), random(), random(), random(), random(), random(), random(),\n        ]);\n\n        // The note is not at the correct index\n        unique_note_hashes_in_tx.set(note_index_in_tx + 1, note_and_data.unique_note_hash);\n\n        let discovered_notes = attempt_note_nonce_discovery(\n            unique_note_hashes_in_tx,\n            FIRST_NULLIFIER_IN_TX,\n            compute_note_hash,\n            compute_note_nullifier,\n            CONTRACT_ADDRESS,\n            OWNER,\n            STORAGE_SLOT,\n            RANDOMNESS,\n            MockNote::get_id(),\n            BoundedVec::from_array(note_and_data.note.pack()),\n        );\n\n        assert_eq(discovered_notes.len(), 1);\n        let discovered_note = discovered_notes.get(0);\n\n        assert_eq(discovered_note.note_nonce, note_and_data.note_nonce);\n        assert_eq(discovered_note.note_hash, note_and_data.note_hash);\n        assert_eq(discovered_note.inner_nullifier, note_and_data.inner_nullifier);\n    }\n\n    #[test]\n    unconstrained fn single_note_nonce_with_index_past_note_hashes_in_tx() {\n        let mut unique_note_hashes_in_tx = BoundedVec::from_array([\n            random(), random(), random(), random(), random(), random(), random(),\n        ]);\n\n        // The nonce is computed with an index that does not exist in the tx\n        let note_index_in_tx = unique_note_hashes_in_tx.len() + 5;\n        let note_and_data = construct_note(VALUE, note_index_in_tx);\n\n        // The note is inserted at an arbitrary index - its true index is out of the array's bounds\n        unique_note_hashes_in_tx.set(2, note_and_data.unique_note_hash);\n\n        let discovered_notes = attempt_note_nonce_discovery(\n            unique_note_hashes_in_tx,\n            FIRST_NULLIFIER_IN_TX,\n            compute_note_hash,\n            compute_note_nullifier,\n            CONTRACT_ADDRESS,\n            OWNER,\n            STORAGE_SLOT,\n            RANDOMNESS,\n            MockNote::get_id(),\n            BoundedVec::from_array(note_and_data.note.pack()),\n        );\n\n        assert_eq(discovered_notes.len(), 1);\n        let discovered_note = discovered_notes.get(0);\n\n        assert_eq(discovered_note.note_nonce, note_and_data.note_nonce);\n        assert_eq(discovered_note.note_hash, note_and_data.note_hash);\n        assert_eq(discovered_note.inner_nullifier, note_and_data.inner_nullifier);\n    }\n\n    #[test(should_fail_with = \"identical note hashes for a transaction\")]\n    unconstrained fn duplicate_unique_note_hashes() {\n        let note_index_in_tx = 2;\n        let note_and_data = construct_note(VALUE, note_index_in_tx);\n\n        let mut unique_note_hashes_in_tx = BoundedVec::from_array([\n            random(), random(), random(), random(), random(), random(), random(),\n        ]);\n\n        // The same unique note hash is present in two indices in the array, which is not allowed. Note that we don't\n        // test all note hashes for uniqueness, only those that we actually find.\n        unique_note_hashes_in_tx.set(note_index_in_tx, note_and_data.unique_note_hash);\n        unique_note_hashes_in_tx.set(note_index_in_tx + 1, note_and_data.unique_note_hash);\n\n        let _ = attempt_note_nonce_discovery(\n            unique_note_hashes_in_tx,\n            FIRST_NULLIFIER_IN_TX,\n            compute_note_hash,\n            compute_note_nullifier,\n            CONTRACT_ADDRESS,\n            OWNER,\n            STORAGE_SLOT,\n            RANDOMNESS,\n            MockNote::get_id(),\n            BoundedVec::from_array(note_and_data.note.pack()),\n        );\n    }\n}\n"
        },
        "145": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/discovery/partial_notes.nr",
            "source": "use crate::{\n    capsules::CapsuleArray,\n    messages::{\n        discovery::{ComputeNoteHash, ComputeNoteNullifier, nonce_discovery::attempt_note_nonce_discovery},\n        encoding::MAX_MESSAGE_CONTENT_LEN,\n        logs::partial_note::{decode_partial_note_private_message, MAX_PARTIAL_NOTE_PRIVATE_PACKED_LEN},\n        processing::{\n            enqueue_note_for_validation,\n            get_pending_partial_notes_completion_logs,\n            log_retrieval_response::{LogRetrievalResponse, MAX_LOG_CONTENT_LEN},\n        },\n    },\n    utils::array,\n};\n\nuse crate::logging::aztecnr_debug_log_format;\nuse crate::protocol::{address::AztecAddress, hash::sha256_to_field, traits::{Deserialize, Serialize}};\n\n/// The slot in the PXE capsules where we store a `CapsuleArray` of `DeliveredPendingPartialNote`.\npub(crate) global DELIVERED_PENDING_PARTIAL_NOTE_ARRAY_LENGTH_CAPSULES_SLOT: Field = sha256_to_field(\n    \"AZTEC_NR::DELIVERED_PENDING_PARTIAL_NOTE_ARRAY_LENGTH_CAPSULES_SLOT\".as_bytes(),\n);\n\n/// A partial note that was delivered but is still pending completion. Contains the information necessary to find the\n/// log that will complete it and lead to a note being discovered and delivered.\n#[derive(Serialize, Deserialize)]\npub(crate) struct DeliveredPendingPartialNote {\n    pub(crate) owner: AztecAddress,\n    pub(crate) randomness: Field,\n    pub(crate) note_completion_log_tag: Field,\n    pub(crate) note_type_id: Field,\n    pub(crate) packed_private_note_content: BoundedVec<Field, MAX_PARTIAL_NOTE_PRIVATE_PACKED_LEN>,\n}\n\npub(crate) unconstrained fn process_partial_note_private_msg(\n    contract_address: AztecAddress,\n    msg_metadata: u64,\n    msg_content: BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>,\n    tx_hash: Field,\n    scope: AztecAddress,\n) {\n    let decoded = decode_partial_note_private_message(msg_metadata, msg_content);\n\n    if decoded.is_some() {\n        // We store the information of the partial note we found in a persistent capsule in PXE, so that we can later\n        // search for the public log that will complete it.\n        let (owner, randomness, note_completion_log_tag, note_type_id, packed_private_note_content) = decoded.unwrap();\n\n        let pending = DeliveredPendingPartialNote {\n            owner,\n            randomness,\n            note_completion_log_tag,\n            note_type_id,\n            packed_private_note_content,\n        };\n\n        CapsuleArray::at(\n            contract_address,\n            DELIVERED_PENDING_PARTIAL_NOTE_ARRAY_LENGTH_CAPSULES_SLOT,\n            scope,\n        )\n            .push(pending);\n    } else {\n        aztecnr_debug_log_format!(\n            \"Could not decode partial note private message from tx {0}, ignoring\",\n        )(\n            [tx_hash],\n        );\n    }\n}\n\n/// Searches for logs that would result in the completion of pending partial notes, ultimately resulting in the notes\n/// being delivered to PXE if completed.\npub(crate) unconstrained fn fetch_and_process_partial_note_completion_logs(\n    contract_address: AztecAddress,\n    compute_note_hash: ComputeNoteHash,\n    compute_note_nullifier: ComputeNoteNullifier,\n    scope: AztecAddress,\n) {\n    let pending_partial_notes = CapsuleArray::at(\n        contract_address,\n        DELIVERED_PENDING_PARTIAL_NOTE_ARRAY_LENGTH_CAPSULES_SLOT,\n        scope,\n    );\n\n    aztecnr_debug_log_format!(\"{} pending partial notes\")([pending_partial_notes.len() as Field]);\n\n    // Each of the pending partial notes might get completed by a log containing its public values. For performance\n    // reasons, we fetch all of these logs concurrently and then process them one by one, minimizing the amount of time\n    // waiting for the node roundtrip.\n    let maybe_completion_logs =\n        get_pending_partial_notes_completion_logs(contract_address, pending_partial_notes, scope);\n\n    // Each entry in the maybe completion logs array corresponds to the entry in the pending partial notes array at the\n    // same index. This means we can use the same index as we iterate through the responses to get both the partial\n    // note and the log that might complete it.\n    assert_eq(maybe_completion_logs.len(), pending_partial_notes.len());\n\n    maybe_completion_logs.for_each(|i, maybe_log: Option<LogRetrievalResponse>| {\n        // We clear the completion logs as we read them so that the array is empty by the time we next query it.\n        // TODO(#14943): use volatile arrays to avoid having to manually clear this.\n        maybe_completion_logs.remove(i);\n\n        let pending_partial_note = pending_partial_notes.get(i);\n\n        if maybe_log.is_none() {\n            aztecnr_debug_log_format!(\"Found no completion logs for partial note with tag {}\")(\n                [pending_partial_note.note_completion_log_tag],\n            );\n\n            // Note that we're not removing the pending partial note from the capsule array, so we will continue\n            // searching for this tagged log when performing message discovery in the future until we either find it or\n            // the entry is somehow removed from the array.\n        } else {\n            aztecnr_debug_log_format!(\"Completion log found for partial note with tag {}\")([\n                pending_partial_note.note_completion_log_tag,\n            ]);\n            let log = maybe_log.unwrap();\n\n            // The first field in the completion log payload is the storage slot, followed by the public note\n            // content fields.\n            let storage_slot = log.log_payload.get(0);\n            let public_note_content: BoundedVec<Field, MAX_LOG_CONTENT_LEN - 1> = array::subbvec(log.log_payload, 1);\n\n            // Public fields are assumed to all be placed at the end of the packed representation, so we combine\n            // the private and public packed fields (i.e. the contents of the private message and public log\n            // plaintext) to get the complete packed content.\n            let complete_packed_note = array::append(\n                pending_partial_note.packed_private_note_content,\n                public_note_content,\n            );\n\n            let discovered_notes = attempt_note_nonce_discovery(\n                log.unique_note_hashes_in_tx,\n                log.first_nullifier_in_tx,\n                compute_note_hash,\n                compute_note_nullifier,\n                contract_address,\n                pending_partial_note.owner,\n                storage_slot,\n                pending_partial_note.randomness,\n                pending_partial_note.note_type_id,\n                complete_packed_note,\n            );\n\n            // TODO(#11627): is there anything reasonable we can do if we get a log but it doesn't result in a note\n            // being found?\n            if discovered_notes.len() == 0 {\n                panic(\n                    f\"A partial note's completion log did not result in any notes being found - this should never happen\",\n                );\n            }\n\n            aztecnr_debug_log_format!(\"Discovered {0} notes for partial note with tag {1}\")([\n                discovered_notes.len() as Field,\n                pending_partial_note.note_completion_log_tag,\n            ]);\n\n            discovered_notes.for_each(|discovered_note| {\n                enqueue_note_for_validation(\n                    contract_address,\n                    pending_partial_note.owner,\n                    storage_slot,\n                    pending_partial_note.randomness,\n                    discovered_note.note_nonce,\n                    complete_packed_note,\n                    discovered_note.note_hash,\n                    discovered_note.inner_nullifier,\n                    log.tx_hash,\n                    scope,\n                );\n            });\n\n            // Because there is only a single log for a given tag, once we've processed the tagged log then we simply\n            // delete the pending work entry, regardless of whether it was actually completed or not.\n            pending_partial_notes.remove(i);\n        }\n    });\n}\n"
        },
        "146": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/discovery/private_events.nr",
            "source": "use crate::{\n    event::event_interface::compute_private_serialized_event_commitment,\n    messages::{\n        encoding::MAX_MESSAGE_CONTENT_LEN, logs::event::decode_private_event_message,\n        processing::enqueue_event_for_validation,\n    },\n};\nuse crate::protocol::{address::AztecAddress, logging::debug_log_format, traits::ToField};\n\npub(crate) unconstrained fn process_private_event_msg(\n    contract_address: AztecAddress,\n    msg_metadata: u64,\n    msg_content: BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>,\n    tx_hash: Field,\n    recipient: AztecAddress,\n) {\n    let decoded = decode_private_event_message(msg_metadata, msg_content);\n\n    if decoded.is_some() {\n        let (event_type_id, randomness, serialized_event) = decoded.unwrap();\n\n        let event_commitment =\n            compute_private_serialized_event_commitment(serialized_event, randomness, event_type_id.to_field());\n\n        enqueue_event_for_validation(\n            contract_address,\n            event_type_id,\n            randomness,\n            serialized_event,\n            event_commitment,\n            tx_hash,\n            recipient,\n        );\n    } else {\n        debug_log_format(\n            \"Could not decode private event message from tx {0}, ignoring\",\n            [tx_hash],\n        );\n    }\n}\n"
        },
        "147": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/discovery/private_notes.nr",
            "source": "use crate::{\n    logging::{aztecnr_debug_log_format, aztecnr_warn_log_format},\n    messages::{\n        discovery::{ComputeNoteHash, ComputeNoteNullifier, nonce_discovery::attempt_note_nonce_discovery},\n        encoding::MAX_MESSAGE_CONTENT_LEN,\n        logs::note::{decode_private_note_message, MAX_NOTE_PACKED_LEN},\n        processing::enqueue_note_for_validation,\n    },\n    protocol::{address::AztecAddress, constants::MAX_NOTE_HASHES_PER_TX, traits::ToField},\n};\n\npub(crate) unconstrained fn process_private_note_msg(\n    contract_address: AztecAddress,\n    tx_hash: Field,\n    unique_note_hashes_in_tx: BoundedVec<Field, MAX_NOTE_HASHES_PER_TX>,\n    first_nullifier_in_tx: Field,\n    compute_note_hash: ComputeNoteHash,\n    compute_note_nullifier: ComputeNoteNullifier,\n    msg_metadata: u64,\n    msg_content: BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>,\n    recipient: AztecAddress,\n) {\n    let decoded = decode_private_note_message(msg_metadata, msg_content);\n\n    if decoded.is_some() {\n        let (note_type_id, owner, storage_slot, randomness, packed_note) = decoded.unwrap();\n\n        attempt_note_discovery(\n            contract_address,\n            tx_hash,\n            unique_note_hashes_in_tx,\n            first_nullifier_in_tx,\n            compute_note_hash,\n            compute_note_nullifier,\n            owner,\n            storage_slot,\n            randomness,\n            note_type_id,\n            packed_note,\n            recipient,\n        );\n    } else {\n        aztecnr_debug_log_format!(\n            \"Could not decode private note message from tx {0}, ignoring\",\n        )(\n            [tx_hash],\n        );\n    }\n}\n\n/// Attempts discovery of a note given information about its contents and the transaction in which it is suspected the\n/// note was created.\npub unconstrained fn attempt_note_discovery(\n    contract_address: AztecAddress,\n    tx_hash: Field,\n    unique_note_hashes_in_tx: BoundedVec<Field, MAX_NOTE_HASHES_PER_TX>,\n    first_nullifier_in_tx: Field,\n    compute_note_hash: ComputeNoteHash,\n    compute_note_nullifier: ComputeNoteNullifier,\n    owner: AztecAddress,\n    storage_slot: Field,\n    randomness: Field,\n    note_type_id: Field,\n    packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n    recipient: AztecAddress,\n) {\n    let discovered_notes = attempt_note_nonce_discovery(\n        unique_note_hashes_in_tx,\n        first_nullifier_in_tx,\n        compute_note_hash,\n        compute_note_nullifier,\n        contract_address,\n        owner,\n        storage_slot,\n        randomness,\n        note_type_id,\n        packed_note,\n    );\n\n    if discovered_notes.len() == 0 {\n        // A private note message that results in no discovered notes means none of the computed note hashes matched\n        // any unique note hash in the transaction. This could indicate a malformed or malicious message (e.g. a sender\n        // providing bogus note content).\n        aztecnr_warn_log_format!(\n            \"Discarding private note message from tx {0} for contract {1}: no matching note hash found in the tx\",\n        )(\n            [tx_hash, contract_address.to_field()],\n        );\n    } else {\n        aztecnr_debug_log_format!(\n            \"Discovered {0} notes from a private message for contract {1}\",\n        )(\n            [discovered_notes.len() as Field, contract_address.to_field()],\n        );\n    }\n\n    discovered_notes.for_each(|discovered_note| {\n        enqueue_note_for_validation(\n            contract_address,\n            owner,\n            storage_slot,\n            randomness,\n            discovered_note.note_nonce,\n            packed_note,\n            discovered_note.note_hash,\n            discovered_note.inner_nullifier,\n            tx_hash,\n            recipient,\n        );\n    });\n}\n"
        },
        "148": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/discovery/process_message.nr",
            "source": "use crate::messages::{\n    discovery::{\n        ComputeNoteHash, ComputeNoteNullifier, CustomMessageHandler, partial_notes::process_partial_note_private_msg,\n        private_events::process_private_event_msg, private_notes::process_private_note_msg,\n    },\n    encoding::{decode_message, MESSAGE_CIPHERTEXT_LEN, MESSAGE_PLAINTEXT_LEN},\n    encryption::{aes128::AES128, message_encryption::MessageEncryption},\n    msg_type::{\n        MIN_CUSTOM_MSG_TYPE_ID, PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID, PRIVATE_EVENT_MSG_TYPE_ID, PRIVATE_NOTE_MSG_TYPE_ID,\n    },\n    processing::MessageContext,\n};\n\nuse crate::logging::{aztecnr_debug_log, aztecnr_warn_log_format};\nuse crate::protocol::address::AztecAddress;\n\n/// Processes a message that can contain notes, partial notes, or events.\n///\n/// Notes result in nonce discovery being performed prior to delivery, which requires knowledge of the transaction hash\n/// in which the notes would've been created (typically the same transaction in which the log was emitted), along with\n/// the list of unique note hashes in said transaction and the `compute_note_hash` and `compute_note_nullifier`\n/// functions. Once discovered, the notes are enqueued for validation.\n///\n/// Partial notes result in a pending partial note entry being stored in a PXE capsule, which will later be retrieved\n/// to search for the note's completion public log.\n///\n/// Events are processed by computing an event commitment from the serialized event data and its randomness field, then\n/// enqueueing the event data and commitment for validation.\npub unconstrained fn process_message_ciphertext<CustomMessageHandlerEnv>(\n    contract_address: AztecAddress,\n    compute_note_hash: ComputeNoteHash,\n    compute_note_nullifier: ComputeNoteNullifier,\n    process_custom_message: Option<CustomMessageHandler<CustomMessageHandlerEnv>>,\n    message_ciphertext: BoundedVec<Field, MESSAGE_CIPHERTEXT_LEN>,\n    message_context: MessageContext,\n    recipient: AztecAddress,\n) {\n    let message_plaintext_option = AES128::decrypt(message_ciphertext, recipient, contract_address);\n\n    if message_plaintext_option.is_some() {\n        process_message_plaintext(\n            contract_address,\n            compute_note_hash,\n            compute_note_nullifier,\n            process_custom_message,\n            message_plaintext_option.unwrap(),\n            message_context,\n            recipient,\n        );\n    } else {\n        aztecnr_warn_log_format!(\"Could not decrypt message ciphertext from tx {0}, ignoring\")([message_context.tx_hash]);\n    }\n}\n\npub(crate) unconstrained fn process_message_plaintext<CustomMessageHandlerEnv>(\n    contract_address: AztecAddress,\n    compute_note_hash: ComputeNoteHash,\n    compute_note_nullifier: ComputeNoteNullifier,\n    process_custom_message: Option<CustomMessageHandler<CustomMessageHandlerEnv>>,\n    message_plaintext: BoundedVec<Field, MESSAGE_PLAINTEXT_LEN>,\n    message_context: MessageContext,\n    recipient: AztecAddress,\n) {\n    // The first thing to do after decrypting the message is to determine what type of message we're processing. We\n    // have 3 message types: private notes, partial notes and events.\n\n    // We decode the message to obtain the message type id, metadata and content.\n    let decoded = decode_message(message_plaintext);\n\n    if decoded.is_some() {\n        let (msg_type_id, msg_metadata, msg_content) = decoded.unwrap();\n\n        if msg_type_id == PRIVATE_NOTE_MSG_TYPE_ID {\n            aztecnr_debug_log!(\"Processing private note msg\");\n\n            process_private_note_msg(\n                contract_address,\n                message_context.tx_hash,\n                message_context.unique_note_hashes_in_tx,\n                message_context.first_nullifier_in_tx,\n                compute_note_hash,\n                compute_note_nullifier,\n                msg_metadata,\n                msg_content,\n                recipient,\n            );\n        } else if msg_type_id == PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID {\n            aztecnr_debug_log!(\"Processing partial note private msg\");\n\n            process_partial_note_private_msg(\n                contract_address,\n                msg_metadata,\n                msg_content,\n                message_context.tx_hash,\n                recipient,\n            );\n        } else if msg_type_id == PRIVATE_EVENT_MSG_TYPE_ID {\n            aztecnr_debug_log!(\"Processing private event msg\");\n\n            process_private_event_msg(\n                contract_address,\n                msg_metadata,\n                msg_content,\n                message_context.tx_hash,\n                recipient,\n            );\n        } else if msg_type_id < MIN_CUSTOM_MSG_TYPE_ID {\n            // The message type ID falls in the range reserved for aztec.nr built-in types but wasn't matched above.\n            // This most likely means the message is malformed or a custom message was incorrectly assigned a reserved\n            // ID. Custom message types must use IDs allocated via `custom_msg_type_id`.\n            aztecnr_warn_log_format!(\n                \"Message type ID {0} is in the reserved range but is not recognized, ignoring. See https://docs.aztec.network/errors/3\",\n            )(\n                [msg_type_id as Field],\n            );\n        } else if process_custom_message.is_some() {\n            process_custom_message.unwrap()(\n                contract_address,\n                msg_type_id,\n                msg_metadata,\n                msg_content,\n                message_context,\n                recipient,\n            );\n        } else {\n            // A custom message was received but no handler is configured. This likely means the contract emits custom\n            // messages but forgot to register a handler via `AztecConfig::custom_message_handler`.\n            aztecnr_warn_log_format!(\n                \"Received custom message with type id {0} but no handler is configured, ignoring. See https://docs.aztec.network/errors/2\",\n            )(\n                [msg_type_id as Field],\n            );\n        }\n    } else {\n        aztecnr_warn_log_format!(\"Could not decode message plaintext from tx {0}, ignoring\")([message_context.tx_hash]);\n    }\n}\n"
        },
        "149": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/encoding.nr",
            "source": "// TODO(#12750): don't make these values assume we're using AES.\nuse crate::protocol::constants::PRIVATE_LOG_CIPHERTEXT_LEN;\nuse crate::utils::array;\n\n// We reassign to the constant here to communicate the distinction between a log and a message. In Aztec.nr, unlike in\n// protocol circuits, we have a concept of a message that can be emitted either as a private log or as an offchain\n// message. Message is a piece of data that is to be eventually delivered to a contract via the `process_message(...)`\n// utility function function that is injected by the #[aztec] macro. Note: PRIVATE_LOG_CIPHERTEXT_LEN is an amount of\n// fields, so MESSAGE_CIPHERTEXT_LEN is the size of the message in fields.\npub global MESSAGE_CIPHERTEXT_LEN: u32 = PRIVATE_LOG_CIPHERTEXT_LEN;\n\n// TODO(#12750): The global variables below should not be here as they are AES128 specific.\n// The header plaintext is 2 bytes (ciphertext length), padded to the 16-byte AES block size by PKCS#7.\npub(crate) global HEADER_CIPHERTEXT_SIZE_IN_BYTES: u32 = 16;\n// AES PKCS#7 always adds at least one byte of padding. Since each plaintext field is 32 bytes (a multiple of the\n// 16-byte AES block size), a full 16-byte padding block is always appended.\npub(crate) global AES128_PKCS7_EXPANSION_IN_BYTES: u32 = 16;\n\npub global EPH_PK_X_SIZE_IN_FIELDS: u32 = 1;\n\n// (15 - 1) * 31 - 16 - 16 = 402. Note: We multiply by 31 because ciphertext bytes are stored in fields using\n// bytes_to_fields, which packs 31 bytes per field (since a Field is ~254 bits and can safely store 31 whole bytes).\npub(crate) global MESSAGE_PLAINTEXT_SIZE_IN_BYTES: u32 = (MESSAGE_CIPHERTEXT_LEN - EPH_PK_X_SIZE_IN_FIELDS) * 31\n    - HEADER_CIPHERTEXT_SIZE_IN_BYTES\n    - AES128_PKCS7_EXPANSION_IN_BYTES;\n// The plaintext bytes represent Field values that were originally serialized using fields_to_bytes, which converts\n// each Field to 32 bytes. To convert the plaintext bytes back to fields, we divide by 32. 402 / 32 = 12\npub global MESSAGE_PLAINTEXT_LEN: u32 = MESSAGE_PLAINTEXT_SIZE_IN_BYTES / 32;\n\npub global MESSAGE_EXPANDED_METADATA_LEN: u32 = 1;\n\n// The standard message layout is composed of:\n//  - an initial field called the 'expanded metadata'\n//  - an arbitrary number of fields following that called the 'message content'\n//\n// ```\n// message: [ msg_expanded_metadata, ...msg_content ]\n// ```\n//\n// The expanded metadata itself is interpreted as a u128, of which:\n//  - the upper 64 bits are the message type id\n//  - the lower 64 bits are called the 'message metadata'\n//\n// ```\n// msg_expanded_metadata: [  msg_type_id    |  msg_metadata  ]\n//                        <---  64 bits --->|<--- 64 bits --->\n// ```\n//\n// The meaning of the message metadata and message content depend on the value of the message type id. Note that there\n// is nothing special about the message metadata, it _can_ be considered part of the content. It just has a different\n// name to make it distinct from the message content given that it is not a full field.\n\n/// The maximum length of a message's content, i.e. not including the expanded message metadata.\npub global MAX_MESSAGE_CONTENT_LEN: u32 = MESSAGE_PLAINTEXT_LEN - MESSAGE_EXPANDED_METADATA_LEN;\n\n/// Encodes a message following aztec-nr's standard message encoding. This message can later be decoded with\n/// `decode_message` to retrieve the original values.\n///\n/// - The `msg_type` is an identifier that groups types of messages that are all processed the same way, e.g. private\n/// notes or events. Possible values are defined in `aztec::messages::msg_type`.\n/// - The `msg_metadata` and `msg_content` are the values stored in the message, whose meaning depends on the\n/// `msg_type`. The only special thing about `msg_metadata` that separates it from `msg_content` is that it is a u64\n/// instead of a full Field (due to details of how messages are encoded), allowing applications that can fit values\n/// into this smaller variable to achieve higher data efficiency.\npub fn encode_message<let N: u32>(\n    msg_type: u64,\n    msg_metadata: u64,\n    msg_content: [Field; N],\n) -> [Field; (N + MESSAGE_EXPANDED_METADATA_LEN)] {\n    std::static_assert(\n        msg_content.len() <= MAX_MESSAGE_CONTENT_LEN,\n        \"Invalid message content: it must have a length of at most MAX_MESSAGE_CONTENT_LEN\",\n    );\n\n    // If MESSAGE_EXPANDED_METADATA_LEN is changed, causing the assertion below to fail, then the destructuring of the\n    // message encoding below must be updated as well.\n    std::static_assert(\n        MESSAGE_EXPANDED_METADATA_LEN == 1,\n        \"unexpected value for MESSAGE_EXPANDED_METADATA_LEN\",\n    );\n    let mut message: [Field; (N + MESSAGE_EXPANDED_METADATA_LEN)] = std::mem::zeroed();\n\n    message[0] = to_expanded_metadata(msg_type, msg_metadata);\n    for i in 0..msg_content.len() {\n        message[MESSAGE_EXPANDED_METADATA_LEN + i] = msg_content[i];\n    }\n\n    message\n}\n\n/// Decodes a standard aztec-nr message, i.e. one created via `encode_message`, returning the original encoded values.\n///\n/// Returns `None` if the message is empty or has invalid (>128 bit) expanded metadata.\n///\n/// Note that `encode_message` returns a fixed size array while this function takes a `BoundedVec`: this is because\n/// prior to decoding the message type is unknown, and consequentially not known at compile time. If working with\n/// fixed-size messages, consider using `BoundedVec::from_array` to convert them.\npub unconstrained fn decode_message(\n    message: BoundedVec<Field, MESSAGE_PLAINTEXT_LEN>,\n) -> Option<(u64, u64, BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>)> {\n    Option::some(message)\n        .and_then(|message| {\n            // If MESSAGE_EXPANDED_METADATA_LEN is changed, causing the assertion below to fail, then the destructuring\n            // of the\n            // message encoding below must be updated as well.\n            std::static_assert(\n                MESSAGE_EXPANDED_METADATA_LEN == 1,\n                \"unexpected value for MESSAGE_EXPANDED_METADATA_LEN\",\n            );\n            if message.len() < MESSAGE_EXPANDED_METADATA_LEN {\n                Option::none()\n            } else {\n                Option::some(message.get(0))\n            }\n        })\n        .and_then(|msg_expanded_metadata| from_expanded_metadata(msg_expanded_metadata))\n        .map(|(msg_type_id, msg_metadata)| {\n            let msg_content = array::subbvec(message, MESSAGE_EXPANDED_METADATA_LEN);\n            (msg_type_id, msg_metadata, msg_content)\n        })\n}\n\nglobal U64_SHIFT_MULTIPLIER: Field = 2.pow_32(64);\n\nfn to_expanded_metadata(msg_type: u64, msg_metadata: u64) -> Field {\n    // We use multiplication instead of bit shifting operations to shift the type bits as bit shift operations are\n    // expensive in circuits.\n    let type_field: Field = (msg_type as Field) * U64_SHIFT_MULTIPLIER;\n    let msg_metadata_field = msg_metadata as Field;\n\n    type_field + msg_metadata_field\n}\n\nglobal TWO_POW_128: Field = 2.pow_32(128);\n\n/// Unpacks expanded metadata into (msg_type, msg_metadata). Returns `None` if `input >= 2^128`.\nfn from_expanded_metadata(input: Field) -> Option<(u64, u64)> {\n    if input.lt(TWO_POW_128) {\n        let msg_metadata = (input as u64);\n        let msg_type = ((input - (msg_metadata as Field)) / U64_SHIFT_MULTIPLIER) as u64;\n        // Use division instead of bit shift since bit shifts are expensive in circuits\n        Option::some((msg_type, msg_metadata))\n    } else {\n        Option::none()\n    }\n}\n\nmod tests {\n    use crate::utils::array::subarray::subarray;\n    use super::{\n        decode_message, encode_message, from_expanded_metadata, MAX_MESSAGE_CONTENT_LEN, to_expanded_metadata,\n        TWO_POW_128,\n    };\n\n    global U64_MAX: u64 = (2.pow_32(64) - 1) as u64;\n    global U128_MAX: Field = (2.pow_32(128) - 1);\n\n    #[test]\n    unconstrained fn encode_decode_empty_message(msg_type: u64, msg_metadata: u64) {\n        let encoded = encode_message(msg_type, msg_metadata, []);\n        let (decoded_msg_type, decoded_msg_metadata, decoded_msg_content) =\n            decode_message(BoundedVec::from_array(encoded)).unwrap();\n\n        assert_eq(decoded_msg_type, msg_type);\n        assert_eq(decoded_msg_metadata, msg_metadata);\n        assert_eq(decoded_msg_content.len(), 0);\n    }\n\n    #[test]\n    unconstrained fn encode_decode_short_message(\n        msg_type: u64,\n        msg_metadata: u64,\n        msg_content: [Field; MAX_MESSAGE_CONTENT_LEN / 2],\n    ) {\n        let encoded = encode_message(msg_type, msg_metadata, msg_content);\n        let (decoded_msg_type, decoded_msg_metadata, decoded_msg_content) =\n            decode_message(BoundedVec::from_array(encoded)).unwrap();\n\n        assert_eq(decoded_msg_type, msg_type);\n        assert_eq(decoded_msg_metadata, msg_metadata);\n        assert_eq(decoded_msg_content.len(), msg_content.len());\n        assert_eq(subarray(decoded_msg_content.storage(), 0), msg_content);\n    }\n\n    #[test]\n    unconstrained fn encode_decode_full_message(\n        msg_type: u64,\n        msg_metadata: u64,\n        msg_content: [Field; MAX_MESSAGE_CONTENT_LEN],\n    ) {\n        let encoded = encode_message(msg_type, msg_metadata, msg_content);\n        let (decoded_msg_type, decoded_msg_metadata, decoded_msg_content) =\n            decode_message(BoundedVec::from_array(encoded)).unwrap();\n\n        assert_eq(decoded_msg_type, msg_type);\n        assert_eq(decoded_msg_metadata, msg_metadata);\n        assert_eq(decoded_msg_content.len(), msg_content.len());\n        assert_eq(subarray(decoded_msg_content.storage(), 0), msg_content);\n    }\n\n    #[test]\n    unconstrained fn to_expanded_metadata_packing() {\n        // Test case 1: All bits set\n        let packed = to_expanded_metadata(U64_MAX, U64_MAX);\n        let (msg_type, msg_metadata) = from_expanded_metadata(packed).unwrap();\n        assert_eq(msg_type, U64_MAX);\n        assert_eq(msg_metadata, U64_MAX);\n\n        // Test case 2: Only log type bits set\n        let packed = to_expanded_metadata(U64_MAX, 0);\n        let (msg_type, msg_metadata) = from_expanded_metadata(packed).unwrap();\n        assert_eq(msg_type, U64_MAX);\n        assert_eq(msg_metadata, 0);\n\n        // Test case 3: Only msg_metadata bits set\n        let packed = to_expanded_metadata(0, U64_MAX);\n        let (msg_type, msg_metadata) = from_expanded_metadata(packed).unwrap();\n        assert_eq(msg_type, 0);\n        assert_eq(msg_metadata, U64_MAX);\n\n        // Test case 4: No bits set\n        let packed = to_expanded_metadata(0, 0);\n        let (msg_type, msg_metadata) = from_expanded_metadata(packed).unwrap();\n        assert_eq(msg_type, 0);\n        assert_eq(msg_metadata, 0);\n    }\n\n    #[test]\n    unconstrained fn from_expanded_metadata_packing() {\n        // Test case 1: All bits set\n        let input = U128_MAX as Field;\n        let (msg_type, msg_metadata) = from_expanded_metadata(input).unwrap();\n        assert_eq(msg_type, U64_MAX);\n        assert_eq(msg_metadata, U64_MAX);\n\n        // Test case 2: Only log type bits set\n        let input = (U128_MAX - U64_MAX as Field);\n        let (msg_type, msg_metadata) = from_expanded_metadata(input).unwrap();\n        assert_eq(msg_type, U64_MAX);\n        assert_eq(msg_metadata, 0);\n\n        // Test case 3: Only msg_metadata bits set\n        let input = U64_MAX as Field;\n        let (msg_type, msg_metadata) = from_expanded_metadata(input).unwrap();\n        assert_eq(msg_type, 0);\n        assert_eq(msg_metadata, U64_MAX);\n\n        // Test case 4: No bits set\n        let input = 0;\n        let (msg_type, msg_metadata) = from_expanded_metadata(input).unwrap();\n        assert_eq(msg_type, 0);\n        assert_eq(msg_metadata, 0);\n    }\n\n    #[test]\n    unconstrained fn to_from_expanded_metadata(original_msg_type: u64, original_msg_metadata: u64) {\n        let packed = to_expanded_metadata(original_msg_type, original_msg_metadata);\n        let (unpacked_msg_type, unpacked_msg_metadata) = from_expanded_metadata(packed).unwrap();\n\n        assert_eq(original_msg_type, unpacked_msg_type);\n        assert_eq(original_msg_metadata, unpacked_msg_metadata);\n    }\n\n    #[test]\n    unconstrained fn encode_decode_max_size_message() {\n        let msg_type_id: u64 = 42;\n        let msg_metadata: u64 = 99;\n        let mut msg_content = [0; MAX_MESSAGE_CONTENT_LEN];\n        for i in 0..MAX_MESSAGE_CONTENT_LEN {\n            msg_content[i] = i as Field;\n        }\n\n        let encoded = encode_message(msg_type_id, msg_metadata, msg_content);\n        let (decoded_type_id, decoded_metadata, decoded_content) =\n            decode_message(BoundedVec::from_array(encoded)).unwrap();\n\n        assert_eq(decoded_type_id, msg_type_id);\n        assert_eq(decoded_metadata, msg_metadata);\n        assert_eq(decoded_content, BoundedVec::from_array(msg_content));\n    }\n\n    #[test(should_fail_with = \"Invalid message content: it must have a length of at most MAX_MESSAGE_CONTENT_LEN\")]\n    fn encode_oversized_message_fails() {\n        let msg_content = [0; MAX_MESSAGE_CONTENT_LEN + 1];\n        let _ = encode_message(0, 0, msg_content);\n    }\n\n    #[test]\n    unconstrained fn decode_empty_message_returns_none() {\n        assert(decode_message(BoundedVec::new()).is_none());\n    }\n\n    #[test]\n    unconstrained fn decode_message_with_oversized_metadata_returns_none() {\n        let message = BoundedVec::from_array([TWO_POW_128]);\n        assert(decode_message(message).is_none());\n    }\n}\n"
        },
        "150": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/encryption/aes128.nr",
            "source": "use crate::protocol::{address::AztecAddress, public_keys::AddressPoint, traits::ToField};\n\nuse crate::{\n    keys::{\n        ecdh_shared_secret::{\n            compute_app_siloed_shared_secret, derive_ecdh_shared_secret, derive_shared_secret_field_mask,\n            derive_shared_secret_subkey,\n        },\n        ephemeral::generate_positive_ephemeral_key_pair,\n    },\n    logging::aztecnr_warn_log_format,\n    messages::{\n        encoding::{\n            EPH_PK_X_SIZE_IN_FIELDS, HEADER_CIPHERTEXT_SIZE_IN_BYTES, MESSAGE_CIPHERTEXT_LEN, MESSAGE_PLAINTEXT_LEN,\n            MESSAGE_PLAINTEXT_SIZE_IN_BYTES,\n        },\n        encryption::message_encryption::MessageEncryption,\n        logs::arithmetic_generics_utils::{\n            get_arr_of_size__message_bytes__from_PT, get_arr_of_size__message_bytes_padding__from_PT,\n        },\n    },\n    oracle::{aes128_decrypt::try_aes128_decrypt, random::random, shared_secret::get_shared_secret},\n    utils::{\n        array,\n        conversion::{\n            bytes_to_fields::{bytes_from_fields, bytes_to_fields},\n            fields_to_bytes::{fields_to_bytes, try_fields_from_bytes},\n        },\n        point::point_from_x_coord_and_sign,\n    },\n};\n\nuse std::aes128::aes128_encrypt;\n\n/// Computes N close-to-uniformly-random 256 bits from a given app-siloed shared secret.\n///\n/// NEVER re-use the same iv and sym_key. DO NOT call this function more than once with the same s_app.\n///\n/// This function is only known to be safe if s_app is derived from combining a random ephemeral key with an\n/// address point and a contract address. See big comment within the body of the function.\nfn extract_many_close_to_uniformly_random_256_bits_using_poseidon2<let N: u32>(s_app: Field) -> [[u8; 32]; N] {\n    /*\n     * Unsafe because of https://eprint.iacr.org/2010/264.pdf Page 13, Lemma 2 (and the two paragraphs below it).\n    *\n    * If you call this function, you need to be careful and aware of how the arg `s_app` has been derived.\n    *\n    * The paper says that the way you derive aes keys and IVs should be fine with poseidon2 (modelled as a RO),\n    * as long as you _don't_ use Poseidon2 as a PRG to generate the two exponents x & y which multiply to the\n    * shared secret S:\n    *\n    * S = [x*y]*G.\n    *\n    * (Otherwise, you would have to \"key\" poseidon2, i.e. generate a uniformly string K which can be public and\n    * compute Hash(x) as poseidon(K,x)).\n    * In that lemma, k would be 2*254=508, and m would be the number of points on the grumpkin curve (which is\n    * close to r according to the Hasse bound).\n    *\n    * Our shared secret S is [esk * address_sk] * G, and the question is: Can we compute hash(S) using poseidon2\n    * instead of sha256?\n    *\n    * Well, esk is random and not generated with poseidon2, so that's good.\n    * What about address_sk?\n    * Well, address_sk = poseidon2(stuff) + ivsk, so there was some discussion about whether address_sk is\n    * independent of poseidon2. Given that ivsk is random and independent of poseidon2, the address_sk is also\n    * independent of poseidon2.\n    *\n    * Tl;dr: we believe it's safe to hash S = [esk * address_sk] * G using poseidon2, in order to derive a\n    * symmetric key.\n    *\n    * If you're calling this function for a differently-derived `s_app`, be careful.\n    */\n    \n\n    /* The output of this function needs to be 32 random bytes.\n     * A single field won't give us 32 bytes of entropy. So we compute two \"random\" fields, by poseidon-hashing\n    * with two different indices. We then extract the last 16 (big endian) bytes of each \"random\" field.\n    * Note: we use to_be_bytes because it's slightly more efficient. But we have to be careful not to take bytes\n    * from the \"big end\", because the \"big\" byte is not uniformly random over the byte: it only has < 6 bits of\n    * randomness, because it's the big end of a 254-bit field element.\n    */\n\n    let mut all_bytes: [[u8; 32]; N] = std::mem::zeroed();\n    std::static_assert(N < 256, \"N too large\");\n    for k in 0..N {\n        let rand1: Field = derive_shared_secret_subkey(s_app, 2 * k);\n        let rand2: Field = derive_shared_secret_subkey(s_app, 2 * k + 1);\n\n        let rand1_bytes: [u8; 32] = rand1.to_be_bytes();\n        let rand2_bytes: [u8; 32] = rand2.to_be_bytes();\n\n        let mut bytes: [u8; 32] = [0; 32];\n        for i in 0..16 {\n            // We take bytes from the \"little end\" of the be-bytes arrays:\n            let j = 32 - i - 1;\n            bytes[i] = rand1_bytes[j];\n            bytes[16 + i] = rand2_bytes[j];\n        }\n\n        all_bytes[k] = bytes;\n    }\n\n    all_bytes\n}\n\nfn derive_aes_symmetric_key_and_iv_from_uniformly_random_256_bits<let N: u32>(\n    many_random_256_bits: [[u8; 32]; N],\n) -> [([u8; 16], [u8; 16]); N] {\n    // Many (sym_key, iv) pairs:\n    let mut many_pairs: [([u8; 16], [u8; 16]); N] = std::mem::zeroed();\n    for k in 0..N {\n        let random_256_bits = many_random_256_bits[k];\n        let mut sym_key = [0; 16];\n        let mut iv = [0; 16];\n        for i in 0..16 {\n            sym_key[i] = random_256_bits[i];\n            iv[i] = random_256_bits[i + 16];\n        }\n        many_pairs[k] = (sym_key, iv);\n    }\n\n    many_pairs\n}\n\npub fn derive_aes_symmetric_key_and_iv_from_shared_secret<let N: u32>(s_app: Field) -> [([u8; 16], [u8; 16]); N] {\n    let many_random_256_bits: [[u8; 32]; N] = extract_many_close_to_uniformly_random_256_bits_using_poseidon2(s_app);\n\n    derive_aes_symmetric_key_and_iv_from_uniformly_random_256_bits(many_random_256_bits)\n}\n\npub struct AES128 {}\n\nimpl MessageEncryption for AES128 {\n\n    /// AES128-CBC encryption for Aztec protocol messages.\n    ///\n    /// ## Overview\n    ///\n    /// The plaintext is an array of up to `MESSAGE_PLAINTEXT_LEN` (12) fields. The output is always exactly\n    /// `MESSAGE_CIPHERTEXT_LEN` (15) fields, regardless of plaintext size. All output fields except the\n    /// ephemeral public key are uniformly random `Field` values to any observer without knowledge of the\n    /// shared secret, making all encrypted messages indistinguishable by size or content.\n    ///\n    /// ## PKCS#7 Padding\n    ///\n    /// AES operates on 16-byte blocks, so the plaintext must be padded to a multiple of 16. PKCS#7 padding always\n    /// adds at least 1 byte (so the receiver can always detect and strip it), which means:\n    /// - 1 B plaintext  -> 15 B padding -> 16 B total\n    /// - 15 B plaintext ->  1 B padding -> 16 B total\n    /// - 16 B plaintext -> 16 B padding -> 32 B total (full extra block)\n    ///\n    /// In general: if the plaintext is already a multiple of 16, a full 16-byte padding block is appended.\n    ///\n    /// ## Encryption Steps\n    ///\n    /// **1. Body encryption.** The plaintext fields are serialized to bytes (32 bytes per field) and AES-128-CBC\n    /// encrypted. Since 32 is a multiple of 16, PKCS#7 always adds a full 16-byte padding block (see above):\n    ///\n    /// ```text\n    /// +---------------------------------------------+\n    /// |                   body ct                    |\n    /// |            PlaintextLen*32 + 16 B            |\n    /// +-------------------------------+--------------+\n    /// | encrypted plaintext fields    | PKCS#7 (16B) |\n    /// | (serialized at 32 B each)     |              |\n    /// +-------------------------------+--------------+\n    /// ```\n    ///\n    /// **2. Header encryption.** The byte length of `body_ct` is stored as a 2-byte big-endian integer. This 2-byte\n    /// header plaintext is then AES-encrypted; PKCS#7 pads the remaining 14 bytes to fill one 16-byte AES block,\n    /// producing a 16-byte header ciphertext:\n    ///\n    /// ```text\n    /// +---------------------------+\n    /// |         header ct         |\n    /// |            16 B           |\n    /// +--------+------------------+\n    /// | body ct| PKCS#7 (14B)     |\n    /// | length |                  |\n    /// | (2 B)  |                  |\n    /// +--------+------------------+\n    /// ```\n    ///\n    /// ## Wire Format\n    ///\n    /// Messages are transmitted as fields, not bytes. A field is ~254 bits and can safely store 31 whole bytes, so\n    /// we need to pack our byte data into 31-byte chunks. This packing drives the wire format.\n    ///\n    /// **Step 1 -- Assemble bytes.** The ciphertexts are laid out in a byte array, padded with zero bytes to a\n    /// multiple of 31 so it divides evenly into fields:\n    ///\n    /// ```text\n    /// +------------+-------------------------+---------+\n    /// | header ct  |        body ct          | byte pad|\n    /// |   16 B     | PlaintextLen*32 + 16 B  | (zeros) |\n    /// +------------+-------------------------+---------+\n    /// |<-------- padded to a multiple of 31 B -------->|\n    /// ```\n    ///\n    /// **Step 2 -- Pack and mask.** The byte array is split into 31-byte chunks, each stored in one field. A\n    /// Poseidon2-derived mask (see `derive_shared_secret_field_mask`) is added to each so that the resulting\n    /// fields appear as uniformly random `Field` values to any observer without knowledge of the shared secret,\n    /// hiding the fact that the underlying ciphertext consists of 128-bit AES blocks.\n    ///\n    /// **Step 3 -- Assemble ciphertext.** The ephemeral public key x-coordinate is prepended and random field padding\n    /// is appended to fill to 15 fields:\n    ///\n    /// ```text\n    /// +----------+-------------------------+-------------------+\n    /// | eph_pk.x |  masked message fields   | random field pad  |\n    /// |          | (packed 31 B per field)  |  (fills to 15)    |\n    /// +----------+-------------------------+-------------------+\n    /// |<---------- MESSAGE_CIPHERTEXT_LEN = 15 fields -------->|\n    /// ```\n    ///\n    /// ## Key Derivation\n    ///\n    /// The raw ECDH shared secret point is first app-siloed into a scalar `s_app` by hashing with the contract\n    /// address (see\n    /// [`compute_app_siloed_shared_secret`](crate::keys::ecdh_shared_secret::compute_app_siloed_shared_secret)).\n    /// Two (key, IV) pairs are then derived from `s_app` via indexed Poseidon2 hashing: one pair for the body\n    /// ciphertext and one for the header ciphertext.\n    fn encrypt<let PlaintextLen: u32>(\n        plaintext: [Field; PlaintextLen],\n        recipient: AztecAddress,\n        contract_address: AztecAddress,\n    ) -> [Field; MESSAGE_CIPHERTEXT_LEN] {\n        std::static_assert(\n            PlaintextLen <= MESSAGE_PLAINTEXT_LEN,\n            \"Plaintext length exceeds MESSAGE_PLAINTEXT_LEN\",\n        );\n\n        // AES 128 operates on bytes, not fields, so we need to convert the fields to bytes. (This process is then\n        // reversed when processing the message in `process_message_ciphertext`)\n        let plaintext_bytes = fields_to_bytes(plaintext);\n\n        // Derive ECDH shared secret with recipient using a fresh ephemeral keypair.\n        let (eph_sk, eph_pk) = generate_positive_ephemeral_key_pair();\n\n        let raw_shared_secret = derive_ecdh_shared_secret(\n            eph_sk,\n            recipient\n                .to_address_point()\n                .unwrap_or_else(|| {\n                    aztecnr_warn_log_format!(\n                        \"Attempted to encrypt message for an invalid recipient ({0})\",\n                    )(\n                        [recipient.to_field()],\n                    );\n\n                    // Safety: if the recipient is an invalid address, then it is not possible to encrypt a message for\n                    // them because we cannot establish a shared secret. This is never expected to occur during normal\n                    // operation. However, it is technically possible for us to receive an invalid address, and we must\n                    // therefore handle it. We could simply fail, but that'd introduce a potential security issue in\n                    // which an attacker forces a contract to encrypt a message for an invalid address, resulting in an\n                    // impossible transaction - this is sometimes called a 'king of the hill' attack. We choose instead\n                    // to not fail and encrypt the plaintext regardless using the shared secret that results from a\n                    // random valid address. The sender is free to choose this address and hence shared secret, but\n                    // this has no security implications as they already know not only the full plaintext but also the\n                    // ephemeral private key anyway.\n                    unsafe {\n                        random_address_point()\n                    }\n                })\n                .inner,\n        );\n\n        let s_app = compute_app_siloed_shared_secret(raw_shared_secret, contract_address);\n\n        // It is safe to derive AES keys from `s_app` using Poseidon2 because `s_app` was derived from an ECDH shared\n        // secret using an AztecAddress (the recipient). See the block comment in\n        // `extract_many_close_to_uniformly_random_256_bits_using_poseidon2` for more info.\n        let pairs = derive_aes_symmetric_key_and_iv_from_shared_secret::<2>(s_app);\n        let (body_sym_key, body_iv) = pairs[0];\n        let (header_sym_key, header_iv) = pairs[1];\n\n        let ciphertext_bytes = aes128_encrypt(plaintext_bytes, body_iv, body_sym_key);\n\n        // Each plaintext field is 32 bytes (a multiple of the 16-byte AES block\n        // size), so PKCS#7 always appends a full 16-byte padding block:\n        //   |ciphertext| = PlaintextLen*32 + 16 = 16 * (1 + PlaintextLen*32 / 16)\n        std::static_assert(\n            ciphertext_bytes.len() == 16 * (1 + (PlaintextLen * 32) / 16),\n            \"unexpected ciphertext length\",\n        );\n\n        // Encrypt a 2-byte header containing the body ciphertext length.\n        let header_plaintext = encode_header(ciphertext_bytes.len());\n\n        // Note: the aes128_encrypt builtin fn automatically appends bytes to the input, according to pkcs#7; hence why\n        // the output `header_ciphertext_bytes` is 16 bytes larger than the input in this case.\n        let header_ciphertext_bytes = aes128_encrypt(header_plaintext, header_iv, header_sym_key);\n        // Verify expected header ciphertext size at compile time.\n        std::static_assert(\n            header_ciphertext_bytes.len() == HEADER_CIPHERTEXT_SIZE_IN_BYTES,\n            \"unexpected ciphertext header length\",\n        );\n\n        // Assemble the message byte array:\n        //  [header_ct (16B)] [body_ct] [padding to mult of 31]\n        let message_bytes_padding_to_mult_31 = get_arr_of_size__message_bytes_padding__from_PT::<PlaintextLen * 32>();\n\n        let mut message_bytes = get_arr_of_size__message_bytes__from_PT::<PlaintextLen * 32>();\n\n        std::static_assert(\n            message_bytes.len() % 31 == 0,\n            \"Unexpected error: message_bytes.len() should be divisible by 31, by construction.\",\n        );\n\n        let mut offset = 0;\n        for i in 0..header_ciphertext_bytes.len() {\n            message_bytes[offset + i] = header_ciphertext_bytes[i];\n        }\n        offset += header_ciphertext_bytes.len();\n\n        for i in 0..ciphertext_bytes.len() {\n            message_bytes[offset + i] = ciphertext_bytes[i];\n        }\n        offset += ciphertext_bytes.len();\n\n        for i in 0..message_bytes_padding_to_mult_31.len() {\n            message_bytes[offset + i] = message_bytes_padding_to_mult_31[i];\n        }\n        offset += message_bytes_padding_to_mult_31.len();\n\n        // Ideally we would be able to have a static assert where we check that the offset would be such that we've\n        // written to the entire log_bytes array, but we cannot since Noir does not treat the offset as a comptime\n        // value (despite the values that it goes through being known at each stage). We instead check that the\n        // computation used to obtain the offset computes the expected value (which we _can_ do in a static check), and\n        // then add a cheap runtime check to also validate that the offset matches this.\n        std::static_assert(\n            header_ciphertext_bytes.len() + ciphertext_bytes.len() + message_bytes_padding_to_mult_31.len()\n                == message_bytes.len(),\n            \"unexpected message length\",\n        );\n        assert(offset == message_bytes.len(), \"unexpected encrypted message length\");\n\n        // Pack message bytes into fields (31 bytes per field) and prepend eph_pk.x.\n        let message_bytes_as_fields = bytes_to_fields(message_bytes);\n\n        let mut ciphertext: [Field; MESSAGE_CIPHERTEXT_LEN] = [0; MESSAGE_CIPHERTEXT_LEN];\n\n        ciphertext[0] = eph_pk.x;\n\n        // Mask each content field with a Poseidon2-derived value, so that they appear as uniformly random `Field`\n        // values\n        let mut offset = 1;\n        for i in 0..message_bytes_as_fields.len() {\n            let mask = derive_shared_secret_field_mask(s_app, i as u32);\n            ciphertext[offset + i] = message_bytes_as_fields[i] + mask;\n        }\n        offset += message_bytes_as_fields.len();\n\n        // Pad with random fields so that padding is indistinguishable from masked data fields.\n        for i in offset..MESSAGE_CIPHERTEXT_LEN {\n            // Safety: we assume that the sender wants for the message to be private - a malicious one could simply\n            // reveal its contents publicly. It is therefore fine to trust the sender to provide random padding.\n            ciphertext[i] = unsafe { random() };\n        }\n\n        ciphertext\n    }\n\n    unconstrained fn decrypt(\n        ciphertext: BoundedVec<Field, MESSAGE_CIPHERTEXT_LEN>,\n        recipient: AztecAddress,\n        contract_address: AztecAddress,\n    ) -> Option<BoundedVec<Field, MESSAGE_PLAINTEXT_LEN>> {\n        // Extract the ephemeral public key x-coordinate and masked fields, returning None for empty ciphertext.\n        if ciphertext.len() > 0 {\n            let masked_fields: BoundedVec<Field, MESSAGE_CIPHERTEXT_LEN - EPH_PK_X_SIZE_IN_FIELDS> =\n                array::subbvec(ciphertext, EPH_PK_X_SIZE_IN_FIELDS);\n            Option::some((ciphertext.get(0), masked_fields))\n        } else {\n            Option::none()\n        }\n            .and_then(|(eph_pk_x, masked_fields)| {\n                // With the x-coordinate of the ephemeral public key we can reconstruct the point as we know that the\n                // y-coordinate must be positive. This may fail however, as not all x-coordinates are on the curve. In\n                // that case, we simply return `Option::none`.\n                point_from_x_coord_and_sign(eph_pk_x, true).and_then(|eph_pk| {\n                    let s_app = get_shared_secret(recipient, eph_pk, contract_address);\n\n                    let unmasked_fields = masked_fields.mapi(|i, field| {\n                        let unmasked = unmask_field(s_app, i, field);\n                        // If we failed to unmask the field, we are dealing with the random padding. We'll ignore it\n                        // later, so we can simply set it to 0\n                        unmasked.unwrap_or(0)\n                    });\n                    let ciphertext_without_eph_pk_x = bytes_from_fields(unmasked_fields);\n\n                    // Derive symmetric keys:\n                    let pairs = derive_aes_symmetric_key_and_iv_from_shared_secret::<2>(s_app);\n                    let (body_sym_key, body_iv) = pairs[0];\n                    let (header_sym_key, header_iv) = pairs[1];\n\n                    // Extract the header ciphertext\n                    let header_start = 0;\n                    let header_ciphertext: [u8; HEADER_CIPHERTEXT_SIZE_IN_BYTES] =\n                        array::subarray(ciphertext_without_eph_pk_x.storage(), header_start);\n                    // We need to convert the array to a BoundedVec because the oracle expects a BoundedVec as it's\n                    // designed to work with messages with unknown length at compile time. This would not be necessary\n                    // here as the header ciphertext length is fixed. But we do it anyway to not have to have duplicate\n                    // oracles.\n                    let header_ciphertext_bvec =\n                        BoundedVec::<u8, HEADER_CIPHERTEXT_SIZE_IN_BYTES>::from_array(header_ciphertext);\n\n                    try_aes128_decrypt(header_ciphertext_bvec, header_iv, header_sym_key)\n                    // Extract ciphertext length from header (2 bytes, big-endian)\n                    .and_then(|header_plaintext| extract_ciphertext_length(header_plaintext))\n                        .filter(|ciphertext_length| ciphertext_length <= MESSAGE_PLAINTEXT_SIZE_IN_BYTES)\n                        .map(|ciphertext_length| {\n                            // Extract and decrypt main ciphertext\n                            let ciphertext_start = header_start + HEADER_CIPHERTEXT_SIZE_IN_BYTES;\n                            let ciphertext_with_padding: [u8; MESSAGE_PLAINTEXT_SIZE_IN_BYTES] =\n                                array::subarray(ciphertext_without_eph_pk_x.storage(), ciphertext_start);\n                            BoundedVec::from_parts(ciphertext_with_padding, ciphertext_length)\n                        })\n                        // Decrypt main ciphertext and return it\n                        .and_then(|ciphertext| try_aes128_decrypt(ciphertext, body_iv, body_sym_key))\n                        // Convert bytes back to fields (32 bytes per field). Returns None if the actual bytes are\n                        // not valid.\n                        .and_then(|plaintext_bytes| try_fields_from_bytes(plaintext_bytes))\n                })\n            })\n    }\n}\n\n/// Encodes the body ciphertext length into a 2-byte big-endian header.\nfn encode_header(ciphertext_length: u32) -> [u8; 2] {\n    [(ciphertext_length >> 8) as u8, ciphertext_length as u8]\n}\n\n/// Extracts the body ciphertext length from a decrypted header as a 2-byte big-endian integer.\n///\n/// Returns `Option::none()` if the header has fewer than 2 bytes.\nunconstrained fn extract_ciphertext_length<let N: u32>(header: BoundedVec<u8, N>) -> Option<u32> {\n    if header.len() >= 2 {\n        Option::some(((header.get(0) as u32) << 8) | (header.get(1) as u32))\n    } else {\n        Option::none()\n    }\n}\n\n/// 2^248: upper bound for values that fit in 31 bytes\nglobal TWO_POW_248: Field = 2.pow_32(248);\n\n/// Removes the Poseidon2-derived mask from a ciphertext field. Returns the unmasked value if it fits in 31 bytes\n/// (a content field), or `None` if it doesn't (random padding). Unconstrained to prevent accidental use in\n/// constrained context.\nunconstrained fn unmask_field(s_app: Field, index: u32, masked: Field) -> Option<Field> {\n    let unmasked = masked - derive_shared_secret_field_mask(s_app, index);\n    if unmasked.lt(TWO_POW_248) {\n        Option::some(unmasked)\n    } else {\n        Option::none()\n    }\n}\n\n/// Produces a random valid address point, i.e. one that is on the curve. This is equivalent to calling\n/// [`AztecAddress::to_address_point`] on a random valid address.\nunconstrained fn random_address_point() -> AddressPoint {\n    let mut result = std::mem::zeroed();\n\n    loop {\n        // We simply produce random x coordinates until we find one that is on the curve. About half of the x\n        // coordinates fulfill this condition, so this should only take a few iterations at most.\n        let x_coord = random();\n        let point = point_from_x_coord_and_sign(x_coord, true);\n        if point.is_some() {\n            result = AddressPoint { inner: point.unwrap() };\n            break;\n        }\n    }\n\n    result\n}\n\nmod test {\n    use crate::{\n        keys::ecdh_shared_secret::{compute_app_siloed_shared_secret, derive_ecdh_shared_secret},\n        messages::{\n            encoding::{HEADER_CIPHERTEXT_SIZE_IN_BYTES, MESSAGE_PLAINTEXT_LEN, MESSAGE_PLAINTEXT_SIZE_IN_BYTES},\n            encryption::message_encryption::MessageEncryption,\n        },\n        test::helpers::test_environment::TestEnvironment,\n    };\n    use crate::protocol::{address::AztecAddress, traits::FromField};\n    use super::{AES128, encode_header, random_address_point};\n    use std::{embedded_curve_ops::EmbeddedCurveScalar, test::OracleMock};\n\n    #[test]\n    unconstrained fn encrypt_decrypt_deterministic() {\n        let env = TestEnvironment::new();\n\n        // Message decryption requires oracles that are only available during private execution\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let plaintext = [1, 2, 3];\n\n            let recipient = AztecAddress::from_field(\n                0x25afb798ea6d0b8c1618e50fdeafa463059415013d3b7c75d46abf5e242be70c,\n            );\n\n            // Mock random values for deterministic test\n            let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n            let _ = OracleMock::mock(\"aztec_utl_getRandomField\").returns(eph_sk).times(1);\n\n            let randomness = 0x0101010101010101010101010101010101010101010101010101010101010101;\n            let _ = OracleMock::mock(\"aztec_utl_getRandomField\").returns(randomness).times(1000000);\n\n            let _ = OracleMock::mock(\"aztec_prv_getNextAppTagAsSender\").returns(42);\n\n            // Encrypt the message\n            let encrypted_message = BoundedVec::from_array(AES128::encrypt(plaintext, recipient, contract_address));\n\n            // Compute the same app-siloed shared secret that the oracle would return\n            let raw_shared_secret = derive_ecdh_shared_secret(\n                EmbeddedCurveScalar::from_field(eph_sk),\n                recipient.to_address_point().unwrap().inner,\n            );\n            let s_app = compute_app_siloed_shared_secret(raw_shared_secret, contract_address);\n\n            let _ = OracleMock::mock(\"aztec_utl_getSharedSecret\").returns(s_app);\n\n            // Decrypt the message\n            let decrypted = AES128::decrypt(encrypted_message, recipient, contract_address).unwrap();\n\n            // The decryption function spits out a BoundedVec because it's designed to work with messages with unknown\n            // length at compile time. For this reason we need to convert the original input to a BoundedVec.\n            let plaintext_bvec = BoundedVec::<Field, MESSAGE_PLAINTEXT_LEN>::from_array(plaintext);\n\n            // Verify decryption matches original plaintext\n            assert_eq(decrypted, plaintext_bvec, \"Decrypted bytes should match original plaintext\");\n\n            // The following is a workaround of \"struct is never constructed\" Noir compilation error (we only ever use\n            // static methods of the struct).\n            let _ = AES128 {};\n        });\n    }\n\n    #[test]\n    unconstrained fn encrypt_decrypt_random() {\n        // Same as `encrypt_decrypt_deterministic`, except we don't mock any of the oracles and rely on\n        // `TestEnvironment` instead.\n        let mut env = TestEnvironment::new();\n\n        let recipient = env.create_light_account();\n\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let plaintext = [1, 2, 3];\n            let ciphertext = AES128::encrypt(plaintext, recipient, contract_address);\n\n            assert_eq(\n                AES128::decrypt(\n                    BoundedVec::from_array(ciphertext),\n                    recipient,\n                    contract_address,\n                )\n                    .unwrap(),\n                BoundedVec::from_array(plaintext),\n            );\n        });\n    }\n\n    #[test]\n    unconstrained fn encrypt_to_invalid_address() {\n        // x = 3 is a non-residue for this curve, resulting in an invalid address\n        let invalid_address = AztecAddress { inner: 3 };\n        let contract_address = AztecAddress { inner: 42 };\n\n        let _ = AES128::encrypt([1, 2, 3, 4], invalid_address, contract_address);\n    }\n\n    // Documents the PKCS#7 padding behavior that `encrypt` relies on (see its static_assert).\n    #[test]\n    fn pkcs7_padding_always_adds_at_least_one_byte() {\n        let key = [0 as u8; 16];\n        let iv = [0 as u8; 16];\n\n        // 1 byte input + 15 bytes padding = 16 bytes\n        assert_eq(std::aes128::aes128_encrypt([0; 1], iv, key).len(), 16);\n\n        // 15 bytes input + 1 byte padding = 16 bytes\n        assert_eq(std::aes128::aes128_encrypt([0; 15], iv, key).len(), 16);\n\n        // 16 bytes input (block-aligned) + full 16-byte padding block = 32 bytes\n        assert_eq(std::aes128::aes128_encrypt([0; 16], iv, key).len(), 32);\n    }\n\n    #[test]\n    unconstrained fn encrypt_decrypt_max_size_plaintext() {\n        let mut env = TestEnvironment::new();\n        let recipient = env.create_light_account();\n\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let mut plaintext = [0; MESSAGE_PLAINTEXT_LEN];\n            for i in 0..MESSAGE_PLAINTEXT_LEN {\n                plaintext[i] = i as Field;\n            }\n            let ciphertext = AES128::encrypt(plaintext, recipient, contract_address);\n\n            assert_eq(\n                AES128::decrypt(\n                    BoundedVec::from_array(ciphertext),\n                    recipient,\n                    contract_address,\n                )\n                    .unwrap(),\n                BoundedVec::from_array(plaintext),\n            );\n        });\n    }\n\n    #[test(should_fail_with = \"Plaintext length exceeds MESSAGE_PLAINTEXT_LEN\")]\n    unconstrained fn encrypt_oversized_plaintext() {\n        let address = AztecAddress { inner: 3 };\n        let contract_address = AztecAddress { inner: 42 };\n        let plaintext: [Field; MESSAGE_PLAINTEXT_LEN + 1] = [0; MESSAGE_PLAINTEXT_LEN + 1];\n        let _ = AES128::encrypt(plaintext, address, contract_address);\n    }\n\n    #[test]\n    unconstrained fn random_address_point_produces_valid_points() {\n        // About half of random addresses are invalid, so testing just a couple gives us high confidence that\n        // `random_address_point` is indeed producing valid addresses.\n        for _ in 0..10 {\n            let random_address = AztecAddress { inner: random_address_point().inner.x };\n            assert(random_address.to_address_point().is_some());\n        }\n    }\n\n    #[test]\n    unconstrained fn decrypt_invalid_ephemeral_public_key() {\n        let mut env = TestEnvironment::new();\n\n        let recipient = env.create_light_account();\n\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let plaintext = [1, 2, 3, 4];\n            let ciphertext = AES128::encrypt(plaintext, recipient, contract_address);\n\n            // The first field of the ciphertext is the x-coordinate of the ephemeral public key. We set it to a known\n            // non-residue (3), causing `decrypt` to fail to produce a decryption shared secret.\n            let mut bad_ciphertext = BoundedVec::from_array(ciphertext);\n            bad_ciphertext.set(0, 3);\n\n            assert(AES128::decrypt(bad_ciphertext, recipient, contract_address).is_none());\n        });\n    }\n\n    #[test]\n    unconstrained fn decrypt_returns_none_on_empty_ciphertext() {\n        let mut env = TestEnvironment::new();\n        let recipient = env.create_light_account();\n\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            assert(AES128::decrypt(BoundedVec::new(), recipient, contract_address).is_none());\n        });\n    }\n\n    // Mocks the header AES decrypt oracle to return an empty result. The TS oracle never throws on invalid\n    // input: it decrypts to garbage bytes or returns empty\n    #[test]\n    unconstrained fn decrypt_returns_none_on_empty_header() {\n        let mut env = TestEnvironment::new();\n        let recipient = env.create_light_account();\n\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let plaintext = [1, 2, 3];\n            let ciphertext = BoundedVec::from_array(AES128::encrypt(plaintext, recipient, contract_address));\n\n            let empty_header = BoundedVec::<u8, HEADER_CIPHERTEXT_SIZE_IN_BYTES>::new();\n            let _ = OracleMock::mock(\"aztec_utl_decryptAes128\").returns(Option::some(empty_header)).times(1);\n\n            assert(AES128::decrypt(ciphertext, recipient, contract_address).is_none());\n        });\n    }\n\n    // Mocks the header oracle to return a 2-byte header that decodes to a ciphertext_length one past the maximum\n    // allowed value, verifying the edge case is handled correctly.\n    #[test]\n    unconstrained fn decrypt_returns_none_on_oversized_ciphertext_length() {\n        let mut env = TestEnvironment::new();\n        let recipient = env.create_light_account();\n\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let plaintext = [1, 2, 3];\n            let ciphertext = BoundedVec::from_array(AES128::encrypt(plaintext, recipient, contract_address));\n\n            let bad_header = BoundedVec::<u8, HEADER_CIPHERTEXT_SIZE_IN_BYTES>::from_array(encode_header(\n                MESSAGE_PLAINTEXT_SIZE_IN_BYTES + 1,\n            ));\n            let _ = OracleMock::mock(\"aztec_utl_decryptAes128\").returns(Option::some(bad_header)).times(1);\n\n            assert(AES128::decrypt(ciphertext, recipient, contract_address).is_none());\n        });\n    }\n\n}\n"
        },
        "155": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/logs/event.nr",
            "source": "use crate::{\n    event::{event_interface::EventInterface, EventSelector},\n    messages::{\n        encoding::{encode_message, MAX_MESSAGE_CONTENT_LEN, MESSAGE_EXPANDED_METADATA_LEN},\n        msg_type::PRIVATE_EVENT_MSG_TYPE_ID,\n    },\n    utils::array,\n};\nuse crate::protocol::traits::{FromField, Serialize, ToField};\n\n/// The number of fields in a private event message content that are not the event's serialized representation (1 field\n/// for randomness).\npub(crate) global PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN: u32 = 1;\npub(crate) global PRIVATE_EVENT_MSG_PLAINTEXT_RANDOMNESS_INDEX: u32 = 0;\n\n/// The maximum length of the packed representation of an event's contents. This is limited by private log size,\n/// encryption overhead and extra fields in the message (e.g. message type id, randomness, etc.).\npub global MAX_EVENT_SERIALIZED_LEN: u32 = MAX_MESSAGE_CONTENT_LEN - PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN;\n\n/// Creates the plaintext for a private event message (i.e. one of type [`PRIVATE_EVENT_MSG_TYPE_ID`]).\n///\n/// This plaintext is meant to be decoded via [`decode_private_event_message`].\npub fn encode_private_event_message<Event>(\n    event: Event,\n    randomness: Field,\n) -> [Field; PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN + <Event as Serialize>::N + MESSAGE_EXPANDED_METADATA_LEN]\nwhere\n    Event: EventInterface + Serialize,\n{\n    // We use `Serialize` because we want for events to be processable by off-chain actors, e.g. block explorers,\n    // wallets and apps, without having to rely on contract invocation. If we used `Packable` we'd need to call utility\n    // functions in order to unpack events, which would introduce a level of complexity we don't currently think is\n    // worth the savings in DA (for public events) and proving time (when encrypting private event messages).\n    let serialized_event = event.serialize();\n\n    // If PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN is changed, causing the assertion below to fail, then the\n    // encoding below must be updated as well.\n    std::static_assert(\n        PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN == 1,\n        \"unexpected value for PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN\",\n    );\n\n    let mut msg_plaintext = [0; PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN + <Event as Serialize>::N];\n    msg_plaintext[PRIVATE_EVENT_MSG_PLAINTEXT_RANDOMNESS_INDEX] = randomness;\n\n    for i in 0..serialized_event.len() {\n        msg_plaintext[PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN + i] = serialized_event[i];\n    }\n\n    // The event type id is stored in the message metadata\n    encode_message(\n        PRIVATE_EVENT_MSG_TYPE_ID,\n        Event::get_event_type_id().to_field() as u64,\n        msg_plaintext,\n    )\n}\n\n/// Decodes the plaintext from a private event message (i.e. one of type [`PRIVATE_EVENT_MSG_TYPE_ID`]).\n///\n/// Returns `None` if `msg_content` has too few fields. This plaintext is meant to have originated\n/// from [`encode_private_event_message`].\n///\n/// Note that while [`encode_private_event_message`] returns a fixed-size array, this function takes a [`BoundedVec`]\n/// instead. This is because when decoding we're typically processing runtime-sized plaintexts, more specifically,\n/// those that originate from [`crate::messages::encryption::message_encryption::MessageEncryption::decrypt`].\npub(crate) unconstrained fn decode_private_event_message(\n    msg_metadata: u64,\n    msg_content: BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>,\n) -> Option<(EventSelector, Field, BoundedVec<Field, MAX_EVENT_SERIALIZED_LEN>)> {\n    if msg_content.len() <= PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN {\n        Option::none()\n    } else {\n        let event_type_id = EventSelector::from_field(msg_metadata as Field);\n\n        // If PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN is changed, causing the assertion below to fail, then the\n        // destructuring of the private event message encoding below must be updated as well.\n        std::static_assert(\n            PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN == 1,\n            \"unexpected value for PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN\",\n        );\n\n        let randomness = msg_content.get(PRIVATE_EVENT_MSG_PLAINTEXT_RANDOMNESS_INDEX);\n        let serialized_event = array::subbvec(msg_content, PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN);\n\n        Option::some((event_type_id, randomness, serialized_event))\n    }\n}\n\nmod test {\n    use crate::{\n        event::event_interface::EventInterface,\n        messages::{\n            encoding::decode_message,\n            logs::event::{decode_private_event_message, encode_private_event_message},\n            msg_type::PRIVATE_EVENT_MSG_TYPE_ID,\n        },\n    };\n    use crate::protocol::traits::Serialize;\n    use crate::test::mocks::mock_event::MockEvent;\n\n    global VALUE: Field = 7;\n    global RANDOMNESS: Field = 10;\n\n    #[test]\n    unconstrained fn encode_decode() {\n        let event = MockEvent::new(VALUE).build_event();\n\n        let message_plaintext = encode_private_event_message(event, RANDOMNESS);\n\n        let (msg_type_id, msg_metadata, msg_content) =\n            decode_message(BoundedVec::from_array(message_plaintext)).unwrap();\n\n        assert_eq(msg_type_id, PRIVATE_EVENT_MSG_TYPE_ID);\n\n        let (event_type_id, randomness, serialized_event) =\n            decode_private_event_message(msg_metadata, msg_content).unwrap();\n\n        assert_eq(event_type_id, MockEvent::get_event_type_id());\n        assert_eq(randomness, RANDOMNESS);\n        assert_eq(serialized_event, BoundedVec::from_array(event.serialize()));\n    }\n\n    #[test]\n    unconstrained fn decode_empty_content_returns_none() {\n        let empty = BoundedVec::new();\n        assert(decode_private_event_message(0, empty).is_none());\n    }\n\n    #[test]\n    unconstrained fn decode_with_only_reserved_fields_returns_none() {\n        let content = BoundedVec::from_array([0]);\n        assert(decode_private_event_message(0, content).is_none());\n    }\n}\n"
        },
        "157": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/logs/note.nr",
            "source": "use crate::{\n    messages::{\n        encoding::{encode_message, MAX_MESSAGE_CONTENT_LEN, MESSAGE_EXPANDED_METADATA_LEN},\n        msg_type::PRIVATE_NOTE_MSG_TYPE_ID,\n    },\n    note::note_interface::NoteType,\n    utils::array,\n};\nuse crate::protocol::{address::AztecAddress, traits::{FromField, Packable, ToField}};\n\n/// The number of fields in a private note message content that are not the note's packed representation.\npub(crate) global PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN: u32 = 3;\n\npub(crate) global PRIVATE_NOTE_MSG_PLAINTEXT_OWNER_INDEX: u32 = 0;\npub(crate) global PRIVATE_NOTE_MSG_PLAINTEXT_STORAGE_SLOT_INDEX: u32 = 1;\npub(crate) global PRIVATE_NOTE_MSG_PLAINTEXT_RANDOMNESS_INDEX: u32 = 2;\n\n/// The maximum length of the packed representation of a note's contents. This is limited by private log size,\n/// encryption overhead and extra fields in the message (e.g. message type id, storage slot, randomness, etc.).\npub global MAX_NOTE_PACKED_LEN: u32 = MAX_MESSAGE_CONTENT_LEN - PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN;\n\n/// Creates the plaintext for a private note message (i.e. one of type [`PRIVATE_NOTE_MSG_TYPE_ID`]).\n///\n/// This plaintext is meant to be decoded via [`decode_private_note_message`].\npub fn encode_private_note_message<Note>(\n    note: Note,\n    owner: AztecAddress,\n    storage_slot: Field,\n    randomness: Field,\n) -> [Field; PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN + <Note as Packable>::N + MESSAGE_EXPANDED_METADATA_LEN]\nwhere\n    Note: NoteType + Packable,\n{\n    let packed_note = note.pack();\n\n    // If PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN is changed, causing the assertion below to fail, then the\n    // encoding below must be updated as well.\n    std::static_assert(\n        PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN == 3,\n        \"unexpected value for PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN\",\n    );\n\n    let mut msg_content = [0; PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN + <Note as Packable>::N];\n    msg_content[PRIVATE_NOTE_MSG_PLAINTEXT_OWNER_INDEX] = owner.to_field();\n    msg_content[PRIVATE_NOTE_MSG_PLAINTEXT_STORAGE_SLOT_INDEX] = storage_slot;\n    msg_content[PRIVATE_NOTE_MSG_PLAINTEXT_RANDOMNESS_INDEX] = randomness;\n    for i in 0..packed_note.len() {\n        msg_content[PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN + i] = packed_note[i];\n    }\n\n    // Notes use the note type id for metadata\n    encode_message(PRIVATE_NOTE_MSG_TYPE_ID, Note::get_id() as u64, msg_content)\n}\n\n/// Decodes the plaintext from a private note message (i.e. one of type [`PRIVATE_NOTE_MSG_TYPE_ID`]).\n///\n/// Returns `None` if `msg_content` has too few fields. This plaintext is meant to have originated\n/// from [`encode_private_note_message`].\n///\n/// Note that while [`encode_private_note_message`] returns a fixed-size array, this function takes a [`BoundedVec`]\n/// instead. This is because when decoding we're typically processing runtime-sized plaintexts, more specifically,\n/// those that originate from [`crate::messages::encryption::message_encryption::MessageEncryption::decrypt`].\npub(crate) unconstrained fn decode_private_note_message(\n    msg_metadata: u64,\n    msg_content: BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>,\n) -> Option<(Field, AztecAddress, Field, Field, BoundedVec<Field, MAX_NOTE_PACKED_LEN>)> {\n    if msg_content.len() <= PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN {\n        Option::none()\n    } else {\n        let note_type_id = msg_metadata as Field; // TODO: make note type id not be a full field\n\n        // If PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN is changed, causing the assertion below to fail, then the\n        // decoding below must be updated as well.\n        std::static_assert(\n            PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN == 3,\n            \"unexpected value for PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN\",\n        );\n\n        let owner = AztecAddress::from_field(msg_content.get(PRIVATE_NOTE_MSG_PLAINTEXT_OWNER_INDEX));\n        let storage_slot = msg_content.get(PRIVATE_NOTE_MSG_PLAINTEXT_STORAGE_SLOT_INDEX);\n        let randomness = msg_content.get(PRIVATE_NOTE_MSG_PLAINTEXT_RANDOMNESS_INDEX);\n        let packed_note = array::subbvec(msg_content, PRIVATE_NOTE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN);\n\n        Option::some((note_type_id, owner, storage_slot, randomness, packed_note))\n    }\n}\n\nmod test {\n    use crate::{\n        messages::{\n            encoding::decode_message,\n            logs::note::{decode_private_note_message, encode_private_note_message, MAX_NOTE_PACKED_LEN},\n            msg_type::PRIVATE_NOTE_MSG_TYPE_ID,\n        },\n        note::note_interface::NoteType,\n    };\n    use crate::protocol::{address::AztecAddress, traits::{FromField, Packable}};\n    use crate::test::mocks::mock_note::MockNote;\n\n    global VALUE: Field = 7;\n    global OWNER: AztecAddress = AztecAddress::from_field(8);\n    global STORAGE_SLOT: Field = 9;\n    global RANDOMNESS: Field = 10;\n\n    #[test]\n    unconstrained fn encode_decode() {\n        let note = MockNote::new(VALUE).build_note();\n\n        let message_plaintext = encode_private_note_message(note, OWNER, STORAGE_SLOT, RANDOMNESS);\n\n        let (msg_type_id, msg_metadata, msg_content) =\n            decode_message(BoundedVec::from_array(message_plaintext)).unwrap();\n\n        assert_eq(msg_type_id, PRIVATE_NOTE_MSG_TYPE_ID);\n\n        let (note_type_id, owner, storage_slot, randomness, packed_note) =\n            decode_private_note_message(msg_metadata, msg_content).unwrap();\n\n        assert_eq(note_type_id, MockNote::get_id());\n        assert_eq(owner, OWNER);\n        assert_eq(storage_slot, STORAGE_SLOT);\n        assert_eq(randomness, RANDOMNESS);\n        assert_eq(packed_note, BoundedVec::from_array(note.pack()));\n    }\n\n    #[derive(Packable)]\n    struct MaxSizeNote {\n        data: [Field; MAX_NOTE_PACKED_LEN],\n    }\n\n    impl NoteType for MaxSizeNote {\n        fn get_id() -> Field {\n            0\n        }\n    }\n\n    #[test]\n    unconstrained fn encode_decode_max_size_note() {\n        let mut data = [0; MAX_NOTE_PACKED_LEN];\n        for i in 0..MAX_NOTE_PACKED_LEN {\n            data[i] = i as Field;\n        }\n        let note = MaxSizeNote { data };\n\n        let encoded = encode_private_note_message(note, OWNER, STORAGE_SLOT, RANDOMNESS);\n        let (msg_type_id, msg_metadata, msg_content) = decode_message(BoundedVec::from_array(encoded)).unwrap();\n\n        assert_eq(msg_type_id, PRIVATE_NOTE_MSG_TYPE_ID);\n\n        let (note_type_id, owner, storage_slot, randomness, packed_note) =\n            decode_private_note_message(msg_metadata, msg_content).unwrap();\n\n        assert_eq(note_type_id, MaxSizeNote::get_id());\n        assert_eq(owner, OWNER);\n        assert_eq(storage_slot, STORAGE_SLOT);\n        assert_eq(randomness, RANDOMNESS);\n        assert_eq(packed_note, BoundedVec::from_array(data));\n    }\n\n    #[derive(Packable)]\n    struct OversizedNote {\n        data: [Field; MAX_NOTE_PACKED_LEN + 1],\n    }\n\n    impl NoteType for OversizedNote {\n        fn get_id() -> Field {\n            0\n        }\n    }\n\n    #[test(should_fail_with = \"Invalid message content: it must have a length of at most MAX_MESSAGE_CONTENT_LEN\")]\n    fn encode_oversized_note_fails() {\n        let note = OversizedNote { data: [0; MAX_NOTE_PACKED_LEN + 1] };\n        let _ = encode_private_note_message(note, OWNER, STORAGE_SLOT, RANDOMNESS);\n    }\n\n    #[test]\n    unconstrained fn decode_empty_content_returns_none() {\n        let empty = BoundedVec::new();\n        assert(decode_private_note_message(0, empty).is_none());\n    }\n\n    #[test]\n    unconstrained fn decode_with_only_reserved_fields_returns_none() {\n        let content = BoundedVec::from_array([0, 0, 0]);\n        assert(decode_private_note_message(0, content).is_none());\n    }\n}\n"
        },
        "158": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/logs/partial_note.nr",
            "source": "use crate::{\n    messages::{\n        encoding::{encode_message, MAX_MESSAGE_CONTENT_LEN, MESSAGE_EXPANDED_METADATA_LEN},\n        msg_type::PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID,\n    },\n    note::note_interface::NoteType,\n    utils::array,\n};\nuse crate::protocol::{address::AztecAddress, traits::{FromField, Packable, ToField}};\n\n/// The number of fields in a private note message content that are not the note's packed representation.\npub(crate) global PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN: u32 = 3;\npub(crate) global PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_OWNER_INDEX: u32 = 0;\npub(crate) global PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RANDOMNESS_INDEX: u32 = 1;\npub(crate) global PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_NOTE_COMPLETION_LOG_TAG_INDEX: u32 = 2;\n\n/// Partial notes have a maximum packed length of their private fields bound by extra content in their private message\n/// (e.g. the storage slot, note completion log tag, etc.).\npub global MAX_PARTIAL_NOTE_PRIVATE_PACKED_LEN: u32 =\n    MAX_MESSAGE_CONTENT_LEN - PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN;\n\n/// Creates the plaintext for a partial note private message (i.e. one of type [`PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID`]).\n///\n/// This plaintext is meant to be decoded via [`decode_partial_note_private_message`].\npub fn encode_partial_note_private_message<PartialNotePrivateContent>(\n    partial_note_private_content: PartialNotePrivateContent,\n    owner: AztecAddress,\n    randomness: Field,\n    note_completion_log_tag: Field,\n    ) -> [Field; PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN + <PartialNotePrivateContent as Packable>::N + MESSAGE_EXPANDED_METADATA_LEN]\nwhere\n    PartialNotePrivateContent: NoteType + Packable,\n{\n    let packed_private_content = partial_note_private_content.pack();\n\n    // If PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_NON_NOTE_FIELDS_LEN is changed, causing the assertion below to fail, then\n    // the encoding below must be updated as well.\n    std::static_assert(\n        PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN == 3,\n        \"unexpected value for PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_NON_NOTE_FIELDS_LEN\",\n    );\n\n    let mut msg_content =\n        [0; PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN + <PartialNotePrivateContent as Packable>::N];\n    msg_content[PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_OWNER_INDEX] = owner.to_field();\n    msg_content[PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RANDOMNESS_INDEX] = randomness;\n    msg_content[PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_NOTE_COMPLETION_LOG_TAG_INDEX] = note_completion_log_tag;\n\n    for i in 0..packed_private_content.len() {\n        msg_content[PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN + i] = packed_private_content[i];\n    }\n\n    encode_message(\n        PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID,\n        // Notes use the note type id for metadata\n        PartialNotePrivateContent::get_id() as u64,\n        msg_content,\n    )\n}\n\n/// Decodes the plaintext from a partial note private message (i.e. one of type\n/// [`PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID`]).\n///\n/// Returns `None` if `msg_content` has too few fields. This plaintext is meant to have originated\n/// from [`encode_partial_note_private_message`].\n///\n/// Note that while [`encode_partial_note_private_message`] returns a fixed-size array, this function takes a\n/// [`BoundedVec`] instead. This is because when decoding we're typically processing runtime-sized plaintexts, more\n/// specifically, those that originate from\n/// [`crate::messages::encryption::message_encryption::MessageEncryption::decrypt`].\npub(crate) unconstrained fn decode_partial_note_private_message(\n    msg_metadata: u64,\n    msg_content: BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>,\n) -> Option<(AztecAddress, Field, Field, Field, BoundedVec<Field, MAX_PARTIAL_NOTE_PRIVATE_PACKED_LEN>)> {\n    if msg_content.len() < PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN {\n        Option::none()\n    } else {\n        let note_type_id: Field = msg_metadata as Field; // TODO: make note type id not be a full field\n\n        // If PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_NON_NOTE_FIELDS_LEN is changed, causing the assertion below to fail,\n        // then the destructuring of the partial note private message encoding below must be updated as well.\n        std::static_assert(\n            PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN == 3,\n            \"unexpected value for PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_NON_NOTE_FIELDS_LEN\",\n        );\n\n        // We currently have three fields that are not the partial note's packed representation, which are the owner,\n        // the randomness, and the note completion log tag.\n        let owner = AztecAddress::from_field(\n            msg_content.get(PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_OWNER_INDEX),\n        );\n        let randomness = msg_content.get(PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RANDOMNESS_INDEX);\n        let note_completion_log_tag = msg_content.get(PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_NOTE_COMPLETION_LOG_TAG_INDEX);\n\n        let packed_private_note_content: BoundedVec<Field, MAX_PARTIAL_NOTE_PRIVATE_PACKED_LEN> = array::subbvec(\n            msg_content,\n            PARTIAL_NOTE_PRIVATE_MSG_PLAINTEXT_RESERVED_FIELDS_LEN,\n        );\n\n        Option::some(\n            (owner, randomness, note_completion_log_tag, note_type_id, packed_private_note_content),\n        )\n    }\n}\n\nmod test {\n    use crate::{\n        messages::{\n            encoding::decode_message,\n            logs::partial_note::{decode_partial_note_private_message, encode_partial_note_private_message},\n            msg_type::PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID,\n        },\n        note::note_interface::NoteType,\n    };\n    use crate::protocol::{address::AztecAddress, traits::{FromField, Packable}};\n    use crate::test::mocks::mock_note::MockNote;\n\n    global VALUE: Field = 7;\n    global OWNER: AztecAddress = AztecAddress::from_field(8);\n    global RANDOMNESS: Field = 10;\n    global NOTE_COMPLETION_LOG_TAG: Field = 11;\n\n    #[test]\n    unconstrained fn encode_decode() {\n        // Note that here we use MockNote as the private fields of a partial note\n        let note = MockNote::new(VALUE).build_note();\n\n        let message_plaintext = encode_partial_note_private_message(note, OWNER, RANDOMNESS, NOTE_COMPLETION_LOG_TAG);\n\n        let (msg_type_id, msg_metadata, msg_content) =\n            decode_message(BoundedVec::from_array(message_plaintext)).unwrap();\n\n        assert_eq(msg_type_id, PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID);\n\n        let (owner, randomness, note_completion_log_tag, note_type_id, packed_note) =\n            decode_partial_note_private_message(msg_metadata, msg_content).unwrap();\n\n        assert_eq(note_type_id, MockNote::get_id());\n        assert_eq(owner, OWNER);\n        assert_eq(randomness, RANDOMNESS);\n        assert_eq(note_completion_log_tag, NOTE_COMPLETION_LOG_TAG);\n        assert_eq(packed_note, BoundedVec::from_array(note.pack()));\n    }\n\n    #[test]\n    unconstrained fn decode_empty_content_returns_none() {\n        let empty = BoundedVec::new();\n        assert(decode_partial_note_private_message(0, empty).is_none());\n    }\n\n    #[test]\n    unconstrained fn decode_succeeds_with_only_reserved_fields() {\n        let content = BoundedVec::from_array([0, 0, 0]);\n        let (_, _, _, _, packed_note) = decode_partial_note_private_message(0, content).unwrap();\n        assert_eq(packed_note.len(), 0);\n    }\n}\n"
        },
        "168": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/processing/mod.nr",
            "source": "pub(crate) mod event_validation_request;\npub mod offchain;\n\nmod message_context;\npub use message_context::MessageContext;\n\npub(crate) mod note_validation_request;\npub(crate) mod log_retrieval_request;\npub(crate) mod log_retrieval_response;\npub(crate) mod pending_tagged_log;\n\nuse crate::{\n    capsules::CapsuleArray,\n    event::EventSelector,\n    messages::{\n        discovery::partial_notes::DeliveredPendingPartialNote,\n        encoding::MESSAGE_CIPHERTEXT_LEN,\n        logs::{event::MAX_EVENT_SERIALIZED_LEN, note::MAX_NOTE_PACKED_LEN},\n        processing::{\n            log_retrieval_request::LogRetrievalRequest, log_retrieval_response::LogRetrievalResponse,\n            note_validation_request::NoteValidationRequest, pending_tagged_log::PendingTaggedLog,\n        },\n    },\n    oracle,\n};\nuse crate::protocol::{\n    address::AztecAddress,\n    constants::DOM_SEP__NOTE_COMPLETION_LOG_TAG,\n    hash::{compute_log_tag, sha256_to_field},\n    traits::{Deserialize, Serialize},\n};\nuse event_validation_request::EventValidationRequest;\n\n// Base slot for the pending tagged log array to which the fetch_tagged_logs oracle inserts found private logs.\npub(crate) global PENDING_TAGGED_LOG_ARRAY_BASE_SLOT: Field =\n    sha256_to_field(\"AZTEC_NR::PENDING_TAGGED_LOG_ARRAY_BASE_SLOT\".as_bytes());\n\nglobal NOTE_VALIDATION_REQUESTS_ARRAY_BASE_SLOT: Field = sha256_to_field(\n    \"AZTEC_NR::NOTE_VALIDATION_REQUESTS_ARRAY_BASE_SLOT\".as_bytes(),\n);\n\nglobal EVENT_VALIDATION_REQUESTS_ARRAY_BASE_SLOT: Field = sha256_to_field(\n    \"AZTEC_NR::EVENT_VALIDATION_REQUESTS_ARRAY_BASE_SLOT\".as_bytes(),\n);\n\nglobal LOG_RETRIEVAL_REQUESTS_ARRAY_BASE_SLOT: Field = sha256_to_field(\n    \"AZTEC_NR::LOG_RETRIEVAL_REQUESTS_ARRAY_BASE_SLOT\".as_bytes(),\n);\n\nglobal LOG_RETRIEVAL_RESPONSES_ARRAY_BASE_SLOT: Field = sha256_to_field(\n    \"AZTEC_NR::LOG_RETRIEVAL_RESPONSES_ARRAY_BASE_SLOT\".as_bytes(),\n);\n\n/// An offchain-delivered message with resolved context, ready for processing during sync.\n#[derive(Serialize, Deserialize)]\npub struct OffchainMessageWithContext {\n    pub message_ciphertext: BoundedVec<Field, MESSAGE_CIPHERTEXT_LEN>,\n    pub message_context: MessageContext,\n}\n\n/// Searches for private logs emitted by `contract_address` that might contain messages for the given `scope`.\npub(crate) unconstrained fn get_private_logs(\n    contract_address: AztecAddress,\n    scope: AztecAddress,\n) -> CapsuleArray<PendingTaggedLog> {\n    // We will eventually perform log discovery via tagging here, but for now we simply call the `fetchTaggedLogs`\n    // oracle. This makes PXE synchronize tags, download logs and store the pending tagged logs in a capsule array.\n    oracle::message_processing::fetch_tagged_logs(PENDING_TAGGED_LOG_ARRAY_BASE_SLOT, scope);\n\n    CapsuleArray::at(contract_address, PENDING_TAGGED_LOG_ARRAY_BASE_SLOT, scope)\n}\n\n/// Enqueues a note for validation and storage by PXE.\n///\n/// Once validated, the note becomes retrievable via the `get_notes` oracle. The note will be scoped to\n/// `contract_address`, meaning other contracts will not be able to access it unless authorized.\n///\n/// In order for the note validation and insertion to occur, `validate_and_store_enqueued_notes_and_events` must be\n/// later called. For optimal performance, accumulate as many note validation requests as possible and then validate\n/// them all at the end (which results in PXE minimizing the number of network round-trips).\n///\n/// The `packed_note` is what `getNotes` will later return. PXE indexes notes by `storage_slot`, so this value is\n/// typically used to filter notes that correspond to different state variables. `note_hash` and `nullifier` are the\n/// inner hashes, i.e. the raw hashes returned by `NoteHash::compute_note_hash` and `NoteHash::compute_nullifier`. PXE\n/// will verify that the siloed unique note hash was inserted into the tree at `tx_hash`, and will store the nullifier\n/// to later check for nullification.\n///\n/// `owner` is the address used in note hash and nullifier computation, often requiring knowledge of their nullifier\n/// secret key.\n///\n/// `scope` is the account to which the note message was delivered (i.e. the address the message was encrypted to).\n/// This determines which PXE account can see the note - other accounts will not be able to access it (e.g. other\n/// accounts will not be able to see one another's token balance notes, even in the same PXE) unless authorized. In\n/// most cases `recipient` equals `owner`, but they can differ in scenarios like delegated discovery.\npub unconstrained fn enqueue_note_for_validation(\n    contract_address: AztecAddress,\n    owner: AztecAddress,\n    storage_slot: Field,\n    randomness: Field,\n    note_nonce: Field,\n    packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n    note_hash: Field,\n    nullifier: Field,\n    tx_hash: Field,\n    scope: AztecAddress,\n) {\n    // We store requests in a `CapsuleArray`, which PXE will later read from and deserialize into its version of the\n    // Noir `NoteValidationRequest`\n    CapsuleArray::at(\n        contract_address,\n        NOTE_VALIDATION_REQUESTS_ARRAY_BASE_SLOT,\n        scope,\n    )\n        .push(\n            NoteValidationRequest {\n                contract_address,\n                owner,\n                storage_slot,\n                randomness,\n                note_nonce,\n                packed_note,\n                note_hash,\n                nullifier,\n                tx_hash,\n            },\n        )\n}\n\n/// Enqueues an event for validation and storage by PXE.\n///\n/// This is the primary way for custom message handlers (registered via\n/// [`crate::macros::AztecConfig::custom_message_handler`]) to deliver reassembled events back to PXE after processing\n/// application-specific message formats.\n///\n/// In order for the event validation and insertion to occur, `validate_and_store_enqueued_notes_and_events` must be\n/// later called. For optimal performance, accumulate as many event validation requests as possible and then validate\n/// them all at the end (which results in PXE minimizing the number of network round-trips).\n///\n/// Note that `validate_and_store_enqueued_notes_and_events` is called by Aztec.nr after processing messages, so custom\n/// message processors do not need to be concerned with this.\npub unconstrained fn enqueue_event_for_validation(\n    contract_address: AztecAddress,\n    event_type_id: EventSelector,\n    randomness: Field,\n    serialized_event: BoundedVec<Field, MAX_EVENT_SERIALIZED_LEN>,\n    event_commitment: Field,\n    tx_hash: Field,\n    scope: AztecAddress,\n) {\n    // We store requests in a `CapsuleArray`, which PXE will later read from and deserialize into its version of the\n    // Noir `EventValidationRequest`\n    CapsuleArray::at(\n        contract_address,\n        EVENT_VALIDATION_REQUESTS_ARRAY_BASE_SLOT,\n        scope,\n    )\n        .push(\n            EventValidationRequest {\n                contract_address,\n                event_type_id,\n                randomness,\n                serialized_event,\n                event_commitment,\n                tx_hash,\n            },\n        )\n}\n\n/// Validates and stores all enqueued notes and events.\n///\n/// Processes all requests enqueued via [`enqueue_note_for_validation`] and [`enqueue_event_for_validation`], inserting\n/// them into the note database and event store respectively, making them queryable via `get_notes` oracle and our TS\n/// API (PXE::getPrivateEvents).\n///\n/// This automatically clears both validation request queues, so no further work needs to be done by the caller.\npub unconstrained fn validate_and_store_enqueued_notes_and_events(contract_address: AztecAddress, scope: AztecAddress) {\n    oracle::message_processing::validate_and_store_enqueued_notes_and_events(\n        contract_address,\n        NOTE_VALIDATION_REQUESTS_ARRAY_BASE_SLOT,\n        EVENT_VALIDATION_REQUESTS_ARRAY_BASE_SLOT,\n        MAX_NOTE_PACKED_LEN as Field,\n        MAX_EVENT_SERIALIZED_LEN as Field,\n        scope,\n    );\n}\n\n/// Resolves message contexts for a list of tx hashes stored in a CapsuleArray.\n///\n/// The `message_context_requests_array_base_slot` must point to a CapsuleArray<Field> containing tx hashes.\n/// PXE will store `Option<MessageContextResponse>` values into the responses array at\n/// `message_context_responses_array_base_slot`.\npub unconstrained fn get_message_contexts_by_tx_hash(\n    contract_address: AztecAddress,\n    message_context_requests_array_base_slot: Field,\n    message_context_responses_array_base_slot: Field,\n    scope: AztecAddress,\n) {\n    oracle::message_processing::get_message_contexts_by_tx_hash(\n        contract_address,\n        message_context_requests_array_base_slot,\n        message_context_responses_array_base_slot,\n        scope,\n    );\n}\n\n/// Efficiently queries the node for logs that result in the completion of all `DeliveredPendingPartialNote`s stored in\n/// a `CapsuleArray` by performing all node communication concurrently. Returns a second `CapsuleArray` with Options\n/// for the responses that correspond to the pending partial notes at the same index.\n///\n/// For example, given an array with pending partial notes `[ p1, p2, p3 ]`, where `p1` and `p3` have corresponding\n/// completion logs but `p2` does not, the returned `CapsuleArray` will have contents `[some(p1_log), none(),\n/// some(p3_log)]`.\npub(crate) unconstrained fn get_pending_partial_notes_completion_logs(\n    contract_address: AztecAddress,\n    pending_partial_notes: CapsuleArray<DeliveredPendingPartialNote>,\n    scope: AztecAddress,\n) -> CapsuleArray<Option<LogRetrievalResponse>> {\n    let log_retrieval_requests = CapsuleArray::at(\n        contract_address,\n        LOG_RETRIEVAL_REQUESTS_ARRAY_BASE_SLOT,\n        scope,\n    );\n\n    // We create a LogRetrievalRequest for each PendingPartialNote in the CapsuleArray. Because we need the indices in\n    // the request array to match the indices in the partial note array, we can't use CapsuleArray::for_each, as that\n    // function has arbitrary iteration order. Instead, we manually iterate the array from the beginning and push into\n    // the requests array, which we expect to be empty.\n    let mut i = 0;\n    let pending_partial_notes_count = pending_partial_notes.len();\n    while i < pending_partial_notes_count {\n        let pending_partial_note = pending_partial_notes.get(i);\n        // Partial note completion logs are emitted with a domain-separated tag. To find matching logs, we apply the\n        // same domain separation to the stored raw tag.\n        let log_tag = compute_log_tag(\n            pending_partial_note.note_completion_log_tag,\n            DOM_SEP__NOTE_COMPLETION_LOG_TAG,\n        );\n        log_retrieval_requests.push(LogRetrievalRequest { contract_address, unsiloed_tag: log_tag });\n        i += 1;\n    }\n\n    oracle::message_processing::get_logs_by_tag(\n        contract_address,\n        LOG_RETRIEVAL_REQUESTS_ARRAY_BASE_SLOT,\n        LOG_RETRIEVAL_RESPONSES_ARRAY_BASE_SLOT,\n        scope,\n    );\n\n    CapsuleArray::at(\n        contract_address,\n        LOG_RETRIEVAL_RESPONSES_ARRAY_BASE_SLOT,\n        scope,\n    )\n}\n"
        },
        "170": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/messages/processing/offchain.nr",
            "source": "use crate::{\n    capsules::CapsuleArray,\n    context::UtilityContext,\n    messages::{\n        encoding::MESSAGE_CIPHERTEXT_LEN,\n        processing::{get_message_contexts_by_tx_hash, MessageContext, OffchainMessageWithContext},\n    },\n    oracle::contract_sync::set_contract_sync_cache_invalid,\n    protocol::{\n        address::AztecAddress,\n        constants::MAX_TX_LIFETIME,\n        hash::sha256_to_field,\n        traits::{Deserialize, Serialize},\n    },\n};\n\n/// Base capsule slot for the persistent inbox of [`PendingOffchainMsg`] entries.\n///\n/// This is the slot where we accumulate messages received through [`receive`].\nglobal OFFCHAIN_INBOX_SLOT: Field = sha256_to_field(\"AZTEC_NR::OFFCHAIN_INBOX_SLOT\".as_bytes());\n\n/// Capsule array slot used by [`sync_inbox`] to pass tx hash resolution requests to PXE.\nglobal OFFCHAIN_CONTEXT_REQUESTS_SLOT: Field = sha256_to_field(\"AZTEC_NR::OFFCHAIN_CONTEXT_REQUESTS_SLOT\".as_bytes());\n\n/// Capsule array slot used by [`sync_inbox`] to read tx context responses from PXE.\nglobal OFFCHAIN_CONTEXT_RESPONSES_SLOT: Field = sha256_to_field(\"AZTEC_NR::OFFCHAIN_CONTEXT_RESPONSES_SLOT\".as_bytes());\n\n/// Capsule array slot used by [`sync_inbox`] to collect messages ready for processing.\nglobal OFFCHAIN_READY_MESSAGES_SLOT: Field = sha256_to_field(\"AZTEC_NR::OFFCHAIN_READY_MESSAGES_SLOT\".as_bytes());\n\n/// Maximum number of offchain messages accepted by `offchain_receive` in a single call.\npub global MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL: u32 = 16;\n\n/// Tolerance added to the `MAX_TX_LIFETIME` cap for message expiration.\nglobal TX_EXPIRATION_TOLERANCE: u64 = 7200; // 2 hours\n\n/// Maximum time-to-live for a tx-bound offchain message.\n///\n/// After `anchor_block_timestamp + MAX_MSG_TTL`, the message is evicted from the inbox.\nglobal MAX_MSG_TTL: u64 = MAX_TX_LIFETIME + TX_EXPIRATION_TOLERANCE;\n\n/// A function that manages offchain-delivered messages for processing during sync.\n///\n/// Offchain messages are messages that are not broadcasted via onchain logs. They are instead delivered to the\n/// recipient by calling the `offchain_receive` utility function (injected by the `#[aztec]` macro). Message transport\n/// is the app's responsibility. Typical examples of transport methods are: messaging apps, email, QR codes, etc.\n///\n/// Once offchain messages are delivered to the recipient's private environment via `offchain_receive`, messages are\n/// locally stored in a persistent inbox.\n///\n/// This function determines when each message in said inbox is ready for processing, when it can be safely disposed\n/// of, etc.\n///\n/// The only current implementation of an `OffchainInboxSync` is [`sync_inbox`], which manages an inbox with expiration\n/// based eviction and automatic transaction context resolution.\npub(crate) type OffchainInboxSync<Env> = unconstrained fn[Env](\n/* contract_address */AztecAddress, /* scope */ AztecAddress) -> CapsuleArray<OffchainMessageWithContext>;\n\n/// A message delivered via the `offchain_receive` utility function.\npub struct OffchainMessage {\n    /// The encrypted message payload.\n    pub ciphertext: BoundedVec<Field, MESSAGE_CIPHERTEXT_LEN>,\n    /// The intended recipient of the message.\n    pub recipient: AztecAddress,\n    /// The hash of the transaction that produced this message. `Option::none` indicates a tx-less message.\n    pub tx_hash: Option<Field>,\n    /// Anchor block timestamp at message emission.\n    pub anchor_block_timestamp: u64,\n}\n\n/// An offchain message awaiting processing (or re-processing) in the inbox.\n///\n/// Messages remain in the inbox until they expire, even if they have already been processed. This is necessary to\n/// handle reorgs: a processed message may need to be re-processed if the transaction that provided its context is\n/// reverted. On each sync, resolved messages are promoted to [`OffchainMessageWithContext`] for processing.\n#[derive(Serialize, Deserialize)]\nstruct PendingOffchainMsg {\n    /// The encrypted message payload.\n    ciphertext: BoundedVec<Field, MESSAGE_CIPHERTEXT_LEN>,\n    /// The intended recipient of the message.\n    recipient: AztecAddress,\n    /// The hash of the transaction that produced this message. A value of 0 indicates a tx-less message.\n    tx_hash: Field,\n    /// Anchor block timestamp at message emission. Used to compute the effective expiration: messages are evicted\n    /// after `anchor_block_timestamp + MAX_MSG_TTL`.\n    anchor_block_timestamp: u64,\n}\n\n/// Delivers offchain messages to the given contract's offchain inbox for subsequent processing.\n///\n/// Offchain messages are transaction effects that are not broadcasted via onchain logs. Instead, the sender shares the\n/// message to the recipient through an external channel (e.g. a URL accessible by the recipient). The recipient then\n/// calls this function to hand the messages to the contract so they can be processed through the same mechanisms as\n/// onchain messages.\n///\n/// Each message is routed to the inbox scoped to its `recipient` field, so messages for different accounts are\n/// automatically isolated.\n///\n/// Messages are processed when their originating transaction is found onchain (providing the context needed to\n/// validate resulting notes and events).\n///\n/// Messages are kept in the inbox until they expire. The effective expiration is\n/// `anchor_block_timestamp + MAX_MSG_TTL`.\n///\n/// Processing order is not guaranteed.\npub unconstrained fn receive(\n    contract_address: AztecAddress,\n    messages: BoundedVec<OffchainMessage, MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL>,\n) {\n    // May contain duplicates if multiple messages target the same recipient. This is harmless since\n    // cache invalidation on the TS side is idempotent (deleting an already-deleted key is a no-op).\n    let mut scopes: BoundedVec<AztecAddress, MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL> = BoundedVec::new();\n    let mut i = 0;\n    let messages_len = messages.len();\n    while i < messages_len {\n        let msg = messages.get(i);\n        let tx_hash = if msg.tx_hash.is_some() {\n            msg.tx_hash.unwrap()\n        } else {\n            0\n        };\n        let inbox: CapsuleArray<PendingOffchainMsg> =\n            CapsuleArray::at(contract_address, OFFCHAIN_INBOX_SLOT, msg.recipient);\n        inbox.push(\n            PendingOffchainMsg {\n                ciphertext: msg.ciphertext,\n                recipient: msg.recipient,\n                tx_hash,\n                anchor_block_timestamp: msg.anchor_block_timestamp,\n            },\n        );\n        scopes.push(msg.recipient);\n        i += 1;\n    }\n\n    set_contract_sync_cache_invalid(contract_address, scopes);\n}\n\n/// Returns offchain-delivered messages to process during sync.\n///\n/// Messages remain in the inbox and are reprocessed on each sync until their originating transaction is no longer at\n/// risk of being dropped by a reorg.\npub unconstrained fn sync_inbox(\n    contract_address: AztecAddress,\n    scope: AztecAddress,\n) -> CapsuleArray<OffchainMessageWithContext> {\n    let inbox: CapsuleArray<PendingOffchainMsg> = CapsuleArray::at(contract_address, OFFCHAIN_INBOX_SLOT, scope);\n    let context_resolution_requests: CapsuleArray<Field> =\n        CapsuleArray::at(contract_address, OFFCHAIN_CONTEXT_REQUESTS_SLOT, scope);\n    let resolved_contexts: CapsuleArray<Option<MessageContext>> =\n        CapsuleArray::at(contract_address, OFFCHAIN_CONTEXT_RESPONSES_SLOT, scope);\n    let ready_to_process: CapsuleArray<OffchainMessageWithContext> =\n        CapsuleArray::at(contract_address, OFFCHAIN_READY_MESSAGES_SLOT, scope);\n\n    // Clear any stale ready messages from a previous run.\n    ready_to_process.for_each(|i, _| { ready_to_process.remove(i); });\n\n    // Clear any stale context resolution requests/responses from a previous run.\n    context_resolution_requests.for_each(|i, _| { context_resolution_requests.remove(i); });\n    resolved_contexts.for_each(|i, _| { resolved_contexts.remove(i); });\n\n    // Build a request list aligned with the inbox indices.\n    let mut i = 0;\n    let inbox_len = inbox.len();\n    while i < inbox_len {\n        let msg = inbox.get(i);\n        context_resolution_requests.push(msg.tx_hash);\n        i += 1;\n    }\n\n    // Ask PXE to resolve contexts for all requested tx hashes.\n    get_message_contexts_by_tx_hash(\n        contract_address,\n        OFFCHAIN_CONTEXT_REQUESTS_SLOT,\n        OFFCHAIN_CONTEXT_RESPONSES_SLOT,\n        scope,\n    );\n\n    assert_eq(resolved_contexts.len(), inbox_len);\n\n    let now = UtilityContext::new().timestamp();\n\n    let mut j = inbox_len;\n    while j > 0 {\n        // This loop decides what to do with each message in the offchain message inbox. We need to handle 3\n        // different scenarios for each message.\n        //\n        // 1. The TX that emitted this message is still not known to PXE: in this case we can't yet process this\n        // message, as any notes or events discovered will fail to be validated. So we leave the message in the inbox,\n        // awaiting for future syncs to detect that the TX became available.\n        //\n        // 2. The message is not associated to a TX to begin with. The current version of offchain message processing\n        // does not support this case, but in the future it will. Right now, a message without an associated TX will\n        // sit in the inbox until it expires.\n        //\n        // 3. The TX that emitted this message has been found by PXE. That gives us all the information needed to\n        // process the message. We add the message to the `ready_to_process` CapsuleArray so that the `sync_state` loop\n        // processes it.\n        //\n        // In all cases, if the message has expired (i.e. `now > anchor_block_timestamp + MAX_MSG_TTL`), we remove it\n        // from the inbox.\n        //\n        // Note: the loop runs backwards because it might call `inbox.remove(j)` to purge expired messages and we also\n        // need to align it with `resolved_contexts.get(j)`. Going from last to first simplifies the algorithm as\n        // not yet visited element indexes remain stable.\n        j -= 1;\n        let maybe_ctx = resolved_contexts.get(j);\n        let msg = inbox.get(j);\n\n        // Compute the message's effective expiration timestamp to determine if we can purge it from the inbox.\n        let effective_expiration = msg.anchor_block_timestamp + MAX_MSG_TTL;\n\n        // Message expired. We remove it from the inbox.\n        if now > effective_expiration {\n            inbox.remove(j);\n        }\n\n        // Scenario 1: associated TX not yet available. We keep the message in the inbox, as it might become\n        // processable as new blocks get mined.\n        // Scenario 2: no TX associated to message. The message will sit in the inbox until it expires.\n        if maybe_ctx.is_none() {\n            continue;\n        }\n\n        // Scenario 3: Message is ready to process, add to result array. Note we still keep it in the inbox unless we\n        // consider it has expired: this is because we need to account for reorgs. If reorg occurs after we processed\n        // a message, the effects of processing the message get rewind. However, the associated TX can be included in\n        // a subsequent block. Should that happen, the message must be re-processed to ensure consistency.\n        let message_context = maybe_ctx.unwrap();\n        ready_to_process.push(OffchainMessageWithContext { message_ciphertext: msg.ciphertext, message_context });\n    }\n\n    ready_to_process\n}\n\nmod test {\n    use crate::{\n        capsules::CapsuleArray, oracle::random::random, protocol::address::AztecAddress,\n        test::helpers::test_environment::TestEnvironment,\n    };\n    use super::{\n        MAX_MSG_TTL, MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL, OFFCHAIN_INBOX_SLOT, OffchainMessage, PendingOffchainMsg,\n        receive, sync_inbox,\n    };\n\n    global SCOPE: AztecAddress = AztecAddress { inner: 0xcafe };\n\n    /// Creates an `OffchainMessage` with dummy ciphertext and `SCOPE` as recipient.\n    fn make_msg(tx_hash: Option<Field>, anchor_block_timestamp: u64) -> OffchainMessage {\n        OffchainMessage { ciphertext: BoundedVec::new(), recipient: SCOPE, tx_hash, anchor_block_timestamp }\n    }\n\n    /// Advances the TXE block timestamp by `offset` seconds and returns the resulting timestamp.\n    unconstrained fn advance_by(env: TestEnvironment, offset: u64) -> u64 {\n        env.advance_next_block_timestamp_by(offset);\n        env.mine_block();\n        env.last_block_timestamp()\n    }\n\n    #[test]\n    unconstrained fn empty_inbox_returns_empty_result() {\n        let env = TestEnvironment::new();\n        env.utility_context(|context| {\n            let result = sync_inbox(context.this_address(), SCOPE);\n            let inbox: CapsuleArray<PendingOffchainMsg> =\n                CapsuleArray::at(context.this_address(), OFFCHAIN_INBOX_SLOT, SCOPE);\n\n            assert_eq(result.len(), 0);\n            assert_eq(inbox.len(), 0);\n        });\n    }\n\n    #[test]\n    unconstrained fn tx_bound_msg_expires_after_max_msg_ttl() {\n        let env = TestEnvironment::new();\n        let anchor_ts = advance_by(env, 10);\n\n        env.utility_context(|context| {\n            let mut msgs: BoundedVec<OffchainMessage, MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL> = BoundedVec::new();\n            msgs.push(make_msg(Option::some(random()), anchor_ts));\n            receive(context.this_address(), msgs);\n        });\n\n        // Advance past anchor_ts + MAX_MSG_TTL.\n        let _now = advance_by(env, MAX_MSG_TTL + 1);\n\n        env.utility_context(|context| {\n            let address = context.this_address();\n            let result = sync_inbox(address, SCOPE);\n            let inbox: CapsuleArray<PendingOffchainMsg> = CapsuleArray::at(address, OFFCHAIN_INBOX_SLOT, SCOPE);\n\n            assert_eq(result.len(), 0); // context is None, not ready\n            assert_eq(inbox.len(), 0); // expired, removed\n        });\n    }\n\n    #[test]\n    unconstrained fn tx_bound_msg_not_expired_before_max_msg_ttl() {\n        let env = TestEnvironment::new();\n        let anchor_ts = advance_by(env, 10);\n\n        env.utility_context(|context| {\n            let mut msgs: BoundedVec<OffchainMessage, MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL> = BoundedVec::new();\n            msgs.push(make_msg(Option::some(random()), anchor_ts));\n            receive(context.this_address(), msgs);\n        });\n\n        // Advance, but not past anchor_ts + MAX_MSG_TTL.\n        let _now = advance_by(env, 100);\n\n        env.utility_context(|context| {\n            let address = context.this_address();\n            let result = sync_inbox(address, SCOPE);\n            let inbox: CapsuleArray<PendingOffchainMsg> = CapsuleArray::at(address, OFFCHAIN_INBOX_SLOT, SCOPE);\n\n            assert_eq(result.len(), 0); // context is None, not ready\n            assert_eq(inbox.len(), 1); // not expired, stays\n        });\n    }\n\n    #[test]\n    unconstrained fn tx_less_msg_expires_after_max_msg_ttl() {\n        let env = TestEnvironment::new();\n        let anchor_ts = advance_by(env, 10);\n\n        env.utility_context(|context| {\n            let mut msgs: BoundedVec<OffchainMessage, MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL> = BoundedVec::new();\n            msgs.push(make_msg(Option::none(), anchor_ts));\n            receive(context.this_address(), msgs);\n        });\n\n        // Advance past anchor_ts + MAX_MSG_TTL.\n        let _now = advance_by(env, MAX_MSG_TTL + 1);\n\n        env.utility_context(|context| {\n            let address = context.this_address();\n            let result = sync_inbox(address, SCOPE);\n            let inbox: CapsuleArray<PendingOffchainMsg> = CapsuleArray::at(address, OFFCHAIN_INBOX_SLOT, SCOPE);\n\n            assert_eq(result.len(), 0); // context is None, not ready\n            assert_eq(inbox.len(), 0); // expired, removed\n        });\n    }\n\n    #[test]\n    unconstrained fn unresolved_tx_stays_in_inbox() {\n        let env = TestEnvironment::new();\n        let anchor_ts = advance_by(env, 10);\n\n        env.utility_context(|context| {\n            let mut msgs: BoundedVec<OffchainMessage, MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL> = BoundedVec::new();\n            msgs.push(make_msg(Option::some(random()), anchor_ts));\n            receive(context.this_address(), msgs);\n        });\n\n        let _now = advance_by(env, 100);\n\n        env.utility_context(|context| {\n            let address = context.this_address();\n            let result = sync_inbox(address, SCOPE);\n            let inbox: CapsuleArray<PendingOffchainMsg> = CapsuleArray::at(address, OFFCHAIN_INBOX_SLOT, SCOPE);\n\n            assert_eq(result.len(), 0); // not resolved, not ready\n            assert_eq(inbox.len(), 1); // not expired, stays\n        });\n    }\n\n    #[test]\n    unconstrained fn multiple_messages_mixed_expiration() {\n        let env = TestEnvironment::new();\n        let anchor_ts = advance_by(env, 10);\n\n        let survivor_tx_hash = random();\n\n        env.utility_context(|context| {\n            let address = context.this_address();\n            let mut msgs: BoundedVec<OffchainMessage, MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL> = BoundedVec::new();\n            // Message 0: tx-bound, anchor_ts in the past so it expires at\n            // anchor_ts + MAX_MSG_TTL. We set anchor to 0 so it expires quickly.\n            msgs.push(make_msg(Option::some(random()), 0));\n            // Message 1: tx-bound, anchor_ts is recent so it survives.\n            msgs.push(make_msg(Option::some(survivor_tx_hash), anchor_ts));\n            // Message 2: tx-less, anchor_ts=0 so it also expires.\n            msgs.push(make_msg(Option::none(), 0));\n            receive(address, msgs);\n        });\n\n        // Advance past MAX_MSG_TTL for anchor_ts=0, but not for anchor_ts=anchor_ts.\n        let _now = advance_by(env, MAX_MSG_TTL);\n\n        env.utility_context(|context| {\n            let address = context.this_address();\n            let result = sync_inbox(address, SCOPE);\n            let inbox: CapsuleArray<PendingOffchainMsg> = CapsuleArray::at(address, OFFCHAIN_INBOX_SLOT, SCOPE);\n\n            assert_eq(result.len(), 0); // all contexts are None\n            // Message 0 expired (anchor=0), message 1 survived (anchor=anchor_ts),\n            // Message 2 expired (anchor=0).\n            assert_eq(inbox.len(), 1);\n            assert_eq(inbox.get(0).tx_hash, survivor_tx_hash);\n        });\n    }\n\n    // -- Resolved context (ready to process) ------------------------------\n\n    #[test]\n    unconstrained fn resolved_msg_is_ready_to_process() {\n        let env = TestEnvironment::new();\n        // TestEnvironment::new() deploys protocol contracts, creating blocks with tx effects.\n        // In TXE, tx hashes equal Fr(blockNumber), so Fr(1) is the tx effect from block 1.\n        // We use this as a \"known resolvable\" tx hash.\n        let known_tx_hash: Field = 1;\n        let anchor_ts = advance_by(env, 10);\n\n        env.utility_context(|context| {\n            let mut msgs: BoundedVec<OffchainMessage, MAX_OFFCHAIN_MESSAGES_PER_RECEIVE_CALL> = BoundedVec::new();\n            msgs.push(make_msg(Option::some(known_tx_hash), anchor_ts));\n            receive(context.this_address(), msgs);\n        });\n\n        let _now = advance_by(env, 100);\n\n        env.utility_context(|context| {\n            let address = context.this_address();\n            let result = sync_inbox(address, SCOPE);\n            let inbox: CapsuleArray<PendingOffchainMsg> = CapsuleArray::at(address, OFFCHAIN_INBOX_SLOT, SCOPE);\n\n            // The message should be ready to process since its tx context was resolved.\n            assert_eq(result.len(), 1);\n\n            let ctx = result.get(0).message_context;\n            assert_eq(ctx.tx_hash, known_tx_hash);\n            assert(ctx.first_nullifier_in_tx != 0, \"resolved context must have a first nullifier\");\n\n            // Message stays in inbox (not expired) for potential reorg reprocessing.\n            assert_eq(inbox.len(), 1);\n        });\n    }\n}\n"
        },
        "188": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/aes128_decrypt.nr",
            "source": "#[oracle(aztec_utl_decryptAes128)]\nunconstrained fn aes128_decrypt_oracle<let N: u32>(\n    ciphertext: BoundedVec<u8, N>,\n    iv: [u8; 16],\n    sym_key: [u8; 16],\n) -> Option<BoundedVec<u8, N>> {}\n\n/// Attempts to decrypt a ciphertext using AES128.\n///\n/// Returns `Option::some(plaintext)` on success, or `Option::none()` if decryption fails (e.g. due to malformed\n/// ciphertext). Note that decryption with the wrong key will still return `Some` with garbage data, it's up to\n/// the calling function to verify correctness (e.g. via a MAC check).\n///\n/// Note that we accept ciphertext as a BoundedVec, not as an array. This is because this function is typically used\n/// when processing logs and at that point we don't have comptime information about the length of the ciphertext as\n/// the log is not specific to any individual note.\n// TODO(F-498): review naming consistency\npub unconstrained fn try_aes128_decrypt<let N: u32>(\n    ciphertext: BoundedVec<u8, N>,\n    iv: [u8; 16],\n    sym_key: [u8; 16],\n) -> Option<BoundedVec<u8, N>> {\n    aes128_decrypt_oracle(ciphertext, iv, sym_key)\n}\n\nmod test {\n    use crate::{\n        keys::ecdh_shared_secret::compute_app_siloed_shared_secret,\n        messages::encryption::aes128::derive_aes_symmetric_key_and_iv_from_shared_secret,\n        utils::{array::subarray::subarray, point::point_from_x_coord},\n    };\n    use crate::protocol::address::AztecAddress;\n    use crate::test::helpers::test_environment::TestEnvironment;\n    use super::try_aes128_decrypt;\n    use poseidon::poseidon2::Poseidon2;\n    use std::aes128::aes128_encrypt;\n\n    global CONTRACT_ADDRESS: AztecAddress = AztecAddress { inner: 42 };\n    global TEST_PLAINTEXT_LENGTH: u32 = 10;\n    global TEST_CIPHERTEXT_LENGTH: u32 = 16;\n    global TEST_PADDING_LENGTH: u32 = TEST_CIPHERTEXT_LENGTH - TEST_PLAINTEXT_LENGTH;\n\n    #[test]\n    unconstrained fn aes_encrypt_then_decrypt() {\n        let env = TestEnvironment::new();\n\n        env.utility_context(|_| {\n            let shared_secret_point = point_from_x_coord(1).unwrap();\n            let s_app = compute_app_siloed_shared_secret(shared_secret_point, CONTRACT_ADDRESS);\n\n            let (sym_key, iv) = derive_aes_symmetric_key_and_iv_from_shared_secret::<1>(s_app)[0];\n\n            let plaintext: [u8; TEST_PLAINTEXT_LENGTH] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n\n            let ciphertext: [u8; TEST_CIPHERTEXT_LENGTH] = aes128_encrypt(plaintext, iv, sym_key);\n\n            let ciphertext_bvec = BoundedVec::<u8, TEST_CIPHERTEXT_LENGTH>::from_array(ciphertext);\n\n            let received_plaintext = try_aes128_decrypt(ciphertext_bvec, iv, sym_key).unwrap();\n            assert_eq(received_plaintext.len(), TEST_PLAINTEXT_LENGTH);\n            assert_eq(received_plaintext.max_len(), TEST_CIPHERTEXT_LENGTH);\n            assert_eq(subarray::<_, _, TEST_PLAINTEXT_LENGTH>(received_plaintext.storage(), 0), plaintext);\n            assert_eq(\n                subarray::<_, _, TEST_PADDING_LENGTH>(received_plaintext.storage(), TEST_PLAINTEXT_LENGTH),\n                [0 as u8; TEST_PADDING_LENGTH],\n            );\n        })\n    }\n\n    global TEST_MAC_LENGTH: u32 = 32;\n\n    #[test(should_fail_with = \"mac does not match\")]\n    unconstrained fn aes_encrypt_then_decrypt_with_bad_sym_key_is_caught() {\n        let env = TestEnvironment::new();\n\n        env.utility_context(|_| {\n            // The AES decryption oracle will not fail for any valid ciphertext; it will always return\n            // `Some` with some data. Whether the decryption was successful is up to the app to check in a\n            // custom way.\n            //\n            // E.g. if it's a note that's been encrypted, upon decryption the app can check whether the\n            // note hash exists onchain. If it doesn't, that's a strong indicator that decryption failed.\n            //\n            // E.g. for non-note messages, the plaintext could include a MAC\n            // (https://en.wikipedia.org/wiki/Message_authentication_code). We demonstrate this approach in\n            // this test: we compute a MAC, include it in the plaintext, encrypt, and then verify that\n            // decryption with a bad key produces a MAC mismatch.\n            let shared_secret_point = point_from_x_coord(1).unwrap();\n            let s_app = compute_app_siloed_shared_secret(shared_secret_point, CONTRACT_ADDRESS);\n\n            let (sym_key, iv) = derive_aes_symmetric_key_and_iv_from_shared_secret::<1>(s_app)[0];\n\n            let mac_preimage = 0x42;\n            let mac = Poseidon2::hash([mac_preimage], 1);\n            let mac_as_bytes = mac.to_be_bytes::<TEST_MAC_LENGTH>();\n\n            let plaintext: [u8; TEST_PLAINTEXT_LENGTH] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n\n            // We append the mac to the plaintext. It doesn't necessarily have to be 32 bytes; that's quite an extreme\n            // length. 16 bytes or 8 bytes might be sufficient, and would save on data broadcasting costs. The shorter\n            // the mac, the more possibility of false positive decryptions (decryption seemingly succeeding, but the\n            // decrypted plaintext being garbage). Some projects use the `iv` (all 16 bytes or the first 8 bytes) as a\n            // mac.\n            let mut plaintext_with_mac = [0 as u8; TEST_PLAINTEXT_LENGTH + TEST_MAC_LENGTH];\n            for i in 0..TEST_PLAINTEXT_LENGTH {\n                plaintext_with_mac[i] = plaintext[i];\n            }\n            for i in 0..TEST_MAC_LENGTH {\n                plaintext_with_mac[TEST_PLAINTEXT_LENGTH + i] = mac_as_bytes[i];\n            }\n\n            let ciphertext = aes128_encrypt(plaintext_with_mac, iv, sym_key);\n\n            // We now would broadcast the tuple [ciphertext, mac] to the network. The recipient will then decrypt the\n            // ciphertext, and if the mac inside the received plaintext matches the mac that was broadcast, then the\n            // recipient knows that decryption was successful.\n\n            // For this test, we intentionally mutate the sym_key to a bad one, so that decryption fails. This allows\n            // us to explore how the recipient can detect failed decryption by checking the decrypted mac against the\n            // broadcasted mac.\n            let mut bad_sym_key = sym_key;\n            bad_sym_key[0] = 0;\n\n            // We need to convert the array to a BoundedVec because the oracle expects a BoundedVec as it's designed to\n            // work with logs of unknown length.\n            let ciphertext_bvec = BoundedVec::<u8, 48>::from_array(ciphertext);\n            // Decryption with wrong key still returns Some (with garbage).\n            let received_plaintext = try_aes128_decrypt(ciphertext_bvec, iv, bad_sym_key).unwrap();\n\n            let extracted_mac_as_bytes: [u8; TEST_MAC_LENGTH] =\n                subarray(received_plaintext.storage(), TEST_PLAINTEXT_LENGTH);\n\n            assert_eq(mac_as_bytes, extracted_mac_as_bytes, \"mac does not match\");\n        });\n    }\n}\n"
        },
        "192": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr",
            "source": "use crate::protocol::{abis::function_selector::FunctionSelector, address::AztecAddress, utils::reader::Reader};\n\n#[oracle(aztec_prv_callPrivateFunction)]\nunconstrained fn call_private_function_oracle(\n    _contract_address: AztecAddress,\n    _function_selector: FunctionSelector,\n    _args_hash: Field,\n    _start_side_effect_counter: u32,\n    _is_static_call: bool,\n) -> [Field; 2] {}\n\npub unconstrained fn call_private_function_internal(\n    contract_address: AztecAddress,\n    function_selector: FunctionSelector,\n    args_hash: Field,\n    start_side_effect_counter: u32,\n    is_static_call: bool,\n) -> (u32, Field) {\n    let fields = call_private_function_oracle(\n        contract_address,\n        function_selector,\n        args_hash,\n        start_side_effect_counter,\n        is_static_call,\n    );\n\n    let mut reader = Reader::new(fields);\n    let end_side_effect_counter = reader.read_u32();\n    let returns_hash = reader.read();\n\n    (end_side_effect_counter, returns_hash)\n}\n"
        },
        "193": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/capsules.nr",
            "source": "use crate::protocol::{address::AztecAddress, traits::{Deserialize, Serialize}};\n\n/// Stores arbitrary information in a per-contract non-volatile database, which can later be retrieved with `load`. If\n/// data was already stored at this slot, it is overwritten.\n// TODO(F-498): review naming consistency\npub unconstrained fn store<T>(contract_address: AztecAddress, slot: Field, value: T, scope: AztecAddress)\nwhere\n    T: Serialize,\n{\n    let serialized = value.serialize();\n    set_capsule_oracle(contract_address, slot, serialized, scope);\n}\n\n/// Returns data previously stored via `storeCapsule` in the per-contract non-volatile database. Returns\n/// Option::none() if nothing was stored at the given slot.\n// TODO(F-498): review naming consistency\npub unconstrained fn load<T>(contract_address: AztecAddress, slot: Field, scope: AztecAddress) -> Option<T>\nwhere\n    T: Deserialize,\n{\n    let serialized_option = get_capsule_oracle(contract_address, slot, <T as Deserialize>::N, scope);\n    serialized_option.map(|arr| Deserialize::deserialize(arr))\n}\n\n/// Deletes data in the per-contract non-volatile database. Does nothing if no data was present.\npub unconstrained fn delete(contract_address: AztecAddress, slot: Field, scope: AztecAddress) {\n    delete_oracle(contract_address, slot, scope);\n}\n\n/// Copies a number of contiguous entries in the per-contract non-volatile database. This allows for efficient data\n/// structures by avoiding repeated calls to `loadCapsule` and `storeCapsule`. Supports overlapping source and\n/// destination regions (which will result in the overlapped source values being overwritten). All copied slots must\n/// exist in the database (i.e. have been stored and not deleted)\npub unconstrained fn copy(\n    contract_address: AztecAddress,\n    src_slot: Field,\n    dst_slot: Field,\n    num_entries: u32,\n    scope: AztecAddress,\n) {\n    copy_oracle(contract_address, src_slot, dst_slot, num_entries, scope);\n}\n\n#[oracle(aztec_utl_setCapsule)]\nunconstrained fn set_capsule_oracle<let N: u32>(\n    contract_address: AztecAddress,\n    slot: Field,\n    values: [Field; N],\n    scope: AztecAddress,\n) {}\n\n/// We need to pass in `array_len` (the value of N) as a parameter to tell the oracle how many fields the response must\n/// have.\n///\n/// Note that the oracle returns an Option<[Field; N]> because we cannot return an Option<T> directly. That would\n/// require for the oracle resolver to know the shape of T (e.g. if T were a struct of 3 u32 values then the expected\n/// response shape would be 3 single items, whereas it were a struct containing `u32, [Field;10], u32` then the\n/// expected shape would be single, array, single.). Instead, we return the serialization and deserialize in Noir.\n#[oracle(aztec_utl_getCapsule)]\nunconstrained fn get_capsule_oracle<let N: u32>(\n    contract_address: AztecAddress,\n    slot: Field,\n    array_len: u32,\n    scope: AztecAddress,\n) -> Option<[Field; N]> {}\n\n#[oracle(aztec_utl_deleteCapsule)]\nunconstrained fn delete_oracle(contract_address: AztecAddress, slot: Field, scope: AztecAddress) {}\n\n#[oracle(aztec_utl_copyCapsule)]\nunconstrained fn copy_oracle(\n    contract_address: AztecAddress,\n    src_slot: Field,\n    dst_slot: Field,\n    num_entries: u32,\n    scope: AztecAddress,\n) {}\n\nmod test {\n    // These tests are sort of redundant since we already test the oracle implementation directly in TypeScript, but\n    // they are cheap regardless and help ensure both that the TXE implementation works accordingly and that the Noir\n    // oracles are hooked up correctly.\n\n    use crate::{\n        oracle::capsules::{copy, delete, load, store},\n        test::{helpers::test_environment::TestEnvironment, mocks::MockStruct},\n    };\n    use crate::protocol::{address::AztecAddress, traits::{FromField, ToField}};\n\n    global SLOT: Field = 1;\n    global SCOPE: AztecAddress = AztecAddress { inner: 0xcafe };\n\n    #[test]\n    unconstrained fn stores_and_loads() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let value = MockStruct::new(5, 6);\n            store(contract_address, SLOT, value, SCOPE);\n\n            assert_eq(load(contract_address, SLOT, SCOPE).unwrap(), value);\n        });\n    }\n\n    #[test]\n    unconstrained fn store_overwrites() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let value = MockStruct::new(5, 6);\n            store(contract_address, SLOT, value, SCOPE);\n\n            let new_value = MockStruct::new(7, 8);\n            store(contract_address, SLOT, new_value, SCOPE);\n\n            assert_eq(load(contract_address, SLOT, SCOPE).unwrap(), new_value);\n        });\n    }\n\n    #[test]\n    unconstrained fn loads_empty_slot() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let loaded_value: Option<MockStruct> = load(contract_address, SLOT, SCOPE);\n            assert_eq(loaded_value, Option::none());\n        });\n    }\n\n    #[test]\n    unconstrained fn deletes_stored_value() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let value = MockStruct::new(5, 6);\n            store(contract_address, SLOT, value, SCOPE);\n            delete(contract_address, SLOT, SCOPE);\n\n            let loaded_value: Option<MockStruct> = load(contract_address, SLOT, SCOPE);\n            assert_eq(loaded_value, Option::none());\n        });\n    }\n\n    #[test]\n    unconstrained fn deletes_empty_slot() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            delete(contract_address, SLOT, SCOPE);\n            let loaded_value: Option<MockStruct> = load(contract_address, SLOT, SCOPE);\n            assert_eq(loaded_value, Option::none());\n        });\n    }\n\n    #[test]\n    unconstrained fn copies_non_overlapping_values() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let src = 5;\n\n            let values = [MockStruct::new(5, 6), MockStruct::new(7, 8), MockStruct::new(9, 10)];\n            store(contract_address, src, values[0], SCOPE);\n            store(contract_address, src + 1, values[1], SCOPE);\n            store(contract_address, src + 2, values[2], SCOPE);\n\n            let dst = 10;\n            copy(contract_address, src, dst, 3, SCOPE);\n\n            assert_eq(load(contract_address, dst, SCOPE).unwrap(), values[0]);\n            assert_eq(load(contract_address, dst + 1, SCOPE).unwrap(), values[1]);\n            assert_eq(load(contract_address, dst + 2, SCOPE).unwrap(), values[2]);\n        });\n    }\n\n    #[test]\n    unconstrained fn copies_overlapping_values_with_src_ahead() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let src = 1;\n\n            let values = [MockStruct::new(5, 6), MockStruct::new(7, 8), MockStruct::new(9, 10)];\n            store(contract_address, src, values[0], SCOPE);\n            store(contract_address, src + 1, values[1], SCOPE);\n            store(contract_address, src + 2, values[2], SCOPE);\n\n            let dst = 2;\n            copy(contract_address, src, dst, 3, SCOPE);\n\n            assert_eq(load(contract_address, dst, SCOPE).unwrap(), values[0]);\n            assert_eq(load(contract_address, dst + 1, SCOPE).unwrap(), values[1]);\n            assert_eq(load(contract_address, dst + 2, SCOPE).unwrap(), values[2]);\n\n            // src[1] and src[2] should have been overwritten since they are also dst[0] and dst[1]\n            assert_eq(load(contract_address, src, SCOPE).unwrap(), values[0]); // src[0] (unchanged)\n            assert_eq(load(contract_address, src + 1, SCOPE).unwrap(), values[0]); // dst[0]\n            assert_eq(load(contract_address, src + 2, SCOPE).unwrap(), values[1]); // dst[1]\n        });\n    }\n\n    #[test]\n    unconstrained fn copies_overlapping_values_with_dst_ahead() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            let src = 2;\n\n            let values = [MockStruct::new(5, 6), MockStruct::new(7, 8), MockStruct::new(9, 10)];\n            store(contract_address, src, values[0], SCOPE);\n            store(contract_address, src + 1, values[1], SCOPE);\n            store(contract_address, src + 2, values[2], SCOPE);\n\n            let dst = 1;\n            copy(contract_address, src, dst, 3, SCOPE);\n\n            assert_eq(load(contract_address, dst, SCOPE).unwrap(), values[0]);\n            assert_eq(load(contract_address, dst + 1, SCOPE).unwrap(), values[1]);\n            assert_eq(load(contract_address, dst + 2, SCOPE).unwrap(), values[2]);\n\n            // src[0] and src[1] should have been overwritten since they are also dst[1] and dst[2]\n            assert_eq(load(contract_address, src, SCOPE).unwrap(), values[1]); // dst[1]\n            assert_eq(load(contract_address, src + 1, SCOPE).unwrap(), values[2]); // dst[2]\n            assert_eq(load(contract_address, src + 2, SCOPE).unwrap(), values[2]); // src[2] (unchanged)\n        });\n    }\n\n    #[test(should_fail_with = \"copy empty slot\")]\n    unconstrained fn cannot_copy_empty_values() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n\n            copy(contract_address, SLOT, SLOT, 1, SCOPE);\n        });\n    }\n\n    #[test(should_fail_with = \"not allowed to access\")]\n    unconstrained fn cannot_store_other_contract() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let other_contract_address = AztecAddress::from_field(contract_address.to_field() + 1);\n\n            let value = MockStruct::new(5, 6);\n            store(other_contract_address, SLOT, value, SCOPE);\n        });\n    }\n\n    #[test(should_fail_with = \"not allowed to access\")]\n    unconstrained fn cannot_load_other_contract() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let other_contract_address = AztecAddress::from_field(contract_address.to_field() + 1);\n\n            let _: Option<MockStruct> = load(other_contract_address, SLOT, SCOPE);\n        });\n    }\n\n    #[test(should_fail_with = \"not allowed to access\")]\n    unconstrained fn cannot_delete_other_contract() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let other_contract_address = AztecAddress::from_field(contract_address.to_field() + 1);\n\n            delete(other_contract_address, SLOT, SCOPE);\n        });\n    }\n\n    #[test(should_fail_with = \"not allowed to access\")]\n    unconstrained fn cannot_copy_other_contract() {\n        let env = TestEnvironment::new();\n        env.private_context(|context| {\n            let contract_address = context.this_address();\n            let other_contract_address = AztecAddress::from_field(contract_address.to_field() + 1);\n\n            copy(other_contract_address, SLOT, SLOT, 0, SCOPE);\n        });\n    }\n}\n"
        },
        "194": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/contract_sync.nr",
            "source": "use crate::protocol::address::AztecAddress;\n\n#[oracle(aztec_utl_setContractSyncCacheInvalid)]\nunconstrained fn set_contract_sync_cache_invalid_oracle<let N: u32>(\n    contract_address: AztecAddress,\n    scopes: BoundedVec<AztecAddress, N>,\n) {}\n\n/// Forces the PXE to re-sync the given contract for a set of scopes on the next query.\n///\n/// Call this after writing data (e.g. offchain messages) that the contract's `sync_state` function needs to discover.\n/// Without invalidation, the sync cache would skip re-running `sync_state` until the next block.\npub unconstrained fn set_contract_sync_cache_invalid<let N: u32>(\n    contract_address: AztecAddress,\n    scopes: BoundedVec<AztecAddress, N>,\n) {\n    set_contract_sync_cache_invalid_oracle(contract_address, scopes);\n}\n"
        },
        "195": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/execution.nr",
            "source": "use crate::context::UtilityContext;\n\n#[oracle(aztec_utl_getUtilityContext)]\nunconstrained fn get_utility_context_oracle() -> UtilityContext {}\n\n/// Returns a utility context built from the global variables of anchor block and the contract address of the function\n/// being executed.\npub unconstrained fn get_utility_context() -> UtilityContext {\n    get_utility_context_oracle()\n}\n"
        },
        "196": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/execution_cache.nr",
            "source": "/// Stores values represented as slice in execution cache to be later obtained by its hash.\n// TODO(F-498): review naming consistency\npub fn store<let N: u32>(values: [Field; N], hash: Field) {\n    // Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to\n    // call. When loading the values, however, the caller must check that the values are indeed the preimage.\n    unsafe { set_hash_preimage_oracle_wrapper(values, hash) };\n}\n\nunconstrained fn set_hash_preimage_oracle_wrapper<let N: u32>(values: [Field; N], hash: Field) {\n    set_hash_preimage_oracle(values, hash);\n}\n\n// TODO(F-498): review naming consistency\npub unconstrained fn load<let N: u32>(hash: Field) -> [Field; N] {\n    get_hash_preimage_oracle(hash)\n}\n\n#[oracle(aztec_prv_setHashPreimage)]\nunconstrained fn set_hash_preimage_oracle<let N: u32>(_values: [Field; N], _hash: Field) {}\n\n#[oracle(aztec_prv_getHashPreimage)]\nunconstrained fn get_hash_preimage_oracle<let N: u32>(_hash: Field) -> [Field; N] {}\n"
        },
        "205": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/message_processing.nr",
            "source": "use crate::protocol::address::AztecAddress;\n\n/// Finds new private logs that may have been sent to all registered accounts in PXE in the current contract and makes\n/// them available for later processing in Noir by storing them in a capsule array.\n// TODO(F-498): review naming consistency\npub unconstrained fn fetch_tagged_logs(pending_tagged_log_array_base_slot: Field, scope: AztecAddress) {\n    get_pending_tagged_logs_oracle(pending_tagged_log_array_base_slot, scope);\n}\n\n#[oracle(aztec_utl_getPendingTaggedLogs)]\nunconstrained fn get_pending_tagged_logs_oracle(pending_tagged_log_array_base_slot: Field, scope: AztecAddress) {}\n\n// This must be a single oracle and not one for notes and one for events because the entire point is to validate all\n// notes and events in one go, minimizing node round-trips.\npub(crate) unconstrained fn validate_and_store_enqueued_notes_and_events(\n    contract_address: AztecAddress,\n    note_validation_requests_array_base_slot: Field,\n    event_validation_requests_array_base_slot: Field,\n    max_note_packed_len: Field,\n    max_event_serialized_len: Field,\n    scope: AztecAddress,\n) {\n    validate_and_store_enqueued_notes_and_events_oracle(\n        contract_address,\n        note_validation_requests_array_base_slot,\n        event_validation_requests_array_base_slot,\n        max_note_packed_len,\n        max_event_serialized_len,\n        scope,\n    );\n}\n\n#[oracle(aztec_utl_validateAndStoreEnqueuedNotesAndEvents)]\nunconstrained fn validate_and_store_enqueued_notes_and_events_oracle(\n    contract_address: AztecAddress,\n    note_validation_requests_array_base_slot: Field,\n    event_validation_requests_array_base_slot: Field,\n    max_note_packed_len: Field,\n    max_event_serialized_len: Field,\n    scope: AztecAddress,\n) {}\n\npub(crate) unconstrained fn get_logs_by_tag(\n    contract_address: AztecAddress,\n    log_retrieval_requests_array_base_slot: Field,\n    log_retrieval_responses_array_base_slot: Field,\n    scope: AztecAddress,\n) {\n    get_logs_by_tag_oracle(\n        contract_address,\n        log_retrieval_requests_array_base_slot,\n        log_retrieval_responses_array_base_slot,\n        scope,\n    );\n}\n\n#[oracle(aztec_utl_getLogsByTag)]\nunconstrained fn get_logs_by_tag_oracle(\n    contract_address: AztecAddress,\n    log_retrieval_requests_array_base_slot: Field,\n    log_retrieval_responses_array_base_slot: Field,\n    scope: AztecAddress,\n) {}\n\npub(crate) unconstrained fn get_message_contexts_by_tx_hash(\n    contract_address: AztecAddress,\n    message_context_requests_array_base_slot: Field,\n    message_context_responses_array_base_slot: Field,\n    scope: AztecAddress,\n) {\n    get_message_contexts_by_tx_hash_oracle(\n        contract_address,\n        message_context_requests_array_base_slot,\n        message_context_responses_array_base_slot,\n        scope,\n    );\n}\n\n#[oracle(aztec_utl_getMessageContextsByTxHash)]\nunconstrained fn get_message_contexts_by_tx_hash_oracle(\n    contract_address: AztecAddress,\n    message_context_requests_array_base_slot: Field,\n    message_context_responses_array_base_slot: Field,\n    scope: AztecAddress,\n) {}\n"
        },
        "212": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/shared_secret.nr",
            "source": "use crate::protocol::address::aztec_address::AztecAddress;\nuse crate::protocol::point::Point;\n\n#[oracle(aztec_utl_getSharedSecret)]\nunconstrained fn get_shared_secret_oracle(\n    address: AztecAddress,\n    ephPk: Point,\n    contract_address: AztecAddress,\n) -> Field {}\n\n/// Returns an app-siloed shared secret between `address` and someone who knows the secret key behind an ephemeral\n/// public key `ephPk`.\n///\n/// The returned value is a Field `s_app`, computed as:\n///\n/// ```text\n/// S     = address_secret * ephPk          (raw ECDH point)\n/// s_app = h(DOM_SEP, S.x, S.y, contract)  (app-siloed scalar)\n/// ```\n///\n/// where `contract` is the address of the calling contract. The oracle host validates this matches its execution\n/// context.\n///\n/// Without app-siloing, a malicious contract could call this oracle with public information (address, ephPk) and\n/// obtain the same raw secret as the legitimate contract, enabling cross-contract decryption. By including the\n/// contract address in the hash, each contract receives a different `s_app`, preventing this attack.\n///\n/// Callers derive indexed subkeys from `s_app` via\n/// [`derive_shared_secret_subkey`](crate::keys::ecdh_shared_secret::derive_shared_secret_subkey).\npub unconstrained fn get_shared_secret(address: AztecAddress, ephPk: Point, contract_address: AztecAddress) -> Field {\n    get_shared_secret_oracle(address, ephPk, contract_address)\n}\n"
        },
        "214": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/tx_phase.nr",
            "source": "/// Notifies PXE of the side effect counter at which the revertible phase begins.\n///\n/// PXE uses it to classify notes and nullifiers as revertible or non-revertible in its note cache. This information is\n/// then fed to kernels as hints.\npub(crate) fn notify_revertible_phase_start(counter: u32) {\n    // Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to\n    // call.\n    unsafe { notify_revertible_phase_start_oracle_wrapper(counter) };\n}\n\n/// Returns whether a side effect counter falls in the revertible phase of the transaction.\npub(crate) unconstrained fn is_execution_in_revertible_phase(current_counter: u32) -> bool {\n    is_execution_in_revertible_phase_oracle(current_counter)\n}\n\nunconstrained fn notify_revertible_phase_start_oracle_wrapper(counter: u32) {\n    notify_revertible_phase_start_oracle(counter);\n}\n\n#[oracle(aztec_prv_notifyRevertiblePhaseStart)]\nunconstrained fn notify_revertible_phase_start_oracle(_counter: u32) {}\n\n#[oracle(aztec_prv_isExecutionInRevertiblePhase)]\nunconstrained fn is_execution_in_revertible_phase_oracle(current_counter: u32) -> bool {}\n"
        },
        "215": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/oracle/version.nr",
            "source": "/// The ORACLE_VERSION constant is used to check that the oracle interface is in sync between PXE and Aztec.nr. We need\n/// to version the oracle interface to ensure that developers get a reasonable error message if they use incompatible\n/// versions of Aztec.nr and PXE. The TypeScript counterpart is in `oracle_version.ts`.\n///\n/// @dev Whenever a contract function or Noir test is run, the `aztec_utl_assertCompatibleOracleVersion` oracle is\n/// called and if the oracle version is incompatible an error is thrown.\npub global ORACLE_VERSION: Field = 22;\n\n/// Asserts that the version of the oracle is compatible with the version expected by the contract.\npub fn assert_compatible_oracle_version() {\n    // Safety: This oracle call returns nothing: we only call it to check Aztec.nr and Oracle interface versions are\n    // compatible. It is therefore always safe to call.\n    unsafe {\n        assert_compatible_oracle_version_wrapper();\n    }\n}\n\nunconstrained fn assert_compatible_oracle_version_wrapper() {\n    assert_compatible_oracle_version_oracle(ORACLE_VERSION);\n}\n\n#[oracle(aztec_utl_assertCompatibleOracleVersion)]\nunconstrained fn assert_compatible_oracle_version_oracle(version: Field) {}\n\nmod test {\n    use super::{assert_compatible_oracle_version_oracle, ORACLE_VERSION};\n\n    #[test]\n    unconstrained fn compatible_oracle_version() {\n        assert_compatible_oracle_version_oracle(ORACLE_VERSION);\n    }\n\n    #[test(should_fail_with = \"Incompatible aztec cli version:\")]\n    unconstrained fn incompatible_oracle_version() {\n        let arbitrary_incorrect_version = 318183437;\n        assert_compatible_oracle_version_oracle(arbitrary_incorrect_version);\n    }\n}\n"
        },
        "261": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/utils/array/append.nr",
            "source": "/// Appends the elements of the second `BoundedVec` to the end of the first one. The resulting `BoundedVec` can have\n/// any arbitrary maximum length, but it must be large enough to fit all of the elements of both the first and second\n/// vectors.\npub fn append<T, let ALen: u32, let BLen: u32, let DstLen: u32>(\n    a: BoundedVec<T, ALen>,\n    b: BoundedVec<T, BLen>,\n) -> BoundedVec<T, DstLen> {\n    let mut dst = BoundedVec::new();\n\n    dst.extend_from_bounded_vec(a);\n    dst.extend_from_bounded_vec(b);\n\n    dst\n}\n\nmod test {\n    use super::append;\n\n    #[test]\n    unconstrained fn append_empty_vecs() {\n        let a: BoundedVec<_, 3> = BoundedVec::new();\n        let b: BoundedVec<_, 14> = BoundedVec::new();\n\n        let result: BoundedVec<Field, 5> = append(a, b);\n\n        assert_eq(result.len(), 0);\n        assert_eq(result.storage(), std::mem::zeroed());\n    }\n\n    #[test]\n    unconstrained fn append_non_empty_vecs() {\n        let a: BoundedVec<_, 3> = BoundedVec::from_array([1, 2, 3]);\n        let b: BoundedVec<_, 14> = BoundedVec::from_array([4, 5, 6]);\n\n        let result: BoundedVec<Field, 8> = append(a, b);\n\n        assert_eq(result.len(), 6);\n        assert_eq(result.storage(), [1, 2, 3, 4, 5, 6, std::mem::zeroed(), std::mem::zeroed()]);\n    }\n\n    #[test(should_fail_with = \"out of bounds\")]\n    unconstrained fn append_non_empty_vecs_insufficient_max_len() {\n        let a: BoundedVec<_, 3> = BoundedVec::from_array([1, 2, 3]);\n        let b: BoundedVec<_, 14> = BoundedVec::from_array([4, 5, 6]);\n\n        let _: BoundedVec<Field, 5> = append(a, b);\n    }\n}\n"
        },
        "264": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/utils/array/subarray.nr",
            "source": "/// Returns `DstLen` elements from a source array, starting at `offset`. `DstLen` must not be larger than the number of\n/// elements past `offset`.\n///\n/// Examples:\n/// ```\n/// let foo: [Field; 2] = subarray([1, 2, 3, 4, 5], 2);\n/// assert_eq(foo, [3, 4]);\n///\n/// let bar: [Field; 5] = subarray([1, 2, 3, 4, 5], 2); // fails - we can't return 5 elements since only 3 remain\n/// ```\npub fn subarray<T, let SrcLen: u32, let DstLen: u32>(src: [T; SrcLen], offset: u32) -> [T; DstLen] {\n    assert(offset + DstLen <= SrcLen, \"DstLen too large for offset\");\n\n    let mut dst: [T; DstLen] = std::mem::zeroed();\n    for i in 0..DstLen {\n        dst[i] = src[i + offset];\n    }\n\n    dst\n}\n\nmod test {\n    use super::subarray;\n\n    #[test]\n    unconstrained fn subarray_into_empty() {\n        // In all of these cases we're setting DstLen to be 0, so we always get back an empty array.\n        assert_eq(subarray::<Field, _, _>([], 0), []);\n        assert_eq(subarray([1, 2, 3, 4, 5], 0), []);\n        assert_eq(subarray([1, 2, 3, 4, 5], 2), []);\n    }\n\n    #[test]\n    unconstrained fn subarray_complete() {\n        assert_eq(subarray::<Field, _, _>([], 0), []);\n        assert_eq(subarray([1, 2, 3, 4, 5], 0), [1, 2, 3, 4, 5]);\n    }\n\n    #[test]\n    unconstrained fn subarray_different_end_sizes() {\n        // We implicitly select how many values to read in the size of the return array\n        assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3, 4, 5]);\n        assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3, 4]);\n        assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3]);\n        assert_eq(subarray([1, 2, 3, 4, 5], 1), [2]);\n    }\n\n    #[test(should_fail_with = \"DstLen too large for offset\")]\n    unconstrained fn subarray_offset_too_large() {\n        // With an offset of 1 we can only request up to 4 elements\n        let _: [_; 5] = subarray([1, 2, 3, 4, 5], 1);\n    }\n\n    #[test(should_fail)]\n    unconstrained fn subarray_bad_return_value() {\n        assert_eq(subarray([1, 2, 3, 4, 5], 1), [3, 3, 4, 5]);\n    }\n}\n"
        },
        "265": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/utils/array/subbvec.nr",
            "source": "use crate::utils::array;\n\n/// Returns `DstMaxLen` elements from a source BoundedVec, starting at `offset`. `offset` must not be larger than the\n/// original length, and `DstLen` must not be larger than the total number of elements past `offset` (including the\n/// zeroed elements past `len()`).\n///\n/// Only elements at the beginning of the vector can be removed: it is not possible to also remove elements at the end\n/// of the vector by passing a value for `DstLen` that is smaller than `len() - offset`.\n///\n/// Examples:\n/// ```\n/// let foo = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n/// assert_eq(subbvec(foo, 2), BoundedVec::<_, 8>::from_array([3, 4, 5]));\n///\n/// let bar: BoundedVec<_, 1> = subbvec(foo, 2); // fails - we can't return just 1 element since 3 remain\n/// let baz: BoundedVec<_, 10> = subbvec(foo, 3); // fails - we can't return 10 elements since only 7 remain\n/// ```\npub fn subbvec<T, let SrcMaxLen: u32, let DstMaxLen: u32>(\n    bvec: BoundedVec<T, SrcMaxLen>,\n    offset: u32,\n) -> BoundedVec<T, DstMaxLen> {\n    // from_parts_unchecked does not verify that the elements past len are zeroed, but that is not an issue in our case\n    // because we're constructing the new storage array as a subarray of the original one (which should have zeroed\n    // storage past len), guaranteeing correctness. This is because `subarray` does not allow extending arrays past\n    // their original length.\n    BoundedVec::from_parts_unchecked(array::subarray(bvec.storage(), offset), bvec.len() - offset)\n}\n\nmod test {\n    use super::subbvec;\n\n    #[test]\n    unconstrained fn subbvec_empty() {\n        let bvec = BoundedVec::<Field, 0>::from_array([]);\n        assert_eq(subbvec(bvec, 0), bvec);\n    }\n\n    #[test]\n    unconstrained fn subbvec_complete() {\n        let bvec = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n        assert_eq(subbvec(bvec, 0), bvec);\n\n        let smaller_capacity = BoundedVec::<_, 5>::from_array([1, 2, 3, 4, 5]);\n        assert_eq(subbvec(bvec, 0), smaller_capacity);\n    }\n\n    #[test]\n    unconstrained fn subbvec_partial() {\n        let bvec = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n\n        assert_eq(subbvec(bvec, 2), BoundedVec::<_, 8>::from_array([3, 4, 5]));\n        assert_eq(subbvec(bvec, 2), BoundedVec::<_, 3>::from_array([3, 4, 5]));\n    }\n\n    #[test]\n    unconstrained fn subbvec_into_empty() {\n        let bvec: BoundedVec<_, 10> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n        assert_eq(subbvec(bvec, 5), BoundedVec::<_, 5>::from_array([]));\n    }\n\n    #[test(should_fail)]\n    unconstrained fn subbvec_offset_past_len() {\n        let bvec = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n        let _: BoundedVec<_, 1> = subbvec(bvec, 6);\n    }\n\n    #[test(should_fail)]\n    unconstrained fn subbvec_insufficient_dst_len() {\n        let bvec = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n\n        // We're not providing enough space to hold all of the items inside the original BoundedVec. subbvec can cause\n        // for the capacity to reduce, but not the length (other than by len - offset).\n        let _: BoundedVec<_, 1> = subbvec(bvec, 2);\n    }\n\n    #[test(should_fail_with = \"DstLen too large for offset\")]\n    unconstrained fn subbvec_dst_len_causes_enlarge() {\n        let bvec = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n\n        // subbvec does not support capacity increases\n        let _: BoundedVec<_, 11> = subbvec(bvec, 0);\n    }\n\n    #[test(should_fail_with = \"DstLen too large for offset\")]\n    unconstrained fn subbvec_dst_len_too_large_for_offset() {\n        let bvec = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n\n        // This effectively requests a capacity increase, since there'd be just one element plus the 5 empty slots,\n        // which is less than 7.\n        let _: BoundedVec<_, 7> = subbvec(bvec, 4);\n    }\n}\n"
        },
        "268": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/utils/conversion/bytes_to_fields.nr",
            "source": "use std::static_assert;\n\n// These functions are used to facilitate the conversion of log ciphertext between byte and field representations.\n//\n// `bytes_to_fields` uses fixed-size arrays since encryption contexts have compile-time size information.\n// `bytes_from_fields` uses BoundedVec for flexibility in unconstrained contexts where sizes are dynamic.\n//\n// Together they provide bidirectional conversion between bytes and fields when processing encrypted logs.\n\n/// Converts the input bytes into an array of fields. A Field is ~254 bits meaning that each field can store 31 whole\n/// bytes. Use `bytes_from_fields` to obtain the original bytes array.\n///\n/// The input bytes are chunked into chunks of 31 bytes. Each 31-byte chunk is viewed as big-endian, and is converted\n/// into a Field. For example, [1, 10, 3, ..., 0] (31 bytes) is encoded as [1 * 256^30 + 10 * 256^29 + 3 * 256^28 + ...\n/// + 0] Note: N must be a multiple of 31 bytes\npub fn bytes_to_fields<let N: u32>(bytes: [u8; N]) -> [Field; N / 31] {\n    // Assert that N is a multiple of 31\n    static_assert(N % 31 == 0, \"N must be a multiple of 31\");\n\n    let mut fields = [0; N / 31];\n\n    // Since N is a multiple of 31, we can simply process all chunks fully\n    for i in 0..N / 31 {\n        let mut field = 0;\n        for j in 0..31 {\n            // Shift the existing value left by 8 bits and add the new byte\n            field = field * 256 + bytes[i * 31 + j] as Field;\n        }\n        fields[i] = field;\n    }\n\n    fields\n}\n\n/// Converts an input BoundedVec of fields into a BoundedVec of bytes in big-endian order. Arbitrary Field arrays are\n/// not allowed: this is assumed to be an array obtained via `bytes_to_fields`, i.e. one that actually represents\n/// bytes. To convert a Field array into bytes, use `fields_to_bytes`.\n///\n/// Each input field must contain at most 31 bytes (this is constrained to be so). Each field is converted into 31\n/// big-endian bytes, and the resulting 31-byte chunks are concatenated back together in the order of the original\n/// fields.\npub fn bytes_from_fields<let N: u32>(fields: BoundedVec<Field, N>) -> BoundedVec<u8, N * 31> {\n    let mut bytes = BoundedVec::new();\n\n    for i in 0..fields.len() {\n        let field = fields.get(i);\n\n        // We expect that the field contains at most 31 bytes of information.\n        field.assert_max_bit_size::<248>();\n\n        // Now we can safely convert the field to 31 bytes.\n        let field_as_bytes: [u8; 31] = field.to_be_bytes();\n\n        for j in 0..31 {\n            bytes.push(field_as_bytes[j]);\n        }\n    }\n\n    bytes\n}\n\nmod tests {\n    use crate::utils::array::subarray;\n    use super::{bytes_from_fields, bytes_to_fields};\n\n    #[test]\n    unconstrained fn random_bytes_to_fields_and_back(input: [u8; 93]) {\n        let fields = bytes_to_fields(input);\n\n        // At this point in production, the log flies through the system and we get a BoundedVec on the other end. So\n        // we need to convert the field array to a BoundedVec to be able to feed it to the `bytes_from_fields`\n        // function.\n        let fields_as_bounded_vec = BoundedVec::<_, 6>::from_array(fields);\n\n        let bytes_back = bytes_from_fields(fields_as_bounded_vec);\n\n        // Compare the original input with the round-tripped result\n        assert_eq(bytes_back.len(), input.len());\n        assert_eq(subarray(bytes_back.storage(), 0), input);\n    }\n\n    #[test(should_fail_with = \"N must be a multiple of 31\")]\n    unconstrained fn bytes_to_fields_input_length_not_multiple_of_31() {\n        // Try to convert 32 bytes (not a multiple of 31) to fields\n        let _fields = bytes_to_fields([0; 32]);\n    }\n\n}\n"
        },
        "269": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/utils/conversion/fields_to_bytes.nr",
            "source": "// These functions are used to facilitate the conversion of log plaintext represented as fields into bytes and back.\n//\n// `fields_to_bytes` uses fixed-size arrays since encryption contexts have compile-time size information.\n// `fields_from_bytes` uses BoundedVec for flexibility in unconstrained contexts where sizes are dynamic.\n//\n// Together they provide bidirectional conversion between fields and bytes.\n\n/// Converts an input array of fields into a single array of bytes. Use `fields_from_bytes` to obtain the original\n/// field array. Each field is converted to a 32-byte big-endian array.\n///\n/// For example, if you have a field array [123, 456], it will be converted to a 64-byte array:\n/// [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,123,  // First field (32 bytes)\n/// 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,200]  // Second field (32 bytes)\n///\n/// Since a field is ~254 bits, you'll end up with a subtle 2-bit \"gap\" at the big end, every 32 bytes. Be careful that\n/// such a gap doesn't leak information! This could happen if you for example expected the output to be\n/// indistinguishable from random bytes.\npub fn fields_to_bytes<let N: u32>(fields: [Field; N]) -> [u8; 32 * N] {\n    let mut bytes = [0; 32 * N];\n\n    for i in 0..N {\n        let field_as_bytes: [u8; 32] = fields[i].to_be_bytes();\n\n        for j in 0..32 {\n            bytes[i * 32 + j] = field_as_bytes[j];\n        }\n    }\n\n    bytes\n}\n\n/// Converts an input BoundedVec of bytes into a BoundedVec of fields. Arbitrary byte arrays are not allowed: this is\n/// assumed to be an array obtained via `fields_to_bytes`, i.e. one that actually represents fields. To convert a byte\n/// array into Fields, use `bytes_to_fields`.\n///\n/// The input bytes are chunked into chunks of 32 bytes. Each 32-byte chunk is viewed as big-endian, and is converted\n/// into a Field. For example, [1, 10, 3, ..., 0] (32 bytes) is encoded as [1 * 256^31 + 10 * 256^30 + 3 * 256^29 + ...\n/// + 0] Note 1: N must be a multiple of 32 bytes Note 2: The max value check code was taken from\n/// std::field::to_be_bytes function.\npub fn fields_from_bytes<let N: u32>(bytes: BoundedVec<u8, N>) -> BoundedVec<Field, N / 32> {\n    // Assert that input length is a multiple of 32\n    assert(bytes.len() % 32 == 0, \"Input length must be a multiple of 32\");\n\n    try_fields_from_bytes(bytes).expect(f\"Value does not fit in field\")\n}\n\n/// Converts a single 32-byte big-endian chunk (starting at `offset`) into a Field, returning\n/// `Option::none()` if the chunk's value is >= the field modulus.\nfn try_field_from_be_bytes<let N: u32>(bytes: BoundedVec<u8, N>, offset: u32) -> Option<Field> {\n    let p = std::field::modulus_be_bytes();\n    let mut field = 0;\n    // Field arithmetic silently wraps values >= the modulus, so we compare each 32-byte chunk against\n    // the modulus byte-by-byte (big-endian, most significant first). The first byte that differs\n    // determines the result: if our byte is smaller we're valid, if larger we've overflowed.\n    // cmp tracks the result: 0 = equal so far, 1 = less than modulus, 2 = exceeds modulus.\n    let mut cmp: u8 = 0;\n    for j in 0..32 {\n        let byte = bytes.get(offset + j);\n        field = field * 256 + byte as Field;\n\n        if cmp == 0 {\n            if byte < p[j] {\n                cmp = 1;\n            } else if byte > p[j] {\n                cmp = 2;\n            }\n        }\n    }\n    if cmp == 1 {\n        Option::some(field)\n    } else {\n        Option::none()\n    }\n}\n\n/// Non-panicking version of `fields_from_bytes`. Returns `Option::none()` if the input\n/// length is not a multiple of 32 or if any 32-byte chunk exceeds the field modulus.\npub(crate) fn try_fields_from_bytes<let N: u32>(bytes: BoundedVec<u8, N>) -> Option<BoundedVec<Field, N / 32>> {\n    if bytes.len() % 32 == 0 {\n        let mut fields = BoundedVec::new();\n        let num_chunks = bytes.len() / 32;\n        for i in 0..num_chunks {\n            let field = try_field_from_be_bytes(bytes, i * 32);\n            if field.is_some() {\n                fields.push(field.unwrap());\n            }\n        }\n        if fields.len() as u32 == num_chunks {\n            Option::some(fields)\n        } else {\n            Option::none()\n        }\n    } else {\n        Option::none()\n    }\n}\n\nmod tests {\n    use crate::utils::array::subarray;\n    use super::{fields_from_bytes, fields_to_bytes, try_fields_from_bytes};\n\n    #[test]\n    unconstrained fn random_fields_to_bytes_and_back(input: [Field; 3]) {\n        // Convert to bytes\n        let bytes = fields_to_bytes(input);\n\n        // At this point in production, the log flies through the system and we get a BoundedVec on the other end. So\n        // we need to convert the field array to a BoundedVec to be able to feed it to the `fields_from_bytes`\n        // function. 113 is an arbitrary max length that is larger than the input length of 96.\n        let bytes_as_bounded_vec = BoundedVec::<_, 113>::from_array(bytes);\n\n        // Convert back to fields\n        let fields_back = fields_from_bytes(bytes_as_bounded_vec);\n\n        // Compare the original input with the round-tripped result\n        assert_eq(fields_back.len(), input.len());\n        assert_eq(subarray(fields_back.storage(), 0), input);\n    }\n\n    #[test(should_fail_with = \"Input length must be a multiple of 32\")]\n    unconstrained fn to_fields_assert() {\n        // 143 is an arbitrary max length that is larger than 33\n        let input = BoundedVec::<_, 143>::from_array([\n            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,\n            30, 31, 32, 33,\n        ]);\n\n        // This should fail since 33 is not a multiple of 32\n        let _fields = fields_from_bytes(input);\n    }\n\n    #[test]\n    unconstrained fn fields_from_bytes_max_value() {\n        let max_field_as_bytes: [u8; 32] = (-1).to_be_bytes();\n        let input = BoundedVec::<_, 32>::from_array(max_field_as_bytes);\n\n        let fields = fields_from_bytes(input);\n\n        // The result should be a largest value storable in a field (-1 since we are modulo-ing)\n        assert_eq(fields.get(0), -1);\n    }\n\n    // In this test we verify that overflow check works by taking the max allowed value, bumping a random byte and then\n    // feeding it to `fields_from_bytes` as input.\n    #[test(should_fail_with = \"Value does not fit in field\")]\n    unconstrained fn fields_from_bytes_overflow(random_value: u8) {\n        let index_of_byte_to_bump = random_value % 32;\n\n        // Obtain the byte representation of the maximum field value\n        let max_field_value_as_bytes: [u8; 32] = (-1).to_be_bytes();\n\n        let byte_to_bump = max_field_value_as_bytes[index_of_byte_to_bump as u32];\n\n        // Skip test execution if the selected byte is already at maximum value (255). This is acceptable since we are\n        // using fuzz testing to generate many test cases.\n        if byte_to_bump != 255 {\n            let mut input = BoundedVec::<_, 32>::from_array(max_field_value_as_bytes);\n\n            // Increment the selected byte to exceed the field's maximum value\n            input.set(index_of_byte_to_bump as u32, byte_to_bump + 1);\n\n            // Attempt the conversion, which should fail due to the value exceeding the field's capacity\n            let _fields = fields_from_bytes(input);\n        }\n    }\n\n    #[test]\n    unconstrained fn try_fields_from_bytes_returns_none_on_unaligned_length() {\n        let input = BoundedVec::<_, 64>::from_parts([0 as u8; 64], 33);\n        assert(try_fields_from_bytes(input).is_none());\n    }\n\n    #[test]\n    unconstrained fn try_fields_from_bytes_returns_none_on_field_modulus() {\n        // The field modulus itself is not a valid field value (it wraps to 0).\n        let p: [u8; 32] = std::field::modulus_be_bytes().as_array();\n        let input = BoundedVec::<u8, 32>::from_array(p);\n        assert(try_fields_from_bytes(input).is_none());\n    }\n\n    #[test]\n    unconstrained fn try_fields_from_bytes_round_trips(input: [Field; 3]) {\n        let bytes = BoundedVec::<_, 113>::from_array(fields_to_bytes(input));\n        let fields = try_fields_from_bytes(bytes).unwrap();\n\n        assert_eq(fields.len(), input.len());\n        assert_eq(subarray(fields.storage(), 0), input);\n    }\n}\n"
        },
        "272": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/aztec-nr/aztec/src/utils/point.nr",
            "source": "use crate::protocol::{point::Point, utils::field::sqrt};\n\n// I am storing the modulus minus 1 divided by 2 here because full modulus would throw \"String literal too large\" error\n// Full modulus is 21888242871839275222246405745257275088548364400416034343698204186575808495617\nglobal BN254_FR_MODULUS_DIV_2: Field = 10944121435919637611123202872628637544274182200208017171849102093287904247808;\n\n/// Returns: true if p.y <= MOD_DIV_2, else false.\npub fn get_sign_of_point(p: Point) -> bool {\n    // We store only a \"sign\" of the y coordinate because the rest can be derived from the x coordinate. To get the\n    // sign we check if the y coordinate is less or equal than the field's modulus minus 1 divided by 2. Ideally we'd\n    // do `y <= MOD_DIV_2`, but there's no `lte` function, so instead we do `!(y > MOD_DIV_2)`, which is equivalent,\n    // and then rewrite that as `!(MOD_DIV_2 < y)`, since we also have no `gt` function.\n    !BN254_FR_MODULUS_DIV_2.lt(p.y)\n}\n\n/// Returns a `Point` in the Grumpkin curve given its x coordinate.\n///\n/// Because not all values in the field are valid x coordinates of points in the curve (i.e. there is no corresponding\n/// y value in the field that satisfies the curve equation), it may not be possible to reconstruct a `Point`.\n/// `Option::none()` is returned in such cases.\npub fn point_from_x_coord(x: Field) -> Option<Point> {\n    // y ^ 2 = x ^ 3 - 17\n    let rhs = x * x * x - 17;\n    sqrt(rhs).map(|y| Point { x, y, is_infinite: false })\n}\n\n/// Returns a `Point` in the Grumpkin curve given its x coordinate and sign for the y coordinate.\n///\n/// Because not all values in the field are valid x coordinates of points in the curve (i.e. there is no corresponding\n/// y value in the field that satisfies the curve equation), it may not be possible to reconstruct a `Point`.\n/// `Option::none()` is returned in such cases.\n///\n/// @param x - The x coordinate of the point @param sign - The \"sign\" of the y coordinate - determines whether y <=\n/// (Fr.MODULUS - 1) / 2\npub fn point_from_x_coord_and_sign(x: Field, sign: bool) -> Option<Point> {\n    // y ^ 2 = x ^ 3 - 17\n    let rhs = x * x * x - 17;\n\n    sqrt(rhs).map(|y| {\n        // If there is a square root, we need to ensure it has the correct \"sign\"\n        let y_is_positive = !BN254_FR_MODULUS_DIV_2.lt(y);\n        let final_y = if y_is_positive == sign { y } else { -y };\n        Point { x, y: final_y, is_infinite: false }\n    })\n}\n\nmod test {\n    use crate::protocol::point::Point;\n    use crate::utils::point::{\n        BN254_FR_MODULUS_DIV_2, get_sign_of_point, point_from_x_coord, point_from_x_coord_and_sign,\n    };\n\n    #[test]\n    unconstrained fn test_point_from_x_coord_and_sign() {\n        // Test positive y coordinate\n        let x = 0x1af41f5de96446dc3776a1eb2d98bb956b7acd9979a67854bec6fa7c2973bd73;\n        let sign = true;\n        let p = point_from_x_coord_and_sign(x, sign).unwrap();\n\n        assert_eq(p.x, x);\n        assert_eq(p.y, 0x07fc22c7f2c7057571f137fe46ea9c95114282bc95d37d71ec4bfb88de457d4a);\n        assert_eq(p.is_infinite, false);\n\n        // Test negative y coordinate\n        let x2 = 0x247371652e55dd74c9af8dbe9fb44931ba29a9229994384bd7077796c14ee2b5;\n        let sign2 = false;\n        let p2 = point_from_x_coord_and_sign(x2, sign2).unwrap();\n\n        assert_eq(p2.x, x2);\n        assert_eq(p2.y, 0x26441aec112e1ae4cee374f42556932001507ad46e255ffb27369c7e3766e5c0);\n        assert_eq(p2.is_infinite, false);\n    }\n\n    #[test]\n    unconstrained fn test_point_from_x_coord_valid() {\n        // x = 8 is a known quadratic residue - should give a valid point\n        let result = point_from_x_coord(Field::from(8));\n        assert(result.is_some());\n\n        let point = result.unwrap();\n        assert_eq(point.x, Field::from(8));\n        // Check curve equation y^2 = x^3 - 17\n        assert_eq(point.y * point.y, point.x * point.x * point.x - 17);\n    }\n\n    #[test]\n    unconstrained fn test_point_from_x_coord_invalid() {\n        // x = 3 is a non-residue for this curve - should give None\n        let x = Field::from(3);\n        let maybe_point = point_from_x_coord(x);\n        assert(maybe_point.is_none());\n    }\n\n    #[test]\n    unconstrained fn test_both_roots_satisfy_curve() {\n        // Derive a point from x = 8 (known to be valid from test_point_from_x_coord_valid)\n        let x: Field = 8;\n        let point = point_from_x_coord(x).unwrap();\n\n        // Check y satisfies curve equation\n        assert_eq(point.y * point.y, x * x * x - 17);\n\n        // Check -y also satisfies curve equation\n        let neg_y = 0 - point.y;\n        assert_eq(neg_y * neg_y, x * x * x - 17);\n\n        // Verify they are different (unless y = 0)\n        assert(point.y != neg_y);\n    }\n\n    #[test]\n    unconstrained fn test_point_from_x_coord_and_sign_invalid() {\n        // x = 3 has no valid point on the curve (from test_point_from_x_coord_invalid)\n        let x = Field::from(3);\n        let result_positive = point_from_x_coord_and_sign(x, true);\n        let result_negative = point_from_x_coord_and_sign(x, false);\n\n        assert(result_positive.is_none());\n        assert(result_negative.is_none());\n    }\n\n    #[test]\n    unconstrained fn test_get_sign_of_point() {\n        // Derive a point from x = 8, then test both possible y values\n        let point = point_from_x_coord(8).unwrap();\n        let neg_point = Point { x: point.x, y: 0 - point.y, is_infinite: false };\n\n        // One should be \"positive\" (y <= MOD_DIV_2) and one \"negative\"\n        let sign1 = get_sign_of_point(point);\n        let sign2 = get_sign_of_point(neg_point);\n        assert(sign1 != sign2);\n\n        // y = 0 should return true (0 <= MOD_DIV_2)\n        let zero_y_point = Point { x: 0, y: 0, is_infinite: false };\n        assert(get_sign_of_point(zero_y_point) == true);\n\n        // y = MOD_DIV_2 should return true (exactly at boundary)\n        let boundary_point = Point { x: 0, y: BN254_FR_MODULUS_DIV_2, is_infinite: false };\n        assert(get_sign_of_point(boundary_point) == true);\n\n        // y = MOD_DIV_2 + 1 should return false (just over boundary)\n        let over_boundary_point = Point { x: 0, y: BN254_FR_MODULUS_DIV_2 + 1, is_infinite: false };\n        assert(get_sign_of_point(over_boundary_point) == false);\n    }\n\n    #[test]\n    unconstrained fn test_point_from_x_coord_zero() {\n        // x = 0: y^2 = 0^3 - 17 = -17, which is not a quadratic residue in BN254 scalar field\n        let result = point_from_x_coord(0);\n        assert(result.is_none());\n    }\n\n    #[test]\n    unconstrained fn test_bn254_fr_modulus_div_2() {\n        // Verify that BN254_FR_MODULUS_DIV_2 == (p - 1) / 2 This means: 2 * BN254_FR_MODULUS_DIV_2 + 1 == p == 0 (in\n        // the field)\n        assert_eq(2 * BN254_FR_MODULUS_DIV_2 + 1, 0);\n    }\n\n}\n"
        },
        "282": {
            "path": "/home/runner/nargo/github.com/noir-lang/poseidon/v0.2.3/src/poseidon2.nr",
            "source": "use std::default::Default;\nuse std::hash::Hasher;\n\ncomptime global RATE: u32 = 3;\n\npub struct Poseidon2 {\n    cache: [Field; 3],\n    state: [Field; 4],\n    cache_size: u32,\n    squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n    #[no_predicates]\n    pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n        Poseidon2::hash_internal(input, message_size)\n    }\n\n    pub(crate) fn new(iv: Field) -> Poseidon2 {\n        let mut result =\n            Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n        result.state[RATE] = iv;\n        result\n    }\n\n    fn perform_duplex(&mut self) {\n        // add the cache into sponge state\n        self.state[0] += self.cache[0];\n        self.state[1] += self.cache[1];\n        self.state[2] += self.cache[2];\n        self.state = crate::poseidon2_permutation(self.state, 4);\n    }\n\n    fn absorb(&mut self, input: Field) {\n        assert(!self.squeeze_mode);\n        if self.cache_size == RATE {\n            // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n            self.perform_duplex();\n            self.cache[0] = input;\n            self.cache_size = 1;\n        } else {\n            // If we're absorbing, and the cache is not full, add the input into the cache\n            self.cache[self.cache_size] = input;\n            self.cache_size += 1;\n        }\n    }\n\n    fn squeeze(&mut self) -> Field {\n        assert(!self.squeeze_mode);\n        // If we're in absorb mode, apply sponge permutation to compress the cache.\n        self.perform_duplex();\n        self.squeeze_mode = true;\n\n        // Pop one item off the top of the permutation and return it.\n        self.state[0]\n    }\n\n    fn hash_internal<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n        let two_pow_64 = 18446744073709551616;\n        let iv: Field = (in_len as Field) * two_pow_64;\n        let mut state = [0; 4];\n        state[RATE] = iv;\n\n        if std::runtime::is_unconstrained() {\n            for i in 0..(in_len / RATE) {\n                state[0] += input[i * RATE];\n                state[1] += input[i * RATE + 1];\n                state[2] += input[i * RATE + 2];\n                state = crate::poseidon2_permutation(state, 4);\n            }\n\n            // handle remaining elements after last full RATE-sized chunk\n            let num_extra_fields = in_len % RATE;\n            if num_extra_fields != 0 {\n                let remainder_start = in_len - num_extra_fields;\n                state[0] += input[remainder_start];\n                if num_extra_fields > 1 {\n                    state[1] += input[remainder_start + 1]\n                }\n            }\n        } else {\n            let mut states: [[Field; 4]; N / RATE + 1] = [[0; 4]; N / RATE + 1];\n            states[0] = state;\n\n            // process all full RATE-sized chunks, storing state after each permutation\n            for chunk_idx in 0..(N / RATE) {\n                for i in 0..RATE {\n                    state[i] += input[chunk_idx * RATE + i];\n                }\n                state = crate::poseidon2_permutation(state, 4);\n                states[chunk_idx + 1] = state;\n            }\n\n            // get state at the last full block before in_len\n            let first_partially_filled_chunk = in_len / RATE;\n            state = states[first_partially_filled_chunk];\n\n            // handle remaining elements after last full RATE-sized chunk\n            let remainder_start = (in_len / RATE) * RATE;\n            for j in 0..RATE {\n                let idx = remainder_start + j;\n                if idx < in_len {\n                    state[j] += input[idx];\n                }\n            }\n        }\n\n        // always run final permutation unless we just completed a full chunk\n        // still need to permute once if in_len is 0\n        if (in_len == 0) | (in_len % RATE != 0) {\n            state = crate::poseidon2_permutation(state, 4)\n        };\n\n        state[0]\n    }\n}\n\npub struct Poseidon2Hasher {\n    _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n    fn finish(self) -> Field {\n        let iv: Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n        let mut sponge = Poseidon2::new(iv);\n        for i in 0..self._state.len() {\n            sponge.absorb(self._state[i]);\n        }\n        sponge.squeeze()\n    }\n\n    fn write(&mut self, input: Field) {\n        self._state = self._state.push_back(input);\n    }\n}\n\nimpl Default for Poseidon2Hasher {\n    fn default() -> Self {\n        Poseidon2Hasher { _state: &[] }\n    }\n}\n"
        },
        "371": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr",
            "source": "mod poseidon2_chunks;\n\nuse crate::{\n    abis::{\n        contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n        function_selector::FunctionSelector, nullifier::Nullifier, private_log::PrivateLog,\n        transaction::tx_request::TxRequest,\n    },\n    address::{AztecAddress, EthAddress},\n    constants::{\n        CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, DOM_SEP__NOTE_HASH_NONCE,\n        DOM_SEP__PRIVATE_LOG_FIRST_FIELD, DOM_SEP__SILOED_NOTE_HASH, DOM_SEP__SILOED_NULLIFIER,\n        DOM_SEP__UNIQUE_NOTE_HASH, FUNCTION_TREE_HEIGHT, NULL_MSG_SENDER_CONTRACT_ADDRESS,\n        TWO_POW_64,\n    },\n    merkle_tree::root_from_sibling_path,\n    messaging::l2_to_l1_message::L2ToL1Message,\n    poseidon2::Poseidon2Sponge,\n    side_effect::{Counted, Scoped},\n    traits::{FromField, Hash, ToField},\n    utils::field::{field_from_bytes, field_from_bytes_32_trunc},\n};\n\npub use poseidon2_chunks::poseidon2_absorb_in_chunks_existing_sponge;\nuse poseidon2_chunks::poseidon2_absorb_in_chunks;\nuse std::embedded_curve_ops::EmbeddedCurveScalar;\n\n// TODO: refactor these into their own files: sha256, poseidon2, some protocol-specific hash computations, some merkle computations.\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n    let sha256_hashed = sha256::digest(bytes_to_hash);\n    let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n    hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n    selector: FunctionSelector,\n    vk_hash: Field,\n    function_leaf_index: Field,\n    function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT],\n) -> Field {\n    let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n    let function_leaf = function_leaf_preimage.hash();\n    root_from_sibling_path(\n        function_leaf,\n        function_leaf_index,\n        function_leaf_sibling_path,\n    )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn compute_siloed_note_hash(contract_address: AztecAddress, note_hash: Field) -> Field {\n    poseidon2_hash_with_separator(\n        [contract_address.to_field(), note_hash],\n        DOM_SEP__SILOED_NOTE_HASH,\n    )\n}\n\n/// Computes unique, siloed note hashes from siloed note hashes.\n///\n/// The protocol injects uniqueness into every note_hash, so that every single note_hash in the\n/// tree is unique. This prevents faerie gold attacks, where a malicious sender could create\n/// two identical note_hashes for a recipient (meaning only one would be nullifiable in future).\n///\n/// Most privacy protocols will inject the note's leaf_index (its position in the Note Hashes Tree)\n/// into the note, but this requires the creator of a note to wait until their tx is included in\n/// a block to know the note's final note hash (the unique, siloed note hash), because inserting\n/// leaves into trees is the job of a block producer.\n///\n/// We took a different approach so that the creator of a note will know each note's unique, siloed\n/// note hash before broadcasting their tx to the network.\n/// (There was also a historical requirement relating to \"chained transactions\" -- a feature that\n/// Aztec Connect had to enable notes to be spent from distinct txs earlier in the same block,\n/// and hence before an archive block root had been established for that block -- but that feature\n/// was abandoned for the Aztec Network for having too many bad tradeoffs).\n///\n/// (\n///   Edit: it is no longer true that all final note_hashes will be known by the creator of a tx\n///   before they send it to the network. If a tx makes public function calls, then _revertible_\n///   note_hashes that are created in private will not be made unique in private by the Reset circuit,\n///   but will instead be made unique by the AVM, because the `note_index_in_tx` will not be known\n///   until the AVM has executed the public functions of the tx. (See an explanation in\n///   reset_output_composer.nr for why).\n///   For some such txs, the `note_index_in_tx` might still be predictable through simulation, but\n///   for txs whose public functions create a varying number of non-revertible notes (determined at\n///   runtime), the `note_index_in_tx` will not be deterministically derivable before submitting the\n///   tx to the network.\n/// )\n///\n/// We use the `first_nullifier` of a tx as a seed of uniqueness. We have a guarantee that there will\n/// always be at least one nullifier per tx, because the init circuit will create one if one isn't\n/// created naturally by any functions of the tx. (Search \"protocol_nullifier\").\n/// We combine the `first_nullifier` with the note's index (its position within this tx's new\n/// note_hashes array) (`note_index_in_tx`) to get a truly unique value to inject into a note, which\n/// we call a `note_nonce`.\npub fn compute_unique_note_hash(note_nonce: Field, siloed_note_hash: Field) -> Field {\n    let inputs = [note_nonce, siloed_note_hash];\n    poseidon2_hash_with_separator(inputs, DOM_SEP__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_note_hash_nonce(first_nullifier_in_tx: Field, note_index_in_tx: u32) -> Field {\n    // Hashing the first nullifier with note index in tx is guaranteed to be unique (because all nullifiers are also\n    // unique).\n    poseidon2_hash_with_separator(\n        [first_nullifier_in_tx, note_index_in_tx as Field],\n        DOM_SEP__NOTE_HASH_NONCE,\n    )\n}\n\npub fn compute_note_nonce_and_unique_note_hash(\n    siloed_note_hash: Field,\n    first_nullifier: Field,\n    note_index_in_tx: u32,\n) -> Field {\n    let note_nonce = compute_note_hash_nonce(first_nullifier, note_index_in_tx);\n    compute_unique_note_hash(note_nonce, siloed_note_hash)\n}\n\npub fn compute_siloed_nullifier(contract_address: AztecAddress, nullifier: Field) -> Field {\n    poseidon2_hash_with_separator(\n        [contract_address.to_field(), nullifier],\n        DOM_SEP__SILOED_NULLIFIER,\n    )\n}\n\npub fn create_protocol_nullifier(tx_request: TxRequest) -> Scoped<Counted<Nullifier>> {\n    // The protocol nullifier is ascribed a special side-effect counter of 1. No other side-effect\n    // can have counter 1 (see `validate_as_first_call` for that assertion).\n    Nullifier { value: tx_request.hash(), note_hash: 0 }.count(1).scope(\n        NULL_MSG_SENDER_CONTRACT_ADDRESS,\n    )\n}\n\npub fn compute_log_tag(raw_tag: Field, dom_sep: u32) -> Field {\n    poseidon2_hash_with_separator([raw_tag], dom_sep)\n}\n\npub fn compute_siloed_private_log_first_field(\n    contract_address: AztecAddress,\n    field: Field,\n) -> Field {\n    poseidon2_hash_with_separator(\n        [contract_address.to_field(), field],\n        DOM_SEP__PRIVATE_LOG_FIRST_FIELD,\n    )\n}\n\npub fn compute_siloed_private_log(contract_address: AztecAddress, log: PrivateLog) -> PrivateLog {\n    let mut fields = log.fields;\n    fields[0] = compute_siloed_private_log_first_field(contract_address, fields[0]);\n    PrivateLog::new(fields, log.length)\n}\n\npub fn compute_contract_class_log_hash(log: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS]) -> Field {\n    poseidon2_hash(log)\n}\n\npub fn compute_app_siloed_secret_key(\n    master_secret_key: EmbeddedCurveScalar,\n    app_address: AztecAddress,\n    key_type_domain_separator: Field,\n) -> Field {\n    poseidon2_hash_with_separator(\n        [master_secret_key.hi, master_secret_key.lo, app_address.to_field()],\n        key_type_domain_separator,\n    )\n}\n\npub fn compute_l2_to_l1_message_hash(\n    message: Scoped<L2ToL1Message>,\n    rollup_version_id: Field,\n    chain_id: Field,\n) -> Field {\n    let contract_address_bytes: [u8; 32] = message.contract_address.to_field().to_be_bytes();\n    let recipient_bytes: [u8; 20] = message.inner.recipient.to_be_bytes();\n    let content_bytes: [u8; 32] = message.inner.content.to_be_bytes();\n    let rollup_version_id_bytes: [u8; 32] = rollup_version_id.to_be_bytes();\n    let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n\n    let mut bytes: [u8; 148] = std::mem::zeroed();\n    for i in 0..32 {\n        bytes[i] = contract_address_bytes[i];\n        bytes[i + 32] = rollup_version_id_bytes[i];\n        // 64 - 84 are for recipient.\n        bytes[i + 84] = chain_id_bytes[i];\n        bytes[i + 116] = content_bytes[i];\n    }\n\n    for i in 0..20 {\n        bytes[64 + i] = recipient_bytes[i];\n    }\n\n    sha256_to_field(bytes)\n}\n\n// TODO: consider a variant that enables domain separation with a u32 (we seem to have standardised u32s for domain separators)\n/// Computes sha256 hash of 2 input fields.\n///\n/// @returns A truncated field (i.e., the first byte is always 0).\npub fn accumulate_sha256(v0: Field, v1: Field) -> Field {\n    // Concatenate two fields into 32 x 2 = 64 bytes\n    let v0_as_bytes: [u8; 32] = v0.to_be_bytes();\n    let v1_as_bytes: [u8; 32] = v1.to_be_bytes();\n    let hash_input_flattened = v0_as_bytes.concat(v1_as_bytes);\n\n    sha256_to_field(hash_input_flattened)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n    poseidon::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(inputs: [Field; N], separator: T) -> Field\nwhere\n    T: ToField,\n{\n    let inputs_with_separator = [separator.to_field()].concat(inputs);\n    poseidon2_hash(inputs_with_separator)\n}\n\n/// Computes a Poseidon2 hash over a dynamic-length subarray of the given input.\n/// Only the first `in_len` fields of `input` are absorbed; any remaining fields are ignored.\n/// The caller is responsible for ensuring that the input is padded with zeros if required.\n#[no_predicates]\npub fn poseidon2_hash_subarray<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n    let mut sponge = poseidon2_absorb_in_chunks(input, in_len);\n    sponge.squeeze()\n}\n\n// This function is  unconstrained because it is intended to be used in unconstrained context only as\n// in constrained contexts it would be too inefficient.\npub unconstrained fn poseidon2_hash_with_separator_bounded_vec<let N: u32, T>(\n    inputs: BoundedVec<Field, N>,\n    separator: T,\n) -> Field\nwhere\n    T: ToField,\n{\n    let in_len = inputs.len() + 1;\n    let iv: Field = (in_len as Field) * TWO_POW_64;\n    let mut sponge = Poseidon2Sponge::new(iv);\n    sponge.absorb(separator.to_field());\n\n    for i in 0..inputs.len() {\n        sponge.absorb(inputs.get(i));\n    }\n\n    sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n    let mut fields = [0; (N + 30) / 31];\n    let mut field_index = 0;\n    let mut current_field = [0; 31];\n    for i in 0..inputs.len() {\n        let index = i % 31;\n        current_field[index] = inputs[i];\n        if index == 30 {\n            fields[field_index] = field_from_bytes(current_field, false);\n            current_field = [0; 31];\n            field_index += 1;\n        }\n    }\n    if field_index != fields.len() {\n        fields[field_index] = field_from_bytes(current_field, false);\n    }\n    poseidon2_hash(fields)\n}\n\n#[test]\nfn subarray_hash_matches_fixed() {\n    let mut values_to_hash = [3; 17];\n    let mut padded = values_to_hash.concat([0; 11]);\n    let subarray_hash = poseidon2_hash_subarray(padded, values_to_hash.len());\n\n    // Hash the entire values_to_hash.\n    let fixed_len_hash = poseidon::poseidon2::Poseidon2::hash(values_to_hash, values_to_hash.len());\n\n    assert_eq(subarray_hash, fixed_len_hash);\n}\n\n#[test]\nfn subarray_hash_matches_variable() {\n    let mut values_to_hash = [3; 17];\n    let mut padded = values_to_hash.concat([0; 11]);\n    let subarray_hash = poseidon2_hash_subarray(padded, values_to_hash.len());\n\n    // Hash up to values_to_hash.len() fields of the padded array.\n    let variable_len_hash = poseidon::poseidon2::Poseidon2::hash(padded, values_to_hash.len());\n\n    assert_eq(subarray_hash, variable_len_hash);\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n    let full_buffer = [\n        0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n        25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n        48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,\n        71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,\n        94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,\n        113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,\n        131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,\n        149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,\n    ];\n    let result = sha256_to_field(full_buffer);\n\n    assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n    // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n    let result_bytes = sha256::digest(full_buffer);\n    let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n    assert(truncated_field == result);\n    let mod_res = result + (result_bytes[31] as Field);\n    assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn unique_siloed_note_hash_matches_typescript() {\n    let inner_note_hash = 1;\n    let contract_address = AztecAddress::from_field(2);\n    let first_nullifier = 3;\n    let note_index_in_tx = 4;\n\n    let siloed_note_hash = compute_siloed_note_hash(contract_address, inner_note_hash);\n    let siloed_note_hash_from_ts =\n        0x1986a4bea3eddb1fff917d629a13e10f63f514f401bdd61838c6b475db949169;\n    assert_eq(siloed_note_hash, siloed_note_hash_from_ts);\n\n    let nonce: Field = compute_note_hash_nonce(first_nullifier, note_index_in_tx);\n    let note_hash_nonce_from_ts =\n        0x28e7799791bf066a57bb51fdd0fbcaf3f0926414314c7db515ea343f44f5d58b;\n    assert_eq(nonce, note_hash_nonce_from_ts);\n\n    let unique_siloed_note_hash_from_nonce = compute_unique_note_hash(nonce, siloed_note_hash);\n    let unique_siloed_note_hash = compute_note_nonce_and_unique_note_hash(\n        siloed_note_hash,\n        first_nullifier,\n        note_index_in_tx,\n    );\n    assert_eq(unique_siloed_note_hash_from_nonce, unique_siloed_note_hash);\n\n    let unique_siloed_note_hash_from_ts =\n        0x29949aef207b715303b24639737c17fbfeb375c1d965ecfa85c7e4f0febb7d16;\n    assert_eq(unique_siloed_note_hash, unique_siloed_note_hash_from_ts);\n}\n\n#[test]\nfn siloed_nullifier_matches_typescript() {\n    let contract_address = AztecAddress::from_field(123);\n    let nullifier = 456;\n\n    let res = compute_siloed_nullifier(contract_address, nullifier);\n\n    let siloed_nullifier_from_ts =\n        0x169b50336c1f29afdb8a03d955a81e485f5ac7d5f0b8065673d1e407e5877813;\n\n    assert_eq(res, siloed_nullifier_from_ts);\n}\n\n#[test]\nfn siloed_private_log_first_field_matches_typescript() {\n    let contract_address = AztecAddress::from_field(123);\n    let field = 456;\n    let res = compute_siloed_private_log_first_field(contract_address, field);\n\n    let siloed_private_log_first_field_from_ts =\n        0x29480984f7b9257fded523d50addbcfc8d1d33adcf2db73ef3390a8fd5cdffaa;\n\n    assert_eq(res, siloed_private_log_first_field_from_ts);\n}\n\n#[test]\nfn empty_l2_to_l1_message_hash_matches_typescript() {\n    // All zeroes\n    let res = compute_l2_to_l1_message_hash(\n        L2ToL1Message { recipient: EthAddress::zero(), content: 0 }.scope(AztecAddress::from_field(\n            0,\n        )),\n        0,\n        0,\n    );\n\n    let empty_l2_to_l1_msg_hash_from_ts =\n        0x003b18c58c739716e76429634a61375c45b3b5cd470c22ab6d3e14cee23dd992;\n\n    assert_eq(res, empty_l2_to_l1_msg_hash_from_ts);\n}\n\n#[test]\nfn l2_to_l1_message_hash_matches_typescript() {\n    let message = L2ToL1Message { recipient: EthAddress::from_field(1), content: 2 }.scope(\n        AztecAddress::from_field(3),\n    );\n    let version = 4;\n    let chainId = 5;\n\n    let hash = compute_l2_to_l1_message_hash(message, version, chainId);\n\n    // The following value was generated by `yarn-project/stdlib/src/hash/hash.test.ts`\n    let l2_to_l1_message_hash_from_ts =\n        0x0081edf209e087ad31b3fd24263698723d57190bd1d6e9fe056fc0c0a68ee661;\n\n    assert_eq(hash, l2_to_l1_message_hash_from_ts);\n}\n\n#[test]\nunconstrained fn poseidon2_hash_with_separator_bounded_vec_matches_non_bounded_vec_version() {\n    let inputs = BoundedVec::<Field, 4>::from_array([1, 2, 3]);\n    let separator = 42;\n\n    // Hash using bounded vec version\n    let bounded_result = poseidon2_hash_with_separator_bounded_vec(inputs, separator);\n\n    // Hash using regular version\n    let regular_result = poseidon2_hash_with_separator([1, 2, 3], separator);\n\n    // Results should match\n    assert_eq(bounded_result, regular_result);\n}\n"
        },
        "373": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/logging.nr",
            "source": "// Log levels matching the JS logger:\n\n// global SILENT_LOG_LEVEL: u8 = 0;\nglobal FATAL_LOG_LEVEL: u8 = 1;\nglobal ERROR_LOG_LEVEL: u8 = 2;\nglobal WARN_LOG_LEVEL: u8 = 3;\nglobal INFO_LOG_LEVEL: u8 = 4;\nglobal VERBOSE_LOG_LEVEL: u8 = 5;\nglobal DEBUG_LOG_LEVEL: u8 = 6;\nglobal TRACE_LOG_LEVEL: u8 = 7;\n\n// --- Per-level log functions (no format args) ---\n\npub fn fatal_log<let N: u32>(msg: str<N>) {\n    fatal_log_format(msg, []);\n}\n\npub fn error_log<let N: u32>(msg: str<N>) {\n    error_log_format(msg, []);\n}\n\npub fn warn_log<let N: u32>(msg: str<N>) {\n    warn_log_format(msg, []);\n}\n\npub fn info_log<let N: u32>(msg: str<N>) {\n    info_log_format(msg, []);\n}\n\npub fn verbose_log<let N: u32>(msg: str<N>) {\n    verbose_log_format(msg, []);\n}\n\npub fn debug_log<let N: u32>(msg: str<N>) {\n    debug_log_format(msg, []);\n}\n\npub fn trace_log<let N: u32>(msg: str<N>) {\n    trace_log_format(msg, []);\n}\n\n// --- Per-level log functions (with format args) ---\n\npub fn fatal_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n    log_format(FATAL_LOG_LEVEL, msg, args);\n}\n\npub fn error_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n    log_format(ERROR_LOG_LEVEL, msg, args);\n}\n\npub fn warn_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n    log_format(WARN_LOG_LEVEL, msg, args);\n}\n\npub fn info_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n    log_format(INFO_LOG_LEVEL, msg, args);\n}\n\npub fn verbose_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n    log_format(VERBOSE_LOG_LEVEL, msg, args);\n}\n\npub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n    log_format(DEBUG_LOG_LEVEL, msg, args);\n}\n\npub fn trace_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n    log_format(TRACE_LOG_LEVEL, msg, args);\n}\n\nfn log_format<let M: u32, let N: u32>(log_level: u8, msg: str<M>, args: [Field; N]) {\n    // Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe\n    // to call.\n    unsafe { log_oracle_wrapper(log_level, msg, args) };\n}\n\nunconstrained fn log_oracle_wrapper<let M: u32, let N: u32>(\n    log_level: u8,\n    msg: str<M>,\n    args: [Field; N],\n) {\n    log_oracle(log_level, msg, N, args);\n}\n\n// While the length parameter might seem unnecessary given that we have N, we keep it around because at the AVM\n// bytecode level we want to support non-comptime-known lengths for such opcodes, even if Noir code will not generally\n// take that route. The AVM transpiler maps this oracle to the DEBUGLOG opcode, which reads the fields size from memory.\n#[oracle(aztec_utl_log)]\nunconstrained fn log_oracle<let M: u32, let N: u32>(\n    log_level: u8,\n    msg: str<M>,\n    length: u32,\n    args: [Field; N],\n) {}\n"
        },
        "392": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/poseidon2.nr",
            "source": "use crate::constants::TWO_POW_64;\nuse crate::traits::{Deserialize, Serialize};\nuse std::meta::derive;\n// NB: This is a clone of noir/noir-repo/noir_stdlib/src/hash/poseidon2.nr\n// It exists as we sometimes need to perform custom absorption, but the stdlib version\n// has a private absorb() method (it's also designed to just be a hasher)\n// Can be removed when standalone noir poseidon lib exists: See noir#6679\n\ncomptime global RATE: u32 = 3;\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct Poseidon2Sponge {\n    pub cache: [Field; 3],\n    pub state: [Field; 4],\n    pub cache_size: u32,\n    pub squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2Sponge {\n    #[no_predicates]\n    pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n        Poseidon2Sponge::hash_internal(input, message_size, message_size != N)\n    }\n\n    pub(crate) fn new(iv: Field) -> Poseidon2Sponge {\n        let mut result =\n            Poseidon2Sponge { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n        result.state[RATE] = iv;\n        result\n    }\n\n    fn perform_duplex(&mut self) {\n        // add the cache into sponge state\n        for i in 0..RATE {\n            // We effectively zero-pad the cache by only adding to the state\n            // cache that is less than the specified `cache_size`\n            if i < self.cache_size {\n                self.state[i] += self.cache[i];\n            }\n        }\n        self.state = std::hash::poseidon2_permutation(self.state, 4);\n    }\n\n    pub fn absorb(&mut self, input: Field) {\n        assert(!self.squeeze_mode);\n        if self.cache_size == RATE {\n            // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n            self.perform_duplex();\n            self.cache[0] = input;\n            self.cache_size = 1;\n        } else {\n            // If we're absorbing, and the cache is not full, add the input into the cache\n            self.cache[self.cache_size] = input;\n            self.cache_size += 1;\n        }\n    }\n\n    pub fn squeeze(&mut self) -> Field {\n        assert(!self.squeeze_mode);\n        // If we're in absorb mode, apply sponge permutation to compress the cache.\n        self.perform_duplex();\n        self.squeeze_mode = true;\n\n        // Pop one item off the top of the permutation and return it.\n        self.state[0]\n    }\n\n    fn hash_internal<let N: u32>(\n        input: [Field; N],\n        in_len: u32,\n        is_variable_length: bool,\n    ) -> Field {\n        let iv: Field = (in_len as Field) * TWO_POW_64;\n        let mut sponge = Poseidon2Sponge::new(iv);\n        for i in 0..input.len() {\n            if i < in_len {\n                sponge.absorb(input[i]);\n            }\n        }\n\n        sponge.squeeze()\n    }\n}\n"
        },
        "411": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/traits/to_field.nr",
            "source": "use crate::utils::field::field_from_bytes;\n\npub trait ToField {\n    fn to_field(self) -> Field;\n}\n\nimpl ToField for Field {\n    #[inline_always]\n    fn to_field(self) -> Field {\n        self\n    }\n}\n\nimpl ToField for bool {\n    #[inline_always]\n    fn to_field(self) -> Field {\n        self as Field\n    }\n}\nimpl ToField for u1 {\n    #[inline_always]\n    fn to_field(self) -> Field {\n        self as Field\n    }\n}\nimpl ToField for u8 {\n    #[inline_always]\n    fn to_field(self) -> Field {\n        self as Field\n    }\n}\nimpl ToField for u16 {\n    fn to_field(self) -> Field {\n        self as Field\n    }\n}\nimpl ToField for u32 {\n    #[inline_always]\n    fn to_field(self) -> Field {\n        self as Field\n    }\n}\nimpl ToField for u64 {\n    #[inline_always]\n    fn to_field(self) -> Field {\n        self as Field\n    }\n}\nimpl ToField for u128 {\n    #[inline_always]\n    fn to_field(self) -> Field {\n        self as Field\n    }\n}\nimpl<let N: u32> ToField for str<N> {\n    #[inline_always]\n    fn to_field(self) -> Field {\n        assert(N < 32, \"String doesn't fit in a field, consider using Serialize instead\");\n        field_from_bytes(self.as_bytes(), true)\n    }\n}\n"
        },
        "419": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/types/src/utils/field.nr",
            "source": "pub fn field_from_bytes<let N: u32>(bytes: [u8; N], big_endian: bool) -> Field {\n    assert(bytes.len() < 32, \"field_from_bytes: N must be less than 32\");\n    let mut as_field = 0;\n    let mut offset = 1;\n    for i in 0..N {\n        let mut index = i;\n        if big_endian {\n            index = N - i - 1;\n        }\n        as_field += (bytes[index] as Field) * offset;\n        offset *= 256;\n    }\n\n    as_field\n}\n\n// Convert a 32 byte array to a field element by truncating the final byte\npub fn field_from_bytes_32_trunc(bytes32: [u8; 32]) -> Field {\n    // Convert it to a field element\n    let mut v = 1;\n    let mut high = 0 as Field;\n    let mut low = 0 as Field;\n\n    for i in 0..15 {\n        // covers bytes 16..30 (31 is truncated and ignored)\n        low = low + (bytes32[15 + 15 - i] as Field) * v;\n        v = v * 256;\n        // covers bytes 0..14\n        high = high + (bytes32[14 - i] as Field) * v;\n    }\n    // covers byte 15\n    low = low + (bytes32[15] as Field) * v;\n\n    low + high * v\n}\n\n// TODO to radix returns u8, so we cannot use bigger radixes. It'd be ideal to use a radix of the maximum range-constrained integer noir supports\npub fn full_field_less_than(lhs: Field, rhs: Field) -> bool {\n    lhs.lt(rhs)\n}\n\npub fn full_field_greater_than(lhs: Field, rhs: Field) -> bool {\n    rhs.lt(lhs)\n}\n\npub fn min(f1: Field, f2: Field) -> Field {\n    if f1.lt(f2) {\n        f1\n    } else {\n        f2\n    }\n}\n\n// TODO: write doc-comments and tests for these magic constants.\n\nglobal KNOWN_NON_RESIDUE: Field = 5; // This is a non-residue in Noir's native Field.\nglobal C1: u32 = 28;\nglobal C3: Field = 40770029410420498293352137776570907027550720424234931066070132305055;\nglobal C5: Field = 19103219067921713944291392827692070036145651957329286315305642004821462161904;\n\n// @dev: only use this for _huge_ exponents y, when writing a constrained function.\n// If you're only exponentiating by a small value, first consider writing-out the multiplications by hand.\n// Only after you've measured the gates of that approach, consider using the native Field::pow_32 function.\n// Only if your exponent is larger than 32 bits, resort to using this function.\npub fn pow(x: Field, y: Field) -> Field {\n    let mut r = 1 as Field;\n    let b: [u1; 254] = y.to_le_bits();\n\n    for i in 0..254 {\n        r *= r;\n        r *= (b[254 - 1 - i] as Field) * x + (1 - b[254 - 1 - i] as Field);\n    }\n\n    r\n}\n\n/// Returns Option::some(sqrt) if there is a square root, and Option::none() if there isn't.\npub fn sqrt(x: Field) -> Option<Field> {\n    // Safety: if the hint returns the square root of x, then we simply square it\n    // check the result equals x. If x is not square, we return a value that\n    // enables us to prove that fact (see the `else` clause below).\n    let (is_sq, maybe_sqrt) = unsafe { __sqrt(x) };\n\n    if is_sq {\n        let sqrt = maybe_sqrt;\n        validate_sqrt_hint(x, sqrt);\n        Option::some(sqrt)\n    } else {\n        let not_sqrt_hint = maybe_sqrt;\n        validate_not_sqrt_hint(x, not_sqrt_hint);\n        Option::none()\n    }\n}\n\n// Boolean indicating whether Field element is a square, i.e. whether there exists a y in Field s.t. x = y*y.\nunconstrained fn is_square(x: Field) -> bool {\n    let v = pow(x, -1 / 2);\n    v * (v - 1) == 0\n}\n\n// Tonelli-Shanks algorithm for computing the square root of a Field element.\n// Requires C1 = max{c: 2^c divides (p-1)}, where p is the order of Field\n// as well as C3 = (C2 - 1)/2, where C2 = (p-1)/(2^c1),\n// and C5 = ZETA^C2, where ZETA is a non-square element of Field.\n// These are pre-computed above as globals.\nunconstrained fn tonelli_shanks_sqrt(x: Field) -> Field {\n    let mut z = pow(x, C3);\n    let mut t = z * z * x;\n    z *= x;\n    let mut b = t;\n    let mut c = C5;\n\n    for i in 0..(C1 - 1) {\n        for _j in 1..(C1 - i - 1) {\n            b *= b;\n        }\n\n        z *= if b == 1 { 1 } else { c };\n\n        c *= c;\n\n        t *= if b == 1 { 1 } else { c };\n\n        b = t;\n    }\n\n    z\n}\n\n// NB: this doesn't return an option, because in the case of there _not_ being a square root, we still want to return a field element that allows us to then assert in the _constrained_ sqrt function that there is no sqrt.\nunconstrained fn __sqrt(x: Field) -> (bool, Field) {\n    let is_sq = is_square(x);\n    if is_sq {\n        let sqrt = tonelli_shanks_sqrt(x);\n        (true, sqrt)\n    } else {\n        // Demonstrate that x is not a square (a.k.a. a \"quadratic non-residue\").\n        // Facts:\n        // The Legendre symbol (\"LS\") of x, is x^((p-1)/2) (mod p).\n        // - If x is a square, LS(x) = 1\n        // - If x is not a square, LS(x) = -1\n        // - If x = 0, LS(x) = 0.\n        //\n        // Hence:\n        // sq * sq = sq // 1 * 1 = 1\n        // non-sq * non-sq = sq // -1 * -1 = 1\n        // sq * non-sq = non-sq // -1 * 1 = -1\n        //\n        // See: https://en.wikipedia.org/wiki/Legendre_symbol\n        let demo_x_not_square = x * KNOWN_NON_RESIDUE;\n        let not_sqrt = tonelli_shanks_sqrt(demo_x_not_square);\n        (false, not_sqrt)\n    }\n}\n\nfn validate_sqrt_hint(x: Field, hint: Field) {\n    assert(hint * hint == x, f\"The claimed_sqrt {hint} is not the sqrt of x {x}\");\n}\n\nfn validate_not_sqrt_hint(x: Field, hint: Field) {\n    // We need this assertion, because x = 0 would pass the other assertions in this\n    // function, and we don't want people to be able to prove that 0 is not square!\n    assert(x != 0, \"0 has a square root; you cannot claim it is not square\");\n    // Demonstrate that x is not a square (a.k.a. a \"quadratic non-residue\").\n    //\n    // Facts:\n    // The Legendre symbol (\"LS\") of x, is x^((p-1)/2) (mod p).\n    // - If x is a square, LS(x) = 1\n    // - If x is not a square, LS(x) = -1\n    // - If x = 0, LS(x) = 0.\n    //\n    // Hence:\n    // 1. sq * sq = sq // 1 * 1 = 1\n    // 2. non-sq * non-sq = sq // -1 * -1 = 1\n    // 3. sq * non-sq = non-sq // -1 * 1 = -1\n    //\n    // See: https://en.wikipedia.org/wiki/Legendre_symbol\n    //\n    // We want to demonstrate that this below multiplication falls under bullet-point (2):\n    let demo_x_not_square = x * KNOWN_NON_RESIDUE;\n    // I.e. we want to demonstrate that `demo_x_not_square` has Legendre symbol 1\n    // (i.e. that it is a square), so we prove that it is square below.\n    // Why do we want to prove that it has LS 1?\n    // Well, since it was computed with a known-non-residue, its squareness implies we're\n    // in case 2 (something multiplied by a known-non-residue yielding a result which\n    // has a LS of 1), which implies that x must be a non-square. The unconstrained\n    // function gave us the sqrt of demo_x_not_square, so all we need to do is\n    // assert its squareness:\n    assert(\n        hint * hint == demo_x_not_square,\n        f\"The hint {hint} does not demonstrate that {x} is not a square\",\n    );\n}\n\n#[test]\nunconstrained fn bytes_field_test() {\n    // Tests correctness of field_from_bytes_32_trunc against existing methods\n    // Bytes representing 0x543e0a6642ffeb8039296861765a53407bba62bd1c97ca43374de950bbe0a7\n    let inputs = [\n        84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28,\n        151, 202, 67, 55, 77, 233, 80, 187, 224, 167,\n    ];\n    let field = field_from_bytes(inputs, true);\n    let return_bytes: [u8; 31] = field.to_be_bytes();\n    assert_eq(inputs, return_bytes);\n    // 32 bytes - we remove the final byte, and check it matches the field\n    let inputs2 = [\n        84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28,\n        151, 202, 67, 55, 77, 233, 80, 187, 224, 167, 158,\n    ];\n    let field2 = field_from_bytes_32_trunc(inputs2);\n    let return_bytes2: [u8; 31] = field2.to_be_bytes();\n\n    assert_eq(return_bytes2, return_bytes);\n    assert_eq(field2, field);\n}\n\n#[test]\nunconstrained fn max_field_test() {\n    // Tests the hardcoded value in constants.nr vs underlying modulus\n    // NB: We can't use 0-1 in constants.nr as it will be transpiled incorrectly to ts and sol constants files\n    let max_value = crate::constants::MAX_FIELD_VALUE;\n    assert_eq(max_value, 0 - 1);\n    // modulus == 0 is tested elsewhere, so below is more of a sanity check\n    let max_bytes: [u8; 32] = max_value.to_be_bytes();\n    let mod_bytes = std::field::modulus_be_bytes();\n    for i in 0..31 {\n        assert_eq(max_bytes[i], mod_bytes[i]);\n    }\n    assert_eq(max_bytes[31], mod_bytes[31] - 1);\n}\n\n#[test]\nunconstrained fn sqrt_valid_test() {\n    let x = 16; // examples: 16, 9, 25, 81\n    let result = sqrt(x);\n    assert(result.is_some());\n    assert_eq(result.unwrap() * result.unwrap(), x);\n}\n\n#[test]\nunconstrained fn sqrt_invalid_test() {\n    let x = KNOWN_NON_RESIDUE; // has no square root in the field\n    let result = sqrt(x);\n    assert(result.is_none());\n}\n\n#[test]\nunconstrained fn sqrt_zero_test() {\n    let result = sqrt(0);\n    assert(result.is_some());\n    assert_eq(result.unwrap(), 0);\n}\n\n#[test]\nunconstrained fn sqrt_one_test() {\n    let result = sqrt(1);\n    assert(result.is_some());\n    assert_eq(result.unwrap() * result.unwrap(), 1);\n}\n\n#[test]\nunconstrained fn field_from_bytes_empty_test() {\n    let empty: [u8; 0] = [];\n    let result = field_from_bytes(empty, true);\n    assert_eq(result, 0);\n\n    let result_le = field_from_bytes(empty, false);\n    assert_eq(result_le, 0);\n}\n\n#[test]\nunconstrained fn field_from_bytes_little_endian_test() {\n    // Test little-endian conversion: [0x01, 0x02] should be 0x0201 = 513\n    let bytes = [0x01, 0x02];\n    let result_le = field_from_bytes(bytes, false);\n    assert_eq(result_le, 0x0201);\n\n    // Compare with big-endian: [0x01, 0x02] should be 0x0102 = 258\n    let result_be = field_from_bytes(bytes, true);\n    assert_eq(result_be, 0x0102);\n}\n\n#[test]\nunconstrained fn pow_test() {\n    assert_eq(pow(2, 0), 1);\n    assert_eq(pow(2, 1), 2);\n    assert_eq(pow(2, 10), 1024);\n    assert_eq(pow(3, 5), 243);\n    assert_eq(pow(0, 5), 0);\n    assert_eq(pow(1, 100), 1);\n}\n\n#[test]\nunconstrained fn min_test() {\n    assert_eq(min(5, 10), 5);\n    assert_eq(min(10, 5), 5);\n    assert_eq(min(7, 7), 7);\n    assert_eq(min(0, 1), 0);\n}\n\n#[test]\nunconstrained fn full_field_comparison_test() {\n    assert(full_field_less_than(5, 10));\n    assert(!full_field_less_than(10, 5));\n    assert(!full_field_less_than(5, 5));\n\n    assert(full_field_greater_than(10, 5));\n    assert(!full_field_greater_than(5, 10));\n    assert(!full_field_greater_than(5, 5));\n}\n\n#[test]\nunconstrained fn sqrt_has_two_roots_test() {\n    // Every square has two roots: r and -r (i.e., p - r)\n    // sqrt(16) can return 4 or -4\n    let x = 16;\n    let result = sqrt(x).unwrap();\n    assert(result * result == x);\n    // The other root is -result\n    let other_root = 0 - result;\n    assert(other_root * other_root == x);\n    // Verify they are different (unless x = 0)\n    assert(result != other_root);\n\n    // Same for 9: roots are 3 and -3\n    let y = 9;\n    let result_y = sqrt(y).unwrap();\n    assert(result_y * result_y == y);\n    let other_root_y = 0 - result_y;\n    assert(other_root_y * other_root_y == y);\n    assert(result_y != other_root_y);\n}\n\n#[test]\nunconstrained fn sqrt_negative_one_test() {\n    let x = 0 - 1;\n    let result = sqrt(x);\n    assert(result.unwrap() == 0x30644e72e131a029048b6e193fd841045cea24f6fd736bec231204708f703636);\n}\n\n#[test]\nunconstrained fn validate_sqrt_hint_valid_test() {\n    // 4 is a valid sqrt of 16\n    validate_sqrt_hint(16, 4);\n    // -4 is also a valid sqrt of 16\n    validate_sqrt_hint(16, 0 - 4);\n    // 0 is a valid sqrt of 0\n    validate_sqrt_hint(0, 0);\n    // 1 is a valid sqrt of 1\n    validate_sqrt_hint(1, 1);\n    // -1 is also a valid sqrt of 1\n    validate_sqrt_hint(1, 0 - 1);\n}\n\n#[test(should_fail_with = \"is not the sqrt of x\")]\nunconstrained fn validate_sqrt_hint_invalid_test() {\n    // 5 is not a valid sqrt of 16\n    validate_sqrt_hint(16, 5);\n}\n\n#[test]\nunconstrained fn validate_not_sqrt_hint_valid_test() {\n    // 5 (KNOWN_NON_RESIDUE) is not a square.\n    let x = KNOWN_NON_RESIDUE;\n    let hint = tonelli_shanks_sqrt(x * KNOWN_NON_RESIDUE);\n    validate_not_sqrt_hint(x, hint);\n}\n\n#[test(should_fail_with = \"0 has a square root\")]\nunconstrained fn validate_not_sqrt_hint_zero_test() {\n    // 0 has a square root, so we cannot claim it is not square\n    validate_not_sqrt_hint(0, 0);\n}\n\n#[test(should_fail_with = \"does not demonstrate that\")]\nunconstrained fn validate_not_sqrt_hint_wrong_hint_test() {\n    // Provide a wrong hint for a non-square\n    let x = KNOWN_NON_RESIDUE;\n    validate_not_sqrt_hint(x, 123);\n}\n"
        },
        "425": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/serde/src/reader.nr",
            "source": "pub struct Reader<let N: u32> {\n    data: [Field; N],\n    offset: u32,\n}\n\nimpl<let N: u32> Reader<N> {\n    pub fn new(data: [Field; N]) -> Self {\n        Self { data, offset: 0 }\n    }\n\n    pub fn read(&mut self) -> Field {\n        let result = self.data[self.offset];\n        self.offset += 1;\n        result\n    }\n\n    pub fn read_u32(&mut self) -> u32 {\n        self.read() as u32\n    }\n\n    pub fn read_u64(&mut self) -> u64 {\n        self.read() as u64\n    }\n\n    pub fn read_bool(&mut self) -> bool {\n        self.read() != 0\n    }\n\n    pub fn read_array<let K: u32>(&mut self) -> [Field; K] {\n        let mut result = [0; K];\n        for i in 0..K {\n            result[i] = self.data[self.offset + i];\n        }\n        self.offset += K;\n        result\n    }\n\n    pub fn read_struct<T, let K: u32>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n        let result = deserialise(self.read_array());\n        result\n    }\n\n    pub fn read_struct_array<T, let K: u32, let C: u32>(\n        &mut self,\n        deserialise: fn([Field; K]) -> T,\n        mut result: [T; C],\n    ) -> [T; C] {\n        for i in 0..C {\n            result[i] = self.read_struct(deserialise);\n        }\n        result\n    }\n\n    pub fn peek_offset(&mut self, offset: u32) -> Field {\n        self.data[self.offset + offset]\n    }\n\n    pub fn advance_offset(&mut self, offset: u32) {\n        self.offset += offset;\n    }\n\n    pub fn finish(self) {\n        assert_eq(self.offset, self.data.len(), \"Reader did not read all data\");\n    }\n}\n"
        },
        "426": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/serde/src/serialization.nr",
            "source": "use crate::{reader::Reader, writer::Writer};\n\n// docs:start:serialize\n/// Trait for serializing Noir types into arrays of Fields.\n///\n/// An implementation of the Serialize trait has to follow Noir's intrinsic serialization (each member of a struct\n/// converted directly into one or more Fields without any packing or compression). This trait (and Deserialize) are\n/// typically used to communicate between Noir and TypeScript (via oracles and function arguments).\n///\n/// # On Following Noir's Intrinsic Serialization\n/// When calling a Noir function from TypeScript (TS), first the function arguments are serialized into an array\n/// of fields. This array is then included in the initial witness. Noir's intrinsic serialization is then used\n/// to deserialize the arguments from the witness. When the same Noir function is called from Noir this Serialize trait\n/// is used instead of the serialization in TS. For this reason we need to have a match between TS serialization,\n/// Noir's intrinsic serialization and the implementation of this trait. If there is a mismatch, the function calls\n/// fail with an arguments hash mismatch error message.\n///\n/// # Associated Constants\n/// * `N` - The length of the output Field array, known at compile time\n///\n/// # Example\n/// ```\n/// impl<let N: u32> Serialize for str<N> {\n///     let N: u32 = N;\n///\n///     fn serialize(self) -> [Field; Self::N] {\n///         let mut writer: Writer<Self::N> = Writer::new();\n///         self.stream_serialize(&mut writer);\n///         writer.finish()\n///     }\n///\n///     fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n///         let bytes = self.as_bytes();\n///         for i in 0..bytes.len() {\n///             writer.write(bytes[i] as Field);\n///         }\n///     }\n/// }\n/// ```\n#[derive_via(derive_serialize)]\npub trait Serialize {\n    let N: u32;\n\n    fn serialize(self) -> [Field; Self::N];\n\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>);\n}\n\n/// Generates a `Serialize` trait implementation for a struct type.\n///\n/// # Parameters\n/// - `s`: The struct type definition to generate the implementation for\n///\n/// # Returns\n/// A quoted code block containing the trait implementation\n///\n/// # Example\n/// For a struct defined as:\n/// ```\n/// struct Log<N> {\n///     fields: [Field; N],\n///     length: u32\n/// }\n/// ```\n///\n/// This function generates code equivalent to:\n/// ```\n/// impl<let N: u32> Serialize for Log<N> {\n///     let N: u32 = <[Field; N] as Serialize>::N + <u32 as Serialize>::N;\n///\n///     fn serialize(self) -> [Field; Self::N] {\n///         let mut writer: Writer<Self::N> = Writer::new();\n///         self.stream_serialize(&mut writer);\n///         writer.finish()\n///     }\n///\n///     #[inline_always]\n///     fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n///         Serialize::stream_serialize(self.fields, writer);\n///         Serialize::stream_serialize(self.length, writer);\n///     }\n/// }\n/// ```\npub comptime fn derive_serialize(s: TypeDefinition) -> Quoted {\n    let typ = s.as_type();\n    let nested_struct = typ.as_data_type().unwrap();\n\n    // We care only about the name and type so we drop the last item of the tuple\n    let params = nested_struct.0.fields(nested_struct.1).map(|(name, typ, _)| (name, typ));\n\n    // Generates the generic parameter declarations (to be placed after the `impl` keyword) and the `where` clause\n    // for the `Serialize` trait.\n    let generics_declarations = get_generics_declarations(s);\n    let where_serialize_clause = get_where_trait_clause(s, quote {Serialize});\n\n    let params_len_quote = get_params_len_quote(params);\n\n    let function_body = params\n        .map(|(name, _typ): (Quoted, Type)| {\n            quote {\n                $crate::serialization::Serialize::stream_serialize(self.$name, writer);\n            }\n        })\n        .join(quote {});\n\n    quote {\n        impl$generics_declarations $crate::serialization::Serialize for $typ\n            $where_serialize_clause\n        {\n            let N: u32 = $params_len_quote;\n\n\n            fn serialize(self) -> [Field; Self::N] {\n                let mut writer: $crate::writer::Writer<Self::N> = $crate::writer::Writer::new();\n                $crate::serialization::Serialize::stream_serialize(self, &mut writer);\n                writer.finish()\n            }\n\n\n            #[inline_always]\n             fn stream_serialize<let K: u32>(self, writer: &mut $crate::writer::Writer<K>) {\n                $function_body\n            }\n        }\n    }\n}\n\n// docs:start:deserialize\n/// Trait for deserializing Noir types from arrays of Fields.\n///\n/// An implementation of the Deserialize trait has to follow Noir's intrinsic serialization (each member of a struct\n/// converted directly into one or more Fields without any packing or compression). This trait is typically used when\n/// deserializing return values from function calls in Noir. Since the same function could be called from TypeScript\n/// (TS), in which case the TS deserialization would get used, we need to have a match between the 2.\n///\n/// # Associated Constants\n/// * `N` - The length of the input Field array, known at compile time\n///\n/// # Example\n/// ```\n/// impl<let M: u32> Deserialize for str<M> {\n///     let N: u32 = M;\n///\n///     fn deserialize(fields: [Field; Self::N]) -> Self {\n///         let mut reader = Reader::new(fields);\n///         let result = Self::stream_deserialize(&mut reader);\n///         reader.finish();\n///         result\n///     }\n///\n///     fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n///         let mut bytes = [0 as u8; M];\n///         for i in 0..M {\n///             bytes[i] = reader.read() as u8;\n///         }\n///         str::<M>::from(bytes)\n///     }\n/// }\n/// ```\n#[derive_via(derive_deserialize)]\npub trait Deserialize {\n    let N: u32;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self;\n\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self;\n}\n\n/// Generates a `Deserialize` trait implementation for a given struct `s`.\n///\n/// # Arguments\n/// * `s` - The struct type definition to generate the implementation for\n///\n/// # Returns\n/// A `Quoted` block containing the generated trait implementation\n///\n/// # Requirements\n/// Each struct member type must implement the `Deserialize` trait (it gets used in the generated code).\n///\n/// # Example\n/// For a struct like:\n/// ```\n/// struct MyStruct {\n///     x: AztecAddress,\n///     y: Field,\n/// }\n/// ```\n///\n/// This generates:\n/// ```\n/// impl Deserialize for MyStruct {\n///     let N: u32 = <AztecAddress as Deserialize>::N + <Field as Deserialize>::N;\n///\n///     fn deserialize(fields: [Field; Self::N]) -> Self {\n///         let mut reader = Reader::new(fields);\n///         let result = Self::stream_deserialize(&mut reader);\n///         reader.finish();\n///         result\n///     }\n///\n///     #[inline_always]\n///     fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n///         let x = <AztecAddress as Deserialize>::stream_deserialize(reader);\n///         let y = <Field as Deserialize>::stream_deserialize(reader);\n///         Self { x, y }\n///     }\n/// }\n/// ```\npub comptime fn derive_deserialize(s: TypeDefinition) -> Quoted {\n    let typ = s.as_type();\n    let nested_struct = typ.as_data_type().unwrap();\n    let params = nested_struct.0.fields(nested_struct.1);\n\n    // Generates the generic parameter declarations (to be placed after the `impl` keyword) and the `where` clause\n    // for the `Deserialize` trait.\n    let generics_declarations = get_generics_declarations(s);\n    let where_deserialize_clause = get_where_trait_clause(s, quote {Deserialize});\n\n    // The following will give us:\n    // <type_of_struct_member_1 as Deserialize>::N + <type_of_struct_member_2 as Deserialize>::N + ...\n    // (or 0 if the struct has no members)\n    let right_hand_side_of_definition_of_n = if params.len() > 0 {\n        params\n            .map(|(_, param_type, _): (Quoted, Type, Quoted)| {\n                quote {\n            <$param_type as $crate::serialization::Deserialize>::N\n        }\n            })\n            .join(quote {+})\n    } else {\n        quote {0}\n    };\n\n    // For structs containing a single member, we can enhance performance by directly deserializing the input array,\n    // bypassing the need for loop-based array construction. While this optimization yields significant benefits in\n    // Brillig where the loops are expected to not be optimized, it is not relevant in ACIR where the loops are\n    // expected to be optimized away.\n    let function_body = if params.len() > 1 {\n        // This generates deserialization code for each struct member and concatenates them together.\n        let deserialization_of_struct_members = params\n            .map(|(param_name, param_type, _): (Quoted, Type, Quoted)| {\n                quote {\n                    let $param_name = <$param_type as Deserialize>::stream_deserialize(reader);\n                }\n            })\n            .join(quote {});\n\n        // We join the struct member names with a comma to be used in the `Self { ... }` syntax\n        // This will give us e.g. `a, b, c` for a struct with three fields named `a`, `b`, and `c`.\n        let struct_members = params\n            .map(|(param_name, _, _): (Quoted, Type, Quoted)| quote { $param_name })\n            .join(quote {,});\n\n        quote {\n            $deserialization_of_struct_members\n\n            Self { $struct_members }\n        }\n    } else if params.len() == 1 {\n        let param_name = params[0].0;\n        quote {\n            Self { $param_name: $crate::serialization::Deserialize::stream_deserialize(reader) }\n        }\n    } else {\n        quote {\n            Self {}\n        }\n    };\n\n    quote {\n        impl$generics_declarations $crate::serialization::Deserialize for $typ\n            $where_deserialize_clause\n        {\n            let N: u32 = $right_hand_side_of_definition_of_n;\n\n            fn deserialize(fields: [Field; Self::N]) -> Self {\n                let mut reader = $crate::reader::Reader::new(fields);\n                let result = Self::stream_deserialize(&mut reader);\n                reader.finish();\n                result\n            }\n\n            #[inline_always]\n            fn stream_deserialize<let K: u32>(reader: &mut $crate::reader::Reader<K>) -> Self {\n                $function_body\n            }\n        }\n    }\n}\n\n/// Generates a quoted expression that computes the total serialized length of function parameters.\n///\n/// # Parameters\n/// * `params` - An array of tuples where each tuple contains a quoted parameter name and its Type. The type needs\n///              to implement the Serialize trait.\n///\n/// # Returns\n/// A quoted expression that evaluates to:\n/// * `0` if there are no parameters\n/// * `(<type1 as Serialize>::N + <type2 as Serialize>::N + ...)` for one or more parameters\ncomptime fn get_params_len_quote(params: [(Quoted, Type)]) -> Quoted {\n    if params.len() == 0 {\n        quote { 0 }\n    } else {\n        let params_quote_without_parentheses = params\n            .map(|(_, param_type): (Quoted, Type)| {\n                quote {\n                    <$param_type as $crate::serialization::Serialize>::N\n                }\n            })\n            .join(quote {+});\n        quote { ($params_quote_without_parentheses) }\n    }\n}\n\ncomptime fn get_generics_declarations(s: TypeDefinition) -> Quoted {\n    let generics = s.generics();\n\n    if generics.len() > 0 {\n        let generics_declarations_items = generics\n            .map(|(name, maybe_integer_typ)| {\n                // The second item in the generics tuple is an Option of an integer type that is Some only if\n                // the generic is numeric.\n                if maybe_integer_typ.is_some() {\n                    // The generic is numeric, so we return a quote defined as e.g. \"let N: u32\"\n                    let integer_type = maybe_integer_typ.unwrap();\n                    quote {let $name: $integer_type}\n                } else {\n                    // The generic is not numeric, so we return a quote containing the name of the generic (e.g. \"T\")\n                    quote {$name}\n                }\n            })\n            .join(quote {,});\n        quote {<$generics_declarations_items>}\n    } else {\n        // The struct doesn't have any generics defined, so we just return an empty quote.\n        quote {}\n    }\n}\n\ncomptime fn get_where_trait_clause(s: TypeDefinition, trait_name: Quoted) -> Quoted {\n    let generics = s.generics();\n\n    // The second item in the generics tuple is an Option of an integer type that is Some only if the generic is\n    // numeric.\n    let non_numeric_generics =\n        generics.filter(|(_, maybe_integer_typ)| maybe_integer_typ.is_none());\n\n    if non_numeric_generics.len() > 0 {\n        let non_numeric_generics_declarations =\n            non_numeric_generics.map(|(name, _)| quote {$name: $trait_name}).join(quote {,});\n        quote {where $non_numeric_generics_declarations}\n    } else {\n        // There are no non-numeric generics, so we return an empty quote.\n        quote {}\n    }\n}\n"
        },
        "428": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/serde/src/type_impls.nr",
            "source": "use crate::{reader::Reader, serialization::{Deserialize, Serialize}, writer::Writer};\nuse std::embedded_curve_ops::EmbeddedCurvePoint;\nuse std::embedded_curve_ops::EmbeddedCurveScalar;\n\nglobal U1_SERIALIZED_LEN: u32 = 1;\nglobal BOOL_SERIALIZED_LEN: u32 = 1;\nglobal U8_SERIALIZED_LEN: u32 = 1;\nglobal U16_SERIALIZED_LEN: u32 = 1;\nglobal U32_SERIALIZED_LEN: u32 = 1;\nglobal U64_SERIALIZED_LEN: u32 = 1;\nglobal U128_SERIALIZED_LEN: u32 = 1;\nglobal FIELD_SERIALIZED_LEN: u32 = 1;\nglobal I8_SERIALIZED_LEN: u32 = 1;\nglobal I16_SERIALIZED_LEN: u32 = 1;\nglobal I32_SERIALIZED_LEN: u32 = 1;\nglobal I64_SERIALIZED_LEN: u32 = 1;\n\nimpl Serialize for bool {\n    let N: u32 = BOOL_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as Field);\n    }\n}\n\nimpl Deserialize for bool {\n    let N: u32 = BOOL_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> bool {\n        reader.read() != 0\n    }\n}\n\nimpl Serialize for u1 {\n    let N: u32 = U1_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as Field);\n    }\n}\n\nimpl Deserialize for u1 {\n    let N: u32 = U1_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u1\n    }\n}\n\nimpl Serialize for u8 {\n    let N: u32 = U8_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as Field);\n    }\n}\n\nimpl Deserialize for u8 {\n    let N: u32 = U8_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u8\n    }\n}\n\nimpl Serialize for u16 {\n    let N: u32 = U16_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as Field);\n    }\n}\n\nimpl Deserialize for u16 {\n    let N: u32 = U16_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u16\n    }\n}\n\nimpl Serialize for u32 {\n    let N: u32 = U32_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as Field);\n    }\n}\n\nimpl Deserialize for u32 {\n    let N: u32 = U32_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u32\n    }\n}\n\nimpl Serialize for u64 {\n    let N: u32 = U64_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as Field);\n    }\n}\n\nimpl Deserialize for u64 {\n    let N: u32 = U64_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u64\n    }\n}\n\nimpl Serialize for u128 {\n    let N: u32 = U128_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as Field);\n    }\n}\n\nimpl Deserialize for u128 {\n    let N: u32 = U128_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u128\n    }\n}\n\nimpl Serialize for Field {\n    let N: u32 = FIELD_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self);\n    }\n}\n\nimpl Deserialize for Field {\n    let N: u32 = FIELD_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read()\n    }\n}\n\nimpl Serialize for i8 {\n    let N: u32 = I8_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as u8 as Field);\n    }\n}\n\nimpl Deserialize for i8 {\n    let N: u32 = I8_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u8 as i8\n    }\n}\n\nimpl Serialize for i16 {\n    let N: u32 = I16_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as u16 as Field);\n    }\n}\n\nimpl Deserialize for i16 {\n    let N: u32 = I16_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u16 as i16\n    }\n}\n\nimpl Serialize for i32 {\n    let N: u32 = I32_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as u32 as Field);\n    }\n}\n\nimpl Deserialize for i32 {\n    let N: u32 = I32_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u32 as i32\n    }\n}\n\nimpl Serialize for i64 {\n    let N: u32 = I64_SERIALIZED_LEN;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self as u64 as Field);\n    }\n}\n\nimpl Deserialize for i64 {\n    let N: u32 = I64_SERIALIZED_LEN;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        reader.read() as u64 as i64\n    }\n}\n\nimpl<T, let M: u32> Serialize for [T; M]\nwhere\n    T: Serialize,\n{\n    let N: u32 = <T as Serialize>::N * M;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        for i in 0..M {\n            self[i].stream_serialize(writer);\n        }\n    }\n}\n\nimpl<T, let M: u32> Deserialize for [T; M]\nwhere\n    T: Deserialize,\n{\n    let N: u32 = <T as Deserialize>::N * M;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        let mut result: [T; M] = std::mem::zeroed();\n        for i in 0..M {\n            result[i] = T::stream_deserialize(reader);\n        }\n        result\n    }\n}\n\nimpl<T> Serialize for Option<T>\nwhere\n    T: Serialize,\n{\n    let N: u32 = <T as Serialize>::N + 1;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write_bool(self.is_some());\n        if self.is_some() {\n            self.unwrap_unchecked().stream_serialize(writer);\n        } else {\n            writer.advance_offset(<T as Serialize>::N);\n        }\n    }\n}\n\nimpl<T> Deserialize for Option<T>\nwhere\n    T: Deserialize,\n{\n    let N: u32 = <T as Deserialize>::N + 1;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        if reader.read_bool() {\n            Option::some(<T as Deserialize>::stream_deserialize(reader))\n        } else {\n            reader.advance_offset(<T as Deserialize>::N);\n            Option::none()\n        }\n    }\n}\n\nglobal SCALAR_SIZE: u32 = 2;\n\nimpl Serialize for EmbeddedCurveScalar {\n\n    let N: u32 = SCALAR_SIZE;\n\n    fn serialize(self) -> [Field; SCALAR_SIZE] {\n        [self.lo, self.hi]\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self.lo);\n        writer.write(self.hi);\n    }\n}\n\nimpl Deserialize for EmbeddedCurveScalar {\n    let N: u32 = SCALAR_SIZE;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        Self { lo: fields[0], hi: fields[1] }\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        Self { lo: reader.read(), hi: reader.read() }\n    }\n}\n\nglobal POINT_SIZE: u32 = 3;\n\nimpl Serialize for EmbeddedCurvePoint {\n    let N: u32 = POINT_SIZE;\n\n    fn serialize(self) -> [Field; Self::N] {\n        [self.x, self.y, self.is_infinite as Field]\n    }\n\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        writer.write(self.x);\n        writer.write(self.y);\n        writer.write(self.is_infinite as Field);\n    }\n}\n\nimpl Deserialize for EmbeddedCurvePoint {\n    let N: u32 = POINT_SIZE;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        Self { x: fields[0], y: fields[1], is_infinite: fields[2] != 0 }\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        Self { x: reader.read(), y: reader.read(), is_infinite: reader.read_bool() }\n    }\n}\n\nimpl<let M: u32> Deserialize for str<M> {\n    let N: u32 = M;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        let u8_arr = <[u8; Self::N] as Deserialize>::stream_deserialize(reader);\n        str::<Self::N>::from(u8_arr)\n    }\n}\n\nimpl<let M: u32> Serialize for str<M> {\n    let N: u32 = M;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        self.as_bytes().stream_serialize(writer);\n    }\n}\n\n// Note: Not deriving this because it's not supported to call derive_serialize on a \"remote\" struct (and it will never\n// be supported).\nimpl<T, let M: u32> Deserialize for BoundedVec<T, M>\nwhere\n    T: Deserialize,\n{\n    let N: u32 = <T as Deserialize>::N * M + 1;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        let mut new_bounded_vec: BoundedVec<T, M> = BoundedVec::new();\n        let payload_len = Self::N - 1;\n\n        // Length is stored in the last field as we need to match intrinsic Noir serialization and the `len` struct\n        // field is after `storage` struct field (see `bounded_vec.nr` in noir-stdlib)\n        let len = reader.peek_offset(payload_len) as u32;\n\n        for i in 0..M {\n            if i < len {\n                new_bounded_vec.push(<T as Deserialize>::stream_deserialize(reader));\n            }\n        }\n\n        // +1 for the length of the BoundedVec\n        reader.advance_offset((M - len) * <T as Deserialize>::N + 1);\n\n        new_bounded_vec\n    }\n}\n\n// This may cause issues if used as program input, because noir disallows empty arrays for program input.\n// I think this is okay because I don't foresee a unit type being used as input. But leaving this comment as a hint\n// if someone does run into this in the future.\nimpl Deserialize for () {\n    let N: u32 = 0;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(_reader: &mut Reader<K>) -> Self {\n        ()\n    }\n}\n\n// Note: Not deriving this because it's not supported to call derive_serialize on a \"remote\" struct (and it will never\n// be supported).\nimpl<T, let M: u32> Serialize for BoundedVec<T, M>\nwhere\n    T: Serialize,\n{\n    let N: u32 = <T as Serialize>::N * M + 1; // +1 for the length of the BoundedVec\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: Writer<Self::N> = Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        self.storage().stream_serialize(writer);\n        // Length is stored in the last field as we need to match intrinsic Noir serialization and the `len` struct\n        // field is after `storage` struct field (see `bounded_vec.nr` in noir-stdlib)\n        writer.write_u32(self.len() as u32);\n    }\n}\n\n// Create a slice of the given length with each element made from `f(i)` where `i` is the current index\ncomptime fn make_slice<Env, T>(length: u32, f: fn[Env](u32) -> T) -> [T] {\n    let mut slice = @[];\n    for i in 0..length {\n        slice = slice.push_back(f(i));\n    }\n    slice\n}\n\n// Implements Serialize and Deserialize for an arbitrary tuple type\ncomptime fn impl_serialize_for_tuple(_m: Module, length: u32) -> Quoted {\n    // `T0`, `T1`, `T2`\n    let type_names = make_slice(length, |i| f\"T{i}\".quoted_contents());\n\n    // `result0`, `result1`, `result2`\n    let result_names = make_slice(length, |i| f\"result{i}\".quoted_contents());\n\n    // `T0, T1, T2`\n    let field_generics = type_names.join(quote [,]);\n\n    // `<T0 as Serialize>::N + <T1 as Serialize>::N + <T2 as Serialize>::N`\n    let full_size_serialize = type_names\n        .map(|type_name| quote {\n        <$type_name as Serialize>::N\n    })\n        .join(quote [+]);\n\n    // `<T0 as Deserialize>::N + <T1 as Deserialize>::N + <T2 as Deserialize>::N`\n    let full_size_deserialize = type_names\n        .map(|type_name| quote {\n        <$type_name as Deserialize>::N\n    })\n        .join(quote [+]);\n\n    // `T0: Serialize, T1: Serialize, T2: Serialize,`\n    let serialize_constraints = type_names\n        .map(|field_name| quote {\n        $field_name: Serialize,\n    })\n        .join(quote []);\n\n    // `T0: Deserialize, T1: Deserialize, T2: Deserialize,`\n    let deserialize_constraints = type_names\n        .map(|field_name| quote {\n        $field_name: Deserialize,\n    })\n        .join(quote []);\n\n    // Statements to serialize each field\n    let serialized_fields = type_names\n        .mapi(|i, _type_name| quote {\n            $crate::serialization::Serialize::stream_serialize(self.$i, writer);\n    })\n        .join(quote []);\n\n    // Statements to deserialize each field\n    let deserialized_fields = type_names\n        .mapi(|i, type_name| {\n            let result_name = result_names[i];\n            quote {\n            let $result_name = <$type_name as $crate::serialization::Deserialize>::stream_deserialize(reader);\n        }\n        })\n        .join(quote []);\n    let deserialize_results = result_names.join(quote [,]);\n\n    quote {\n        impl<$field_generics> Serialize for ($field_generics) where $serialize_constraints {\n            let N: u32 = $full_size_serialize;\n\n            fn serialize(self) -> [Field; Self::N] {\n                let mut writer: $crate::writer::Writer<Self::N> = $crate::writer::Writer::new();\n                self.stream_serialize(&mut writer);\n                writer.finish()\n            }\n\n            #[inline_always]\n            fn stream_serialize<let K: u32>(self, writer: &mut $crate::writer::Writer<K>) {\n\n                $serialized_fields\n            }\n        }\n\n        impl<$field_generics> Deserialize for ($field_generics) where $deserialize_constraints {\n            let N: u32 = $full_size_deserialize;\n\n            fn deserialize(fields: [Field; Self::N]) -> Self {\n                let mut reader = $crate::reader::Reader::new(fields);\n                let result = Self::stream_deserialize(&mut reader);\n                reader.finish();\n                result\n            }\n    \n            #[inline_always]\n            fn stream_deserialize<let K: u32>(reader: &mut $crate::reader::Reader<K>) -> Self {\n                $deserialized_fields\n                ($deserialize_results)\n            }\n        }\n    }\n}\n\n// Keeping these manual impls. They are more efficient since they do not\n// require copying sub-arrays from any serialized arrays.\nimpl<T1> Serialize for (T1,)\nwhere\n    T1: Serialize,\n{\n    let N: u32 = <T1 as Serialize>::N;\n\n    fn serialize(self) -> [Field; Self::N] {\n        let mut writer: crate::writer::Writer<Self::N> = crate::writer::Writer::new();\n        self.stream_serialize(&mut writer);\n        writer.finish()\n    }\n\n    #[inline_always]\n    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n        self.0.stream_serialize(writer);\n    }\n}\n\nimpl<T1> Deserialize for (T1,)\nwhere\n    T1: Deserialize,\n{\n    let N: u32 = <T1 as Deserialize>::N;\n\n    fn deserialize(fields: [Field; Self::N]) -> Self {\n        let mut reader = crate::reader::Reader::new(fields);\n        let result = Self::stream_deserialize(&mut reader);\n        reader.finish();\n        result\n    }\n\n    #[inline_always]\n    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n        (<T1 as Deserialize>::stream_deserialize(reader),)\n    }\n}\n\n#[impl_serialize_for_tuple(2)]\n#[impl_serialize_for_tuple(3)]\n#[impl_serialize_for_tuple(4)]\n#[impl_serialize_for_tuple(5)]\n#[impl_serialize_for_tuple(6)]\nmod impls {\n    use crate::serialization::{Deserialize, Serialize};\n}\n\n#[test]\nunconstrained fn bounded_vec_serialization() {\n    // Test empty BoundedVec\n    let empty_vec: BoundedVec<Field, 3> = BoundedVec::from_array([]);\n    let serialized = empty_vec.serialize();\n    let deserialized = BoundedVec::<Field, 3>::deserialize(serialized);\n    assert_eq(empty_vec, deserialized);\n    assert_eq(deserialized.len(), 0);\n\n    // Test partially filled BoundedVec\n    let partial_vec: BoundedVec<[u32; 2], 3> = BoundedVec::from_array([[1, 2]]);\n    let serialized = partial_vec.serialize();\n    let deserialized = BoundedVec::<[u32; 2], 3>::deserialize(serialized);\n    assert_eq(partial_vec, deserialized);\n    assert_eq(deserialized.len(), 1);\n    assert_eq(deserialized.get(0), [1, 2]);\n\n    // Test full BoundedVec\n    let full_vec: BoundedVec<[u32; 2], 3> = BoundedVec::from_array([[1, 2], [3, 4], [5, 6]]);\n    let serialized = full_vec.serialize();\n    let deserialized = BoundedVec::<[u32; 2], 3>::deserialize(serialized);\n    assert_eq(full_vec, deserialized);\n    assert_eq(deserialized.len(), 3);\n    assert_eq(deserialized.get(0), [1, 2]);\n    assert_eq(deserialized.get(1), [3, 4]);\n    assert_eq(deserialized.get(2), [5, 6]);\n}\n"
        },
        "429": {
            "path": "/home/runner/nargo/github.com/AztecProtocol/aztec-packages/v4.2.0-aztecnr-rc.2/noir-projects/noir-protocol-circuits/crates/serde/src/writer.nr",
            "source": "pub struct Writer<let N: u32> {\n    data: [Field; N],\n    offset: u32,\n}\n\nimpl<let N: u32> Writer<N> {\n    pub fn new() -> Self {\n        Self { data: [0; N], offset: 0 }\n    }\n\n    pub fn write(&mut self, value: Field) {\n        self.data[self.offset] = value;\n        self.offset += 1;\n    }\n\n    pub fn write_u32(&mut self, value: u32) {\n        self.write(value as Field);\n    }\n\n    pub fn write_u64(&mut self, value: u64) {\n        self.write(value as Field);\n    }\n\n    pub fn write_bool(&mut self, value: bool) {\n        self.write(value as Field);\n    }\n\n    pub fn write_array<let K: u32>(&mut self, value: [Field; K]) {\n        for i in 0..K {\n            self.data[i + self.offset] = value[i];\n        }\n        self.offset += K;\n    }\n\n    pub fn write_struct<T, let K: u32>(&mut self, value: T, serialize: fn(T) -> [Field; K]) {\n        self.write_array(serialize(value));\n    }\n\n    pub fn write_struct_array<T, let K: u32, let C: u32>(\n        &mut self,\n        value: [T; C],\n        serialize: fn(T) -> [Field; K],\n    ) {\n        for i in 0..C {\n            self.write_struct(value[i], serialize);\n        }\n    }\n\n    pub fn advance_offset(&mut self, offset: u32) {\n        self.offset += offset;\n    }\n\n    pub fn finish(self) -> [Field; N] {\n        assert_eq(self.offset, self.data.len(), \"Writer did not write all data\");\n        self.data\n    }\n}\n"
        },
        "446": {
            "path": "/home/runner/work/aztec-standards/aztec-standards/src/generic_proxy/src/main.nr",
            "source": "use aztec::macros::aztec;\n\n#[aztec]\npub contract GenericProxy {\n    use aztec::{\n        macros::functions::external,\n        protocol::{abis::function_selector::FunctionSelector, address::AztecAddress},\n    };\n\n    #[external(\"private\")]\n    fn forward_private_0(target: AztecAddress, selector: FunctionSelector) {\n        let _ = self.context.call_private_function_no_args(target, selector);\n    }\n\n    #[external(\"private\")]\n    fn forward_private_1(target: AztecAddress, selector: FunctionSelector, args: [Field; 1]) {\n        let _ = self.context.call_private_function(target, selector, args);\n    }\n\n    #[external(\"private\")]\n    fn forward_private_2(target: AztecAddress, selector: FunctionSelector, args: [Field; 2]) {\n        let _ = self.context.call_private_function(target, selector, args);\n    }\n\n    #[external(\"private\")]\n    fn forward_private_3(target: AztecAddress, selector: FunctionSelector, args: [Field; 3]) {\n        let _ = self.context.call_private_function(target, selector, args);\n    }\n\n    #[external(\"private\")]\n    fn forward_private_4(target: AztecAddress, selector: FunctionSelector, args: [Field; 4]) {\n        let _ = self.context.call_private_function(target, selector, args);\n    }\n\n    #[external(\"private\")]\n    fn forward_private_4_and_return(\n        target: AztecAddress,\n        selector: FunctionSelector,\n        args: [Field; 4],\n    ) -> Field {\n        let returns: Field =\n            self.context.call_private_function(target, selector, args).get_preimage();\n        returns\n    }\n\n    #[external(\"private\")]\n    fn forward_private_5(target: AztecAddress, selector: FunctionSelector, args: [Field; 5]) {\n        let _ = self.context.call_private_function(target, selector, args);\n    }\n\n    #[external(\"private\")]\n    fn forward_private_6(target: AztecAddress, selector: FunctionSelector, args: [Field; 6]) {\n        let _ = self.context.call_private_function(target, selector, args);\n    }\n\n    #[external(\"private\")]\n    fn forward_private_7(target: AztecAddress, selector: FunctionSelector, args: [Field; 7]) {\n        let _ = self.context.call_private_function(target, selector, args);\n    }\n\n    #[external(\"private\")]\n    fn forward_private_8(target: AztecAddress, selector: FunctionSelector, args: [Field; 8]) {\n        let _ = self.context.call_private_function(target, selector, args);\n    }\n}\n"
        }
    },
    "functions": [
        {
            "abi": {
                "error_types": {
                    "12327971061804302172": {
                        "error_kind": "fmtstring",
                        "item_types": [],
                        "length": 98
                    },
                    "14990209321349310352": {
                        "error_kind": "string",
                        "string": "attempt to add with overflow"
                    },
                    "15764276373176857197": {
                        "error_kind": "string",
                        "string": "Stack too deep"
                    }
                },
                "parameters": [
                    {
                        "name": "inputs",
                        "type": {
                            "fields": [
                                {
                                    "name": "call_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "msg_sender",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "contract_address",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "function_selector",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                }
                                            },
                                            {
                                                "name": "is_static_call",
                                                "type": {
                                                    "kind": "boolean"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::call_context::CallContext"
                                    }
                                },
                                {
                                    "name": "anchor_block_header",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "last_archive",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "root",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "next_available_leaf_index",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                }
                                            },
                                            {
                                                "name": "state",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "l1_to_l2_message_tree",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "root",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "next_available_leaf_index",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                            }
                                                        },
                                                        {
                                                            "name": "partial",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "note_hash_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "nullifier_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "public_data_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                                }
                                            },
                                            {
                                                "name": "sponge_blob_hash",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "global_variables",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "chain_id",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "version",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "block_number",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "slot_number",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "timestamp",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 64
                                                            }
                                                        },
                                                        {
                                                            "name": "coinbase",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "fee_recipient",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "gas_fees",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                                }
                                            },
                                            {
                                                "name": "total_fees",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "total_mana_used",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                    }
                                },
                                {
                                    "name": "tx_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "chain_id",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "version",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "gas_settings",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "teardown_gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_priority_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                    }
                                },
                                {
                                    "name": "start_side_effect_counter",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "target",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "field"
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "selector",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        },
                        "visibility": "private"
                    }
                ],
                "return_type": {
                    "abi_type": {
                        "fields": [
                            {
                                "name": "call_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "function_selector",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                                }
                            },
                            {
                                "name": "args_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "returns_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "anchor_block_header",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "last_archive",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "root",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "next_available_leaf_index",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                            }
                                        },
                                        {
                                            "name": "state",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "l1_to_l2_message_tree",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "root",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "next_available_leaf_index",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                        }
                                                    },
                                                    {
                                                        "name": "partial",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "note_hash_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "nullifier_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "public_data_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                            }
                                        },
                                        {
                                            "name": "sponge_blob_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "global_variables",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "chain_id",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "version",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "block_number",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    },
                                                    {
                                                        "name": "slot_number",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "timestamp",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 64
                                                        }
                                                    },
                                                    {
                                                        "name": "coinbase",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "fee_recipient",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "gas_fees",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                            }
                                        },
                                        {
                                            "name": "total_fees",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "total_mana_used",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                }
                            },
                            {
                                "name": "tx_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "chain_id",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "version",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "gas_settings",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "teardown_gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_priority_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                }
                            },
                            {
                                "name": "min_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "is_fee_payer",
                                "type": {
                                    "kind": "boolean"
                                }
                            },
                            {
                                "name": "expiration_timestamp",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 64
                                }
                            },
                            {
                                "name": "start_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "end_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_non_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "note_hash_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifier_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "key_validation_requests_and_separators",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "request",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "pk_m",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "x",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "y",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "is_infinite",
                                                                                    "type": {
                                                                                        "kind": "boolean"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "sk_app",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "key_type_domain_separator",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "call_context",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "function_selector",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                                                            }
                                                        },
                                                        {
                                                            "name": "args_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "returns_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "start_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "end_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 32,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "calldata_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_teardown_call_request",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        },
                                        {
                                            "name": "calldata_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                }
                            },
                            {
                                "name": "note_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifiers",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "l2_to_l1_msgs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "recipient",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "content",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_logs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "log",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "fields",
                                                                                    "type": {
                                                                                        "kind": "array",
                                                                                        "length": 16,
                                                                                        "type": {
                                                                                            "kind": "field"
                                                                                        }
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "length",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::log::Log"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash_counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "contract_class_logs_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 1,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "length",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
                    },
                    "visibility": "databus"
                }
            },
            "bytecode": "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",
            "custom_attributes": [
                "abi_private"
            ],
            "debug_symbols": "rZfbbqMwEIbfhetc2DPjU16liiqa0goJkYgmlVZV3n3H2OZQrS1K9yY/JuHLeOa3zXxVr83L/f257d8uH9Xx6at6Gdqua9+fu8u5vrWXnu9+VcJ/SKqO7nGo5DjQ1dHyAPwAsDpKvqYgKogOYoLYIK460qFCEUQGYYhiwSAUhCmGRQdhinnw/6Wwnm9D0/j/XsTJ0V/roelv1bG/d92h+qy7+/ijj2vdj3qrB/5WHKqmf2Vl4FvbNf7qcZifFvlHNdr4sBU0PS4dbAVYiwngbBYAeQBqFQFo5ggI1AqAeQBQAoA2WcC2CCxmAYUcOEgAhzqbA/3bKZTK6FIVDLkJAJK2AqSQKQQpjFggNsdg3JRHK2BOpMR1HmTJTU5PmbR7ggCQKRMACz+hWy8JWfADASYGoZCLeug1o2BKNBpnU0GeQYU4hEmLk4RbxmE3pwO1SekgCfmalMwptZ1SCrM93ToKaQoLBMW8QmgOA41cM2yBIShl1Akn8gxXqIqCVBQ3TwTst82qkFAUKBNCoNvHkL7qgSEV5BkljxqXMkpLf0m3PQw9W1QbuW8qGuzEIJFllCxKRJNFl0fIN4uCLu1e7O5p+wIz19aqH0CI7ARRi+PQbt5+FKi03hRYl59MwaRgUacTHSyv/OxkihBSeoKoxXr5EcRM65avFx7ZnhFE+NfxTuttEAtbqRbKusjQQmN2Kkil9xxpkts1onW7IKQg2Yyvye5xCHs8OUQt5vLdIWj+g0PKEJq8yg4Reh9EwQJid0eyyatlyO+9quaMcG3yp2XpJUibFIXRjtaIEw/rczusmxHfeki2lTT+vGa1UV1Q4ObCJxlkVPAzPIxdyqjkz6LQp4zKPL/ofKcyqo3qwvO+WfFj362MCv5gDP0KxoYFdehYRvU8G3qWUT2PFyS6oCSiyqjg31dYMSpFVVGZ53drMoFPNqoLqkRU301xfAqiYlSKGuNTOmrkqchTvjfzr6Gf9dDWL13js+0Lcu/PKfk8vP25pm9Sr3gdLufm9T40vlCLhpE/n/hNCeRpahvHW+4AdErN43iL50f69PAl/ws=",
            "is_unconstrained": false,
            "name": "forward_private_0",
            "verification_key": "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"
        },
        {
            "abi": {
                "error_types": {
                    "12327971061804302172": {
                        "error_kind": "fmtstring",
                        "item_types": [],
                        "length": 98
                    },
                    "14990209321349310352": {
                        "error_kind": "string",
                        "string": "attempt to add with overflow"
                    },
                    "15764276373176857197": {
                        "error_kind": "string",
                        "string": "Stack too deep"
                    }
                },
                "parameters": [
                    {
                        "name": "inputs",
                        "type": {
                            "fields": [
                                {
                                    "name": "call_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "msg_sender",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "contract_address",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "function_selector",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                }
                                            },
                                            {
                                                "name": "is_static_call",
                                                "type": {
                                                    "kind": "boolean"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::call_context::CallContext"
                                    }
                                },
                                {
                                    "name": "anchor_block_header",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "last_archive",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "root",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "next_available_leaf_index",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                }
                                            },
                                            {
                                                "name": "state",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "l1_to_l2_message_tree",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "root",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "next_available_leaf_index",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                            }
                                                        },
                                                        {
                                                            "name": "partial",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "note_hash_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "nullifier_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "public_data_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                                }
                                            },
                                            {
                                                "name": "sponge_blob_hash",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "global_variables",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "chain_id",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "version",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "block_number",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "slot_number",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "timestamp",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 64
                                                            }
                                                        },
                                                        {
                                                            "name": "coinbase",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "fee_recipient",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "gas_fees",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                                }
                                            },
                                            {
                                                "name": "total_fees",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "total_mana_used",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                    }
                                },
                                {
                                    "name": "tx_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "chain_id",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "version",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "gas_settings",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "teardown_gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_priority_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                    }
                                },
                                {
                                    "name": "start_side_effect_counter",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "target",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "field"
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "selector",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "args",
                        "type": {
                            "kind": "array",
                            "length": 1,
                            "type": {
                                "kind": "field"
                            }
                        },
                        "visibility": "private"
                    }
                ],
                "return_type": {
                    "abi_type": {
                        "fields": [
                            {
                                "name": "call_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "function_selector",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                                }
                            },
                            {
                                "name": "args_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "returns_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "anchor_block_header",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "last_archive",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "root",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "next_available_leaf_index",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                            }
                                        },
                                        {
                                            "name": "state",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "l1_to_l2_message_tree",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "root",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "next_available_leaf_index",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                        }
                                                    },
                                                    {
                                                        "name": "partial",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "note_hash_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "nullifier_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "public_data_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                            }
                                        },
                                        {
                                            "name": "sponge_blob_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "global_variables",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "chain_id",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "version",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "block_number",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    },
                                                    {
                                                        "name": "slot_number",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "timestamp",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 64
                                                        }
                                                    },
                                                    {
                                                        "name": "coinbase",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "fee_recipient",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "gas_fees",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                            }
                                        },
                                        {
                                            "name": "total_fees",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "total_mana_used",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                }
                            },
                            {
                                "name": "tx_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "chain_id",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "version",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "gas_settings",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "teardown_gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_priority_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                }
                            },
                            {
                                "name": "min_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "is_fee_payer",
                                "type": {
                                    "kind": "boolean"
                                }
                            },
                            {
                                "name": "expiration_timestamp",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 64
                                }
                            },
                            {
                                "name": "start_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "end_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_non_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "note_hash_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifier_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "key_validation_requests_and_separators",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "request",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "pk_m",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "x",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "y",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "is_infinite",
                                                                                    "type": {
                                                                                        "kind": "boolean"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "sk_app",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "key_type_domain_separator",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "call_context",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "function_selector",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                                                            }
                                                        },
                                                        {
                                                            "name": "args_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "returns_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "start_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "end_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 32,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "calldata_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_teardown_call_request",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        },
                                        {
                                            "name": "calldata_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                }
                            },
                            {
                                "name": "note_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifiers",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "l2_to_l1_msgs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "recipient",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "content",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_logs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "log",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "fields",
                                                                                    "type": {
                                                                                        "kind": "array",
                                                                                        "length": 16,
                                                                                        "type": {
                                                                                            "kind": "field"
                                                                                        }
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "length",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::log::Log"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash_counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "contract_class_logs_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 1,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "length",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
                    },
                    "visibility": "databus"
                }
            },
            "bytecode": "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",
            "custom_attributes": [
                "abi_private"
            ],
            "debug_symbols": "tZjZbuM4EEX/Rc96YC1cyr/SMAInUTcMGE7gthsYBPn3KYqklgDkKHbPi6+W6KTIKl5R9dG9Ds+3X0/H88+3393ux0f3fDmeTsdfT6e3l8P1+HbWqx+diT/A3Q7MZ9/BeOa6negJxhPy3S70HQUVvUbxGuov6H1OYpO4JD5JSCLdjvUpkwSSKNiqUBJOohSv4pIoxX/q/yuxPl0vwxD/9yJ4HdL74TKcr93ufDud+u7P4XQb/+j3++E86vVw0bum74bzq6oCfx5PQzz67OenTf1RRyE/HAxPj4PgVkAIVAASqgCsA8jZDCA/R8BoVwCqA5ALAJ2vArZFEKgKaMyBYAEIueocuEeH0IjABskAh34RgdtcB1LS6FkmAAJvBYCBMgYw3iwQmwfhZUpEMDhnAmg9kQCNchQ3pSLcEwQilJlAXBQkyXpNQaMiGakwmAwsErrOB3CjKL2juSqxzrCNOIwvq5uNLOMIm8cCBtFNiUX2dYpvURjCRImFXaO0UkPOl9QwYL0+pMEAF6b0LpaKrKPA1monMy93nsMgD2tGo0zFcMmuGDF1Rsu2LJYCkXkgGL44byO3ZAgKwpDcx4BYxYkBFuuMVp16KTPKy1oH2R6Gm5eL83DfUJaMYO9jyDyl4hpTKv/vdIiYKYzFe/lrGK3VxszTalu+2r+sNsKmeTDM5uHnMg32GxDm2TvsYpsStr8f0RbrsBikPphGlWIgVyYVgxpqdTBNCFs3Qexi6X8L4icL0uNFuX9jRqjsGKxfbHp4/XYhae05KJS8WJ0PqkXB5mE/Znjcjxkf92OmR/2Y+XETazI2GhC7hw2oHcY2A2oXGE97MT1evFy+FljLTGkeClR3xv8RhsMpDFuvcwut7yzwZSyOKMhdEJ2Dklw95nDPulcvL4OxZKpOaPkvOGEbwpMnqxMadx/E4gIS7o5kkye3IX/Bk+cZ0dzUN7itbyjnSxTeCa8Rez09vBwv6w5JbIeAFjj4+PmpGrJKUjRxe6gKWbW9Eb9vYpdkVFbl1CcZ1UX7Sp2SUUP8hEm9kqixWTIqpOdju2Q8p6wcHSh1TDi3TDj3TKxJrZpotSRJ2cS3mSpkje0XnQSmrMqL+WWb1WX1WSNP+SxJrckKWSNP47KU+Jaz2qwua+Spj9iQVZI6kzXH5zBr5rnMc8pzsfb+HC7Hw/NpiNmJCbydX0qy9PT6z3u5Uxpe75e3l+H1dhliYhddL/39Aa5H2E+tr/GS9Mj7qQGmV3RzTnbfp9v6uma7L72wdAl6dvvPWEH/Ag==",
            "is_unconstrained": false,
            "name": "forward_private_1",
            "verification_key": "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"
        },
        {
            "abi": {
                "error_types": {
                    "12327971061804302172": {
                        "error_kind": "fmtstring",
                        "item_types": [],
                        "length": 98
                    },
                    "14990209321349310352": {
                        "error_kind": "string",
                        "string": "attempt to add with overflow"
                    },
                    "15764276373176857197": {
                        "error_kind": "string",
                        "string": "Stack too deep"
                    }
                },
                "parameters": [
                    {
                        "name": "inputs",
                        "type": {
                            "fields": [
                                {
                                    "name": "call_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "msg_sender",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "contract_address",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "function_selector",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                }
                                            },
                                            {
                                                "name": "is_static_call",
                                                "type": {
                                                    "kind": "boolean"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::call_context::CallContext"
                                    }
                                },
                                {
                                    "name": "anchor_block_header",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "last_archive",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "root",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "next_available_leaf_index",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                }
                                            },
                                            {
                                                "name": "state",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "l1_to_l2_message_tree",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "root",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "next_available_leaf_index",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                            }
                                                        },
                                                        {
                                                            "name": "partial",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "note_hash_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "nullifier_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "public_data_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                                }
                                            },
                                            {
                                                "name": "sponge_blob_hash",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "global_variables",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "chain_id",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "version",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "block_number",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "slot_number",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "timestamp",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 64
                                                            }
                                                        },
                                                        {
                                                            "name": "coinbase",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "fee_recipient",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "gas_fees",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                                }
                                            },
                                            {
                                                "name": "total_fees",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "total_mana_used",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                    }
                                },
                                {
                                    "name": "tx_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "chain_id",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "version",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "gas_settings",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "teardown_gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_priority_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                    }
                                },
                                {
                                    "name": "start_side_effect_counter",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "target",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "field"
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "selector",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "args",
                        "type": {
                            "kind": "array",
                            "length": 2,
                            "type": {
                                "kind": "field"
                            }
                        },
                        "visibility": "private"
                    }
                ],
                "return_type": {
                    "abi_type": {
                        "fields": [
                            {
                                "name": "call_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "function_selector",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                                }
                            },
                            {
                                "name": "args_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "returns_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "anchor_block_header",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "last_archive",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "root",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "next_available_leaf_index",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                            }
                                        },
                                        {
                                            "name": "state",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "l1_to_l2_message_tree",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "root",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "next_available_leaf_index",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                        }
                                                    },
                                                    {
                                                        "name": "partial",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "note_hash_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "nullifier_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "public_data_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                            }
                                        },
                                        {
                                            "name": "sponge_blob_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "global_variables",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "chain_id",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "version",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "block_number",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    },
                                                    {
                                                        "name": "slot_number",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "timestamp",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 64
                                                        }
                                                    },
                                                    {
                                                        "name": "coinbase",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "fee_recipient",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "gas_fees",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                            }
                                        },
                                        {
                                            "name": "total_fees",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "total_mana_used",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                }
                            },
                            {
                                "name": "tx_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "chain_id",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "version",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "gas_settings",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "teardown_gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_priority_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                }
                            },
                            {
                                "name": "min_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "is_fee_payer",
                                "type": {
                                    "kind": "boolean"
                                }
                            },
                            {
                                "name": "expiration_timestamp",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 64
                                }
                            },
                            {
                                "name": "start_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "end_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_non_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "note_hash_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifier_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "key_validation_requests_and_separators",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "request",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "pk_m",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "x",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "y",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "is_infinite",
                                                                                    "type": {
                                                                                        "kind": "boolean"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "sk_app",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "key_type_domain_separator",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "call_context",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "function_selector",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                                                            }
                                                        },
                                                        {
                                                            "name": "args_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "returns_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "start_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "end_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 32,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "calldata_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_teardown_call_request",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        },
                                        {
                                            "name": "calldata_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                }
                            },
                            {
                                "name": "note_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifiers",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "l2_to_l1_msgs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "recipient",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "content",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_logs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "log",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "fields",
                                                                                    "type": {
                                                                                        "kind": "array",
                                                                                        "length": 16,
                                                                                        "type": {
                                                                                            "kind": "field"
                                                                                        }
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "length",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::log::Log"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash_counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "contract_class_logs_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 1,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "length",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
                    },
                    "visibility": "databus"
                }
            },
            "bytecode": "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",
            "custom_attributes": [
                "abi_private"
            ],
            "debug_symbols": "tZjdbts8DIbvxcc+EClSEnMrQ1CkrTcECNIiSwZ8KHrvH2VJ/ikgzUu2k7z+iR9TJEXJ/Oheh+fbj6fj+fvbz2737aN7vhxPp+OPp9Pby+F6fDvr1Y/OxB+gbgfms+9gPHPdTvQE44n13S70nQ0qes3Ga6i/oPcpCSdxSXySkES6HelTJgkkUTCr2CSURClexSVRiv/U9xVbn66XYYjvXhivQ3o/XIbztdudb6dT3/06nG7jn36+H86jXg8XvWv6bji/qirw+/E0xKPPfn7a1B91NuSHg6HpcRDcCgjBFoCEKgDrAOs4A6yfLSDkFcDWAUgFgM5XAdssCLYKaPhAsADEuqoP3KNDaFjAQTLAoV9Y4DbngZQwepIJgEBbAWCgjAGMNwvE5kF4mQIRDM6RALt2JEAjHcVNoQj3GIEIxROIi4S0sp5T0MhIQlsYZA0sArqOB1AjKb2zc1ZincENO4wvs5uMLO0Im8cCBtFNgUXydYpvUQjCRImJXaO0QmOdL6EhwHp+SIMBLkzhXUwVWVuBrdluzTzdaTbDelgzGmkqhkp0xYipM1pli7EkiMwDwfCl8jZia42FgjBW7mNAzOLEAMY6o5WnXopHaZnrINvNcPN0cR7uG8qSEfg+hswuFddwqfxbd4iYyYzFuvzVjNZsI6Jpti2X9i+zzWKzeBDMxcPPaRr4DyBEc+3gxTYlbF8fkUvpYAxSH0wjSzFYV5yKQQtqdTBNCLGbILyY+n8E8VMJ0uNFum/3iJ+i6/0cXKL16mKlteewocSF1R+2ZgWZh+sxweP1mPDxekz20XpM9Hg9bjI21mNyDxegphkb63GbgWFikKky2klK035OjxcO+ZKk3EhSsrM7oLq7/o0ZDiczuD5XGFvfauDLWJy1Qe6CqA9KkukxhXuqqa4HZTBsTbWa8t+opvybaurnamrcfRDGBSTcbcmmus7/uK7z7BGNTX2T3FoanC9WeCe0Ruz19PByvKy7LLGlApp14OMnrGrIKknRxJKmClkxq/ZI4rdSbLWMql0SS6nZMqqPcz+1W0aV+DmUGi6jQlZMz8eey3hOWTlWs9R2odx3YUjtHo7/l6RkoudUIWts4ej7yGZVXvQrcVaX1WeNPH0fSVI2WSFr5Gl9YJv4TFk5q8uqvDgtOGSVpM5kzfY5zJp5LvOc8lxMm1+Hy/HwfBpidGIAb+eXEiw9vf73Xu6Uptn75e1leL1dhhjYRedMf7+B6xH2U/tsvCQ90n5qoukV3eBb3vfpti75xPvST0uXoCe3/4wZ9D8=",
            "is_unconstrained": false,
            "name": "forward_private_2",
            "verification_key": "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"
        },
        {
            "abi": {
                "error_types": {
                    "12327971061804302172": {
                        "error_kind": "fmtstring",
                        "item_types": [],
                        "length": 98
                    },
                    "14990209321349310352": {
                        "error_kind": "string",
                        "string": "attempt to add with overflow"
                    },
                    "15764276373176857197": {
                        "error_kind": "string",
                        "string": "Stack too deep"
                    }
                },
                "parameters": [
                    {
                        "name": "inputs",
                        "type": {
                            "fields": [
                                {
                                    "name": "call_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "msg_sender",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "contract_address",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "function_selector",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                }
                                            },
                                            {
                                                "name": "is_static_call",
                                                "type": {
                                                    "kind": "boolean"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::call_context::CallContext"
                                    }
                                },
                                {
                                    "name": "anchor_block_header",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "last_archive",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "root",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "next_available_leaf_index",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                }
                                            },
                                            {
                                                "name": "state",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "l1_to_l2_message_tree",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "root",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "next_available_leaf_index",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                            }
                                                        },
                                                        {
                                                            "name": "partial",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "note_hash_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "nullifier_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "public_data_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                                }
                                            },
                                            {
                                                "name": "sponge_blob_hash",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "global_variables",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "chain_id",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "version",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "block_number",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "slot_number",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "timestamp",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 64
                                                            }
                                                        },
                                                        {
                                                            "name": "coinbase",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "fee_recipient",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "gas_fees",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                                }
                                            },
                                            {
                                                "name": "total_fees",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "total_mana_used",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                    }
                                },
                                {
                                    "name": "tx_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "chain_id",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "version",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "gas_settings",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "teardown_gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_priority_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                    }
                                },
                                {
                                    "name": "start_side_effect_counter",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "target",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "field"
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "selector",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "args",
                        "type": {
                            "kind": "array",
                            "length": 3,
                            "type": {
                                "kind": "field"
                            }
                        },
                        "visibility": "private"
                    }
                ],
                "return_type": {
                    "abi_type": {
                        "fields": [
                            {
                                "name": "call_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "function_selector",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                                }
                            },
                            {
                                "name": "args_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "returns_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "anchor_block_header",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "last_archive",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "root",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "next_available_leaf_index",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                            }
                                        },
                                        {
                                            "name": "state",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "l1_to_l2_message_tree",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "root",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "next_available_leaf_index",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                        }
                                                    },
                                                    {
                                                        "name": "partial",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "note_hash_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "nullifier_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "public_data_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                            }
                                        },
                                        {
                                            "name": "sponge_blob_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "global_variables",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "chain_id",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "version",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "block_number",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    },
                                                    {
                                                        "name": "slot_number",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "timestamp",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 64
                                                        }
                                                    },
                                                    {
                                                        "name": "coinbase",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "fee_recipient",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "gas_fees",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                            }
                                        },
                                        {
                                            "name": "total_fees",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "total_mana_used",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                }
                            },
                            {
                                "name": "tx_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "chain_id",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "version",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "gas_settings",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "teardown_gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_priority_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                }
                            },
                            {
                                "name": "min_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "is_fee_payer",
                                "type": {
                                    "kind": "boolean"
                                }
                            },
                            {
                                "name": "expiration_timestamp",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 64
                                }
                            },
                            {
                                "name": "start_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "end_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_non_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "note_hash_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifier_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "key_validation_requests_and_separators",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "request",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "pk_m",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "x",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "y",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "is_infinite",
                                                                                    "type": {
                                                                                        "kind": "boolean"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "sk_app",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "key_type_domain_separator",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "call_context",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "function_selector",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                                                            }
                                                        },
                                                        {
                                                            "name": "args_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "returns_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "start_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "end_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 32,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "calldata_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_teardown_call_request",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        },
                                        {
                                            "name": "calldata_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                }
                            },
                            {
                                "name": "note_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifiers",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "l2_to_l1_msgs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "recipient",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "content",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_logs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "log",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "fields",
                                                                                    "type": {
                                                                                        "kind": "array",
                                                                                        "length": 16,
                                                                                        "type": {
                                                                                            "kind": "field"
                                                                                        }
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "length",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::log::Log"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash_counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "contract_class_logs_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 1,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "length",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
                    },
                    "visibility": "databus"
                }
            },
            "bytecode": "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",
            "custom_attributes": [
                "abi_private"
            ],
            "debug_symbols": "tZjbbiI5EIbfpa+5cB1cdvEqIxSRhBkhIRIxYaVVxLtvGdvdTSR7OzBz038f6I+y62B3fQ6vu+fzr6f98efb72H943N4Pu0Ph/2vp8Pby/Zj/3a0u5+DSwfgYQ3ushrgeiXDWu0C0wWFYR1XA0UTu0fpHtoR7Dln8VkkS8gSs+iwZnvLZYEsBvYmlIWzGCWYSBajhIv9X7X16eO026X/nhlvQ3rfnnbHj2F9PB8Oq+Gf7eF8/dHv9+3xqh/bkz11q2F3fDU14M/9YZfOLqvpbdd+VSiWl6Pj8XVQXAqIkSpAYxOAbQCJLwAKkwWM/gZAbQByBaCEJmCZBZGagM4cKFaAkjTnQB4dQscCH7UABMPMAlkcB1rdGFhHAAIvBYCDOgZwwc0QiwcRdHREdDh5Auh2IgE64agyuiLeYwQi1JlAnAUk6W1OQSciGakymBzMHHrrD+BOUAahKSqxzfAdO1yo2c1O53bExWMBhyijY5FDmxJ6FIY4UlJgtyg915CE6hoGbMeHdhggcXTvLFX01grsZTu5Kd15MoMC3DI6YaqOq3fVqWszemXLYw0QnQaC8Uvl7fiWHEFFONL7GJCiODPAY5vRi9OgdUZ5Huug9w1lXn6+MxSZUk4C3MnAODK4bUcvzJl5DPP5mvolzKlbjS1DpqwNU3xE/w0I85S0frY/iMsXJvQ1Zz1GbQ+mt8BHkrrFwWiVrDmYLoS9jBA/y7lvQcKY+3Y+i5HlM6Jcl2qd7zb4tqxT6C32FKtfvM0HNYcSHy6EpI8XQnaPF0KGRwsh4+OFsMtYWAiZHy6EXTMWFrHFjOjvY+g0pSqdKY1/dzpU3WjGrJh+NaOfbzzuCe185tsv+eY7Qco0DQWaO/T/MUNwNMO3095T73sPQh2LEEW9C2JzUJ1r5xzvWRhsaauD8eSaC4OXP7Aw9CE8LlG2MDi5D+JxBol3W7JoiepDHl+i/DQj5pv2Rrv3LSehWhFE+Raxscvty/5026lJbRmwAIeQPoNNY1HNiq4oFMWiVJRT5c39GioNG8Lcsbmq8Yhzz4ZK04Ykd22uikUpv58aN9drX9R46Ts99W6uary0lpNmZZf2OKaQZtAUi6Y+kP2euajx0vyyFA0pn01jUc3qXdHEM77HolSUixovpYGXzPehaCyqWcV4YuMSKIpFqWixT3zRwpPCk5i6C5fk89N++3zYJa8lx56PL9WJdvnx73t9Uhty76e3l93r+bRLDp915ez4A2SFsBlbc9dbukLejA06u2MfD+Q3q/zYthPsN7VXl2/BimVzSZH1Hw==",
            "is_unconstrained": false,
            "name": "forward_private_3",
            "verification_key": "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"
        },
        {
            "abi": {
                "error_types": {
                    "12327971061804302172": {
                        "error_kind": "fmtstring",
                        "item_types": [],
                        "length": 98
                    },
                    "14990209321349310352": {
                        "error_kind": "string",
                        "string": "attempt to add with overflow"
                    },
                    "15764276373176857197": {
                        "error_kind": "string",
                        "string": "Stack too deep"
                    }
                },
                "parameters": [
                    {
                        "name": "inputs",
                        "type": {
                            "fields": [
                                {
                                    "name": "call_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "msg_sender",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "contract_address",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "function_selector",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                }
                                            },
                                            {
                                                "name": "is_static_call",
                                                "type": {
                                                    "kind": "boolean"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::call_context::CallContext"
                                    }
                                },
                                {
                                    "name": "anchor_block_header",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "last_archive",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "root",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "next_available_leaf_index",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                }
                                            },
                                            {
                                                "name": "state",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "l1_to_l2_message_tree",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "root",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "next_available_leaf_index",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                            }
                                                        },
                                                        {
                                                            "name": "partial",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "note_hash_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "nullifier_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "public_data_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                                }
                                            },
                                            {
                                                "name": "sponge_blob_hash",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "global_variables",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "chain_id",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "version",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "block_number",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "slot_number",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "timestamp",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 64
                                                            }
                                                        },
                                                        {
                                                            "name": "coinbase",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "fee_recipient",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "gas_fees",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                                }
                                            },
                                            {
                                                "name": "total_fees",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "total_mana_used",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                    }
                                },
                                {
                                    "name": "tx_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "chain_id",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "version",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "gas_settings",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "teardown_gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_priority_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                    }
                                },
                                {
                                    "name": "start_side_effect_counter",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "target",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "field"
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "selector",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "args",
                        "type": {
                            "kind": "array",
                            "length": 4,
                            "type": {
                                "kind": "field"
                            }
                        },
                        "visibility": "private"
                    }
                ],
                "return_type": {
                    "abi_type": {
                        "fields": [
                            {
                                "name": "call_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "function_selector",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                                }
                            },
                            {
                                "name": "args_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "returns_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "anchor_block_header",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "last_archive",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "root",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "next_available_leaf_index",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                            }
                                        },
                                        {
                                            "name": "state",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "l1_to_l2_message_tree",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "root",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "next_available_leaf_index",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                        }
                                                    },
                                                    {
                                                        "name": "partial",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "note_hash_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "nullifier_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "public_data_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                            }
                                        },
                                        {
                                            "name": "sponge_blob_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "global_variables",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "chain_id",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "version",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "block_number",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    },
                                                    {
                                                        "name": "slot_number",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "timestamp",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 64
                                                        }
                                                    },
                                                    {
                                                        "name": "coinbase",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "fee_recipient",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "gas_fees",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                            }
                                        },
                                        {
                                            "name": "total_fees",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "total_mana_used",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                }
                            },
                            {
                                "name": "tx_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "chain_id",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "version",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "gas_settings",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "teardown_gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_priority_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                }
                            },
                            {
                                "name": "min_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "is_fee_payer",
                                "type": {
                                    "kind": "boolean"
                                }
                            },
                            {
                                "name": "expiration_timestamp",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 64
                                }
                            },
                            {
                                "name": "start_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "end_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_non_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "note_hash_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifier_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "key_validation_requests_and_separators",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "request",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "pk_m",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "x",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "y",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "is_infinite",
                                                                                    "type": {
                                                                                        "kind": "boolean"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "sk_app",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "key_type_domain_separator",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "call_context",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "function_selector",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                                                            }
                                                        },
                                                        {
                                                            "name": "args_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "returns_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "start_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "end_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 32,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "calldata_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_teardown_call_request",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        },
                                        {
                                            "name": "calldata_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                }
                            },
                            {
                                "name": "note_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifiers",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "l2_to_l1_msgs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "recipient",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "content",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_logs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "log",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "fields",
                                                                                    "type": {
                                                                                        "kind": "array",
                                                                                        "length": 16,
                                                                                        "type": {
                                                                                            "kind": "field"
                                                                                        }
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "length",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::log::Log"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash_counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "contract_class_logs_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 1,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "length",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
                    },
                    "visibility": "databus"
                }
            },
            "bytecode": "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",
            "custom_attributes": [
                "abi_private"
            ],
            "debug_symbols": "tZhZbuM4EIbvomc9sBYu5as0jMBJ1A0DhhO47QYGQe4+RZPUEoAcxZp+8W9J1ucq1kKpPrrX4fn26+l4/vn2u9v9+OieL8fT6fjr6fT2crge38569qMz8QO424H57Du4H7luJ3qA8YB8twt9R0FFz1E8h/oJep2T2CQuiU8Skki3Y73LJIEkCrYqlISTKMWruCRK8Z/6f8XWp+tlGOJ/z4xXl94Pl+F87Xbn2+nUd38Op9v9R7/fD+e7Xg8XvWr6bji/qirw5/E0xG+f/XS3qd/qKOSbg+HxdhBcCwiBCkBCFYB1ADmbAeQnCxjtAkB1AHIBoPNVwDoLAlUBjTUQLAAhV10Dt9WFhgU2SAY49DML3Oo8kBJGzzICEHgtAAwUH8B4M0OsdsLLGIhgcIoE0HIhARrpKG4MRXjECEQoK4E4S0iSZU1BIyMZqTCYDMwCuowHcCMpvaMpK7HOsA07jC/VzUbmdoTVvoBBdGNgkX2d4lsUhjBSYmLXKK3QkPMlNAxYzw9pMMCFMbyzUpGlFdiqdjJTufNkBnlYMhppKoZLdMWIqTNabctiSRCZHMHwpfM2YkuGoCAMyWMMiFmcGGCxzmjlqZeyojzPdZDHXJm3n++44qaScx62M4J9jCGTL+LqYSHzd5dUxIxmzPb2r2a0KpaZx4qdPx58qVhqNyCGqQH5KdWD/QaEeeo/dvaoE9bvsWhL+7EYpO5Ma6MP5MqiYtCmXHWmCWHrRoidtY9vQfzYxvT7LN3XrwiALeEFCFN4mZd7FDefXCiUyFhdEarZwbC5qzNu7+pM27s689auznZ7V28yVnZ19ptbUNOMlR15NaPRkZuMlR3Zwt9djpUduV1vPD7g6vdZbL/Um20kKdPkClRfN/7DDIejGbZe9ta1Xl7BF18cUZCHILoGJbj6ncMjW4NubsUZS6a6NVj5H7aGNoTHTUq3BuMeg1icQcLDlqzapNqQ7ZuUnVZEY1N/a2i9mDpfrPBOeInY6+Hh5XhZjp3ijAk0wcHHd3rVkFWSoskKWTErZeXYedPwifL0iTiNn+4a4laRBlBR4wSKfBpB3RVjj0hDqLtyVpvuj3Oo+7HPGmItq0pSNvEpRxWyYtY41NL/Y+XFdWWb1cU6VvVZlRfTmSWpVZ5TPyxkxayUlePoQtVmdVl91sjTWreS+M5khayYNfLUP8dZbVaXNdvnQtbM85nno31xk/hzuBwPz6chRjMG/HZ+KcHVw+s/7+VKmTq+X95ehtfbZYiJMBs96ucPcD3Cfpw/3k9Jj7wfp5B6Rt+QyO77dFl7J9t9GUimU9Cz23/GjPsX",
            "is_unconstrained": false,
            "name": "forward_private_4",
            "verification_key": "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"
        },
        {
            "abi": {
                "error_types": {
                    "12327971061804302172": {
                        "error_kind": "fmtstring",
                        "item_types": [],
                        "length": 98
                    },
                    "14990209321349310352": {
                        "error_kind": "string",
                        "string": "attempt to add with overflow"
                    },
                    "15764276373176857197": {
                        "error_kind": "string",
                        "string": "Stack too deep"
                    },
                    "7555607922535724711": {
                        "error_kind": "string",
                        "string": "Preimage mismatch"
                    }
                },
                "parameters": [
                    {
                        "name": "inputs",
                        "type": {
                            "fields": [
                                {
                                    "name": "call_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "msg_sender",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "contract_address",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "function_selector",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                }
                                            },
                                            {
                                                "name": "is_static_call",
                                                "type": {
                                                    "kind": "boolean"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::call_context::CallContext"
                                    }
                                },
                                {
                                    "name": "anchor_block_header",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "last_archive",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "root",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "next_available_leaf_index",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                }
                                            },
                                            {
                                                "name": "state",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "l1_to_l2_message_tree",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "root",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "next_available_leaf_index",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                            }
                                                        },
                                                        {
                                                            "name": "partial",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "note_hash_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "nullifier_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "public_data_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                                }
                                            },
                                            {
                                                "name": "sponge_blob_hash",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "global_variables",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "chain_id",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "version",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "block_number",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "slot_number",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "timestamp",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 64
                                                            }
                                                        },
                                                        {
                                                            "name": "coinbase",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "fee_recipient",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "gas_fees",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                                }
                                            },
                                            {
                                                "name": "total_fees",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "total_mana_used",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                    }
                                },
                                {
                                    "name": "tx_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "chain_id",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "version",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "gas_settings",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "teardown_gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_priority_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                    }
                                },
                                {
                                    "name": "start_side_effect_counter",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "target",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "field"
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "selector",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "args",
                        "type": {
                            "kind": "array",
                            "length": 4,
                            "type": {
                                "kind": "field"
                            }
                        },
                        "visibility": "private"
                    }
                ],
                "return_type": {
                    "abi_type": {
                        "fields": [
                            {
                                "name": "call_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "function_selector",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                                }
                            },
                            {
                                "name": "args_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "returns_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "anchor_block_header",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "last_archive",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "root",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "next_available_leaf_index",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                            }
                                        },
                                        {
                                            "name": "state",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "l1_to_l2_message_tree",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "root",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "next_available_leaf_index",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                        }
                                                    },
                                                    {
                                                        "name": "partial",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "note_hash_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "nullifier_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "public_data_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                            }
                                        },
                                        {
                                            "name": "sponge_blob_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "global_variables",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "chain_id",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "version",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "block_number",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    },
                                                    {
                                                        "name": "slot_number",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "timestamp",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 64
                                                        }
                                                    },
                                                    {
                                                        "name": "coinbase",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "fee_recipient",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "gas_fees",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                            }
                                        },
                                        {
                                            "name": "total_fees",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "total_mana_used",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                }
                            },
                            {
                                "name": "tx_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "chain_id",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "version",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "gas_settings",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "teardown_gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_priority_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                }
                            },
                            {
                                "name": "min_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "is_fee_payer",
                                "type": {
                                    "kind": "boolean"
                                }
                            },
                            {
                                "name": "expiration_timestamp",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 64
                                }
                            },
                            {
                                "name": "start_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "end_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_non_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "note_hash_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifier_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "key_validation_requests_and_separators",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "request",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "pk_m",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "x",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "y",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "is_infinite",
                                                                                    "type": {
                                                                                        "kind": "boolean"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "sk_app",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "key_type_domain_separator",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "call_context",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "function_selector",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                                                            }
                                                        },
                                                        {
                                                            "name": "args_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "returns_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "start_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "end_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 32,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "calldata_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_teardown_call_request",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        },
                                        {
                                            "name": "calldata_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                }
                            },
                            {
                                "name": "note_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifiers",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "l2_to_l1_msgs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "recipient",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "content",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_logs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "log",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "fields",
                                                                                    "type": {
                                                                                        "kind": "array",
                                                                                        "length": 16,
                                                                                        "type": {
                                                                                            "kind": "field"
                                                                                        }
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "length",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::log::Log"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash_counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "contract_class_logs_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 1,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "length",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
                    },
                    "visibility": "databus"
                }
            },
            "bytecode": "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",
            "custom_attributes": [
                "abi_private"
            ],
            "debug_symbols": "tVlZbiM5DL1LfftD4iJRuUrDCJzE3TBgOIE7GWAQ5O5DWUvJaUhdcU1+/FyLXlEi+bTwfXraP7z9uj+cfj7/nu5+vE8P58PxePh1f3x+3L0enk96930y8cfSdGftx2aylyunV0avIF6h16vNhKKg9zDeA/0FfU4JOIFL4BNIgjDdsbYyCWwCJXYKmIASKIsouATKIvo5unxOmwXlggSYgBJwAm0W9H3+w2S9WTp8/3re7+MLzQjouLzszvvT63R3ejseN9M/u+Pb5aXfL7vTBV93Z31qNtP+9KSohD8Px33897GZW5t+U5aQGzvwtbkNbimBQ8kEYqghgKUEIlgIgnQJsE+AjjMB+tkCAr4ioD4BUCEA57sEyywQ7BIMxiBAIQjoumPg13ZhYIGvBN7zTXEQihs9hUoAlpYSWGOLCdZ401As70SojhADsycsXg+khUE4BlddIbcYAWDLSAA0AYnhOintICIJsHAQGts49NofccS6QekdzlEJfQ43sMP4kt1kQmuHLO6LNQCuOhbI91lkxEJWKksM7B7LyDXofHENWejGB4w4rJPq3kYyw7UVYAfZjmZOd5rNQG+vOQZhGgwV7wYTTJ9jJFsMJUDC3BGQT4Mx8C0atIXCYLiNw8boSRyWoc8xilMfyohSG+s23NaVVn6+0hU3p5zzdj2H8G0cYe5LcH23oP3eIQ3BVDOauf2zGaNsI6Kase3y4FPG4liAyM4C5OdQF/4CCdGsP9wsdWTxzMDARX4YJPQ7M5roBV0ZVBAV5W5nhiTErpJwIx9fIvFVxvR/E+7LR8QS1jmfmkAlup6jyI5WsCjFM6wjgj07CFarOuF6VSdar+rEa1Wd3HpVH3IsVHWS1RI0NGOhIi/mGCjykGOhIjN873AsVORxvlFd4Or/xref8o0HQTrnPYntbjf+YoaDagb30579aPNqfemLQ5RwE4mOQXGu/idZKYRsXFcI3YgDsTjXomvc4r9AEWY9ttSlWK+kbqSkUD0boNl1fFZBN1BSZ6gebBieXYLLrVio586t13Pn1+q5k/UiOORYKGDerBawsRnLBGwc5EILgnzEMB92WM/9Lb4fBajuhOvJm5PudtbzSHnsLDyAfQ432hPX5SS3hwRh+cGPqR0JyN1VrZfRMl+E53U+dBekPqxWHjHrc17s+pwXWJvzMjySBKk5T/3t7Ngrwc/BoYvCnldk9Uw/2jXpvq/M84ymG1/yf+ya5C+7Jj/vmppZ+kskDA2J3GzJov2bfPP+jecRUd/0D9RGZ7bO15NnF+iaYquXu8fD+boudCkCaezbWM7R71vJGBKCyWgzQkbMSJoUuTiEuToUozSWhy4oMWlSgShirBDFKkcsEV0Q4nFoKhJdkDJyah/rRJdrn1H54moEQ0KKFSe1n2xGyKh80a9EcUmryBmVj2M7n1H5nCoQKZ9XZJPRZlS+uKxl5RPlY4pVFkXOGOtYysM+o2QMCZ2J0qVoM0JGzKh8Qb/jONnjsn0u2+ckY4gLuM3kTUabETJies9TxsznM5/3UYY/YuycD7uH4z56PwbI2+mxBINevv77Up6UMuLL+flx//R23sfAaWqJ+vtDz7vBbmtB8XIrbIC2taqod7Qeg7zdpMfqQ+JtKTCmW3ZDbluKgJcWYYPhjxY8Iozx/R8=",
            "is_unconstrained": false,
            "name": "forward_private_4_and_return",
            "verification_key": "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"
        },
        {
            "abi": {
                "error_types": {
                    "12327971061804302172": {
                        "error_kind": "fmtstring",
                        "item_types": [],
                        "length": 98
                    },
                    "14990209321349310352": {
                        "error_kind": "string",
                        "string": "attempt to add with overflow"
                    },
                    "15764276373176857197": {
                        "error_kind": "string",
                        "string": "Stack too deep"
                    }
                },
                "parameters": [
                    {
                        "name": "inputs",
                        "type": {
                            "fields": [
                                {
                                    "name": "call_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "msg_sender",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "contract_address",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "function_selector",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                }
                                            },
                                            {
                                                "name": "is_static_call",
                                                "type": {
                                                    "kind": "boolean"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::call_context::CallContext"
                                    }
                                },
                                {
                                    "name": "anchor_block_header",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "last_archive",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "root",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "next_available_leaf_index",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                }
                                            },
                                            {
                                                "name": "state",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "l1_to_l2_message_tree",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "root",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "next_available_leaf_index",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                            }
                                                        },
                                                        {
                                                            "name": "partial",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "note_hash_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "nullifier_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "public_data_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                                }
                                            },
                                            {
                                                "name": "sponge_blob_hash",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "global_variables",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "chain_id",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "version",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "block_number",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "slot_number",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "timestamp",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 64
                                                            }
                                                        },
                                                        {
                                                            "name": "coinbase",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "fee_recipient",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "gas_fees",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                                }
                                            },
                                            {
                                                "name": "total_fees",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "total_mana_used",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                    }
                                },
                                {
                                    "name": "tx_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "chain_id",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "version",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "gas_settings",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "teardown_gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_priority_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                    }
                                },
                                {
                                    "name": "start_side_effect_counter",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "target",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "field"
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "selector",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "args",
                        "type": {
                            "kind": "array",
                            "length": 5,
                            "type": {
                                "kind": "field"
                            }
                        },
                        "visibility": "private"
                    }
                ],
                "return_type": {
                    "abi_type": {
                        "fields": [
                            {
                                "name": "call_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "function_selector",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                                }
                            },
                            {
                                "name": "args_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "returns_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "anchor_block_header",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "last_archive",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "root",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "next_available_leaf_index",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                            }
                                        },
                                        {
                                            "name": "state",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "l1_to_l2_message_tree",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "root",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "next_available_leaf_index",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                        }
                                                    },
                                                    {
                                                        "name": "partial",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "note_hash_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "nullifier_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "public_data_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                            }
                                        },
                                        {
                                            "name": "sponge_blob_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "global_variables",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "chain_id",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "version",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "block_number",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    },
                                                    {
                                                        "name": "slot_number",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "timestamp",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 64
                                                        }
                                                    },
                                                    {
                                                        "name": "coinbase",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "fee_recipient",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "gas_fees",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                            }
                                        },
                                        {
                                            "name": "total_fees",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "total_mana_used",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                }
                            },
                            {
                                "name": "tx_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "chain_id",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "version",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "gas_settings",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "teardown_gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_priority_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                }
                            },
                            {
                                "name": "min_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "is_fee_payer",
                                "type": {
                                    "kind": "boolean"
                                }
                            },
                            {
                                "name": "expiration_timestamp",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 64
                                }
                            },
                            {
                                "name": "start_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "end_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_non_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "note_hash_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifier_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "key_validation_requests_and_separators",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "request",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "pk_m",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "x",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "y",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "is_infinite",
                                                                                    "type": {
                                                                                        "kind": "boolean"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "sk_app",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "key_type_domain_separator",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "call_context",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "function_selector",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                                                            }
                                                        },
                                                        {
                                                            "name": "args_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "returns_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "start_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "end_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 32,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "calldata_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_teardown_call_request",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        },
                                        {
                                            "name": "calldata_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                }
                            },
                            {
                                "name": "note_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifiers",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "l2_to_l1_msgs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "recipient",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "content",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_logs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "log",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "fields",
                                                                                    "type": {
                                                                                        "kind": "array",
                                                                                        "length": 16,
                                                                                        "type": {
                                                                                            "kind": "field"
                                                                                        }
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "length",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::log::Log"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash_counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "contract_class_logs_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 1,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "length",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
                    },
                    "visibility": "databus"
                }
            },
            "bytecode": "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",
            "custom_attributes": [
                "abi_private"
            ],
            "debug_symbols": "tVhZbtswEL2LvvXBWbj5KoUROIlaGDCcwLULFIHv3qFISlQAsorV/vhpsZ5mfaTmo3sdnm8/no7n728/u923j+75cjydjj+eTm8vh+vx7SxXPzoVfoC7Hah738F4ZrqdlxMMJ2S7nes7cgJyjcI1lF+Q+xxBRzARbAQXwXc7lqdUBIggxFqAInAEYbECJoKw2Lu8L9v6dL0MQ3h3Yby49H64DOdrtzvfTqe++3U43cY//Xw/nEe8Hi5yV/XdcH4VFMLvx9MQju79/LSqP2rIpYed4ulx8LiWwDnKBN5VCbBOQEYnArKzBYx6QUB1AuRMgMZWCdZZ4KhK0IiBx0zgyVRjYLa60LBAO58IDNrCArO6DnxOo2U/ESDwWgJQkH0AZVVBsdoJ66dEOIVzJoCWgQRolKM3UyrcI0YgQo4EYlGQ5Jc9BY2KZKTMwaSgSOgyH8CNorSG5qrEOodu2KFs7m5WvrTDrfYFFKKZEots6yy2xcLgJpZQ2DWWVmrI2JwaBqzXh29wgHFTeotW8UsrsNXtpOZ259kMsrDkaJSpV5yz65VXdY6WbGnMBeJnR9B9Ut5GbkkRZApF/jEOCFUcOUBjnaNVp9bniHJZ6+Afc6WUn6+4YuaWMxa2czj9GIefffGmnhZS/zek3qvJjGJt/2xGq2OZeerYcnvwqWOpLUAMswDZudSd/gIJ86w/utjquPVrLOosPxqdrzvTWugdmRxUdCLKVWeaJKzNRKIL+fgSiZ1kTI6Lcl8fEZAuyUEVtlnTeblGcXPnQi5nRktEqGYHw2ZVZ9yu6kzbVZ15q6qz3q7qTY6Vqs52swStdqWh6k2Olare5kA3cXDDjmah87SzlOMiqJ8KXTeqlGkOKVT3+X8xw+Bkhq73m+bWVyPY7Ishcv4hEolBzq4cs3tEk2VVyc5oUlVN1vYfaHKbhKfVQTRZmcdINBYk7mFLVq0ObZLtq4OeIyK5qW/XW1+ExmYrrPG8pNjL6eHleFnOe8JwB6TAwYaPaUGX0EdElRASYkJKyEHy4tSH0tiH0tyHOA5+RvRBq+PoZ0QIOh+HPyNSUPA4/hlRJzTx+TABGs9dwjBJklpmlRASYkJKyAmFT0sPsgnhFbQJhS/kn31ErUKfC0LCMJyS92lKyAl1QuEL7aBtQpfQRzTCZyQeBiK/wYSUkBPqMIsQNAltQpcw2WdVwsRnE5+lIC33UBuX4+H5NITshgK4nV9ysuX0+vs938njv/fL28vwersMoTCKGaD8fgPTI+ynQeB4yffI+2kcKFfkU4X0vo+3RUtZ7/NkMF6Cns3+HirwDw==",
            "is_unconstrained": false,
            "name": "forward_private_5",
            "verification_key": "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"
        },
        {
            "abi": {
                "error_types": {
                    "12327971061804302172": {
                        "error_kind": "fmtstring",
                        "item_types": [],
                        "length": 98
                    },
                    "14990209321349310352": {
                        "error_kind": "string",
                        "string": "attempt to add with overflow"
                    },
                    "15764276373176857197": {
                        "error_kind": "string",
                        "string": "Stack too deep"
                    }
                },
                "parameters": [
                    {
                        "name": "inputs",
                        "type": {
                            "fields": [
                                {
                                    "name": "call_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "msg_sender",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "contract_address",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "function_selector",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                }
                                            },
                                            {
                                                "name": "is_static_call",
                                                "type": {
                                                    "kind": "boolean"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::call_context::CallContext"
                                    }
                                },
                                {
                                    "name": "anchor_block_header",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "last_archive",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "root",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "next_available_leaf_index",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                }
                                            },
                                            {
                                                "name": "state",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "l1_to_l2_message_tree",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "root",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "next_available_leaf_index",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                            }
                                                        },
                                                        {
                                                            "name": "partial",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "note_hash_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "nullifier_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "public_data_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                                }
                                            },
                                            {
                                                "name": "sponge_blob_hash",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "global_variables",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "chain_id",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "version",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "block_number",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "slot_number",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "timestamp",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 64
                                                            }
                                                        },
                                                        {
                                                            "name": "coinbase",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "fee_recipient",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "gas_fees",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                                }
                                            },
                                            {
                                                "name": "total_fees",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "total_mana_used",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                    }
                                },
                                {
                                    "name": "tx_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "chain_id",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "version",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "gas_settings",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "teardown_gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_priority_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                    }
                                },
                                {
                                    "name": "start_side_effect_counter",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "target",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "field"
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "selector",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "args",
                        "type": {
                            "kind": "array",
                            "length": 6,
                            "type": {
                                "kind": "field"
                            }
                        },
                        "visibility": "private"
                    }
                ],
                "return_type": {
                    "abi_type": {
                        "fields": [
                            {
                                "name": "call_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "function_selector",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                                }
                            },
                            {
                                "name": "args_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "returns_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "anchor_block_header",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "last_archive",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "root",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "next_available_leaf_index",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                            }
                                        },
                                        {
                                            "name": "state",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "l1_to_l2_message_tree",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "root",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "next_available_leaf_index",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                        }
                                                    },
                                                    {
                                                        "name": "partial",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "note_hash_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "nullifier_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "public_data_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                            }
                                        },
                                        {
                                            "name": "sponge_blob_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "global_variables",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "chain_id",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "version",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "block_number",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    },
                                                    {
                                                        "name": "slot_number",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "timestamp",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 64
                                                        }
                                                    },
                                                    {
                                                        "name": "coinbase",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "fee_recipient",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "gas_fees",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                            }
                                        },
                                        {
                                            "name": "total_fees",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "total_mana_used",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                }
                            },
                            {
                                "name": "tx_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "chain_id",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "version",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "gas_settings",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "teardown_gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_priority_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                }
                            },
                            {
                                "name": "min_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "is_fee_payer",
                                "type": {
                                    "kind": "boolean"
                                }
                            },
                            {
                                "name": "expiration_timestamp",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 64
                                }
                            },
                            {
                                "name": "start_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "end_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_non_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "note_hash_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifier_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "key_validation_requests_and_separators",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "request",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "pk_m",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "x",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "y",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "is_infinite",
                                                                                    "type": {
                                                                                        "kind": "boolean"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "sk_app",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "key_type_domain_separator",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "call_context",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "function_selector",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                                                            }
                                                        },
                                                        {
                                                            "name": "args_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "returns_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "start_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "end_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 32,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "calldata_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_teardown_call_request",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        },
                                        {
                                            "name": "calldata_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                }
                            },
                            {
                                "name": "note_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifiers",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "l2_to_l1_msgs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "recipient",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "content",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_logs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "log",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "fields",
                                                                                    "type": {
                                                                                        "kind": "array",
                                                                                        "length": 16,
                                                                                        "type": {
                                                                                            "kind": "field"
                                                                                        }
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "length",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::log::Log"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash_counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "contract_class_logs_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 1,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "length",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
                    },
                    "visibility": "databus"
                }
            },
            "bytecode": "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",
            "custom_attributes": [
                "abi_private"
            ],
            "debug_symbols": "tZhZbtswEIbvomc9cBZuvkphBE7iFgYMJ3DtAkXgu3doDrUEIKvI7Yt/LdGXGc5CaT661/3z9cfT4fT97We3+fbRPZ8Px+Phx9Px7WV3Obyd5OpHZ9IPcLcBc+s7uJ+5bhPlBNMJ+W4T+o6CiFyjdA3lF+Q+Z7FZXBafJWSJ3YblKZMFsgjYilAWziIUL+KyCMXf5P8VW58u5/0+/e+J8eLS++68P126zel6PPbdr93xev+jn++7010vu7PcNX23P72KCvD74bhPR7d+fNrUH3UU9OFgeHgcIi4FhEAFEEMVgHUAOasA8qMFjHYGoDoAuQDQ+SpgmQWBqoDGGkQsgEiuugbuURcaFtgQFeDQTyxwi/MgljB6jgMAgZcCwEDxAYw3E8RiJ3wcAhEMjpEAmi8kQCMdoxtCEdYYgQhlJRAnCUlxXlPQyEhGKgwmA5OAzuMB3EhK72jMSqwzbMMO40t1s4lTO8JiX8AguiGwyL5O8S0KQxgoKbFrlFZoyPkSGgas50dsMMCFIbyTUolzK7BV7WTGcufRDPIwZzTSNBou0Y0mmjqj1bYslgSJoyMYPnXeRmzJEBSEobiOASmLMwMs1hmtPPWxrChPcx3iOlem7ecrrrix5JyHlQwMA4PrdrTSnJmHNJ/uqZ/SnJrdWCpkrFo/5kewX4Awj0VrJ+8HYfnGhLbUrMUQ6860NvhArrziYJBOVnWmCWHrBoid1NyXIH6ofTme5MjyFYHgh34aYTSDed7Yybe2ewolMlZWhKrOhIdbIcXHWyGbx1shw6OtkPHxVthkLGyFzA+3wsWuNFphk7GwFS5mBLuOEUdfomuEJf7fJY3RDGZMWvJnM9o1y8ObpRxP8uNTzdqGIUyjK1B9z/+LGQ4HM2y9dVhufTWCL744ohBXQWQNSnDlmMOa7UU2yOKMJVPdXqz/B9tLG8LDRifbi3HrIBYnkLDakkUbXRvy+EZnxxWR2NRf11tfhM4XK7yLPEds5XT3cjjP5z1puAOS4ODTx7RoUI1Z0aiCKqqSKqtaVaeqvDT4IZ38JE2jH8I8+7mr8Ijz9OeunNpfnv/c1al6fT7oeczKaZQkTjOooiqpsqpVFZ6VJWSvKjwrtckxLXvfWaMqvJQXFlXTdEpqx7Kq8Kx0UetUvWpQFV4qE2dUQRVVhefEH8eZ76yqU/WqIc0oRGNWb1RBVe3zpKo8rzzvUsu5pZw5H3bPx32KekqM6+mlJIGcXn6/lztlLPh+fnvZv17P+5Qwk9mg/H4D1yNshwHh/VLskbfDmFCuyCcM2W2fb8srDdttmRjmS9Cz295SZv4B",
            "is_unconstrained": false,
            "name": "forward_private_6",
            "verification_key": "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"
        },
        {
            "abi": {
                "error_types": {
                    "12327971061804302172": {
                        "error_kind": "fmtstring",
                        "item_types": [],
                        "length": 98
                    },
                    "14990209321349310352": {
                        "error_kind": "string",
                        "string": "attempt to add with overflow"
                    },
                    "15764276373176857197": {
                        "error_kind": "string",
                        "string": "Stack too deep"
                    }
                },
                "parameters": [
                    {
                        "name": "inputs",
                        "type": {
                            "fields": [
                                {
                                    "name": "call_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "msg_sender",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "contract_address",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "function_selector",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                }
                                            },
                                            {
                                                "name": "is_static_call",
                                                "type": {
                                                    "kind": "boolean"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::call_context::CallContext"
                                    }
                                },
                                {
                                    "name": "anchor_block_header",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "last_archive",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "root",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "next_available_leaf_index",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                }
                                            },
                                            {
                                                "name": "state",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "l1_to_l2_message_tree",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "root",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "next_available_leaf_index",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                            }
                                                        },
                                                        {
                                                            "name": "partial",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "note_hash_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "nullifier_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "public_data_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                                }
                                            },
                                            {
                                                "name": "sponge_blob_hash",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "global_variables",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "chain_id",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "version",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "block_number",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "slot_number",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "timestamp",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 64
                                                            }
                                                        },
                                                        {
                                                            "name": "coinbase",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "fee_recipient",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "gas_fees",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                                }
                                            },
                                            {
                                                "name": "total_fees",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "total_mana_used",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                    }
                                },
                                {
                                    "name": "tx_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "chain_id",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "version",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "gas_settings",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "teardown_gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_priority_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                    }
                                },
                                {
                                    "name": "start_side_effect_counter",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "target",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "field"
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "selector",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "args",
                        "type": {
                            "kind": "array",
                            "length": 7,
                            "type": {
                                "kind": "field"
                            }
                        },
                        "visibility": "private"
                    }
                ],
                "return_type": {
                    "abi_type": {
                        "fields": [
                            {
                                "name": "call_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "function_selector",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                                }
                            },
                            {
                                "name": "args_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "returns_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "anchor_block_header",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "last_archive",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "root",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "next_available_leaf_index",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                            }
                                        },
                                        {
                                            "name": "state",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "l1_to_l2_message_tree",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "root",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "next_available_leaf_index",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                        }
                                                    },
                                                    {
                                                        "name": "partial",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "note_hash_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "nullifier_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "public_data_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                            }
                                        },
                                        {
                                            "name": "sponge_blob_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "global_variables",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "chain_id",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "version",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "block_number",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    },
                                                    {
                                                        "name": "slot_number",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "timestamp",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 64
                                                        }
                                                    },
                                                    {
                                                        "name": "coinbase",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "fee_recipient",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "gas_fees",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                            }
                                        },
                                        {
                                            "name": "total_fees",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "total_mana_used",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                }
                            },
                            {
                                "name": "tx_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "chain_id",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "version",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "gas_settings",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "teardown_gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_priority_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                }
                            },
                            {
                                "name": "min_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "is_fee_payer",
                                "type": {
                                    "kind": "boolean"
                                }
                            },
                            {
                                "name": "expiration_timestamp",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 64
                                }
                            },
                            {
                                "name": "start_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "end_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_non_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "note_hash_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifier_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "key_validation_requests_and_separators",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "request",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "pk_m",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "x",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "y",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "is_infinite",
                                                                                    "type": {
                                                                                        "kind": "boolean"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "sk_app",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "key_type_domain_separator",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "call_context",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "function_selector",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                                                            }
                                                        },
                                                        {
                                                            "name": "args_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "returns_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "start_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "end_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 32,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "calldata_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_teardown_call_request",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        },
                                        {
                                            "name": "calldata_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                }
                            },
                            {
                                "name": "note_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifiers",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "l2_to_l1_msgs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "recipient",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "content",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_logs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "log",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "fields",
                                                                                    "type": {
                                                                                        "kind": "array",
                                                                                        "length": 16,
                                                                                        "type": {
                                                                                            "kind": "field"
                                                                                        }
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "length",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::log::Log"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash_counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "contract_class_logs_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 1,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "length",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
                    },
                    "visibility": "databus"
                }
            },
            "bytecode": "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",
            "custom_attributes": [
                "abi_private"
            ],
            "debug_symbols": "tZjbbuJIEIbfxddcdJ36wKuMUEQSZoSESMTASKso777VdLVtInWvAzs3/NjGH1Vdh7brY3jdPV9+Pe2PP99+D+sfH8PzaX847H89Hd5etuf921HPfgwufwAPa3CfqwGuR35YJz3AfEBhWMfVQFFFz1E+h/oJep2LSBFfJBSJRdKwZr3LFYEiChYVKsJFlBJUfBGlhE/9v2rr0/m02+X/nhmvLr1vT7vjeVgfL4fDavizPVyuP/r9vj1e9bw96VW3GnbHV1UF/twfdvnb52q627Vv9RTt5uh4vB0SLgXESBWQYhOAbQB5MQCFyQJGuQFQG4BcAehDE7DMgkhNQGcNElZAIt9cA/+oCx0LJCYDeAwzC/ziPEg1jIHTCEDgpQBwUH0AF9wMsdiJkMZARIdTJIBuFxKgk47Jj6GI9xiBCHUlEGcJSem2pqCTkYxUGUwOZgG9jQdwJymDpykrsc2Qjh0u1Opml+Z2xMW+gEP0Y2CRQ5sSehSGOFJyYrcovdCQDzU0DNjOj9RhgI9jeGelkm6twF61k5vKnSczKMAto5OmyXGNbnLJtRm9tiVYEyRNjmD80nk7sSVHUBGO0n0MyFlcGCDYZvTyNKS6ojzPdUj3uTJvP99xxU8l5wM8zohyHyNNviTfDgu5v7ukKbnRjNne/tWMXsUy81ix88eDLxVL/QbEMDWgMKV6lG9AmKf+I7NHnbh8j0Wp7UcwprYzvY0+kq+LilGbctOZLoTFjxCZtY9vQcLYxvT7LN2Xrwi6WCODALOezrd7FHefXCjWyIiuCLXsYHi4qzM+3tWZHu/qzI92dZbHu3qXsbCrc3i4BS12pdPVu4yFXX0xo9PVu4yFXV3w7y7pwq7er1keH5L1+yw/vtSs9DZ9mlyB5ivLf5jhcTRD2q1DQu8FGEL1xRPFdBdE16AGV79zvGd70Q2yOiPkmtuLd//D9tKH8LjR6fbi/H0QwRkk3m3Joo2uD3l8o5NpRTQ27TeP3sutD9WK4BPfIjZ6uH3Zn25HV3lOBZrgEPJcQDWapqLoTMEUTcmUTcXUmxovz7DIhlhZ8xSLbIxFNsciG2SRTbIolFEW2SyLUhlmXTWapnI/u3LMYIq51lXJlE3F1JsGU+WJ1ianouJMlZfzQvKcTX8nZKo80f8RMVWeV78kmMY8HlFNRb0zBVPMLUCVTNlUTDNP/fKh8H00TUWDM808Xa+ApmTKpmZf8KbGC8YL2b5cdX+2p/32+bDL2ZAT5nJ8qcmhh+d/3uuVOvl8P7297F4vp11OpNn4Uz9/gF8hbMYZ6PVUWiFvxkmontG3NJLNqlzW3suyqUPRcgpW7DefOWP/BQ==",
            "is_unconstrained": false,
            "name": "forward_private_7",
            "verification_key": "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"
        },
        {
            "abi": {
                "error_types": {
                    "12327971061804302172": {
                        "error_kind": "fmtstring",
                        "item_types": [],
                        "length": 98
                    },
                    "14990209321349310352": {
                        "error_kind": "string",
                        "string": "attempt to add with overflow"
                    },
                    "15764276373176857197": {
                        "error_kind": "string",
                        "string": "Stack too deep"
                    }
                },
                "parameters": [
                    {
                        "name": "inputs",
                        "type": {
                            "fields": [
                                {
                                    "name": "call_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "msg_sender",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "contract_address",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                }
                                            },
                                            {
                                                "name": "function_selector",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                }
                                            },
                                            {
                                                "name": "is_static_call",
                                                "type": {
                                                    "kind": "boolean"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::call_context::CallContext"
                                    }
                                },
                                {
                                    "name": "anchor_block_header",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "last_archive",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "root",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "next_available_leaf_index",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                }
                                            },
                                            {
                                                "name": "state",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "l1_to_l2_message_tree",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "root",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "next_available_leaf_index",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                            }
                                                        },
                                                        {
                                                            "name": "partial",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "note_hash_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "nullifier_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "public_data_tree",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "root",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "next_available_leaf_index",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                                }
                                            },
                                            {
                                                "name": "sponge_blob_hash",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "global_variables",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "chain_id",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "version",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "block_number",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "slot_number",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "timestamp",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 64
                                                            }
                                                        },
                                                        {
                                                            "name": "coinbase",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "fee_recipient",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        },
                                                        {
                                                            "name": "gas_fees",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                                }
                                            },
                                            {
                                                "name": "total_fees",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "total_mana_used",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                    }
                                },
                                {
                                    "name": "tx_context",
                                    "type": {
                                        "fields": [
                                            {
                                                "name": "chain_id",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "version",
                                                "type": {
                                                    "kind": "field"
                                                }
                                            },
                                            {
                                                "name": "gas_settings",
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "teardown_gas_limits",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas::Gas"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        },
                                                        {
                                                            "name": "max_priority_fees_per_gas",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "fee_per_da_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "fee_per_l2_gas",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 128
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                                }
                                            }
                                        ],
                                        "kind": "struct",
                                        "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                    }
                                },
                                {
                                    "name": "start_side_effect_counter",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "target",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "field"
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "selector",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                        },
                        "visibility": "private"
                    },
                    {
                        "name": "args",
                        "type": {
                            "kind": "array",
                            "length": 8,
                            "type": {
                                "kind": "field"
                            }
                        },
                        "visibility": "private"
                    }
                ],
                "return_type": {
                    "abi_type": {
                        "fields": [
                            {
                                "name": "call_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "function_selector",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::call_context::CallContext"
                                }
                            },
                            {
                                "name": "args_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "returns_hash",
                                "type": {
                                    "kind": "field"
                                }
                            },
                            {
                                "name": "anchor_block_header",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "last_archive",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "root",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "next_available_leaf_index",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                            }
                                        },
                                        {
                                            "name": "state",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "l1_to_l2_message_tree",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "root",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "next_available_leaf_index",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                        }
                                                    },
                                                    {
                                                        "name": "partial",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "note_hash_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "nullifier_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "public_data_tree",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "root",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "next_available_leaf_index",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::partial_state_reference::PartialStateReference"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::state_reference::StateReference"
                                            }
                                        },
                                        {
                                            "name": "sponge_blob_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "global_variables",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "chain_id",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "version",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "block_number",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 32
                                                        }
                                                    },
                                                    {
                                                        "name": "slot_number",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    },
                                                    {
                                                        "name": "timestamp",
                                                        "type": {
                                                            "kind": "integer",
                                                            "sign": "unsigned",
                                                            "width": 64
                                                        }
                                                    },
                                                    {
                                                        "name": "coinbase",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "fee_recipient",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "inner",
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                        }
                                                    },
                                                    {
                                                        "name": "gas_fees",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::global_variables::GlobalVariables"
                                            }
                                        },
                                        {
                                            "name": "total_fees",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "total_mana_used",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::block_header::BlockHeader"
                                }
                            },
                            {
                                "name": "tx_context",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "chain_id",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "version",
                                            "type": {
                                                "kind": "field"
                                            }
                                        },
                                        {
                                            "name": "gas_settings",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "teardown_gas_limits",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                },
                                                                {
                                                                    "name": "l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 32
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas::Gas"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    },
                                                    {
                                                        "name": "max_priority_fees_per_gas",
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "fee_per_da_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                },
                                                                {
                                                                    "name": "fee_per_l2_gas",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 128
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::protocol_types::abis::gas_fees::GasFees"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::abis::gas_settings::GasSettings"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::transaction::tx_context::TxContext"
                                }
                            },
                            {
                                "name": "min_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "is_fee_payer",
                                "type": {
                                    "kind": "boolean"
                                }
                            },
                            {
                                "name": "expiration_timestamp",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 64
                                }
                            },
                            {
                                "name": "start_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "end_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_non_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "expected_revertible_side_effect_counter",
                                "type": {
                                    "kind": "integer",
                                    "sign": "unsigned",
                                    "width": 32
                                }
                            },
                            {
                                "name": "note_hash_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifier_read_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                            }
                                                        },
                                                        {
                                                            "name": "contract_address",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "inner",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::scoped::Scoped"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "key_validation_requests_and_separators",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "request",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "pk_m",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "x",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "y",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "is_infinite",
                                                                                    "type": {
                                                                                        "kind": "boolean"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "std::embedded_curve_ops::EmbeddedCurvePoint"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "sk_app",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "key_type_domain_separator",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "call_context",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "function_selector",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::call_context::CallContext"
                                                            }
                                                        },
                                                        {
                                                            "name": "args_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "returns_hash",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "start_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        },
                                                        {
                                                            "name": "end_side_effect_counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::abis::private_call_request::PrivateCallRequest"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_call_requests",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 32,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "msg_sender",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "contract_address",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "is_static_call",
                                                                        "type": {
                                                                            "kind": "boolean"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "calldata_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "public_teardown_call_request",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "msg_sender",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "contract_address",
                                            "type": {
                                                "fields": [
                                                    {
                                                        "name": "inner",
                                                        "type": {
                                                            "kind": "field"
                                                        }
                                                    }
                                                ],
                                                "kind": "struct",
                                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                            }
                                        },
                                        {
                                            "name": "is_static_call",
                                            "type": {
                                                "kind": "boolean"
                                            }
                                        },
                                        {
                                            "name": "calldata_hash",
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::abis::public_call_request::PublicCallRequest"
                                }
                            },
                            {
                                "name": "note_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "kind": "field"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "nullifiers",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::nullifier::Nullifier"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "l2_to_l1_msgs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 8,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "recipient",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "inner",
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::address::eth_address::EthAddress"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "content",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "private_logs",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 16,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "log",
                                                                        "type": {
                                                                            "fields": [
                                                                                {
                                                                                    "name": "fields",
                                                                                    "type": {
                                                                                        "kind": "array",
                                                                                        "length": 16,
                                                                                        "type": {
                                                                                            "kind": "field"
                                                                                        }
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "length",
                                                                                    "type": {
                                                                                        "kind": "integer",
                                                                                        "sign": "unsigned",
                                                                                        "width": 32
                                                                                    }
                                                                                }
                                                                            ],
                                                                            "kind": "struct",
                                                                            "path": "aztec::protocol_types::abis::log::Log"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "note_hash_counter",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::private_log::PrivateLogData"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            },
                            {
                                "name": "contract_class_logs_hashes",
                                "type": {
                                    "fields": [
                                        {
                                            "name": "array",
                                            "type": {
                                                "kind": "array",
                                                "length": 1,
                                                "type": {
                                                    "fields": [
                                                        {
                                                            "name": "inner",
                                                            "type": {
                                                                "fields": [
                                                                    {
                                                                        "name": "value",
                                                                        "type": {
                                                                            "kind": "field"
                                                                        }
                                                                    },
                                                                    {
                                                                        "name": "length",
                                                                        "type": {
                                                                            "kind": "integer",
                                                                            "sign": "unsigned",
                                                                            "width": 32
                                                                        }
                                                                    }
                                                                ],
                                                                "kind": "struct",
                                                                "path": "aztec::protocol_types::abis::log_hash::LogHash"
                                                            }
                                                        },
                                                        {
                                                            "name": "counter",
                                                            "type": {
                                                                "kind": "integer",
                                                                "sign": "unsigned",
                                                                "width": 32
                                                            }
                                                        }
                                                    ],
                                                    "kind": "struct",
                                                    "path": "aztec::protocol_types::side_effect::counted::Counted"
                                                }
                                            }
                                        },
                                        {
                                            "name": "length",
                                            "type": {
                                                "kind": "integer",
                                                "sign": "unsigned",
                                                "width": 32
                                            }
                                        }
                                    ],
                                    "kind": "struct",
                                    "path": "aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"
                                }
                            }
                        ],
                        "kind": "struct",
                        "path": "aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"
                    },
                    "visibility": "databus"
                }
            },
            "bytecode": "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",
            "custom_attributes": [
                "abi_private"
            ],
            "debug_symbols": "tZhZbtswEIbvomc/cBZuvkphBE6iFgYMJ3DtAkXgu3doDrUEIKtY7Ys/LdGfGc5CaT661/75+uPpcPr+9rPbfvvons+H4/Hw4+n49rK/HN5OcvWjM+kHuNuCuW06uJ+5bhvlBNMJ+W4bNh0FgVyjdA3lF+Q+Z9gMl+EzQkbstixPmQzIEGEroAzOEBUvcBmi4m/y/4qtT5dz36f/PTFeXHrfn/vTpduersfjpvu1P17vf/TzfX+687I/y12z6frTq1AEvx+OfTq6bcanTf1RR0EfDoaHxyHiUoEQqAjEUBXAugA5qwLkRwsY7UyA6gLIRQCdrwossyBQVaCxBhGLQCRXXQO31oWGBTZEFXDoJxa4xXkQSxg9x0EAgZcKgIHiAxhvJhKLnfBxCEQwOEYCaL6QAI10jG4IRXjECEQoK4E4SUiK85qCRkYyUtFgMjAJ6DwewI2k9I7GrMS6hm3YYXypbjZxakdY7AsYRDcEFtnXVXxLhSEMKimxayqt0JDzJTQMWM+P2NAAF4bwTkolzq3AVrWTGcudRzPIw1yjkabRcIluNNHUNVpty2JJkDg6guFT523ElgxBkTAUH9OAlMVZAyzWNVp56mNZUZ7mOsTHXJm2n6+44saScx7WawT7mEYcfYmuHhYy/3dJYzSDGZO9/bMZrYpl5qFip68HnyqW2g2IYWxAfkz1YL8gwjz2Hzt51QnL91i0pf1YDLHuTGujD+TKomKQplx1pinC1g0idtI+viTihzYmx5N0D1/YK8NgB+FoBvN8j+LmmwuFEhkrK0I1OxhWd3XG9V2daX1XZ17b1dmu7+pNjYVdnf3qFrTYlUZXb2os7OptDQyDBjfsaCY6D2+WcjxZ1E+JbhtZyjQuKVTf8/9ihsPBDFuvN8utr0bwxRdHFOJDIrIGJbpyzOGRniy7SnHGkqn2ZOv/QU9ui/CwO0hPNu4xEYsTkfCwJYt2h7bI+t3Bjisisam/rre+CJ0vVngXeS6xk9P9y+E8n/ek4Q5IgoNPH9PCoIyZaJSgRCUpWWmVTql6afBDOvlJTKOfO0WPdPhzJ6Vensc/pPMf0gEQ6QSIYh483Rkz2eTnGfQclZRqXshKq3RKrwzKmGmNEpSoTNMpqWHLKTxCqxS9lD/WK0PqE8KY6UTPij0OlKgkpeilcnJW6ZReKXpO1svFrO+NEpSopDTLELLSKp1S7fNBqXpB9QKk1nRLuXU+7J+PfcqOlEDX00tJFjm9/H4vd8r48P389tK/Xs99SqzJDFF+v4HbIOyGQeL9Utwg74ZxolyRTx2yu02+Lb2Y7a5MFvMl2LDb3VIG/wE=",
            "is_unconstrained": false,
            "name": "forward_private_8",
            "verification_key": "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"
        },
        {
            "abi": {
                "error_types": {
                    "12913276134398371456": {
                        "error_kind": "string",
                        "string": "push out of bounds"
                    },
                    "14990209321349310352": {
                        "error_kind": "string",
                        "string": "attempt to add with overflow"
                    },
                    "15764276373176857197": {
                        "error_kind": "string",
                        "string": "Stack too deep"
                    },
                    "16431471497789672479": {
                        "error_kind": "string",
                        "string": "Index out of bounds"
                    },
                    "9530675838293881722": {
                        "error_kind": "string",
                        "string": "Writer did not write all data"
                    },
                    "992401946138144806": {
                        "error_kind": "string",
                        "string": "Attempted to read past end of BoundedVec"
                    }
                },
                "parameters": [
                    {
                        "name": "messages",
                        "type": {
                            "fields": [
                                {
                                    "name": "storage",
                                    "type": {
                                        "kind": "array",
                                        "length": 16,
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "ciphertext",
                                                    "type": {
                                                        "fields": [
                                                            {
                                                                "name": "storage",
                                                                "type": {
                                                                    "kind": "array",
                                                                    "length": 15,
                                                                    "type": {
                                                                        "kind": "field"
                                                                    }
                                                                }
                                                            },
                                                            {
                                                                "name": "len",
                                                                "type": {
                                                                    "kind": "integer",
                                                                    "sign": "unsigned",
                                                                    "width": 32
                                                                }
                                                            }
                                                        ],
                                                        "kind": "struct",
                                                        "path": "std::collections::bounded_vec::BoundedVec"
                                                    }
                                                },
                                                {
                                                    "name": "recipient",
                                                    "type": {
                                                        "fields": [
                                                            {
                                                                "name": "inner",
                                                                "type": {
                                                                    "kind": "field"
                                                                }
                                                            }
                                                        ],
                                                        "kind": "struct",
                                                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                    }
                                                },
                                                {
                                                    "name": "tx_hash",
                                                    "type": {
                                                        "fields": [
                                                            {
                                                                "name": "_is_some",
                                                                "type": {
                                                                    "kind": "boolean"
                                                                }
                                                            },
                                                            {
                                                                "name": "_value",
                                                                "type": {
                                                                    "kind": "field"
                                                                }
                                                            }
                                                        ],
                                                        "kind": "struct",
                                                        "path": "std::option::Option"
                                                    }
                                                },
                                                {
                                                    "name": "anchor_block_timestamp",
                                                    "type": {
                                                        "kind": "integer",
                                                        "sign": "unsigned",
                                                        "width": 64
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::messages::processing::offchain::OffchainMessage"
                                        }
                                    }
                                },
                                {
                                    "name": "len",
                                    "type": {
                                        "kind": "integer",
                                        "sign": "unsigned",
                                        "width": 32
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "std::collections::bounded_vec::BoundedVec"
                        },
                        "visibility": "private"
                    }
                ],
                "return_type": null
            },
            "bytecode": "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",
            "custom_attributes": [
                "abi_utility"
            ],
            "debug_symbols": "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",
            "is_unconstrained": true,
            "name": "offchain_receive"
        },
        {
            "abi": {
                "error_types": {
                    "10791800398362570014": {
                        "error_kind": "string",
                        "string": "extend_from_bounded_vec out of bounds"
                    },
                    "11021520179822076911": {
                        "error_kind": "string",
                        "string": "Attempted to delete past the length of a CapsuleArray"
                    },
                    "11692359521570349358": {
                        "error_kind": "fmtstring",
                        "item_types": [],
                        "length": 40
                    },
                    "12327971061804302172": {
                        "error_kind": "fmtstring",
                        "item_types": [],
                        "length": 98
                    },
                    "12469291177396340830": {
                        "error_kind": "string",
                        "string": "call to assert_max_bit_size"
                    },
                    "12913276134398371456": {
                        "error_kind": "string",
                        "string": "push out of bounds"
                    },
                    "14990209321349310352": {
                        "error_kind": "string",
                        "string": "attempt to add with overflow"
                    },
                    "15764276373176857197": {
                        "error_kind": "string",
                        "string": "Stack too deep"
                    },
                    "16431471497789672479": {
                        "error_kind": "string",
                        "string": "Index out of bounds"
                    },
                    "17655676068928457687": {
                        "error_kind": "string",
                        "string": "Reader did not read all data"
                    },
                    "1998584279744703196": {
                        "error_kind": "string",
                        "string": "attempt to subtract with overflow"
                    },
                    "2967937905572420042": {
                        "error_kind": "fmtstring",
                        "item_types": [
                            {
                                "kind": "field"
                            },
                            {
                                "kind": "field"
                            }
                        ],
                        "length": 61
                    },
                    "3330370348214585450": {
                        "error_kind": "fmtstring",
                        "item_types": [
                            {
                                "kind": "field"
                            },
                            {
                                "kind": "field"
                            }
                        ],
                        "length": 48
                    },
                    "361444214588792908": {
                        "error_kind": "string",
                        "string": "attempt to multiply with overflow"
                    },
                    "7158692485152407286": {
                        "error_kind": "fmtstring",
                        "item_types": [
                            {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 32
                            }
                        ],
                        "length": 101
                    },
                    "9530675838293881722": {
                        "error_kind": "string",
                        "string": "Writer did not write all data"
                    },
                    "9791669845391776238": {
                        "error_kind": "string",
                        "string": "0 has a square root; you cannot claim it is not square"
                    },
                    "9885968605480832328": {
                        "error_kind": "string",
                        "string": "Attempted to read past the length of a CapsuleArray"
                    },
                    "992401946138144806": {
                        "error_kind": "string",
                        "string": "Attempted to read past end of BoundedVec"
                    }
                },
                "parameters": [
                    {
                        "name": "scope",
                        "type": {
                            "fields": [
                                {
                                    "name": "inner",
                                    "type": {
                                        "kind": "field"
                                    }
                                }
                            ],
                            "kind": "struct",
                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                        },
                        "visibility": "private"
                    }
                ],
                "return_type": null
            },
            "bytecode": "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",
            "custom_attributes": [
                "abi_utility"
            ],
            "debug_symbols": "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",
            "is_unconstrained": true,
            "name": "sync_state"
        },
        {
            "abi": {
                "error_types": {
                    "1335198680857977525": {
                        "error_kind": "string",
                        "string": "No public functions"
                    }
                },
                "parameters": [
                    {
                        "name": "selector",
                        "type": {
                            "kind": "field"
                        },
                        "visibility": "private"
                    }
                ],
                "return_type": null
            },
            "bytecode": "JwAABAEqAAABBRKHlCBFHCK1PAAAAQ==",
            "custom_attributes": [
                "abi_public"
            ],
            "debug_symbols": "XY1bCoAgEEX3Mt+toK1EiI9RBkRl0iDEvWeRIH3ee+6jgkFVnKBg4wHrVkExeU9O+Khlphi6W9sCQ4rMiN2CiW97D0hN/C+dkkkqj5+0JeiJ5isNMk4TR42mMD5LL2t7uwE=",
            "is_unconstrained": true,
            "name": "public_dispatch"
        }
    ],
    "name": "GenericProxy",
    "noir_version": "1.0.0-beta.18+190931435915a6ef908d9be090036d98356237b3",
    "outputs": {
        "globals": {},
        "structs": {
            "functions": [
                {
                    "fields": [
                        {
                            "name": "parameters",
                            "type": {
                                "fields": [
                                    {
                                        "name": "_target",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "field"
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                        }
                                    },
                                    {
                                        "name": "_selector",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "integer",
                                                        "sign": "unsigned",
                                                        "width": 32
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                        }
                                    }
                                ],
                                "kind": "struct",
                                "path": "GenericProxy::forward_private_0_parameters"
                            }
                        }
                    ],
                    "kind": "struct",
                    "path": "GenericProxy::forward_private_0_abi"
                },
                {
                    "fields": [
                        {
                            "name": "parameters",
                            "type": {
                                "fields": [
                                    {
                                        "name": "_target",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "field"
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                        }
                                    },
                                    {
                                        "name": "_selector",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "integer",
                                                        "sign": "unsigned",
                                                        "width": 32
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                        }
                                    },
                                    {
                                        "name": "_args",
                                        "type": {
                                            "kind": "array",
                                            "length": 1,
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    }
                                ],
                                "kind": "struct",
                                "path": "GenericProxy::forward_private_1_parameters"
                            }
                        }
                    ],
                    "kind": "struct",
                    "path": "GenericProxy::forward_private_1_abi"
                },
                {
                    "fields": [
                        {
                            "name": "parameters",
                            "type": {
                                "fields": [
                                    {
                                        "name": "_target",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "field"
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                        }
                                    },
                                    {
                                        "name": "_selector",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "integer",
                                                        "sign": "unsigned",
                                                        "width": 32
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                        }
                                    },
                                    {
                                        "name": "_args",
                                        "type": {
                                            "kind": "array",
                                            "length": 2,
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    }
                                ],
                                "kind": "struct",
                                "path": "GenericProxy::forward_private_2_parameters"
                            }
                        }
                    ],
                    "kind": "struct",
                    "path": "GenericProxy::forward_private_2_abi"
                },
                {
                    "fields": [
                        {
                            "name": "parameters",
                            "type": {
                                "fields": [
                                    {
                                        "name": "_target",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "field"
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                        }
                                    },
                                    {
                                        "name": "_selector",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "integer",
                                                        "sign": "unsigned",
                                                        "width": 32
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                        }
                                    },
                                    {
                                        "name": "_args",
                                        "type": {
                                            "kind": "array",
                                            "length": 3,
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    }
                                ],
                                "kind": "struct",
                                "path": "GenericProxy::forward_private_3_parameters"
                            }
                        }
                    ],
                    "kind": "struct",
                    "path": "GenericProxy::forward_private_3_abi"
                },
                {
                    "fields": [
                        {
                            "name": "parameters",
                            "type": {
                                "fields": [
                                    {
                                        "name": "_target",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "field"
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                        }
                                    },
                                    {
                                        "name": "_selector",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "integer",
                                                        "sign": "unsigned",
                                                        "width": 32
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                        }
                                    },
                                    {
                                        "name": "_args",
                                        "type": {
                                            "kind": "array",
                                            "length": 4,
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    }
                                ],
                                "kind": "struct",
                                "path": "GenericProxy::forward_private_4_parameters"
                            }
                        }
                    ],
                    "kind": "struct",
                    "path": "GenericProxy::forward_private_4_abi"
                },
                {
                    "fields": [
                        {
                            "name": "parameters",
                            "type": {
                                "fields": [
                                    {
                                        "name": "_target",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "field"
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                        }
                                    },
                                    {
                                        "name": "_selector",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "integer",
                                                        "sign": "unsigned",
                                                        "width": 32
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                        }
                                    },
                                    {
                                        "name": "_args",
                                        "type": {
                                            "kind": "array",
                                            "length": 4,
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    }
                                ],
                                "kind": "struct",
                                "path": "GenericProxy::forward_private_4_and_return_parameters"
                            }
                        },
                        {
                            "name": "return_type",
                            "type": {
                                "kind": "field"
                            }
                        }
                    ],
                    "kind": "struct",
                    "path": "GenericProxy::forward_private_4_and_return_abi"
                },
                {
                    "fields": [
                        {
                            "name": "parameters",
                            "type": {
                                "fields": [
                                    {
                                        "name": "_target",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "field"
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                        }
                                    },
                                    {
                                        "name": "_selector",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "integer",
                                                        "sign": "unsigned",
                                                        "width": 32
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                        }
                                    },
                                    {
                                        "name": "_args",
                                        "type": {
                                            "kind": "array",
                                            "length": 5,
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    }
                                ],
                                "kind": "struct",
                                "path": "GenericProxy::forward_private_5_parameters"
                            }
                        }
                    ],
                    "kind": "struct",
                    "path": "GenericProxy::forward_private_5_abi"
                },
                {
                    "fields": [
                        {
                            "name": "parameters",
                            "type": {
                                "fields": [
                                    {
                                        "name": "_target",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "field"
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                        }
                                    },
                                    {
                                        "name": "_selector",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "integer",
                                                        "sign": "unsigned",
                                                        "width": 32
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                        }
                                    },
                                    {
                                        "name": "_args",
                                        "type": {
                                            "kind": "array",
                                            "length": 6,
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    }
                                ],
                                "kind": "struct",
                                "path": "GenericProxy::forward_private_6_parameters"
                            }
                        }
                    ],
                    "kind": "struct",
                    "path": "GenericProxy::forward_private_6_abi"
                },
                {
                    "fields": [
                        {
                            "name": "parameters",
                            "type": {
                                "fields": [
                                    {
                                        "name": "_target",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "field"
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                        }
                                    },
                                    {
                                        "name": "_selector",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "integer",
                                                        "sign": "unsigned",
                                                        "width": 32
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                        }
                                    },
                                    {
                                        "name": "_args",
                                        "type": {
                                            "kind": "array",
                                            "length": 7,
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    }
                                ],
                                "kind": "struct",
                                "path": "GenericProxy::forward_private_7_parameters"
                            }
                        }
                    ],
                    "kind": "struct",
                    "path": "GenericProxy::forward_private_7_abi"
                },
                {
                    "fields": [
                        {
                            "name": "parameters",
                            "type": {
                                "fields": [
                                    {
                                        "name": "_target",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "field"
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                        }
                                    },
                                    {
                                        "name": "_selector",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "integer",
                                                        "sign": "unsigned",
                                                        "width": 32
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::abis::function_selector::FunctionSelector"
                                        }
                                    },
                                    {
                                        "name": "_args",
                                        "type": {
                                            "kind": "array",
                                            "length": 8,
                                            "type": {
                                                "kind": "field"
                                            }
                                        }
                                    }
                                ],
                                "kind": "struct",
                                "path": "GenericProxy::forward_private_8_parameters"
                            }
                        }
                    ],
                    "kind": "struct",
                    "path": "GenericProxy::forward_private_8_abi"
                },
                {
                    "fields": [
                        {
                            "name": "parameters",
                            "type": {
                                "fields": [
                                    {
                                        "name": "messages",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "storage",
                                                    "type": {
                                                        "kind": "array",
                                                        "length": 16,
                                                        "type": {
                                                            "fields": [
                                                                {
                                                                    "name": "ciphertext",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "storage",
                                                                                "type": {
                                                                                    "kind": "array",
                                                                                    "length": 15,
                                                                                    "type": {
                                                                                        "kind": "field"
                                                                                    }
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "len",
                                                                                "type": {
                                                                                    "kind": "integer",
                                                                                    "sign": "unsigned",
                                                                                    "width": 32
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "std::collections::bounded_vec::BoundedVec"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "recipient",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "inner",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "tx_hash",
                                                                    "type": {
                                                                        "fields": [
                                                                            {
                                                                                "name": "_is_some",
                                                                                "type": {
                                                                                    "kind": "boolean"
                                                                                }
                                                                            },
                                                                            {
                                                                                "name": "_value",
                                                                                "type": {
                                                                                    "kind": "field"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "kind": "struct",
                                                                        "path": "std::option::Option"
                                                                    }
                                                                },
                                                                {
                                                                    "name": "anchor_block_timestamp",
                                                                    "type": {
                                                                        "kind": "integer",
                                                                        "sign": "unsigned",
                                                                        "width": 64
                                                                    }
                                                                }
                                                            ],
                                                            "kind": "struct",
                                                            "path": "aztec::messages::processing::offchain::OffchainMessage"
                                                        }
                                                    }
                                                },
                                                {
                                                    "name": "len",
                                                    "type": {
                                                        "kind": "integer",
                                                        "sign": "unsigned",
                                                        "width": 32
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "std::collections::bounded_vec::BoundedVec"
                                        }
                                    }
                                ],
                                "kind": "struct",
                                "path": "GenericProxy::offchain_receive_parameters"
                            }
                        }
                    ],
                    "kind": "struct",
                    "path": "GenericProxy::offchain_receive_abi"
                },
                {
                    "fields": [
                        {
                            "name": "parameters",
                            "type": {
                                "fields": [
                                    {
                                        "name": "scope",
                                        "type": {
                                            "fields": [
                                                {
                                                    "name": "inner",
                                                    "type": {
                                                        "kind": "field"
                                                    }
                                                }
                                            ],
                                            "kind": "struct",
                                            "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                                        }
                                    }
                                ],
                                "kind": "struct",
                                "path": "GenericProxy::sync_state_parameters"
                            }
                        }
                    ],
                    "kind": "struct",
                    "path": "GenericProxy::sync_state_abi"
                }
            ]
        }
    },
    "transpiled": true
}
