1use crate::types::{AztecAddress, Fr};
6
7pub mod protocol_contract_address {
9 use super::*;
10
11 pub fn fee_juice() -> AztecAddress {
13 AztecAddress(Fr::from(5u64))
14 }
15
16 pub fn auth_registry() -> AztecAddress {
18 AztecAddress(Fr::from(1u64))
19 }
20
21 pub fn contract_instance_deployer() -> AztecAddress {
23 AztecAddress(Fr::from(2u64))
24 }
25
26 pub fn contract_instance_registry() -> AztecAddress {
28 contract_instance_deployer()
29 }
30
31 pub fn contract_class_registerer() -> AztecAddress {
33 AztecAddress(Fr::from(3u64))
34 }
35
36 pub fn contract_class_registry() -> AztecAddress {
38 contract_class_registerer()
39 }
40
41 pub fn multi_call_entrypoint() -> AztecAddress {
43 AztecAddress(Fr::from(4u64))
44 }
45}
46
47pub mod domain_separator {
51 pub const AUTHWIT_INNER: u32 = 221_354_163;
55
56 pub const AUTHWIT_OUTER: u32 = 3_283_595_782;
60
61 pub const FUNCTION_ARGS: u32 = 3_576_554_347;
65
66 pub const PUBLIC_CALLDATA: u32 = 2_760_353_947;
70
71 pub const PUBLIC_KEYS_HASH: u32 = 777_457_226;
73
74 pub const PARTIAL_ADDRESS: u32 = 2_103_633_018;
76
77 pub const CONTRACT_CLASS_ID: u32 = 3_923_495_515;
79
80 pub const PRIVATE_FUNCTION_LEAF: u32 = 1_389_398_688;
82
83 pub const PUBLIC_BYTECODE: u32 = 260_313_585;
85
86 pub const INITIALIZER: u32 = 385_396_519;
88
89 pub const CONTRACT_ADDRESS_V1: u32 = 1_788_365_517;
91
92 pub const NHK_M: u32 = 242_137_788;
96
97 pub const IVSK_M: u32 = 2_747_825_907;
101
102 pub const OVSK_M: u32 = 4_272_201_051;
106
107 pub const TSK_M: u32 = 1_546_190_975;
111
112 pub const SECRET_HASH: u32 = 4_199_652_938;
116
117 pub const SIGNATURE_PAYLOAD: u32 = 2_279_843_839;
121}
122
123pub const FUNCTION_TREE_HEIGHT: usize = 7;
127
128pub const MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS: usize = 3000;
130
131pub const ARTIFACT_FUNCTION_TREE_MAX_HEIGHT: usize = 7;
133
134pub const MAX_PROCESSABLE_L2_GAS: u64 = 6_540_000;
136
137pub fn contract_class_registry_bytecode_capsule_slot() -> Fr {
139 Fr::from_hex("0x1f61038721b052d5389449bf44f73c817146aedfab1ef13d37f16ce928df1fb7")
140 .expect("valid contract class registry capsule slot constant")
141}
142
143#[cfg(test)]
144#[allow(clippy::expect_used)]
145mod tests {
146 use super::*;
147
148 #[test]
149 fn fee_juice_address_is_5() {
150 let addr = protocol_contract_address::fee_juice();
151 assert_eq!(addr, AztecAddress(Fr::from(5u64)));
152 }
153
154 #[test]
155 fn auth_registry_address_is_1() {
156 let addr = protocol_contract_address::auth_registry();
157 assert_eq!(addr, AztecAddress(Fr::from(1u64)));
158 }
159
160 #[test]
161 fn domain_separator_values_match_ts() {
162 assert_eq!(domain_separator::AUTHWIT_INNER, 221_354_163);
163 assert_eq!(domain_separator::AUTHWIT_OUTER, 3_283_595_782);
164 assert_eq!(domain_separator::FUNCTION_ARGS, 3_576_554_347);
165 assert_eq!(domain_separator::PUBLIC_CALLDATA, 2_760_353_947);
166 assert_eq!(domain_separator::PUBLIC_KEYS_HASH, 777_457_226);
167 assert_eq!(domain_separator::PARTIAL_ADDRESS, 2_103_633_018);
168 assert_eq!(domain_separator::CONTRACT_CLASS_ID, 3_923_495_515);
169 assert_eq!(domain_separator::PRIVATE_FUNCTION_LEAF, 1_389_398_688);
170 assert_eq!(domain_separator::PUBLIC_BYTECODE, 260_313_585);
171 assert_eq!(domain_separator::INITIALIZER, 385_396_519);
172 assert_eq!(domain_separator::CONTRACT_ADDRESS_V1, 1_788_365_517);
173 assert_eq!(domain_separator::NHK_M, 242_137_788);
175 assert_eq!(domain_separator::IVSK_M, 2_747_825_907);
176 assert_eq!(domain_separator::OVSK_M, 4_272_201_051);
177 assert_eq!(domain_separator::TSK_M, 1_546_190_975);
178 assert_eq!(domain_separator::SECRET_HASH, 4_199_652_938);
179 }
180
181 #[test]
182 fn protocol_contract_addresses() {
183 assert_eq!(
184 protocol_contract_address::contract_instance_deployer(),
185 AztecAddress(Fr::from(2u64))
186 );
187 assert_eq!(
188 protocol_contract_address::contract_class_registerer(),
189 AztecAddress(Fr::from(3u64))
190 );
191 assert_eq!(
192 protocol_contract_address::multi_call_entrypoint(),
193 AztecAddress(Fr::from(4u64))
194 );
195 }
196
197 #[test]
198 fn size_constants() {
199 assert_eq!(super::FUNCTION_TREE_HEIGHT, 7);
200 assert_eq!(super::MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS, 3000);
201 assert_eq!(super::ARTIFACT_FUNCTION_TREE_MAX_HEIGHT, 7);
202 assert_eq!(super::MAX_PROCESSABLE_L2_GAS, 6_540_000);
203 }
204
205 #[test]
206 fn capsule_slot_constant_matches_ts() {
207 assert_eq!(
208 contract_class_registry_bytecode_capsule_slot(),
209 Fr::from_hex("0x1f61038721b052d5389449bf44f73c817146aedfab1ef13d37f16ce928df1fb7")
210 .expect("valid slot")
211 );
212 }
213}