@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,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Memory = void 0;
4
+ const util_1 = require("@feelyourprotocol/util");
5
+ const ceil = (value, ceiling) => {
6
+ const r = value % ceiling;
7
+ if (r === 0) {
8
+ return value;
9
+ }
10
+ else {
11
+ return value + ceiling - r;
12
+ }
13
+ };
14
+ const CONTAINER_SIZE = 8192;
15
+ /**
16
+ * Memory implements a simple memory model
17
+ * for the ethereum virtual machine.
18
+ */
19
+ class Memory {
20
+ constructor() {
21
+ this._store = new Uint8Array(CONTAINER_SIZE);
22
+ }
23
+ /**
24
+ * Extends the memory given an offset and size. Rounds extended
25
+ * memory to word-size.
26
+ */
27
+ extend(offset, size) {
28
+ if (size === 0) {
29
+ return;
30
+ }
31
+ const newSize = ceil(offset + size, 32);
32
+ const sizeDiff = newSize - this._store.length;
33
+ if (sizeDiff > 0) {
34
+ const expandBy = Math.ceil(sizeDiff / CONTAINER_SIZE) * CONTAINER_SIZE;
35
+ this._store = (0, util_1.concatBytes)(this._store, new Uint8Array(expandBy));
36
+ }
37
+ }
38
+ /**
39
+ * Writes a byte array with length `size` to memory, starting from `offset`.
40
+ * @param offset - Starting position
41
+ * @param size - How many bytes to write
42
+ * @param value - Value
43
+ */
44
+ write(offset, size, value) {
45
+ if (size === 0) {
46
+ return;
47
+ }
48
+ this.extend(offset, size);
49
+ if (value.length !== size)
50
+ throw (0, util_1.EthereumJSErrorWithoutCode)('Invalid value size');
51
+ if (offset + size > this._store.length)
52
+ throw (0, util_1.EthereumJSErrorWithoutCode)('Value exceeds memory capacity');
53
+ this._store.set(value, offset);
54
+ }
55
+ /**
56
+ * Reads a slice of memory from `offset` till `offset + size` as a `Uint8Array`.
57
+ * It fills up the difference between memory's length and `offset + size` with zeros.
58
+ * @param offset - Starting position
59
+ * @param size - How many bytes to read
60
+ * @param avoidCopy - Avoid memory copy if possible for performance reasons (optional)
61
+ */
62
+ read(offset, size, avoidCopy) {
63
+ this.extend(offset, size);
64
+ const loaded = this._store.subarray(offset, offset + size);
65
+ if (avoidCopy === true) {
66
+ return loaded;
67
+ }
68
+ const returnBytes = new Uint8Array(size);
69
+ // Copy the stored "buffer" from memory into the return Uint8Array
70
+ returnBytes.set(loaded);
71
+ return returnBytes;
72
+ }
73
+ }
74
+ exports.Memory = Memory;
75
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/memory.ts"],"names":[],"mappings":";;;AAAA,2CAA0E;AAE1E,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,OAAe,EAAU,EAAE;IACtD,MAAM,CAAC,GAAG,KAAK,GAAG,OAAO,CAAA;IACzB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACZ,OAAO,KAAK,CAAA;IACd,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,GAAG,OAAO,GAAG,CAAC,CAAA;IAC5B,CAAC;AACH,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,IAAI,CAAA;AAE3B;;;GAGG;AACH,MAAa,MAAM;IAGjB;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,cAAc,CAAC,CAAA;IAC9C,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAAc,EAAE,IAAY;QACjC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,EAAE,CAAC,CAAA;QACvC,MAAM,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA;QAC7C,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,GAAG,cAAc,CAAA;YACtE,IAAI,CAAC,MAAM,GAAG,IAAA,kBAAW,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAA;QAClE,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAc,EAAE,IAAY,EAAE,KAAiB;QACnD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAM;QACR,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;YAAE,MAAM,IAAA,iCAA0B,EAAC,oBAAoB,CAAC,CAAA;QACjF,IAAI,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;YACpC,MAAM,IAAA,iCAA0B,EAAC,+BAA+B,CAAC,CAAA;QAEnE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAChC,CAAC;IAED;;;;;;OAMG;IACH,IAAI,CAAC,MAAc,EAAE,IAAY,EAAE,SAAmB;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAA4B,CAAA;QACrF,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,MAAM,CAAA;QACf,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;QACxC,kEAAkE;QAClE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEvB,OAAO,WAAW,CAAA;IACpB,CAAC;CACF;AAhED,wBAgEC"}
@@ -0,0 +1,70 @@
1
+ import type { BinaryTreeAccessWitnessInterface } from '@feelyourprotocol/common';
2
+ import type { Address, PrefixedHexString } from '@feelyourprotocol/util';
3
+ import type { PrecompileFunc } from './precompiles/index.ts';
4
+ import type { EOFEnv, SelfdestructMap } from './types.ts';
5
+ interface MessageOpts {
6
+ to?: Address;
7
+ value?: bigint;
8
+ caller?: Address;
9
+ gasLimit: bigint;
10
+ data?: Uint8Array;
11
+ eofCallData?: Uint8Array;
12
+ depth?: number;
13
+ code?: Uint8Array | PrecompileFunc;
14
+ codeAddress?: Address;
15
+ isStatic?: boolean;
16
+ isCompiled?: boolean;
17
+ salt?: Uint8Array;
18
+ /**
19
+ * Selfdestructed addresses mapped to their beneficiary, see {@link Message.selfdestruct}
20
+ */
21
+ selfdestruct?: SelfdestructMap;
22
+ /**
23
+ * Map of addresses which were created (used in EIP 6780)
24
+ */
25
+ createdAddresses?: Set<PrefixedHexString>;
26
+ delegatecall?: boolean;
27
+ gasRefund?: bigint;
28
+ blobVersionedHashes?: PrefixedHexString[];
29
+ accessWitness?: BinaryTreeAccessWitnessInterface;
30
+ }
31
+ export declare class Message {
32
+ to?: Address;
33
+ value: bigint;
34
+ caller: Address;
35
+ gasLimit: bigint;
36
+ data: Uint8Array;
37
+ eofCallData?: Uint8Array;
38
+ isCreate?: boolean;
39
+ depth: number;
40
+ code?: Uint8Array | PrecompileFunc;
41
+ _codeAddress?: Address;
42
+ isStatic: boolean;
43
+ isCompiled: boolean;
44
+ salt?: Uint8Array;
45
+ eof?: EOFEnv;
46
+ chargeCodeAccesses?: boolean;
47
+ /**
48
+ * Selfdestructed addresses mapped to their beneficiary.
49
+ */
50
+ selfdestruct?: SelfdestructMap;
51
+ /**
52
+ * Map of addresses which were created (used in EIP 6780)
53
+ */
54
+ createdAddresses?: Set<PrefixedHexString>;
55
+ delegatecall: boolean;
56
+ gasRefund: bigint;
57
+ /**
58
+ * List of versioned hashes if message is a blob transaction in the outer VM
59
+ */
60
+ blobVersionedHashes?: PrefixedHexString[];
61
+ accessWitness?: BinaryTreeAccessWitnessInterface;
62
+ constructor(opts: MessageOpts);
63
+ /**
64
+ * Note: should only be called in instances where `_codeAddress` or `to` is defined.
65
+ */
66
+ get codeAddress(): Address;
67
+ }
68
+ export type MessageWithTo = Message & Pick<Required<MessageOpts>, 'to'>;
69
+ export {};
70
+ //# sourceMappingURL=message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/message.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAA;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAazD,UAAU,WAAW;IACnB,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,WAAW,CAAC,EAAE,UAAU,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,UAAU,GAAG,cAAc,CAAA;IAClC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB;;OAEG;IACH,YAAY,CAAC,EAAE,eAAe,CAAA;IAC9B;;OAEG;IACH,gBAAgB,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAA;IACzC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mBAAmB,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACzC,aAAa,CAAC,EAAE,gCAAgC,CAAA;CACjD;AAED,qBAAa,OAAO;IAClB,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,UAAU,CAAA;IAChB,WAAW,CAAC,EAAE,UAAU,CAAA;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,UAAU,GAAG,cAAc,CAAA;IAClC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;IACnB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;OAEG;IACH,YAAY,CAAC,EAAE,eAAe,CAAA;IAC9B;;OAEG;IACH,gBAAgB,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAA;IACzC,YAAY,EAAE,OAAO,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,mBAAmB,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACzC,aAAa,CAAC,EAAE,gCAAgC,CAAA;gBAEpC,IAAI,EAAE,WAAW;IAwB7B;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAMzB;CACF;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAA"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Message = void 0;
4
+ const util_1 = require("@feelyourprotocol/util");
5
+ const defaults = {
6
+ value: util_1.BIGINT_0,
7
+ caller: (0, util_1.createZeroAddress)(),
8
+ data: new Uint8Array(0),
9
+ depth: 0,
10
+ isStatic: false,
11
+ isCompiled: false,
12
+ delegatecall: false,
13
+ gasRefund: util_1.BIGINT_0,
14
+ };
15
+ class Message {
16
+ constructor(opts) {
17
+ this.to = opts.to;
18
+ this.value = opts.value ?? defaults.value;
19
+ this.caller = opts.caller ?? defaults.caller;
20
+ this.gasLimit = opts.gasLimit;
21
+ this.data = opts.data ?? defaults.data;
22
+ this.eofCallData = opts.eofCallData;
23
+ this.depth = opts.depth ?? defaults.depth;
24
+ this.code = opts.code;
25
+ this._codeAddress = opts.codeAddress;
26
+ this.isStatic = opts.isStatic ?? defaults.isStatic;
27
+ this.isCompiled = opts.isCompiled ?? defaults.isCompiled;
28
+ this.salt = opts.salt;
29
+ this.selfdestruct = opts.selfdestruct;
30
+ this.createdAddresses = opts.createdAddresses;
31
+ this.delegatecall = opts.delegatecall ?? defaults.delegatecall;
32
+ this.gasRefund = opts.gasRefund ?? defaults.gasRefund;
33
+ this.blobVersionedHashes = opts.blobVersionedHashes;
34
+ this.accessWitness = opts.accessWitness;
35
+ if (this.value < 0) {
36
+ throw (0, util_1.EthereumJSErrorWithoutCode)(`value field cannot be negative, received ${this.value}`);
37
+ }
38
+ }
39
+ /**
40
+ * Note: should only be called in instances where `_codeAddress` or `to` is defined.
41
+ */
42
+ get codeAddress() {
43
+ const codeAddress = this._codeAddress ?? this.to;
44
+ if (!codeAddress) {
45
+ throw (0, util_1.EthereumJSErrorWithoutCode)('Missing codeAddress');
46
+ }
47
+ return codeAddress;
48
+ }
49
+ }
50
+ exports.Message = Message;
51
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/message.ts"],"names":[],"mappings":";;;AAAA,2CAA0F;AAO1F,MAAM,QAAQ,GAAG;IACf,KAAK,EAAE,eAAQ;IACf,MAAM,EAAE,IAAA,wBAAiB,GAAE;IAC3B,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,KAAK;IACf,UAAU,EAAE,KAAK;IACjB,YAAY,EAAE,KAAK;IACnB,SAAS,EAAE,eAAQ;CACpB,CAAA;AA6BD,MAAa,OAAO;IAgClB,YAAY,IAAiB;QAC3B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAA;QACzC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAA;QAC5C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAA;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAA;QACzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAA;QAClD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAA;QACxD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;QACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY,CAAA;QAC9D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAA;QACrD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAA;QACnD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;QACvC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,IAAA,iCAA0B,EAAC,4CAA4C,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;QAC5F,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACb,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,EAAE,CAAA;QAChD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAA,iCAA0B,EAAC,qBAAqB,CAAC,CAAA;QACzD,CAAC;QACD,OAAO,WAAW,CAAA;IACpB,CAAC;CACF;AAlED,0BAkEC"}
@@ -0,0 +1,13 @@
1
+ import type { Common } from '@feelyourprotocol/common';
2
+ import type { RunState } from '../interpreter.ts';
3
+ /**
4
+ * Adjusts gas usage and refunds of SStore ops per EIP-1283 (Constantinople)
5
+ *
6
+ * @param {RunState} runState
7
+ * @param {Uint8Array} currentStorage
8
+ * @param {Uint8Array} originalStorage
9
+ * @param {Uint8Array} value
10
+ * @param {Common} common
11
+ */
12
+ export declare function updateSstoreGasEIP1283(runState: RunState, currentStorage: Uint8Array, originalStorage: Uint8Array, value: Uint8Array, common: Common): bigint;
13
+ //# sourceMappingURL=EIP1283.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EIP1283.d.ts","sourceRoot":"","sources":["../../../src/opcodes/EIP1283.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,UAAU,EAC1B,eAAe,EAAE,UAAU,EAC3B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,UAyDf"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateSstoreGasEIP1283 = updateSstoreGasEIP1283;
4
+ const util_1 = require("@feelyourprotocol/util");
5
+ /**
6
+ * Adjusts gas usage and refunds of SStore ops per EIP-1283 (Constantinople)
7
+ *
8
+ * @param {RunState} runState
9
+ * @param {Uint8Array} currentStorage
10
+ * @param {Uint8Array} originalStorage
11
+ * @param {Uint8Array} value
12
+ * @param {Common} common
13
+ */
14
+ function updateSstoreGasEIP1283(runState, currentStorage, originalStorage, value, common) {
15
+ if ((0, util_1.equalsBytes)(currentStorage, value)) {
16
+ // If current value equals new value (this is a no-op), 200 gas is deducted.
17
+ return common.param('netSstoreNoopGas');
18
+ }
19
+ // If current value does not equal new value
20
+ if ((0, util_1.equalsBytes)(originalStorage, currentStorage)) {
21
+ // If original value equals current value (this storage slot has not been changed by the current execution context)
22
+ if (originalStorage.length === 0) {
23
+ // If original value is 0, 20000 gas is deducted.
24
+ return common.param('netSstoreInitGas');
25
+ }
26
+ if (value.length === 0) {
27
+ // If new value is 0, add 15000 gas to refund counter.
28
+ runState.interpreter.refundGas(common.param('netSstoreClearRefundGas'), 'EIP-1283 -> netSstoreClearRefund');
29
+ }
30
+ // Otherwise, 5000 gas is deducted.
31
+ return common.param('netSstoreCleanGas');
32
+ }
33
+ // If original value does not equal current value (this storage slot is dirty), 200 gas is deducted. Apply both of the following clauses.
34
+ if (originalStorage.length !== 0) {
35
+ // If original value is not 0
36
+ if (currentStorage.length === 0) {
37
+ // If current value is 0 (also means that new value is not 0), remove 15000 gas from refund counter. We can prove that refund counter will never go below 0.
38
+ runState.interpreter.subRefund(common.param('netSstoreClearRefundGas'), 'EIP-1283 -> netSstoreClearRefund');
39
+ }
40
+ else if (value.length === 0) {
41
+ // If new value is 0 (also means that current value is not 0), add 15000 gas to refund counter.
42
+ runState.interpreter.refundGas(common.param('netSstoreClearRefundGas'), 'EIP-1283 -> netSstoreClearRefund');
43
+ }
44
+ }
45
+ if ((0, util_1.equalsBytes)(originalStorage, value)) {
46
+ // If original value equals new value (this storage slot is reset)
47
+ if (originalStorage.length === 0) {
48
+ // If original value is 0, add 19800 gas to refund counter.
49
+ runState.interpreter.refundGas(common.param('netSstoreResetClearRefundGas'), 'EIP-1283 -> netSstoreResetClearRefund');
50
+ }
51
+ else {
52
+ // Otherwise, add 4800 gas to refund counter.
53
+ runState.interpreter.refundGas(common.param('netSstoreResetRefundGas'), 'EIP-1283 -> netSstoreResetRefund');
54
+ }
55
+ }
56
+ return common.param('netSstoreDirtyGas');
57
+ }
58
+ //# sourceMappingURL=EIP1283.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EIP1283.js","sourceRoot":"","sources":["../../../src/opcodes/EIP1283.ts"],"names":[],"mappings":";;AAcA,wDA8DC;AA5ED,2CAA8C;AAK9C;;;;;;;;GAQG;AACH,SAAgB,sBAAsB,CACpC,QAAkB,EAClB,cAA0B,EAC1B,eAA2B,EAC3B,KAAiB,EACjB,MAAc;IAEd,IAAI,IAAA,kBAAW,EAAC,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC;QACvC,4EAA4E;QAC5E,OAAO,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;IACzC,CAAC;IACD,4CAA4C;IAC5C,IAAI,IAAA,kBAAW,EAAC,eAAe,EAAE,cAAc,CAAC,EAAE,CAAC;QACjD,mHAAmH;QACnH,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,iDAAiD;YACjD,OAAO,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;QACzC,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,sDAAsD;YACtD,QAAQ,CAAC,WAAW,CAAC,SAAS,CAC5B,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,EACvC,kCAAkC,CACnC,CAAA;QACH,CAAC;QACD,mCAAmC;QACnC,OAAO,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC1C,CAAC;IACD,yIAAyI;IACzI,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,6BAA6B;QAC7B,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,4JAA4J;YAC5J,QAAQ,CAAC,WAAW,CAAC,SAAS,CAC5B,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,EACvC,kCAAkC,CACnC,CAAA;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,+FAA+F;YAC/F,QAAQ,CAAC,WAAW,CAAC,SAAS,CAC5B,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,EACvC,kCAAkC,CACnC,CAAA;QACH,CAAC;IACH,CAAC;IACD,IAAI,IAAA,kBAAW,EAAC,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC;QACxC,kEAAkE;QAClE,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,2DAA2D;YAC3D,QAAQ,CAAC,WAAW,CAAC,SAAS,CAC5B,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,EAC5C,uCAAuC,CACxC,CAAA;QACH,CAAC;aAAM,CAAC;YACN,6CAA6C;YAC7C,QAAQ,CAAC,WAAW,CAAC,SAAS,CAC5B,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,EACvC,kCAAkC,CACnC,CAAA;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;AAC1C,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Common } from '@feelyourprotocol/common';
2
+ import type { RunState } from '../interpreter.ts';
3
+ /**
4
+ * Adjusts gas usage and refunds of SStore ops per EIP-2200 (Istanbul)
5
+ *
6
+ * @param {RunState} runState
7
+ * @param {Uint8Array} currentStorage
8
+ * @param {Uint8Array} originalStorage
9
+ * @param {Uint8Array} value
10
+ * @param {Common} common
11
+ */
12
+ export declare function updateSstoreGasEIP2200(runState: RunState, currentStorage: Uint8Array, originalStorage: Uint8Array, value: Uint8Array, key: Uint8Array, common: Common): bigint;
13
+ //# sourceMappingURL=EIP2200.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EIP2200.d.ts","sourceRoot":"","sources":["../../../src/opcodes/EIP2200.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,UAAU,EAC1B,eAAe,EAAE,UAAU,EAC3B,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,MAAM,UA6Df"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateSstoreGasEIP2200 = updateSstoreGasEIP2200;
4
+ const util_1 = require("@feelyourprotocol/util");
5
+ const errors_ts_1 = require("../errors.js");
6
+ const EIP2929_ts_1 = require("./EIP2929.js");
7
+ const util_ts_1 = require("./util.js");
8
+ /**
9
+ * Adjusts gas usage and refunds of SStore ops per EIP-2200 (Istanbul)
10
+ *
11
+ * @param {RunState} runState
12
+ * @param {Uint8Array} currentStorage
13
+ * @param {Uint8Array} originalStorage
14
+ * @param {Uint8Array} value
15
+ * @param {Common} common
16
+ */
17
+ function updateSstoreGasEIP2200(runState, currentStorage, originalStorage, value, key, common) {
18
+ // Fail if not enough gas is left
19
+ if (runState.interpreter.getGasLeft() <= common.param('sstoreSentryEIP2200Gas')) {
20
+ (0, util_ts_1.trap)(errors_ts_1.EVMError.errorMessages.OUT_OF_GAS);
21
+ }
22
+ // Noop
23
+ if ((0, util_1.equalsBytes)(currentStorage, value)) {
24
+ const sstoreNoopCost = common.param('sstoreNoopEIP2200Gas');
25
+ return (0, EIP2929_ts_1.adjustSstoreGasEIP2929)(runState, key, sstoreNoopCost, 'noop', common);
26
+ }
27
+ if ((0, util_1.equalsBytes)(originalStorage, currentStorage)) {
28
+ // Create slot
29
+ if (originalStorage.length === 0) {
30
+ return common.param('sstoreInitEIP2200Gas');
31
+ }
32
+ // Delete slot
33
+ if (value.length === 0) {
34
+ runState.interpreter.refundGas(common.param('sstoreClearRefundEIP2200Gas'), 'EIP-2200 -> sstoreClearRefundEIP2200');
35
+ }
36
+ // Write existing slot
37
+ return common.param('sstoreCleanEIP2200Gas');
38
+ }
39
+ if (originalStorage.length > 0) {
40
+ if (currentStorage.length === 0) {
41
+ // Recreate slot
42
+ runState.interpreter.subRefund(common.param('sstoreClearRefundEIP2200Gas'), 'EIP-2200 -> sstoreClearRefundEIP2200');
43
+ }
44
+ else if (value.length === 0) {
45
+ // Delete slot
46
+ runState.interpreter.refundGas(common.param('sstoreClearRefundEIP2200Gas'), 'EIP-2200 -> sstoreClearRefundEIP2200');
47
+ }
48
+ }
49
+ if ((0, util_1.equalsBytes)(originalStorage, value)) {
50
+ if (originalStorage.length === 0) {
51
+ // Reset to original non-existent slot
52
+ const sstoreInitRefund = common.param('sstoreInitRefundEIP2200Gas');
53
+ runState.interpreter.refundGas((0, EIP2929_ts_1.adjustSstoreGasEIP2929)(runState, key, sstoreInitRefund, 'initRefund', common), 'EIP-2200 -> initRefund');
54
+ }
55
+ else {
56
+ // Reset to original existing slot
57
+ const sstoreCleanRefund = common.param('sstoreCleanRefundEIP2200Gas');
58
+ runState.interpreter.refundGas(BigInt((0, EIP2929_ts_1.adjustSstoreGasEIP2929)(runState, key, sstoreCleanRefund, 'cleanRefund', common)), 'EIP-2200 -> cleanRefund');
59
+ }
60
+ }
61
+ // Dirty update
62
+ return common.param('sstoreDirtyEIP2200Gas');
63
+ }
64
+ //# sourceMappingURL=EIP2200.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EIP2200.js","sourceRoot":"","sources":["../../../src/opcodes/EIP2200.ts"],"names":[],"mappings":";;AAmBA,wDAmEC;AAtFD,2CAA8C;AAE9C,4CAAuC;AAEvC,6CAAqD;AACrD,uCAAgC;AAKhC;;;;;;;;GAQG;AACH,SAAgB,sBAAsB,CACpC,QAAkB,EAClB,cAA0B,EAC1B,eAA2B,EAC3B,KAAiB,EACjB,GAAe,EACf,MAAc;IAEd,iCAAiC;IACjC,IAAI,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAChF,IAAA,cAAI,EAAC,oBAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;IACzC,CAAC;IAED,OAAO;IACP,IAAI,IAAA,kBAAW,EAAC,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;QAC3D,OAAO,IAAA,mCAAsB,EAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9E,CAAC;IACD,IAAI,IAAA,kBAAW,EAAC,eAAe,EAAE,cAAc,CAAC,EAAE,CAAC;QACjD,cAAc;QACd,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;QAC7C,CAAC;QACD,cAAc;QACd,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,WAAW,CAAC,SAAS,CAC5B,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,EAC3C,sCAAsC,CACvC,CAAA;QACH,CAAC;QACD,sBAAsB;QACtB,OAAO,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;IAC9C,CAAC;IACD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,gBAAgB;YAChB,QAAQ,CAAC,WAAW,CAAC,SAAS,CAC5B,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,EAC3C,sCAAsC,CACvC,CAAA;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,cAAc;YACd,QAAQ,CAAC,WAAW,CAAC,SAAS,CAC5B,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,EAC3C,sCAAsC,CACvC,CAAA;QACH,CAAC;IACH,CAAC;IACD,IAAI,IAAA,kBAAW,EAAC,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC;QACxC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,sCAAsC;YACtC,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAA;YACnE,QAAQ,CAAC,WAAW,CAAC,SAAS,CAC5B,IAAA,mCAAsB,EAAC,QAAQ,EAAE,GAAG,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,CAAC,EAC7E,wBAAwB,CACzB,CAAA;QACH,CAAC;aAAM,CAAC;YACN,kCAAkC;YAClC,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;YACrE,QAAQ,CAAC,WAAW,CAAC,SAAS,CAC5B,MAAM,CAAC,IAAA,mCAAsB,EAAC,QAAQ,EAAE,GAAG,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,EACvF,yBAAyB,CAC1B,CAAA;QACH,CAAC;IACH,CAAC;IACD,eAAe;IACf,OAAO,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;AAC9C,CAAC"}
@@ -0,0 +1,68 @@
1
+ import type { Common } from '@feelyourprotocol/common';
2
+ import type { RunState } from '../interpreter.ts';
3
+ /**
4
+ * Returns the gas cost for accessing an address WITHOUT any side effects.
5
+ * Use this to check if you have enough gas before committing to the access.
6
+ *
7
+ * @param {RunState} runState
8
+ * @param {Uint8Array} address
9
+ * @param {Common} common
10
+ * @param {Boolean} chargeGas (default: true)
11
+ * @param {Boolean} isSelfdestruct (default: false)
12
+ * @returns {bigint} The gas cost for this address access
13
+ */
14
+ export declare function getAddressAccessCost(runState: RunState, address: Uint8Array, common: Common, chargeGas?: boolean, isSelfdestruct?: boolean): bigint;
15
+ /**
16
+ * Warms an address (adds to EIP-2929 accessed addresses set).
17
+ * Call this AFTER verifying you have enough gas for the access.
18
+ *
19
+ * @param {RunState} runState
20
+ * @param {Uint8Array} address
21
+ */
22
+ export declare function warmAddress(runState: RunState, address: Uint8Array): void;
23
+ /**
24
+ * Adds address to BAL (Block Access List) for EIP-7928.
25
+ * Call this AFTER verifying you have enough gas for the access.
26
+ *
27
+ * @param {RunState} runState
28
+ * @param {Uint8Array} address
29
+ * @param {Common} common
30
+ */
31
+ export declare function addAddressToBAL(runState: RunState, address: Uint8Array, common: Common): void;
32
+ /**
33
+ * Adds address to accessedAddresses set if not already included.
34
+ * Adjusts cost incurred for executing opcode based on whether address read
35
+ * is warm/cold. (EIP 2929)
36
+ *
37
+ * This is a convenience function that combines getAddressAccessCost + warmAddress.
38
+ * For fine-grained control (e.g., EIP-7928 BAL with OOG checks), use the
39
+ * individual functions instead.
40
+ *
41
+ * @param {RunState} runState
42
+ * @param {Uint8Array} address
43
+ * @param {Common} common
44
+ * @param {Boolean} chargeGas (default: true)
45
+ * @param {Boolean} isSelfdestruct (default: false)
46
+ */
47
+ export declare function accessAddressEIP2929(runState: RunState, address: Uint8Array, common: Common, chargeGas?: boolean, isSelfdestruct?: boolean): bigint;
48
+ /**
49
+ * Adds (address, key) to accessedStorage tuple set if not already included.
50
+ * Adjusts cost incurred for executing opcode based on whether storage read
51
+ * is warm/cold. (EIP 2929)
52
+ * @param {RunState} runState
53
+ * @param {Uint8Array} key (to storage slot)
54
+ * @param {Common} common
55
+ */
56
+ export declare function accessStorageEIP2929(runState: RunState, key: Uint8Array, isSstore: boolean, common: Common, chargeGas?: boolean): bigint;
57
+ /**
58
+ * Adjusts cost of SSTORE_RESET_GAS or SLOAD (aka sstorenoop) (EIP-2200) downward when storage
59
+ * location is already warm
60
+ * @param {RunState} runState
61
+ * @param {Uint8Array} key storage slot
62
+ * @param {BigInt} defaultCost SSTORE_RESET_GAS / SLOAD
63
+ * @param {string} costName parameter name ('noop')
64
+ * @param {Common} common
65
+ * @return {BigInt} adjusted cost
66
+ */
67
+ export declare function adjustSstoreGasEIP2929(runState: RunState, key: Uint8Array, defaultCost: bigint, costName: string, common: Common): bigint;
68
+ //# sourceMappingURL=EIP2929.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EIP2929.d.ts","sourceRoot":"","sources":["../../../src/opcodes/EIP2929.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,UAAO,EAChB,cAAc,UAAQ,GACrB,MAAM,CAqBR;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAIzE;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAK7F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,UAAO,EAChB,cAAc,UAAQ,GACrB,MAAM,CAMR;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,MAAM,EACd,SAAS,UAAO,GACf,MAAM,CAmBR;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,UAAU,EACf,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,MAAM,CAmBR"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAddressAccessCost = getAddressAccessCost;
4
+ exports.warmAddress = warmAddress;
5
+ exports.addAddressToBAL = addAddressToBAL;
6
+ exports.accessAddressEIP2929 = accessAddressEIP2929;
7
+ exports.accessStorageEIP2929 = accessStorageEIP2929;
8
+ exports.adjustSstoreGasEIP2929 = adjustSstoreGasEIP2929;
9
+ const util_1 = require("@feelyourprotocol/util");
10
+ /**
11
+ * Returns the gas cost for accessing an address WITHOUT any side effects.
12
+ * Use this to check if you have enough gas before committing to the access.
13
+ *
14
+ * @param {RunState} runState
15
+ * @param {Uint8Array} address
16
+ * @param {Common} common
17
+ * @param {Boolean} chargeGas (default: true)
18
+ * @param {Boolean} isSelfdestruct (default: false)
19
+ * @returns {bigint} The gas cost for this address access
20
+ */
21
+ function getAddressAccessCost(runState, address, common, chargeGas = true, isSelfdestruct = false) {
22
+ if (!common.isActivatedEIP(2929))
23
+ return util_1.BIGINT_0;
24
+ const isCold = !runState.interpreter.journal.isWarmedAddress(address);
25
+ if (isCold) {
26
+ // CREATE, CREATE2 opcodes have the address warmed for free.
27
+ // selfdestruct beneficiary address reads are charged an *additional* cold access
28
+ // if binary tree not activated
29
+ if (chargeGas && !common.isActivatedEIP(7864)) {
30
+ return common.param('coldaccountaccessGas');
31
+ }
32
+ else if (chargeGas && common.isActivatedEIP(7864)) {
33
+ // If binary tree is active, then the warmstoragereadGas should still be charged
34
+ // This is because otherwise opcodes will have cost 0 (this is thus the base fee)
35
+ return common.param('warmstoragereadGas');
36
+ }
37
+ }
38
+ else if (chargeGas && !isSelfdestruct) {
39
+ // Warm: (selfdestruct beneficiary address reads are not charged when warm)
40
+ return common.param('warmstoragereadGas');
41
+ }
42
+ return util_1.BIGINT_0;
43
+ }
44
+ /**
45
+ * Warms an address (adds to EIP-2929 accessed addresses set).
46
+ * Call this AFTER verifying you have enough gas for the access.
47
+ *
48
+ * @param {RunState} runState
49
+ * @param {Uint8Array} address
50
+ */
51
+ function warmAddress(runState, address) {
52
+ if (!runState.interpreter.journal.isWarmedAddress(address)) {
53
+ runState.interpreter.journal.addWarmedAddress(address);
54
+ }
55
+ }
56
+ /**
57
+ * Adds address to BAL (Block Access List) for EIP-7928.
58
+ * Call this AFTER verifying you have enough gas for the access.
59
+ *
60
+ * @param {RunState} runState
61
+ * @param {Uint8Array} address
62
+ * @param {Common} common
63
+ */
64
+ function addAddressToBAL(runState, address, common) {
65
+ if (common.isActivatedEIP(7928)) {
66
+ const addressHex = (0, util_1.bytesToHex)(address);
67
+ runState.interpreter._evm.blockLevelAccessList?.addAddress(addressHex);
68
+ }
69
+ }
70
+ /**
71
+ * Adds address to accessedAddresses set if not already included.
72
+ * Adjusts cost incurred for executing opcode based on whether address read
73
+ * is warm/cold. (EIP 2929)
74
+ *
75
+ * This is a convenience function that combines getAddressAccessCost + warmAddress.
76
+ * For fine-grained control (e.g., EIP-7928 BAL with OOG checks), use the
77
+ * individual functions instead.
78
+ *
79
+ * @param {RunState} runState
80
+ * @param {Uint8Array} address
81
+ * @param {Common} common
82
+ * @param {Boolean} chargeGas (default: true)
83
+ * @param {Boolean} isSelfdestruct (default: false)
84
+ */
85
+ function accessAddressEIP2929(runState, address, common, chargeGas = true, isSelfdestruct = false) {
86
+ if (!common.isActivatedEIP(2929))
87
+ return util_1.BIGINT_0;
88
+ const cost = getAddressAccessCost(runState, address, common, chargeGas, isSelfdestruct);
89
+ warmAddress(runState, address);
90
+ return cost;
91
+ }
92
+ /**
93
+ * Adds (address, key) to accessedStorage tuple set if not already included.
94
+ * Adjusts cost incurred for executing opcode based on whether storage read
95
+ * is warm/cold. (EIP 2929)
96
+ * @param {RunState} runState
97
+ * @param {Uint8Array} key (to storage slot)
98
+ * @param {Common} common
99
+ */
100
+ function accessStorageEIP2929(runState, key, isSstore, common, chargeGas = true) {
101
+ if (!common.isActivatedEIP(2929))
102
+ return util_1.BIGINT_0;
103
+ const address = runState.interpreter.getAddress().bytes;
104
+ const slotIsCold = !runState.interpreter.journal.isWarmedStorage(address, key);
105
+ // Cold (SLOAD and SSTORE)
106
+ if (slotIsCold) {
107
+ runState.interpreter.journal.addWarmedStorage(address, key);
108
+ if (chargeGas && !(common.isActivatedEIP(6800) || common.isActivatedEIP(7864))) {
109
+ return common.param('coldsloadGas');
110
+ }
111
+ }
112
+ else if (chargeGas &&
113
+ (!isSstore || common.isActivatedEIP(6800) || common.isActivatedEIP(7864))) {
114
+ return common.param('warmstoragereadGas');
115
+ }
116
+ return util_1.BIGINT_0;
117
+ }
118
+ /**
119
+ * Adjusts cost of SSTORE_RESET_GAS or SLOAD (aka sstorenoop) (EIP-2200) downward when storage
120
+ * location is already warm
121
+ * @param {RunState} runState
122
+ * @param {Uint8Array} key storage slot
123
+ * @param {BigInt} defaultCost SSTORE_RESET_GAS / SLOAD
124
+ * @param {string} costName parameter name ('noop')
125
+ * @param {Common} common
126
+ * @return {BigInt} adjusted cost
127
+ */
128
+ function adjustSstoreGasEIP2929(runState, key, defaultCost, costName, common) {
129
+ if (!common.isActivatedEIP(2929))
130
+ return defaultCost;
131
+ const address = runState.interpreter.getAddress().bytes;
132
+ const warmRead = common.param('warmstoragereadGas');
133
+ const coldSload = common.param('coldsloadGas');
134
+ if (runState.interpreter.journal.isWarmedStorage(address, key)) {
135
+ switch (costName) {
136
+ case 'noop':
137
+ return warmRead;
138
+ case 'initRefund':
139
+ return common.param('sstoreInitEIP2200Gas') - warmRead;
140
+ case 'cleanRefund':
141
+ return common.param('sstoreResetGas') - coldSload - warmRead;
142
+ }
143
+ }
144
+ return defaultCost;
145
+ }
146
+ //# sourceMappingURL=EIP2929.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EIP2929.js","sourceRoot":"","sources":["../../../src/opcodes/EIP2929.ts"],"names":[],"mappings":"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"}