From 6474fa17b323c0274f0ed6305691d87c1763c819 Mon Sep 17 00:00:00 2001 From: kunxian xia Date: Tue, 2 Dec 2025 18:37:15 +0800 Subject: [PATCH 1/3] fix sumcheck unit test --- .../native/circuit/src/sumcheck/chip.rs | 6 +- .../native/circuit/src/sumcheck/execution.rs | 8 +- extensions/native/recursion/tests/sumcheck.rs | 117 +++++++++++++----- 3 files changed, 95 insertions(+), 36 deletions(-) diff --git a/extensions/native/circuit/src/sumcheck/chip.rs b/extensions/native/circuit/src/sumcheck/chip.rs index a33d286cd1..d6971f9332 100644 --- a/extensions/native/circuit/src/sumcheck/chip.rs +++ b/extensions/native/circuit/src/sumcheck/chip.rs @@ -325,7 +325,8 @@ where let eval_rlc = FieldExtension::multiply(alpha_acc, eval); prod_specific.eval_rlc = eval_rlc; - if mode == NEXT_LAYER_MODE && round + 1 < max_round - 1 { + let to_next_round = if mode == NEXT_LAYER_MODE { 1 } else { 0 }; + if round + to_next_round < max_round - 1 { eval_acc = FieldExtension::add(eval_acc, eval_rlc); prod_row.should_acc = F::ONE; prod_row.prod_acc = F::ONE; @@ -445,7 +446,8 @@ where FieldExtension::multiply(alpha_denominator, q_eval), ); logup_specific.eval_rlc = eval_rlc; - if mode == NEXT_LAYER_MODE && round + 1 < max_round - 1 { + let to_next_round = if mode == NEXT_LAYER_MODE { 1 } else { 0 }; + if round + to_next_round < max_round - 1 { eval_acc = FieldExtension::add(eval_acc, eval_rlc); logup_row.should_acc = F::ONE; logup_row.logup_acc = F::ONE; diff --git a/extensions/native/circuit/src/sumcheck/execution.rs b/extensions/native/circuit/src/sumcheck/execution.rs index 7202e57b00..a475bf9e49 100644 --- a/extensions/native/circuit/src/sumcheck/execution.rs +++ b/extensions/native/circuit/src/sumcheck/execution.rs @@ -252,7 +252,8 @@ unsafe fn execute_e12_impl( exec_state.vm_write(NATIVE_AS, r_evals_ptr_u32 + (1 + i) * EXT_DEG as u32, &eval); - if mode == NEXT_LAYER_MODE && round + 1 < max_round - 1 { + let to_next_round = if mode == NEXT_LAYER_MODE { 1 } else { 0 }; + if round + to_next_round < max_round - 1 { // update eval_acc eval_acc = FieldExtension::add(eval_acc, FieldExtension::multiply(alpha_acc, eval)); } @@ -270,8 +271,8 @@ unsafe fn execute_e12_impl( .vm_read(NATIVE_AS, logup_offset + i) .map(|x: F| x.as_canonical_u32()); let start = calculate_3d_ext_idx( - logup_specs_inner_len, logup_specs_inner_inner_len, + logup_specs_inner_len, i, round, 0, @@ -325,7 +326,8 @@ unsafe fn execute_e12_impl( FieldExtension::multiply(alpha_numerator, p_eval), FieldExtension::multiply(alpha_denominator, q_eval), ); - if mode == NEXT_LAYER_MODE && round + 1 < max_round - 1 { + let to_next_round = if mode == NEXT_LAYER_MODE { 1 } else { 0 }; + if round + to_next_round < max_round - 1 { // update eval_acc eval_acc = FieldExtension::add(eval_acc, eval_rlc); } diff --git a/extensions/native/recursion/tests/sumcheck.rs b/extensions/native/recursion/tests/sumcheck.rs index 494d82c03a..4b8864fa06 100644 --- a/extensions/native/recursion/tests/sumcheck.rs +++ b/extensions/native/recursion/tests/sumcheck.rs @@ -1,3 +1,5 @@ +use std::iter::{once, repeat_n}; + use openvm_circuit::{arch::instructions::program::Program, utils::air_test_impl}; #[cfg(feature = "cuda")] use openvm_cuda_backend::engine::GpuBabyBearPoseidon2Engine; @@ -69,7 +71,25 @@ fn test_sumcheck_layer_eval() { } fn build_test_program(builder: &mut Builder) { - let ctx_u32s = [3u32, 6, 5, 8, 2, 8, 4, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9]; + // 6 prod specs in 8 layers, 5 logup specs in 8 layers + let round = 3; + let num_prod_specs = 6; + let num_logup_specs = 5; + let num_layers = 8; + let mode = 1; // current_layer + + let mut ctx_u32s = vec![ + round, + num_prod_specs, + num_logup_specs, + num_layers, + 2, + num_layers, + 4, + mode, + ]; + ctx_u32s.extend(repeat_n(num_layers, num_prod_specs + num_logup_specs)); + let ctx: Array> = builder.dyn_array(ctx_u32s.len()); for (idx, n) in ctx_u32s.into_iter().enumerate() { builder.set(&ctx, idx, Usize::from(n as usize)); @@ -384,40 +404,70 @@ fn build_test_program(builder: &mut Builder) { builder.set(&logup_spec_evals, idx, e); } - #[rustfmt::skip] - let r_evals_u32s = [ - 941378355u32, 1078920879, 696738840, 496039492, - 1555445457, 184545404, 905938226, 1847966044, - 1024875886, 1782716223, 1625644635, 266865456, - 465953066, 1663531470, 757423849, 1957075986, - 1919693393, 839104130, 127480221, 1527842912, - 918650796, 921462354, 575456073, 696646705, - 1585912361, 258186488, 353168830, 1111094691, - 1401166558, 1905942163, 1923083163, 393037255, - 1042127700, 1126793296, 895794165, 1124924482, - 1324266058, 722406365, 1963838171, 968504459, - 1934378800, 714588691, 6465911, 1168379648, - 903786009, 1326035939, 518289228, 418998914, - 1513133474, 1578096058, 617547414, 1658315126, - 68556894, 1697802593, 1346510664, 1709381671, - 345062962, 1254089535, 1002281845, 1882822096, - 700581748, 1431345304, 489112954, 98435728, - 1799886007, 479788390, 223111065, 631662309, - ]; + let alpha = builder.get(&challenges, 0); + let c1 = builder.get(&challenges, 1); + let c2 = builder.get(&challenges, 2); - let next_layer_evals: Array> = - builder.dyn_array(r_evals_u32s.len() / EXT_DEG); - for (idx, n) in r_evals_u32s.chunks(EXT_DEG).enumerate() { - let e: Ext = builder.constant(C::EF::from_base_slice(&[ - C::F::from_canonical_u32(n[0]), - C::F::from_canonical_u32(n[1]), - C::F::from_canonical_u32(n[2]), - C::F::from_canonical_u32(n[3]), - ])); + let alpha_acc: Ext = builder.constant(C::EF::ONE); + let eval_acc: Ext = builder.constant(C::EF::ZERO); + + let mut p_evals = vec![]; + for i in 0..num_prod_specs { + let start = num_layers * 2 * i + 2 * round; + let p1 = builder.get(&prod_spec_evals, start); + let p2 = builder.get(&prod_spec_evals, start + 1); + let p_eval: Ext = if mode == 1 { + // current layer + builder.eval(p1 * p2) + } else { + // next layer + builder.eval(p1 * c1 + p2 * c2) + }; + p_evals.push(p_eval); + let eval_rlc: Ext = builder.eval(alpha_acc * p_eval); + builder.assign(&eval_acc, eval_acc + eval_rlc); + builder.assign(&alpha_acc, alpha_acc * alpha); + } + + let mut logup_p_evals = vec![]; + let mut logup_q_evals = vec![]; + for i in 0..num_logup_specs { + let start = num_layers * 4 * i + 4 * round; + let p1 = builder.get(&logup_spec_evals, start); + let p2 = builder.get(&logup_spec_evals, start + 1); + let q1 = builder.get(&logup_spec_evals, start + 2); + let q2 = builder.get(&logup_spec_evals, start + 3); + let p_eval: Ext = if mode == 1 { + builder.eval(p1 * q2 + p2 * q1) + } else { + builder.eval(p1 * c1 + p2 * c2) + }; + let q_eval: Ext = if mode == 1 { + builder.eval(q1 * q2) + } else { + builder.eval(q1 * c1 + q2 * c2) + }; + + logup_p_evals.push(p_eval); + logup_q_evals.push(q_eval); + + let alpha_denominator: Ext = builder.eval(alpha_acc * alpha); + let eval_rlc: Ext = + builder.eval(alpha_acc * p_eval + alpha_denominator * q_eval); - builder.set(&next_layer_evals, idx, e); + builder.assign(&eval_acc, eval_acc + eval_rlc); + builder.assign(&alpha_acc, alpha_acc * alpha * alpha); } + let r_evals = once(eval_acc) + .chain(p_evals.into_iter()) + .chain(logup_p_evals.into_iter()) + .chain(logup_q_evals.into_iter()) + .collect::>(); + + let next_layer_evals: Array> = + builder.dyn_array(r_evals.len()); + builder.sumcheck_layer_eval( &ctx, &challenges, @@ -426,5 +476,10 @@ fn build_test_program(builder: &mut Builder) { &next_layer_evals, ); + for (idx, e) in r_evals.into_iter().enumerate() { + let next_eval = builder.get(&next_layer_evals, idx); + builder.assert_ext_eq(next_eval, e); + } + builder.halt(); } From 94670a75c4e011d3b03da4d43035c9203faad412 Mon Sep 17 00:00:00 2001 From: kunxian xia Date: Tue, 2 Dec 2025 20:15:07 +0800 Subject: [PATCH 2/3] remove hardcoded constants --- extensions/native/recursion/tests/sumcheck.rs | 304 ++---------------- 1 file changed, 20 insertions(+), 284 deletions(-) diff --git a/extensions/native/recursion/tests/sumcheck.rs b/extensions/native/recursion/tests/sumcheck.rs index 4b8864fa06..a500ee6aac 100644 --- a/extensions/native/recursion/tests/sumcheck.rs +++ b/extensions/native/recursion/tests/sumcheck.rs @@ -19,6 +19,7 @@ use openvm_stark_sdk::{ config::{fri_params::standard_fri_params_with_100_bits_conjectured_security, FriParameters}, p3_baby_bear::BabyBear, }; +use rand::{thread_rng, RngCore}; pub type F = BabyBear; pub type E = BinomialExtensionField; @@ -70,7 +71,17 @@ fn test_sumcheck_layer_eval() { } } +fn new_rand_ext(rng: &mut R) -> C::EF { + C::EF::from_base_slice(&[ + C::F::from_canonical_u32(rng.next_u32()), + C::F::from_canonical_u32(rng.next_u32()), + C::F::from_canonical_u32(rng.next_u32()), + C::F::from_canonical_u32(rng.next_u32()), + ]) +} + fn build_test_program(builder: &mut Builder) { + let mut rng = thread_rng(); // 6 prod specs in 8 layers, 5 logup specs in 8 layers let round = 3; let num_prod_specs = 6; @@ -114,292 +125,18 @@ fn build_test_program(builder: &mut Builder) { builder.set(&challenges, idx, e); } - #[rustfmt::skip] - let prod_spec_eval_u32s = [ - 1538906710u32, 637535518, 1753132406, 1395236651, - 278806441, 1722910382, 1475548665, 1117874675, - 1578586709, 1826764884, 384068476, 1852240363, - 707958906, 1960944944, 183554399, 1259273357, - 227285124, 243066436, 1718037317, 369721963, - 1752968006, 1061013677, 775617499, 1464907431, - 544300429, 871461966, 135151545, 1343592602, - 1622220528, 643966158, 3932580, 434948358, - 540553922, 1446502052, 153298741, 1191216273, - 265936762, 1463035257, 1237633339, 1797346310, - 1355791584, 389527741, 1741650463, 1728913415, - 1825739540, 1790924136, 460776743, 29536554, - 6842036, 252495270, 1968285155, 299467416, - 49085744, 1499815729, 1098802236, 644489275, - 1827273105, 1888401527, 390077051, 565528894, - 1366177188, 67441791, 958486301, 402056716, - 590379691, 462035406, 633459131, 843304872, - 584100013, 1932496508, 250656031, 146983915, - 1835173157, 939973454, 1844873638, 1916054832, - 1601784696, 167251717, 409107688, 1062925788, - 1291319514, 1790529531, 495655592, 1093359708, - 790197205, 674458164, 195988318, 399764452, - 106865258, 967050329, 350035523, 1109292118, - 1815460301, 281986036, 900636603, 1121197008, - 1228976590, 1879998708, 1924332706, 434695844, - 1159360621, 471397106, 473371067, 1009065094, - 1320176846, 168020789, 1265321929, 1901808675, - 223657700, 1480150183, 1779968584, 144416591, - 304407746, 1864498679, 1482460119, 1554376965, - 1479261548, 1657723043, 1039345063, 1053923521, - 442080513, 1964082352, 691664908, 1941008321, - 1007729002, 860529393, 849697342, 754485488, - 584295923, 1072251466, 1105105254, 996079746, - 1305909868, 1348028973, 122275988, 464050036, - 692807777, 1098809324, 397235220, 596459886, - 1663209783, 720230826, 1422510715, 1760654694, - 544197700, 1417744567, 1938716517, 1571826328, - 1591430185, 1173137446, 175285007, 1541718596, - 1715958587, 1429966110, 583013357, 1667787861, - 109891172, 668253167, 161783842, 296183397, - 1681897325, 1054396117, 264741948, 464026995, - 1907686022, 1532786783, 394869458, 1766734740, - 136047179, 536856195, 376188855, 700633625, - 515518419, 531043483, 60673499, 556496527, - 1743028981, 873954569, 1371062291, 632169731, - 1353239206, 526507035, 1894490088, 589441599, - 1610487168, 1074160583, 366366374, 247602990, - 1535354896, 894493713, 1555870413, 1389854934, - 1897251683, 1525812801, 675621735, 697919636, - 1690274072, 1466810921, 1221110784, 1741995587, - 1877169764, 390876982, 1794129810, 297662156, - 144295349, 417037264, 1290835727, 1654971513, - 1674131303, 1625667423, 1471248832, 1676797844, - 1172916558, 1707775403, 423725211, 1643279661, - 1695774264, 378140395, 1517569394, 1666625392, - 1803981250, 439036260, 247966130, 709534816, - 361144100, 1546096548, 1240886454, 1898161518, - 843262057, 1709259464, 1301015977, 1997626928, - 677153173, 1606710353, 1216038070, 435565562, - 98686333, 1773787396, 267051994, 99395396, - 545509105, 782289675, 1289865975, 1707775075, - 1158993015, 1506576588, 993215179, 1523099397, - 923914455, 1895162386, 284489994, 1444139016, - 1943825680, 466202724, 1632522710, 1384015062, - 723147188, 1284031324, 1430481515, 341213007, - 171192499, 1061688239, 808927167, 83182639, - 759209907, 1728321272, 976049976, 1652071995, - 1002877840, 69880246, 1095135165, 677588420, - 1384715290, 829619452, 170122781, 1958173727, - 13389238, 789379698, 1883383039, 1279195174, - 1618672336, 1192839317, 1348311124, 758896285, - 1939775389, 684108413, 1838340479, 1332232130, - 1070486028, 549228790, 868851698, 1678207843, - 1754321489, 637000403, 647901906, 45343322, - 1768524074, 1167955205, 1816497210, 1609414096, - 1985231742, 1540534482, 232730819, 232221968, - 1509637836, 1480860627, 884647789, 1096458024, - 163721583, 1248032262, 436419506, 1737102298, - 651105860, 452298073, 1064372507, 1792838683, - 619243471, 860127631, 721724708, 950768433, - 279913448, 339693210, 47730422, 1952683911, - 1316500770, 675944216, 386902809, 619333956, - 1194800389, 43989936, 1944372656, 666045666, - 1155873844, 522696968, 58874730, 1497238023, - 421619994, 1980672127, 1657191856, 1913792631, - 1784663131, 1118400672, 1828104993, 1637808383, - 414755472, 775410449, 747132157, 136820101, - 1082674285, 93190395, 357955402, 335652723, - 1192102705, 480365232, 1354935730, 1391829361, - 966662991, 1601510445, 569528575, 545490940, - 1753711688, 807025222, 580374183, 587718008, - 977546290, 1055719519, 1157107032, 562799608, - 859466927, 840450024, 815325134, 936576801, - 1010587056, 246624382, 1808049797, 1098183398, - 1005077390, 772432546, 1976629565, 1003772218, - 1655315418, 1767931114, 982008720, 785023351, - ]; - - let prod_spec_evals: Array> = - builder.dyn_array(prod_spec_eval_u32s.len() / EXT_DEG); - for (idx, n) in prod_spec_eval_u32s.chunks(EXT_DEG).enumerate() { - let e: Ext = builder.constant(C::EF::from_base_slice(&[ - C::F::from_canonical_u32(n[0]), - C::F::from_canonical_u32(n[1]), - C::F::from_canonical_u32(n[2]), - C::F::from_canonical_u32(n[3]), - ])); + let num_prod_evals = num_prod_specs * num_layers * 2; + let prod_spec_evals: Array> = builder.dyn_array(num_prod_evals); + for idx in 0..num_prod_evals { + let e: Ext = builder.constant(new_rand_ext::(&mut rng)); builder.set(&prod_spec_evals, idx, e); } - #[rustfmt::skip] - let logup_spec_eval_u32s = [ - 1522353967u32, 457603397, 421847521, 1352563318, - 1746817766, 737872688, 1087008622, 1850835028, - 456475558, 892966330, 638163666, 148568548, - 678863061, 1334386850, 1896333039, 154585769, - 433618446, 1186936470, 970218722, 1213827097, - 1798557019, 861757965, 119285527, 395360622, - 226164366, 1330279872, 66561048, 785421608, - 1950755756, 1559889596, 348449876, 1090789452, - 257578851, 273164442, 1644906, 295600924, - 1187949602, 1168249609, 469763604, 60929061, - 291163036, 403842501, 1421902433, 1700188477, - 1046093370, 921059131, 1638991894, 464012042, - 96905857, 1370999592, 271896041, 13595534, - 1489760970, 1650552701, 133367846, 25680377, - 377631580, 652729291, 645763356, 426747355, - 482475486, 1877299223, 103226636, 1333832358, - 1399609097, 458536972, 976248802, 1109365280, - 515164588, 1579426417, 1601829549, 607169702, - 852817956, 1980537127, 134138338, 913344050, - 737880920, 476360275, 61624034, 1610624252, - 264461991, 546933535, 937769429, 293346965, - 1522058041, 1012551797, 994330314, 23333322, - 1969510890, 974351570, 2012030621, 120742000, - 450250620, 180547360, 642746933, 1815029950, - 629489142, 1176992624, 723354779, 572648755, - 1218615348, 648847054, 351903235, 723149764, - 248065753, 243829448, 1283393001, 1912627886, - 581641342, 702465306, 205969758, 1061911274, - 1, 0, 0, 0, - 1, 0, 0, 0, - 1703043252, 1467887451, 1714319214, 907866644, - 1542426838, 742609036, 1814393459, 448706641, - 1960340767, 46490834, 186512520, 363973095, - 846448854, 463742343, 2012517527, 40473617, - 9472552, 263483342, 105738598, 586389136, - 254290990, 625150844, 960233097, 1488303724, - 1700231692, 1471714612, 1540211186, 1590246915, - 945341972, 1343225515, 179976237, 34857822, - 276912528, 984309272, 1277293398, 1520924162, - 1823117694, 604836357, 1460812009, 600052559, - 970469338, 1771022707, 181855831, 1445947220, - 467514809, 1514677498, 947030389, 170390653, - 415409007, 1601463730, 204153427, 904614278, - 1855419512, 2009471607, 1352607379, 576586082, - 1343812879, 1176377580, 1166188815, 1592289048, - 761793881, 1529621462, 193034837, 344011596, - 1669461833, 1356800025, 314186361, 586497329, - 1832810846, 1288092861, 1619454491, 732529408, - 737934269, 909504928, 769680420, 1437893101, - 1727002258, 1618231110, 535125583, 153412473, - 1917760929, 588586507, 564531165, 1790797737, - 1666283994, 1366948884, 117673690, 476470378, - 2012274032, 1951406668, 1739767532, 1273142151, - 1591812317, 1900205312, 1912608761, 1734766024, - 1265002082, 1450462894, 749810837, 1329222552, - 745081805, 1231519431, 1420957967, 883846107, - 1995463911, 407795592, 161655852, 125886157, - 995318920, 484905024, 284135318, 551493419, - 406742309, 1089024446, 637339867, 1858138403, - 1230680117, 187078889, 1929517480, 1125646261, - 1, 0, 0, 0, - 1, 0, 0, 0, - 1610035932, 462442436, 831412555, 44798862, - 1748147276, 1911945531, 1329343740, 971894393, - 362147969, 1583335926, 1528700112, 426908674, - 847905883, 447889090, 1050883911, 1883537469, - 1487501632, 964178870, 1818828551, 1980840799, - 340372118, 1697179193, 215113037, 1893217470, - 1138628493, 1788052486, 443362955, 1349213730, - 589553425, 562526667, 1006040406, 1194546769, - 1831034644, 612004157, 730213913, 1068905440, - 371983982, 502900790, 802785198, 822377635, - 1477528437, 501356237, 684668525, 1306043781, - 621032592, 1971342708, 1411586583, 733418745, - 186045462, 1559301855, 323758310, 453170140, - 498381240, 976247416, 631213663, 898017829, - 501459603, 609703046, 1379288251, 177682695, - 912381595, 121915494, 1137416430, 504054388, - 1138277238, 1603388253, 1838013301, 1700271853, - 20488607, 58775264, 217974275, 979141729, - 53136584, 1331566240, 1460303356, 525812787, - 718385521, 1477919263, 1663622276, 1089788203, - 1204483837, 54225863, 290660186, 1441441958, - 134168813, 349638823, 1867912015, 1579183319, - 55528656, 1602973359, 194297109, 949763297, - 101931919, 242300116, 1610052257, 1351823848, - 174522860, 776955925, 1706962365, 808187490, - 1487253852, 431806906, 213982593, 1170647308, - 1776840400, 295916317, 378708073, 381270341, - 457494568, 705823997, 1407301442, 1693003013, - 700310785, 1349874247, 1284363817, 1566253815, - 1014298154, 215294365, 1070968678, 871641358, - 1, 0, 0, 0, - 1, 0, 0, 0, - 1302679751, 1121894357, 368587356, 1564724097, - 733815591, 2012670011, 1146780092, 1439780227, - 1801628424, 838692317, 932318853, 213634365, - 155292454, 1644317110, 1599846194, 978829059, - 1282095862, 1780431647, 527412087, 1024583705, - 804423802, 951808322, 689345230, 180304167, - 1784562773, 1514653374, 2009396440, 1143778943, - 235299446, 1553017484, 475425117, 758292254, - 716575432, 517083432, 1728864125, 418010549, - 43202592, 507659742, 433077118, 1268144019, - 1462778342, 1928073362, 1330130180, 1749624351, - 827401013, 1236194147, 1875519726, 1437946791, - 607293265, 309229599, 1009445595, 1725229718, - 1436309341, 1952606463, 943149111, 291680468, - 1989684076, 1944713370, 1285294139, 399758737, - 1572979232, 213817406, 214840530, 184898060, - 1483844295, 1536616777, 494816009, 217625163, - 529448032, 786640964, 1766471731, 1424140424, - 1721961711, 740275169, 169908711, 913969302, - 1359358267, 1328322971, 593228769, 771095186, - 801680440, 450930656, 1796349530, 1824428677, - 1111258504, 1741666629, 1098430204, 1792001884, - 1679003061, 590088446, 647614538, 1324461639, - 818996796, 229187928, 74288115, 1158900266, - 1512606270, 1381672753, 785927403, 493453164, - 425259497, 1367873539, 931023744, 221202218, - 669580668, 424996238, 1840425275, 1873362670, - 967642716, 263556335, 578560519, 1558449223, - 607579284, 1724012378, 333582342, 1195784167, - 1419727276, 199294290, 138807165, 1061030752, - 1, 0, 0, 0, - 1, 0, 0, 0, - 776332180, 1333076185, 1855163818, 1897408938, - 799274251, 950452503, 691904988, 1205387466, - 659107883, 434394982, 129587940, 639018629, - 659238594, 1957584892, 864291238, 589178070, - 1267157231, 48925338, 200093884, 1953762869, - 1227617341, 1471420621, 193077633, 1007876111, - 228491220, 1377349503, 1889411060, 1807513892, - 1593042934, 1240864695, 1472870721, 583021932, - 598239104, 1862008818, 1811242869, 780768026, - 520870395, 292016292, 322246659, 868240490, - 1715620331, 1183509209, 2010262726, 1003957251, - 264895455, 307755941, 201990485, 1662471178, - 1643997923, 1573129362, 277821143, 388834470, - 943361405, 1449402196, 614413575, 1504113993, - 1860552739, 1755127315, 1734129760, 1232115188, - 803035456, 360488092, 271342171, 1269544258, - 290642673, 660703582, 986842267, 870891877, - 454573044, 1999346236, 701614601, 820253867, - 883282765, 137247873, 1727164949, 1320585493, - 1738664600, 1900116905, 472215154, 1114994489, - 104218174, 1694603079, 771486383, 935361143, - 92277671, 881040480, 925124484, 1464396527, - 100625197, 65290355, 1001454341, 134627585, - 58629702, 1541542242, 568583607, 1706262052, - 530687550, 1303187245, 1010302462, 264001857, - 789816678, 561378226, 827432508, 801307507, - 1613508315, 1650822853, 1603502703, 439320335, - 15283580, 1244486577, 254345266, 1745653280, - 1648250354, 1528271018, 528366563, 1078707735, - 1430767759, 1890467731, 2001894083, 799949326, - 1, 0, 0, 0, - 1, 0, 0, 0, - 1341839494, 1092219735, 755644898, 966729319, - 1914277278, 1545367697, 1765189119, 1693413008, - ]; - - let logup_spec_evals: Array> = - builder.dyn_array(logup_spec_eval_u32s.len() / EXT_DEG); - for (idx, n) in logup_spec_eval_u32s.chunks(EXT_DEG).enumerate() { - let e: Ext = builder.constant(C::EF::from_base_slice(&[ - C::F::from_canonical_u32(n[0]), - C::F::from_canonical_u32(n[1]), - C::F::from_canonical_u32(n[2]), - C::F::from_canonical_u32(n[3]), - ])); + let num_logup_evals = num_logup_specs * num_layers * 4; + let logup_spec_evals: Array> = builder.dyn_array(num_logup_evals); + for idx in 0..num_logup_evals { + let e: Ext = builder.constant(new_rand_ext::(&mut rng)); builder.set(&logup_spec_evals, idx, e); } @@ -465,8 +202,7 @@ fn build_test_program(builder: &mut Builder) { .chain(logup_q_evals.into_iter()) .collect::>(); - let next_layer_evals: Array> = - builder.dyn_array(r_evals.len()); + let next_layer_evals: Array> = builder.dyn_array(r_evals.len()); builder.sumcheck_layer_eval( &ctx, From 9741a1094c7d686827e6360658951769f1245867 Mon Sep 17 00:00:00 2001 From: kunxian xia Date: Tue, 2 Dec 2025 21:37:35 +0800 Subject: [PATCH 3/3] fix --- extensions/native/circuit/src/sumcheck/chip.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/extensions/native/circuit/src/sumcheck/chip.rs b/extensions/native/circuit/src/sumcheck/chip.rs index d6971f9332..bb7cfa7080 100644 --- a/extensions/native/circuit/src/sumcheck/chip.rs +++ b/extensions/native/circuit/src/sumcheck/chip.rs @@ -482,12 +482,16 @@ where let specific: &mut ProdSpecificCols = row.specific[..ProdSpecificCols::::width()].borrow_mut(); - eval_acc = FieldExtension::subtract(eval_acc, specific.eval_rlc); + if row.should_acc == F::ONE { + eval_acc = FieldExtension::subtract(eval_acc, specific.eval_rlc); + } row.eval_acc = eval_acc; } else if row.logup_row == F::ONE { let specific: &mut LogupSpecificCols = row.specific[..LogupSpecificCols::::width()].borrow_mut(); - eval_acc = FieldExtension::subtract(eval_acc, specific.eval_rlc); + if row.should_acc == F::ONE { + eval_acc = FieldExtension::subtract(eval_acc, specific.eval_rlc); + } row.eval_acc = eval_acc; } }