Skip to content

Commit a2256ea

Browse files
committed
feat: add fact hash calculation for wrapped bootloaded programs
1 parent 4e7ca6e commit a2256ea

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ There are also few utility function for calculating hashes:
9797
- `get_verification_hash(fact_hash: felt252, verifier_config_hash: felt252, security_bits: u32) -> felt252` - calculates verification hash for given `fact_hash`, `verifier_config_hash` and `security_bits`.
9898
- `calculate_fact_hash(program_hash: felt256, output: Span<felt252>) -> felt252` - calculates fact hash for given `program_hash` and `output` array.
9999
- `calculate_bootloaded_fact_hash(bootloader_program_hash: felt252, child_program_hash: felt252, child_output: Span<felt252>) -> felt252` - calculates fact hash for program that was bootloaded with standard bootloader.
100+
- `calculate_wrapped_bootloaded_fact_hash(wrapper_program_hash: felt252, bootloader_program_hash: felt252, child_program_hash: felt252, child_output: Span<felt252>) -> felt252` - calculates fact hash for a wrapped and bootloaded with the standard bootloader.
100101

101102
Available constants are:
102103

src/lib_utils.cairo

+26
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@ const SHARP_BOOTLOADER_PROGRAM_HASH: felt252 =
123123
0x5ab580b04e3532b6b18f81cfa654a05e29dd8e2352d88df1e765a84072db07;
124124
const STONE_BOOTLOADER_PROGRAM_HASH: felt252 =
125125
0x40519557c48b25e7e7d27cb27297300b94909028c327b385990f0b649920cc3;
126+
const CAIRO_VERIFIER_PROGRAM_HASH: felt252 =
127+
0x193641eb151b0f41674641089952e60bc3aded26e3cf42793655c562b8c3aa0;
126128

127129
fn calculate_bootloaded_fact_hash(
128130
bootloader_program_hash: felt252, child_program_hash: felt252, child_output: Span<felt252>
@@ -139,3 +141,27 @@ fn calculate_bootloaded_fact_hash(
139141
.update(bootloader_output.finalize())
140142
.finalize()
141143
}
144+
145+
fn calculate_wrapped_bootloaded_fact_hash(
146+
wrapper_program_hash: felt252, bootloader_program_hash: felt252, child_program_hash: felt252, child_output: Span<felt252>
147+
) -> felt252 {
148+
let mut bootloader_output = PoseidonImpl::new()
149+
.update(0x1)
150+
.update(child_output.len().into() + 2)
151+
.update(child_program_hash);
152+
for x in child_output {
153+
bootloader_output = bootloader_output.update(*x);
154+
};
155+
156+
let mut wrapper_output = PoseidonImpl::new()
157+
.update(0x1)
158+
.update(0x4)
159+
.update(wrapper_program_hash)
160+
.update(bootloader_program_hash)
161+
.update(bootloader_output.finalize());
162+
163+
PoseidonImpl::new()
164+
.update(bootloader_program_hash)
165+
.update(wrapper_output.finalize())
166+
.finalize()
167+
}

0 commit comments

Comments
 (0)