diff --git a/Cargo.lock b/Cargo.lock index 8d50f931ef..2905a4cbb8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -988,6 +988,7 @@ dependencies = [ "num-rational 0.4.2", "num-traits 0.2.19", "once_cell", + "paste", "phf", "pretty_assertions", "rand 0.8.5", diff --git a/Cargo.toml b/Cargo.toml index e1d6e677ae..f0c27386e5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -116,9 +116,10 @@ num-traits = "0.2.15" once_cell = "1.19.0" os_info = "3.6.0" page_size = "0.6.0" +papyrus_storage = "0.4.0-dev.4" parity-scale-codec = "=3.6.9" parity-scale-codec-derive = "=3.6.9" -paste = "1.0.9" +paste = "1.0.15" phf = { version = "0.11", features = ["macros"] } pretty_assertions = "1.4.0" primitive-types = "0.12.1" diff --git a/crates/blockifier/Cargo.toml b/crates/blockifier/Cargo.toml index de2448f84d..b4576fe3d7 100644 --- a/crates/blockifier/Cargo.toml +++ b/crates/blockifier/Cargo.toml @@ -38,6 +38,7 @@ num-integer.workspace = true num-rational.workspace = true num-traits.workspace = true once_cell.workspace = true +paste.workspace = true phf.workspace = true rand = { workspace = true, optional = true } rstest = { workspace = true, optional = true } diff --git a/crates/blockifier/feature_contracts/cairo1/compiled/test_contract.casm.json b/crates/blockifier/feature_contracts/cairo1/compiled/test_contract.casm.json index 87e6145404..b00a57f883 100644 --- a/crates/blockifier/feature_contracts/cairo1/compiled/test_contract.casm.json +++ b/crates/blockifier/feature_contracts/cairo1/compiled/test_contract.casm.json @@ -100,9 +100,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x44b3", + "0x454f", "0x482480017fff8000", - "0x44b2", + "0x454e", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -275,9 +275,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x4404", + "0x44a0", "0x482480017fff8000", - "0x4403", + "0x449f", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -536,7 +536,7 @@ "0x48127ffa7fff8000", "0x480080007ff88000", "0x1104800180018000", - "0x15c8", + "0x1643", "0x20680017fff7ffa", "0xb", "0x48127ff87fff8000", @@ -588,9 +588,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x42cb", + "0x4367", "0x482480017fff8000", - "0x42ca", + "0x4366", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -805,7 +805,7 @@ "0x48127ffa7fff8000", "0x480080007ff88000", "0x1104800180018000", - "0x14bb", + "0x1536", "0x20680017fff7ffa", "0xb", "0x48127ff87fff8000", @@ -870,7 +870,7 @@ "0x48127ffa7fff8000", "0x480080007ff88000", "0x1104800180018000", - "0x147a", + "0x14f5", "0x20680017fff7ffa", "0xb", "0x48127ff87fff8000", @@ -922,9 +922,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x417d", + "0x4219", "0x482480017fff8000", - "0x417c", + "0x4218", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -950,7 +950,7 @@ "0x48127ff07fff8000", "0x48127ff07fff8000", "0x1104800180018000", - "0x1486", + "0x1501", "0x20680017fff7ffd", "0xc", "0x40780017fff7fff", @@ -1128,9 +1128,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x40af", + "0x414b", "0x482480017fff8000", - "0x40ae", + "0x414a", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -1245,7 +1245,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0x13c9", + "0x1444", "0x20680017fff7ffc", "0xf2", "0x48127ff97fff8000", @@ -1256,7 +1256,7 @@ "0x40137ffa7fff8001", "0x40137ffb7fff8002", "0x1104800180018000", - "0x148b", + "0x1506", "0x20680017fff7feb", "0xdf", "0x20680017fff7fee", @@ -1344,9 +1344,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x3fd7", + "0x4073", "0x482480017fff8000", - "0x3fd6", + "0x4072", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -1388,7 +1388,7 @@ "0x48127fdb7fff8000", "0x48127fdf7fff8000", "0x1104800180018000", - "0x18bc", + "0x1937", "0x20680017fff7ffd", "0xc", "0x40780017fff7fff", @@ -1630,7 +1630,7 @@ "0x48127ffa7fff8000", "0x480080007ff88000", "0x1104800180018000", - "0x1182", + "0x11fd", "0x20680017fff7ffa", "0xb", "0x48127ff87fff8000", @@ -1682,9 +1682,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x3e85", + "0x3f21", "0x482480017fff8000", - "0x3e84", + "0x3f20", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -1969,9 +1969,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x3d66", + "0x3e02", "0x482480017fff8000", - "0x3d65", + "0x3e01", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -1993,7 +1993,7 @@ "0x48127fee7fff8000", "0x48127ff27fff8000", "0x1104800180018000", - "0x17cf", + "0x184a", "0x482480017fc88000", "0x1", "0x48127ffa7fff8000", @@ -2186,9 +2186,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x3c8d", + "0x3d29", "0x482480017fff8000", - "0x3c8c", + "0x3d28", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2350,7 +2350,7 @@ "0x48127ffa7fff8000", "0x480080007ff88000", "0x1104800180018000", - "0xeb2", + "0xf2d", "0x20680017fff7ffa", "0xb", "0x48127ff87fff8000", @@ -2402,9 +2402,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x3bb5", + "0x3c51", "0x482480017fff8000", - "0x3bb4", + "0x3c50", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2541,9 +2541,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x3b2a", + "0x3bc6", "0x482480017fff8000", - "0x3b29", + "0x3bc5", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2575,7 +2575,7 @@ "0x48127ff77fff8000", "0x480080007ffc8000", "0x1104800180018000", - "0x15d1", + "0x164c", "0x40780017fff7fff", "0x1", "0x48127ffa7fff8000", @@ -2732,7 +2732,7 @@ "0x48127ffa7fff8000", "0x480080007ff88000", "0x1104800180018000", - "0xd34", + "0xdaf", "0x20680017fff7ffa", "0xb", "0x48127ff87fff8000", @@ -2814,9 +2814,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x3a19", + "0x3ab5", "0x482480017fff8000", - "0x3a18", + "0x3ab4", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -2992,9 +2992,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x3967", + "0x3a03", "0x482480017fff8000", - "0x3966", + "0x3a02", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -3013,7 +3013,7 @@ "0x48127ffe7fff8000", "0x480a7ffb7fff8000", "0x1104800180018000", - "0x14d9", + "0x1554", "0x20680017fff7ffd", "0xc", "0x40780017fff7fff", @@ -3096,9 +3096,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x38ff", + "0x399b", "0x482480017fff8000", - "0x38fe", + "0x399a", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -3117,7 +3117,7 @@ "0x48127ffe7fff8000", "0x480a7ffb7fff8000", "0x1104800180018000", - "0x1545", + "0x15c0", "0x20680017fff7ffd", "0xc", "0x40780017fff7fff", @@ -3201,9 +3201,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x3896", + "0x3932", "0x482480017fff8000", - "0x3895", + "0x3931", "0x480080007fff8000", "0x480080017fff8000", "0x484480017fff8000", @@ -3226,7 +3226,7 @@ "0x480a7ff97fff8000", "0x480a7ffb7fff8000", "0x1104800180018000", - "0x152b", + "0x15a6", "0x20680017fff7ffd", "0xd", "0x40780017fff7fff", @@ -3313,9 +3313,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x3826", + "0x38c2", "0x482480017fff8000", - "0x3825", + "0x38c1", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -3334,7 +3334,7 @@ "0x48127ffe7fff8000", "0x480a7ffb7fff8000", "0x1104800180018000", - "0x161f", + "0x169a", "0x20680017fff7ffd", "0xc", "0x40780017fff7fff", @@ -3459,9 +3459,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x3794", + "0x3830", "0x482480017fff8000", - "0x3793", + "0x382f", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -3609,7 +3609,7 @@ "0x48127ffa7fff8000", "0x480080007ff88000", "0x1104800180018000", - "0x9c7", + "0xa42", "0x20680017fff7ffa", "0xb", "0x48127ff87fff8000", @@ -3661,9 +3661,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x36ca", + "0x3766", "0x482480017fff8000", - "0x36c9", + "0x3765", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -3684,7 +3684,7 @@ "0x48127ff47fff8000", "0x48127ff47fff8000", "0x1104800180018000", - "0x164a", + "0x16c5", "0x20680017fff7ffd", "0xe", "0x40780017fff7fff", @@ -3783,9 +3783,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x3650", + "0x36ec", "0x482480017fff8000", - "0x364f", + "0x36eb", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -3897,9 +3897,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x35de", + "0x367a", "0x482480017fff8000", - "0x35dd", + "0x3679", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -3918,7 +3918,7 @@ "0x48127ffe7fff8000", "0x48127ff67fff8000", "0x1104800180018000", - "0x16af", + "0x172a", "0x20680017fff7ffd", "0xc", "0x40780017fff7fff", @@ -4036,9 +4036,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x3553", + "0x35ef", "0x482480017fff8000", - "0x3552", + "0x35ee", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -4057,7 +4057,7 @@ "0x48127ffe7fff8000", "0x48127ff67fff8000", "0x1104800180018000", - "0x1654", + "0x16cf", "0x20680017fff7ffd", "0xc", "0x40780017fff7fff", @@ -4241,9 +4241,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x3486", + "0x3522", "0x482480017fff8000", - "0x3485", + "0x3521", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -4485,9 +4485,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x3392", + "0x342e", "0x482480017fff8000", - "0x3391", + "0x342d", "0x480080007fff8000", "0x480080007fff8000", "0x484480017fff8000", @@ -4513,7 +4513,7 @@ "0x48127feb7fff8000", "0x48127fef7fff8000", "0x1104800180018000", - "0x14b8", + "0x1533", "0x20680017fff7ffd", "0xd", "0x40780017fff7fff", @@ -4628,7 +4628,7 @@ "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", "0x1104800180018000", - "0x1508", + "0x1583", "0x20680017fff7ffc", "0x63", "0x48307ffa80007ffb", @@ -4653,9 +4653,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x32ea", + "0x3386", "0x482480017fff8000", - "0x32e9", + "0x3385", "0x480080007fff8000", "0x480080007fff8000", "0x484480017fff8000", @@ -4686,7 +4686,7 @@ "0x48127feb7fff8000", "0x48127feb7fff8000", "0x1104800180018000", - "0x1592", + "0x160d", "0x20680017fff7ffd", "0xe", "0x40780017fff7fff", @@ -4821,7 +4821,7 @@ "0x48127ff67fff8000", "0x48127ff67fff8000", "0x1104800180018000", - "0x1447", + "0x14c2", "0x20680017fff7ffc", "0x60", "0x48307ffa80007ffb", @@ -4844,9 +4844,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x322b", + "0x32c7", "0x482480017fff8000", - "0x322a", + "0x32c6", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -5001,9 +5001,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x318e", + "0x322a", "0x482480017fff8000", - "0x318d", + "0x3229", "0x480080007fff8000", "0x480080027fff8000", "0x482480017fff8000", @@ -5024,7 +5024,7 @@ "0x48127ffd7fff8000", "0x480a7ffb7fff8000", "0x1104800180018000", - "0x1562", + "0x15dd", "0x20680017fff7ffd", "0xd", "0x40780017fff7fff", @@ -5133,9 +5133,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x310a", + "0x31a6", "0x482480017fff8000", - "0x3109", + "0x31a5", "0x480080007fff8000", "0x480080007fff8000", "0x484480017fff8000", @@ -5159,7 +5159,7 @@ "0x480a7ffb7fff8000", "0x48127ff17fff8000", "0x1104800180018000", - "0x15fd", + "0x1678", "0x20680017fff7ffd", "0xd", "0x40780017fff7fff", @@ -5282,9 +5282,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x3075", + "0x3111", "0x482480017fff8000", - "0x3074", + "0x3110", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -5420,9 +5420,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x2feb", + "0x3087", "0x482480017fff8000", - "0x2fea", + "0x3086", "0x480080007fff8000", "0x480080047fff8000", "0x484480017fff8000", @@ -5450,7 +5450,7 @@ "0x480a7ff77fff8000", "0x48127ffb7fff8000", "0x1104800180018000", - "0x1608", + "0x1683", "0x20680017fff7ffd", "0xf", "0x40780017fff7fff", @@ -5517,6 +5517,129 @@ "0x7", "0x482680017ffa8000", "0x100000000000000000000000000000000", + "0x400280007ff87fff", + "0x10780017fff7fff", + "0x66", + "0x4825800180007ffa", + "0x0", + "0x400280007ff87fff", + "0x482680017ff88000", + "0x1", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x11", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127ffc7fff8000", + "0x480a7ff97fff8000", + "0x48127ff97fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x1", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x3009", + "0x482480017fff8000", + "0x3008", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff8", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff77fff", + "0x10780017fff7fff", + "0x2f", + "0x4824800180007ff8", + "0x0", + "0x400080007ff87fff", + "0x480a7ff97fff8000", + "0x1104800180018000", + "0x17e3", + "0x482480017fe88000", + "0x1", + "0x20680017fff7ffc", + "0x17", + "0x48127ffb7fff8000", + "0x1104800180018000", + "0x17dc", + "0x20680017fff7ffd", + "0xd", + "0x40780017fff7fff", + "0x1", + "0x48127fee7fff8000", + "0x48127ffa7fff8000", + "0x48127fdb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ff97fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffc7fff8000", + "0x48127ffd7fff8000", + "0x48127ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x40780017fff7fff", + "0x10", + "0x48127feb7fff8000", + "0x48127fec7fff8000", + "0x48127fec7fff8000", + "0x48127fec7fff8000", + "0x48127ffc7fff8000", + "0x48127fd97fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482480017ff58000", + "0x1", + "0x480a7ff97fff8000", + "0x48127ff27fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482680017ff88000", + "0x1", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x1", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", "0x400280007ff97fff", "0x10780017fff7fff", "0x8d", @@ -5587,9 +5710,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x2f44", + "0x2f65", "0x482480017fff8000", - "0x2f43", + "0x2f64", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -5793,9 +5916,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x2e76", + "0x2e97", "0x482480017fff8000", - "0x2e75", + "0x2e96", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -5998,9 +6121,9 @@ "0x1", "0x208b7fff7fff7ffe", "0x1104800180018000", - "0x2da9", + "0x2dca", "0x482480017fff8000", - "0x2da8", + "0x2dc9", "0x480080007fff8000", "0xa0680017fff8000", "0x9", @@ -6634,7 +6757,7 @@ "0x48127ffa7fff8000", "0x48127ffa7fff8000", "0x1104800180018000", - "0x133a", + "0x135b", "0x20680017fff7ffa", "0x384", "0x20680017fff7ffd", @@ -6738,7 +6861,7 @@ "0x48127ffa7fff8000", "0x480080007ff88000", "0x1104800180018000", - "0x138b", + "0x13ac", "0x20680017fff7ffa", "0x1a", "0x20680017fff7ffd", @@ -6870,7 +6993,7 @@ "0x48127ff97fff8000", "0x48127ff97fff8000", "0x1104800180018000", - "0x124e", + "0x126f", "0x20680017fff7ffa", "0x165", "0x20680017fff7ffd", @@ -6970,7 +7093,7 @@ "0x48127ff87fff8000", "0x48127ff87fff8000", "0x1104800180018000", - "0x11ea", + "0x120b", "0x20680017fff7ffa", "0x49", "0x20680017fff7ffd", @@ -7809,7 +7932,7 @@ "0x480a7fed7fff8000", "0x480a7fee7fff8000", "0x1104800180018000", - "0xfac", + "0xfcd", "0x20680017fff7ffa", "0xdc", "0x20680017fff7fff", @@ -7849,7 +7972,7 @@ "0x480a7ff27fff8000", "0x480a7ff37fff8000", "0x1104800180018000", - "0x1005", + "0x1026", "0x20680017fff7ffa", "0xa2", "0x20680017fff7fff", @@ -7885,7 +8008,7 @@ "0x480a7ff57fff8000", "0x480a7ff67fff8000", "0x1104800180018000", - "0xf60", + "0xf81", "0x20680017fff7ffa", "0x78", "0x20680017fff7fff", @@ -7930,7 +8053,7 @@ "0x480a7ff97fff8000", "0x480a7ffa7fff8000", "0x1104800180018000", - "0xf33", + "0xf54", "0x20680017fff7ffa", "0x45", "0x20680017fff7fff", @@ -8367,7 +8490,7 @@ "0x48127ffb7fff8000", "0x48127ffa7fff8000", "0x1104800180018000", - "0xe96", + "0xeb7", "0x20680017fff7ffb", "0xb4", "0x48127ff97fff8000", @@ -8379,7 +8502,7 @@ "0x480680017fff8000", "0x0", "0x1104800180018000", - "0xee3", + "0xf04", "0x20680017fff7ffd", "0xa1", "0x480680017fff8000", @@ -8575,13 +8698,13 @@ "0x480680017fff8000", "0x0", "0x1104800180018000", - "0xf51", + "0xf72", "0x20680017fff7ffd", "0x37", "0x1104800180018000", - "0x2378", + "0x2399", "0x482480017fff8000", - "0x2377", + "0x2398", "0x48127ff97fff8000", "0x480a7ffc7fff8000", "0x480a7ffd7fff8000", @@ -8589,7 +8712,7 @@ "0x48127ff87fff8000", "0x48127ffa7fff8000", "0x1104800180018000", - "0x1045", + "0x1066", "0x20680017fff7ffc", "0x22", "0x48127fff7fff8000", @@ -8883,7 +9006,7 @@ "0x482480017ff48000", "0xbb448978bd42b984d7de5970bcaf5c43", "0x1104800180018000", - "0xf80", + "0xfa1", "0x20680017fff7ffd", "0x17", "0x20680017fff7ffe", @@ -9259,7 +9382,7 @@ "0x177e60492c5a8242f76f07bfe3661bd", "0x48127ff47fff8000", "0x1104800180018000", - "0xee4", + "0xf05", "0x20680017fff7ffd", "0xc", "0x48127ffa7fff8000", @@ -11181,9 +11304,9 @@ "0x20680017fff7fff", "0x14d", "0x1104800180018000", - "0x1957", + "0x1978", "0x482480017fff8000", - "0x1956", + "0x1977", "0x480680017fff8000", "0x2", "0x482480017ffe8000", @@ -11265,7 +11388,7 @@ "0x480680017fff8000", "0x0", "0x1104800180018000", - "0xa25", + "0xa46", "0x402580017fd38005", "0x1", "0x20680017fff7fff", @@ -11284,7 +11407,7 @@ "0x480680017fff8000", "0x1f", "0x1104800180018000", - "0xa31", + "0xa52", "0x20680017fff7ffb", "0x70", "0x48127ffa7fff8000", @@ -11297,7 +11420,7 @@ "0x480680017fff8000", "0x1f", "0x1104800180018000", - "0xa24", + "0xa45", "0x20680017fff7ffb", "0x59", "0x48127ffa7fff8000", @@ -11310,7 +11433,7 @@ "0x480680017fff8000", "0x1f", "0x1104800180018000", - "0xa17", + "0xa38", "0x20680017fff7ffb", "0x42", "0x48127ffa7fff8000", @@ -11323,7 +11446,7 @@ "0x480680017fff8000", "0x2", "0x1104800180018000", - "0xa0a", + "0xa2b", "0x20680017fff7ffb", "0x2b", "0x40780017fff7fff", @@ -11345,7 +11468,7 @@ "0x482480017ff88000", "0x2", "0x1104800180018000", - "0xe64", + "0xe85", "0x20680017fff7ffd", "0x9", "0x400180007fff8003", @@ -11555,6 +11678,39 @@ "0x482480017ff78000", "0x1", "0x208b7fff7fff7ffe", + "0x482680017ffd8000", + "0x4", + "0x482680017ffd8000", + "0x8", + "0x480680017fff8000", + "0x3", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x482680017ffd8000", + "0xc", + "0x400080007ff97ffb", + "0x400080017ff97ffc", + "0x400080027ff97ffd", + "0x400080037ff97ffe", + "0x482480017ff98000", + "0x4", + "0x48307fff80007ff9", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2", + "0x48127ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", "0x48297ffc80007ffd", "0x20680017fff7fff", "0x4", @@ -17717,6 +17873,7 @@ 150, 156, 128, + 123, 161, 250, 187, @@ -17740,6 +17897,7 @@ 290, 302, 466, + 33, 185, 80, 129, @@ -22350,7 +22508,7 @@ ] ], [ - 5570, + 5528, [ { "AllocSegment": { @@ -22363,7 +22521,103 @@ ] ], [ - 5589, + 5548, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -7 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5572, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5602, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5618, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5634, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5693, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 5712, [ { "TestLessThanOrEqual": { @@ -22385,7 +22639,7 @@ ] ], [ - 5601, + 5724, [ { "AllocSegment": { @@ -22398,7 +22652,7 @@ ] ], [ - 5614, + 5737, [ { "AllocSegment": { @@ -22411,7 +22665,7 @@ ] ], [ - 5629, + 5752, [ { "AllocSegment": { @@ -22424,7 +22678,7 @@ ] ], [ - 5643, + 5766, [ { "AllocSegment": { @@ -22437,7 +22691,7 @@ ] ], [ - 5657, + 5780, [ { "AllocSegment": { @@ -22450,7 +22704,7 @@ ] ], [ - 5672, + 5795, [ { "TestLessThanOrEqual": { @@ -22472,7 +22726,7 @@ ] ], [ - 5726, + 5849, [ { "TestLessThan": { @@ -22494,7 +22748,7 @@ ] ], [ - 5730, + 5853, [ { "LinearSplit": { @@ -22523,7 +22777,7 @@ ] ], [ - 5740, + 5863, [ { "LinearSplit": { @@ -22552,7 +22806,7 @@ ] ], [ - 5776, + 5899, [ { "AllocSegment": { @@ -22565,7 +22819,7 @@ ] ], [ - 5795, + 5918, [ { "TestLessThanOrEqual": { @@ -22587,7 +22841,7 @@ ] ], [ - 5818, + 5941, [ { "SystemCall": { @@ -22602,7 +22856,7 @@ ] ], [ - 5821, + 5944, [ { "AllocSegment": { @@ -22615,7 +22869,7 @@ ] ], [ - 5843, + 5966, [ { "AllocSegment": { @@ -22628,7 +22882,7 @@ ] ], [ - 5858, + 5981, [ { "AllocSegment": { @@ -22641,7 +22895,7 @@ ] ], [ - 5879, + 6002, [ { "AllocSegment": { @@ -22654,7 +22908,7 @@ ] ], [ - 5893, + 6016, [ { "AllocSegment": { @@ -22667,7 +22921,7 @@ ] ], [ - 5907, + 6030, [ { "AllocSegment": { @@ -22680,7 +22934,7 @@ ] ], [ - 5922, + 6045, [ { "TestLessThanOrEqual": { @@ -22702,7 +22956,7 @@ ] ], [ - 5981, + 6104, [ { "AllocSegment": { @@ -22715,7 +22969,7 @@ ] ], [ - 6000, + 6123, [ { "TestLessThanOrEqual": { @@ -22737,7 +22991,7 @@ ] ], [ - 6026, + 6149, [ { "SystemCall": { @@ -22752,7 +23006,7 @@ ] ], [ - 6029, + 6152, [ { "AllocSegment": { @@ -22765,7 +23019,7 @@ ] ], [ - 6051, + 6174, [ { "AllocSegment": { @@ -22778,7 +23032,7 @@ ] ], [ - 6066, + 6189, [ { "AllocSegment": { @@ -22791,7 +23045,7 @@ ] ], [ - 6080, + 6203, [ { "AllocSegment": { @@ -22804,7 +23058,7 @@ ] ], [ - 6094, + 6217, [ { "AllocSegment": { @@ -22817,7 +23071,7 @@ ] ], [ - 6109, + 6232, [ { "TestLessThanOrEqual": { @@ -22839,7 +23093,7 @@ ] ], [ - 6181, + 6304, [ { "AllocSegment": { @@ -22852,7 +23106,7 @@ ] ], [ - 6201, + 6324, [ { "TestLessThanOrEqual": { @@ -22874,7 +23128,7 @@ ] ], [ - 6226, + 6349, [ { "SystemCall": { @@ -22889,7 +23143,7 @@ ] ], [ - 6234, + 6357, [ { "TestLessThan": { @@ -22920,7 +23174,7 @@ ] ], [ - 6259, + 6382, [ { "AllocSegment": { @@ -22933,7 +23187,7 @@ ] ], [ - 6292, + 6415, [ { "AllocSegment": { @@ -22946,7 +23200,7 @@ ] ], [ - 6329, + 6452, [ { "TestLessThan": { @@ -22974,7 +23228,7 @@ ] ], [ - 6333, + 6456, [ { "LinearSplit": { @@ -23003,7 +23257,7 @@ ] ], [ - 6375, + 6498, [ { "TestLessThan": { @@ -23031,7 +23285,7 @@ ] ], [ - 6379, + 6502, [ { "LinearSplit": { @@ -23060,7 +23314,7 @@ ] ], [ - 6420, + 6543, [ { "TestLessThan": { @@ -23082,7 +23336,7 @@ ] ], [ - 6424, + 6547, [ { "LinearSplit": { @@ -23111,7 +23365,7 @@ ] ], [ - 6434, + 6557, [ { "LinearSplit": { @@ -23140,7 +23394,7 @@ ] ], [ - 6558, + 6681, [ { "TestLessThan": { @@ -23162,7 +23416,7 @@ ] ], [ - 6562, + 6685, [ { "LinearSplit": { @@ -23191,7 +23445,7 @@ ] ], [ - 6572, + 6695, [ { "LinearSplit": { @@ -23220,7 +23474,7 @@ ] ], [ - 6604, + 6727, [ { "TestLessThan": { @@ -23242,7 +23496,7 @@ ] ], [ - 6606, + 6729, [ { "DivMod": { @@ -23268,7 +23522,7 @@ ] ], [ - 6726, + 6849, [ { "AllocSegment": { @@ -23281,7 +23535,7 @@ ] ], [ - 6840, + 6963, [ { "TestLessThan": { @@ -23303,7 +23557,7 @@ ] ], [ - 6842, + 6965, [ { "DivMod": { @@ -23329,7 +23583,7 @@ ] ], [ - 6895, + 7018, [ { "TestLessThan": { @@ -23357,7 +23611,7 @@ ] ], [ - 6899, + 7022, [ { "LinearSplit": { @@ -23386,7 +23640,7 @@ ] ], [ - 6941, + 7064, [ { "TestLessThan": { @@ -23414,7 +23668,7 @@ ] ], [ - 6945, + 7068, [ { "LinearSplit": { @@ -23443,7 +23697,7 @@ ] ], [ - 7723, + 7846, [ { "SystemCall": { @@ -23458,7 +23712,7 @@ ] ], [ - 7956, + 8079, [ { "AllocSegment": { @@ -23471,7 +23725,7 @@ ] ], [ - 7970, + 8093, [ { "AllocSegment": { @@ -23484,7 +23738,7 @@ ] ], [ - 7984, + 8107, [ { "AllocSegment": { @@ -23497,7 +23751,7 @@ ] ], [ - 8048, + 8171, [ { "AllocSegment": { @@ -23510,7 +23764,7 @@ ] ], [ - 8062, + 8185, [ { "AllocSegment": { @@ -23523,7 +23777,7 @@ ] ], [ - 8085, + 8208, [ { "AllocSegment": { @@ -23536,7 +23790,7 @@ ] ], [ - 8109, + 8232, [ { "SystemCall": { @@ -23551,7 +23805,7 @@ ] ], [ - 8112, + 8235, [ { "AllocSegment": { @@ -23564,7 +23818,7 @@ ] ], [ - 8128, + 8251, [ { "SystemCall": { @@ -23585,7 +23839,7 @@ ] ], [ - 8165, + 8288, [ { "GetSegmentArenaIndex": { @@ -23604,7 +23858,7 @@ ] ], [ - 8206, + 8329, [ { "AllocSegment": { @@ -23617,7 +23871,7 @@ ] ], [ - 8214, + 8337, [ { "InitSquashData": { @@ -23652,7 +23906,7 @@ ] ], [ - 8233, + 8356, [ { "GetCurrentAccessIndex": { @@ -23667,7 +23921,7 @@ ] ], [ - 8246, + 8369, [ { "ShouldSkipSquashLoop": { @@ -23680,7 +23934,7 @@ ] ], [ - 8248, + 8371, [ { "GetCurrentAccessDelta": { @@ -23693,7 +23947,7 @@ ] ], [ - 8259, + 8382, [ { "ShouldContinueSquashLoop": { @@ -23706,7 +23960,7 @@ ] ], [ - 8273, + 8396, [ { "GetNextDictKey": { @@ -23719,7 +23973,7 @@ ] ], [ - 8292, + 8415, [ { "AssertLeFindSmallArcs": { @@ -23752,7 +24006,7 @@ ] ], [ - 8304, + 8427, [ { "AssertLeIsFirstArcExcluded": { @@ -23765,7 +24019,7 @@ ] ], [ - 8316, + 8439, [ { "AssertLeIsSecondArcExcluded": { @@ -23778,7 +24032,7 @@ ] ], [ - 8347, + 8470, [ { "AllocSegment": { @@ -23791,7 +24045,7 @@ ] ], [ - 8355, + 8478, [ { "AllocSegment": { @@ -23804,7 +24058,7 @@ ] ], [ - 8386, + 8509, [ { "SystemCall": { @@ -23819,7 +24073,7 @@ ] ], [ - 8400, + 8523, [ { "AllocSegment": { @@ -23832,7 +24086,7 @@ ] ], [ - 8420, + 8543, [ { "AllocSegment": { @@ -23845,7 +24099,7 @@ ] ], [ - 8434, + 8557, [ { "AllocSegment": { @@ -23858,7 +24112,7 @@ ] ], [ - 8448, + 8571, [ { "SystemCall": { @@ -23873,7 +24127,7 @@ ] ], [ - 8451, + 8574, [ { "AllocSegment": { @@ -23886,7 +24140,7 @@ ] ], [ - 8474, + 8597, [ { "TestLessThan": { @@ -23911,7 +24165,7 @@ ] ], [ - 8502, + 8625, [ { "AllocSegment": { @@ -23924,7 +24178,7 @@ ] ], [ - 8516, + 8639, [ { "AllocSegment": { @@ -23937,7 +24191,7 @@ ] ], [ - 8559, + 8682, [ { "AllocSegment": { @@ -23950,7 +24204,7 @@ ] ], [ - 8598, + 8721, [ { "AllocSegment": { @@ -23963,7 +24217,7 @@ ] ], [ - 8658, + 8781, [ { "SystemCall": { @@ -23978,7 +24232,7 @@ ] ], [ - 8668, + 8791, [ { "AllocSegment": { @@ -23991,7 +24245,7 @@ ] ], [ - 8699, + 8822, [ { "SystemCall": { @@ -24006,7 +24260,7 @@ ] ], [ - 8702, + 8825, [ { "AllocSegment": { @@ -24019,7 +24273,7 @@ ] ], [ - 8726, + 8849, [ { "TestLessThan": { @@ -24044,7 +24298,7 @@ ] ], [ - 8760, + 8883, [ { "SystemCall": { @@ -24059,7 +24313,7 @@ ] ], [ - 8775, + 8898, [ { "SystemCall": { @@ -24074,7 +24328,7 @@ ] ], [ - 8821, + 8944, [ { "AllocSegment": { @@ -24087,7 +24341,7 @@ ] ], [ - 8840, + 8963, [ { "DivMod": { @@ -24116,7 +24370,7 @@ ] ], [ - 8846, + 8969, [ { "TestLessThan": { @@ -24138,7 +24392,7 @@ ] ], [ - 8897, + 9020, [ { "AllocSegment": { @@ -24151,7 +24405,7 @@ ] ], [ - 8928, + 9051, [ { "AllocSegment": { @@ -24164,7 +24418,7 @@ ] ], [ - 8953, + 9076, [ { "AllocSegment": { @@ -24177,7 +24431,7 @@ ] ], [ - 8968, + 9091, [ { "AllocSegment": { @@ -24190,7 +24444,7 @@ ] ], [ - 9010, + 9133, [ { "SystemCall": { @@ -24205,7 +24459,7 @@ ] ], [ - 9022, + 9145, [ { "AllocSegment": { @@ -24218,7 +24472,7 @@ ] ], [ - 9052, + 9175, [ { "SystemCall": { @@ -24233,7 +24487,7 @@ ] ], [ - 9057, + 9180, [ { "AllocSegment": { @@ -24246,7 +24500,7 @@ ] ], [ - 9080, + 9203, [ { "TestLessThan": { @@ -24271,7 +24525,7 @@ ] ], [ - 9114, + 9237, [ { "SystemCall": { @@ -24286,7 +24540,7 @@ ] ], [ - 9129, + 9252, [ { "SystemCall": { @@ -24301,7 +24555,7 @@ ] ], [ - 9177, + 9300, [ { "AllocSegment": { @@ -24314,7 +24568,7 @@ ] ], [ - 9195, + 9318, [ { "DivMod": { @@ -24343,7 +24597,7 @@ ] ], [ - 9201, + 9324, [ { "TestLessThan": { @@ -24365,7 +24619,7 @@ ] ], [ - 9230, + 9353, [ { "SystemCall": { @@ -24380,7 +24634,7 @@ ] ], [ - 9280, + 9403, [ { "AllocSegment": { @@ -24393,7 +24647,7 @@ ] ], [ - 9318, + 9441, [ { "AllocSegment": { @@ -24406,7 +24660,7 @@ ] ], [ - 9345, + 9468, [ { "AllocSegment": { @@ -24419,7 +24673,7 @@ ] ], [ - 9361, + 9484, [ { "AllocSegment": { @@ -24432,7 +24686,7 @@ ] ], [ - 9387, + 9510, [ { "TestLessThanOrEqual": { @@ -24454,7 +24708,7 @@ ] ], [ - 9401, + 9524, [ { "TestLessThan": { @@ -24476,7 +24730,7 @@ ] ], [ - 9476, + 9599, [ { "TestLessThan": { @@ -24498,7 +24752,7 @@ ] ], [ - 9480, + 9603, [ { "LinearSplit": { @@ -24527,7 +24781,7 @@ ] ], [ - 9490, + 9613, [ { "LinearSplit": { @@ -24556,7 +24810,7 @@ ] ], [ - 9508, + 9631, [ { "SystemCall": { @@ -24571,7 +24825,7 @@ ] ], [ - 9526, + 9649, [ { "AllocSegment": { @@ -24584,7 +24838,7 @@ ] ], [ - 9545, + 9668, [ { "TestLessThan": { @@ -24606,7 +24860,7 @@ ] ], [ - 9549, + 9672, [ { "LinearSplit": { @@ -24635,7 +24889,7 @@ ] ], [ - 9559, + 9682, [ { "LinearSplit": { @@ -24664,7 +24918,7 @@ ] ], [ - 9577, + 9700, [ { "SystemCall": { @@ -24679,7 +24933,7 @@ ] ], [ - 9595, + 9718, [ { "AllocSegment": { @@ -24692,7 +24946,7 @@ ] ], [ - 9626, + 9749, [ { "AllocSegment": { @@ -24705,7 +24959,7 @@ ] ], [ - 9650, + 9773, [ { "AllocSegment": { @@ -24718,7 +24972,7 @@ ] ], [ - 9664, + 9787, [ { "AllocSegment": { @@ -24731,7 +24985,7 @@ ] ], [ - 9678, + 9801, [ { "AllocSegment": { @@ -24744,7 +24998,7 @@ ] ], [ - 9692, + 9815, [ { "AllocSegment": { @@ -24757,7 +25011,7 @@ ] ], [ - 9707, + 9830, [ { "AllocSegment": { @@ -24770,7 +25024,7 @@ ] ], [ - 9722, + 9845, [ { "TestLessThanOrEqual": { @@ -24792,7 +25046,7 @@ ] ], [ - 9736, + 9859, [ { "AllocSegment": { @@ -24805,7 +25059,7 @@ ] ], [ - 9756, + 9879, [ { "AllocSegment": { @@ -24818,7 +25072,7 @@ ] ], [ - 9770, + 9893, [ { "TestLessThanOrEqual": { @@ -24840,7 +25094,7 @@ ] ], [ - 9800, + 9923, [ { "AllocSegment": { @@ -24853,7 +25107,7 @@ ] ], [ - 9819, + 9942, [ { "TestLessThan": { @@ -24875,7 +25129,7 @@ ] ], [ - 9823, + 9946, [ { "LinearSplit": { @@ -24904,7 +25158,7 @@ ] ], [ - 9834, + 9957, [ { "LinearSplit": { @@ -24933,7 +25187,7 @@ ] ], [ - 9860, + 9983, [ { "SystemCall": { @@ -24948,7 +25202,7 @@ ] ], [ - 9875, + 9998, [ { "SystemCall": { @@ -24969,7 +25223,7 @@ ] ], [ - 9883, + 10006, [ { "TestLessThan": { @@ -24991,7 +25245,7 @@ ] ], [ - 9887, + 10010, [ { "LinearSplit": { @@ -25020,7 +25274,7 @@ ] ], [ - 9898, + 10021, [ { "LinearSplit": { @@ -25049,7 +25303,7 @@ ] ], [ - 9928, + 10051, [ { "SystemCall": { @@ -25070,7 +25324,7 @@ ] ], [ - 9944, + 10067, [ { "SystemCall": { @@ -25091,7 +25345,7 @@ ] ], [ - 10052, + 10175, [ { "TestLessThan": { @@ -25113,7 +25367,7 @@ ] ], [ - 10054, + 10177, [ { "DivMod": { @@ -25139,7 +25393,7 @@ ] ], [ - 10099, + 10222, [ { "TestLessThan": { @@ -25161,7 +25415,7 @@ ] ], [ - 10101, + 10224, [ { "DivMod": { @@ -25187,7 +25441,7 @@ ] ], [ - 10210, + 10333, [ { "TestLessThan": { @@ -25209,7 +25463,7 @@ ] ], [ - 10214, + 10337, [ { "LinearSplit": { @@ -25238,7 +25492,7 @@ ] ], [ - 10225, + 10348, [ { "LinearSplit": { @@ -25267,7 +25521,7 @@ ] ], [ - 10251, + 10374, [ { "SystemCall": { @@ -25282,7 +25536,7 @@ ] ], [ - 10266, + 10389, [ { "SystemCall": { @@ -25303,7 +25557,7 @@ ] ], [ - 10273, + 10396, [ { "TestLessThan": { @@ -25325,7 +25579,7 @@ ] ], [ - 10275, + 10398, [ { "DivMod": { @@ -25351,7 +25605,7 @@ ] ], [ - 10296, + 10419, [ { "TestLessThan": { @@ -25373,7 +25627,7 @@ ] ], [ - 10298, + 10421, [ { "DivMod": { @@ -25399,7 +25653,7 @@ ] ], [ - 10328, + 10451, [ { "TestLessThan": { @@ -25421,7 +25675,7 @@ ] ], [ - 10332, + 10455, [ { "LinearSplit": { @@ -25450,7 +25704,7 @@ ] ], [ - 10343, + 10466, [ { "LinearSplit": { @@ -25479,7 +25733,7 @@ ] ], [ - 10374, + 10497, [ { "SystemCall": { @@ -25494,7 +25748,7 @@ ] ], [ - 10389, + 10512, [ { "SystemCall": { @@ -25515,7 +25769,7 @@ ] ], [ - 10433, + 10556, [ { "AllocSegment": { @@ -25528,7 +25782,7 @@ ] ], [ - 10452, + 10575, [ { "AllocSegment": { @@ -25541,7 +25795,7 @@ ] ], [ - 10534, + 10657, [ { "RandomEcPoint": { @@ -25569,7 +25823,7 @@ ] ], [ - 10598, + 10721, [ { "RandomEcPoint": { @@ -25597,7 +25851,7 @@ ] ], [ - 10668, + 10791, [ { "AllocSegment": { @@ -25610,7 +25864,7 @@ ] ], [ - 10694, + 10817, [ { "SystemCall": { @@ -25625,7 +25879,7 @@ ] ], [ - 10711, + 10834, [ { "SystemCall": { @@ -25646,7 +25900,7 @@ ] ], [ - 10753, + 10876, [ { "AllocSegment": { @@ -25659,7 +25913,7 @@ ] ], [ - 10770, + 10893, [ { "AllocSegment": { @@ -25672,7 +25926,7 @@ ] ], [ - 10789, + 10912, [ { "SystemCall": { @@ -25687,7 +25941,7 @@ ] ], [ - 10799, + 10922, [ { "TestLessThan": { @@ -25709,7 +25963,7 @@ ] ], [ - 10803, + 10926, [ { "LinearSplit": { @@ -25738,7 +25992,7 @@ ] ], [ - 10814, + 10937, [ { "LinearSplit": { @@ -25767,7 +26021,7 @@ ] ], [ - 10858, + 10981, [ { "SystemCall": { @@ -25788,7 +26042,7 @@ ] ], [ - 10873, + 10996, [ { "SystemCall": { @@ -25809,7 +26063,7 @@ ] ], [ - 10883, + 11006, [ { "TestLessThan": { @@ -25834,7 +26088,7 @@ ] ], [ - 10898, + 11021, [ { "TestLessThan": { @@ -25859,7 +26113,7 @@ ] ], [ - 10914, + 11037, [ { "TestLessThan": { @@ -25881,7 +26135,7 @@ ] ], [ - 10918, + 11041, [ { "LinearSplit": { @@ -25910,7 +26164,7 @@ ] ], [ - 10929, + 11052, [ { "LinearSplit": { @@ -25939,7 +26193,7 @@ ] ], [ - 10958, + 11081, [ { "SystemCall": { @@ -25954,7 +26208,7 @@ ] ], [ - 10974, + 11097, [ { "SystemCall": { @@ -25975,7 +26229,7 @@ ] ], [ - 11016, + 11139, [ { "AllocSegment": { @@ -25988,7 +26242,7 @@ ] ], [ - 11034, + 11157, [ { "AllocSegment": { @@ -26001,7 +26255,7 @@ ] ], [ - 11136, + 11259, [ { "AllocSegment": { @@ -26014,7 +26268,7 @@ ] ], [ - 11211, + 11334, [ { "EvalCircuit": { @@ -26047,7 +26301,7 @@ ] ], [ - 11268, + 11391, [ { "AllocSegment": { @@ -26060,7 +26314,7 @@ ] ], [ - 11324, + 11447, [ { "AllocSegment": { @@ -26073,7 +26327,7 @@ ] ], [ - 11417, + 11540, [ { "AllocSegment": { @@ -26086,7 +26340,7 @@ ] ], [ - 11438, + 11561, [ { "AllocSegment": { @@ -26099,7 +26353,7 @@ ] ], [ - 11509, + 11632, [ { "AllocSegment": { @@ -26112,7 +26366,7 @@ ] ], [ - 11537, + 11660, [ { "AllocSegment": { @@ -26125,7 +26379,7 @@ ] ], [ - 11575, + 11731, [ { "TestLessThan": { @@ -26153,7 +26407,7 @@ ] ], [ - 11579, + 11735, [ { "LinearSplit": { @@ -26182,7 +26436,7 @@ ] ], [ - 11601, + 11757, [ { "TestLessThanOrEqual": { @@ -26207,7 +26461,7 @@ ] ], [ - 11615, + 11771, [ { "TestLessThan": { @@ -26229,7 +26483,7 @@ ] ], [ - 11625, + 11781, [ { "TestLessThanOrEqual": { @@ -26254,7 +26508,7 @@ ] ], [ - 11648, + 11804, [ { "AllocSegment": { @@ -26267,7 +26521,7 @@ ] ], [ - 11669, + 11825, [ { "AllocSegment": { @@ -26280,7 +26534,7 @@ ] ], [ - 11690, + 11846, [ { "AllocSegment": { @@ -26293,7 +26547,7 @@ ] ], [ - 11738, + 11894, [ { "TestLessThanOrEqual": { @@ -26315,7 +26569,7 @@ ] ], [ - 11798, + 11954, [ { "AllocSegment": { @@ -26328,7 +26582,7 @@ ] ], [ - 11818, + 11974, [ { "TestLessThanOrEqual": { @@ -26350,7 +26604,7 @@ ] ], [ - 11897, + 12053, [ { "AllocSegment": { @@ -26363,7 +26617,7 @@ ] ], [ - 11927, + 12083, [ { "AllocSegment": { @@ -26376,7 +26630,7 @@ ] ], [ - 11947, + 12103, [ { "TestLessThanOrEqual": { @@ -26398,7 +26652,7 @@ ] ], [ - 12048, + 12204, [ { "AllocSegment": { @@ -26411,7 +26665,7 @@ ] ], [ - 12078, + 12234, [ { "AllocSegment": { @@ -26424,7 +26678,7 @@ ] ], [ - 12098, + 12254, [ { "TestLessThanOrEqual": { @@ -26446,7 +26700,7 @@ ] ], [ - 12169, + 12325, [ { "AllocSegment": { @@ -26459,7 +26713,7 @@ ] ], [ - 12190, + 12346, [ { "DivMod": { @@ -26488,7 +26742,7 @@ ] ], [ - 12248, + 12404, [ { "AllocSegment": { @@ -26501,7 +26755,7 @@ ] ], [ - 12301, + 12457, [ { "AllocSegment": { @@ -26514,7 +26768,7 @@ ] ], [ - 12314, + 12470, [ { "DivMod": { @@ -26543,7 +26797,7 @@ ] ], [ - 12322, + 12478, [ { "TestLessThan": { @@ -26574,7 +26828,7 @@ ] ], [ - 12339, + 12495, [ { "AllocSegment": { @@ -26587,7 +26841,7 @@ ] ], [ - 12363, + 12519, [ { "TestLessThan": { @@ -26609,7 +26863,7 @@ ] ], [ - 12387, + 12543, [ { "TestLessThan": { @@ -26631,7 +26885,7 @@ ] ], [ - 12396, + 12552, [ { "TestLessThan": { @@ -26653,7 +26907,7 @@ ] ], [ - 12413, + 12569, [ { "AllocSegment": { @@ -26666,7 +26920,7 @@ ] ], [ - 12427, + 12583, [ { "AllocSegment": { @@ -26679,7 +26933,7 @@ ] ], [ - 12443, + 12599, [ { "TestLessThan": { @@ -26710,7 +26964,7 @@ ] ], [ - 12465, + 12621, [ { "AllocSegment": { @@ -26723,7 +26977,7 @@ ] ], [ - 12479, + 12635, [ { "AllocSegment": { @@ -26736,7 +26990,7 @@ ] ], [ - 12536, + 12692, [ { "DivMod": { @@ -26765,7 +27019,7 @@ ] ], [ - 12545, + 12701, [ { "TestLessThan": { @@ -26787,7 +27041,7 @@ ] ], [ - 12555, + 12711, [ { "TestLessThan": { @@ -26818,7 +27072,7 @@ ] ], [ - 12577, + 12733, [ { "AllocSegment": { @@ -26831,7 +27085,7 @@ ] ], [ - 12592, + 12748, [ { "AllocSegment": { @@ -26844,7 +27098,7 @@ ] ], [ - 12617, + 12773, [ { "TestLessThan": { @@ -26875,7 +27129,7 @@ ] ], [ - 12631, + 12787, [ { "DivMod": { @@ -26904,7 +27158,7 @@ ] ], [ - 12648, + 12804, [ { "TestLessThan": { @@ -26926,7 +27180,7 @@ ] ], [ - 12660, + 12816, [ { "TestLessThan": { @@ -26948,7 +27202,7 @@ ] ], [ - 12670, + 12826, [ { "TestLessThan": { @@ -26979,7 +27233,7 @@ ] ], [ - 12693, + 12849, [ { "AllocSegment": { @@ -26992,7 +27246,7 @@ ] ], [ - 12708, + 12864, [ { "AllocSegment": { @@ -27005,7 +27259,7 @@ ] ], [ - 12723, + 12879, [ { "AllocSegment": { @@ -27018,7 +27272,7 @@ ] ], [ - 12738, + 12894, [ { "AllocSegment": { @@ -27031,7 +27285,7 @@ ] ], [ - 12751, + 12907, [ { "TestLessThanOrEqual": { @@ -27053,7 +27307,7 @@ ] ], [ - 12761, + 12917, [ { "TestLessThanOrEqualAddress": { @@ -27084,7 +27338,7 @@ ] ], [ - 12798, + 12954, [ { "SystemCall": { @@ -27099,7 +27353,7 @@ ] ], [ - 12831, + 12987, [ { "AllocSegment": { @@ -27112,7 +27366,7 @@ ] ], [ - 12865, + 13021, [ { "TestLessThan": { @@ -27134,7 +27388,7 @@ ] ], [ - 12887, + 13043, [ { "TestLessThan": { @@ -27156,7 +27410,7 @@ ] ], [ - 12924, + 13080, [ { "TestLessThan": { @@ -27178,7 +27432,7 @@ ] ], [ - 12946, + 13102, [ { "TestLessThan": { @@ -27200,7 +27454,7 @@ ] ], [ - 13022, + 13178, [ { "AllocSegment": { @@ -27213,7 +27467,7 @@ ] ], [ - 13087, + 13243, [ { "TestLessThan": { @@ -27235,7 +27489,7 @@ ] ], [ - 13111, + 13267, [ { "TestLessThan": { @@ -27257,7 +27511,7 @@ ] ], [ - 13152, + 13308, [ { "TestLessThan": { @@ -27279,7 +27533,7 @@ ] ], [ - 13178, + 13334, [ { "TestLessThan": { @@ -27301,7 +27555,7 @@ ] ], [ - 13222, + 13378, [ { "U256InvModN": { @@ -27358,7 +27612,7 @@ ] ], [ - 13240, + 13396, [ { "WideMul128": { @@ -27555,7 +27809,7 @@ ] ], [ - 13293, + 13449, [ { "WideMul128": { @@ -27608,7 +27862,7 @@ ] ], [ - 13297, + 13453, [ { "TestLessThan": { @@ -27630,7 +27884,7 @@ ] ], [ - 13311, + 13467, [ { "TestLessThan": { @@ -27652,7 +27906,7 @@ ] ], [ - 13324, + 13480, [ { "DivMod": { @@ -27678,7 +27932,7 @@ ] ], [ - 13334, + 13490, [ { "DivMod": { @@ -27704,7 +27958,7 @@ ] ], [ - 13345, + 13501, [ { "DivMod": { @@ -27730,7 +27984,7 @@ ] ], [ - 13354, + 13510, [ { "DivMod": { @@ -27756,7 +28010,7 @@ ] ], [ - 13364, + 13520, [ { "DivMod": { @@ -27782,7 +28036,7 @@ ] ], [ - 13375, + 13531, [ { "DivMod": { @@ -27808,7 +28062,7 @@ ] ], [ - 13384, + 13540, [ { "DivMod": { @@ -27834,7 +28088,7 @@ ] ], [ - 13394, + 13550, [ { "DivMod": { @@ -27860,7 +28114,7 @@ ] ], [ - 13405, + 13561, [ { "DivMod": { @@ -27886,7 +28140,7 @@ ] ], [ - 13414, + 13570, [ { "DivMod": { @@ -27912,7 +28166,7 @@ ] ], [ - 13424, + 13580, [ { "DivMod": { @@ -27938,7 +28192,7 @@ ] ], [ - 13435, + 13591, [ { "DivMod": { @@ -27964,7 +28218,7 @@ ] ], [ - 13444, + 13600, [ { "DivMod": { @@ -27990,7 +28244,7 @@ ] ], [ - 13454, + 13610, [ { "DivMod": { @@ -28016,7 +28270,7 @@ ] ], [ - 13465, + 13621, [ { "DivMod": { @@ -28042,7 +28296,7 @@ ] ], [ - 13474, + 13630, [ { "DivMod": { @@ -28068,7 +28322,7 @@ ] ], [ - 13484, + 13640, [ { "DivMod": { @@ -28094,7 +28348,7 @@ ] ], [ - 13495, + 13651, [ { "DivMod": { @@ -28120,7 +28374,7 @@ ] ], [ - 13504, + 13660, [ { "DivMod": { @@ -28146,7 +28400,7 @@ ] ], [ - 13514, + 13670, [ { "DivMod": { @@ -28172,7 +28426,7 @@ ] ], [ - 13525, + 13681, [ { "DivMod": { @@ -28198,7 +28452,7 @@ ] ], [ - 13534, + 13690, [ { "DivMod": { @@ -28224,7 +28478,7 @@ ] ], [ - 13544, + 13700, [ { "DivMod": { @@ -28250,7 +28504,7 @@ ] ], [ - 13555, + 13711, [ { "DivMod": { @@ -28276,7 +28530,7 @@ ] ], [ - 13603, + 13759, [ { "SystemCall": { @@ -28291,7 +28545,7 @@ ] ], [ - 13620, + 13776, [ { "SystemCall": { @@ -28306,7 +28560,7 @@ ] ], [ - 13632, + 13788, [ { "SystemCall": { @@ -28327,7 +28581,7 @@ ] ], [ - 13643, + 13799, [ { "SystemCall": { @@ -28348,7 +28602,7 @@ ] ], [ - 13653, + 13809, [ { "SystemCall": { @@ -28369,7 +28623,7 @@ ] ], [ - 13738, + 13894, [ { "AllocSegment": { @@ -28382,7 +28636,7 @@ ] ], [ - 13767, + 13923, [ { "DivMod": { @@ -28408,7 +28662,7 @@ ] ], [ - 13777, + 13933, [ { "DivMod": { @@ -28434,7 +28688,7 @@ ] ], [ - 13788, + 13944, [ { "DivMod": { @@ -28460,7 +28714,7 @@ ] ], [ - 13797, + 13953, [ { "DivMod": { @@ -28486,7 +28740,7 @@ ] ], [ - 13807, + 13963, [ { "DivMod": { @@ -28512,7 +28766,7 @@ ] ], [ - 13818, + 13974, [ { "DivMod": { @@ -28538,7 +28792,7 @@ ] ], [ - 13827, + 13983, [ { "AllocSegment": { @@ -28551,7 +28805,7 @@ ] ], [ - 13896, + 14052, [ { "TestLessThan": { @@ -28582,7 +28836,7 @@ ] ], [ - 13911, + 14067, [ { "TestLessThan": { @@ -28604,7 +28858,7 @@ ] ], [ - 13930, + 14086, [ { "TestLessThan": { @@ -28626,7 +28880,7 @@ ] ], [ - 13949, + 14105, [ { "TestLessThan": { @@ -28648,7 +28902,7 @@ ] ], [ - 13959, + 14115, [ { "TestLessThan": { @@ -28670,7 +28924,7 @@ ] ], [ - 13961, + 14117, [ { "DivMod": { @@ -28696,7 +28950,7 @@ ] ], [ - 13998, + 14154, [ { "TestLessThan": { @@ -28718,7 +28972,7 @@ ] ], [ - 14017, + 14173, [ { "AllocSegment": { @@ -28731,7 +28985,7 @@ ] ], [ - 14028, + 14184, [ { "DivMod": { @@ -28760,7 +29014,7 @@ ] ], [ - 14034, + 14190, [ { "TestLessThan": { @@ -28782,7 +29036,7 @@ ] ], [ - 14048, + 14204, [ { "TestLessThan": { @@ -28804,7 +29058,7 @@ ] ], [ - 14062, + 14218, [ { "TestLessThan": { @@ -28826,7 +29080,7 @@ ] ], [ - 14073, + 14229, [ { "TestLessThan": { @@ -28848,7 +29102,7 @@ ] ], [ - 14102, + 14258, [ { "AllocSegment": { @@ -28861,7 +29115,7 @@ ] ], [ - 14127, + 14283, [ { "TestLessThan": { @@ -28883,7 +29137,7 @@ ] ], [ - 14131, + 14287, [ { "LinearSplit": { @@ -28912,7 +29166,7 @@ ] ], [ - 14141, + 14297, [ { "LinearSplit": { @@ -28941,7 +29195,7 @@ ] ], [ - 14161, + 14317, [ { "AllocSegment": { @@ -28954,7 +29208,7 @@ ] ], [ - 14182, + 14338, [ { "AllocSegment": { @@ -28967,7 +29221,7 @@ ] ], [ - 14203, + 14359, [ { "AllocSegment": { @@ -28980,7 +29234,7 @@ ] ], [ - 14223, + 14379, [ { "TestLessThan": { @@ -29002,7 +29256,7 @@ ] ], [ - 14225, + 14381, [ { "DivMod": { @@ -29028,7 +29282,7 @@ ] ], [ - 14269, + 14425, [ { "AllocSegment": { @@ -29041,7 +29295,7 @@ ] ], [ - 14280, + 14436, [ { "DivMod": { @@ -29070,7 +29324,7 @@ ] ], [ - 14286, + 14442, [ { "TestLessThan": { @@ -29092,7 +29346,7 @@ ] ], [ - 14300, + 14456, [ { "TestLessThan": { @@ -29114,7 +29368,7 @@ ] ], [ - 14318, + 14474, [ { "TestLessThan": { @@ -29136,7 +29390,7 @@ ] ], [ - 14331, + 14487, [ { "TestLessThan": { @@ -29158,7 +29412,7 @@ ] ], [ - 14342, + 14498, [ { "TestLessThan": { @@ -29180,7 +29434,7 @@ ] ], [ - 14371, + 14527, [ { "AllocSegment": { @@ -29193,7 +29447,7 @@ ] ], [ - 14396, + 14552, [ { "TestLessThan": { @@ -29215,7 +29469,7 @@ ] ], [ - 14400, + 14556, [ { "LinearSplit": { @@ -29244,7 +29498,7 @@ ] ], [ - 14410, + 14566, [ { "LinearSplit": { @@ -29273,7 +29527,7 @@ ] ], [ - 14430, + 14586, [ { "AllocSegment": { @@ -29286,7 +29540,7 @@ ] ], [ - 14451, + 14607, [ { "AllocSegment": { @@ -29299,7 +29553,7 @@ ] ], [ - 14472, + 14628, [ { "AllocSegment": { @@ -29312,7 +29566,7 @@ ] ], [ - 14501, + 14657, [ { "TestLessThan": { @@ -29334,7 +29588,7 @@ ] ], [ - 14503, + 14659, [ { "DivMod": { @@ -29360,7 +29614,7 @@ ] ], [ - 14540, + 14696, [ { "TestLessThan": { @@ -29382,7 +29636,7 @@ ] ], [ - 14551, + 14707, [ { "TestLessThan": { @@ -29404,7 +29658,7 @@ ] ], [ - 14562, + 14718, [ { "TestLessThan": { @@ -29426,7 +29680,7 @@ ] ], [ - 14591, + 14747, [ { "AllocSegment": { @@ -29439,7 +29693,7 @@ ] ], [ - 14616, + 14772, [ { "TestLessThan": { @@ -29461,7 +29715,7 @@ ] ], [ - 14620, + 14776, [ { "LinearSplit": { @@ -29490,7 +29744,7 @@ ] ], [ - 14630, + 14786, [ { "LinearSplit": { @@ -29519,7 +29773,7 @@ ] ], [ - 14656, + 14812, [ { "AllocSegment": { @@ -29532,7 +29786,7 @@ ] ], [ - 14677, + 14833, [ { "AllocSegment": { @@ -29545,7 +29799,7 @@ ] ], [ - 14699, + 14855, [ { "AllocSegment": { @@ -29558,7 +29812,7 @@ ] ], [ - 14721, + 14877, [ { "TestLessThan": { @@ -29580,7 +29834,7 @@ ] ], [ - 14732, + 14888, [ { "TestLessThan": { @@ -29602,7 +29856,7 @@ ] ], [ - 14761, + 14917, [ { "AllocSegment": { @@ -29615,7 +29869,7 @@ ] ], [ - 14786, + 14942, [ { "TestLessThan": { @@ -29637,7 +29891,7 @@ ] ], [ - 14790, + 14946, [ { "LinearSplit": { @@ -29666,7 +29920,7 @@ ] ], [ - 14800, + 14956, [ { "LinearSplit": { @@ -29695,7 +29949,7 @@ ] ], [ - 14823, + 14979, [ { "AllocSegment": { @@ -29708,7 +29962,7 @@ ] ], [ - 14868, + 15024, [ { "TestLessThan": { @@ -29730,7 +29984,7 @@ ] ], [ - 14879, + 15035, [ { "TestLessThan": { @@ -29752,7 +30006,7 @@ ] ], [ - 14908, + 15064, [ { "AllocSegment": { @@ -29765,7 +30019,7 @@ ] ], [ - 14931, + 15087, [ { "TestLessThan": { @@ -29796,7 +30050,7 @@ ] ], [ - 14955, + 15111, [ { "AllocSegment": { @@ -29809,7 +30063,7 @@ ] ], [ - 14999, + 15155, [ { "AllocSegment": { @@ -29822,7 +30076,7 @@ ] ], [ - 15026, + 15182, [ { "TestLessThanOrEqual": { @@ -29844,7 +30098,7 @@ ] ], [ - 15078, + 15234, [ { "AllocSegment": { @@ -29857,7 +30111,7 @@ ] ], [ - 15135, + 15291, [ { "TestLessThan": { @@ -29885,7 +30139,7 @@ ] ], [ - 15139, + 15295, [ { "LinearSplit": { @@ -29914,7 +30168,7 @@ ] ], [ - 15181, + 15337, [ { "TestLessThan": { @@ -29936,7 +30190,7 @@ ] ], [ - 15183, + 15339, [ { "DivMod": { @@ -29962,7 +30216,7 @@ ] ], [ - 15270, + 15426, [ { "DivMod": { @@ -29991,7 +30245,7 @@ ] ], [ - 15276, + 15432, [ { "TestLessThan": { @@ -30013,7 +30267,7 @@ ] ], [ - 15287, + 15443, [ { "TestLessThan": { @@ -30035,7 +30289,7 @@ ] ], [ - 15297, + 15453, [ { "TestLessThan": { @@ -30057,7 +30311,7 @@ ] ], [ - 15311, + 15467, [ { "DivMod": { @@ -30086,7 +30340,7 @@ ] ], [ - 15317, + 15473, [ { "TestLessThan": { @@ -30108,7 +30362,7 @@ ] ], [ - 15331, + 15487, [ { "TestLessThan": { @@ -30130,7 +30384,7 @@ ] ], [ - 15341, + 15497, [ { "TestLessThan": { @@ -30152,7 +30406,7 @@ ] ], [ - 15363, + 15519, [ { "AllocSegment": { @@ -30165,7 +30419,7 @@ ] ], [ - 15377, + 15533, [ { "AllocSegment": { @@ -30178,7 +30432,7 @@ ] ], [ - 15395, + 15551, [ { "AllocSegment": { @@ -30191,7 +30445,7 @@ ] ], [ - 15409, + 15565, [ { "AllocSegment": { @@ -30204,7 +30458,7 @@ ] ], [ - 15425, + 15581, [ { "TestLessThanOrEqual": { @@ -30226,7 +30480,7 @@ ] ], [ - 15452, + 15608, [ { "TestLessThan": { @@ -30248,7 +30502,7 @@ ] ], [ - 15469, + 15625, [ { "AllocSegment": { @@ -30261,7 +30515,7 @@ ] ], [ - 15494, + 15650, [ { "AllocSegment": { @@ -30274,7 +30528,7 @@ ] ], [ - 15739, + 15895, [ { "SystemCall": { @@ -30289,7 +30543,7 @@ ] ], [ - 15765, + 15921, [ { "SystemCall": { @@ -30304,7 +30558,7 @@ ] ], [ - 15779, + 15935, [ { "U256InvModN": { @@ -30361,7 +30615,7 @@ ] ], [ - 15797, + 15953, [ { "WideMul128": { @@ -30558,7 +30812,7 @@ ] ], [ - 15850, + 16006, [ { "WideMul128": { @@ -30611,7 +30865,7 @@ ] ], [ - 15854, + 16010, [ { "TestLessThan": { @@ -30633,7 +30887,7 @@ ] ], [ - 15868, + 16024, [ { "TestLessThan": { @@ -30655,7 +30909,7 @@ ] ], [ - 15881, + 16037, [ { "DivMod": { @@ -30681,7 +30935,7 @@ ] ], [ - 15891, + 16047, [ { "DivMod": { @@ -30707,7 +30961,7 @@ ] ], [ - 15902, + 16058, [ { "DivMod": { @@ -30733,7 +30987,7 @@ ] ], [ - 15911, + 16067, [ { "DivMod": { @@ -30759,7 +31013,7 @@ ] ], [ - 15921, + 16077, [ { "DivMod": { @@ -30785,7 +31039,7 @@ ] ], [ - 15932, + 16088, [ { "DivMod": { @@ -30811,7 +31065,7 @@ ] ], [ - 15941, + 16097, [ { "DivMod": { @@ -30837,7 +31091,7 @@ ] ], [ - 15951, + 16107, [ { "DivMod": { @@ -30863,7 +31117,7 @@ ] ], [ - 15962, + 16118, [ { "DivMod": { @@ -30889,7 +31143,7 @@ ] ], [ - 15971, + 16127, [ { "DivMod": { @@ -30915,7 +31169,7 @@ ] ], [ - 15981, + 16137, [ { "DivMod": { @@ -30941,7 +31195,7 @@ ] ], [ - 15992, + 16148, [ { "DivMod": { @@ -30967,7 +31221,7 @@ ] ], [ - 16001, + 16157, [ { "DivMod": { @@ -30993,7 +31247,7 @@ ] ], [ - 16011, + 16167, [ { "DivMod": { @@ -31019,7 +31273,7 @@ ] ], [ - 16022, + 16178, [ { "DivMod": { @@ -31045,7 +31299,7 @@ ] ], [ - 16031, + 16187, [ { "DivMod": { @@ -31071,7 +31325,7 @@ ] ], [ - 16041, + 16197, [ { "DivMod": { @@ -31097,7 +31351,7 @@ ] ], [ - 16052, + 16208, [ { "DivMod": { @@ -31123,7 +31377,7 @@ ] ], [ - 16061, + 16217, [ { "DivMod": { @@ -31149,7 +31403,7 @@ ] ], [ - 16071, + 16227, [ { "DivMod": { @@ -31175,7 +31429,7 @@ ] ], [ - 16082, + 16238, [ { "DivMod": { @@ -31201,7 +31455,7 @@ ] ], [ - 16091, + 16247, [ { "DivMod": { @@ -31227,7 +31481,7 @@ ] ], [ - 16101, + 16257, [ { "DivMod": { @@ -31253,7 +31507,7 @@ ] ], [ - 16112, + 16268, [ { "DivMod": { @@ -31279,7 +31533,7 @@ ] ], [ - 16136, + 16292, [ { "TestLessThan": { @@ -31301,7 +31555,7 @@ ] ], [ - 16161, + 16317, [ { "TestLessThan": { @@ -31323,7 +31577,7 @@ ] ], [ - 16181, + 16337, [ { "TestLessThan": { @@ -31345,7 +31599,7 @@ ] ], [ - 16226, + 16382, [ { "SystemCall": { @@ -31360,7 +31614,7 @@ ] ], [ - 16238, + 16394, [ { "SystemCall": { @@ -31381,7 +31635,7 @@ ] ], [ - 16249, + 16405, [ { "SystemCall": { @@ -31402,7 +31656,7 @@ ] ], [ - 16295, + 16451, [ { "AllocSegment": { @@ -31415,7 +31669,7 @@ ] ], [ - 16311, + 16467, [ { "DivMod": { @@ -31441,7 +31695,7 @@ ] ], [ - 16321, + 16477, [ { "DivMod": { @@ -31467,7 +31721,7 @@ ] ], [ - 16332, + 16488, [ { "DivMod": { @@ -31493,7 +31747,7 @@ ] ], [ - 16341, + 16497, [ { "DivMod": { @@ -31519,7 +31773,7 @@ ] ], [ - 16351, + 16507, [ { "DivMod": { @@ -31545,7 +31799,7 @@ ] ], [ - 16362, + 16518, [ { "DivMod": { @@ -31571,7 +31825,7 @@ ] ], [ - 16371, + 16527, [ { "AllocSegment": { @@ -31584,7 +31838,7 @@ ] ], [ - 16388, + 16544, [ { "AllocSegment": { @@ -31597,7 +31851,7 @@ ] ], [ - 16445, + 16601, [ { "SystemCall": { @@ -31612,7 +31866,7 @@ ] ], [ - 16452, + 16608, [ { "AllocConstantSize": { @@ -31628,7 +31882,7 @@ ] ], [ - 16456, + 16612, [ { "AllocSegment": { @@ -31641,7 +31895,7 @@ ] ], [ - 16491, + 16647, [ { "SystemCall": { @@ -31656,7 +31910,7 @@ ] ], [ - 16564, + 16720, [ { "DivMod": { @@ -31685,7 +31939,7 @@ ] ], [ - 16570, + 16726, [ { "TestLessThan": { @@ -31707,7 +31961,7 @@ ] ], [ - 16637, + 16793, [ { "WideMul128": { @@ -31736,7 +31990,7 @@ ] ], [ - 16639, + 16795, [ { "DivMod": { @@ -31762,7 +32016,7 @@ ] ], [ - 16649, + 16805, [ { "DivMod": { @@ -31788,7 +32042,7 @@ ] ], [ - 16660, + 16816, [ { "DivMod": { @@ -31814,7 +32068,7 @@ ] ], [ - 16669, + 16825, [ { "WideMul128": { @@ -31843,7 +32097,7 @@ ] ], [ - 16671, + 16827, [ { "DivMod": { @@ -31869,7 +32123,7 @@ ] ], [ - 16681, + 16837, [ { "DivMod": { @@ -31895,7 +32149,7 @@ ] ], [ - 16692, + 16848, [ { "DivMod": { @@ -31921,7 +32175,7 @@ ] ], [ - 16702, + 16858, [ { "TestLessThan": { @@ -31943,7 +32197,7 @@ ] ], [ - 16724, + 16880, [ { "WideMul128": { @@ -31972,7 +32226,7 @@ ] ], [ - 16726, + 16882, [ { "DivMod": { @@ -31998,7 +32252,7 @@ ] ], [ - 16736, + 16892, [ { "DivMod": { @@ -32024,7 +32278,7 @@ ] ], [ - 16747, + 16903, [ { "DivMod": { @@ -32050,7 +32304,7 @@ ] ], [ - 16757, + 16913, [ { "TestLessThan": { @@ -32072,7 +32326,7 @@ ] ], [ - 16780, + 16936, [ { "TestLessThan": { @@ -32094,7 +32348,7 @@ ] ], [ - 16802, + 16958, [ { "WideMul128": { @@ -32123,7 +32377,7 @@ ] ], [ - 16804, + 16960, [ { "DivMod": { @@ -32149,7 +32403,7 @@ ] ], [ - 16814, + 16970, [ { "DivMod": { @@ -32175,7 +32429,7 @@ ] ], [ - 16825, + 16981, [ { "DivMod": { @@ -32201,7 +32455,7 @@ ] ], [ - 16835, + 16991, [ { "TestLessThan": { @@ -32223,7 +32477,7 @@ ] ], [ - 16854, + 17010, [ { "TestLessThan": { @@ -32245,7 +32499,7 @@ ] ], [ - 16877, + 17033, [ { "TestLessThan": { @@ -32267,7 +32521,7 @@ ] ], [ - 16896, + 17052, [ { "TestLessThan": { @@ -32289,7 +32543,7 @@ ] ], [ - 16915, + 17071, [ { "TestLessThan": { @@ -32311,7 +32565,7 @@ ] ], [ - 16938, + 17094, [ { "TestLessThan": { @@ -32333,7 +32587,7 @@ ] ], [ - 16960, + 17116, [ { "Uint512DivModByUint256": { @@ -32402,7 +32656,7 @@ ] ], [ - 16978, + 17134, [ { "WideMul128": { @@ -32527,7 +32781,7 @@ ] ], [ - 17007, + 17163, [ { "TestLessThan": { @@ -32552,7 +32806,7 @@ ] ], [ - 17019, + 17175, [ { "TestLessThan": { @@ -32577,7 +32831,7 @@ ] ], [ - 17034, + 17190, [ { "DivMod": { @@ -32603,7 +32857,7 @@ ] ], [ - 17044, + 17200, [ { "DivMod": { @@ -32629,7 +32883,7 @@ ] ], [ - 17055, + 17211, [ { "DivMod": { @@ -32655,7 +32909,7 @@ ] ], [ - 17064, + 17220, [ { "DivMod": { @@ -32681,7 +32935,7 @@ ] ], [ - 17074, + 17230, [ { "DivMod": { @@ -32707,7 +32961,7 @@ ] ], [ - 17085, + 17241, [ { "DivMod": { @@ -32733,7 +32987,7 @@ ] ], [ - 17094, + 17250, [ { "DivMod": { @@ -32759,7 +33013,7 @@ ] ], [ - 17104, + 17260, [ { "DivMod": { @@ -32785,7 +33039,7 @@ ] ], [ - 17115, + 17271, [ { "DivMod": { @@ -32811,7 +33065,7 @@ ] ], [ - 17124, + 17280, [ { "DivMod": { @@ -32837,7 +33091,7 @@ ] ], [ - 17134, + 17290, [ { "DivMod": { @@ -32863,7 +33117,7 @@ ] ], [ - 17145, + 17301, [ { "DivMod": { @@ -32889,7 +33143,7 @@ ] ], [ - 17154, + 17310, [ { "DivMod": { @@ -32915,7 +33169,7 @@ ] ], [ - 17164, + 17320, [ { "DivMod": { @@ -32941,7 +33195,7 @@ ] ], [ - 17175, + 17331, [ { "DivMod": { @@ -32967,7 +33221,7 @@ ] ], [ - 17189, + 17345, [ { "TestLessThan": { @@ -32989,7 +33243,7 @@ ] ], [ - 17307, + 17463, [ { "AllocSegment": { @@ -33002,7 +33256,7 @@ ] ], [ - 17330, + 17486, [ { "TestLessThanOrEqual": { @@ -33027,7 +33281,7 @@ ] ], [ - 17405, + 17561, [ { "AllocSegment": { @@ -33040,7 +33294,7 @@ ] ], [ - 17460, + 17616, [ { "DivMod": { @@ -33069,7 +33323,7 @@ ] ], [ - 17466, + 17622, [ { "TestLessThan": { @@ -33091,7 +33345,7 @@ ] ], [ - 17479, + 17635, [ { "TestLessThan": { @@ -33113,7 +33367,7 @@ ] ], [ - 17489, + 17645, [ { "TestLessThan": { @@ -33135,7 +33389,7 @@ ] ], [ - 17537, + 17693, [ { "DivMod": { @@ -33164,7 +33418,7 @@ ] ], [ - 17543, + 17699, [ { "TestLessThan": { @@ -33186,7 +33440,7 @@ ] ], [ - 17559, + 17715, [ { "TestLessThan": { @@ -33208,7 +33462,7 @@ ] ], [ - 17569, + 17725, [ { "TestLessThan": { @@ -33230,7 +33484,7 @@ ] ], [ - 17592, + 17748, [ { "AllocSegment": { @@ -33243,7 +33497,7 @@ ] ], [ - 17606, + 17762, [ { "AllocSegment": { @@ -33256,7 +33510,7 @@ ] ], [ - 17625, + 17781, [ { "AllocSegment": { @@ -33269,7 +33523,7 @@ ] ], [ - 17639, + 17795, [ { "AllocSegment": { @@ -33291,6 +33545,14 @@ "range_check" ] }, + { + "selector": "0x3541591104188daef4379e06e92ecce09094a3b381da2e654eb041d00566d8", + "offset": 5511, + "builtins": [ + "range_check", + "range_check96" + ] + }, { "selector": "0x3c118a68e16e12e97ed25cb4901c12f4d3162818669cc44c391d8049924c14", "offset": 1226, @@ -33501,14 +33763,14 @@ "L1_HANDLER": [ { "selector": "0x205500a208d0d49d79197fea83cc3f5fde99ac2e1909ae0a5d9f394c0c52ed0", - "offset": 5672, + "offset": 5795, "builtins": [ "range_check" ] }, { "selector": "0x39edbbb129ad752107a94d40c3873cae369a46fd2fc578d075679aa67e85d12", - "offset": 5511, + "offset": 5634, "builtins": [ "range_check" ] @@ -33517,7 +33779,7 @@ "CONSTRUCTOR": [ { "selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", - "offset": 5922, + "offset": 6045, "builtins": [ "range_check" ] diff --git a/crates/blockifier/feature_contracts/cairo1/test_contract.cairo b/crates/blockifier/feature_contracts/cairo1/test_contract.cairo index 56d6d15732..9450aa119f 100644 --- a/crates/blockifier/feature_contracts/cairo1/test_contract.cairo +++ b/crates/blockifier/feature_contracts/cairo1/test_contract.cairo @@ -553,4 +553,20 @@ mod TestContract { assert!(outputs.get_output(mul) == u384 { limb0: 6, limb1: 0, limb2: 0, limb3: 0 }); } + + + // Add drop for AddInputResult as it only has PanicDestruct. + impl AddInputResultDrop of Drop>; + + #[external(v0)] + fn test_rc96_holes(ref self: ContractState) { + test_rc96_holes_helper(); + test_rc96_holes_helper(); + } + + #[inline(never)] + fn test_rc96_holes_helper() { + let in1 = CircuitElement::> {}; + (in1,).new_inputs().next([3, 0, 0, 0]); + } } diff --git a/crates/blockifier/resources/versioned_constants.json b/crates/blockifier/resources/versioned_constants.json index 0ec062c975..a0dd34a749 100644 --- a/crates/blockifier/resources/versioned_constants.json +++ b/crates/blockifier/resources/versioned_constants.json @@ -25,6 +25,7 @@ }, "disable_cairo0_redeclaration": true, "max_recursion_depth": 50, + "segment_arena_cells": false, "os_constants": { "block_hash_contract_address": 1, "call_contract_gas_cost": { diff --git a/crates/blockifier/resources/versioned_constants_13_0.json b/crates/blockifier/resources/versioned_constants_13_0.json index 1531f6fc13..103ea7fca0 100644 --- a/crates/blockifier/resources/versioned_constants_13_0.json +++ b/crates/blockifier/resources/versioned_constants_13_0.json @@ -5,6 +5,7 @@ }, "invoke_tx_max_n_steps": 3000000, "max_recursion_depth": 50, + "segment_arena_cells": true, "os_constants": { "nop_entry_point_offset": -1, "entry_point_type_external": 0, diff --git a/crates/blockifier/resources/versioned_constants_13_1.json b/crates/blockifier/resources/versioned_constants_13_1.json index 4e28f7b711..279612a501 100644 --- a/crates/blockifier/resources/versioned_constants_13_1.json +++ b/crates/blockifier/resources/versioned_constants_13_1.json @@ -24,6 +24,7 @@ ] }, "max_recursion_depth": 50, + "segment_arena_cells": true, "os_constants": { "nop_entry_point_offset": -1, "entry_point_type_external": 0, diff --git a/crates/blockifier/resources/versioned_constants_13_1_1.json b/crates/blockifier/resources/versioned_constants_13_1_1.json index 791dac8b9b..a80475fa16 100644 --- a/crates/blockifier/resources/versioned_constants_13_1_1.json +++ b/crates/blockifier/resources/versioned_constants_13_1_1.json @@ -24,6 +24,7 @@ ] }, "max_recursion_depth": 50, + "segment_arena_cells": true, "os_constants": { "nop_entry_point_offset": -1, "entry_point_type_external": 0, diff --git a/crates/blockifier/src/blockifier/transaction_executor.rs b/crates/blockifier/src/blockifier/transaction_executor.rs index 7e2941fc79..2d7bfa857d 100644 --- a/crates/blockifier/src/blockifier/transaction_executor.rs +++ b/crates/blockifier/src/blockifier/transaction_executor.rs @@ -1,6 +1,8 @@ #[cfg(feature = "concurrency")] use std::collections::{HashMap, HashSet}; #[cfg(feature = "concurrency")] +use std::panic::{self, catch_unwind, AssertUnwindSafe}; +#[cfg(feature = "concurrency")] use std::sync::Arc; #[cfg(feature = "concurrency")] use std::sync::Mutex; @@ -218,6 +220,8 @@ impl TransactionExecutor { &mut self, chunk: &[Transaction], ) -> Vec> { + use crate::concurrency::utils::AbortIfPanic; + let block_state = self.block_state.take().expect("The block state should be `Some`."); let worker_executor = Arc::new(WorkerExecutor::initialize( @@ -236,7 +240,24 @@ impl TransactionExecutor { for _ in 0..self.config.concurrency_config.n_workers { let worker_executor = Arc::clone(&worker_executor); s.spawn(move || { - worker_executor.run(); + // Making sure that the program will abort if a panic accured while halting the + // scheduler. + let abort_guard = AbortIfPanic; + // If a panic is not handled or the handling logic itself panics, then we abort + // the program. + if let Err(err) = catch_unwind(AssertUnwindSafe(|| { + worker_executor.run(); + })) { + // If the program panics here, the abort guard will exit the program. + // In this case, no panic message will be logged. Add the cargo flag + // --nocapture to log the panic message. + + worker_executor.scheduler.halt(); + abort_guard.release(); + panic::resume_unwind(err); + } + + abort_guard.release(); }); } }); diff --git a/crates/blockifier/src/concurrency/scheduler.rs b/crates/blockifier/src/concurrency/scheduler.rs index 172918b365..b8301d2e59 100644 --- a/crates/blockifier/src/concurrency/scheduler.rs +++ b/crates/blockifier/src/concurrency/scheduler.rs @@ -52,7 +52,7 @@ impl<'a> TransactionCommitter<'a> { assert!(*self.commit_index_guard > 0, "Commit index underflow."); *self.commit_index_guard -= 1; - self.scheduler.done_marker.store(true, Ordering::Release); + self.scheduler.halt(); } } @@ -161,6 +161,10 @@ impl Scheduler { *self.commit_index.lock().unwrap() } + pub fn halt(&self) { + self.done_marker.store(true, Ordering::Release); + } + fn lock_tx_status(&self, tx_index: TxIndex) -> MutexGuard<'_, TransactionStatus> { lock_mutex_in_array(&self.tx_statuses, tx_index) } diff --git a/crates/blockifier/src/concurrency/utils.rs b/crates/blockifier/src/concurrency/utils.rs index 4ca2b2eb17..8d029ebaa7 100644 --- a/crates/blockifier/src/concurrency/utils.rs +++ b/crates/blockifier/src/concurrency/utils.rs @@ -3,6 +3,23 @@ use std::sync::{Mutex, MutexGuard}; use crate::concurrency::TxIndex; +// This struct is used to abort the program if a panic occurred in a place where it could not be +// handled. +pub struct AbortIfPanic; + +impl Drop for AbortIfPanic { + fn drop(&mut self) { + eprintln!("detected unexpected panic; aborting"); + std::process::abort(); + } +} + +impl AbortIfPanic { + pub fn release(self) { + std::mem::forget(self); + } +} + pub fn lock_mutex_in_array(array: &[Mutex], tx_index: TxIndex) -> MutexGuard<'_, T> { array[tx_index].lock().unwrap_or_else(|error| { panic!("Cell of transaction index {} is poisoned. Data: {:?}.", tx_index, *error.get_ref()) diff --git a/crates/blockifier/src/execution/deprecated_entry_point_execution.rs b/crates/blockifier/src/execution/deprecated_entry_point_execution.rs index aa4af359f8..878c2e276b 100644 --- a/crates/blockifier/src/execution/deprecated_entry_point_execution.rs +++ b/crates/blockifier/src/execution/deprecated_entry_point_execution.rs @@ -1,3 +1,4 @@ +use cairo_vm::types::builtin_name::BuiltinName; use cairo_vm::types::layout_name::LayoutName; use cairo_vm::types::relocatable::{MaybeRelocatable, Relocatable}; use cairo_vm::vm::errors::vm_errors::VirtualMachineError; @@ -6,6 +7,7 @@ use starknet_api::core::EntryPointSelector; use starknet_api::deprecated_contract_class::EntryPointType; use starknet_api::hash::StarkHash; +use super::execution_utils::SEGMENT_ARENA_BUILTIN_SIZE; use crate::abi::abi_utils::selector_from_name; use crate::abi::constants::{CONSTRUCTOR_ENTRY_POINT_NAME, DEFAULT_ENTRY_POINT_SELECTOR}; use crate::execution::call_info::{CallExecution, CallInfo}; @@ -229,12 +231,18 @@ pub fn finalize_execution( // Take into account the VM execution resources of the current call, without inner calls. // Has to happen after marking holes in segments as accessed. - let vm_resources_without_inner_calls = runner + let mut vm_resources_without_inner_calls = runner .get_execution_resources() .map_err(VirtualMachineError::RunnerError)? .filter_unused_builtins(); - *syscall_handler.resources += &vm_resources_without_inner_calls; let versioned_constants = syscall_handler.context.versioned_constants(); + if versioned_constants.segment_arena_cells { + vm_resources_without_inner_calls + .builtin_instance_counter + .get_mut(&BuiltinName::segment_arena) + .map_or_else(|| {}, |val| *val *= SEGMENT_ARENA_BUILTIN_SIZE); + } + *syscall_handler.resources += &vm_resources_without_inner_calls; // Take into account the syscall resources of the current call. *syscall_handler.resources += &versioned_constants .get_additional_os_syscall_resources(&syscall_handler.syscall_counter)?; diff --git a/crates/blockifier/src/execution/entry_point_execution.rs b/crates/blockifier/src/execution/entry_point_execution.rs index 7d12c2b96b..e63b4085d5 100644 --- a/crates/blockifier/src/execution/entry_point_execution.rs +++ b/crates/blockifier/src/execution/entry_point_execution.rs @@ -3,26 +3,25 @@ use std::collections::HashSet; use cairo_vm::types::builtin_name::BuiltinName; use cairo_vm::types::layout_name::LayoutName; use cairo_vm::types::relocatable::{MaybeRelocatable, Relocatable}; +use cairo_vm::vm::errors::cairo_run_errors::CairoRunError; +use cairo_vm::vm::errors::memory_errors::MemoryError; use cairo_vm::vm::errors::vm_errors::VirtualMachineError; +use cairo_vm::vm::runners::builtin_runner::BuiltinRunner; use cairo_vm::vm::runners::cairo_runner::{CairoArg, CairoRunner, ExecutionResources}; -use num_traits::ToPrimitive; +use cairo_vm::vm::security::verify_secure_runner; +use num_traits::{ToPrimitive, Zero}; use starknet_api::felt; use starknet_types_core::felt::Felt; use crate::execution::call_info::{CallExecution, CallInfo, Retdata}; use crate::execution::contract_class::{ContractClassV1, EntryPointV1}; use crate::execution::entry_point::{ - CallEntryPoint, - EntryPointExecutionContext, - EntryPointExecutionResult, + CallEntryPoint, EntryPointExecutionContext, EntryPointExecutionResult, }; use crate::execution::errors::{EntryPointExecutionError, PostExecutionError, PreExecutionError}; use crate::execution::execution_utils::{ - read_execution_retdata, - write_felt, - write_maybe_relocatable, - Args, - ReadOnlySegments, + read_execution_retdata, write_felt, write_maybe_relocatable, Args, ReadOnlySegments, + SEGMENT_ARENA_BUILTIN_SIZE, }; use crate::execution::syscalls::hint_processor::SyscallHintProcessor; use crate::state::state_api::State; @@ -163,7 +162,6 @@ pub fn initialize_execution_context<'a>( BuiltinName::bitwise, BuiltinName::ec_op, BuiltinName::ecdsa, - BuiltinName::output, BuiltinName::pedersen, BuiltinName::poseidon, BuiltinName::range_check, @@ -286,17 +284,86 @@ pub fn run_entry_point( args: Args, program_segment_size: usize, ) -> EntryPointExecutionResult<()> { - let verify_secure = true; + // Note that we run `verify_secure_runner` manually after filling the holes in the rc96 segment. + let verify_secure = false; let args: Vec<&CairoArg> = args.iter().collect(); - let result = runner.run_from_entrypoint( + runner.run_from_entrypoint( entry_point.pc(), &args, verify_secure, Some(program_segment_size), hint_processor, - ); + )?; + + maybe_fill_holes(entry_point, runner)?; - Ok(result?) + verify_secure_runner(runner, false, Some(program_segment_size)) + .map_err(CairoRunError::VirtualMachine)?; + + Ok(()) +} + +/// Fills the holes after running the entry point. +/// Currently only fills the holes in the rc96 segment. +fn maybe_fill_holes( + entry_point: EntryPointV1, + runner: &mut CairoRunner, +) -> Result<(), EntryPointExecutionError> { + let Some(rc96_offset) = entry_point + .builtins + .iter() + .rev() + .position(|name| name.as_str() == BuiltinName::range_check96.to_str_with_suffix()) + else { + return Ok(()); + }; + let rc96_builtin_runner = runner + .vm + .get_builtin_runners() + .iter() + .find_map(|builtin| { + if let BuiltinRunner::RangeCheck96(rc96_builtin_runner) = builtin { + Some(rc96_builtin_runner) + } else { + None + } + }) + .expect("RangeCheck96 builtin runner not found."); + + // 'EntryPointReturnValues' is returned after the implicits and its size is 5, + // So the last implicit is at offset 5 + 1. + const IMPLICITS_OFFSET: usize = 6; + let rc_96_stop_ptr = (runner.vm.get_ap() - (IMPLICITS_OFFSET + rc96_offset)) + .map_err(|err| CairoRunError::VirtualMachine(VirtualMachineError::Math(err)))?; + + let rc96_base = rc96_builtin_runner.base(); + let rc96_segment: isize = + rc96_base.try_into().expect("Builtin segment index must fit in isize."); + + let Relocatable { segment_index: rc96_stop_segment, offset: stop_offset } = + runner.vm.get_relocatable(rc_96_stop_ptr).map_err(CairoRunError::MemoryError)?; + assert_eq!(rc96_stop_segment, rc96_segment); + + // Update `segment_used_sizes` to include the holes. + runner + .vm + .segments + .segment_used_sizes + .as_mut() + .expect("Segments used sizes should be calculated at this point")[rc96_base] = stop_offset; + + for offset in 0..stop_offset { + match runner + .vm + .insert_value(Relocatable { segment_index: rc96_segment, offset }, Felt::zero()) + { + // If the value is already set, ignore the error. + Ok(()) | Err(MemoryError::InconsistentMemory(_)) => {} + Err(err) => panic!("Unexpected error when filling holes: {err}."), + } + } + + Ok(()) } pub fn finalize_execution( @@ -325,12 +392,18 @@ pub fn finalize_execution( // Take into account the VM execution resources of the current call, without inner calls. // Has to happen after marking holes in segments as accessed. - let vm_resources_without_inner_calls = runner + let mut vm_resources_without_inner_calls = runner .get_execution_resources() .map_err(VirtualMachineError::RunnerError)? .filter_unused_builtins(); - *syscall_handler.resources += &vm_resources_without_inner_calls; let versioned_constants = syscall_handler.context.versioned_constants(); + if versioned_constants.segment_arena_cells { + vm_resources_without_inner_calls + .builtin_instance_counter + .get_mut(&BuiltinName::segment_arena) + .map_or_else(|| {}, |val| *val *= SEGMENT_ARENA_BUILTIN_SIZE); + } + *syscall_handler.resources += &vm_resources_without_inner_calls; // Take into account the syscall resources of the current call. *syscall_handler.resources += &versioned_constants .get_additional_os_syscall_resources(&syscall_handler.syscall_counter)?; diff --git a/crates/blockifier/src/execution/entry_point_test.rs b/crates/blockifier/src/execution/entry_point_test.rs index 55dfe57fe2..07abce7eb9 100644 --- a/crates/blockifier/src/execution/entry_point_test.rs +++ b/crates/blockifier/src/execution/entry_point_test.rs @@ -529,12 +529,11 @@ fn test_cairo1_entry_point_segment_arena() { ..trivial_external_entry_point_new(test_contract) }; - assert!( - entry_point_call - .execute_directly(&mut state) - .unwrap() - .resources - .builtin_instance_counter - .contains_key(&BuiltinName::segment_arena) + assert_eq!( + entry_point_call.execute_directly(&mut state).unwrap().resources.builtin_instance_counter + [&BuiltinName::segment_arena], + // Note: the number of segment_arena instances should not depend on the compiler or VM + // version. Do not manually fix this then when upgrading them - it might be a bug. + 2 ); } diff --git a/crates/blockifier/src/execution/execution_utils.rs b/crates/blockifier/src/execution/execution_utils.rs index 3dce1adeb8..a433a34574 100644 --- a/crates/blockifier/src/execution/execution_utils.rs +++ b/crates/blockifier/src/execution/execution_utils.rs @@ -41,6 +41,8 @@ use crate::transaction::objects::TransactionInfo; pub type Args = Vec; +pub const SEGMENT_ARENA_BUILTIN_SIZE: usize = 3; + /// Executes a specific call to a contract entry point and returns its output. pub fn execute_entry_point_call( call: CallEntryPoint, diff --git a/crates/blockifier/src/execution/stack_trace_test.rs b/crates/blockifier/src/execution/stack_trace_test.rs index b38753d698..6aa7523507 100644 --- a/crates/blockifier/src/execution/stack_trace_test.rs +++ b/crates/blockifier/src/execution/stack_trace_test.rs @@ -252,7 +252,7 @@ Unknown location (pc=0:{expected_pc1}) Error at pc=0:767: 1: Error in the called contract (contract address: {contract_address_felt:#064x}, class hash: \ {test_contract_hash:#064x}, selector: {invoke_call_chain_selector_felt:#064x}): -Error at pc=0:9508: +Error at pc=0:9631: Cairo traceback (most recent call last): Unknown location (pc=0:{pc_location}) @@ -272,10 +272,10 @@ Execution failed. Failure reason: {expected_error}. #[case(CairoVersion::Cairo0, "invoke_call_chain", "Couldn't compute operand op0. Unknown value for memory cell 1:23", 1_u8, 1_u8, (49_u16, 1111_u16, 1081_u16, 1166_u16))] #[case(CairoVersion::Cairo0, "fail", "An ASSERT_EQ instruction failed: 1 != 0.", 0_u8, 0_u8, (37_u16, 1093_u16, 1184_u16, 1188_u16))] #[case(CairoVersion::Cairo0, "fail", "An ASSERT_EQ instruction failed: 1 != 0.", 0_u8, 1_u8, (49_u16, 1111_u16, 1184_u16, 1188_u16))] -#[case(CairoVersion::Cairo1, "invoke_call_chain", "0x4469766973696f6e2062792030 ('Division by 0')", 1_u8, 0_u8, (9508_u16, 9508_u16, 0_u16, 0_u16))] -#[case(CairoVersion::Cairo1, "invoke_call_chain", "0x4469766973696f6e2062792030 ('Division by 0')", 1_u8, 1_u8, (9508_u16, 9577_u16, 0_u16, 0_u16))] -#[case(CairoVersion::Cairo1, "fail", "0x6661696c ('fail')", 0_u8, 0_u8, (9508_u16, 9508_u16, 0_u16, 0_u16))] -#[case(CairoVersion::Cairo1, "fail", "0x6661696c ('fail')", 0_u8, 1_u8, (9508_u16, 9577_u16, 0_u16, 0_u16))] +#[case(CairoVersion::Cairo1, "invoke_call_chain", "0x4469766973696f6e2062792030 ('Division by 0')", 1_u8, 0_u8, (9631_u16, 9631_u16, 0_u16, 0_u16))] +#[case(CairoVersion::Cairo1, "invoke_call_chain", "0x4469766973696f6e2062792030 ('Division by 0')", 1_u8, 1_u8, (9631_u16, 9700_u16, 0_u16, 0_u16))] +#[case(CairoVersion::Cairo1, "fail", "0x6661696c ('fail')", 0_u8, 0_u8, (9631_u16, 9631_u16, 0_u16, 0_u16))] +#[case(CairoVersion::Cairo1, "fail", "0x6661696c ('fail')", 0_u8, 1_u8, (9631_u16, 9700_u16, 0_u16, 0_u16))] fn test_trace_call_chain_with_syscalls( block_context: BlockContext, #[case] cairo_version: CairoVersion, diff --git a/crates/blockifier/src/test_utils.rs b/crates/blockifier/src/test_utils.rs index 0236eaaae7..6832b5601c 100644 --- a/crates/blockifier/src/test_utils.rs +++ b/crates/blockifier/src/test_utils.rs @@ -51,6 +51,8 @@ pub const TEST_ERC20_CONTRACT_CLASS_HASH: &str = "0x1010"; pub const ERC20_CONTRACT_PATH: &str = "./ERC20/ERC20_Cairo0/ERC20_without_some_syscalls/ERC20/\ erc20_contract_without_some_syscalls_compiled.json"; +// TODO(Aviv, 14/7/2024): Move from test utils module, and use it in ContractClassVersionMismatch +// error. #[derive(Clone, Hash, PartialEq, Eq, Copy, Debug)] pub enum CairoVersion { Cairo0, diff --git a/crates/blockifier/src/test_utils/struct_impls.rs b/crates/blockifier/src/test_utils/struct_impls.rs index 3c8e1f3de0..eedfcdc956 100644 --- a/crates/blockifier/src/test_utils/struct_impls.rs +++ b/crates/blockifier/src/test_utils/struct_impls.rs @@ -14,37 +14,21 @@ use crate::context::{BlockContext, ChainInfo, FeeTokenAddresses, TransactionCont use crate::execution::call_info::{CallExecution, CallInfo, Retdata}; use crate::execution::contract_class::{ContractClassV0, ContractClassV1}; use crate::execution::entry_point::{ - CallEntryPoint, - EntryPointExecutionContext, - EntryPointExecutionResult, + CallEntryPoint, EntryPointExecutionContext, EntryPointExecutionResult, }; use crate::fee::fee_utils::get_fee_by_gas_vector; use crate::state::state_api::State; use crate::test_utils::{ - get_raw_contract_class, - CHAIN_ID_NAME, - CURRENT_BLOCK_NUMBER, - CURRENT_BLOCK_TIMESTAMP, - DEFAULT_ETH_L1_DATA_GAS_PRICE, - DEFAULT_ETH_L1_GAS_PRICE, - DEFAULT_STRK_L1_DATA_GAS_PRICE, - DEFAULT_STRK_L1_GAS_PRICE, - TEST_ERC20_CONTRACT_ADDRESS, - TEST_ERC20_CONTRACT_ADDRESS2, + get_raw_contract_class, CHAIN_ID_NAME, CURRENT_BLOCK_NUMBER, CURRENT_BLOCK_TIMESTAMP, + DEFAULT_ETH_L1_DATA_GAS_PRICE, DEFAULT_ETH_L1_GAS_PRICE, DEFAULT_STRK_L1_DATA_GAS_PRICE, + DEFAULT_STRK_L1_GAS_PRICE, TEST_ERC20_CONTRACT_ADDRESS, TEST_ERC20_CONTRACT_ADDRESS2, TEST_SEQUENCER_ADDRESS, }; use crate::transaction::objects::{ - DeprecatedTransactionInfo, - FeeType, - TransactionFeeResult, - TransactionInfo, - TransactionResources, + DeprecatedTransactionInfo, FeeType, TransactionFeeResult, TransactionInfo, TransactionResources, }; use crate::versioned_constants::{ - GasCosts, - OsConstants, - VersionedConstants, - DEFAULT_CONSTANTS_JSON, + GasCosts, OsConstants, VersionedConstants, VERSIONED_CONSTANTS_LATEST_JSON, }; impl CallEntryPoint { @@ -125,11 +109,12 @@ impl TransactionResources { impl GasCosts { pub fn create_for_testing_from_subset(subset_of_os_constants: &str) -> Self { let subset_of_os_constants: Value = serde_json::from_str(subset_of_os_constants).unwrap(); - let mut os_constants: Value = serde_json::from_str::(DEFAULT_CONSTANTS_JSON) - .unwrap() - .get("os_constants") - .unwrap() - .clone(); + let mut os_constants: Value = + serde_json::from_str::(VERSIONED_CONSTANTS_LATEST_JSON) + .unwrap() + .get("os_constants") + .unwrap() + .clone(); update_json_value(&mut os_constants, subset_of_os_constants); let os_constants: OsConstants = serde_json::from_value(os_constants).unwrap(); os_constants.gas_costs diff --git a/crates/blockifier/src/transaction.rs b/crates/blockifier/src/transaction.rs index 99a227c1de..78ee679cae 100644 --- a/crates/blockifier/src/transaction.rs +++ b/crates/blockifier/src/transaction.rs @@ -1,5 +1,7 @@ pub mod account_transaction; pub mod constants; +#[cfg(test)] +pub mod error_format_test; pub mod errors; pub mod objects; #[cfg(any(feature = "testing", test))] diff --git a/crates/blockifier/src/transaction/account_transactions_test.rs b/crates/blockifier/src/transaction/account_transactions_test.rs index 85b75be2b9..5e99b92386 100644 --- a/crates/blockifier/src/transaction/account_transactions_test.rs +++ b/crates/blockifier/src/transaction/account_transactions_test.rs @@ -1,6 +1,7 @@ use std::collections::{HashMap, HashSet}; use std::sync::Arc; +use cairo_vm::types::builtin_name::BuiltinName; use cairo_vm::vm::runners::cairo_runner::ResourceTracker; use pretty_assertions::assert_eq; use rstest::rstest; @@ -112,6 +113,45 @@ fn test_circuit(block_context: BlockContext, max_resource_bounds: ResourceBounds assert_eq!(tx_execution_info.transaction_receipt.gas, GasVector::from_l1_gas(6682)); } +#[rstest] +fn test_rc96_holes(block_context: BlockContext, max_resource_bounds: ResourceBoundsMapping) { + let test_contract = FeatureContract::TestContract(CairoVersion::Cairo1); + let account = FeatureContract::AccountWithoutValidations(CairoVersion::Cairo1); + let chain_info = &block_context.chain_info; + let state = &mut test_state(chain_info, BALANCE, &[(test_contract, 1), (account, 1)]); + let test_contract_address = test_contract.get_instance_address(0); + let account_address = account.get_instance_address(0); + let mut nonce_manager = NonceManager::default(); + + // Invoke a function that changes the state and reverts. + let tx_args = invoke_tx_args! { + sender_address: account_address, + calldata: create_calldata( + test_contract_address, + "test_rc96_holes", + &[] + ), + nonce: nonce_manager.next(account_address) + }; + let tx_execution_info = run_invoke_tx( + state, + &block_context, + invoke_tx_args! { + resource_bounds: max_resource_bounds, + ..tx_args + }, + ) + .unwrap(); + + assert!(!tx_execution_info.is_reverted()); + assert_eq!( + tx_execution_info.transaction_receipt.resources.vm_resources.builtin_instance_counter + [&BuiltinName::range_check96], + 24 + ); + assert_eq!(tx_execution_info.transaction_receipt.gas, GasVector::from_l1_gas(6598)); +} + #[rstest] fn test_fee_enforcement( block_context: BlockContext, diff --git a/crates/blockifier/src/transaction/error_format_test.rs b/crates/blockifier/src/transaction/error_format_test.rs new file mode 100644 index 0000000000..97ff8346c9 --- /dev/null +++ b/crates/blockifier/src/transaction/error_format_test.rs @@ -0,0 +1,57 @@ +use starknet_api::core::{ClassHash, ContractAddress, Nonce, PatriciaKey}; +use starknet_api::hash::StarkHash; +use starknet_api::transaction::TransactionVersion; + +use crate::transaction::errors::{TransactionExecutionError, TransactionPreValidationError}; + +#[test] +fn test_contract_class_version_mismatch() { + let error = TransactionExecutionError::ContractClassVersionMismatch { + declare_version: TransactionVersion::ONE, + cairo_version: 2, + }; + assert_eq!( + error.to_string(), + "Declare transaction version 1 must have a contract class of Cairo version 2." + ); +} + +#[test] +fn test_declare_transaction_error_format() { + let error = TransactionExecutionError::DeclareTransactionError { + class_hash: ClassHash(StarkHash::THREE), + }; + assert_eq!( + error.to_string(), + "Class with hash 0x0000000000000000000000000000000000000000000000000000000000000003 is \ + already declared." + ); +} + +#[test] +fn test_invalid_version_format() { + let error = TransactionExecutionError::InvalidVersion { + version: TransactionVersion::THREE, + allowed_versions: vec![TransactionVersion::ONE, TransactionVersion::TWO], + }; + assert_eq!( + error.to_string(), + "Transaction version 0x3 is not supported. Supported versions: [0x1, 0x2]." + ); +} + +#[test] +fn test_invalid_nonce_format() { + let error = TransactionPreValidationError::InvalidNonce { + address: ContractAddress(PatriciaKey::from(20_u8)), + account_nonce: Nonce(StarkHash::THREE), + incoming_tx_nonce: Nonce(StarkHash::TWO), + }; + assert_eq!( + error.to_string(), + "Invalid transaction nonce of contract at address \ + 0x0000000000000000000000000000000000000000000000000000000000000014. Account nonce: \ + 0x0000000000000000000000000000000000000000000000000000000000000003; got: \ + 0x0000000000000000000000000000000000000000000000000000000000000002." + ); +} diff --git a/crates/blockifier/src/transaction/errors.rs b/crates/blockifier/src/transaction/errors.rs index fc7c141e9f..70b9fbe6ab 100644 --- a/crates/blockifier/src/transaction/errors.rs +++ b/crates/blockifier/src/transaction/errors.rs @@ -50,8 +50,8 @@ pub enum TransactionFeeError { #[derive(Debug, Error)] pub enum TransactionExecutionError { #[error( - "Declare transaction version {declare_version:?} must have a contract class of Cairo \ - version {cairo_version:?}." + "Declare transaction version {} must have a contract class of Cairo \ + version {cairo_version:?}.", **declare_version )] ContractClassVersionMismatch { declare_version: TransactionVersion, cairo_version: u64 }, #[error( @@ -59,7 +59,7 @@ pub enum TransactionExecutionError { String::from(gen_transaction_execution_error_trace(self)) )] ContractConstructorExecutionFailed(#[from] ConstructorEntryPointExecutionError), - #[error("Class with hash {class_hash:?} is already declared.")] + #[error("Class with hash {:#064x} is already declared.", **class_hash)] DeclareTransactionError { class_hash: ClassHash }, #[error( "Transaction execution has failed:\n{}", @@ -78,8 +78,8 @@ pub enum TransactionExecutionError { #[error("The `validate` entry point should return `VALID`. Got {actual:?}.")] InvalidValidateReturnData { actual: Retdata }, #[error( - "Transaction version {version:?} is not supported. Supported versions: \ - {allowed_versions:?}." + "Transaction version {:?} is not supported. Supported versions: \ + {:?}.", **version, allowed_versions.iter().map(|v| **v).collect::>() )] InvalidVersion { version: TransactionVersion, allowed_versions: Vec }, #[error(transparent)] @@ -114,8 +114,8 @@ pub enum TransactionExecutionError { #[derive(Debug, Error)] pub enum TransactionPreValidationError { #[error( - "Invalid transaction nonce of contract at address {address:?}. Account nonce: \ - {account_nonce:?}; got: {incoming_tx_nonce:?}." + "Invalid transaction nonce of contract at address {:#064x}. Account nonce: \ + {:#064x}; got: {:#064x}.", ***address, **account_nonce, **incoming_tx_nonce )] InvalidNonce { address: ContractAddress, account_nonce: Nonce, incoming_tx_nonce: Nonce }, #[error(transparent)] diff --git a/crates/blockifier/src/versioned_constants.rs b/crates/blockifier/src/versioned_constants.rs index 0114144755..a975ab0e98 100644 --- a/crates/blockifier/src/versioned_constants.rs +++ b/crates/blockifier/src/versioned_constants.rs @@ -8,10 +8,12 @@ use cairo_vm::vm::runners::cairo_runner::ExecutionResources; use indexmap::{IndexMap, IndexSet}; use num_rational::Ratio; use once_cell::sync::Lazy; +use paste::paste; use serde::de::Error as DeserializationError; use serde::{Deserialize, Deserializer}; use serde_json::{Map, Number, Value}; use strum::IntoEnumIterator; +use strum_macros::{EnumCount, EnumIter}; use thiserror::Error; use crate::execution::deprecated_syscalls::hint_processor::SyscallCounter; @@ -26,18 +28,56 @@ use crate::transaction::transaction_types::TransactionType; #[path = "versioned_constants_test.rs"] pub mod test; -pub(crate) const DEFAULT_CONSTANTS_JSON: &str = - include_str!("../resources/versioned_constants.json"); -static DEFAULT_CONSTANTS: Lazy = Lazy::new(|| { - serde_json::from_str(DEFAULT_CONSTANTS_JSON) - .expect("Versioned constants JSON file is malformed") -}); +/// Auto-generate getters for listed versioned constants versions. +macro_rules! define_versioned_constants { + ($(($variant:ident, $path_to_json:expr)),* $(,)?) => { + /// Enum of all the Starknet versions supporting versioned constants. + #[derive(Clone, Debug, EnumCount, EnumIter, Hash, Eq, PartialEq)] + pub enum StarknetVersion { + $($variant,)* + } + + // Static (lazy) instances of the versioned constants. + // For internal use only; for access to a static instance use the `StarknetVersion` enum. + paste! { + $( + pub(crate) const []: &str = + include_str!($path_to_json); + static []: Lazy = Lazy::new(|| { + serde_json::from_str([]) + .expect(&format!("Versioned constants {} is malformed.", $path_to_json)) + }); + )* + } + + /// API to access a static instance of the versioned constants. + impl From for &'static VersionedConstants { + fn from(version: StarknetVersion) -> Self { + match version { + $( + StarknetVersion::$variant => { + & paste! { [] } + } + )* + } + } + } + }; +} + +define_versioned_constants! { + (V0_13_0, "../resources/versioned_constants_13_0.json"), + (V0_13_1, "../resources/versioned_constants_13_1.json"), + (V0_13_1_1, "../resources/versioned_constants_13_1_1.json"), + (Latest, "../resources/versioned_constants.json"), +} pub type ResourceCost = Ratio; /// Contains constants for the Blockifier that may vary between versions. /// Additional constants in the JSON file, not used by Blockifier but included for transparency, are /// automatically ignored during deserialization. +/// Instances of this struct for specific Starknet versions can be selected by using the above enum. #[derive(Clone, Debug, Default, Deserialize)] pub struct VersionedConstants { // Limits. @@ -48,6 +88,11 @@ pub struct VersionedConstants { pub l2_resource_gas_costs: L2ResourceGasCosts, pub max_recursion_depth: usize, pub validate_max_n_steps: u32, + // BACKWARD COMPATIBILITY: If true, the segment_arena builtin instance counter will be + // multiplied by 3. This offsets a bug in the old vm where the counter counted the number of + // cells used by instances of the builtin, instead of the number of instances. + #[serde(default)] + pub segment_arena_cells: bool, // Transactions settings. #[serde(default)] @@ -68,10 +113,15 @@ pub struct VersionedConstants { } impl VersionedConstants { + /// Get the constants for the specified Starknet version. + pub fn get(version: StarknetVersion) -> &'static Self { + version.into() + } + /// Get the constants that shipped with the current version of the Blockifier. /// To use custom constants, initialize the struct from a file using `try_from`. pub fn latest_constants() -> &'static Self { - &DEFAULT_CONSTANTS + Self::get(StarknetVersion::Latest) } /// Returns the initial gas of any transaction to run with. diff --git a/crates/blockifier/src/versioned_constants_test.rs b/crates/blockifier/src/versioned_constants_test.rs index db1fa7a6f1..ff6dd2d4d2 100644 --- a/crates/blockifier/src/versioned_constants_test.rs +++ b/crates/blockifier/src/versioned_constants_test.rs @@ -1,5 +1,5 @@ use cairo_vm::types::builtin_name::BuiltinName; -use glob::glob; +use glob::{glob, Paths}; use pretty_assertions::assert_eq; use super::*; @@ -7,6 +7,11 @@ use super::*; // TODO: Test Starknet OS validation. // TODO: Add an unallowed field scenario for GasCost parsing. +/// Returns all JSON files in the resources directory (should be all versioned constants files). +fn all_jsons_in_dir() -> Paths { + glob(format!("{}/resources/*.json", env!("CARGO_MANIFEST_DIR")).as_str()).unwrap() +} + #[test] fn test_successful_gas_costs_parsing() { let json_data = r#" @@ -70,7 +75,7 @@ fn get_json_value_without_defaults() -> serde_json::Value { "max_recursion_depth": 2 }"#; // Fill the os constants with the gas cost values (do not have a default value). - let mut os_constants: Value = serde_json::from_str::(DEFAULT_CONSTANTS_JSON) + let mut os_constants: Value = serde_json::from_str::(VERSIONED_CONSTANTS_LATEST_JSON) .unwrap() .get("os_constants") .unwrap() @@ -91,7 +96,7 @@ fn get_json_value_without_defaults() -> serde_json::Value { #[test] fn test_versioned_constants_base_overrides() { // Create a versioned constants copy with a modified value for `invoke_tx_max_n_steps`. - let mut versioned_constants_base_overrides = DEFAULT_CONSTANTS.clone(); + let mut versioned_constants_base_overrides = VERSIONED_CONSTANTS_LATEST.clone(); versioned_constants_base_overrides.invoke_tx_max_n_steps += 1; let result = VersionedConstants::get_versioned_constants(VersionedConstantsOverrides { @@ -218,9 +223,13 @@ fn test_invalid_number() { #[test] fn test_old_json_parsing() { - let files = glob(format!("{}/resources/*.json", env!("CARGO_MANIFEST_DIR")).as_str()).unwrap(); - for file in files.map(Result::unwrap) { + for file in all_jsons_in_dir().map(Result::unwrap) { serde_json::from_reader::<_, VersionedConstants>(&std::fs::File::open(&file).unwrap()) .unwrap_or_else(|_| panic!("Versioned constants JSON file {file:#?} is malformed")); } } + +#[test] +fn test_all_jsons_in_enum() { + assert_eq!(StarknetVersion::iter().count(), all_jsons_in_dir().count()); +}