@feelyourprotocol/evm 8141.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (565) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +690 -0
  3. package/dist/cjs/binaryTreeAccessWitness.d.ts +61 -0
  4. package/dist/cjs/binaryTreeAccessWitness.d.ts.map +1 -0
  5. package/dist/cjs/binaryTreeAccessWitness.js +314 -0
  6. package/dist/cjs/binaryTreeAccessWitness.js.map +1 -0
  7. package/dist/cjs/chunkCache.d.ts +13 -0
  8. package/dist/cjs/chunkCache.d.ts.map +1 -0
  9. package/dist/cjs/chunkCache.js +30 -0
  10. package/dist/cjs/chunkCache.js.map +1 -0
  11. package/dist/cjs/constructors.d.ts +11 -0
  12. package/dist/cjs/constructors.d.ts.map +1 -0
  13. package/dist/cjs/constructors.js +30 -0
  14. package/dist/cjs/constructors.js.map +1 -0
  15. package/dist/cjs/eip7708.d.ts +24 -0
  16. package/dist/cjs/eip7708.d.ts.map +1 -0
  17. package/dist/cjs/eip7708.js +37 -0
  18. package/dist/cjs/eip7708.js.map +1 -0
  19. package/dist/cjs/eof/constants.d.ts +22 -0
  20. package/dist/cjs/eof/constants.d.ts.map +1 -0
  21. package/dist/cjs/eof/constants.js +31 -0
  22. package/dist/cjs/eof/constants.js.map +1 -0
  23. package/dist/cjs/eof/container.d.ts +87 -0
  24. package/dist/cjs/eof/container.d.ts.map +1 -0
  25. package/dist/cjs/eof/container.js +380 -0
  26. package/dist/cjs/eof/container.js.map +1 -0
  27. package/dist/cjs/eof/errors.d.ts +66 -0
  28. package/dist/cjs/eof/errors.d.ts.map +1 -0
  29. package/dist/cjs/eof/errors.js +200 -0
  30. package/dist/cjs/eof/errors.js.map +1 -0
  31. package/dist/cjs/eof/setup.d.ts +9 -0
  32. package/dist/cjs/eof/setup.d.ts.map +1 -0
  33. package/dist/cjs/eof/setup.js +26 -0
  34. package/dist/cjs/eof/setup.js.map +1 -0
  35. package/dist/cjs/eof/stackDelta.d.ts +10 -0
  36. package/dist/cjs/eof/stackDelta.d.ts.map +1 -0
  37. package/dist/cjs/eof/stackDelta.js +164 -0
  38. package/dist/cjs/eof/stackDelta.js.map +1 -0
  39. package/dist/cjs/eof/util.d.ts +8 -0
  40. package/dist/cjs/eof/util.d.ts.map +1 -0
  41. package/dist/cjs/eof/util.js +18 -0
  42. package/dist/cjs/eof/util.js.map +1 -0
  43. package/dist/cjs/eof/verify.d.ts +38 -0
  44. package/dist/cjs/eof/verify.d.ts.map +1 -0
  45. package/dist/cjs/eof/verify.js +436 -0
  46. package/dist/cjs/eof/verify.js.map +1 -0
  47. package/dist/cjs/errors.d.ts +40 -0
  48. package/dist/cjs/errors.d.ts.map +1 -0
  49. package/dist/cjs/errors.js +43 -0
  50. package/dist/cjs/errors.js.map +1 -0
  51. package/dist/cjs/evm.d.ts +181 -0
  52. package/dist/cjs/evm.d.ts.map +1 -0
  53. package/dist/cjs/evm.js +1142 -0
  54. package/dist/cjs/evm.js.map +1 -0
  55. package/dist/cjs/frameContext.d.ts +50 -0
  56. package/dist/cjs/frameContext.d.ts.map +1 -0
  57. package/dist/cjs/frameContext.js +17 -0
  58. package/dist/cjs/frameContext.js.map +1 -0
  59. package/dist/cjs/index.d.ts +18 -0
  60. package/dist/cjs/index.d.ts.map +1 -0
  61. package/dist/cjs/index.js +43 -0
  62. package/dist/cjs/index.js.map +1 -0
  63. package/dist/cjs/interpreter.d.ts +361 -0
  64. package/dist/cjs/interpreter.d.ts.map +1 -0
  65. package/dist/cjs/interpreter.js +1057 -0
  66. package/dist/cjs/interpreter.js.map +1 -0
  67. package/dist/cjs/journal.d.ts +69 -0
  68. package/dist/cjs/journal.d.ts.map +1 -0
  69. package/dist/cjs/journal.js +247 -0
  70. package/dist/cjs/journal.js.map +1 -0
  71. package/dist/cjs/logger.d.ts +38 -0
  72. package/dist/cjs/logger.d.ts.map +1 -0
  73. package/dist/cjs/logger.js +126 -0
  74. package/dist/cjs/logger.js.map +1 -0
  75. package/dist/cjs/memory.d.ts +29 -0
  76. package/dist/cjs/memory.d.ts.map +1 -0
  77. package/dist/cjs/memory.js +75 -0
  78. package/dist/cjs/memory.js.map +1 -0
  79. package/dist/cjs/message.d.ts +70 -0
  80. package/dist/cjs/message.d.ts.map +1 -0
  81. package/dist/cjs/message.js +51 -0
  82. package/dist/cjs/message.js.map +1 -0
  83. package/dist/cjs/opcodes/EIP1283.d.ts +13 -0
  84. package/dist/cjs/opcodes/EIP1283.d.ts.map +1 -0
  85. package/dist/cjs/opcodes/EIP1283.js +58 -0
  86. package/dist/cjs/opcodes/EIP1283.js.map +1 -0
  87. package/dist/cjs/opcodes/EIP2200.d.ts +13 -0
  88. package/dist/cjs/opcodes/EIP2200.d.ts.map +1 -0
  89. package/dist/cjs/opcodes/EIP2200.js +64 -0
  90. package/dist/cjs/opcodes/EIP2200.js.map +1 -0
  91. package/dist/cjs/opcodes/EIP2929.d.ts +68 -0
  92. package/dist/cjs/opcodes/EIP2929.d.ts.map +1 -0
  93. package/dist/cjs/opcodes/EIP2929.js +146 -0
  94. package/dist/cjs/opcodes/EIP2929.js.map +1 -0
  95. package/dist/cjs/opcodes/codes.d.ts +45 -0
  96. package/dist/cjs/opcodes/codes.d.ts.map +1 -0
  97. package/dist/cjs/opcodes/codes.js +453 -0
  98. package/dist/cjs/opcodes/codes.js.map +1 -0
  99. package/dist/cjs/opcodes/functions.d.ts +11 -0
  100. package/dist/cjs/opcodes/functions.d.ts.map +1 -0
  101. package/dist/cjs/opcodes/functions.js +1778 -0
  102. package/dist/cjs/opcodes/functions.js.map +1 -0
  103. package/dist/cjs/opcodes/gas.d.ts +15 -0
  104. package/dist/cjs/opcodes/gas.d.ts.map +1 -0
  105. package/dist/cjs/opcodes/gas.js +1016 -0
  106. package/dist/cjs/opcodes/gas.js.map +1 -0
  107. package/dist/cjs/opcodes/index.d.ts +4 -0
  108. package/dist/cjs/opcodes/index.d.ts.map +1 -0
  109. package/dist/cjs/opcodes/index.js +20 -0
  110. package/dist/cjs/opcodes/index.js.map +1 -0
  111. package/dist/cjs/opcodes/util.d.ts +86 -0
  112. package/dist/cjs/opcodes/util.d.ts.map +1 -0
  113. package/dist/cjs/opcodes/util.js +281 -0
  114. package/dist/cjs/opcodes/util.js.map +1 -0
  115. package/dist/cjs/package.json +3 -0
  116. package/dist/cjs/params.d.ts +3 -0
  117. package/dist/cjs/params.d.ts.map +1 -0
  118. package/dist/cjs/params.js +424 -0
  119. package/dist/cjs/params.js.map +1 -0
  120. package/dist/cjs/precompiles/01-ecrecover.d.ts +4 -0
  121. package/dist/cjs/precompiles/01-ecrecover.d.ts.map +1 -0
  122. package/dist/cjs/precompiles/01-ecrecover.js +58 -0
  123. package/dist/cjs/precompiles/01-ecrecover.js.map +1 -0
  124. package/dist/cjs/precompiles/02-sha256.d.ts +4 -0
  125. package/dist/cjs/precompiles/02-sha256.d.ts.map +1 -0
  126. package/dist/cjs/precompiles/02-sha256.js +27 -0
  127. package/dist/cjs/precompiles/02-sha256.js.map +1 -0
  128. package/dist/cjs/precompiles/03-ripemd160.d.ts +4 -0
  129. package/dist/cjs/precompiles/03-ripemd160.d.ts.map +1 -0
  130. package/dist/cjs/precompiles/03-ripemd160.js +26 -0
  131. package/dist/cjs/precompiles/03-ripemd160.js.map +1 -0
  132. package/dist/cjs/precompiles/04-identity.d.ts +4 -0
  133. package/dist/cjs/precompiles/04-identity.d.ts.map +1 -0
  134. package/dist/cjs/precompiles/04-identity.js +24 -0
  135. package/dist/cjs/precompiles/04-identity.js.map +1 -0
  136. package/dist/cjs/precompiles/05-modexp.d.ts +5 -0
  137. package/dist/cjs/precompiles/05-modexp.d.ts.map +1 -0
  138. package/dist/cjs/precompiles/05-modexp.js +185 -0
  139. package/dist/cjs/precompiles/05-modexp.js.map +1 -0
  140. package/dist/cjs/precompiles/06-bn254-add.d.ts +4 -0
  141. package/dist/cjs/precompiles/06-bn254-add.d.ts.map +1 -0
  142. package/dist/cjs/precompiles/06-bn254-add.js +42 -0
  143. package/dist/cjs/precompiles/06-bn254-add.js.map +1 -0
  144. package/dist/cjs/precompiles/07-bn254-mul.d.ts +4 -0
  145. package/dist/cjs/precompiles/07-bn254-mul.d.ts.map +1 -0
  146. package/dist/cjs/precompiles/07-bn254-mul.js +43 -0
  147. package/dist/cjs/precompiles/07-bn254-mul.js.map +1 -0
  148. package/dist/cjs/precompiles/08-bn254-pairing.d.ts +4 -0
  149. package/dist/cjs/precompiles/08-bn254-pairing.d.ts.map +1 -0
  150. package/dist/cjs/precompiles/08-bn254-pairing.js +45 -0
  151. package/dist/cjs/precompiles/08-bn254-pairing.js.map +1 -0
  152. package/dist/cjs/precompiles/09-blake2f.d.ts +5 -0
  153. package/dist/cjs/precompiles/09-blake2f.d.ts.map +1 -0
  154. package/dist/cjs/precompiles/09-blake2f.js +201 -0
  155. package/dist/cjs/precompiles/09-blake2f.js.map +1 -0
  156. package/dist/cjs/precompiles/0a-kzg-point-evaluation.d.ts +5 -0
  157. package/dist/cjs/precompiles/0a-kzg-point-evaluation.d.ts.map +1 -0
  158. package/dist/cjs/precompiles/0a-kzg-point-evaluation.js +68 -0
  159. package/dist/cjs/precompiles/0a-kzg-point-evaluation.js.map +1 -0
  160. package/dist/cjs/precompiles/0b-bls12-g1add.d.ts +4 -0
  161. package/dist/cjs/precompiles/0b-bls12-g1add.d.ts.map +1 -0
  162. package/dist/cjs/precompiles/0b-bls12-g1add.js +49 -0
  163. package/dist/cjs/precompiles/0b-bls12-g1add.js.map +1 -0
  164. package/dist/cjs/precompiles/0c-bls12-g1msm.d.ts +4 -0
  165. package/dist/cjs/precompiles/0c-bls12-g1msm.d.ts.map +1 -0
  166. package/dist/cjs/precompiles/0c-bls12-g1msm.js +62 -0
  167. package/dist/cjs/precompiles/0c-bls12-g1msm.js.map +1 -0
  168. package/dist/cjs/precompiles/0d-bls12-g2add.d.ts +4 -0
  169. package/dist/cjs/precompiles/0d-bls12-g2add.d.ts.map +1 -0
  170. package/dist/cjs/precompiles/0d-bls12-g2add.js +51 -0
  171. package/dist/cjs/precompiles/0d-bls12-g2add.js.map +1 -0
  172. package/dist/cjs/precompiles/0e-bls12-g2msm.d.ts +4 -0
  173. package/dist/cjs/precompiles/0e-bls12-g2msm.d.ts.map +1 -0
  174. package/dist/cjs/precompiles/0e-bls12-g2msm.js +60 -0
  175. package/dist/cjs/precompiles/0e-bls12-g2msm.js.map +1 -0
  176. package/dist/cjs/precompiles/0f-bls12-pairing.d.ts +4 -0
  177. package/dist/cjs/precompiles/0f-bls12-pairing.d.ts.map +1 -0
  178. package/dist/cjs/precompiles/0f-bls12-pairing.js +66 -0
  179. package/dist/cjs/precompiles/0f-bls12-pairing.js.map +1 -0
  180. package/dist/cjs/precompiles/10-bls12-map-fp-to-g1.d.ts +4 -0
  181. package/dist/cjs/precompiles/10-bls12-map-fp-to-g1.d.ts.map +1 -0
  182. package/dist/cjs/precompiles/10-bls12-map-fp-to-g1.js +44 -0
  183. package/dist/cjs/precompiles/10-bls12-map-fp-to-g1.js.map +1 -0
  184. package/dist/cjs/precompiles/100-p256verify.d.ts +4 -0
  185. package/dist/cjs/precompiles/100-p256verify.d.ts.map +1 -0
  186. package/dist/cjs/precompiles/100-p256verify.js +131 -0
  187. package/dist/cjs/precompiles/100-p256verify.js.map +1 -0
  188. package/dist/cjs/precompiles/11-bls12-map-fp2-to-g2.d.ts +4 -0
  189. package/dist/cjs/precompiles/11-bls12-map-fp2-to-g2.d.ts.map +1 -0
  190. package/dist/cjs/precompiles/11-bls12-map-fp2-to-g2.js +47 -0
  191. package/dist/cjs/precompiles/11-bls12-map-fp2-to-g2.js.map +1 -0
  192. package/dist/cjs/precompiles/bls12_381/constants.d.ts +10 -0
  193. package/dist/cjs/precompiles/bls12_381/constants.d.ts.map +1 -0
  194. package/dist/cjs/precompiles/bls12_381/constants.js +274 -0
  195. package/dist/cjs/precompiles/bls12_381/constants.js.map +1 -0
  196. package/dist/cjs/precompiles/bls12_381/index.d.ts +5 -0
  197. package/dist/cjs/precompiles/bls12_381/index.d.ts.map +1 -0
  198. package/dist/cjs/precompiles/bls12_381/index.js +24 -0
  199. package/dist/cjs/precompiles/bls12_381/index.js.map +1 -0
  200. package/dist/cjs/precompiles/bls12_381/mcl.d.ts +45 -0
  201. package/dist/cjs/precompiles/bls12_381/mcl.d.ts.map +1 -0
  202. package/dist/cjs/precompiles/bls12_381/mcl.js +264 -0
  203. package/dist/cjs/precompiles/bls12_381/mcl.js.map +1 -0
  204. package/dist/cjs/precompiles/bls12_381/noble.d.ts +39 -0
  205. package/dist/cjs/precompiles/bls12_381/noble.d.ts.map +1 -0
  206. package/dist/cjs/precompiles/bls12_381/noble.js +228 -0
  207. package/dist/cjs/precompiles/bls12_381/noble.js.map +1 -0
  208. package/dist/cjs/precompiles/bls12_381/util.d.ts +35 -0
  209. package/dist/cjs/precompiles/bls12_381/util.d.ts.map +1 -0
  210. package/dist/cjs/precompiles/bls12_381/util.js +68 -0
  211. package/dist/cjs/precompiles/bls12_381/util.js.map +1 -0
  212. package/dist/cjs/precompiles/bn254/index.d.ts +3 -0
  213. package/dist/cjs/precompiles/bn254/index.d.ts.map +1 -0
  214. package/dist/cjs/precompiles/bn254/index.js +8 -0
  215. package/dist/cjs/precompiles/bn254/index.js.map +1 -0
  216. package/dist/cjs/precompiles/bn254/noble.d.ts +13 -0
  217. package/dist/cjs/precompiles/bn254/noble.d.ts.map +1 -0
  218. package/dist/cjs/precompiles/bn254/noble.js +124 -0
  219. package/dist/cjs/precompiles/bn254/noble.js.map +1 -0
  220. package/dist/cjs/precompiles/bn254/rustbn.d.ts +16 -0
  221. package/dist/cjs/precompiles/bn254/rustbn.d.ts.map +1 -0
  222. package/dist/cjs/precompiles/bn254/rustbn.js +33 -0
  223. package/dist/cjs/precompiles/bn254/rustbn.js.map +1 -0
  224. package/dist/cjs/precompiles/index.d.ts +67 -0
  225. package/dist/cjs/precompiles/index.d.ts.map +1 -0
  226. package/dist/cjs/precompiles/index.js +262 -0
  227. package/dist/cjs/precompiles/index.js.map +1 -0
  228. package/dist/cjs/precompiles/types.d.ts +13 -0
  229. package/dist/cjs/precompiles/types.d.ts.map +1 -0
  230. package/dist/cjs/precompiles/types.js +3 -0
  231. package/dist/cjs/precompiles/types.js.map +1 -0
  232. package/dist/cjs/precompiles/util.d.ts +30 -0
  233. package/dist/cjs/precompiles/util.d.ts.map +1 -0
  234. package/dist/cjs/precompiles/util.js +63 -0
  235. package/dist/cjs/precompiles/util.js.map +1 -0
  236. package/dist/cjs/stack.d.ts +55 -0
  237. package/dist/cjs/stack.d.ts.map +1 -0
  238. package/dist/cjs/stack.js +143 -0
  239. package/dist/cjs/stack.js.map +1 -0
  240. package/dist/cjs/stemCache.d.ts +20 -0
  241. package/dist/cjs/stemCache.d.ts.map +1 -0
  242. package/dist/cjs/stemCache.js +37 -0
  243. package/dist/cjs/stemCache.js.map +1 -0
  244. package/dist/cjs/transientStorage.d.ts +54 -0
  245. package/dist/cjs/transientStorage.d.ts.map +1 -0
  246. package/dist/cjs/transientStorage.js +113 -0
  247. package/dist/cjs/transientStorage.js.map +1 -0
  248. package/dist/cjs/types.d.ts +465 -0
  249. package/dist/cjs/types.d.ts.map +1 -0
  250. package/dist/cjs/types.js +28 -0
  251. package/dist/cjs/types.js.map +1 -0
  252. package/dist/esm/binaryTreeAccessWitness.d.ts +61 -0
  253. package/dist/esm/binaryTreeAccessWitness.d.ts.map +1 -0
  254. package/dist/esm/binaryTreeAccessWitness.js +308 -0
  255. package/dist/esm/binaryTreeAccessWitness.js.map +1 -0
  256. package/dist/esm/chunkCache.d.ts +13 -0
  257. package/dist/esm/chunkCache.d.ts.map +1 -0
  258. package/dist/esm/chunkCache.js +26 -0
  259. package/dist/esm/chunkCache.js.map +1 -0
  260. package/dist/esm/constructors.d.ts +11 -0
  261. package/dist/esm/constructors.d.ts.map +1 -0
  262. package/dist/esm/constructors.js +27 -0
  263. package/dist/esm/constructors.js.map +1 -0
  264. package/dist/esm/eip7708.d.ts +24 -0
  265. package/dist/esm/eip7708.d.ts.map +1 -0
  266. package/dist/esm/eip7708.js +32 -0
  267. package/dist/esm/eip7708.js.map +1 -0
  268. package/dist/esm/eof/constants.d.ts +22 -0
  269. package/dist/esm/eof/constants.d.ts.map +1 -0
  270. package/dist/esm/eof/constants.js +28 -0
  271. package/dist/esm/eof/constants.js.map +1 -0
  272. package/dist/esm/eof/container.d.ts +87 -0
  273. package/dist/esm/eof/container.d.ts.map +1 -0
  274. package/dist/esm/eof/container.js +375 -0
  275. package/dist/esm/eof/container.js.map +1 -0
  276. package/dist/esm/eof/errors.d.ts +66 -0
  277. package/dist/esm/eof/errors.d.ts.map +1 -0
  278. package/dist/esm/eof/errors.js +195 -0
  279. package/dist/esm/eof/errors.js.map +1 -0
  280. package/dist/esm/eof/setup.d.ts +9 -0
  281. package/dist/esm/eof/setup.d.ts.map +1 -0
  282. package/dist/esm/eof/setup.js +23 -0
  283. package/dist/esm/eof/setup.js.map +1 -0
  284. package/dist/esm/eof/stackDelta.d.ts +10 -0
  285. package/dist/esm/eof/stackDelta.d.ts.map +1 -0
  286. package/dist/esm/eof/stackDelta.js +161 -0
  287. package/dist/esm/eof/stackDelta.js.map +1 -0
  288. package/dist/esm/eof/util.d.ts +8 -0
  289. package/dist/esm/eof/util.d.ts.map +1 -0
  290. package/dist/esm/eof/util.js +14 -0
  291. package/dist/esm/eof/util.js.map +1 -0
  292. package/dist/esm/eof/verify.d.ts +38 -0
  293. package/dist/esm/eof/verify.d.ts.map +1 -0
  294. package/dist/esm/eof/verify.js +432 -0
  295. package/dist/esm/eof/verify.js.map +1 -0
  296. package/dist/esm/errors.d.ts +40 -0
  297. package/dist/esm/errors.d.ts.map +1 -0
  298. package/dist/esm/errors.js +39 -0
  299. package/dist/esm/errors.js.map +1 -0
  300. package/dist/esm/evm.d.ts +181 -0
  301. package/dist/esm/evm.d.ts.map +1 -0
  302. package/dist/esm/evm.js +1131 -0
  303. package/dist/esm/evm.js.map +1 -0
  304. package/dist/esm/frameContext.d.ts +50 -0
  305. package/dist/esm/frameContext.d.ts.map +1 -0
  306. package/dist/esm/frameContext.js +14 -0
  307. package/dist/esm/frameContext.js.map +1 -0
  308. package/dist/esm/index.d.ts +18 -0
  309. package/dist/esm/index.d.ts.map +1 -0
  310. package/dist/esm/index.js +15 -0
  311. package/dist/esm/index.js.map +1 -0
  312. package/dist/esm/interpreter.d.ts +361 -0
  313. package/dist/esm/interpreter.d.ts.map +1 -0
  314. package/dist/esm/interpreter.js +1054 -0
  315. package/dist/esm/interpreter.js.map +1 -0
  316. package/dist/esm/journal.d.ts +69 -0
  317. package/dist/esm/journal.d.ts.map +1 -0
  318. package/dist/esm/journal.js +243 -0
  319. package/dist/esm/journal.js.map +1 -0
  320. package/dist/esm/logger.d.ts +38 -0
  321. package/dist/esm/logger.d.ts.map +1 -0
  322. package/dist/esm/logger.js +121 -0
  323. package/dist/esm/logger.js.map +1 -0
  324. package/dist/esm/memory.d.ts +29 -0
  325. package/dist/esm/memory.d.ts.map +1 -0
  326. package/dist/esm/memory.js +71 -0
  327. package/dist/esm/memory.js.map +1 -0
  328. package/dist/esm/message.d.ts +70 -0
  329. package/dist/esm/message.d.ts.map +1 -0
  330. package/dist/esm/message.js +47 -0
  331. package/dist/esm/message.js.map +1 -0
  332. package/dist/esm/opcodes/EIP1283.d.ts +13 -0
  333. package/dist/esm/opcodes/EIP1283.d.ts.map +1 -0
  334. package/dist/esm/opcodes/EIP1283.js +55 -0
  335. package/dist/esm/opcodes/EIP1283.js.map +1 -0
  336. package/dist/esm/opcodes/EIP2200.d.ts +13 -0
  337. package/dist/esm/opcodes/EIP2200.d.ts.map +1 -0
  338. package/dist/esm/opcodes/EIP2200.js +61 -0
  339. package/dist/esm/opcodes/EIP2200.js.map +1 -0
  340. package/dist/esm/opcodes/EIP2929.d.ts +68 -0
  341. package/dist/esm/opcodes/EIP2929.d.ts.map +1 -0
  342. package/dist/esm/opcodes/EIP2929.js +138 -0
  343. package/dist/esm/opcodes/EIP2929.js.map +1 -0
  344. package/dist/esm/opcodes/codes.d.ts +45 -0
  345. package/dist/esm/opcodes/codes.d.ts.map +1 -0
  346. package/dist/esm/opcodes/codes.js +448 -0
  347. package/dist/esm/opcodes/codes.js.map +1 -0
  348. package/dist/esm/opcodes/functions.d.ts +11 -0
  349. package/dist/esm/opcodes/functions.d.ts.map +1 -0
  350. package/dist/esm/opcodes/functions.js +1775 -0
  351. package/dist/esm/opcodes/functions.js.map +1 -0
  352. package/dist/esm/opcodes/gas.d.ts +15 -0
  353. package/dist/esm/opcodes/gas.d.ts.map +1 -0
  354. package/dist/esm/opcodes/gas.js +1013 -0
  355. package/dist/esm/opcodes/gas.js.map +1 -0
  356. package/dist/esm/opcodes/index.d.ts +4 -0
  357. package/dist/esm/opcodes/index.d.ts.map +1 -0
  358. package/dist/esm/opcodes/index.js +4 -0
  359. package/dist/esm/opcodes/index.js.map +1 -0
  360. package/dist/esm/opcodes/util.d.ts +86 -0
  361. package/dist/esm/opcodes/util.d.ts.map +1 -0
  362. package/dist/esm/opcodes/util.js +257 -0
  363. package/dist/esm/opcodes/util.js.map +1 -0
  364. package/dist/esm/package.json +3 -0
  365. package/dist/esm/params.d.ts +3 -0
  366. package/dist/esm/params.d.ts.map +1 -0
  367. package/dist/esm/params.js +421 -0
  368. package/dist/esm/params.js.map +1 -0
  369. package/dist/esm/precompiles/01-ecrecover.d.ts +4 -0
  370. package/dist/esm/precompiles/01-ecrecover.d.ts.map +1 -0
  371. package/dist/esm/precompiles/01-ecrecover.js +55 -0
  372. package/dist/esm/precompiles/01-ecrecover.js.map +1 -0
  373. package/dist/esm/precompiles/02-sha256.d.ts +4 -0
  374. package/dist/esm/precompiles/02-sha256.d.ts.map +1 -0
  375. package/dist/esm/precompiles/02-sha256.js +24 -0
  376. package/dist/esm/precompiles/02-sha256.js.map +1 -0
  377. package/dist/esm/precompiles/03-ripemd160.d.ts +4 -0
  378. package/dist/esm/precompiles/03-ripemd160.d.ts.map +1 -0
  379. package/dist/esm/precompiles/03-ripemd160.js +23 -0
  380. package/dist/esm/precompiles/03-ripemd160.js.map +1 -0
  381. package/dist/esm/precompiles/04-identity.d.ts +4 -0
  382. package/dist/esm/precompiles/04-identity.d.ts.map +1 -0
  383. package/dist/esm/precompiles/04-identity.js +21 -0
  384. package/dist/esm/precompiles/04-identity.js.map +1 -0
  385. package/dist/esm/precompiles/05-modexp.d.ts +5 -0
  386. package/dist/esm/precompiles/05-modexp.d.ts.map +1 -0
  387. package/dist/esm/precompiles/05-modexp.js +181 -0
  388. package/dist/esm/precompiles/05-modexp.js.map +1 -0
  389. package/dist/esm/precompiles/06-bn254-add.d.ts +4 -0
  390. package/dist/esm/precompiles/06-bn254-add.d.ts.map +1 -0
  391. package/dist/esm/precompiles/06-bn254-add.js +39 -0
  392. package/dist/esm/precompiles/06-bn254-add.js.map +1 -0
  393. package/dist/esm/precompiles/07-bn254-mul.d.ts +4 -0
  394. package/dist/esm/precompiles/07-bn254-mul.d.ts.map +1 -0
  395. package/dist/esm/precompiles/07-bn254-mul.js +40 -0
  396. package/dist/esm/precompiles/07-bn254-mul.js.map +1 -0
  397. package/dist/esm/precompiles/08-bn254-pairing.d.ts +4 -0
  398. package/dist/esm/precompiles/08-bn254-pairing.d.ts.map +1 -0
  399. package/dist/esm/precompiles/08-bn254-pairing.js +42 -0
  400. package/dist/esm/precompiles/08-bn254-pairing.js.map +1 -0
  401. package/dist/esm/precompiles/09-blake2f.d.ts +5 -0
  402. package/dist/esm/precompiles/09-blake2f.d.ts.map +1 -0
  403. package/dist/esm/precompiles/09-blake2f.js +197 -0
  404. package/dist/esm/precompiles/09-blake2f.js.map +1 -0
  405. package/dist/esm/precompiles/0a-kzg-point-evaluation.d.ts +5 -0
  406. package/dist/esm/precompiles/0a-kzg-point-evaluation.d.ts.map +1 -0
  407. package/dist/esm/precompiles/0a-kzg-point-evaluation.js +64 -0
  408. package/dist/esm/precompiles/0a-kzg-point-evaluation.js.map +1 -0
  409. package/dist/esm/precompiles/0b-bls12-g1add.d.ts +4 -0
  410. package/dist/esm/precompiles/0b-bls12-g1add.d.ts.map +1 -0
  411. package/dist/esm/precompiles/0b-bls12-g1add.js +46 -0
  412. package/dist/esm/precompiles/0b-bls12-g1add.js.map +1 -0
  413. package/dist/esm/precompiles/0c-bls12-g1msm.d.ts +4 -0
  414. package/dist/esm/precompiles/0c-bls12-g1msm.d.ts.map +1 -0
  415. package/dist/esm/precompiles/0c-bls12-g1msm.js +59 -0
  416. package/dist/esm/precompiles/0c-bls12-g1msm.js.map +1 -0
  417. package/dist/esm/precompiles/0d-bls12-g2add.d.ts +4 -0
  418. package/dist/esm/precompiles/0d-bls12-g2add.d.ts.map +1 -0
  419. package/dist/esm/precompiles/0d-bls12-g2add.js +48 -0
  420. package/dist/esm/precompiles/0d-bls12-g2add.js.map +1 -0
  421. package/dist/esm/precompiles/0e-bls12-g2msm.d.ts +4 -0
  422. package/dist/esm/precompiles/0e-bls12-g2msm.d.ts.map +1 -0
  423. package/dist/esm/precompiles/0e-bls12-g2msm.js +57 -0
  424. package/dist/esm/precompiles/0e-bls12-g2msm.js.map +1 -0
  425. package/dist/esm/precompiles/0f-bls12-pairing.d.ts +4 -0
  426. package/dist/esm/precompiles/0f-bls12-pairing.d.ts.map +1 -0
  427. package/dist/esm/precompiles/0f-bls12-pairing.js +63 -0
  428. package/dist/esm/precompiles/0f-bls12-pairing.js.map +1 -0
  429. package/dist/esm/precompiles/10-bls12-map-fp-to-g1.d.ts +4 -0
  430. package/dist/esm/precompiles/10-bls12-map-fp-to-g1.d.ts.map +1 -0
  431. package/dist/esm/precompiles/10-bls12-map-fp-to-g1.js +41 -0
  432. package/dist/esm/precompiles/10-bls12-map-fp-to-g1.js.map +1 -0
  433. package/dist/esm/precompiles/100-p256verify.d.ts +4 -0
  434. package/dist/esm/precompiles/100-p256verify.d.ts.map +1 -0
  435. package/dist/esm/precompiles/100-p256verify.js +128 -0
  436. package/dist/esm/precompiles/100-p256verify.js.map +1 -0
  437. package/dist/esm/precompiles/11-bls12-map-fp2-to-g2.d.ts +4 -0
  438. package/dist/esm/precompiles/11-bls12-map-fp2-to-g2.d.ts.map +1 -0
  439. package/dist/esm/precompiles/11-bls12-map-fp2-to-g2.js +44 -0
  440. package/dist/esm/precompiles/11-bls12-map-fp2-to-g2.js.map +1 -0
  441. package/dist/esm/precompiles/bls12_381/constants.d.ts +10 -0
  442. package/dist/esm/precompiles/bls12_381/constants.d.ts.map +1 -0
  443. package/dist/esm/precompiles/bls12_381/constants.js +271 -0
  444. package/dist/esm/precompiles/bls12_381/constants.js.map +1 -0
  445. package/dist/esm/precompiles/bls12_381/index.d.ts +5 -0
  446. package/dist/esm/precompiles/bls12_381/index.d.ts.map +1 -0
  447. package/dist/esm/precompiles/bls12_381/index.js +5 -0
  448. package/dist/esm/precompiles/bls12_381/index.js.map +1 -0
  449. package/dist/esm/precompiles/bls12_381/mcl.d.ts +45 -0
  450. package/dist/esm/precompiles/bls12_381/mcl.d.ts.map +1 -0
  451. package/dist/esm/precompiles/bls12_381/mcl.js +254 -0
  452. package/dist/esm/precompiles/bls12_381/mcl.js.map +1 -0
  453. package/dist/esm/precompiles/bls12_381/noble.d.ts +39 -0
  454. package/dist/esm/precompiles/bls12_381/noble.d.ts.map +1 -0
  455. package/dist/esm/precompiles/bls12_381/noble.js +218 -0
  456. package/dist/esm/precompiles/bls12_381/noble.js.map +1 -0
  457. package/dist/esm/precompiles/bls12_381/util.d.ts +35 -0
  458. package/dist/esm/precompiles/bls12_381/util.d.ts.map +1 -0
  459. package/dist/esm/precompiles/bls12_381/util.js +63 -0
  460. package/dist/esm/precompiles/bls12_381/util.js.map +1 -0
  461. package/dist/esm/precompiles/bn254/index.d.ts +3 -0
  462. package/dist/esm/precompiles/bn254/index.d.ts.map +1 -0
  463. package/dist/esm/precompiles/bn254/index.js +3 -0
  464. package/dist/esm/precompiles/bn254/index.js.map +1 -0
  465. package/dist/esm/precompiles/bn254/noble.d.ts +13 -0
  466. package/dist/esm/precompiles/bn254/noble.d.ts.map +1 -0
  467. package/dist/esm/precompiles/bn254/noble.js +120 -0
  468. package/dist/esm/precompiles/bn254/noble.js.map +1 -0
  469. package/dist/esm/precompiles/bn254/rustbn.d.ts +16 -0
  470. package/dist/esm/precompiles/bn254/rustbn.d.ts.map +1 -0
  471. package/dist/esm/precompiles/bn254/rustbn.js +29 -0
  472. package/dist/esm/precompiles/bn254/rustbn.js.map +1 -0
  473. package/dist/esm/precompiles/index.d.ts +67 -0
  474. package/dist/esm/precompiles/index.d.ts.map +1 -0
  475. package/dist/esm/precompiles/index.js +251 -0
  476. package/dist/esm/precompiles/index.js.map +1 -0
  477. package/dist/esm/precompiles/types.d.ts +13 -0
  478. package/dist/esm/precompiles/types.d.ts.map +1 -0
  479. package/dist/esm/precompiles/types.js +2 -0
  480. package/dist/esm/precompiles/types.js.map +1 -0
  481. package/dist/esm/precompiles/util.d.ts +30 -0
  482. package/dist/esm/precompiles/util.d.ts.map +1 -0
  483. package/dist/esm/precompiles/util.js +57 -0
  484. package/dist/esm/precompiles/util.js.map +1 -0
  485. package/dist/esm/stack.d.ts +55 -0
  486. package/dist/esm/stack.d.ts.map +1 -0
  487. package/dist/esm/stack.js +139 -0
  488. package/dist/esm/stack.js.map +1 -0
  489. package/dist/esm/stemCache.d.ts +20 -0
  490. package/dist/esm/stemCache.d.ts.map +1 -0
  491. package/dist/esm/stemCache.js +33 -0
  492. package/dist/esm/stemCache.js.map +1 -0
  493. package/dist/esm/transientStorage.d.ts +54 -0
  494. package/dist/esm/transientStorage.d.ts.map +1 -0
  495. package/dist/esm/transientStorage.js +109 -0
  496. package/dist/esm/transientStorage.js.map +1 -0
  497. package/dist/esm/types.d.ts +465 -0
  498. package/dist/esm/types.d.ts.map +1 -0
  499. package/dist/esm/types.js +23 -0
  500. package/dist/esm/types.js.map +1 -0
  501. package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
  502. package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
  503. package/package.json +98 -0
  504. package/src/binaryTreeAccessWitness.ts +447 -0
  505. package/src/chunkCache.ts +36 -0
  506. package/src/constructors.ts +35 -0
  507. package/src/eip7708.ts +47 -0
  508. package/src/eof/constants.ts +36 -0
  509. package/src/eof/container.ts +495 -0
  510. package/src/eof/errors.ts +214 -0
  511. package/src/eof/setup.ts +27 -0
  512. package/src/eof/stackDelta.ts +169 -0
  513. package/src/eof/util.ts +16 -0
  514. package/src/eof/verify.ts +531 -0
  515. package/src/errors.ts +45 -0
  516. package/src/evm.ts +1415 -0
  517. package/src/frameContext.ts +56 -0
  518. package/src/index.ts +75 -0
  519. package/src/interpreter.ts +1437 -0
  520. package/src/journal.ts +317 -0
  521. package/src/logger.ts +180 -0
  522. package/src/memory.ts +82 -0
  523. package/src/message.ts +114 -0
  524. package/src/opcodes/EIP1283.ts +77 -0
  525. package/src/opcodes/EIP2200.ts +87 -0
  526. package/src/opcodes/EIP2929.ts +173 -0
  527. package/src/opcodes/codes.ts +528 -0
  528. package/src/opcodes/functions.ts +1937 -0
  529. package/src/opcodes/gas.ts +1329 -0
  530. package/src/opcodes/index.ts +3 -0
  531. package/src/opcodes/util.ts +313 -0
  532. package/src/params.ts +423 -0
  533. package/src/precompiles/01-ecrecover.ts +77 -0
  534. package/src/precompiles/02-sha256.ts +32 -0
  535. package/src/precompiles/03-ripemd160.ts +32 -0
  536. package/src/precompiles/04-identity.ts +29 -0
  537. package/src/precompiles/05-modexp.ts +215 -0
  538. package/src/precompiles/06-bn254-add.ts +49 -0
  539. package/src/precompiles/07-bn254-mul.ts +50 -0
  540. package/src/precompiles/08-bn254-pairing.ts +54 -0
  541. package/src/precompiles/09-blake2f.ts +243 -0
  542. package/src/precompiles/0a-kzg-point-evaluation.ts +94 -0
  543. package/src/precompiles/0b-bls12-g1add.ts +63 -0
  544. package/src/precompiles/0c-bls12-g1msm.ts +87 -0
  545. package/src/precompiles/0d-bls12-g2add.ts +66 -0
  546. package/src/precompiles/0e-bls12-g2msm.ts +84 -0
  547. package/src/precompiles/0f-bls12-pairing.ts +86 -0
  548. package/src/precompiles/10-bls12-map-fp-to-g1.ts +58 -0
  549. package/src/precompiles/100-p256verify.ts +152 -0
  550. package/src/precompiles/11-bls12-map-fp2-to-g2.ts +61 -0
  551. package/src/precompiles/bls12_381/constants.ts +278 -0
  552. package/src/precompiles/bls12_381/index.ts +4 -0
  553. package/src/precompiles/bls12_381/mcl.ts +376 -0
  554. package/src/precompiles/bls12_381/noble.ts +307 -0
  555. package/src/precompiles/bls12_381/util.ts +78 -0
  556. package/src/precompiles/bn254/index.ts +2 -0
  557. package/src/precompiles/bn254/noble.ts +156 -0
  558. package/src/precompiles/bn254/rustbn.ts +35 -0
  559. package/src/precompiles/index.ts +344 -0
  560. package/src/precompiles/types.ts +15 -0
  561. package/src/precompiles/util.ts +70 -0
  562. package/src/stack.ts +166 -0
  563. package/src/stemCache.ts +45 -0
  564. package/src/transientStorage.ts +131 -0
  565. package/src/types.ts +538 -0
