1313#include "macros/array_map.simf"
1414
1515/// FRI commitments:
16- /// * first layer commitment
17- /// * inner layers commitments
16+ /// * first and inner layers commitments
1817/// * last layer: line polynomial coefficient (always degree 0)
19- type FriCommitments = (u256, [u256; NUM_FRI_LAYERS], QM31);
18+ type FriCommitments = ([u256; NUM_FRI_LAYERS], QM31);
2019
2120/// FRI layer:
2221/// * commitment
@@ -27,7 +26,7 @@ type FriLayer = (u256, QM31);
2726/// * first layer
2827/// * inner layers
2928/// * last layer: line polynomial coefficient (always degree 0)
30- type FriLayers = (FriLayer, [FriLayer; NUM_FRI_LAYERS], QM31);
29+ type FriLayers = ([FriLayer; NUM_FRI_LAYERS], QM31);
3130
3231/// Reads the FRI layer commitment and samples a random coefficient.
3332/// Fails if the computed FRI layer evaluation does not match the pre-sampled FRI layer evaluation.
@@ -43,12 +42,12 @@ fn fri_layer_commit(root: u256, state: ChannelState) -> (FriLayer, ChannelState)
4342}
4443
4544/// Mix line polynomial coefficients into the channel state.
46- fn channel_mix_line_poly(state: ChannelState, last_layer : QM31) -> ChannelState {
45+ fn channel_mix_line_poly(state: ChannelState, line_poly_coeff : QM31) -> ChannelState {
4746 let (digest, _): ChannelState = state;
4847 let ctx: Ctx8 = jet::sha_256_ctx_8_init();
4948 let ctx: Ctx8 = jet::sha_256_ctx_8_add_32(ctx, digest);
5049 // Mix coefficients
51- let ctx: Ctx8 = hasher_add_qm31(last_layer , ctx);
50+ let ctx: Ctx8 = hasher_add_qm31(line_poly_coeff , ctx);
5251 let res: u256 = jet::sha_256_ctx_8_finalize(ctx);
5352 // Reset the num_sent counter
5453 (res, 0)
@@ -70,38 +69,31 @@ fn fri_layer_commit_map_arr(commitments: [u256; NUM_FRI_LAYERS], state: ChannelS
7069
7170/// Commits the FRI layers.
7271fn fri_commit(state: ChannelState, fri_commitments: FriCommitments) -> (ChannelState, FriLayers) {
73- let (first_commitment, inner_commitments, last_layer ): FriCommitments = fri_commitments;
72+ let (commitments, line_poly_coeff ): FriCommitments = fri_commitments;
7473
75- // Commit first layer
76- let (first_layer, state): (FriLayer, ChannelState) = fri_layer_commit(first_commitment, state);
77-
78- // Commit inner layers
79- let (inner_layers, state): ([FriLayer; NUM_FRI_LAYERS], ChannelState) = fri_layer_commit_map_arr(inner_commitments, state);
74+ // Commit first and inner layers
75+ let (layers, state): ([FriLayer; NUM_FRI_LAYERS], ChannelState) = fri_layer_commit_map_arr(commitments, state);
8076
8177 // Commit last layer (line polynomial coefficients)
82- let state: ChannelState = channel_mix_line_poly(state, last_layer );
78+ let state: ChannelState = channel_mix_line_poly(state, line_poly_coeff );
8379
84- (state, (first_layer, inner_layers, last_layer ))
80+ (state, (layers, line_poly_coeff ))
8581}
8682
8783#ifdef TESTING
8884
8985fn test_fri_commit() {
90- let state: ChannelState = (0x44dff4effae0be493c21672683c892b3baeaa7d251e5e7153bc0e0b2da8a9d96 , 0);
86+ let state: ChannelState = (0x28583eb83f6fe4837a995243e8e5c2648edbfd9cdd06262edcbce47fe96e5e3c , 0);
9187 let fri_commitments: FriCommitments = (
92- 0x768a89291d8db4be401f5545f1cc7f25a1b00753773a4b3789592badc33ecf3f,
93- [
94- 0x3f2a2cb1b0384b1ddd57c16bb40b67a0b011c1449606196e959fdbff885a0280,
95- 0xb03eededd1682fcab8c82d0d284ccf0f8ddc7d003708ecd12323adfd843f0f5f,
96- ],
97- qm31(1462473176, 2065988908, 1080482792, 1497677558),
88+ [0x0bee0d98d63597a3b6725c885e77c23647585e29ae3ebd3b3b88bdba21f30f13, 0xd63312459c0bd0456789cce101ab292880c3bf103514eb22bd7457808388423e],
89+ qm31(502777192, 1639915013, 504572960, 826242631),
9890 );
9991 let ((digest, _), layers): (ChannelState, FriLayers) = fri_commit(state, fri_commitments);
100- assert!(jet::eq_256(digest, 0xa906adfe1ac2b7cf283ae8a11e16a1c4c44834f259056eacd36d14044761266c ));
92+ assert!(jet::eq_256(digest, 0x3532bad0c22ceae1a8c9e137dfde35b18e8bd4a08ce6c5e64ea3d9465a517f82 ));
10193
102- let (first_layer, _ , _): FriLayers = layers;
103- let (_, first_alpha): FriLayer = first_layer ;
104- assert!(qm31_eq(first_alpha, qm31(299390734, 1867715474, 641071780, 899293580 )));
94+ let (layers , _): FriLayers = layers;
95+ let (( _, first_alpha), _): ( FriLayer, FriLayer) = <[FriLayer; NUM_FRI_LAYERS]>::into(layers) ;
96+ assert!(qm31_eq(first_alpha, qm31(766788992, 1201991280, 1148418600, 2122329945 )));
10597}
10698
10799#endif // TESTING
0 commit comments