@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,307 @@
1
+ import {
2
+ BIGINT_0,
3
+ bigIntToBytes,
4
+ bytesToBigInt,
5
+ concatBytes,
6
+ equalsBytes,
7
+ setLengthLeft,
8
+ } from '@feelyourprotocol/util'
9
+ import { bls12_381 } from '@noble/curves/bls12-381.js'
10
+
11
+ import { EVMError } from '../../errors.ts'
12
+
13
+ import {
14
+ BLS_FIELD_MODULUS,
15
+ BLS_G1_INFINITY_POINT_BYTES,
16
+ BLS_G1_POINT_BYTE_LENGTH,
17
+ BLS_G2_INFINITY_POINT_BYTES,
18
+ BLS_G2_POINT_BYTE_LENGTH,
19
+ BLS_ONE_BUFFER,
20
+ BLS_ZERO_BUFFER,
21
+ } from './constants.ts'
22
+
23
+ import type { Fp2 } from '@noble/curves/abstract/tower.js'
24
+ import type { AffinePoint } from '@noble/curves/abstract/weierstrass.js'
25
+ import type { EVMBLSInterface } from '../../types.ts'
26
+
27
+ const G1_ZERO = bls12_381.G1.Point.ZERO
28
+
29
+ const G2_ZERO = bls12_381.G2.Point.ZERO
30
+
31
+ function BLS12_381_ToFp2Point(fpXCoordinate: Uint8Array, fpYCoordinate: Uint8Array) {
32
+ // check if the coordinates are in the field
33
+ if (bytesToBigInt(fpXCoordinate) >= BLS_FIELD_MODULUS) {
34
+ throw new EVMError(EVMError.errorMessages.BLS_12_381_FP_NOT_IN_FIELD)
35
+ }
36
+ if (bytesToBigInt(fpYCoordinate) >= BLS_FIELD_MODULUS) {
37
+ throw new EVMError(EVMError.errorMessages.BLS_12_381_FP_NOT_IN_FIELD)
38
+ }
39
+
40
+ const fpBytes = concatBytes(fpXCoordinate.subarray(16), fpYCoordinate.subarray(16))
41
+
42
+ const FP = bls12_381.fields.Fp2.fromBytes(fpBytes)
43
+ return FP
44
+ }
45
+
46
+ /**
47
+ * Converts an Uint8Array to a Noble G1 point. Raises errors if the point is not on the curve
48
+ * and (if activated) if the point is in the subgroup / order check.
49
+ * @param input Input Uint8Array. Should be 128 bytes
50
+ * @returns Noble G1 point
51
+ */
52
+ function BLS12_381_ToG1Point(input: Uint8Array, verifyOrder = true) {
53
+ if (equalsBytes(input, BLS_G1_INFINITY_POINT_BYTES) === true) {
54
+ return G1_ZERO
55
+ }
56
+
57
+ const x = bytesToBigInt(input.subarray(16, BLS_G1_POINT_BYTE_LENGTH / 2))
58
+ const y = bytesToBigInt(input.subarray(80, BLS_G1_POINT_BYTE_LENGTH))
59
+
60
+ const G1 = bls12_381.G1.Point.fromAffine({
61
+ x,
62
+ y,
63
+ })
64
+
65
+ try {
66
+ G1.assertValidity()
67
+ } catch (e) {
68
+ if (verifyOrder || (e as Error).message !== 'bad point: not in prime-order subgroup')
69
+ throw new EVMError(EVMError.errorMessages.BLS_12_381_POINT_NOT_ON_CURVE)
70
+ }
71
+
72
+ return G1
73
+ }
74
+
75
+ // input: a Noble G1 point
76
+ // output: a 128-byte Uint8Array
77
+ function BLS12_381_FromG1Point(input: AffinePoint<bigint>): Uint8Array {
78
+ const xBytes = setLengthLeft(bigIntToBytes(input.x), 64)
79
+ const yBytes = setLengthLeft(bigIntToBytes(input.y), 64)
80
+
81
+ return concatBytes(xBytes, yBytes)
82
+ }
83
+
84
+ /**
85
+ * Converts an Uint8Array to a Noble G2 point. Raises errors if the point is not on the curve
86
+ * and (if activated) if the point is in the subgroup / order check.
87
+ * @param input Input Uint8Array. Should be 256 bytes
88
+ * @returns Noble G2 point
89
+ */
90
+ function BLS12_381_ToG2Point(input: Uint8Array, verifyOrder = true) {
91
+ if (equalsBytes(input, BLS_G2_INFINITY_POINT_BYTES) === true) {
92
+ return G2_ZERO
93
+ }
94
+
95
+ const p_x_1 = input.subarray(0, 64)
96
+ const p_x_2 = input.subarray(64, BLS_G2_POINT_BYTE_LENGTH / 2)
97
+ const p_y_1 = input.subarray(128, 192)
98
+ const p_y_2 = input.subarray(192, BLS_G2_POINT_BYTE_LENGTH)
99
+
100
+ const Fp2X = BLS12_381_ToFp2Point(p_x_1, p_x_2)
101
+ const Fp2Y = BLS12_381_ToFp2Point(p_y_1, p_y_2)
102
+
103
+ const pG2 = bls12_381.G2.Point.fromAffine({
104
+ x: Fp2X,
105
+ y: Fp2Y,
106
+ })
107
+
108
+ try {
109
+ pG2.assertValidity()
110
+ } catch (e) {
111
+ if (verifyOrder || (e as Error).message !== 'bad point: not in prime-order subgroup')
112
+ throw new EVMError(EVMError.errorMessages.BLS_12_381_POINT_NOT_ON_CURVE)
113
+ }
114
+
115
+ return pG2
116
+ }
117
+
118
+ // input: a Noble G1 point
119
+ // output: a 128-byte Uint8Array
120
+ function BLS12_381_FromG2Point(input: AffinePoint<Fp2>): Uint8Array {
121
+ const xBytes1 = setLengthLeft(bigIntToBytes(input.x.c0), 64)
122
+ const xBytes2 = setLengthLeft(bigIntToBytes(input.x.c1), 64)
123
+ const yBytes1 = setLengthLeft(bigIntToBytes(input.y.c0), 64)
124
+ const yBytes2 = setLengthLeft(bigIntToBytes(input.y.c1), 64)
125
+
126
+ return concatBytes(xBytes1, xBytes2, yBytes1, yBytes2)
127
+ }
128
+
129
+ // input: a 32-byte hex scalar Uint8Array
130
+ // output: a Noble Fr point
131
+
132
+ function BLS12_381_ToFrPoint(input: Uint8Array): bigint {
133
+ const Fr = bls12_381.fields.Fr.fromBytes(input)
134
+ if (Fr >= bls12_381.fields.Fr.ORDER) {
135
+ return bls12_381.fields.Fr.create(Fr % bls12_381.fields.Fr.ORDER)
136
+ }
137
+ return bls12_381.fields.Fr.create(Fr)
138
+ }
139
+
140
+ // input: a 64-byte buffer
141
+ // output: a Noble Fp point
142
+
143
+ function BLS12_381_ToFpPoint(fpCoordinate: Uint8Array) {
144
+ // check if point is in field
145
+ if (bytesToBigInt(fpCoordinate) >= BLS_FIELD_MODULUS) {
146
+ throw new EVMError(EVMError.errorMessages.BLS_12_381_FP_NOT_IN_FIELD)
147
+ }
148
+ const FP = bls12_381.fields.Fp.fromBytes(fpCoordinate.slice(16))
149
+ return FP
150
+ }
151
+
152
+ /**
153
+ * Implementation of the `EVMBLSInterface` using the `ethereum-cryptography (`@noble/curves`)
154
+ * JS library, see https://github.com/ethereum/js-ethereum-cryptography.
155
+ *
156
+ * This is the EVM default implementation.
157
+ */
158
+ export class NobleBLS implements EVMBLSInterface {
159
+ addG1(input: Uint8Array): Uint8Array {
160
+ const p1 = BLS12_381_ToG1Point(input.subarray(0, BLS_G1_POINT_BYTE_LENGTH), false)
161
+ const p2 = BLS12_381_ToG1Point(
162
+ input.subarray(BLS_G1_POINT_BYTE_LENGTH, BLS_G1_POINT_BYTE_LENGTH * 2),
163
+ false,
164
+ )
165
+
166
+ const p = p1.add(p2)
167
+ const result = BLS12_381_FromG1Point(p.toAffine())
168
+
169
+ return result
170
+ }
171
+
172
+ addG2(input: Uint8Array): Uint8Array {
173
+ const p1 = BLS12_381_ToG2Point(input.subarray(0, BLS_G2_POINT_BYTE_LENGTH), false)
174
+ const p2 = BLS12_381_ToG2Point(
175
+ input.subarray(BLS_G2_POINT_BYTE_LENGTH, BLS_G2_POINT_BYTE_LENGTH * 2),
176
+ false,
177
+ )
178
+ const p = p1.add(p2)
179
+ const result = BLS12_381_FromG2Point(p.toAffine())
180
+
181
+ return result
182
+ }
183
+
184
+ mapFPtoG1(input: Uint8Array): Uint8Array {
185
+ // convert input to Fp1 point
186
+ const FP = BLS12_381_ToFpPoint(input.subarray(0, 64))
187
+
188
+ // @ts-expect-error - @noble/curves v2 type resolution mismatch
189
+ const result = bls12_381.G1.mapToCurve(FP).toAffine()
190
+ const resultBytes = BLS12_381_FromG1Point(result)
191
+ return resultBytes
192
+ }
193
+
194
+ mapFP2toG2(input: Uint8Array): Uint8Array {
195
+ // convert input to Fp2 point
196
+ const Fp2Point = BLS12_381_ToFp2Point(input.subarray(0, 64), input.subarray(64, 128))
197
+
198
+ // @ts-expect-error - @noble/curves v2 type resolution mismatch
199
+ const result = bls12_381.G2.mapToCurve([Fp2Point.c0, Fp2Point.c1]).toAffine()
200
+ const resultBytes = BLS12_381_FromG2Point(result)
201
+ return resultBytes
202
+ }
203
+
204
+ msmG1(input: Uint8Array): Uint8Array {
205
+ // Note: This implementation is using the naive "algorithm" of just doing
206
+ // p1G1*v1F1 + p2G1*v1F1 + ... while the EIP is suggesting to use an optimized
207
+ // algorithm (Pippenger's algorithm, see https://eips.ethereum.org/EIPS/eip-2537#g1g2-msm).
208
+ //
209
+ // While this functionally works the approach is not "gas-cost-competitive" and an
210
+ // optimization should be considered in the future.
211
+ const pairLength = 160
212
+ const numPairs = input.length / pairLength
213
+
214
+ let pRes = G1_ZERO
215
+ for (let k = 0; k < numPairs; k++) {
216
+ const pairStart = pairLength * k
217
+ const G1 = BLS12_381_ToG1Point(
218
+ input.subarray(pairStart, pairStart + BLS_G1_POINT_BYTE_LENGTH),
219
+ )
220
+ const Fr = BLS12_381_ToFrPoint(
221
+ input.subarray(pairStart + BLS_G1_POINT_BYTE_LENGTH, pairStart + pairLength),
222
+ )
223
+ let pMul
224
+ if (Fr === BIGINT_0) {
225
+ pMul = G1_ZERO
226
+ } else {
227
+ pMul = G1.multiplyUnsafe(Fr)
228
+ }
229
+
230
+ pRes = pRes.add(pMul)
231
+ }
232
+
233
+ return BLS12_381_FromG1Point(pRes.toAffine())
234
+ }
235
+
236
+ msmG2(input: Uint8Array): Uint8Array {
237
+ // Note: This implementation is using the naive "algorithm" of just doing
238
+ // p1G1*v1F1 + p2G1*v1F1 + ... while the EIP is suggesting to use an optimized
239
+ // algorithm (Pippenger's algorithm, see https://eips.ethereum.org/EIPS/eip-2537#g1g2-msm).
240
+ //
241
+ // While this functionally works the approach is not "gas-cost-competitive" and an
242
+ // optimization should be considered in the future.
243
+ const pairLength = 288
244
+ const numPairs = input.length / pairLength
245
+
246
+ let pRes = G2_ZERO
247
+ for (let k = 0; k < numPairs; k++) {
248
+ const pairStart = pairLength * k
249
+ const G2 = BLS12_381_ToG2Point(
250
+ input.subarray(pairStart, pairStart + BLS_G2_POINT_BYTE_LENGTH),
251
+ )
252
+ const Fr = BLS12_381_ToFrPoint(
253
+ input.subarray(pairStart + BLS_G2_POINT_BYTE_LENGTH, pairStart + pairLength),
254
+ )
255
+ let pMul
256
+ if (Fr === BIGINT_0) {
257
+ pMul = G2_ZERO
258
+ } else {
259
+ pMul = G2.multiplyUnsafe(Fr)
260
+ }
261
+
262
+ pRes = pRes.add(pMul)
263
+ }
264
+
265
+ return BLS12_381_FromG2Point(pRes.toAffine())
266
+ }
267
+
268
+ pairingCheck(input: Uint8Array): Uint8Array {
269
+ // Extract the pairs from the input
270
+ const pairLength = 384
271
+ const pairs = []
272
+ for (let k = 0; k < input.length / pairLength; k++) {
273
+ const pairStart = pairLength * k
274
+ const G1 = BLS12_381_ToG1Point(
275
+ input.subarray(pairStart, pairStart + BLS_G1_POINT_BYTE_LENGTH),
276
+ )
277
+
278
+ const g2start = pairStart + BLS_G1_POINT_BYTE_LENGTH
279
+ const G2 = BLS12_381_ToG2Point(input.subarray(g2start, g2start + BLS_G2_POINT_BYTE_LENGTH))
280
+
281
+ pairs.push({ g1: G1, g2: G2 })
282
+ }
283
+
284
+ // Filter out infinity pairs
285
+ const filteredPairs = pairs.filter(
286
+ (pair) => pair.g1.equals(G1_ZERO) === false && pair.g2.equals(G2_ZERO) === false,
287
+ )
288
+
289
+ const FP12 = bls12_381.pairingBatch(filteredPairs, true)
290
+
291
+ if (bls12_381.fields.Fp12.eql(FP12, bls12_381.fields.Fp12.ONE)) {
292
+ return BLS_ONE_BUFFER
293
+ } else {
294
+ return BLS_ZERO_BUFFER
295
+ }
296
+ }
297
+ }
298
+
299
+ export {
300
+ BLS12_381_FromG1Point,
301
+ BLS12_381_FromG2Point,
302
+ BLS12_381_ToFp2Point,
303
+ BLS12_381_ToFpPoint,
304
+ BLS12_381_ToFrPoint,
305
+ BLS12_381_ToG1Point,
306
+ BLS12_381_ToG2Point,
307
+ }
@@ -0,0 +1,78 @@
1
+ import { equalsBytes } from '@feelyourprotocol/util'
2
+
3
+ import type { PrecompileInput } from '../types.ts'
4
+
5
+ const ZERO_BYTES_16 = new Uint8Array(16)
6
+
7
+ /**
8
+ * Calculates the gas used for the MSM precompiles based on the number of pairs and
9
+ * calculating in some discount in relation to the number of pairs.
10
+ *
11
+ * @param numPairs - Number of pairings provided to the precompile
12
+ * @param gasUsedPerPair - Base gas cost per pairing
13
+ * @param discountTable - Discount table (pair count -> multiplier)
14
+ * @returns Total gas to charge after applying the discount table
15
+ */
16
+ export const msmGasUsed = (
17
+ numPairs: number,
18
+ gasUsedPerPair: bigint,
19
+ discountTable: [number, number][],
20
+ ) => {
21
+ const gasDiscountMax = discountTable[discountTable.length - 1][1]
22
+ let gasDiscountMultiplier
23
+
24
+ if (numPairs <= discountTable.length) {
25
+ if (numPairs === 0) {
26
+ gasDiscountMultiplier = 0 // this implicitly sets gasUsed to 0 as per the EIP.
27
+ } else {
28
+ gasDiscountMultiplier = discountTable[numPairs - 1][1]
29
+ }
30
+ } else {
31
+ gasDiscountMultiplier = gasDiscountMax
32
+ }
33
+ // (numPairs * multiplication_cost * discount) / multiplier
34
+ return (BigInt(numPairs) * gasUsedPerPair * BigInt(gasDiscountMultiplier)) / BigInt(1000)
35
+ }
36
+
37
+ /**
38
+ * BLS-specific zero check to check that the top 16 bytes of a 64 byte field element provided
39
+ * are always zero (see EIP notes on field element encoding).
40
+ *
41
+ * Zero byte ranges are expected to be passed in the following format (and so each referencing
42
+ * 16-byte ranges):
43
+ *
44
+ * ```ts
45
+ * const zeroByteRanges = [
46
+ * [0, 16],
47
+ * [64, 80],
48
+ * [128, 144]
49
+ *
50
+ * ]
51
+ * ```
52
+ *
53
+ * @param opts - Precompile input wrapper containing the data to inspect
54
+ * @param zeroByteRanges - Ranges (as [start, end]) within which bytes must be zero
55
+ * @param pName - Human readable precompile name for logging
56
+ * @param pairStart - Optional offset into the data when iterating through pairs
57
+ * @returns `true` if every specified range contains only zero bytes
58
+ */
59
+ export const leading16ZeroBytesCheck = (
60
+ opts: PrecompileInput,
61
+ zeroByteRanges: number[][],
62
+ pName: string,
63
+ pairStart = 0,
64
+ ) => {
65
+ for (const index in zeroByteRanges) {
66
+ const slicedBuffer = opts.data.subarray(
67
+ zeroByteRanges[index][0] + pairStart,
68
+ zeroByteRanges[index][1] + pairStart,
69
+ )
70
+ if (!(equalsBytes(slicedBuffer, ZERO_BYTES_16) === true)) {
71
+ if (opts._debug !== undefined) {
72
+ opts._debug(`${pName} failed: Point not on curve`)
73
+ }
74
+ return false
75
+ }
76
+ }
77
+ return true
78
+ }
@@ -0,0 +1,2 @@
1
+ export { NobleBN254 } from './noble.ts'
2
+ export { RustBN254 } from './rustbn.ts'
@@ -0,0 +1,156 @@
1
+ import {
2
+ BIGINT_0,
3
+ bigIntToBytes,
4
+ bytesToBigInt,
5
+ concatBytes,
6
+ equalsBytes,
7
+ hexToBytes,
8
+ setLengthLeft,
9
+ } from '@feelyourprotocol/util'
10
+ import { bn254 } from '@noble/curves/bn254.js'
11
+
12
+ import { EVMError } from '../../errors.ts'
13
+
14
+ import type { AffinePoint } from '@noble/curves/abstract/weierstrass.js'
15
+ import type { EVMBN254Interface } from '../../types.ts'
16
+
17
+ const G1_INFINITY_POINT_BYTES = new Uint8Array(64)
18
+ const G2_INFINITY_POINT_BYTES = new Uint8Array(128)
19
+ const G1_POINT_BYTE_LENGTH = 64
20
+ const G1_ELEMENT_BYTE_LENGTH = 32
21
+ const G2_POINT_BYTE_LENGTH = 128
22
+
23
+ const ZERO_BUFFER = new Uint8Array(32)
24
+ const ONE_BUFFER = concatBytes(new Uint8Array(31), hexToBytes('0x01'))
25
+
26
+ /**
27
+ * Converts an Uint8Array to a Noble G1 point.
28
+ * @param input Input Uint8Array. Should be 64 bytes
29
+ * @returns Noble G1 point
30
+ */
31
+ function toG1Point(input: Uint8Array) {
32
+ if (equalsBytes(input, G1_INFINITY_POINT_BYTES) === true) {
33
+ return bn254.G1.Point.ZERO
34
+ }
35
+
36
+ const x = bytesToBigInt(input.subarray(0, G1_ELEMENT_BYTE_LENGTH))
37
+ const y = bytesToBigInt(input.subarray(G1_ELEMENT_BYTE_LENGTH, G1_POINT_BYTE_LENGTH))
38
+
39
+ const G1 = bn254.G1.Point.fromAffine({
40
+ x,
41
+ y,
42
+ })
43
+ G1.assertValidity()
44
+ return G1
45
+ }
46
+
47
+ function fromG1Point(input: AffinePoint<bigint>): Uint8Array {
48
+ const xBytes = setLengthLeft(bigIntToBytes(input.x), G1_ELEMENT_BYTE_LENGTH)
49
+ const yBytes = setLengthLeft(bigIntToBytes(input.y), G1_ELEMENT_BYTE_LENGTH)
50
+
51
+ return concatBytes(xBytes, yBytes)
52
+ }
53
+
54
+ function toFp2Point(fpXCoordinate: Uint8Array, fpYCoordinate: Uint8Array) {
55
+ if (bytesToBigInt(fpXCoordinate) >= bn254.fields.Fp2.ORDER) {
56
+ throw new EVMError(EVMError.errorMessages.BN254_FP_NOT_IN_FIELD)
57
+ }
58
+ if (bytesToBigInt(fpYCoordinate) >= bn254.fields.Fp2.ORDER) {
59
+ throw new EVMError(EVMError.errorMessages.BN254_FP_NOT_IN_FIELD)
60
+ }
61
+
62
+ const fpBytes = concatBytes(fpXCoordinate, fpYCoordinate)
63
+
64
+ const FP = bn254.fields.Fp2.fromBytes(fpBytes)
65
+ return FP
66
+ }
67
+
68
+ /**
69
+ * Converts an Uint8Array to a Noble G2 point. Raises errors if the point is not on the curve
70
+ * and (if activated) if the point is in the subgroup / order check.
71
+ * @param input Input Uint8Array. Should be 256 bytes
72
+ * @returns Noble G2 point
73
+ */
74
+ function toG2Point(input: Uint8Array) {
75
+ if (equalsBytes(input, G2_INFINITY_POINT_BYTES) === true) {
76
+ return bn254.G2.Point.ZERO
77
+ }
78
+
79
+ const p_x_2 = input.subarray(0, G1_ELEMENT_BYTE_LENGTH)
80
+ const p_x_1 = input.subarray(G1_ELEMENT_BYTE_LENGTH, G1_ELEMENT_BYTE_LENGTH * 2)
81
+ const start2 = G1_ELEMENT_BYTE_LENGTH * 2
82
+ const p_y_2 = input.subarray(start2, start2 + G1_ELEMENT_BYTE_LENGTH)
83
+ const p_y_1 = input.subarray(start2 + G1_ELEMENT_BYTE_LENGTH, start2 + G1_ELEMENT_BYTE_LENGTH * 2)
84
+
85
+ for (const p of [p_x_1, p_x_2, p_y_1, p_y_2]) {
86
+ const pB = bytesToBigInt(p)
87
+ if (bn254.fields.Fp.create(pB) !== pB) {
88
+ throw new EVMError(EVMError.errorMessages.BN254_FP_NOT_IN_FIELD)
89
+ }
90
+ }
91
+
92
+ const Fp2X = toFp2Point(p_x_1, p_x_2)
93
+ const Fp2Y = toFp2Point(p_y_1, p_y_2)
94
+
95
+ const pG2 = bn254.G2.Point.fromAffine({
96
+ x: Fp2X,
97
+ y: Fp2Y,
98
+ })
99
+
100
+ pG2.assertValidity()
101
+
102
+ return pG2
103
+ }
104
+
105
+ /**
106
+ * Implementation of the `EVMBN254Interface` using the `ethereum-cryptography (`@noble/curves`)
107
+ * JS library, see https://github.com/ethereum/js-ethereum-cryptography.
108
+ *
109
+ * This is the EVM default implementation.
110
+ */
111
+ export class NobleBN254 implements EVMBN254Interface {
112
+ add(input: Uint8Array): Uint8Array {
113
+ const p1 = toG1Point(input.slice(0, G1_POINT_BYTE_LENGTH))
114
+ const p2 = toG1Point(input.slice(G1_POINT_BYTE_LENGTH, G1_POINT_BYTE_LENGTH * 2))
115
+
116
+ const result = fromG1Point(p1.add(p2).toAffine())
117
+ return result
118
+ }
119
+
120
+ mul(input: Uint8Array): Uint8Array {
121
+ const p1 = toG1Point(input.slice(0, G1_POINT_BYTE_LENGTH))
122
+ const scalar = bn254.fields.Fr.create(bytesToBigInt(input.slice(G1_POINT_BYTE_LENGTH, 96)))
123
+
124
+ if (scalar === BIGINT_0) {
125
+ return G1_INFINITY_POINT_BYTES
126
+ }
127
+
128
+ const result = fromG1Point(p1.multiply(scalar).toAffine())
129
+ return result
130
+ }
131
+ pairing(input: Uint8Array): Uint8Array {
132
+ // Extract the pairs from the input
133
+ const pairLength = 192
134
+ const pairs = []
135
+ for (let k = 0; k < input.length / pairLength; k++) {
136
+ const pairStart = pairLength * k
137
+ const G1 = toG1Point(input.subarray(pairStart, pairStart + G1_POINT_BYTE_LENGTH))
138
+
139
+ const g2start = pairStart + G1_POINT_BYTE_LENGTH
140
+ const G2 = toG2Point(input.subarray(g2start, g2start + G2_POINT_BYTE_LENGTH))
141
+
142
+ if (G1 === bn254.G1.Point.ZERO || G2 === bn254.G2.Point.ZERO) {
143
+ continue
144
+ }
145
+
146
+ pairs.push({ g1: G1, g2: G2 })
147
+ }
148
+
149
+ const res = bn254.pairingBatch(pairs)
150
+ if (bn254.fields.Fp12.eql(res, bn254.fields.Fp12.ONE) === true) {
151
+ return ONE_BUFFER
152
+ } else {
153
+ return ZERO_BUFFER
154
+ }
155
+ }
156
+ }
@@ -0,0 +1,35 @@
1
+ import { bytesToUnprefixedHex, hexToBytes } from '@feelyourprotocol/util'
2
+
3
+ import type { EVMBN254Interface } from '../../types.ts'
4
+
5
+ /**
6
+ * Implementation of the `EVMBN254Interface` using a WASM wrapper https://github.com/ethereumjs/rustbn.js
7
+ * around the Parity fork of the Zcash bn pairing cryptography library.
8
+ *
9
+ * This can be optionally used to replace the build-in Noble implementation (`NobleBN254`) with
10
+ * a more performant WASM variant. See EVM `bls` constructor option on how to use.
11
+ */
12
+ export class RustBN254 implements EVMBN254Interface {
13
+ protected readonly _rustbn: any
14
+
15
+ constructor(rustbn: any) {
16
+ this._rustbn = rustbn
17
+ }
18
+
19
+ add(input: Uint8Array): Uint8Array {
20
+ // Using deprecated bytesToUnprefixedHex for performance: rustbn WASM library expects unprefixed hex strings.
21
+ const inputStr = bytesToUnprefixedHex(input)
22
+ return hexToBytes(this._rustbn.ec_add(inputStr))
23
+ }
24
+
25
+ mul(input: Uint8Array): Uint8Array {
26
+ // Using deprecated bytesToUnprefixedHex for performance: rustbn WASM library expects unprefixed hex strings.
27
+ const inputHex = bytesToUnprefixedHex(input)
28
+ return hexToBytes(this._rustbn.ec_mul(inputHex))
29
+ }
30
+ pairing(input: Uint8Array): Uint8Array {
31
+ // Using deprecated bytesToUnprefixedHex for performance: rustbn WASM library expects unprefixed hex strings.
32
+ const inputStr = bytesToUnprefixedHex(input)
33
+ return hexToBytes(this._rustbn.ec_pairing(inputStr))
34
+ }
35
+ }