@@ -0,0 +1,254 @@
1
+ import { bytesToBigInt, bytesToUnprefixedHex, concatBytes, equalsBytes, setLengthLeft, unprefixedHexToBytes, } from '@feelyourprotocol/util';
2
+ import { EVMError } from "../../errors.js";
3
+ import { BLS_FIELD_MODULUS, BLS_G1_INFINITY_POINT_BYTES, BLS_G1_POINT_BYTE_LENGTH, BLS_G2_INFINITY_POINT_BYTES, BLS_G2_POINT_BYTE_LENGTH, BLS_ONE_BUFFER, BLS_ZERO_BUFFER, } from "./constants.js";
4
+ /**
5
+ * Converts an Uint8Array to a MCL G1 point. Raises errors if the point is not on the curve
6
+ * and (if activated) if the point is in the subgroup / order check.
7
+ * @param input Input Uint8Array. Should be 128 bytes
8
+ * @param mcl MCL instance
9
+ * @param verifyOrder Perform the subgroup check (defaults to true)
10
+ * @returns MCL G1 point
11
+ */
12
+ function BLS12_381_ToG1Point(input, mcl, verifyOrder = true) {
13
+ if (equalsBytes(input, BLS_G1_INFINITY_POINT_BYTES)) {
14
+ return new mcl.G1();
15
+ }
16
+ // Using deprecated bytesToUnprefixedHex for performance: mcl library expects unprefixed hex strings.
17
+ const p_x = bytesToUnprefixedHex(input.subarray(16, BLS_G1_POINT_BYTE_LENGTH / 2));
18
+ const p_y = bytesToUnprefixedHex(input.subarray(80, BLS_G1_POINT_BYTE_LENGTH));
19
+ const G1 = new mcl.G1();
20
+ const Fp_X = new mcl.Fp();
21
+ const Fp_Y = new mcl.Fp();
22
+ const One = new mcl.Fp();
23
+ Fp_X.setStr(p_x, 16);
24
+ Fp_Y.setStr(p_y, 16);
25
+ One.setStr('1', 16);
26
+ G1.setX(Fp_X);
27
+ G1.setY(Fp_Y);
28
+ G1.setZ(One);
29
+ mcl.verifyOrderG1(verifyOrder);
30
+ if (verifyOrder && G1.isValidOrder() === false) {
31
+ throw new EVMError(EVMError.errorMessages.BLS_12_381_POINT_NOT_ON_CURVE);
32
+ }
33
+ // Check if these coordinates are actually on the curve.
34
+ if (G1.isValid() === false) {
35
+ throw new EVMError(EVMError.errorMessages.BLS_12_381_POINT_NOT_ON_CURVE);
36
+ }
37
+ return G1;
38
+ }
39
+ // input: a mcl G1 point
40
+ // output: a 128-byte Uint8Array
41
+ function BLS12_381_FromG1Point(input) {
42
+ // TODO: figure out if there is a better way to decode these values.
43
+ const decodeStr = input.getStr(16); //return a string of pattern "1 <x_coord> <y_coord>"
44
+ const decoded = decodeStr.match(/"?[0-9a-f]+"?/g); // match above pattern.
45
+ if (decodeStr === '0') {
46
+ return new Uint8Array(BLS_G1_POINT_BYTE_LENGTH);
47
+ }
48
+ const xBytes = setLengthLeft(unprefixedHexToBytes(decoded[1]), 64);
49
+ const yBytes = setLengthLeft(unprefixedHexToBytes(decoded[2]), 64);
50
+ return concatBytes(xBytes, yBytes);
51
+ }
52
+ // input: two 64-byte buffers
53
+ // output: a mcl Fp2 point
54
+ function BLS12_381_ToFp2Point(fpXCoordinate, fpYCoordinate, mcl) {
55
+ // check if the coordinates are in the field
56
+ if (bytesToBigInt(fpXCoordinate) >= BLS_FIELD_MODULUS) {
57
+ throw new EVMError(EVMError.errorMessages.BLS_12_381_FP_NOT_IN_FIELD);
58
+ }
59
+ if (bytesToBigInt(fpYCoordinate) >= BLS_FIELD_MODULUS) {
60
+ throw new EVMError(EVMError.errorMessages.BLS_12_381_FP_NOT_IN_FIELD);
61
+ }
62
+ const fp_x = new mcl.Fp();
63
+ const fp_y = new mcl.Fp();
64
+ const fp2 = new mcl.Fp2();
65
+ // Using deprecated bytesToUnprefixedHex for performance: mcl library expects unprefixed hex strings.
66
+ fp_x.setStr(bytesToUnprefixedHex(fpXCoordinate.subarray(16)), 16);
67
+ fp_y.setStr(bytesToUnprefixedHex(fpYCoordinate.subarray(16)), 16);
68
+ fp2.set_a(fp_x);
69
+ fp2.set_b(fp_y);
70
+ return fp2;
71
+ }
72
+ /**
73
+ * Converts an Uint8Array to a MCL G2 point. Raises errors if the point is not on the curve
74
+ * and (if activated) if the point is in the subgroup / order check.
75
+ * @param input Input Uint8Array. Should be 256 bytes
76
+ * @param mcl MCL instance
77
+ * @param verifyOrder Perform the subgroup check (defaults to true)
78
+ * @returns MCL G2 point
79
+ */
80
+ function BLS12_381_ToG2Point(input, mcl, verifyOrder = true) {
81
+ if (equalsBytes(input, BLS_G2_INFINITY_POINT_BYTES)) {
82
+ return new mcl.G2();
83
+ }
84
+ const p_x_1 = input.subarray(0, 64);
85
+ const p_x_2 = input.subarray(64, BLS_G2_POINT_BYTE_LENGTH / 2);
86
+ const p_y_1 = input.subarray(128, 192);
87
+ const p_y_2 = input.subarray(192, BLS_G2_POINT_BYTE_LENGTH);
88
+ const Fp2X = BLS12_381_ToFp2Point(p_x_1, p_x_2, mcl);
89
+ const Fp2Y = BLS12_381_ToFp2Point(p_y_1, p_y_2, mcl);
90
+ const FpOne = new mcl.Fp();
91
+ FpOne.setStr('1', 16);
92
+ const FpZero = new mcl.Fp();
93
+ FpZero.setStr('0', 16);
94
+ const Fp2One = new mcl.Fp2();
95
+ Fp2One.set_a(FpOne);
96
+ Fp2One.set_b(FpZero);
97
+ const p = new mcl.G2();
98
+ p.setX(Fp2X);
99
+ p.setY(Fp2Y);
100
+ p.setZ(Fp2One);
101
+ mcl.verifyOrderG2(verifyOrder);
102
+ if (verifyOrder && p.isValidOrder() === false) {
103
+ throw new EVMError(EVMError.errorMessages.BLS_12_381_POINT_NOT_ON_CURVE);
104
+ }
105
+ if (p.isValid() === false) {
106
+ throw new EVMError(EVMError.errorMessages.BLS_12_381_POINT_NOT_ON_CURVE);
107
+ }
108
+ return p;
109
+ }
110
+ // input: a mcl G2 point
111
+ // output: a 256-byte Uint8Array
112
+ function BLS12_381_FromG2Point(input) {
113
+ // TODO: figure out if there is a better way to decode these values.
114
+ const decodeStr = input.getStr(16); //return a string of pattern "1 <x_coord_1> <x_coord_2> <y_coord_1> <y_coord_2>"
115
+ if (decodeStr === '0') {
116
+ return new Uint8Array(BLS_G2_POINT_BYTE_LENGTH);
117
+ }
118
+ const decoded = decodeStr.match(/"?[0-9a-f]+"?/g); // match above pattern.
119
+ const xBytes1 = setLengthLeft(unprefixedHexToBytes(decoded[1]), 64);
120
+ const xBytes2 = setLengthLeft(unprefixedHexToBytes(decoded[2]), 64);
121
+ const yBytes1 = setLengthLeft(unprefixedHexToBytes(decoded[3]), 64);
122
+ const yBytes2 = setLengthLeft(unprefixedHexToBytes(decoded[4]), 64);
123
+ return concatBytes(xBytes1, xBytes2, yBytes1, yBytes2);
124
+ }
125
+ // input: a 32-byte hex scalar Uint8Array
126
+ // output: a mcl Fr point
127
+ function BLS12_381_ToFrPoint(input, mcl) {
128
+ // Using deprecated bytesToUnprefixedHex for performance: mcl library expects unprefixed hex strings.
129
+ const mclHex = mcl.fromHexStr(bytesToUnprefixedHex(input));
130
+ const Fr = new mcl.Fr();
131
+ Fr.setBigEndianMod(mclHex);
132
+ return Fr;
133
+ }
134
+ // input: a 64-byte buffer
135
+ // output: a mcl Fp point
136
+ function BLS12_381_ToFpPoint(fpCoordinate, mcl) {
137
+ // check if point is in field
138
+ if (bytesToBigInt(fpCoordinate) >= BLS_FIELD_MODULUS) {
139
+ throw new EVMError(EVMError.errorMessages.BLS_12_381_FP_NOT_IN_FIELD);
140
+ }
141
+ const fp = new mcl.Fp();
142
+ // Using deprecated bytesToUnprefixedHex for performance: mcl library expects unprefixed hex strings.
143
+ fp.setBigEndianMod(mcl.fromHexStr(bytesToUnprefixedHex(fpCoordinate)));
144
+ return fp;
145
+ }
146
+ /**
147
+ * Implementation of the `EVMBLSInterface` using the `mcl-wasm` WASM `mcl` wrapper library,
148
+ * see https://github.com/herumi/mcl-wasm.
149
+ *
150
+ * This can be optionally used to replace the build-in Noble implementation (`NobleBLS`) with
151
+ * a more performant WASM variant. See EVM `bls` constructor option on how to use.
152
+ */
153
+ export class MCLBLS {
154
+ constructor(mcl) {
155
+ this._mcl = mcl;
156
+ }
157
+ init() {
158
+ this._mcl.setMapToMode(this._mcl.IRTF); // set the right map mode; otherwise mapToG2 will return wrong values.
159
+ this._mcl.verifyOrderG1(true); // subgroup checks for G1
160
+ this._mcl.verifyOrderG2(true); // subgroup checks for G2
161
+ }
162
+ addG1(input) {
163
+ // convert input to G1 points, add them, and convert the output to a Uint8Array.
164
+ const p1 = BLS12_381_ToG1Point(input.subarray(0, BLS_G1_POINT_BYTE_LENGTH), this._mcl, false);
165
+ const p2 = BLS12_381_ToG1Point(input.subarray(BLS_G1_POINT_BYTE_LENGTH, BLS_G1_POINT_BYTE_LENGTH * 2), this._mcl, false);
166
+ const result = this._mcl.add(p1, p2);
167
+ return BLS12_381_FromG1Point(result);
168
+ }
169
+ addG2(input) {
170
+ // convert input to G1 points, add them, and convert the output to a Uint8Array.
171
+ const p1 = BLS12_381_ToG2Point(input.subarray(0, BLS_G2_POINT_BYTE_LENGTH), this._mcl, false);
172
+ const p2 = BLS12_381_ToG2Point(input.subarray(BLS_G2_POINT_BYTE_LENGTH, BLS_G2_POINT_BYTE_LENGTH * 2), this._mcl, false);
173
+ const result = this._mcl.add(p1, p2);
174
+ return BLS12_381_FromG2Point(result);
175
+ }
176
+ mapFPtoG1(input) {
177
+ // convert input to Fp1 point
178
+ const Fp1Point = BLS12_381_ToFpPoint(input.subarray(0, 64), this._mcl);
179
+ // map it to G1
180
+ const result = Fp1Point.mapToG1();
181
+ return BLS12_381_FromG1Point(result);
182
+ }
183
+ mapFP2toG2(input) {
184
+ // convert input to Fp2 point
185
+ const Fp2Point = BLS12_381_ToFp2Point(input.subarray(0, 64), input.subarray(64, 128), this._mcl);
186
+ // map it to G2
187
+ const result = Fp2Point.mapToG2();
188
+ return BLS12_381_FromG2Point(result);
189
+ }
190
+ msmG1(input) {
191
+ const pairLength = 160;
192
+ const numPairs = input.length / pairLength;
193
+ const G1Array = [];
194
+ const FrArray = [];
195
+ for (let k = 0; k < numPairs; k++) {
196
+ const pairStart = pairLength * k;
197
+ const G1 = BLS12_381_ToG1Point(input.subarray(pairStart, pairStart + BLS_G1_POINT_BYTE_LENGTH), this._mcl);
198
+ const Fr = BLS12_381_ToFrPoint(input.subarray(pairStart + BLS_G1_POINT_BYTE_LENGTH, pairStart + pairLength), this._mcl);
199
+ G1Array.push(G1);
200
+ FrArray.push(Fr);
201
+ }
202
+ const result = this._mcl.mulVec(G1Array, FrArray);
203
+ return BLS12_381_FromG1Point(result);
204
+ }
205
+ msmG2(input) {
206
+ const pairLength = 288;
207
+ const numPairs = input.length / pairLength;
208
+ const G2Array = [];
209
+ const FrArray = [];
210
+ for (let k = 0; k < numPairs; k++) {
211
+ const pairStart = pairLength * k;
212
+ const G2 = BLS12_381_ToG2Point(input.subarray(pairStart, pairStart + BLS_G2_POINT_BYTE_LENGTH), this._mcl);
213
+ const Fr = BLS12_381_ToFrPoint(input.subarray(pairStart + BLS_G2_POINT_BYTE_LENGTH, pairStart + pairLength), this._mcl);
214
+ G2Array.push(G2);
215
+ FrArray.push(Fr);
216
+ }
217
+ const result = this._mcl.mulVec(G2Array, FrArray);
218
+ return BLS12_381_FromG2Point(result);
219
+ }
220
+ pairingCheck(input) {
221
+ const pairLength = 384;
222
+ const pairs = [];
223
+ for (let k = 0; k < input.length / pairLength; k++) {
224
+ const pairStart = pairLength * k;
225
+ const G1 = BLS12_381_ToG1Point(input.subarray(pairStart, pairStart + BLS_G1_POINT_BYTE_LENGTH), this._mcl);
226
+ const g2start = pairStart + BLS_G1_POINT_BYTE_LENGTH;
227
+ const G2 = BLS12_381_ToG2Point(input.subarray(g2start, g2start + BLS_G2_POINT_BYTE_LENGTH), this._mcl);
228
+ pairs.push([G1, G2]);
229
+ }
230
+ // run the pairing check
231
+ // reference (Nethermind): https://github.com/NethermindEth/nethermind/blob/374b036414722b9c8ad27e93d64840b8f63931b9/src/Nethermind/Nethermind.Evm/Precompiles/Bls/Mcl/PairingPrecompile.cs#L93
232
+ let GT;
233
+ for (let index = 0; index < pairs.length; index++) {
234
+ const pair = pairs[index];
235
+ const G1 = pair[0];
236
+ const G2 = pair[1];
237
+ if (index === 0) {
238
+ GT = this._mcl.millerLoop(G1, G2);
239
+ }
240
+ else {
241
+ GT = this._mcl.mul(GT, this._mcl.millerLoop(G1, G2));
242
+ }
243
+ }
244
+ GT = this._mcl.finalExp(GT);
245
+ if (GT.isOne() === true) {
246
+ return BLS_ONE_BUFFER;
247
+ }
248
+ else {
249
+ return BLS_ZERO_BUFFER;
250
+ }
251
+ }
252
+ }
253
+ export { BLS12_381_FromG1Point, BLS12_381_FromG2Point, BLS12_381_ToFp2Point, BLS12_381_ToFpPoint, BLS12_381_ToFrPoint, BLS12_381_ToG1Point, BLS12_381_ToG2Point, };
254
+ //# sourceMappingURL=mcl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcl.js","sourceRoot":"","sources":["../../../../src/precompiles/bls12_381/mcl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { Fp2 } from '@noble/curves/abstract/tower.js';
2
+ import type { AffinePoint } from '@noble/curves/abstract/weierstrass.js';
3
+ import type { EVMBLSInterface } from '../../types.ts';
4
+ declare function BLS12_381_ToFp2Point(fpXCoordinate: Uint8Array, fpYCoordinate: Uint8Array): Fp2;
5
+ /**
6
+ * Converts an Uint8Array to a Noble G1 point. Raises errors if the point is not on the curve
7
+ * and (if activated) if the point is in the subgroup / order check.
8
+ * @param input Input Uint8Array. Should be 128 bytes
9
+ * @returns Noble G1 point
10
+ */
11
+ declare function BLS12_381_ToG1Point(input: Uint8Array, verifyOrder?: boolean): import("@noble/curves/abstract/weierstrass.js").WeierstrassPoint<bigint>;
12
+ declare function BLS12_381_FromG1Point(input: AffinePoint<bigint>): Uint8Array;
13
+ /**
14
+ * Converts an Uint8Array to a Noble G2 point. Raises errors if the point is not on the curve
15
+ * and (if activated) if the point is in the subgroup / order check.
16
+ * @param input Input Uint8Array. Should be 256 bytes
17
+ * @returns Noble G2 point
18
+ */
19
+ declare function BLS12_381_ToG2Point(input: Uint8Array, verifyOrder?: boolean): import("@noble/curves/abstract/weierstrass.js").WeierstrassPoint<Fp2>;
20
+ declare function BLS12_381_FromG2Point(input: AffinePoint<Fp2>): Uint8Array;
21
+ declare function BLS12_381_ToFrPoint(input: Uint8Array): bigint;
22
+ declare function BLS12_381_ToFpPoint(fpCoordinate: Uint8Array): bigint;
23
+ /**
24
+ * Implementation of the `EVMBLSInterface` using the `ethereum-cryptography (`@noble/curves`)
25
+ * JS library, see https://github.com/ethereum/js-ethereum-cryptography.
26
+ *
27
+ * This is the EVM default implementation.
28
+ */
29
+ export declare class NobleBLS implements EVMBLSInterface {
30
+ addG1(input: Uint8Array): Uint8Array;
31
+ addG2(input: Uint8Array): Uint8Array;
32
+ mapFPtoG1(input: Uint8Array): Uint8Array;
33
+ mapFP2toG2(input: Uint8Array): Uint8Array;
34
+ msmG1(input: Uint8Array): Uint8Array;
35
+ msmG2(input: Uint8Array): Uint8Array;
36
+ pairingCheck(input: Uint8Array): Uint8Array;
37
+ }
38
+ export { BLS12_381_FromG1Point, BLS12_381_FromG2Point, BLS12_381_ToFp2Point, BLS12_381_ToFpPoint, BLS12_381_ToFrPoint, BLS12_381_ToG1Point, BLS12_381_ToG2Point, };
39
+ //# sourceMappingURL=noble.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noble.d.ts","sourceRoot":"","sources":["../../../../src/precompiles/bls12_381/noble.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iCAAiC,CAAA;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAMrD,iBAAS,oBAAoB,CAAC,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,OAajF;AAED;;;;;GAKG;AACH,iBAAS,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,UAAO,4EAqBjE;AAID,iBAAS,qBAAqB,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,UAAU,CAKrE;AAED;;;;;GAKG;AACH,iBAAS,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,UAAO,yEA0BjE;AAID,iBAAS,qBAAqB,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,UAAU,CAOlE;AAKD,iBAAS,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAMtD;AAKD,iBAAS,mBAAmB,CAAC,YAAY,EAAE,UAAU,UAOpD;AAED;;;;;GAKG;AACH,qBAAa,QAAS,YAAW,eAAe;IAC9C,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;IAapC,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;IAYpC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;IAUxC,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;IAUzC,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;IAgCpC,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;IAgCpC,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;CA6B5C;AAED,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACpB,CAAA"}
@@ -0,0 +1,218 @@
1
+ import { BIGINT_0, bigIntToBytes, bytesToBigInt, concatBytes, equalsBytes, setLengthLeft, } from '@feelyourprotocol/util';
2
+ import { bls12_381 } from '@noble/curves/bls12-381.js';
3
+ import { EVMError } from "../../errors.js";
4
+ import { BLS_FIELD_MODULUS, BLS_G1_INFINITY_POINT_BYTES, BLS_G1_POINT_BYTE_LENGTH, BLS_G2_INFINITY_POINT_BYTES, BLS_G2_POINT_BYTE_LENGTH, BLS_ONE_BUFFER, BLS_ZERO_BUFFER, } from "./constants.js";
5
+ const G1_ZERO = bls12_381.G1.Point.ZERO;
6
+ const G2_ZERO = bls12_381.G2.Point.ZERO;
7
+ function BLS12_381_ToFp2Point(fpXCoordinate, fpYCoordinate) {
8
+ // check if the coordinates are in the field
9
+ if (bytesToBigInt(fpXCoordinate) >= BLS_FIELD_MODULUS) {
10
+ throw new EVMError(EVMError.errorMessages.BLS_12_381_FP_NOT_IN_FIELD);
11
+ }
12
+ if (bytesToBigInt(fpYCoordinate) >= BLS_FIELD_MODULUS) {
13
+ throw new EVMError(EVMError.errorMessages.BLS_12_381_FP_NOT_IN_FIELD);
14
+ }
15
+ const fpBytes = concatBytes(fpXCoordinate.subarray(16), fpYCoordinate.subarray(16));
16
+ const FP = bls12_381.fields.Fp2.fromBytes(fpBytes);
17
+ return FP;
18
+ }
19
+ /**
20
+ * Converts an Uint8Array to a Noble G1 point. Raises errors if the point is not on the curve
21
+ * and (if activated) if the point is in the subgroup / order check.
22
+ * @param input Input Uint8Array. Should be 128 bytes
23
+ * @returns Noble G1 point
24
+ */
25
+ function BLS12_381_ToG1Point(input, verifyOrder = true) {
26
+ if (equalsBytes(input, BLS_G1_INFINITY_POINT_BYTES) === true) {
27
+ return G1_ZERO;
28
+ }
29
+ const x = bytesToBigInt(input.subarray(16, BLS_G1_POINT_BYTE_LENGTH / 2));
30
+ const y = bytesToBigInt(input.subarray(80, BLS_G1_POINT_BYTE_LENGTH));
31
+ const G1 = bls12_381.G1.Point.fromAffine({
32
+ x,
33
+ y,
34
+ });
35
+ try {
36
+ G1.assertValidity();
37
+ }
38
+ catch (e) {
39
+ if (verifyOrder || e.message !== 'bad point: not in prime-order subgroup')
40
+ throw new EVMError(EVMError.errorMessages.BLS_12_381_POINT_NOT_ON_CURVE);
41
+ }
42
+ return G1;
43
+ }
44
+ // input: a Noble G1 point
45
+ // output: a 128-byte Uint8Array
46
+ function BLS12_381_FromG1Point(input) {
47
+ const xBytes = setLengthLeft(bigIntToBytes(input.x), 64);
48
+ const yBytes = setLengthLeft(bigIntToBytes(input.y), 64);
49
+ return concatBytes(xBytes, yBytes);
50
+ }
51
+ /**
52
+ * Converts an Uint8Array to a Noble G2 point. Raises errors if the point is not on the curve
53
+ * and (if activated) if the point is in the subgroup / order check.
54
+ * @param input Input Uint8Array. Should be 256 bytes
55
+ * @returns Noble G2 point
56
+ */
57
+ function BLS12_381_ToG2Point(input, verifyOrder = true) {
58
+ if (equalsBytes(input, BLS_G2_INFINITY_POINT_BYTES) === true) {
59
+ return G2_ZERO;
60
+ }
61
+ const p_x_1 = input.subarray(0, 64);
62
+ const p_x_2 = input.subarray(64, BLS_G2_POINT_BYTE_LENGTH / 2);
63
+ const p_y_1 = input.subarray(128, 192);
64
+ const p_y_2 = input.subarray(192, BLS_G2_POINT_BYTE_LENGTH);
65
+ const Fp2X = BLS12_381_ToFp2Point(p_x_1, p_x_2);
66
+ const Fp2Y = BLS12_381_ToFp2Point(p_y_1, p_y_2);
67
+ const pG2 = bls12_381.G2.Point.fromAffine({
68
+ x: Fp2X,
69
+ y: Fp2Y,
70
+ });
71
+ try {
72
+ pG2.assertValidity();
73
+ }
74
+ catch (e) {
75
+ if (verifyOrder || e.message !== 'bad point: not in prime-order subgroup')
76
+ throw new EVMError(EVMError.errorMessages.BLS_12_381_POINT_NOT_ON_CURVE);
77
+ }
78
+ return pG2;
79
+ }
80
+ // input: a Noble G1 point
81
+ // output: a 128-byte Uint8Array
82
+ function BLS12_381_FromG2Point(input) {
83
+ const xBytes1 = setLengthLeft(bigIntToBytes(input.x.c0), 64);
84
+ const xBytes2 = setLengthLeft(bigIntToBytes(input.x.c1), 64);
85
+ const yBytes1 = setLengthLeft(bigIntToBytes(input.y.c0), 64);
86
+ const yBytes2 = setLengthLeft(bigIntToBytes(input.y.c1), 64);
87
+ return concatBytes(xBytes1, xBytes2, yBytes1, yBytes2);
88
+ }
89
+ // input: a 32-byte hex scalar Uint8Array
90
+ // output: a Noble Fr point
91
+ function BLS12_381_ToFrPoint(input) {
92
+ const Fr = bls12_381.fields.Fr.fromBytes(input);
93
+ if (Fr >= bls12_381.fields.Fr.ORDER) {
94
+ return bls12_381.fields.Fr.create(Fr % bls12_381.fields.Fr.ORDER);
95
+ }
96
+ return bls12_381.fields.Fr.create(Fr);
97
+ }
98
+ // input: a 64-byte buffer
99
+ // output: a Noble Fp point
100
+ function BLS12_381_ToFpPoint(fpCoordinate) {
101
+ // check if point is in field
102
+ if (bytesToBigInt(fpCoordinate) >= BLS_FIELD_MODULUS) {
103
+ throw new EVMError(EVMError.errorMessages.BLS_12_381_FP_NOT_IN_FIELD);
104
+ }
105
+ const FP = bls12_381.fields.Fp.fromBytes(fpCoordinate.slice(16));
106
+ return FP;
107
+ }
108
+ /**
109
+ * Implementation of the `EVMBLSInterface` using the `ethereum-cryptography (`@noble/curves`)
110
+ * JS library, see https://github.com/ethereum/js-ethereum-cryptography.
111
+ *
112
+ * This is the EVM default implementation.
113
+ */
114
+ export class NobleBLS {
115
+ addG1(input) {
116
+ const p1 = BLS12_381_ToG1Point(input.subarray(0, BLS_G1_POINT_BYTE_LENGTH), false);
117
+ const p2 = BLS12_381_ToG1Point(input.subarray(BLS_G1_POINT_BYTE_LENGTH, BLS_G1_POINT_BYTE_LENGTH * 2), false);
118
+ const p = p1.add(p2);
119
+ const result = BLS12_381_FromG1Point(p.toAffine());
120
+ return result;
121
+ }
122
+ addG2(input) {
123
+ const p1 = BLS12_381_ToG2Point(input.subarray(0, BLS_G2_POINT_BYTE_LENGTH), false);
124
+ const p2 = BLS12_381_ToG2Point(input.subarray(BLS_G2_POINT_BYTE_LENGTH, BLS_G2_POINT_BYTE_LENGTH * 2), false);
125
+ const p = p1.add(p2);
126
+ const result = BLS12_381_FromG2Point(p.toAffine());
127
+ return result;
128
+ }
129
+ mapFPtoG1(input) {
130
+ // convert input to Fp1 point
131
+ const FP = BLS12_381_ToFpPoint(input.subarray(0, 64));
132
+ // @ts-expect-error - @noble/curves v2 type resolution mismatch
133
+ const result = bls12_381.G1.mapToCurve(FP).toAffine();
134
+ const resultBytes = BLS12_381_FromG1Point(result);
135
+ return resultBytes;
136
+ }
137
+ mapFP2toG2(input) {
138
+ // convert input to Fp2 point
139
+ const Fp2Point = BLS12_381_ToFp2Point(input.subarray(0, 64), input.subarray(64, 128));
140
+ // @ts-expect-error - @noble/curves v2 type resolution mismatch
141
+ const result = bls12_381.G2.mapToCurve([Fp2Point.c0, Fp2Point.c1]).toAffine();
142
+ const resultBytes = BLS12_381_FromG2Point(result);
143
+ return resultBytes;
144
+ }
145
+ msmG1(input) {
146
+ // Note: This implementation is using the naive "algorithm" of just doing
147
+ // p1G1*v1F1 + p2G1*v1F1 + ... while the EIP is suggesting to use an optimized
148
+ // algorithm (Pippenger's algorithm, see https://eips.ethereum.org/EIPS/eip-2537#g1g2-msm).
149
+ //
150
+ // While this functionally works the approach is not "gas-cost-competitive" and an
151
+ // optimization should be considered in the future.
152
+ const pairLength = 160;
153
+ const numPairs = input.length / pairLength;
154
+ let pRes = G1_ZERO;
155
+ for (let k = 0; k < numPairs; k++) {
156
+ const pairStart = pairLength * k;
157
+ const G1 = BLS12_381_ToG1Point(input.subarray(pairStart, pairStart + BLS_G1_POINT_BYTE_LENGTH));
158
+ const Fr = BLS12_381_ToFrPoint(input.subarray(pairStart + BLS_G1_POINT_BYTE_LENGTH, pairStart + pairLength));
159
+ let pMul;
160
+ if (Fr === BIGINT_0) {
161
+ pMul = G1_ZERO;
162
+ }
163
+ else {
164
+ pMul = G1.multiplyUnsafe(Fr);
165
+ }
166
+ pRes = pRes.add(pMul);
167
+ }
168
+ return BLS12_381_FromG1Point(pRes.toAffine());
169
+ }
170
+ msmG2(input) {
171
+ // Note: This implementation is using the naive "algorithm" of just doing
172
+ // p1G1*v1F1 + p2G1*v1F1 + ... while the EIP is suggesting to use an optimized
173
+ // algorithm (Pippenger's algorithm, see https://eips.ethereum.org/EIPS/eip-2537#g1g2-msm).
174
+ //
175
+ // While this functionally works the approach is not "gas-cost-competitive" and an
176
+ // optimization should be considered in the future.
177
+ const pairLength = 288;
178
+ const numPairs = input.length / pairLength;
179
+ let pRes = G2_ZERO;
180
+ for (let k = 0; k < numPairs; k++) {
181
+ const pairStart = pairLength * k;
182
+ const G2 = BLS12_381_ToG2Point(input.subarray(pairStart, pairStart + BLS_G2_POINT_BYTE_LENGTH));
183
+ const Fr = BLS12_381_ToFrPoint(input.subarray(pairStart + BLS_G2_POINT_BYTE_LENGTH, pairStart + pairLength));
184
+ let pMul;
185
+ if (Fr === BIGINT_0) {
186
+ pMul = G2_ZERO;
187
+ }
188
+ else {
189
+ pMul = G2.multiplyUnsafe(Fr);
190
+ }
191
+ pRes = pRes.add(pMul);
192
+ }
193
+ return BLS12_381_FromG2Point(pRes.toAffine());
194
+ }
195
+ pairingCheck(input) {
196
+ // Extract the pairs from the input
197
+ const pairLength = 384;
198
+ const pairs = [];
199
+ for (let k = 0; k < input.length / pairLength; k++) {
200
+ const pairStart = pairLength * k;
201
+ const G1 = BLS12_381_ToG1Point(input.subarray(pairStart, pairStart + BLS_G1_POINT_BYTE_LENGTH));
202
+ const g2start = pairStart + BLS_G1_POINT_BYTE_LENGTH;
203
+ const G2 = BLS12_381_ToG2Point(input.subarray(g2start, g2start + BLS_G2_POINT_BYTE_LENGTH));
204
+ pairs.push({ g1: G1, g2: G2 });
205
+ }
206
+ // Filter out infinity pairs
207
+ const filteredPairs = pairs.filter((pair) => pair.g1.equals(G1_ZERO) === false && pair.g2.equals(G2_ZERO) === false);
208
+ const FP12 = bls12_381.pairingBatch(filteredPairs, true);
209
+ if (bls12_381.fields.Fp12.eql(FP12, bls12_381.fields.Fp12.ONE)) {
210
+ return BLS_ONE_BUFFER;
211
+ }
212
+ else {
213
+ return BLS_ZERO_BUFFER;
214
+ }
215
+ }
216
+ }
217
+ export { BLS12_381_FromG1Point, BLS12_381_FromG2Point, BLS12_381_ToFp2Point, BLS12_381_ToFpPoint, BLS12_381_ToFrPoint, BLS12_381_ToG1Point, BLS12_381_ToG2Point, };
218
+ //# sourceMappingURL=noble.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noble.js","sourceRoot":"","sources":["../../../../src/precompiles/bls12_381/noble.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { PrecompileInput } from '../types.ts';
2
+ /**
3
+ * Calculates the gas used for the MSM precompiles based on the number of pairs and
4
+ * calculating in some discount in relation to the number of pairs.
5
+ *
6
+ * @param numPairs - Number of pairings provided to the precompile
7
+ * @param gasUsedPerPair - Base gas cost per pairing
8
+ * @param discountTable - Discount table (pair count -> multiplier)
9
+ * @returns Total gas to charge after applying the discount table
10
+ */
11
+ export declare const msmGasUsed: (numPairs: number, gasUsedPerPair: bigint, discountTable: [number, number][]) => bigint;
12
+ /**
13
+ * BLS-specific zero check to check that the top 16 bytes of a 64 byte field element provided
14
+ * are always zero (see EIP notes on field element encoding).
15
+ *
16
+ * Zero byte ranges are expected to be passed in the following format (and so each referencing
17
+ * 16-byte ranges):
18
+ *
19
+ * ```ts
20
+ * const zeroByteRanges = [
21
+ * [0, 16],
22
+ * [64, 80],
23
+ * [128, 144]
24
+ *
25
+ * ]
26
+ * ```
27
+ *
28
+ * @param opts - Precompile input wrapper containing the data to inspect
29
+ * @param zeroByteRanges - Ranges (as [start, end]) within which bytes must be zero
30
+ * @param pName - Human readable precompile name for logging
31
+ * @param pairStart - Optional offset into the data when iterating through pairs
32
+ * @returns `true` if every specified range contains only zero bytes
33
+ */
34
+ export declare const leading16ZeroBytesCheck: (opts: PrecompileInput, zeroByteRanges: number[][], pName: string, pairStart?: number) => boolean;
35
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/precompiles/bls12_381/util.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIlD;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,GACrB,UAAU,MAAM,EAChB,gBAAgB,MAAM,EACtB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,WAgBlC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,uBAAuB,GAClC,MAAM,eAAe,EACrB,gBAAgB,MAAM,EAAE,EAAE,EAC1B,OAAO,MAAM,EACb,kBAAa,YAed,CAAA"}
@@ -0,0 +1,63 @@
1
+ import { equalsBytes } from '@feelyourprotocol/util';
2
+ const ZERO_BYTES_16 = new Uint8Array(16);
3
+ /**
4
+ * Calculates the gas used for the MSM precompiles based on the number of pairs and
5
+ * calculating in some discount in relation to the number of pairs.
6
+ *
7
+ * @param numPairs - Number of pairings provided to the precompile
8
+ * @param gasUsedPerPair - Base gas cost per pairing
9
+ * @param discountTable - Discount table (pair count -> multiplier)
10
+ * @returns Total gas to charge after applying the discount table
11
+ */
12
+ export const msmGasUsed = (numPairs, gasUsedPerPair, discountTable) => {
13
+ const gasDiscountMax = discountTable[discountTable.length - 1][1];
14
+ let gasDiscountMultiplier;
15
+ if (numPairs <= discountTable.length) {
16
+ if (numPairs === 0) {
17
+ gasDiscountMultiplier = 0; // this implicitly sets gasUsed to 0 as per the EIP.
18
+ }
19
+ else {
20
+ gasDiscountMultiplier = discountTable[numPairs - 1][1];
21
+ }
22
+ }
23
+ else {
24
+ gasDiscountMultiplier = gasDiscountMax;
25
+ }
26
+ // (numPairs * multiplication_cost * discount) / multiplier
27
+ return (BigInt(numPairs) * gasUsedPerPair * BigInt(gasDiscountMultiplier)) / BigInt(1000);
28
+ };
29
+ /**
30
+ * BLS-specific zero check to check that the top 16 bytes of a 64 byte field element provided
31
+ * are always zero (see EIP notes on field element encoding).
32
+ *
33
+ * Zero byte ranges are expected to be passed in the following format (and so each referencing
34
+ * 16-byte ranges):
35
+ *
36
+ * ```ts
37
+ * const zeroByteRanges = [
38
+ * [0, 16],
39
+ * [64, 80],
40
+ * [128, 144]
41
+ *
42
+ * ]
43
+ * ```
44
+ *
45
+ * @param opts - Precompile input wrapper containing the data to inspect
46
+ * @param zeroByteRanges - Ranges (as [start, end]) within which bytes must be zero
47
+ * @param pName - Human readable precompile name for logging
48
+ * @param pairStart - Optional offset into the data when iterating through pairs
49
+ * @returns `true` if every specified range contains only zero bytes
50
+ */
51
+ export const leading16ZeroBytesCheck = (opts, zeroByteRanges, pName, pairStart = 0) => {
52
+ for (const index in zeroByteRanges) {
53
+ const slicedBuffer = opts.data.subarray(zeroByteRanges[index][0] + pairStart, zeroByteRanges[index][1] + pairStart);
54
+ if (!(equalsBytes(slicedBuffer, ZERO_BYTES_16) === true)) {
55
+ if (opts._debug !== undefined) {
56
+ opts._debug(`${pName} failed: Point not on curve`);
57
+ }
58
+ return false;
59
+ }
60
+ }
61
+ return true;
62
+ };
63
+ //# sourceMappingURL=util.js.map