Skip to content

Commit cf58d53

Browse files
jayz22sisuresh
andauthored
Fix BN254 G1/G2 Point Encoding and Decoding (#1614)
### What Corrects the serialization format for BN254 G1 and G2 points to match [cap-74](https://github.com/stellar/stellar-protocol/blob/master/core/cap-0074.md), which is modeled after EVM precompile specifications ([eip-196](https://eips.ethereum.org/EIPS/eip-196#encoding) and [197](https://eips.ethereum.org/EIPS/eip-197#encoding)): - All field elements now use big-endian encoding - Extension field elements (G2 points) are serialized with the imaginary component (c1) followed by the real component (c0) - The two flag bits are unset -- point-at-infinity is represented as `(0, 0)`, serialized as a zero-byte array; and a point with negative y component does not have the y-sign flag (bit 0) set. Additional testing: - Added additional external hardcoded tests from https://www.evm.codes/precompiled - More Serialization round-trip validation including invalid inputs and edge cases **Acknowledgments** Big thanks to @Oghma for testing the preview version, discovering this bug, and reporting it to us. --------- Co-authored-by: Siddharth Suresh <[email protected]>
1 parent 0a0c2df commit cf58d53

20 files changed

+1924
-435
lines changed

soroban-env-common/env.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2367,7 +2367,7 @@
23672367
{ "name": "point2", "type": "BytesObject" }
23682368
],
23692369
"return": "BytesObject",
2370-
"docs": "Adds two BN254 G1 points; encoding is 64-byte be_bytes(X)||be_bytes(Y); infinity is all-zeroes. No subgroup check.",
2370+
"docs": "Adds two BN254 G1 points. G1 encoding: 64-byte uncompressed format: be_bytes(X)||be_bytes(Y), where X and Y are 32-byte big-endian Fp field elements. The two flag bits (0x80 and 0x40) of the first byte must be unset -- infinity is represented as 64 zero bytes. Points must be on curve with no subgroup check needed (always in subgroup)",
23712371
"min_supported_protocol": 25
23722372
},
23732373
{
@@ -2378,7 +2378,7 @@
23782378
{ "name": "scalar", "type": "U256Val" }
23792379
],
23802380
"return": "BytesObject",
2381-
"docs": "Multiplies a BN254 G1 point by a scalar (Fr); same encoding as bn254_g1_add.",
2381+
"docs": "Multiplies a BN254 G1 point by a scalar from the scalar field Fr. The point uses the same 64-byte encoding as bn254_g1_add. The scalar is a U256Val representing a 256-bit integer that is reduced modulo the Fr field order.",
23822382
"min_supported_protocol": 25
23832383
},
23842384
{
@@ -2389,7 +2389,7 @@
23892389
{ "name": "vp2", "type": "VecObject" }
23902390
],
23912391
"return": "Bool",
2392-
"docs": "Performs BN254 pairings over vectors of G1 and G2 points; returns true iff product equals 1 in Fq12.",
2392+
"docs": "Performs BN254 multi-pairing check over equal-length non-empty vectors of G1 and G2 points. Returns true iff the product of pairings e(G1[0],G2[0])*...*e(G1[n-1],G2[n-1]) equals 1 in Fq12. G1 encoding: 64 bytes as in bn254_g1_add. G2 encoding: 128-byte uncompressed format: be_bytes(X)||be_bytes(Y), where X and Y are Fp2 elements (64 bytes each). Fp2 element encoding: be_bytes(c1)||be_bytes(c0) where c0 is the real part and c1 is the imaginary part (each 32-byte big-endian Fp). The two flag bits (0x80 and 0x40) of the first byte must be unset -- G2 infinity is 128 zero bytes. G2 points must be on curve AND in the correct subgroup.",
23932393
"min_supported_protocol": 25
23942394
},
23952395
{
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
{
2+
" 0 begin": "cpu:0, mem:0, prngs:-/-, objs:-/-, vm:-/-, evt:-, store:-/-, foot:-, stk:-, auth:-/-",
3+
" 1 call bn254_g1_add(Bytes(obj#1), Bytes(obj#3))": "cpu:1958, mem:320, objs:-/2@5d0ddcc1",
4+
" 2 call bytes_new_from_slice(64)": "cpu:10470",
5+
" 3 ret bytes_new_from_slice -> Ok(Bytes(obj#5))": "cpu:11449, mem:480, objs:-/3@13092d5b",
6+
" 4 ret bn254_g1_add -> Ok(Bytes(obj#5))": "cpu:11510",
7+
" 5 call obj_cmp(Bytes(obj#5), Bytes(obj#7))": "cpu:12489, mem:640, objs:-/4@50c27c08",
8+
" 6 ret obj_cmp -> Ok(0)": "cpu:12785",
9+
" 7 call bn254_g1_add(Bytes(obj#9), Bytes(obj#11))": "cpu:14743, mem:960, objs:-/6@15b98a84",
10+
" 8 call bytes_new_from_slice(64)": "cpu:23255",
11+
" 9 ret bytes_new_from_slice -> Ok(Bytes(obj#13))": "cpu:24234, mem:1120, objs:-/7@63e55fa",
12+
" 10 ret bn254_g1_add -> Ok(Bytes(obj#13))": "cpu:24295",
13+
" 11 call obj_cmp(Bytes(obj#13), Bytes(obj#15))": "cpu:25274, mem:1280, objs:-/8@f9a595e1",
14+
" 12 ret obj_cmp -> Ok(0)": "cpu:25570",
15+
" 13 call bn254_g1_add(Bytes(obj#17), Bytes(obj#19))": "cpu:27528, mem:1600, objs:-/10@4e889bb7",
16+
" 14 call bytes_new_from_slice(64)": "cpu:32144",
17+
" 15 ret bytes_new_from_slice -> Ok(Bytes(obj#21))": "cpu:33123, mem:1760, objs:-/11@482b5198",
18+
" 16 ret bn254_g1_add -> Ok(Bytes(obj#21))": "cpu:33184",
19+
" 17 call obj_cmp(Bytes(obj#21), Bytes(obj#23))": "cpu:34163, mem:1920, objs:-/12@289f087",
20+
" 18 ret obj_cmp -> Ok(0)": "cpu:34459",
21+
" 19 call bn254_g1_add(Bytes(obj#25), Bytes(obj#27))": "cpu:36417, mem:2240, objs:-/14@752fef14",
22+
" 20 call bytes_new_from_slice(64)": "cpu:42981",
23+
" 21 ret bytes_new_from_slice -> Ok(Bytes(obj#29))": "cpu:43960, mem:2400, objs:-/15@4a3983b",
24+
" 22 ret bn254_g1_add -> Ok(Bytes(obj#29))": "cpu:44021",
25+
" 23 call obj_cmp(Bytes(obj#29), Bytes(obj#31))": "cpu:45000, mem:2560, objs:-/16@9997873d",
26+
" 24 ret obj_cmp -> Ok(0)": "cpu:45296",
27+
" 25 call bn254_g1_add(Bytes(obj#33), Bytes(obj#35))": "cpu:47254, mem:2880, objs:-/18@a8224777",
28+
" 26 call bytes_new_from_slice(64)": "cpu:53818",
29+
" 27 ret bytes_new_from_slice -> Ok(Bytes(obj#37))": "cpu:54797, mem:3040, objs:-/19@1f794372",
30+
" 28 ret bn254_g1_add -> Ok(Bytes(obj#37))": "cpu:54858",
31+
" 29 call obj_cmp(Bytes(obj#37), Bytes(obj#39))": "cpu:55837, mem:3200, objs:-/20@fe7c550f",
32+
" 30 ret obj_cmp -> Ok(0)": "cpu:56133",
33+
" 31 call bn254_g1_add(Bytes(obj#41), Bytes(obj#43))": "cpu:58091, mem:3520, objs:-/22@ad8e5b9f",
34+
" 32 call bytes_new_from_slice(64)": "cpu:66603",
35+
" 33 ret bytes_new_from_slice -> Ok(Bytes(obj#45))": "cpu:67582, mem:3680, objs:-/23@cf7abfbd",
36+
" 34 ret bn254_g1_add -> Ok(Bytes(obj#45))": "cpu:67643",
37+
" 35 call obj_cmp(Bytes(obj#45), Bytes(obj#47))": "cpu:68622, mem:3840, objs:-/24@a3b424a4",
38+
" 36 ret obj_cmp -> Ok(0)": "cpu:68918",
39+
" 37 call bn254_g1_add(Bytes(obj#49), Bytes(obj#51))": "cpu:70876, mem:4160, objs:-/26@d45e63b6",
40+
" 38 call bytes_new_from_slice(64)": "cpu:79388",
41+
" 39 ret bytes_new_from_slice -> Ok(Bytes(obj#53))": "cpu:80367, mem:4320, objs:-/27@a7dafa97",
42+
" 40 ret bn254_g1_add -> Ok(Bytes(obj#53))": "cpu:80428",
43+
" 41 call obj_cmp(Bytes(obj#53), Bytes(obj#55))": "cpu:81407, mem:4480, objs:-/28@9db3845d",
44+
" 42 ret obj_cmp -> Ok(0)": "cpu:81703",
45+
" 43 end": "cpu:81703, mem:4480, prngs:-/-, objs:-/28@9db3845d, vm:-/-, evt:-, store:-/-, foot:-, stk:-, auth:-/-"
46+
}
Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
{
2+
" 0 begin": "cpu:0, mem:0, prngs:-/-, objs:-/-, vm:-/-, evt:-, store:-/-, foot:-, stk:-, auth:-/-",
3+
" 1 call u256_val_from_be_bytes(Bytes(obj#3))": "cpu:1950, mem:288, objs:-/2@4c72e72f",
4+
" 2 call obj_from_u256_pieces(0, 0, 0, 1230482048326178242)": "cpu:2118",
5+
" 3 ret obj_from_u256_pieces -> Ok(U256(obj#5))": "cpu:2621, mem:368, objs:-/3@a2c706e9",
6+
" 4 ret u256_val_from_be_bytes -> Ok(U256(obj#5))": "cpu:2682",
7+
" 5 call bn254_g1_mul(Bytes(obj#1), U256(obj#5))": "",
8+
" 6 call bytes_new_from_slice(64)": "cpu:1158110",
9+
" 7 ret bytes_new_from_slice -> Ok(Bytes(obj#7))": "cpu:1159089, mem:528, objs:-/4@67ad0b84",
10+
" 8 ret bn254_g1_mul -> Ok(Bytes(obj#7))": "cpu:1159150",
11+
" 9 call obj_cmp(Bytes(obj#7), Bytes(obj#9))": "cpu:1160129, mem:688, objs:-/5@cce9a6bf",
12+
" 10 ret obj_cmp -> Ok(0)": "cpu:1160425",
13+
" 11 call u256_val_from_be_bytes(Bytes(obj#13))": "cpu:1162375, mem:976, objs:-/7@ec5e3fb4",
14+
" 12 call obj_from_u256_pieces(3486998266802970665, 13281191951274694749, 10917124144477883021, 4332616871279656262)": "cpu:1162543",
15+
" 13 ret obj_from_u256_pieces -> Ok(U256(obj#15))": "cpu:1163046, mem:1056, objs:-/8@99cf2b78",
16+
" 14 ret u256_val_from_be_bytes -> Ok(U256(obj#15))": "cpu:1163107",
17+
" 15 call bn254_g1_mul(Bytes(obj#11), U256(obj#15))": "",
18+
" 16 call bytes_new_from_slice(64)": "cpu:2318535",
19+
" 17 ret bytes_new_from_slice -> Ok(Bytes(obj#17))": "cpu:2319514, mem:1216, objs:-/9@6b1b1d3a",
20+
" 18 ret bn254_g1_mul -> Ok(Bytes(obj#17))": "cpu:2319575",
21+
" 19 call obj_cmp(Bytes(obj#17), Bytes(obj#19))": "cpu:2320554, mem:1376, objs:-/10@c1b0f042",
22+
" 20 ret obj_cmp -> Ok(0)": "cpu:2320850",
23+
" 21 call u256_val_from_be_bytes(Bytes(obj#23))": "cpu:2322800, mem:1664, objs:-/12@ef4370e3",
24+
" 22 call obj_from_u256_pieces(1743499133401485332, 15863968012492123182, 14681934109093717318, 11389680472494603939)": "cpu:2322968",
25+
" 23 ret obj_from_u256_pieces -> Ok(U256(obj#25))": "cpu:2323471, mem:1744, objs:-/13@8520c25c",
26+
" 24 ret u256_val_from_be_bytes -> Ok(U256(obj#25))": "cpu:2323532",
27+
" 25 call bn254_g1_mul(Bytes(obj#21), U256(obj#25))": "",
28+
" 26 call bytes_new_from_slice(64)": "cpu:3478960",
29+
" 27 ret bytes_new_from_slice -> Ok(Bytes(obj#27))": "cpu:3479939, mem:1904, objs:-/14@991e9914",
30+
" 28 ret bn254_g1_mul -> Ok(Bytes(obj#27))": "cpu:3480000",
31+
" 29 call obj_cmp(Bytes(obj#27), Bytes(obj#29))": "cpu:3480979, mem:2064, objs:-/15@3e491232",
32+
" 30 ret obj_cmp -> Ok(0)": "cpu:3481275",
33+
" 31 call u256_val_from_be_bytes(Bytes(obj#33))": "cpu:3483225, mem:2352, objs:-/17@53e3074a",
34+
" 32 call obj_from_u256_pieces(18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615)": "cpu:3483393",
35+
" 33 ret obj_from_u256_pieces -> Ok(U256(obj#35))": "cpu:3483896, mem:2432, objs:-/18@fbafac58",
36+
" 34 ret u256_val_from_be_bytes -> Ok(U256(obj#35))": "cpu:3483957",
37+
" 35 call bn254_g1_mul(Bytes(obj#31), U256(obj#35))": "",
38+
" 36 call bytes_new_from_slice(64)": "cpu:4639385",
39+
" 37 ret bytes_new_from_slice -> Ok(Bytes(obj#37))": "cpu:4640364, mem:2592, objs:-/19@57dfd6b9",
40+
" 38 ret bn254_g1_mul -> Ok(Bytes(obj#37))": "cpu:4640425",
41+
" 39 call obj_cmp(Bytes(obj#37), Bytes(obj#39))": "cpu:4641404, mem:2752, objs:-/20@ec5a1ecf",
42+
" 40 ret obj_cmp -> Ok(0)": "cpu:4641700",
43+
" 41 call u256_val_from_be_bytes(Bytes(obj#43))": "cpu:4643650, mem:3040, objs:-/22@a22fc70c",
44+
" 42 call obj_from_u256_pieces(3486998266802970665, 13281191951274694749, 2896914383306846353, 4891460686036598784)": "cpu:4643818",
45+
" 43 ret obj_from_u256_pieces -> Ok(U256(obj#45))": "cpu:4644321, mem:3120, objs:-/23@9543dddb",
46+
" 44 ret u256_val_from_be_bytes -> Ok(U256(obj#45))": "cpu:4644382",
47+
" 45 call bn254_g1_mul(Bytes(obj#41), U256(obj#45))": "",
48+
" 46 call bytes_new_from_slice(64)": "cpu:5799810",
49+
" 47 ret bytes_new_from_slice -> Ok(Bytes(obj#47))": "cpu:5800789, mem:3280, objs:-/24@e05ecddf",
50+
" 48 ret bn254_g1_mul -> Ok(Bytes(obj#47))": "cpu:5800850",
51+
" 49 call obj_cmp(Bytes(obj#47), Bytes(obj#49))": "cpu:5801829, mem:3440, objs:-/25@8710742e",
52+
" 50 ret obj_cmp -> Ok(0)": "cpu:5802125",
53+
" 51 call u256_val_from_be_bytes(Bytes(obj#53))": "cpu:5804075, mem:3728, objs:-/27@6272fc6b",
54+
" 52 call obj_from_u256_pieces(0, 1, 0, 0)": "cpu:5804243",
55+
" 53 ret obj_from_u256_pieces -> Ok(U256(obj#55))": "cpu:5804746, mem:3808, objs:-/28@7a7c306",
56+
" 54 ret u256_val_from_be_bytes -> Ok(U256(obj#55))": "cpu:5804807",
57+
" 55 call bn254_g1_mul(Bytes(obj#51), U256(obj#55))": "",
58+
" 56 call bytes_new_from_slice(64)": "cpu:6960235",
59+
" 57 ret bytes_new_from_slice -> Ok(Bytes(obj#57))": "cpu:6961214, mem:3968, objs:-/29@19207578",
60+
" 58 ret bn254_g1_mul -> Ok(Bytes(obj#57))": "cpu:6961275",
61+
" 59 call obj_cmp(Bytes(obj#57), Bytes(obj#59))": "cpu:6962254, mem:4128, objs:-/30@3392e2d2",
62+
" 60 ret obj_cmp -> Ok(0)": "cpu:6962550",
63+
" 61 call u256_val_from_be_bytes(Bytes(obj#63))": "cpu:6964500, mem:4416, objs:-/32@605f2a27",
64+
" 62 ret u256_val_from_be_bytes -> Ok(U256(9))": "cpu:6964668",
65+
" 63 call bn254_g1_mul(Bytes(obj#61), U256(9))": "",
66+
" 64 call bytes_new_from_slice(64)": "cpu:8119974",
67+
" 65 ret bytes_new_from_slice -> Ok(Bytes(obj#65))": "cpu:8120953, mem:4576, objs:-/33@bf4860fd",
68+
" 66 ret bn254_g1_mul -> Ok(Bytes(obj#65))": "cpu:8121014",
69+
" 67 call obj_cmp(Bytes(obj#65), Bytes(obj#67))": "cpu:8121993, mem:4736, objs:-/34@8ea2f16d",
70+
" 68 ret obj_cmp -> Ok(0)": "cpu:8122289",
71+
" 69 call u256_val_from_be_bytes(Bytes(obj#71))": "cpu:8124239, mem:5024, objs:-/36@fbfbda3f",
72+
" 70 ret u256_val_from_be_bytes -> Ok(U256(1))": "cpu:8124407",
73+
" 71 call bn254_g1_mul(Bytes(obj#69), U256(1))": "",
74+
" 72 call bytes_new_from_slice(64)": "cpu:9279713",
75+
" 73 ret bytes_new_from_slice -> Ok(Bytes(obj#73))": "cpu:9280692, mem:5184, objs:-/37@90d6e8ed",
76+
" 74 ret bn254_g1_mul -> Ok(Bytes(obj#73))": "cpu:9280753",
77+
" 75 call obj_cmp(Bytes(obj#73), Bytes(obj#75))": "cpu:9281732, mem:5344, objs:-/38@b1a55f6c",
78+
" 76 ret obj_cmp -> Ok(0)": "cpu:9282028",
79+
" 77 call u256_val_from_be_bytes(Bytes(obj#79))": "cpu:9283978, mem:5632, objs:-/40@9ced2d74",
80+
" 78 call obj_from_u256_pieces(18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615)": "cpu:9284146",
81+
" 79 ret obj_from_u256_pieces -> Ok(U256(obj#81))": "cpu:9284649, mem:5712, objs:-/41@b6613586",
82+
" 80 ret u256_val_from_be_bytes -> Ok(U256(obj#81))": "cpu:9284710",
83+
" 81 call bn254_g1_mul(Bytes(obj#77), U256(obj#81))": "",
84+
" 82 call bytes_new_from_slice(64)": "cpu:10440138",
85+
" 83 ret bytes_new_from_slice -> Ok(Bytes(obj#83))": "cpu:10441117, mem:5872, objs:-/42@a76a1a6c",
86+
" 84 ret bn254_g1_mul -> Ok(Bytes(obj#83))": "cpu:10441178",
87+
" 85 call obj_cmp(Bytes(obj#83), Bytes(obj#85))": "cpu:10442157, mem:6032, objs:-/43@78bf0aa7",
88+
" 86 ret obj_cmp -> Ok(0)": "cpu:10442453",
89+
" 87 call u256_val_from_be_bytes(Bytes(obj#89))": "cpu:10444403, mem:6320, objs:-/45@7870baab",
90+
" 88 call obj_from_u256_pieces(3486998266802970665, 13281191951274694749, 2896914383306846353, 4891460686036598784)": "cpu:10444571",
91+
" 89 ret obj_from_u256_pieces -> Ok(U256(obj#91))": "cpu:10445074, mem:6400, objs:-/46@e5da1acb",
92+
" 90 ret u256_val_from_be_bytes -> Ok(U256(obj#91))": "cpu:10445135",
93+
" 91 call bn254_g1_mul(Bytes(obj#87), U256(obj#91))": "",
94+
" 92 call bytes_new_from_slice(64)": "cpu:11600563",
95+
" 93 ret bytes_new_from_slice -> Ok(Bytes(obj#93))": "cpu:11601542, mem:6560, objs:-/47@f4383cb2",
96+
" 94 ret bn254_g1_mul -> Ok(Bytes(obj#93))": "cpu:11601603",
97+
" 95 call obj_cmp(Bytes(obj#93), Bytes(obj#95))": "cpu:11602582, mem:6720, objs:-/48@e7575b62",
98+
" 96 ret obj_cmp -> Ok(0)": "cpu:11602878",
99+
" 97 call u256_val_from_be_bytes(Bytes(obj#99))": "cpu:11604828, mem:7008, objs:-/50@85df89a6",
100+
" 98 call obj_from_u256_pieces(0, 1, 0, 0)": "cpu:11604996",
101+
" 99 ret obj_from_u256_pieces -> Ok(U256(obj#101))": "cpu:11605499, mem:7088, objs:-/51@ad4e2a96",
102+
" 100 ret u256_val_from_be_bytes -> Ok(U256(obj#101))": "cpu:11605560",
103+
" 101 call bn254_g1_mul(Bytes(obj#97), U256(obj#101))": "",
104+
" 102 call bytes_new_from_slice(64)": "cpu:12760988",
105+
" 103 ret bytes_new_from_slice -> Ok(Bytes(obj#103))": "cpu:12761967, mem:7248, objs:-/52@1c74f83c",
106+
" 104 ret bn254_g1_mul -> Ok(Bytes(obj#103))": "cpu:12762028",
107+
" 105 call obj_cmp(Bytes(obj#103), Bytes(obj#105))": "cpu:12763007, mem:7408, objs:-/53@cb63053c",
108+
" 106 ret obj_cmp -> Ok(0)": "cpu:12763303",
109+
" 107 call u256_val_from_be_bytes(Bytes(obj#109))": "cpu:12765253, mem:7696, objs:-/55@c6df7ed9",
110+
" 108 ret u256_val_from_be_bytes -> Ok(U256(9))": "cpu:12765421",
111+
" 109 call bn254_g1_mul(Bytes(obj#107), U256(9))": "",
112+
" 110 call bytes_new_from_slice(64)": "cpu:13920727",
113+
" 111 ret bytes_new_from_slice -> Ok(Bytes(obj#111))": "cpu:13921706, mem:7856, objs:-/56@786ec2a5",
114+
" 112 ret bn254_g1_mul -> Ok(Bytes(obj#111))": "cpu:13921767",
115+
" 113 call obj_cmp(Bytes(obj#111), Bytes(obj#113))": "cpu:13922746, mem:8016, objs:-/57@e87587ac",
116+
" 114 ret obj_cmp -> Ok(0)": "cpu:13923042",
117+
" 115 call u256_val_from_be_bytes(Bytes(obj#117))": "cpu:13924992, mem:8304, objs:-/59@7971182b",
118+
" 116 ret u256_val_from_be_bytes -> Ok(U256(1))": "cpu:13925160",
119+
" 117 call bn254_g1_mul(Bytes(obj#115), U256(1))": "",
120+
" 118 call bytes_new_from_slice(64)": "cpu:15080466",
121+
" 119 ret bytes_new_from_slice -> Ok(Bytes(obj#119))": "cpu:15081445, mem:8464, objs:-/60@50b911cd",
122+
" 120 ret bn254_g1_mul -> Ok(Bytes(obj#119))": "cpu:15081506",
123+
" 121 call obj_cmp(Bytes(obj#119), Bytes(obj#121))": "cpu:15082485, mem:8624, objs:-/61@9f2fbae8",
124+
" 122 ret obj_cmp -> Ok(0)": "cpu:15082781",
125+
" 123 call u256_val_from_be_bytes(Bytes(obj#125))": "cpu:15084731, mem:8912, objs:-/63@8f4f10b2",
126+
" 124 call obj_from_u256_pieces(18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615)": "cpu:15084899",
127+
" 125 ret obj_from_u256_pieces -> Ok(U256(obj#127))": "cpu:15085402, mem:8992, objs:-/64@b90da506",
128+
" 126 ret u256_val_from_be_bytes -> Ok(U256(obj#127))": "cpu:15085463",
129+
" 127 call bn254_g1_mul(Bytes(obj#123), U256(obj#127))": "",
130+
" 128 call bytes_new_from_slice(64)": "cpu:16240891",
131+
" 129 ret bytes_new_from_slice -> Ok(Bytes(obj#129))": "cpu:16241870, mem:9152, objs:-/65@c860fd42",
132+
" 130 ret bn254_g1_mul -> Ok(Bytes(obj#129))": "cpu:16241931",
133+
" 131 call obj_cmp(Bytes(obj#129), Bytes(obj#131))": "cpu:16242910, mem:9312, objs:-/66@e4112def",
134+
" 132 ret obj_cmp -> Ok(0)": "cpu:16243206",
135+
" 133 call u256_val_from_be_bytes(Bytes(obj#135))": "cpu:16245156, mem:9600, objs:-/68@2dce6c78",
136+
" 134 call obj_from_u256_pieces(3486998266802970665, 13281191951274694749, 2896914383306846353, 4891460686036598784)": "cpu:16245324",
137+
" 135 ret obj_from_u256_pieces -> Ok(U256(obj#137))": "cpu:16245827, mem:9680, objs:-/69@38384226",
138+
" 136 ret u256_val_from_be_bytes -> Ok(U256(obj#137))": "cpu:16245888",
139+
" 137 call bn254_g1_mul(Bytes(obj#133), U256(obj#137))": "",
140+
" 138 call bytes_new_from_slice(64)": "cpu:17401316",
141+
" 139 ret bytes_new_from_slice -> Ok(Bytes(obj#139))": "cpu:17402295, mem:9840, objs:-/70@644a7870",
142+
" 140 ret bn254_g1_mul -> Ok(Bytes(obj#139))": "cpu:17402356",
143+
" 141 call obj_cmp(Bytes(obj#139), Bytes(obj#141))": "cpu:17403335, mem:10000, objs:-/71@9f5321dd",
144+
" 142 ret obj_cmp -> Ok(0)": "cpu:17403631",
145+
" 143 call u256_val_from_be_bytes(Bytes(obj#145))": "cpu:17405581, mem:10288, objs:-/73@80b11d28",
146+
" 144 call obj_from_u256_pieces(0, 1, 0, 0)": "cpu:17405749",
147+
" 145 ret obj_from_u256_pieces -> Ok(U256(obj#147))": "cpu:17406252, mem:10368, objs:-/74@66000f2c",
148+
" 146 ret u256_val_from_be_bytes -> Ok(U256(obj#147))": "cpu:17406313",
149+
" 147 call bn254_g1_mul(Bytes(obj#143), U256(obj#147))": "",
150+
" 148 call bytes_new_from_slice(64)": "cpu:18561741",
151+
" 149 ret bytes_new_from_slice -> Ok(Bytes(obj#149))": "cpu:18562720, mem:10528, objs:-/75@46861608",
152+
" 150 ret bn254_g1_mul -> Ok(Bytes(obj#149))": "cpu:18562781",
153+
" 151 call obj_cmp(Bytes(obj#149), Bytes(obj#151))": "cpu:18563760, mem:10688, objs:-/76@5ca91abd",
154+
" 152 ret obj_cmp -> Ok(0)": "cpu:18564056",
155+
" 153 call u256_val_from_be_bytes(Bytes(obj#155))": "cpu:18566006, mem:10976, objs:-/78@be12c3d4",
156+
" 154 ret u256_val_from_be_bytes -> Ok(U256(9))": "cpu:18566174",
157+
" 155 call bn254_g1_mul(Bytes(obj#153), U256(9))": "",
158+
" 156 call bytes_new_from_slice(64)": "cpu:19721480",
159+
" 157 ret bytes_new_from_slice -> Ok(Bytes(obj#157))": "cpu:19722459, mem:11136, objs:-/79@54220e72",
160+
" 158 ret bn254_g1_mul -> Ok(Bytes(obj#157))": "cpu:19722520",
161+
" 159 call obj_cmp(Bytes(obj#157), Bytes(obj#159))": "cpu:19723499, mem:11296, objs:-/80@d98b8531",
162+
" 160 ret obj_cmp -> Ok(0)": "cpu:19723795",
163+
" 161 call u256_val_from_be_bytes(Bytes(obj#163))": "cpu:19725745, mem:11584, objs:-/82@44c7ef1c",
164+
" 162 ret u256_val_from_be_bytes -> Ok(U256(1))": "cpu:19725913",
165+
" 163 call bn254_g1_mul(Bytes(obj#161), U256(1))": "",
166+
" 164 call bytes_new_from_slice(64)": "cpu:20881219",
167+
" 165 ret bytes_new_from_slice -> Ok(Bytes(obj#165))": "cpu:20882198, mem:11744, objs:-/83@d4eba8ce",
168+
" 166 ret bn254_g1_mul -> Ok(Bytes(obj#165))": "cpu:20882259",
169+
" 167 call obj_cmp(Bytes(obj#165), Bytes(obj#167))": "cpu:20883238, mem:11904, objs:-/84@1ada49be",
170+
" 168 ret obj_cmp -> Ok(0)": "cpu:20883534",
171+
" 169 call u256_val_from_be_bytes(Bytes(obj#171))": "cpu:20885484, mem:12192, objs:-/86@9423fa24",
172+
" 170 ret u256_val_from_be_bytes -> Ok(U256(0))": "cpu:20885652",
173+
" 171 call bn254_g1_mul(Bytes(obj#169), U256(0))": "",
174+
" 172 call bytes_new_from_slice(64)": "cpu:22040958",
175+
" 173 ret bytes_new_from_slice -> Ok(Bytes(obj#173))": "cpu:22041937, mem:12352, objs:-/87@381b5ca0",
176+
" 174 ret bn254_g1_mul -> Ok(Bytes(obj#173))": "cpu:22041998",
177+
" 175 call obj_cmp(Bytes(obj#173), Bytes(obj#175))": "cpu:22042977, mem:12512, objs:-/88@91d0d2e5",
178+
" 176 ret obj_cmp -> Ok(0)": "cpu:22043273",
179+
" 177 end": "cpu:22043273, mem:12512, prngs:-/-, objs:-/88@91d0d2e5, vm:-/-, evt:-, store:-/-, foot:-, stk:-, auth:-/-"
180+
}

0 commit comments

Comments
 (0)