@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,344 @@
1
+ import { Hardfork } from '@feelyourprotocol/common'
2
+ import { type Address, type PrefixedHexString, bytesToUnprefixedHex } from '@feelyourprotocol/util'
3
+
4
+ import { precompile0a } from './0a-kzg-point-evaluation.ts'
5
+ import { precompile0b } from './0b-bls12-g1add.ts'
6
+ import { precompile0c } from './0c-bls12-g1msm.ts'
7
+ import { precompile0d } from './0d-bls12-g2add.ts'
8
+ import { precompile0e } from './0e-bls12-g2msm.ts'
9
+ import { precompile0f } from './0f-bls12-pairing.ts'
10
+ import { precompile01 } from './01-ecrecover.ts'
11
+ import { precompile02 } from './02-sha256.ts'
12
+ import { precompile03 } from './03-ripemd160.ts'
13
+ import { precompile04 } from './04-identity.ts'
14
+ import { precompile05 } from './05-modexp.ts'
15
+ import { precompile06 } from './06-bn254-add.ts'
16
+ import { precompile07 } from './07-bn254-mul.ts'
17
+ import { precompile08 } from './08-bn254-pairing.ts'
18
+ import { precompile09 } from './09-blake2f.ts'
19
+ import { precompile10 } from './10-bls12-map-fp-to-g1.ts'
20
+ import { precompile11 } from './11-bls12-map-fp2-to-g2.ts'
21
+ import { precompile100 } from './100-p256verify.ts'
22
+ import { MCLBLS, NobleBLS } from './bls12_381/index.ts'
23
+ import { NobleBN254, RustBN254 } from './bn254/index.ts'
24
+
25
+ import type { Common } from '@feelyourprotocol/common'
26
+ import type { PrecompileFunc, PrecompileInput } from './types.ts'
27
+
28
+ interface PrecompileEntry {
29
+ address: string
30
+ check: PrecompileAvailabilityCheckType
31
+ precompile: PrecompileFunc
32
+ name: string
33
+ }
34
+
35
+ interface Precompiles {
36
+ [key: string]: PrecompileFunc
37
+ }
38
+
39
+ type PrecompileAvailabilityCheckType =
40
+ | PrecompileAvailabilityCheckTypeHardfork
41
+ | PrecompileAvailabilityCheckTypeEIP
42
+
43
+ export type PrecompileAvailabilityCheck =
44
+ (typeof PrecompileAvailabilityCheck)[keyof typeof PrecompileAvailabilityCheck]
45
+
46
+ export const PrecompileAvailabilityCheck = {
47
+ EIP: 'eip',
48
+ Hardfork: 'hardfork',
49
+ } as const
50
+
51
+ interface PrecompileAvailabilityCheckTypeHardfork {
52
+ type: typeof PrecompileAvailabilityCheck.Hardfork
53
+ param: string
54
+ }
55
+
56
+ interface PrecompileAvailabilityCheckTypeEIP {
57
+ type: typeof PrecompileAvailabilityCheck.EIP
58
+ param: number
59
+ }
60
+ const BYTES_19 = '00000000000000000000000000000000000000'
61
+ const ripemdPrecompileAddress = BYTES_19 + '03'
62
+
63
+ const precompileEntries: PrecompileEntry[] = [
64
+ {
65
+ address: BYTES_19 + '01',
66
+ check: {
67
+ type: PrecompileAvailabilityCheck.Hardfork,
68
+ param: Hardfork.Chainstart,
69
+ },
70
+ precompile: precompile01,
71
+ name: 'ECRECOVER (0x01)',
72
+ },
73
+ {
74
+ address: BYTES_19 + '02',
75
+ check: {
76
+ type: PrecompileAvailabilityCheck.Hardfork,
77
+ param: Hardfork.Chainstart,
78
+ },
79
+ precompile: precompile02,
80
+ name: 'SHA256 (0x02)',
81
+ },
82
+ {
83
+ address: BYTES_19 + '03',
84
+ check: {
85
+ type: PrecompileAvailabilityCheck.Hardfork,
86
+ param: Hardfork.Chainstart,
87
+ },
88
+ precompile: precompile03,
89
+ name: 'RIPEMD160 (0x03)',
90
+ },
91
+ {
92
+ address: BYTES_19 + '04',
93
+ check: {
94
+ type: PrecompileAvailabilityCheck.Hardfork,
95
+ param: Hardfork.Chainstart,
96
+ },
97
+ precompile: precompile04,
98
+ name: 'IDENTITY (0x04)',
99
+ },
100
+ {
101
+ address: BYTES_19 + '05',
102
+ check: {
103
+ type: PrecompileAvailabilityCheck.Hardfork,
104
+ param: Hardfork.Byzantium,
105
+ },
106
+ precompile: precompile05,
107
+ name: 'MODEXP (0x05)',
108
+ },
109
+ {
110
+ address: BYTES_19 + '06',
111
+ check: {
112
+ type: PrecompileAvailabilityCheck.Hardfork,
113
+ param: Hardfork.Byzantium,
114
+ },
115
+ precompile: precompile06,
116
+ name: 'BN254_ADD (0x06)',
117
+ },
118
+ {
119
+ address: BYTES_19 + '07',
120
+ check: {
121
+ type: PrecompileAvailabilityCheck.Hardfork,
122
+ param: Hardfork.Byzantium,
123
+ },
124
+ precompile: precompile07,
125
+ name: 'BN254_MUL (0x07)',
126
+ },
127
+ {
128
+ address: BYTES_19 + '08',
129
+ check: {
130
+ type: PrecompileAvailabilityCheck.Hardfork,
131
+ param: Hardfork.Byzantium,
132
+ },
133
+ precompile: precompile08,
134
+ name: 'BN254_PAIRING (0x08)',
135
+ },
136
+ {
137
+ address: BYTES_19 + '09',
138
+ check: {
139
+ type: PrecompileAvailabilityCheck.Hardfork,
140
+ param: Hardfork.Istanbul,
141
+ },
142
+ precompile: precompile09,
143
+ name: 'BLAKE2f (0x09)',
144
+ },
145
+ {
146
+ address: BYTES_19 + '0a',
147
+ check: {
148
+ type: PrecompileAvailabilityCheck.EIP,
149
+ param: 4844,
150
+ },
151
+ precompile: precompile0a,
152
+ name: 'KZG_POINT_EVALUATION (0x0a)',
153
+ },
154
+ {
155
+ address: BYTES_19 + '0b',
156
+ check: {
157
+ type: PrecompileAvailabilityCheck.EIP,
158
+ param: 2537,
159
+ },
160
+ precompile: precompile0b,
161
+ name: 'BLS12_G1ADD (0x0b)',
162
+ },
163
+ {
164
+ address: BYTES_19 + '0c',
165
+ check: {
166
+ type: PrecompileAvailabilityCheck.EIP,
167
+ param: 2537,
168
+ },
169
+ precompile: precompile0c,
170
+ name: 'BLS12_G1MSM (0x0c)',
171
+ },
172
+ {
173
+ address: BYTES_19 + '0d',
174
+ check: {
175
+ type: PrecompileAvailabilityCheck.EIP,
176
+ param: 2537,
177
+ },
178
+ precompile: precompile0d,
179
+ name: 'BLS12_G2ADD (0x0d)',
180
+ },
181
+ {
182
+ address: BYTES_19 + '0e',
183
+ check: {
184
+ type: PrecompileAvailabilityCheck.EIP,
185
+ param: 2537,
186
+ },
187
+ precompile: precompile0e,
188
+ name: 'BLS12_G2MSM (0x0e)',
189
+ },
190
+ {
191
+ address: BYTES_19 + '0f',
192
+ check: {
193
+ type: PrecompileAvailabilityCheck.EIP,
194
+ param: 2537,
195
+ },
196
+ precompile: precompile0f,
197
+ name: 'BLS12_PAIRING (0x0f)',
198
+ },
199
+ {
200
+ address: BYTES_19 + '10',
201
+ check: {
202
+ type: PrecompileAvailabilityCheck.EIP,
203
+ param: 2537,
204
+ },
205
+ precompile: precompile10,
206
+ name: 'BLS12_MAP_FP_TO_G1 (0x10)',
207
+ },
208
+ {
209
+ address: BYTES_19 + '11',
210
+ check: {
211
+ type: PrecompileAvailabilityCheck.EIP,
212
+ param: 2537,
213
+ },
214
+ precompile: precompile11,
215
+ name: 'BLS12_MAP_FP_TO_G2 (0x11)',
216
+ },
217
+ {
218
+ address: '0000000000000000000000000000000000000100',
219
+ check: {
220
+ type: PrecompileAvailabilityCheck.EIP,
221
+ param: 7951,
222
+ },
223
+ precompile: precompile100,
224
+ name: 'P256VERIFY (0x100)',
225
+ },
226
+ ]
227
+
228
+ const precompiles: Precompiles = {
229
+ [BYTES_19 + '01']: precompile01,
230
+ [BYTES_19 + '02']: precompile02,
231
+ [ripemdPrecompileAddress]: precompile03,
232
+ [BYTES_19 + '04']: precompile04,
233
+ [BYTES_19 + '05']: precompile05,
234
+ [BYTES_19 + '06']: precompile06,
235
+ [BYTES_19 + '07']: precompile07,
236
+ [BYTES_19 + '08']: precompile08,
237
+ [BYTES_19 + '09']: precompile09,
238
+ [BYTES_19 + '0a']: precompile0a,
239
+ [BYTES_19 + '0b']: precompile0b,
240
+ [BYTES_19 + '0c']: precompile0c,
241
+ [BYTES_19 + '0d']: precompile0d,
242
+ [BYTES_19 + '0e']: precompile0e,
243
+ [BYTES_19 + '0f']: precompile0f,
244
+ [BYTES_19 + '10']: precompile10,
245
+ [BYTES_19 + '11']: precompile11,
246
+ '0000000000000000000000000000000000000100': precompile100,
247
+ }
248
+
249
+ /**
250
+ * Specifies a precompile to remove from the EVM.
251
+ * The address can be an `Address` instance or a `0x`-prefixed hex string.
252
+ */
253
+ type DeletePrecompile = {
254
+ address: Address | PrefixedHexString
255
+ }
256
+
257
+ /**
258
+ * Specifies a precompile to add to (or override in) the EVM.
259
+ * The address can be an `Address` instance or a `0x`-prefixed hex string.
260
+ */
261
+ type AddPrecompile = {
262
+ address: Address | PrefixedHexString
263
+ function: PrecompileFunc
264
+ }
265
+
266
+ /**
267
+ * A custom precompile entry: either an addition/override or a deletion.
268
+ *
269
+ * ```ts
270
+ * // Add a custom precompile at a new address
271
+ * const add: CustomPrecompile = {
272
+ * address: '0x0000000000000000000000000000000000ff0001',
273
+ * function: myPrecompileImpl,
274
+ * }
275
+ * // Delete an existing precompile
276
+ * const del: CustomPrecompile = {
277
+ * address: '0x0000000000000000000000000000000000000002',
278
+ * }
279
+ * ```
280
+ */
281
+ type CustomPrecompile = AddPrecompile | DeletePrecompile
282
+
283
+ function resolvePrecompileAddress(address: Address | PrefixedHexString): string {
284
+ if (typeof address === 'string') {
285
+ return address.slice(2).padStart(40, '0').toLowerCase()
286
+ }
287
+ return bytesToUnprefixedHex(address.bytes)
288
+ }
289
+
290
+ function getActivePrecompiles(
291
+ common: Common,
292
+ customPrecompiles?: CustomPrecompile[],
293
+ ): Map<string, PrecompileFunc> {
294
+ const precompileMap = new Map()
295
+ if (customPrecompiles) {
296
+ for (const precompile of customPrecompiles) {
297
+ precompileMap.set(
298
+ resolvePrecompileAddress(precompile.address),
299
+ 'function' in precompile ? precompile.function : undefined,
300
+ )
301
+ }
302
+ }
303
+ for (const entry of precompileEntries) {
304
+ if (precompileMap.has(entry.address)) {
305
+ continue
306
+ }
307
+ const type = entry.check.type
308
+
309
+ if (
310
+ (type === PrecompileAvailabilityCheck.Hardfork && common.gteHardfork(entry.check.param)) ||
311
+ (entry.check.type === PrecompileAvailabilityCheck.EIP &&
312
+ common.isActivatedEIP(entry.check.param))
313
+ ) {
314
+ precompileMap.set(entry.address, entry.precompile)
315
+ }
316
+ }
317
+ return precompileMap
318
+ }
319
+
320
+ function getPrecompileName(addressUnprefixedStr: string) {
321
+ if (addressUnprefixedStr.length < 40) {
322
+ addressUnprefixedStr = addressUnprefixedStr.padStart(40, '0')
323
+ }
324
+ for (const entry of precompileEntries) {
325
+ if (entry.address === addressUnprefixedStr) {
326
+ return entry.name
327
+ }
328
+ }
329
+ return ''
330
+ }
331
+
332
+ export {
333
+ getActivePrecompiles,
334
+ getPrecompileName,
335
+ MCLBLS,
336
+ NobleBLS,
337
+ NobleBN254,
338
+ precompileEntries,
339
+ precompiles,
340
+ ripemdPrecompileAddress,
341
+ RustBN254,
342
+ }
343
+
344
+ export type { AddPrecompile, CustomPrecompile, DeletePrecompile, PrecompileFunc, PrecompileInput }
@@ -0,0 +1,15 @@
1
+ import type { Common } from '@feelyourprotocol/common'
2
+ import type { debug } from 'debug'
3
+ import type { EVMInterface, ExecResult } from '../types.ts'
4
+
5
+ export interface PrecompileFunc {
6
+ (input: PrecompileInput): Promise<ExecResult> | ExecResult
7
+ }
8
+
9
+ export interface PrecompileInput {
10
+ data: Uint8Array
11
+ gasLimit: bigint
12
+ common: Common
13
+ _EVM: EVMInterface
14
+ _debug?: debug.Debugger
15
+ }
@@ -0,0 +1,70 @@
1
+ import { short } from '@feelyourprotocol/util'
2
+
3
+ import type { PrecompileInput } from './index.ts'
4
+
5
+ /**
6
+ * Checks that the gas used remain under the gas limit.
7
+ *
8
+ * @param opts - Precompile input wrapper
9
+ * @param gasUsed - Amount of gas consumed by the precompile
10
+ * @param pName - Human readable precompile name for logging
11
+ * @returns `true` if the gas usage is within the provided limit
12
+ */
13
+ export const gasLimitCheck = (opts: PrecompileInput, gasUsed: bigint, pName: string) => {
14
+ if (opts._debug !== undefined) {
15
+ opts._debug(
16
+ `Run ${pName} precompile data=${short(opts.data)} length=${
17
+ opts.data.length
18
+ } gasLimit=${opts.gasLimit} gasUsed=${gasUsed}`,
19
+ )
20
+ }
21
+
22
+ if (opts.gasLimit < gasUsed) {
23
+ if (opts._debug !== undefined) {
24
+ opts._debug(`${pName} failed: OOG`)
25
+ }
26
+ return false
27
+ }
28
+ return true
29
+ }
30
+
31
+ /**
32
+ * Checks that the length of the provided data is equal to `length`.
33
+ *
34
+ * @param opts - Precompile input wrapper
35
+ * @param length - Required data length in bytes
36
+ * @param pName - Human readable precompile name for logging
37
+ * @returns `true` if the provided data matches the required length
38
+ */
39
+ export const equalityLengthCheck = (opts: PrecompileInput, length: number, pName: string) => {
40
+ if (opts.data.length !== length) {
41
+ if (opts._debug !== undefined) {
42
+ opts._debug(
43
+ `${pName} failed: Invalid input length length=${opts.data.length} (expected: ${length})`,
44
+ )
45
+ }
46
+ return false
47
+ }
48
+ return true
49
+ }
50
+
51
+ /**
52
+ * Checks that the total length of the provided data input can be subdivided into k equal parts
53
+ * with `length` (without leaving some remainder bytes).
54
+ *
55
+ * @param opts - Precompile input wrapper
56
+ * @param length - Required chunk size
57
+ * @param pName - Human readable precompile name for logging
58
+ * @returns `true` if the length is divisible by the chunk size
59
+ */
60
+ export const moduloLengthCheck = (opts: PrecompileInput, length: number, pName: string) => {
61
+ if (opts.data.length % length !== 0) {
62
+ if (opts._debug !== undefined) {
63
+ opts._debug(
64
+ `${pName} failed: Invalid input length length=${opts.data.length} (expected: ${length}*k bytes)`,
65
+ )
66
+ }
67
+ return false
68
+ }
69
+ return true
70
+ }
package/src/stack.ts ADDED
@@ -0,0 +1,166 @@
1
+ import { EVMError } from './errors.ts'
2
+
3
+ /**
4
+ * Implementation of the stack used in evm.
5
+ */
6
+ export class Stack {
7
+ // This array is initialized as an empty array. Once values are pushed, the array size will never decrease.
8
+ private _store: bigint[]
9
+ private _maxHeight: number
10
+
11
+ private _len: number = 0
12
+
13
+ constructor(maxHeight?: number) {
14
+ // It is possible to initialize the array with `maxHeight` items. However,
15
+ // this makes the constructor 10x slower and there do not seem to be any observable performance gains
16
+ this._store = []
17
+ this._maxHeight = maxHeight ?? 1024
18
+ }
19
+
20
+ get length() {
21
+ return this._len
22
+ }
23
+
24
+ /**
25
+ * Pushes a new bigint onto the stack.
26
+ * @param value - Value to push (must fit within the configured max height)
27
+ */
28
+ push(value: bigint) {
29
+ if (this._len >= this._maxHeight) {
30
+ throw new EVMError(EVMError.errorMessages.STACK_OVERFLOW)
31
+ }
32
+
33
+ // Read current length, set `_store` to value, and then increase the length
34
+ this._store[this._len++] = value
35
+ }
36
+
37
+ /**
38
+ * Pops the top value from the stack.
39
+ * @returns The value removed from the stack
40
+ */
41
+ pop(): bigint {
42
+ if (this._len < 1) {
43
+ throw new EVMError(EVMError.errorMessages.STACK_UNDERFLOW)
44
+ }
45
+
46
+ // Length is checked above, so pop shouldn't return undefined
47
+ // First decrease current length, then read the item and return it
48
+ // Note: this does thus not delete the item from the internal array
49
+ // However, the length is decreased, so it is not accessible to external observers
50
+ return this._store[--this._len]
51
+ }
52
+
53
+ /**
54
+ * Pops multiple items from the stack with the top-most item returned first.
55
+ * @param num - Number of items to pop (defaults to 1)
56
+ * @returns Array containing the popped values
57
+ */
58
+ popN(num: number = 1): bigint[] {
59
+ if (this._len < num) {
60
+ throw new EVMError(EVMError.errorMessages.STACK_UNDERFLOW)
61
+ }
62
+
63
+ if (num === 0) {
64
+ return []
65
+ }
66
+
67
+ const arr = Array(num)
68
+ const cache = this._store
69
+
70
+ for (let pop = 0; pop < num; pop++) {
71
+ // Note: this thus also (correctly) reduces the length of the internal array (without deleting items)
72
+ arr[pop] = cache[--this._len]
73
+ }
74
+
75
+ return arr
76
+ }
77
+
78
+ /**
79
+ * Returns items from the stack without removing them.
80
+ * @param num - Number of items to return (defaults to 1)
81
+ * @returns Array of items, with index 0 representing the top of the stack
82
+ * @throws {@link EVMError} with code STACK_UNDERFLOW if there are not enough items on the stack
83
+ */
84
+ peek(num: number = 1): bigint[] {
85
+ const peekArray: bigint[] = Array(num)
86
+ let start = this._len
87
+
88
+ for (let peek = 0; peek < num; peek++) {
89
+ const index = --start
90
+ if (index < 0) {
91
+ throw new EVMError(EVMError.errorMessages.STACK_UNDERFLOW)
92
+ }
93
+ peekArray[peek] = this._store[index]
94
+ }
95
+ return peekArray
96
+ }
97
+
98
+ /**
99
+ * Swaps the top of the stack with another item.
100
+ * @param position - Zero-based index from the top of the stack (0 swaps with the top itself)
101
+ */
102
+ swap(position: number) {
103
+ if (this._len <= position) {
104
+ throw new EVMError(EVMError.errorMessages.STACK_UNDERFLOW)
105
+ }
106
+
107
+ const head = this._len - 1
108
+ const i = head - position
109
+ const storageCached = this._store
110
+
111
+ const tmp = storageCached[head]
112
+ storageCached[head] = storageCached[i]
113
+ storageCached[i] = tmp
114
+ }
115
+
116
+ // I would say that we do not need this method any more
117
+ // since you can't copy a primitive data type
118
+ // Nevertheless not sure if we "loose" something here?
119
+ // Will keep commented out for now
120
+ /**
121
+ * Pushes a copy of an item deeper in the stack.
122
+ * @param position - One-based index of the item to duplicate
123
+ */
124
+ dup(position: number) {
125
+ const len = this._len
126
+ if (len < position) {
127
+ throw new EVMError(EVMError.errorMessages.STACK_UNDERFLOW)
128
+ }
129
+
130
+ // Note: this code is borrowed from `push()` (avoids a call)
131
+ if (len >= this._maxHeight) {
132
+ throw new EVMError(EVMError.errorMessages.STACK_OVERFLOW)
133
+ }
134
+
135
+ const i = len - position
136
+ this._store[this._len++] = this._store[i]
137
+ }
138
+
139
+ /**
140
+ * Swaps two arbitrary entries relative to the top of the stack.
141
+ * @param swap1 - Distance from the top (0 = top element) for the first entry
142
+ * @param swap2 - Distance from the top for the second entry
143
+ */
144
+ exchange(swap1: number, swap2: number) {
145
+ const headIndex = this._len - 1
146
+ const exchangeIndex1 = headIndex - swap1
147
+ const exchangeIndex2 = headIndex - swap2
148
+
149
+ // Stack underflow is not possible in EOF
150
+ if (exchangeIndex1 < 0 || exchangeIndex2 < 0) {
151
+ throw new EVMError(EVMError.errorMessages.STACK_UNDERFLOW)
152
+ }
153
+
154
+ const cache = this._store[exchangeIndex2]
155
+ this._store[exchangeIndex2] = this._store[exchangeIndex1]
156
+ this._store[exchangeIndex1] = cache
157
+ }
158
+
159
+ /**
160
+ * Returns a copy of the current stack. This represents the actual state of the stack
161
+ * (not the internal state of the stack, which might have unreachable elements in it)
162
+ */
163
+ getStack() {
164
+ return this._store.slice(0, this._len)
165
+ }
166
+ }
@@ -0,0 +1,45 @@
1
+ import type { PrefixedHexString } from '@feelyourprotocol/util'
2
+ import type { BinaryStemAccessEvent, BinaryStemMeta } from './binaryTreeAccessWitness.ts'
3
+
4
+ export class StemCache {
5
+ cache: Map<PrefixedHexString, BinaryStemAccessEvent & BinaryStemMeta>
6
+
7
+ constructor() {
8
+ this.cache = new Map<PrefixedHexString, BinaryStemAccessEvent & BinaryStemMeta>()
9
+ }
10
+
11
+ set(stemKey: PrefixedHexString, accessedStem: BinaryStemAccessEvent & BinaryStemMeta) {
12
+ this.cache.set(stemKey, accessedStem)
13
+ }
14
+
15
+ get(stemHex: PrefixedHexString): (BinaryStemAccessEvent & BinaryStemMeta) | undefined {
16
+ return this.cache.get(stemHex)
17
+ }
18
+
19
+ del(stemHex: PrefixedHexString): void {
20
+ this.cache.delete(stemHex)
21
+ }
22
+
23
+ commit(): [PrefixedHexString, BinaryStemAccessEvent & BinaryStemMeta][] {
24
+ const items: [PrefixedHexString, BinaryStemAccessEvent & BinaryStemMeta][] = Array.from(
25
+ this.cache.entries(),
26
+ )
27
+ this.clear()
28
+ return items
29
+ }
30
+
31
+ /**
32
+ * Clear cache
33
+ */
34
+ clear(): void {
35
+ this.cache.clear()
36
+ }
37
+
38
+ /**
39
+ * Returns the size of the cache
40
+ * @returns Number of cached stems currently stored
41
+ */
42
+ size() {
43
+ return this.cache.size
44
+ }
45
+ }