@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,528 @@
1
+ import { Hardfork } from '@feelyourprotocol/common'
2
+ import { EthereumJSErrorWithoutCode } from '@feelyourprotocol/util'
3
+
4
+ import { handlers } from './functions.ts'
5
+ import { dynamicGasHandlers } from './gas.ts'
6
+ import { getFullname } from './util.ts'
7
+
8
+ import type { Common } from '@feelyourprotocol/common'
9
+ import { type CustomOpcode, isAddOpcode } from '../types.ts'
10
+ import type { OpHandler } from './functions.ts'
11
+ import type { AsyncDynamicGasHandler, SyncDynamicGasHandler } from './gas.ts'
12
+
13
+ export class Opcode {
14
+ readonly code: number
15
+ readonly name: string
16
+ readonly fullName: string
17
+ readonly fee: number
18
+ readonly feeBigInt: bigint
19
+ readonly isAsync: boolean
20
+ readonly dynamicGas: boolean
21
+ readonly isInvalid: boolean
22
+
23
+ constructor({
24
+ code,
25
+ name,
26
+ fullName,
27
+ fee,
28
+ isAsync,
29
+ dynamicGas,
30
+ }: {
31
+ code: number
32
+ name: string
33
+ fullName: string
34
+ fee: number
35
+ isAsync: boolean
36
+ dynamicGas: boolean
37
+ }) {
38
+ this.code = code
39
+ this.name = name
40
+ this.fullName = fullName
41
+ this.fee = fee
42
+ this.feeBigInt = BigInt(fee)
43
+ this.isAsync = isAsync
44
+ this.dynamicGas = dynamicGas
45
+ this.isInvalid = this.name === 'INVALID'
46
+
47
+ // Opcode isn't subject to change, thus all further modifications are prevented.
48
+ Object.freeze(this)
49
+ }
50
+ }
51
+
52
+ export type OpcodeList = Map<number, Opcode>
53
+ type OpcodeEntry = {
54
+ [key: number]: { name: string; isAsync: boolean; dynamicGas: boolean }
55
+ }
56
+ type OpcodeEntryFee = OpcodeEntry & { [key: number]: { fee: number } }
57
+
58
+ // Default: sync and no dynamic gas
59
+ const defaultOp = (name: string) => {
60
+ return { name, isAsync: false, dynamicGas: false }
61
+ }
62
+ const dynamicGasOp = (name: string) => {
63
+ return { name, isAsync: false, dynamicGas: true }
64
+ }
65
+ const asyncOp = (name: string) => {
66
+ return { name, isAsync: true, dynamicGas: false }
67
+ }
68
+ const asyncAndDynamicGasOp = (name: string) => {
69
+ return { name, isAsync: true, dynamicGas: true }
70
+ }
71
+
72
+ // Base opcode list. The opcode list is extended in future hardforks
73
+ const opcodes: OpcodeEntry = {
74
+ // 0x0 range - arithmetic ops
75
+ // name, async
76
+ 0x00: defaultOp('STOP'),
77
+ 0x01: defaultOp('ADD'),
78
+ 0x02: defaultOp('MUL'),
79
+ 0x03: defaultOp('SUB'),
80
+ 0x04: defaultOp('DIV'),
81
+ 0x05: defaultOp('SDIV'),
82
+ 0x06: defaultOp('MOD'),
83
+ 0x07: defaultOp('SMOD'),
84
+ 0x08: defaultOp('ADDMOD'),
85
+ 0x09: defaultOp('MULMOD'),
86
+ 0x0a: dynamicGasOp('EXP'),
87
+ 0x0b: defaultOp('SIGNEXTEND'),
88
+
89
+ // 0x10 range - bit ops
90
+ 0x10: defaultOp('LT'),
91
+ 0x11: defaultOp('GT'),
92
+ 0x12: defaultOp('SLT'),
93
+ 0x13: defaultOp('SGT'),
94
+ 0x14: defaultOp('EQ'),
95
+ 0x15: defaultOp('ISZERO'),
96
+ 0x16: defaultOp('AND'),
97
+ 0x17: defaultOp('OR'),
98
+ 0x18: defaultOp('XOR'),
99
+ 0x19: defaultOp('NOT'),
100
+ 0x1a: defaultOp('BYTE'),
101
+
102
+ // 0x20 range - crypto
103
+ 0x20: dynamicGasOp('KECCAK256'),
104
+
105
+ // 0x30 range - closure state
106
+ 0x30: asyncOp('ADDRESS'),
107
+ 0x31: asyncAndDynamicGasOp('BALANCE'),
108
+ 0x32: asyncOp('ORIGIN'),
109
+ 0x33: asyncOp('CALLER'),
110
+ 0x34: asyncOp('CALLVALUE'),
111
+ 0x35: asyncOp('CALLDATALOAD'),
112
+ 0x36: asyncOp('CALLDATASIZE'),
113
+ 0x37: asyncAndDynamicGasOp('CALLDATACOPY'),
114
+ 0x38: defaultOp('CODESIZE'),
115
+ 0x39: dynamicGasOp('CODECOPY'),
116
+ 0x3a: defaultOp('GASPRICE'),
117
+ 0x3b: asyncAndDynamicGasOp('EXTCODESIZE'),
118
+ 0x3c: asyncAndDynamicGasOp('EXTCODECOPY'),
119
+
120
+ // '0x40' range - block operations
121
+ 0x40: asyncOp('BLOCKHASH'),
122
+ 0x41: asyncOp('COINBASE'),
123
+ 0x42: asyncOp('TIMESTAMP'),
124
+ 0x43: asyncOp('NUMBER'),
125
+ 0x44: asyncOp('DIFFICULTY'),
126
+ 0x45: asyncOp('GASLIMIT'),
127
+
128
+ // 0x50 range - 'storage' and execution
129
+ 0x50: defaultOp('POP'),
130
+ 0x51: dynamicGasOp('MLOAD'),
131
+ 0x52: dynamicGasOp('MSTORE'),
132
+ 0x53: dynamicGasOp('MSTORE8'),
133
+ 0x54: asyncAndDynamicGasOp('SLOAD'),
134
+ 0x55: asyncAndDynamicGasOp('SSTORE'),
135
+ 0x56: defaultOp('JUMP'),
136
+ 0x57: defaultOp('JUMPI'),
137
+ 0x58: defaultOp('PC'),
138
+ 0x59: defaultOp('MSIZE'),
139
+ 0x5a: defaultOp('GAS'),
140
+ 0x5b: defaultOp('JUMPDEST'),
141
+
142
+ // 0x60, range
143
+ 0x60: defaultOp('PUSH'),
144
+ 0x61: defaultOp('PUSH'),
145
+ 0x62: defaultOp('PUSH'),
146
+ 0x63: defaultOp('PUSH'),
147
+ 0x64: defaultOp('PUSH'),
148
+ 0x65: defaultOp('PUSH'),
149
+ 0x66: defaultOp('PUSH'),
150
+ 0x67: defaultOp('PUSH'),
151
+ 0x68: defaultOp('PUSH'),
152
+ 0x69: defaultOp('PUSH'),
153
+ 0x6a: defaultOp('PUSH'),
154
+ 0x6b: defaultOp('PUSH'),
155
+ 0x6c: defaultOp('PUSH'),
156
+ 0x6d: defaultOp('PUSH'),
157
+ 0x6e: defaultOp('PUSH'),
158
+ 0x6f: defaultOp('PUSH'),
159
+ 0x70: defaultOp('PUSH'),
160
+ 0x71: defaultOp('PUSH'),
161
+ 0x72: defaultOp('PUSH'),
162
+ 0x73: defaultOp('PUSH'),
163
+ 0x74: defaultOp('PUSH'),
164
+ 0x75: defaultOp('PUSH'),
165
+ 0x76: defaultOp('PUSH'),
166
+ 0x77: defaultOp('PUSH'),
167
+ 0x78: defaultOp('PUSH'),
168
+ 0x79: defaultOp('PUSH'),
169
+ 0x7a: defaultOp('PUSH'),
170
+ 0x7b: defaultOp('PUSH'),
171
+ 0x7c: defaultOp('PUSH'),
172
+ 0x7d: defaultOp('PUSH'),
173
+ 0x7e: defaultOp('PUSH'),
174
+ 0x7f: defaultOp('PUSH'),
175
+
176
+ 0x80: defaultOp('DUP'),
177
+ 0x81: defaultOp('DUP'),
178
+ 0x82: defaultOp('DUP'),
179
+ 0x83: defaultOp('DUP'),
180
+ 0x84: defaultOp('DUP'),
181
+ 0x85: defaultOp('DUP'),
182
+ 0x86: defaultOp('DUP'),
183
+ 0x87: defaultOp('DUP'),
184
+ 0x88: defaultOp('DUP'),
185
+ 0x89: defaultOp('DUP'),
186
+ 0x8a: defaultOp('DUP'),
187
+ 0x8b: defaultOp('DUP'),
188
+ 0x8c: defaultOp('DUP'),
189
+ 0x8d: defaultOp('DUP'),
190
+ 0x8e: defaultOp('DUP'),
191
+ 0x8f: defaultOp('DUP'),
192
+
193
+ 0x90: defaultOp('SWAP'),
194
+ 0x91: defaultOp('SWAP'),
195
+ 0x92: defaultOp('SWAP'),
196
+ 0x93: defaultOp('SWAP'),
197
+ 0x94: defaultOp('SWAP'),
198
+ 0x95: defaultOp('SWAP'),
199
+ 0x96: defaultOp('SWAP'),
200
+ 0x97: defaultOp('SWAP'),
201
+ 0x98: defaultOp('SWAP'),
202
+ 0x99: defaultOp('SWAP'),
203
+ 0x9a: defaultOp('SWAP'),
204
+ 0x9b: defaultOp('SWAP'),
205
+ 0x9c: defaultOp('SWAP'),
206
+ 0x9d: defaultOp('SWAP'),
207
+ 0x9e: defaultOp('SWAP'),
208
+ 0x9f: defaultOp('SWAP'),
209
+
210
+ 0xa0: dynamicGasOp('LOG'),
211
+ 0xa1: dynamicGasOp('LOG'),
212
+ 0xa2: dynamicGasOp('LOG'),
213
+ 0xa3: dynamicGasOp('LOG'),
214
+ 0xa4: dynamicGasOp('LOG'),
215
+
216
+ // '0xf0' range - closures
217
+ 0xf0: asyncAndDynamicGasOp('CREATE'),
218
+ 0xf1: asyncAndDynamicGasOp('CALL'),
219
+ 0xf2: asyncAndDynamicGasOp('CALLCODE'),
220
+ 0xf3: dynamicGasOp('RETURN'),
221
+
222
+ // '0x70', range - other
223
+ 0xfe: defaultOp('INVALID'),
224
+ 0xff: asyncAndDynamicGasOp('SELFDESTRUCT'),
225
+ }
226
+
227
+ // Array of hard forks in order. These changes are repeatedly applied to `opcodes` until the hard fork is in the future based upon the common
228
+ // TODO: All gas price changes should be moved to common
229
+ // If the base gas cost of any of the operations change, then these should also be added to this list.
230
+ // If there are context variables changed (such as "warm slot reads") which are not the base gas fees,
231
+ // Then this does not have to be added.
232
+ const hardforkOpcodes: { hardfork: Hardfork; opcodes: OpcodeEntry }[] = [
233
+ {
234
+ hardfork: Hardfork.Homestead,
235
+ opcodes: {
236
+ 0xf4: asyncAndDynamicGasOp('DELEGATECALL'), // EIP-7
237
+ },
238
+ },
239
+ {
240
+ hardfork: Hardfork.TangerineWhistle,
241
+ opcodes: {
242
+ 0x54: asyncAndDynamicGasOp('SLOAD'),
243
+ 0xf1: asyncAndDynamicGasOp('CALL'),
244
+ 0xf2: asyncAndDynamicGasOp('CALLCODE'),
245
+ 0x3b: asyncAndDynamicGasOp('EXTCODESIZE'),
246
+ 0x3c: asyncAndDynamicGasOp('EXTCODECOPY'),
247
+ 0xf4: asyncAndDynamicGasOp('DELEGATECALL'), // EIP-7
248
+ 0xff: asyncAndDynamicGasOp('SELFDESTRUCT'),
249
+ 0x31: asyncAndDynamicGasOp('BALANCE'),
250
+ },
251
+ },
252
+ {
253
+ hardfork: Hardfork.Byzantium,
254
+ opcodes: {
255
+ 0xfd: dynamicGasOp('REVERT'), // EIP-140
256
+ 0xfa: asyncAndDynamicGasOp('STATICCALL'), // EIP-214
257
+ 0x3d: asyncOp('RETURNDATASIZE'), // EIP-211
258
+ 0x3e: asyncAndDynamicGasOp('RETURNDATACOPY'), // EIP-211
259
+ },
260
+ },
261
+ {
262
+ hardfork: Hardfork.Constantinople,
263
+ opcodes: {
264
+ 0x1b: defaultOp('SHL'), // EIP-145
265
+ 0x1c: defaultOp('SHR'), // EIP-145
266
+ 0x1d: defaultOp('SAR'), // EIP-145
267
+ 0x3f: asyncAndDynamicGasOp('EXTCODEHASH'), // EIP-1052
268
+ 0xf5: asyncAndDynamicGasOp('CREATE2'), // EIP-1014
269
+ },
270
+ },
271
+ {
272
+ hardfork: Hardfork.Istanbul,
273
+ opcodes: {
274
+ 0x46: defaultOp('CHAINID'), // EIP-1344
275
+ 0x47: defaultOp('SELFBALANCE'), // EIP-1884
276
+ },
277
+ },
278
+ {
279
+ hardfork: Hardfork.Paris,
280
+ opcodes: {
281
+ 0x44: asyncOp('PREVRANDAO'), // EIP-4399
282
+ },
283
+ },
284
+ ]
285
+
286
+ const eipOpcodes: { eip: number; opcodes: OpcodeEntry }[] = [
287
+ {
288
+ eip: 8024,
289
+ opcodes: {
290
+ 0xe6: defaultOp('DUPN'),
291
+ 0xe7: defaultOp('SWAPN'),
292
+ 0xe8: defaultOp('EXCHANGE'),
293
+ },
294
+ },
295
+ {
296
+ eip: 1153,
297
+ opcodes: {
298
+ 0x5c: defaultOp('TLOAD'),
299
+ 0x5d: defaultOp('TSTORE'),
300
+ },
301
+ },
302
+ {
303
+ eip: 3198,
304
+ opcodes: {
305
+ 0x48: defaultOp('BASEFEE'),
306
+ },
307
+ },
308
+ {
309
+ eip: 3855,
310
+ opcodes: {
311
+ 0x5f: defaultOp('PUSH0'),
312
+ },
313
+ },
314
+ {
315
+ eip: 4200,
316
+ opcodes: {
317
+ 0xe0: defaultOp('RJUMP'),
318
+ 0xe1: defaultOp('RJUMPI'),
319
+ 0xe2: defaultOp('RJUMPV'),
320
+ },
321
+ },
322
+ {
323
+ eip: 4750,
324
+ opcodes: {
325
+ 0xe3: defaultOp('CALLF'),
326
+ 0xe4: defaultOp('RETF'),
327
+ },
328
+ },
329
+ {
330
+ eip: 4844,
331
+ opcodes: {
332
+ 0x49: defaultOp('BLOBHASH'),
333
+ },
334
+ },
335
+ {
336
+ eip: 5656,
337
+ opcodes: {
338
+ 0x5e: dynamicGasOp('MCOPY'),
339
+ },
340
+ },
341
+ {
342
+ eip: 6206,
343
+ opcodes: {
344
+ 0xe5: defaultOp('JUMPF'),
345
+ },
346
+ },
347
+ {
348
+ eip: 7069,
349
+ opcodes: {
350
+ 0xf7: defaultOp('RETURNDATALOAD'),
351
+ 0xf8: asyncAndDynamicGasOp('EXTCALL'),
352
+ 0xf9: asyncAndDynamicGasOp('EXTDELEGATECALL'),
353
+ 0xfb: asyncAndDynamicGasOp('EXTSTATICCALL'),
354
+ },
355
+ },
356
+ {
357
+ eip: 7480,
358
+ opcodes: {
359
+ 0xd0: defaultOp('DATALOAD'),
360
+ 0xd1: defaultOp('DATALOADN'),
361
+ 0xd2: defaultOp('DATASIZE'),
362
+ 0xd3: dynamicGasOp('DATACOPY'),
363
+ },
364
+ },
365
+ {
366
+ eip: 7516,
367
+ opcodes: {
368
+ 0x4a: defaultOp('BLOBBASEFEE'),
369
+ },
370
+ },
371
+ {
372
+ eip: 7843,
373
+ opcodes: {
374
+ 0x4b: asyncOp('SLOTNUM'),
375
+ },
376
+ },
377
+ {
378
+ eip: 7620,
379
+ opcodes: {
380
+ 0xec: asyncAndDynamicGasOp('EOFCREATE'),
381
+ 0xee: asyncAndDynamicGasOp('RETURNCONTRACT'),
382
+ },
383
+ },
384
+ {
385
+ eip: 7939,
386
+ opcodes: {
387
+ 0x1e: defaultOp('CLZ'),
388
+ },
389
+ },
390
+ {
391
+ eip: 8141,
392
+ opcodes: {
393
+ 0xaa: asyncOp('APPROVE'),
394
+ 0xb0: defaultOp('TXPARAM'),
395
+ 0xb1: defaultOp('FRAMEDATALOAD'),
396
+ 0xb2: dynamicGasOp('FRAMEDATACOPY'),
397
+ },
398
+ },
399
+ ]
400
+
401
+ /**
402
+ * Convert basic opcode info dictionary into complete OpcodeList instance.
403
+ *
404
+ * @param opcodes {Object} Receive basic opcodes info dictionary.
405
+ * @returns {OpcodeList} Complete Opcode list
406
+ */
407
+ function createOpcodes(opcodes: OpcodeEntryFee): OpcodeList {
408
+ const result: OpcodeList = new Map()
409
+ for (const [key, value] of Object.entries(opcodes)) {
410
+ const code = parseInt(key, 10)
411
+ if (isNaN(value.fee)) value.fee = 0
412
+ result.set(
413
+ code,
414
+ new Opcode({
415
+ code,
416
+ fullName: getFullname(code, value.name),
417
+ ...value,
418
+ }),
419
+ )
420
+ }
421
+ return result
422
+ }
423
+
424
+ type OpcodeContext = {
425
+ dynamicGasHandlers: Map<number, AsyncDynamicGasHandler | SyncDynamicGasHandler>
426
+ handlers: Map<number, OpHandler>
427
+ opcodes: OpcodeList
428
+ opcodeMap: OpcodeMap
429
+ }
430
+
431
+ export type OpcodeMapEntry = {
432
+ opcodeInfo: Opcode
433
+ opHandler: OpHandler
434
+ gasHandler: AsyncDynamicGasHandler | SyncDynamicGasHandler
435
+ }
436
+ export type OpcodeMap = OpcodeMapEntry[]
437
+
438
+ /**
439
+ * Get suitable opcodes for the required hardfork.
440
+ *
441
+ * @param common {Common} Ethereumjs Common metadata object.
442
+ * @param customOpcodes List with custom opcodes (see EVM `customOpcodes` option description).
443
+ * @returns {OpcodeList} Opcodes dictionary object.
444
+ */
445
+ export function getOpcodesForHF(common: Common, customOpcodes?: CustomOpcode[]): OpcodeContext {
446
+ let opcodeBuilder: any = { ...opcodes }
447
+
448
+ const handlersCopy = new Map(handlers)
449
+ const dynamicGasHandlersCopy = new Map(dynamicGasHandlers)
450
+
451
+ for (let fork = 0; fork < hardforkOpcodes.length; fork++) {
452
+ if (common.gteHardfork(hardforkOpcodes[fork].hardfork)) {
453
+ opcodeBuilder = { ...opcodeBuilder, ...hardforkOpcodes[fork].opcodes }
454
+ }
455
+ }
456
+ for (const eipOps of eipOpcodes) {
457
+ if (common.isActivatedEIP(eipOps.eip)) {
458
+ opcodeBuilder = { ...opcodeBuilder, ...eipOps.opcodes }
459
+ }
460
+ }
461
+
462
+ for (const key in opcodeBuilder) {
463
+ const baseFee = Number(common.param(`${opcodeBuilder[key].name.toLowerCase()}Gas`))
464
+ // explicitly verify that we have defined a base fee
465
+ if (baseFee === undefined) {
466
+ throw EthereumJSErrorWithoutCode(`base fee not defined for: ${opcodeBuilder[key].name}`)
467
+ }
468
+ opcodeBuilder[key].fee = baseFee
469
+ }
470
+
471
+ if (customOpcodes) {
472
+ for (const _code of customOpcodes) {
473
+ const code = _code
474
+
475
+ if (!isAddOpcode(code)) {
476
+ delete opcodeBuilder[code.opcode]
477
+ continue
478
+ }
479
+
480
+ const entry = {
481
+ [code.opcode]: {
482
+ name: code.opcodeName,
483
+ isAsync: true,
484
+ dynamicGas: code.gasFunction !== undefined,
485
+ fee: code.baseFee,
486
+ feeBigInt: BigInt(code.baseFee),
487
+ },
488
+ }
489
+ opcodeBuilder = { ...opcodeBuilder, ...entry }
490
+ if (code.gasFunction !== undefined) {
491
+ dynamicGasHandlersCopy.set(code.opcode, code.gasFunction)
492
+ }
493
+ // logicFunction is never undefined
494
+ handlersCopy.set(code.opcode, code.logicFunction)
495
+ }
496
+ }
497
+
498
+ //const dynamicGasHandlers = dynamicGasHandlersCopy
499
+ //const handlers = handlersCopy
500
+ const ops = createOpcodes(opcodeBuilder)
501
+
502
+ const opcodeMap: OpcodeMap = []
503
+
504
+ for (const [opNumber, op] of ops) {
505
+ const dynamicGas = dynamicGasHandlersCopy.get(opNumber)!
506
+ const handler = handlersCopy.get(opNumber)!
507
+ opcodeMap[opNumber] = {
508
+ opcodeInfo: op,
509
+ opHandler: handler,
510
+ gasHandler: dynamicGas,
511
+ }
512
+ }
513
+
514
+ const INVALID = opcodeMap[0xfe]
515
+
516
+ for (let i = 0x0; i <= 0xff; i++) {
517
+ if (opcodeMap[i] === undefined) {
518
+ opcodeMap[i] = INVALID
519
+ }
520
+ }
521
+
522
+ return {
523
+ dynamicGasHandlers: dynamicGasHandlersCopy,
524
+ handlers: handlersCopy,
525
+ opcodes: ops,
526
+ opcodeMap,
527
+ }
528
+ }