ethereum-execution 2.18.0rc6.dev2__py3-none-any.whl

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 (816) hide show
  1. ethereum/__init__.py +30 -0
  2. ethereum/assets/blocks/block_1.json +22 -0
  3. ethereum/assets/blocks/block_1234567.json +22 -0
  4. ethereum/assets/blocks/block_12964999.json +2720 -0
  5. ethereum/assets/cache_sizes_2048_epochs.json +329 -0
  6. ethereum/assets/dataset_sizes_2048_epochs.json +412 -0
  7. ethereum/assets/mainnet.json +26711 -0
  8. ethereum/crypto/__init__.py +3 -0
  9. ethereum/crypto/blake2.py +265 -0
  10. ethereum/crypto/elliptic_curve.py +170 -0
  11. ethereum/crypto/hash.py +56 -0
  12. ethereum/crypto/kzg.py +176 -0
  13. ethereum/ethash.py +426 -0
  14. ethereum/exceptions.py +75 -0
  15. ethereum/fork_criteria.py +205 -0
  16. ethereum/forks/arrow_glacier/__init__.py +33 -0
  17. ethereum/forks/arrow_glacier/blocks.py +326 -0
  18. ethereum/forks/arrow_glacier/bloom.py +87 -0
  19. ethereum/forks/arrow_glacier/exceptions.py +58 -0
  20. ethereum/forks/arrow_glacier/fork.py +954 -0
  21. ethereum/forks/arrow_glacier/fork_types.py +62 -0
  22. ethereum/forks/arrow_glacier/state.py +644 -0
  23. ethereum/forks/arrow_glacier/transactions.py +573 -0
  24. ethereum/forks/arrow_glacier/trie.py +498 -0
  25. ethereum/forks/arrow_glacier/utils/__init__.py +3 -0
  26. ethereum/forks/arrow_glacier/utils/address.py +94 -0
  27. ethereum/forks/arrow_glacier/utils/hexadecimal.py +55 -0
  28. ethereum/forks/arrow_glacier/utils/message.py +90 -0
  29. ethereum/forks/arrow_glacier/vm/__init__.py +195 -0
  30. ethereum/forks/arrow_glacier/vm/exceptions.py +131 -0
  31. ethereum/forks/arrow_glacier/vm/gas.py +245 -0
  32. ethereum/forks/arrow_glacier/vm/instructions/__init__.py +353 -0
  33. ethereum/forks/arrow_glacier/vm/instructions/arithmetic.py +373 -0
  34. ethereum/forks/arrow_glacier/vm/instructions/bitwise.py +245 -0
  35. ethereum/forks/arrow_glacier/vm/instructions/block.py +212 -0
  36. ethereum/forks/arrow_glacier/vm/instructions/comparison.py +177 -0
  37. ethereum/forks/arrow_glacier/vm/instructions/control_flow.py +171 -0
  38. ethereum/forks/arrow_glacier/vm/instructions/environment.py +544 -0
  39. ethereum/forks/arrow_glacier/vm/instructions/keccak.py +63 -0
  40. ethereum/forks/arrow_glacier/vm/instructions/log.py +88 -0
  41. ethereum/forks/arrow_glacier/vm/instructions/memory.py +141 -0
  42. ethereum/forks/arrow_glacier/vm/instructions/stack.py +204 -0
  43. ethereum/forks/arrow_glacier/vm/instructions/storage.py +126 -0
  44. ethereum/forks/arrow_glacier/vm/instructions/system.py +694 -0
  45. ethereum/forks/arrow_glacier/vm/interpreter.py +312 -0
  46. ethereum/forks/arrow_glacier/vm/memory.py +84 -0
  47. ethereum/forks/arrow_glacier/vm/precompiled_contracts/__init__.py +37 -0
  48. ethereum/forks/arrow_glacier/vm/precompiled_contracts/alt_bn128.py +230 -0
  49. ethereum/forks/arrow_glacier/vm/precompiled_contracts/blake2f.py +42 -0
  50. ethereum/forks/arrow_glacier/vm/precompiled_contracts/ecrecover.py +64 -0
  51. ethereum/forks/arrow_glacier/vm/precompiled_contracts/identity.py +39 -0
  52. ethereum/forks/arrow_glacier/vm/precompiled_contracts/mapping.py +46 -0
  53. ethereum/forks/arrow_glacier/vm/precompiled_contracts/modexp.py +166 -0
  54. ethereum/forks/arrow_glacier/vm/precompiled_contracts/ripemd160.py +44 -0
  55. ethereum/forks/arrow_glacier/vm/precompiled_contracts/sha256.py +41 -0
  56. ethereum/forks/arrow_glacier/vm/runtime.py +69 -0
  57. ethereum/forks/arrow_glacier/vm/stack.py +58 -0
  58. ethereum/forks/berlin/__init__.py +43 -0
  59. ethereum/forks/berlin/blocks.py +297 -0
  60. ethereum/forks/berlin/bloom.py +87 -0
  61. ethereum/forks/berlin/exceptions.py +24 -0
  62. ethereum/forks/berlin/fork.py +839 -0
  63. ethereum/forks/berlin/fork_types.py +62 -0
  64. ethereum/forks/berlin/state.py +644 -0
  65. ethereum/forks/berlin/transactions.py +456 -0
  66. ethereum/forks/berlin/trie.py +498 -0
  67. ethereum/forks/berlin/utils/__init__.py +3 -0
  68. ethereum/forks/berlin/utils/address.py +94 -0
  69. ethereum/forks/berlin/utils/hexadecimal.py +55 -0
  70. ethereum/forks/berlin/utils/message.py +90 -0
  71. ethereum/forks/berlin/vm/__init__.py +194 -0
  72. ethereum/forks/berlin/vm/exceptions.py +123 -0
  73. ethereum/forks/berlin/vm/gas.py +246 -0
  74. ethereum/forks/berlin/vm/instructions/__init__.py +351 -0
  75. ethereum/forks/berlin/vm/instructions/arithmetic.py +373 -0
  76. ethereum/forks/berlin/vm/instructions/bitwise.py +245 -0
  77. ethereum/forks/berlin/vm/instructions/block.py +212 -0
  78. ethereum/forks/berlin/vm/instructions/comparison.py +177 -0
  79. ethereum/forks/berlin/vm/instructions/control_flow.py +171 -0
  80. ethereum/forks/berlin/vm/instructions/environment.py +521 -0
  81. ethereum/forks/berlin/vm/instructions/keccak.py +63 -0
  82. ethereum/forks/berlin/vm/instructions/log.py +88 -0
  83. ethereum/forks/berlin/vm/instructions/memory.py +141 -0
  84. ethereum/forks/berlin/vm/instructions/stack.py +204 -0
  85. ethereum/forks/berlin/vm/instructions/storage.py +126 -0
  86. ethereum/forks/berlin/vm/instructions/system.py +706 -0
  87. ethereum/forks/berlin/vm/interpreter.py +308 -0
  88. ethereum/forks/berlin/vm/memory.py +84 -0
  89. ethereum/forks/berlin/vm/precompiled_contracts/__init__.py +37 -0
  90. ethereum/forks/berlin/vm/precompiled_contracts/alt_bn128.py +230 -0
  91. ethereum/forks/berlin/vm/precompiled_contracts/blake2f.py +42 -0
  92. ethereum/forks/berlin/vm/precompiled_contracts/ecrecover.py +64 -0
  93. ethereum/forks/berlin/vm/precompiled_contracts/identity.py +39 -0
  94. ethereum/forks/berlin/vm/precompiled_contracts/mapping.py +46 -0
  95. ethereum/forks/berlin/vm/precompiled_contracts/modexp.py +166 -0
  96. ethereum/forks/berlin/vm/precompiled_contracts/ripemd160.py +44 -0
  97. ethereum/forks/berlin/vm/precompiled_contracts/sha256.py +41 -0
  98. ethereum/forks/berlin/vm/runtime.py +69 -0
  99. ethereum/forks/berlin/vm/stack.py +58 -0
  100. ethereum/forks/byzantium/__init__.py +50 -0
  101. ethereum/forks/byzantium/blocks.py +265 -0
  102. ethereum/forks/byzantium/bloom.py +87 -0
  103. ethereum/forks/byzantium/fork.py +816 -0
  104. ethereum/forks/byzantium/fork_types.py +61 -0
  105. ethereum/forks/byzantium/state.py +583 -0
  106. ethereum/forks/byzantium/transactions.py +261 -0
  107. ethereum/forks/byzantium/trie.py +498 -0
  108. ethereum/forks/byzantium/utils/__init__.py +3 -0
  109. ethereum/forks/byzantium/utils/address.py +63 -0
  110. ethereum/forks/byzantium/utils/hexadecimal.py +55 -0
  111. ethereum/forks/byzantium/utils/message.py +80 -0
  112. ethereum/forks/byzantium/vm/__init__.py +186 -0
  113. ethereum/forks/byzantium/vm/exceptions.py +123 -0
  114. ethereum/forks/byzantium/vm/gas.py +245 -0
  115. ethereum/forks/byzantium/vm/instructions/__init__.py +337 -0
  116. ethereum/forks/byzantium/vm/instructions/arithmetic.py +373 -0
  117. ethereum/forks/byzantium/vm/instructions/bitwise.py +153 -0
  118. ethereum/forks/byzantium/vm/instructions/block.py +189 -0
  119. ethereum/forks/byzantium/vm/instructions/comparison.py +177 -0
  120. ethereum/forks/byzantium/vm/instructions/control_flow.py +171 -0
  121. ethereum/forks/byzantium/vm/instructions/environment.py +436 -0
  122. ethereum/forks/byzantium/vm/instructions/keccak.py +63 -0
  123. ethereum/forks/byzantium/vm/instructions/log.py +88 -0
  124. ethereum/forks/byzantium/vm/instructions/memory.py +141 -0
  125. ethereum/forks/byzantium/vm/instructions/stack.py +204 -0
  126. ethereum/forks/byzantium/vm/instructions/storage.py +88 -0
  127. ethereum/forks/byzantium/vm/instructions/system.py +601 -0
  128. ethereum/forks/byzantium/vm/interpreter.py +299 -0
  129. ethereum/forks/byzantium/vm/memory.py +84 -0
  130. ethereum/forks/byzantium/vm/precompiled_contracts/__init__.py +36 -0
  131. ethereum/forks/byzantium/vm/precompiled_contracts/alt_bn128.py +230 -0
  132. ethereum/forks/byzantium/vm/precompiled_contracts/ecrecover.py +64 -0
  133. ethereum/forks/byzantium/vm/precompiled_contracts/identity.py +39 -0
  134. ethereum/forks/byzantium/vm/precompiled_contracts/mapping.py +43 -0
  135. ethereum/forks/byzantium/vm/precompiled_contracts/modexp.py +168 -0
  136. ethereum/forks/byzantium/vm/precompiled_contracts/ripemd160.py +44 -0
  137. ethereum/forks/byzantium/vm/precompiled_contracts/sha256.py +41 -0
  138. ethereum/forks/byzantium/vm/runtime.py +69 -0
  139. ethereum/forks/byzantium/vm/stack.py +58 -0
  140. ethereum/forks/cancun/__init__.py +49 -0
  141. ethereum/forks/cancun/blocks.py +389 -0
  142. ethereum/forks/cancun/bloom.py +87 -0
  143. ethereum/forks/cancun/exceptions.py +109 -0
  144. ethereum/forks/cancun/fork.py +881 -0
  145. ethereum/forks/cancun/fork_types.py +63 -0
  146. ethereum/forks/cancun/state.py +667 -0
  147. ethereum/forks/cancun/transactions.py +721 -0
  148. ethereum/forks/cancun/trie.py +508 -0
  149. ethereum/forks/cancun/utils/__init__.py +3 -0
  150. ethereum/forks/cancun/utils/address.py +94 -0
  151. ethereum/forks/cancun/utils/hexadecimal.py +55 -0
  152. ethereum/forks/cancun/utils/message.py +90 -0
  153. ethereum/forks/cancun/vm/__init__.py +186 -0
  154. ethereum/forks/cancun/vm/exceptions.py +139 -0
  155. ethereum/forks/cancun/vm/gas.py +372 -0
  156. ethereum/forks/cancun/vm/instructions/__init__.py +365 -0
  157. ethereum/forks/cancun/vm/instructions/arithmetic.py +373 -0
  158. ethereum/forks/cancun/vm/instructions/bitwise.py +245 -0
  159. ethereum/forks/cancun/vm/instructions/block.py +261 -0
  160. ethereum/forks/cancun/vm/instructions/comparison.py +177 -0
  161. ethereum/forks/cancun/vm/instructions/control_flow.py +171 -0
  162. ethereum/forks/cancun/vm/instructions/environment.py +600 -0
  163. ethereum/forks/cancun/vm/instructions/keccak.py +63 -0
  164. ethereum/forks/cancun/vm/instructions/log.py +88 -0
  165. ethereum/forks/cancun/vm/instructions/memory.py +177 -0
  166. ethereum/forks/cancun/vm/instructions/stack.py +208 -0
  167. ethereum/forks/cancun/vm/instructions/storage.py +188 -0
  168. ethereum/forks/cancun/vm/instructions/system.py +708 -0
  169. ethereum/forks/cancun/vm/interpreter.py +302 -0
  170. ethereum/forks/cancun/vm/memory.py +84 -0
  171. ethereum/forks/cancun/vm/precompiled_contracts/__init__.py +39 -0
  172. ethereum/forks/cancun/vm/precompiled_contracts/alt_bn128.py +230 -0
  173. ethereum/forks/cancun/vm/precompiled_contracts/blake2f.py +42 -0
  174. ethereum/forks/cancun/vm/precompiled_contracts/ecrecover.py +64 -0
  175. ethereum/forks/cancun/vm/precompiled_contracts/identity.py +39 -0
  176. ethereum/forks/cancun/vm/precompiled_contracts/mapping.py +49 -0
  177. ethereum/forks/cancun/vm/precompiled_contracts/modexp.py +166 -0
  178. ethereum/forks/cancun/vm/precompiled_contracts/point_evaluation.py +72 -0
  179. ethereum/forks/cancun/vm/precompiled_contracts/ripemd160.py +44 -0
  180. ethereum/forks/cancun/vm/precompiled_contracts/sha256.py +41 -0
  181. ethereum/forks/cancun/vm/runtime.py +69 -0
  182. ethereum/forks/cancun/vm/stack.py +58 -0
  183. ethereum/forks/constantinople/__init__.py +51 -0
  184. ethereum/forks/constantinople/blocks.py +265 -0
  185. ethereum/forks/constantinople/bloom.py +87 -0
  186. ethereum/forks/constantinople/fork.py +816 -0
  187. ethereum/forks/constantinople/fork_types.py +62 -0
  188. ethereum/forks/constantinople/state.py +583 -0
  189. ethereum/forks/constantinople/transactions.py +261 -0
  190. ethereum/forks/constantinople/trie.py +498 -0
  191. ethereum/forks/constantinople/utils/__init__.py +3 -0
  192. ethereum/forks/constantinople/utils/address.py +93 -0
  193. ethereum/forks/constantinople/utils/hexadecimal.py +55 -0
  194. ethereum/forks/constantinople/utils/message.py +80 -0
  195. ethereum/forks/constantinople/vm/__init__.py +186 -0
  196. ethereum/forks/constantinople/vm/exceptions.py +123 -0
  197. ethereum/forks/constantinople/vm/gas.py +246 -0
  198. ethereum/forks/constantinople/vm/instructions/__init__.py +347 -0
  199. ethereum/forks/constantinople/vm/instructions/arithmetic.py +373 -0
  200. ethereum/forks/constantinople/vm/instructions/bitwise.py +245 -0
  201. ethereum/forks/constantinople/vm/instructions/block.py +189 -0
  202. ethereum/forks/constantinople/vm/instructions/comparison.py +177 -0
  203. ethereum/forks/constantinople/vm/instructions/control_flow.py +171 -0
  204. ethereum/forks/constantinople/vm/instructions/environment.py +470 -0
  205. ethereum/forks/constantinople/vm/instructions/keccak.py +63 -0
  206. ethereum/forks/constantinople/vm/instructions/log.py +88 -0
  207. ethereum/forks/constantinople/vm/instructions/memory.py +141 -0
  208. ethereum/forks/constantinople/vm/instructions/stack.py +204 -0
  209. ethereum/forks/constantinople/vm/instructions/storage.py +88 -0
  210. ethereum/forks/constantinople/vm/instructions/system.py +673 -0
  211. ethereum/forks/constantinople/vm/interpreter.py +300 -0
  212. ethereum/forks/constantinople/vm/memory.py +84 -0
  213. ethereum/forks/constantinople/vm/precompiled_contracts/__init__.py +36 -0
  214. ethereum/forks/constantinople/vm/precompiled_contracts/alt_bn128.py +230 -0
  215. ethereum/forks/constantinople/vm/precompiled_contracts/ecrecover.py +64 -0
  216. ethereum/forks/constantinople/vm/precompiled_contracts/identity.py +39 -0
  217. ethereum/forks/constantinople/vm/precompiled_contracts/mapping.py +43 -0
  218. ethereum/forks/constantinople/vm/precompiled_contracts/modexp.py +168 -0
  219. ethereum/forks/constantinople/vm/precompiled_contracts/ripemd160.py +44 -0
  220. ethereum/forks/constantinople/vm/precompiled_contracts/sha256.py +41 -0
  221. ethereum/forks/constantinople/vm/runtime.py +69 -0
  222. ethereum/forks/constantinople/vm/stack.py +58 -0
  223. ethereum/forks/dao_fork/__init__.py +29 -0
  224. ethereum/forks/dao_fork/blocks.py +265 -0
  225. ethereum/forks/dao_fork/bloom.py +87 -0
  226. ethereum/forks/dao_fork/dao.py +357 -0
  227. ethereum/forks/dao_fork/fork.py +816 -0
  228. ethereum/forks/dao_fork/fork_types.py +62 -0
  229. ethereum/forks/dao_fork/state.py +515 -0
  230. ethereum/forks/dao_fork/transactions.py +227 -0
  231. ethereum/forks/dao_fork/trie.py +498 -0
  232. ethereum/forks/dao_fork/utils/__init__.py +3 -0
  233. ethereum/forks/dao_fork/utils/address.py +62 -0
  234. ethereum/forks/dao_fork/utils/hexadecimal.py +55 -0
  235. ethereum/forks/dao_fork/utils/message.py +78 -0
  236. ethereum/forks/dao_fork/vm/__init__.py +163 -0
  237. ethereum/forks/dao_fork/vm/exceptions.py +86 -0
  238. ethereum/forks/dao_fork/vm/gas.py +212 -0
  239. ethereum/forks/dao_fork/vm/instructions/__init__.py +329 -0
  240. ethereum/forks/dao_fork/vm/instructions/arithmetic.py +373 -0
  241. ethereum/forks/dao_fork/vm/instructions/bitwise.py +153 -0
  242. ethereum/forks/dao_fork/vm/instructions/block.py +189 -0
  243. ethereum/forks/dao_fork/vm/instructions/comparison.py +177 -0
  244. ethereum/forks/dao_fork/vm/instructions/control_flow.py +171 -0
  245. ethereum/forks/dao_fork/vm/instructions/environment.py +376 -0
  246. ethereum/forks/dao_fork/vm/instructions/keccak.py +63 -0
  247. ethereum/forks/dao_fork/vm/instructions/log.py +85 -0
  248. ethereum/forks/dao_fork/vm/instructions/memory.py +141 -0
  249. ethereum/forks/dao_fork/vm/instructions/stack.py +204 -0
  250. ethereum/forks/dao_fork/vm/instructions/storage.py +87 -0
  251. ethereum/forks/dao_fork/vm/instructions/system.py +457 -0
  252. ethereum/forks/dao_fork/vm/interpreter.py +274 -0
  253. ethereum/forks/dao_fork/vm/memory.py +84 -0
  254. ethereum/forks/dao_fork/vm/precompiled_contracts/__init__.py +27 -0
  255. ethereum/forks/dao_fork/vm/precompiled_contracts/ecrecover.py +64 -0
  256. ethereum/forks/dao_fork/vm/precompiled_contracts/identity.py +39 -0
  257. ethereum/forks/dao_fork/vm/precompiled_contracts/mapping.py +33 -0
  258. ethereum/forks/dao_fork/vm/precompiled_contracts/ripemd160.py +44 -0
  259. ethereum/forks/dao_fork/vm/precompiled_contracts/sha256.py +41 -0
  260. ethereum/forks/dao_fork/vm/runtime.py +69 -0
  261. ethereum/forks/dao_fork/vm/stack.py +58 -0
  262. ethereum/forks/frontier/__init__.py +7 -0
  263. ethereum/forks/frontier/blocks.py +265 -0
  264. ethereum/forks/frontier/bloom.py +87 -0
  265. ethereum/forks/frontier/fork.py +789 -0
  266. ethereum/forks/frontier/fork_types.py +62 -0
  267. ethereum/forks/frontier/state.py +515 -0
  268. ethereum/forks/frontier/transactions.py +216 -0
  269. ethereum/forks/frontier/trie.py +499 -0
  270. ethereum/forks/frontier/utils/__init__.py +3 -0
  271. ethereum/forks/frontier/utils/address.py +62 -0
  272. ethereum/forks/frontier/utils/hexadecimal.py +55 -0
  273. ethereum/forks/frontier/utils/message.py +77 -0
  274. ethereum/forks/frontier/vm/__init__.py +162 -0
  275. ethereum/forks/frontier/vm/exceptions.py +86 -0
  276. ethereum/forks/frontier/vm/gas.py +212 -0
  277. ethereum/forks/frontier/vm/instructions/__init__.py +327 -0
  278. ethereum/forks/frontier/vm/instructions/arithmetic.py +373 -0
  279. ethereum/forks/frontier/vm/instructions/bitwise.py +153 -0
  280. ethereum/forks/frontier/vm/instructions/block.py +189 -0
  281. ethereum/forks/frontier/vm/instructions/comparison.py +177 -0
  282. ethereum/forks/frontier/vm/instructions/control_flow.py +171 -0
  283. ethereum/forks/frontier/vm/instructions/environment.py +376 -0
  284. ethereum/forks/frontier/vm/instructions/keccak.py +63 -0
  285. ethereum/forks/frontier/vm/instructions/log.py +85 -0
  286. ethereum/forks/frontier/vm/instructions/memory.py +141 -0
  287. ethereum/forks/frontier/vm/instructions/stack.py +204 -0
  288. ethereum/forks/frontier/vm/instructions/storage.py +87 -0
  289. ethereum/forks/frontier/vm/instructions/system.py +403 -0
  290. ethereum/forks/frontier/vm/interpreter.py +272 -0
  291. ethereum/forks/frontier/vm/memory.py +84 -0
  292. ethereum/forks/frontier/vm/precompiled_contracts/__init__.py +27 -0
  293. ethereum/forks/frontier/vm/precompiled_contracts/ecrecover.py +64 -0
  294. ethereum/forks/frontier/vm/precompiled_contracts/identity.py +39 -0
  295. ethereum/forks/frontier/vm/precompiled_contracts/mapping.py +33 -0
  296. ethereum/forks/frontier/vm/precompiled_contracts/ripemd160.py +44 -0
  297. ethereum/forks/frontier/vm/precompiled_contracts/sha256.py +41 -0
  298. ethereum/forks/frontier/vm/runtime.py +69 -0
  299. ethereum/forks/frontier/vm/stack.py +58 -0
  300. ethereum/forks/gray_glacier/__init__.py +34 -0
  301. ethereum/forks/gray_glacier/blocks.py +326 -0
  302. ethereum/forks/gray_glacier/bloom.py +87 -0
  303. ethereum/forks/gray_glacier/exceptions.py +58 -0
  304. ethereum/forks/gray_glacier/fork.py +954 -0
  305. ethereum/forks/gray_glacier/fork_types.py +62 -0
  306. ethereum/forks/gray_glacier/state.py +644 -0
  307. ethereum/forks/gray_glacier/transactions.py +573 -0
  308. ethereum/forks/gray_glacier/trie.py +498 -0
  309. ethereum/forks/gray_glacier/utils/__init__.py +3 -0
  310. ethereum/forks/gray_glacier/utils/address.py +94 -0
  311. ethereum/forks/gray_glacier/utils/hexadecimal.py +55 -0
  312. ethereum/forks/gray_glacier/utils/message.py +90 -0
  313. ethereum/forks/gray_glacier/vm/__init__.py +195 -0
  314. ethereum/forks/gray_glacier/vm/exceptions.py +131 -0
  315. ethereum/forks/gray_glacier/vm/gas.py +245 -0
  316. ethereum/forks/gray_glacier/vm/instructions/__init__.py +353 -0
  317. ethereum/forks/gray_glacier/vm/instructions/arithmetic.py +373 -0
  318. ethereum/forks/gray_glacier/vm/instructions/bitwise.py +245 -0
  319. ethereum/forks/gray_glacier/vm/instructions/block.py +212 -0
  320. ethereum/forks/gray_glacier/vm/instructions/comparison.py +177 -0
  321. ethereum/forks/gray_glacier/vm/instructions/control_flow.py +171 -0
  322. ethereum/forks/gray_glacier/vm/instructions/environment.py +544 -0
  323. ethereum/forks/gray_glacier/vm/instructions/keccak.py +63 -0
  324. ethereum/forks/gray_glacier/vm/instructions/log.py +88 -0
  325. ethereum/forks/gray_glacier/vm/instructions/memory.py +141 -0
  326. ethereum/forks/gray_glacier/vm/instructions/stack.py +204 -0
  327. ethereum/forks/gray_glacier/vm/instructions/storage.py +126 -0
  328. ethereum/forks/gray_glacier/vm/instructions/system.py +694 -0
  329. ethereum/forks/gray_glacier/vm/interpreter.py +312 -0
  330. ethereum/forks/gray_glacier/vm/memory.py +84 -0
  331. ethereum/forks/gray_glacier/vm/precompiled_contracts/__init__.py +37 -0
  332. ethereum/forks/gray_glacier/vm/precompiled_contracts/alt_bn128.py +230 -0
  333. ethereum/forks/gray_glacier/vm/precompiled_contracts/blake2f.py +42 -0
  334. ethereum/forks/gray_glacier/vm/precompiled_contracts/ecrecover.py +64 -0
  335. ethereum/forks/gray_glacier/vm/precompiled_contracts/identity.py +39 -0
  336. ethereum/forks/gray_glacier/vm/precompiled_contracts/mapping.py +46 -0
  337. ethereum/forks/gray_glacier/vm/precompiled_contracts/modexp.py +166 -0
  338. ethereum/forks/gray_glacier/vm/precompiled_contracts/ripemd160.py +44 -0
  339. ethereum/forks/gray_glacier/vm/precompiled_contracts/sha256.py +41 -0
  340. ethereum/forks/gray_glacier/vm/runtime.py +69 -0
  341. ethereum/forks/gray_glacier/vm/stack.py +58 -0
  342. ethereum/forks/homestead/__init__.py +34 -0
  343. ethereum/forks/homestead/blocks.py +265 -0
  344. ethereum/forks/homestead/bloom.py +87 -0
  345. ethereum/forks/homestead/fork.py +798 -0
  346. ethereum/forks/homestead/fork_types.py +62 -0
  347. ethereum/forks/homestead/state.py +515 -0
  348. ethereum/forks/homestead/transactions.py +227 -0
  349. ethereum/forks/homestead/trie.py +498 -0
  350. ethereum/forks/homestead/utils/__init__.py +3 -0
  351. ethereum/forks/homestead/utils/address.py +62 -0
  352. ethereum/forks/homestead/utils/hexadecimal.py +55 -0
  353. ethereum/forks/homestead/utils/message.py +78 -0
  354. ethereum/forks/homestead/vm/__init__.py +163 -0
  355. ethereum/forks/homestead/vm/exceptions.py +86 -0
  356. ethereum/forks/homestead/vm/gas.py +212 -0
  357. ethereum/forks/homestead/vm/instructions/__init__.py +329 -0
  358. ethereum/forks/homestead/vm/instructions/arithmetic.py +373 -0
  359. ethereum/forks/homestead/vm/instructions/bitwise.py +153 -0
  360. ethereum/forks/homestead/vm/instructions/block.py +189 -0
  361. ethereum/forks/homestead/vm/instructions/comparison.py +177 -0
  362. ethereum/forks/homestead/vm/instructions/control_flow.py +171 -0
  363. ethereum/forks/homestead/vm/instructions/environment.py +376 -0
  364. ethereum/forks/homestead/vm/instructions/keccak.py +63 -0
  365. ethereum/forks/homestead/vm/instructions/log.py +85 -0
  366. ethereum/forks/homestead/vm/instructions/memory.py +141 -0
  367. ethereum/forks/homestead/vm/instructions/stack.py +204 -0
  368. ethereum/forks/homestead/vm/instructions/storage.py +87 -0
  369. ethereum/forks/homestead/vm/instructions/system.py +457 -0
  370. ethereum/forks/homestead/vm/interpreter.py +274 -0
  371. ethereum/forks/homestead/vm/memory.py +84 -0
  372. ethereum/forks/homestead/vm/precompiled_contracts/__init__.py +27 -0
  373. ethereum/forks/homestead/vm/precompiled_contracts/ecrecover.py +64 -0
  374. ethereum/forks/homestead/vm/precompiled_contracts/identity.py +39 -0
  375. ethereum/forks/homestead/vm/precompiled_contracts/mapping.py +33 -0
  376. ethereum/forks/homestead/vm/precompiled_contracts/ripemd160.py +44 -0
  377. ethereum/forks/homestead/vm/precompiled_contracts/sha256.py +41 -0
  378. ethereum/forks/homestead/vm/runtime.py +69 -0
  379. ethereum/forks/homestead/vm/stack.py +58 -0
  380. ethereum/forks/istanbul/__init__.py +53 -0
  381. ethereum/forks/istanbul/blocks.py +265 -0
  382. ethereum/forks/istanbul/bloom.py +87 -0
  383. ethereum/forks/istanbul/fork.py +816 -0
  384. ethereum/forks/istanbul/fork_types.py +62 -0
  385. ethereum/forks/istanbul/state.py +644 -0
  386. ethereum/forks/istanbul/transactions.py +261 -0
  387. ethereum/forks/istanbul/trie.py +498 -0
  388. ethereum/forks/istanbul/utils/__init__.py +3 -0
  389. ethereum/forks/istanbul/utils/address.py +94 -0
  390. ethereum/forks/istanbul/utils/hexadecimal.py +55 -0
  391. ethereum/forks/istanbul/utils/message.py +80 -0
  392. ethereum/forks/istanbul/vm/__init__.py +186 -0
  393. ethereum/forks/istanbul/vm/exceptions.py +123 -0
  394. ethereum/forks/istanbul/vm/gas.py +248 -0
  395. ethereum/forks/istanbul/vm/instructions/__init__.py +351 -0
  396. ethereum/forks/istanbul/vm/instructions/arithmetic.py +373 -0
  397. ethereum/forks/istanbul/vm/instructions/bitwise.py +245 -0
  398. ethereum/forks/istanbul/vm/instructions/block.py +212 -0
  399. ethereum/forks/istanbul/vm/instructions/comparison.py +177 -0
  400. ethereum/forks/istanbul/vm/instructions/control_flow.py +171 -0
  401. ethereum/forks/istanbul/vm/instructions/environment.py +499 -0
  402. ethereum/forks/istanbul/vm/instructions/keccak.py +63 -0
  403. ethereum/forks/istanbul/vm/instructions/log.py +88 -0
  404. ethereum/forks/istanbul/vm/instructions/memory.py +141 -0
  405. ethereum/forks/istanbul/vm/instructions/stack.py +204 -0
  406. ethereum/forks/istanbul/vm/instructions/storage.py +113 -0
  407. ethereum/forks/istanbul/vm/instructions/system.py +673 -0
  408. ethereum/forks/istanbul/vm/interpreter.py +306 -0
  409. ethereum/forks/istanbul/vm/memory.py +84 -0
  410. ethereum/forks/istanbul/vm/precompiled_contracts/__init__.py +37 -0
  411. ethereum/forks/istanbul/vm/precompiled_contracts/alt_bn128.py +230 -0
  412. ethereum/forks/istanbul/vm/precompiled_contracts/blake2f.py +42 -0
  413. ethereum/forks/istanbul/vm/precompiled_contracts/ecrecover.py +64 -0
  414. ethereum/forks/istanbul/vm/precompiled_contracts/identity.py +39 -0
  415. ethereum/forks/istanbul/vm/precompiled_contracts/mapping.py +46 -0
  416. ethereum/forks/istanbul/vm/precompiled_contracts/modexp.py +168 -0
  417. ethereum/forks/istanbul/vm/precompiled_contracts/ripemd160.py +44 -0
  418. ethereum/forks/istanbul/vm/precompiled_contracts/sha256.py +41 -0
  419. ethereum/forks/istanbul/vm/runtime.py +69 -0
  420. ethereum/forks/istanbul/vm/stack.py +58 -0
  421. ethereum/forks/london/__init__.py +48 -0
  422. ethereum/forks/london/blocks.py +326 -0
  423. ethereum/forks/london/bloom.py +87 -0
  424. ethereum/forks/london/exceptions.py +58 -0
  425. ethereum/forks/london/fork.py +960 -0
  426. ethereum/forks/london/fork_types.py +62 -0
  427. ethereum/forks/london/state.py +644 -0
  428. ethereum/forks/london/transactions.py +573 -0
  429. ethereum/forks/london/trie.py +498 -0
  430. ethereum/forks/london/utils/__init__.py +3 -0
  431. ethereum/forks/london/utils/address.py +94 -0
  432. ethereum/forks/london/utils/hexadecimal.py +55 -0
  433. ethereum/forks/london/utils/message.py +90 -0
  434. ethereum/forks/london/vm/__init__.py +195 -0
  435. ethereum/forks/london/vm/exceptions.py +131 -0
  436. ethereum/forks/london/vm/gas.py +245 -0
  437. ethereum/forks/london/vm/instructions/__init__.py +353 -0
  438. ethereum/forks/london/vm/instructions/arithmetic.py +373 -0
  439. ethereum/forks/london/vm/instructions/bitwise.py +245 -0
  440. ethereum/forks/london/vm/instructions/block.py +212 -0
  441. ethereum/forks/london/vm/instructions/comparison.py +177 -0
  442. ethereum/forks/london/vm/instructions/control_flow.py +171 -0
  443. ethereum/forks/london/vm/instructions/environment.py +544 -0
  444. ethereum/forks/london/vm/instructions/keccak.py +63 -0
  445. ethereum/forks/london/vm/instructions/log.py +88 -0
  446. ethereum/forks/london/vm/instructions/memory.py +141 -0
  447. ethereum/forks/london/vm/instructions/stack.py +204 -0
  448. ethereum/forks/london/vm/instructions/storage.py +126 -0
  449. ethereum/forks/london/vm/instructions/system.py +694 -0
  450. ethereum/forks/london/vm/interpreter.py +312 -0
  451. ethereum/forks/london/vm/memory.py +84 -0
  452. ethereum/forks/london/vm/precompiled_contracts/__init__.py +37 -0
  453. ethereum/forks/london/vm/precompiled_contracts/alt_bn128.py +230 -0
  454. ethereum/forks/london/vm/precompiled_contracts/blake2f.py +42 -0
  455. ethereum/forks/london/vm/precompiled_contracts/ecrecover.py +64 -0
  456. ethereum/forks/london/vm/precompiled_contracts/identity.py +39 -0
  457. ethereum/forks/london/vm/precompiled_contracts/mapping.py +46 -0
  458. ethereum/forks/london/vm/precompiled_contracts/modexp.py +166 -0
  459. ethereum/forks/london/vm/precompiled_contracts/ripemd160.py +44 -0
  460. ethereum/forks/london/vm/precompiled_contracts/sha256.py +41 -0
  461. ethereum/forks/london/vm/runtime.py +69 -0
  462. ethereum/forks/london/vm/stack.py +58 -0
  463. ethereum/forks/muir_glacier/__init__.py +38 -0
  464. ethereum/forks/muir_glacier/blocks.py +265 -0
  465. ethereum/forks/muir_glacier/bloom.py +87 -0
  466. ethereum/forks/muir_glacier/fork.py +818 -0
  467. ethereum/forks/muir_glacier/fork_types.py +62 -0
  468. ethereum/forks/muir_glacier/state.py +644 -0
  469. ethereum/forks/muir_glacier/transactions.py +261 -0
  470. ethereum/forks/muir_glacier/trie.py +498 -0
  471. ethereum/forks/muir_glacier/utils/__init__.py +3 -0
  472. ethereum/forks/muir_glacier/utils/address.py +94 -0
  473. ethereum/forks/muir_glacier/utils/hexadecimal.py +55 -0
  474. ethereum/forks/muir_glacier/utils/message.py +80 -0
  475. ethereum/forks/muir_glacier/vm/__init__.py +186 -0
  476. ethereum/forks/muir_glacier/vm/exceptions.py +123 -0
  477. ethereum/forks/muir_glacier/vm/gas.py +248 -0
  478. ethereum/forks/muir_glacier/vm/instructions/__init__.py +351 -0
  479. ethereum/forks/muir_glacier/vm/instructions/arithmetic.py +373 -0
  480. ethereum/forks/muir_glacier/vm/instructions/bitwise.py +245 -0
  481. ethereum/forks/muir_glacier/vm/instructions/block.py +212 -0
  482. ethereum/forks/muir_glacier/vm/instructions/comparison.py +177 -0
  483. ethereum/forks/muir_glacier/vm/instructions/control_flow.py +171 -0
  484. ethereum/forks/muir_glacier/vm/instructions/environment.py +499 -0
  485. ethereum/forks/muir_glacier/vm/instructions/keccak.py +63 -0
  486. ethereum/forks/muir_glacier/vm/instructions/log.py +88 -0
  487. ethereum/forks/muir_glacier/vm/instructions/memory.py +141 -0
  488. ethereum/forks/muir_glacier/vm/instructions/stack.py +204 -0
  489. ethereum/forks/muir_glacier/vm/instructions/storage.py +113 -0
  490. ethereum/forks/muir_glacier/vm/instructions/system.py +673 -0
  491. ethereum/forks/muir_glacier/vm/interpreter.py +306 -0
  492. ethereum/forks/muir_glacier/vm/memory.py +84 -0
  493. ethereum/forks/muir_glacier/vm/precompiled_contracts/__init__.py +37 -0
  494. ethereum/forks/muir_glacier/vm/precompiled_contracts/alt_bn128.py +230 -0
  495. ethereum/forks/muir_glacier/vm/precompiled_contracts/blake2f.py +42 -0
  496. ethereum/forks/muir_glacier/vm/precompiled_contracts/ecrecover.py +64 -0
  497. ethereum/forks/muir_glacier/vm/precompiled_contracts/identity.py +39 -0
  498. ethereum/forks/muir_glacier/vm/precompiled_contracts/mapping.py +46 -0
  499. ethereum/forks/muir_glacier/vm/precompiled_contracts/modexp.py +168 -0
  500. ethereum/forks/muir_glacier/vm/precompiled_contracts/ripemd160.py +44 -0
  501. ethereum/forks/muir_glacier/vm/precompiled_contracts/sha256.py +41 -0
  502. ethereum/forks/muir_glacier/vm/runtime.py +69 -0
  503. ethereum/forks/muir_glacier/vm/stack.py +58 -0
  504. ethereum/forks/osaka/__init__.py +55 -0
  505. ethereum/forks/osaka/blocks.py +405 -0
  506. ethereum/forks/osaka/bloom.py +87 -0
  507. ethereum/forks/osaka/exceptions.py +131 -0
  508. ethereum/forks/osaka/fork.py +1059 -0
  509. ethereum/forks/osaka/fork_types.py +78 -0
  510. ethereum/forks/osaka/requests.py +191 -0
  511. ethereum/forks/osaka/state.py +667 -0
  512. ethereum/forks/osaka/transactions.py +887 -0
  513. ethereum/forks/osaka/trie.py +508 -0
  514. ethereum/forks/osaka/utils/__init__.py +3 -0
  515. ethereum/forks/osaka/utils/address.py +94 -0
  516. ethereum/forks/osaka/utils/hexadecimal.py +55 -0
  517. ethereum/forks/osaka/utils/message.py +90 -0
  518. ethereum/forks/osaka/vm/__init__.py +191 -0
  519. ethereum/forks/osaka/vm/eoa_delegation.py +211 -0
  520. ethereum/forks/osaka/vm/exceptions.py +139 -0
  521. ethereum/forks/osaka/vm/gas.py +396 -0
  522. ethereum/forks/osaka/vm/instructions/__init__.py +367 -0
  523. ethereum/forks/osaka/vm/instructions/arithmetic.py +373 -0
  524. ethereum/forks/osaka/vm/instructions/bitwise.py +274 -0
  525. ethereum/forks/osaka/vm/instructions/block.py +261 -0
  526. ethereum/forks/osaka/vm/instructions/comparison.py +177 -0
  527. ethereum/forks/osaka/vm/instructions/control_flow.py +171 -0
  528. ethereum/forks/osaka/vm/instructions/environment.py +600 -0
  529. ethereum/forks/osaka/vm/instructions/keccak.py +63 -0
  530. ethereum/forks/osaka/vm/instructions/log.py +88 -0
  531. ethereum/forks/osaka/vm/instructions/memory.py +177 -0
  532. ethereum/forks/osaka/vm/instructions/stack.py +208 -0
  533. ethereum/forks/osaka/vm/instructions/storage.py +188 -0
  534. ethereum/forks/osaka/vm/instructions/system.py +751 -0
  535. ethereum/forks/osaka/vm/interpreter.py +324 -0
  536. ethereum/forks/osaka/vm/memory.py +83 -0
  537. ethereum/forks/osaka/vm/precompiled_contracts/__init__.py +55 -0
  538. ethereum/forks/osaka/vm/precompiled_contracts/alt_bn128.py +230 -0
  539. ethereum/forks/osaka/vm/precompiled_contracts/blake2f.py +42 -0
  540. ethereum/forks/osaka/vm/precompiled_contracts/bls12_381/__init__.py +622 -0
  541. ethereum/forks/osaka/vm/precompiled_contracts/bls12_381/bls12_381_g1.py +151 -0
  542. ethereum/forks/osaka/vm/precompiled_contracts/bls12_381/bls12_381_g2.py +153 -0
  543. ethereum/forks/osaka/vm/precompiled_contracts/bls12_381/bls12_381_pairing.py +69 -0
  544. ethereum/forks/osaka/vm/precompiled_contracts/ecrecover.py +64 -0
  545. ethereum/forks/osaka/vm/precompiled_contracts/identity.py +39 -0
  546. ethereum/forks/osaka/vm/precompiled_contracts/mapping.py +77 -0
  547. ethereum/forks/osaka/vm/precompiled_contracts/modexp.py +175 -0
  548. ethereum/forks/osaka/vm/precompiled_contracts/p256verify.py +89 -0
  549. ethereum/forks/osaka/vm/precompiled_contracts/point_evaluation.py +72 -0
  550. ethereum/forks/osaka/vm/precompiled_contracts/ripemd160.py +44 -0
  551. ethereum/forks/osaka/vm/precompiled_contracts/sha256.py +41 -0
  552. ethereum/forks/osaka/vm/runtime.py +69 -0
  553. ethereum/forks/osaka/vm/stack.py +58 -0
  554. ethereum/forks/paris/__init__.py +43 -0
  555. ethereum/forks/paris/blocks.py +312 -0
  556. ethereum/forks/paris/bloom.py +87 -0
  557. ethereum/forks/paris/exceptions.py +58 -0
  558. ethereum/forks/paris/fork.py +651 -0
  559. ethereum/forks/paris/fork_types.py +62 -0
  560. ethereum/forks/paris/state.py +571 -0
  561. ethereum/forks/paris/transactions.py +573 -0
  562. ethereum/forks/paris/trie.py +498 -0
  563. ethereum/forks/paris/utils/__init__.py +3 -0
  564. ethereum/forks/paris/utils/address.py +94 -0
  565. ethereum/forks/paris/utils/hexadecimal.py +55 -0
  566. ethereum/forks/paris/utils/message.py +90 -0
  567. ethereum/forks/paris/vm/__init__.py +174 -0
  568. ethereum/forks/paris/vm/exceptions.py +131 -0
  569. ethereum/forks/paris/vm/gas.py +245 -0
  570. ethereum/forks/paris/vm/instructions/__init__.py +353 -0
  571. ethereum/forks/paris/vm/instructions/arithmetic.py +373 -0
  572. ethereum/forks/paris/vm/instructions/bitwise.py +245 -0
  573. ethereum/forks/paris/vm/instructions/block.py +261 -0
  574. ethereum/forks/paris/vm/instructions/comparison.py +177 -0
  575. ethereum/forks/paris/vm/instructions/control_flow.py +171 -0
  576. ethereum/forks/paris/vm/instructions/environment.py +544 -0
  577. ethereum/forks/paris/vm/instructions/keccak.py +63 -0
  578. ethereum/forks/paris/vm/instructions/log.py +88 -0
  579. ethereum/forks/paris/vm/instructions/memory.py +141 -0
  580. ethereum/forks/paris/vm/instructions/stack.py +204 -0
  581. ethereum/forks/paris/vm/instructions/storage.py +126 -0
  582. ethereum/forks/paris/vm/instructions/system.py +689 -0
  583. ethereum/forks/paris/vm/interpreter.py +298 -0
  584. ethereum/forks/paris/vm/memory.py +84 -0
  585. ethereum/forks/paris/vm/precompiled_contracts/__init__.py +37 -0
  586. ethereum/forks/paris/vm/precompiled_contracts/alt_bn128.py +230 -0
  587. ethereum/forks/paris/vm/precompiled_contracts/blake2f.py +42 -0
  588. ethereum/forks/paris/vm/precompiled_contracts/ecrecover.py +64 -0
  589. ethereum/forks/paris/vm/precompiled_contracts/identity.py +39 -0
  590. ethereum/forks/paris/vm/precompiled_contracts/mapping.py +46 -0
  591. ethereum/forks/paris/vm/precompiled_contracts/modexp.py +166 -0
  592. ethereum/forks/paris/vm/precompiled_contracts/ripemd160.py +44 -0
  593. ethereum/forks/paris/vm/precompiled_contracts/sha256.py +41 -0
  594. ethereum/forks/paris/vm/runtime.py +69 -0
  595. ethereum/forks/paris/vm/stack.py +58 -0
  596. ethereum/forks/prague/__init__.py +54 -0
  597. ethereum/forks/prague/blocks.py +405 -0
  598. ethereum/forks/prague/bloom.py +87 -0
  599. ethereum/forks/prague/exceptions.py +115 -0
  600. ethereum/forks/prague/fork.py +1044 -0
  601. ethereum/forks/prague/fork_types.py +78 -0
  602. ethereum/forks/prague/requests.py +191 -0
  603. ethereum/forks/prague/state.py +667 -0
  604. ethereum/forks/prague/transactions.py +879 -0
  605. ethereum/forks/prague/trie.py +508 -0
  606. ethereum/forks/prague/utils/__init__.py +3 -0
  607. ethereum/forks/prague/utils/address.py +94 -0
  608. ethereum/forks/prague/utils/hexadecimal.py +55 -0
  609. ethereum/forks/prague/utils/message.py +90 -0
  610. ethereum/forks/prague/vm/__init__.py +191 -0
  611. ethereum/forks/prague/vm/eoa_delegation.py +211 -0
  612. ethereum/forks/prague/vm/exceptions.py +139 -0
  613. ethereum/forks/prague/vm/gas.py +379 -0
  614. ethereum/forks/prague/vm/instructions/__init__.py +365 -0
  615. ethereum/forks/prague/vm/instructions/arithmetic.py +373 -0
  616. ethereum/forks/prague/vm/instructions/bitwise.py +245 -0
  617. ethereum/forks/prague/vm/instructions/block.py +261 -0
  618. ethereum/forks/prague/vm/instructions/comparison.py +177 -0
  619. ethereum/forks/prague/vm/instructions/control_flow.py +171 -0
  620. ethereum/forks/prague/vm/instructions/environment.py +600 -0
  621. ethereum/forks/prague/vm/instructions/keccak.py +63 -0
  622. ethereum/forks/prague/vm/instructions/log.py +88 -0
  623. ethereum/forks/prague/vm/instructions/memory.py +177 -0
  624. ethereum/forks/prague/vm/instructions/stack.py +208 -0
  625. ethereum/forks/prague/vm/instructions/storage.py +188 -0
  626. ethereum/forks/prague/vm/instructions/system.py +751 -0
  627. ethereum/forks/prague/vm/interpreter.py +324 -0
  628. ethereum/forks/prague/vm/memory.py +83 -0
  629. ethereum/forks/prague/vm/precompiled_contracts/__init__.py +53 -0
  630. ethereum/forks/prague/vm/precompiled_contracts/alt_bn128.py +230 -0
  631. ethereum/forks/prague/vm/precompiled_contracts/blake2f.py +42 -0
  632. ethereum/forks/prague/vm/precompiled_contracts/bls12_381/__init__.py +622 -0
  633. ethereum/forks/prague/vm/precompiled_contracts/bls12_381/bls12_381_g1.py +151 -0
  634. ethereum/forks/prague/vm/precompiled_contracts/bls12_381/bls12_381_g2.py +153 -0
  635. ethereum/forks/prague/vm/precompiled_contracts/bls12_381/bls12_381_pairing.py +69 -0
  636. ethereum/forks/prague/vm/precompiled_contracts/ecrecover.py +64 -0
  637. ethereum/forks/prague/vm/precompiled_contracts/identity.py +39 -0
  638. ethereum/forks/prague/vm/precompiled_contracts/mapping.py +74 -0
  639. ethereum/forks/prague/vm/precompiled_contracts/modexp.py +166 -0
  640. ethereum/forks/prague/vm/precompiled_contracts/point_evaluation.py +72 -0
  641. ethereum/forks/prague/vm/precompiled_contracts/ripemd160.py +44 -0
  642. ethereum/forks/prague/vm/precompiled_contracts/sha256.py +41 -0
  643. ethereum/forks/prague/vm/runtime.py +69 -0
  644. ethereum/forks/prague/vm/stack.py +58 -0
  645. ethereum/forks/shanghai/__init__.py +47 -0
  646. ethereum/forks/shanghai/blocks.py +360 -0
  647. ethereum/forks/shanghai/bloom.py +87 -0
  648. ethereum/forks/shanghai/exceptions.py +64 -0
  649. ethereum/forks/shanghai/fork.py +686 -0
  650. ethereum/forks/shanghai/fork_types.py +62 -0
  651. ethereum/forks/shanghai/state.py +571 -0
  652. ethereum/forks/shanghai/transactions.py +585 -0
  653. ethereum/forks/shanghai/trie.py +508 -0
  654. ethereum/forks/shanghai/utils/__init__.py +3 -0
  655. ethereum/forks/shanghai/utils/address.py +94 -0
  656. ethereum/forks/shanghai/utils/hexadecimal.py +55 -0
  657. ethereum/forks/shanghai/utils/message.py +90 -0
  658. ethereum/forks/shanghai/vm/__init__.py +179 -0
  659. ethereum/forks/shanghai/vm/exceptions.py +131 -0
  660. ethereum/forks/shanghai/vm/gas.py +266 -0
  661. ethereum/forks/shanghai/vm/instructions/__init__.py +355 -0
  662. ethereum/forks/shanghai/vm/instructions/arithmetic.py +373 -0
  663. ethereum/forks/shanghai/vm/instructions/bitwise.py +245 -0
  664. ethereum/forks/shanghai/vm/instructions/block.py +261 -0
  665. ethereum/forks/shanghai/vm/instructions/comparison.py +177 -0
  666. ethereum/forks/shanghai/vm/instructions/control_flow.py +171 -0
  667. ethereum/forks/shanghai/vm/instructions/environment.py +544 -0
  668. ethereum/forks/shanghai/vm/instructions/keccak.py +63 -0
  669. ethereum/forks/shanghai/vm/instructions/log.py +88 -0
  670. ethereum/forks/shanghai/vm/instructions/memory.py +141 -0
  671. ethereum/forks/shanghai/vm/instructions/stack.py +208 -0
  672. ethereum/forks/shanghai/vm/instructions/storage.py +126 -0
  673. ethereum/forks/shanghai/vm/instructions/system.py +709 -0
  674. ethereum/forks/shanghai/vm/interpreter.py +299 -0
  675. ethereum/forks/shanghai/vm/memory.py +84 -0
  676. ethereum/forks/shanghai/vm/precompiled_contracts/__init__.py +37 -0
  677. ethereum/forks/shanghai/vm/precompiled_contracts/alt_bn128.py +230 -0
  678. ethereum/forks/shanghai/vm/precompiled_contracts/blake2f.py +42 -0
  679. ethereum/forks/shanghai/vm/precompiled_contracts/ecrecover.py +64 -0
  680. ethereum/forks/shanghai/vm/precompiled_contracts/identity.py +39 -0
  681. ethereum/forks/shanghai/vm/precompiled_contracts/mapping.py +46 -0
  682. ethereum/forks/shanghai/vm/precompiled_contracts/modexp.py +166 -0
  683. ethereum/forks/shanghai/vm/precompiled_contracts/ripemd160.py +44 -0
  684. ethereum/forks/shanghai/vm/precompiled_contracts/sha256.py +41 -0
  685. ethereum/forks/shanghai/vm/runtime.py +69 -0
  686. ethereum/forks/shanghai/vm/stack.py +58 -0
  687. ethereum/forks/spurious_dragon/__init__.py +38 -0
  688. ethereum/forks/spurious_dragon/blocks.py +265 -0
  689. ethereum/forks/spurious_dragon/bloom.py +87 -0
  690. ethereum/forks/spurious_dragon/fork.py +807 -0
  691. ethereum/forks/spurious_dragon/fork_types.py +62 -0
  692. ethereum/forks/spurious_dragon/state.py +583 -0
  693. ethereum/forks/spurious_dragon/transactions.py +261 -0
  694. ethereum/forks/spurious_dragon/trie.py +498 -0
  695. ethereum/forks/spurious_dragon/utils/__init__.py +3 -0
  696. ethereum/forks/spurious_dragon/utils/address.py +63 -0
  697. ethereum/forks/spurious_dragon/utils/hexadecimal.py +55 -0
  698. ethereum/forks/spurious_dragon/utils/message.py +79 -0
  699. ethereum/forks/spurious_dragon/vm/__init__.py +184 -0
  700. ethereum/forks/spurious_dragon/vm/exceptions.py +86 -0
  701. ethereum/forks/spurious_dragon/vm/gas.py +244 -0
  702. ethereum/forks/spurious_dragon/vm/instructions/__init__.py +329 -0
  703. ethereum/forks/spurious_dragon/vm/instructions/arithmetic.py +373 -0
  704. ethereum/forks/spurious_dragon/vm/instructions/bitwise.py +153 -0
  705. ethereum/forks/spurious_dragon/vm/instructions/block.py +189 -0
  706. ethereum/forks/spurious_dragon/vm/instructions/comparison.py +177 -0
  707. ethereum/forks/spurious_dragon/vm/instructions/control_flow.py +171 -0
  708. ethereum/forks/spurious_dragon/vm/instructions/environment.py +376 -0
  709. ethereum/forks/spurious_dragon/vm/instructions/keccak.py +63 -0
  710. ethereum/forks/spurious_dragon/vm/instructions/log.py +85 -0
  711. ethereum/forks/spurious_dragon/vm/instructions/memory.py +141 -0
  712. ethereum/forks/spurious_dragon/vm/instructions/stack.py +204 -0
  713. ethereum/forks/spurious_dragon/vm/instructions/storage.py +87 -0
  714. ethereum/forks/spurious_dragon/vm/instructions/system.py +491 -0
  715. ethereum/forks/spurious_dragon/vm/interpreter.py +292 -0
  716. ethereum/forks/spurious_dragon/vm/memory.py +84 -0
  717. ethereum/forks/spurious_dragon/vm/precompiled_contracts/__init__.py +27 -0
  718. ethereum/forks/spurious_dragon/vm/precompiled_contracts/ecrecover.py +64 -0
  719. ethereum/forks/spurious_dragon/vm/precompiled_contracts/identity.py +39 -0
  720. ethereum/forks/spurious_dragon/vm/precompiled_contracts/mapping.py +33 -0
  721. ethereum/forks/spurious_dragon/vm/precompiled_contracts/ripemd160.py +44 -0
  722. ethereum/forks/spurious_dragon/vm/precompiled_contracts/sha256.py +41 -0
  723. ethereum/forks/spurious_dragon/vm/runtime.py +69 -0
  724. ethereum/forks/spurious_dragon/vm/stack.py +58 -0
  725. ethereum/forks/tangerine_whistle/__init__.py +32 -0
  726. ethereum/forks/tangerine_whistle/blocks.py +265 -0
  727. ethereum/forks/tangerine_whistle/bloom.py +87 -0
  728. ethereum/forks/tangerine_whistle/fork.py +798 -0
  729. ethereum/forks/tangerine_whistle/fork_types.py +62 -0
  730. ethereum/forks/tangerine_whistle/state.py +515 -0
  731. ethereum/forks/tangerine_whistle/transactions.py +227 -0
  732. ethereum/forks/tangerine_whistle/trie.py +498 -0
  733. ethereum/forks/tangerine_whistle/utils/__init__.py +3 -0
  734. ethereum/forks/tangerine_whistle/utils/address.py +63 -0
  735. ethereum/forks/tangerine_whistle/utils/hexadecimal.py +55 -0
  736. ethereum/forks/tangerine_whistle/utils/message.py +79 -0
  737. ethereum/forks/tangerine_whistle/vm/__init__.py +163 -0
  738. ethereum/forks/tangerine_whistle/vm/exceptions.py +86 -0
  739. ethereum/forks/tangerine_whistle/vm/gas.py +244 -0
  740. ethereum/forks/tangerine_whistle/vm/instructions/__init__.py +329 -0
  741. ethereum/forks/tangerine_whistle/vm/instructions/arithmetic.py +373 -0
  742. ethereum/forks/tangerine_whistle/vm/instructions/bitwise.py +153 -0
  743. ethereum/forks/tangerine_whistle/vm/instructions/block.py +189 -0
  744. ethereum/forks/tangerine_whistle/vm/instructions/comparison.py +177 -0
  745. ethereum/forks/tangerine_whistle/vm/instructions/control_flow.py +171 -0
  746. ethereum/forks/tangerine_whistle/vm/instructions/environment.py +376 -0
  747. ethereum/forks/tangerine_whistle/vm/instructions/keccak.py +63 -0
  748. ethereum/forks/tangerine_whistle/vm/instructions/log.py +85 -0
  749. ethereum/forks/tangerine_whistle/vm/instructions/memory.py +141 -0
  750. ethereum/forks/tangerine_whistle/vm/instructions/stack.py +204 -0
  751. ethereum/forks/tangerine_whistle/vm/instructions/storage.py +87 -0
  752. ethereum/forks/tangerine_whistle/vm/instructions/system.py +480 -0
  753. ethereum/forks/tangerine_whistle/vm/interpreter.py +274 -0
  754. ethereum/forks/tangerine_whistle/vm/memory.py +84 -0
  755. ethereum/forks/tangerine_whistle/vm/precompiled_contracts/__init__.py +27 -0
  756. ethereum/forks/tangerine_whistle/vm/precompiled_contracts/ecrecover.py +64 -0
  757. ethereum/forks/tangerine_whistle/vm/precompiled_contracts/identity.py +39 -0
  758. ethereum/forks/tangerine_whistle/vm/precompiled_contracts/mapping.py +33 -0
  759. ethereum/forks/tangerine_whistle/vm/precompiled_contracts/ripemd160.py +44 -0
  760. ethereum/forks/tangerine_whistle/vm/precompiled_contracts/sha256.py +41 -0
  761. ethereum/forks/tangerine_whistle/vm/runtime.py +69 -0
  762. ethereum/forks/tangerine_whistle/vm/stack.py +58 -0
  763. ethereum/genesis.py +279 -0
  764. ethereum/py.typed +0 -0
  765. ethereum/trace.py +252 -0
  766. ethereum/utils/__init__.py +18 -0
  767. ethereum/utils/byte.py +59 -0
  768. ethereum/utils/hexadecimal.py +221 -0
  769. ethereum/utils/numeric.py +208 -0
  770. ethereum_execution-2.18.0rc6.dev2.dist-info/METADATA +113 -0
  771. ethereum_execution-2.18.0rc6.dev2.dist-info/RECORD +816 -0
  772. ethereum_execution-2.18.0rc6.dev2.dist-info/WHEEL +5 -0
  773. ethereum_execution-2.18.0rc6.dev2.dist-info/entry_points.txt +17 -0
  774. ethereum_execution-2.18.0rc6.dev2.dist-info/licenses/LICENSE.md +35 -0
  775. ethereum_execution-2.18.0rc6.dev2.dist-info/top_level.txt +3 -0
  776. ethereum_optimized/__init__.py +78 -0
  777. ethereum_optimized/fork.py +72 -0
  778. ethereum_optimized/state_db.py +444 -0
  779. ethereum_optimized/utils.py +26 -0
  780. ethereum_spec_tools/__init__.py +6 -0
  781. ethereum_spec_tools/docc.py +1135 -0
  782. ethereum_spec_tools/evm_tools/__init__.py +119 -0
  783. ethereum_spec_tools/evm_tools/__main__.py +7 -0
  784. ethereum_spec_tools/evm_tools/b11r/__init__.py +143 -0
  785. ethereum_spec_tools/evm_tools/b11r/b11r_types.py +173 -0
  786. ethereum_spec_tools/evm_tools/daemon.py +202 -0
  787. ethereum_spec_tools/evm_tools/loaders/__init__.py +3 -0
  788. ethereum_spec_tools/evm_tools/loaders/fixture_loader.py +190 -0
  789. ethereum_spec_tools/evm_tools/loaders/fork_loader.py +320 -0
  790. ethereum_spec_tools/evm_tools/loaders/transaction_loader.py +208 -0
  791. ethereum_spec_tools/evm_tools/statetest/__init__.py +291 -0
  792. ethereum_spec_tools/evm_tools/t8n/__init__.py +402 -0
  793. ethereum_spec_tools/evm_tools/t8n/env.py +320 -0
  794. ethereum_spec_tools/evm_tools/t8n/evm_trace/__init__.py +5 -0
  795. ethereum_spec_tools/evm_tools/t8n/evm_trace/count.py +47 -0
  796. ethereum_spec_tools/evm_tools/t8n/evm_trace/eip3155.py +333 -0
  797. ethereum_spec_tools/evm_tools/t8n/evm_trace/group.py +39 -0
  798. ethereum_spec_tools/evm_tools/t8n/evm_trace/protocols.py +54 -0
  799. ethereum_spec_tools/evm_tools/t8n/t8n_types.py +393 -0
  800. ethereum_spec_tools/evm_tools/utils.py +187 -0
  801. ethereum_spec_tools/forks.py +302 -0
  802. ethereum_spec_tools/lint/__init__.py +195 -0
  803. ethereum_spec_tools/lint/__main__.py +11 -0
  804. ethereum_spec_tools/lint/lints/glacier_forks_hygiene.py +273 -0
  805. ethereum_spec_tools/lint/lints/import_hygiene.py +145 -0
  806. ethereum_spec_tools/lint/lints/patch_hygiene.py +161 -0
  807. ethereum_spec_tools/new_fork/__init__.py +4 -0
  808. ethereum_spec_tools/new_fork/builder.py +430 -0
  809. ethereum_spec_tools/new_fork/cli.py +216 -0
  810. ethereum_spec_tools/new_fork/codemod/__init__.py +3 -0
  811. ethereum_spec_tools/new_fork/codemod/comment.py +79 -0
  812. ethereum_spec_tools/new_fork/codemod/constant.py +141 -0
  813. ethereum_spec_tools/new_fork/codemod/string.py +79 -0
  814. ethereum_spec_tools/patch_tool.py +78 -0
  815. ethereum_spec_tools/py.typed +0 -0
  816. ethereum_spec_tools/sync.py +1016 -0
@@ -0,0 +1,88 @@
1
+ """
2
+ Ethereum Virtual Machine (EVM) Logging Instructions.
3
+
4
+ .. contents:: Table of Contents
5
+ :backlinks: none
6
+ :local:
7
+
8
+ Introduction
9
+ ------------
10
+
11
+ Implementations of the EVM logging instructions.
12
+ """
13
+
14
+ from functools import partial
15
+
16
+ from ethereum_types.numeric import Uint
17
+
18
+ from ...blocks import Log
19
+ from .. import Evm
20
+ from ..exceptions import WriteInStaticContext
21
+ from ..gas import (
22
+ GAS_LOG,
23
+ GAS_LOG_DATA,
24
+ GAS_LOG_TOPIC,
25
+ calculate_gas_extend_memory,
26
+ charge_gas,
27
+ )
28
+ from ..memory import memory_read_bytes
29
+ from ..stack import pop
30
+
31
+
32
+ def log_n(evm: Evm, num_topics: int) -> None:
33
+ """
34
+ Appends a log entry, having `num_topics` topics, to the evm logs.
35
+
36
+ This will also expand the memory if the data (required by the log entry)
37
+ corresponding to the memory is not accessible.
38
+
39
+ Parameters
40
+ ----------
41
+ evm :
42
+ The current EVM frame.
43
+ num_topics :
44
+ The number of topics to be included in the log entry.
45
+
46
+ """
47
+ # STACK
48
+ memory_start_index = pop(evm.stack)
49
+ size = pop(evm.stack)
50
+
51
+ topics = []
52
+ for _ in range(num_topics):
53
+ topic = pop(evm.stack).to_be_bytes32()
54
+ topics.append(topic)
55
+
56
+ # GAS
57
+ extend_memory = calculate_gas_extend_memory(
58
+ evm.memory, [(memory_start_index, size)]
59
+ )
60
+ charge_gas(
61
+ evm,
62
+ GAS_LOG
63
+ + GAS_LOG_DATA * Uint(size)
64
+ + GAS_LOG_TOPIC * Uint(num_topics)
65
+ + extend_memory.cost,
66
+ )
67
+
68
+ # OPERATION
69
+ evm.memory += b"\x00" * extend_memory.expand_by
70
+ if evm.message.is_static:
71
+ raise WriteInStaticContext
72
+ log_entry = Log(
73
+ address=evm.message.current_target,
74
+ topics=tuple(topics),
75
+ data=memory_read_bytes(evm.memory, memory_start_index, size),
76
+ )
77
+
78
+ evm.logs = evm.logs + (log_entry,)
79
+
80
+ # PROGRAM COUNTER
81
+ evm.pc += Uint(1)
82
+
83
+
84
+ log0 = partial(log_n, num_topics=0)
85
+ log1 = partial(log_n, num_topics=1)
86
+ log2 = partial(log_n, num_topics=2)
87
+ log3 = partial(log_n, num_topics=3)
88
+ log4 = partial(log_n, num_topics=4)
@@ -0,0 +1,177 @@
1
+ """
2
+ Ethereum Virtual Machine (EVM) Memory Instructions.
3
+
4
+ .. contents:: Table of Contents
5
+ :backlinks: none
6
+ :local:
7
+
8
+ Introduction
9
+ ------------
10
+
11
+ Implementations of the EVM Memory instructions.
12
+ """
13
+
14
+ from ethereum_types.bytes import Bytes
15
+ from ethereum_types.numeric import U256, Uint
16
+
17
+ from ethereum.utils.numeric import ceil32
18
+
19
+ from .. import Evm
20
+ from ..gas import (
21
+ GAS_BASE,
22
+ GAS_COPY,
23
+ GAS_VERY_LOW,
24
+ calculate_gas_extend_memory,
25
+ charge_gas,
26
+ )
27
+ from ..memory import memory_read_bytes, memory_write
28
+ from ..stack import pop, push
29
+
30
+
31
+ def mstore(evm: Evm) -> None:
32
+ """
33
+ Stores a word to memory.
34
+ This also expands the memory, if the memory is
35
+ insufficient to store the word.
36
+
37
+ Parameters
38
+ ----------
39
+ evm :
40
+ The current EVM frame.
41
+
42
+ """
43
+ # STACK
44
+ start_position = pop(evm.stack)
45
+ value = pop(evm.stack).to_be_bytes32()
46
+
47
+ # GAS
48
+ extend_memory = calculate_gas_extend_memory(
49
+ evm.memory, [(start_position, U256(len(value)))]
50
+ )
51
+
52
+ charge_gas(evm, GAS_VERY_LOW + extend_memory.cost)
53
+
54
+ # OPERATION
55
+ evm.memory += b"\x00" * extend_memory.expand_by
56
+ memory_write(evm.memory, start_position, value)
57
+
58
+ # PROGRAM COUNTER
59
+ evm.pc += Uint(1)
60
+
61
+
62
+ def mstore8(evm: Evm) -> None:
63
+ """
64
+ Stores a byte to memory.
65
+ This also expands the memory, if the memory is
66
+ insufficient to store the word.
67
+
68
+ Parameters
69
+ ----------
70
+ evm :
71
+ The current EVM frame.
72
+
73
+ """
74
+ # STACK
75
+ start_position = pop(evm.stack)
76
+ value = pop(evm.stack)
77
+
78
+ # GAS
79
+ extend_memory = calculate_gas_extend_memory(
80
+ evm.memory, [(start_position, U256(1))]
81
+ )
82
+
83
+ charge_gas(evm, GAS_VERY_LOW + extend_memory.cost)
84
+
85
+ # OPERATION
86
+ evm.memory += b"\x00" * extend_memory.expand_by
87
+ normalized_bytes_value = Bytes([value & U256(0xFF)])
88
+ memory_write(evm.memory, start_position, normalized_bytes_value)
89
+
90
+ # PROGRAM COUNTER
91
+ evm.pc += Uint(1)
92
+
93
+
94
+ def mload(evm: Evm) -> None:
95
+ """
96
+ Load word from memory.
97
+
98
+ Parameters
99
+ ----------
100
+ evm :
101
+ The current EVM frame.
102
+
103
+ """
104
+ # STACK
105
+ start_position = pop(evm.stack)
106
+
107
+ # GAS
108
+ extend_memory = calculate_gas_extend_memory(
109
+ evm.memory, [(start_position, U256(32))]
110
+ )
111
+ charge_gas(evm, GAS_VERY_LOW + extend_memory.cost)
112
+
113
+ # OPERATION
114
+ evm.memory += b"\x00" * extend_memory.expand_by
115
+ value = U256.from_be_bytes(
116
+ memory_read_bytes(evm.memory, start_position, U256(32))
117
+ )
118
+ push(evm.stack, value)
119
+
120
+ # PROGRAM COUNTER
121
+ evm.pc += Uint(1)
122
+
123
+
124
+ def msize(evm: Evm) -> None:
125
+ """
126
+ Push the size of active memory in bytes onto the stack.
127
+
128
+ Parameters
129
+ ----------
130
+ evm :
131
+ The current EVM frame.
132
+
133
+ """
134
+ # STACK
135
+ pass
136
+
137
+ # GAS
138
+ charge_gas(evm, GAS_BASE)
139
+
140
+ # OPERATION
141
+ push(evm.stack, U256(len(evm.memory)))
142
+
143
+ # PROGRAM COUNTER
144
+ evm.pc += Uint(1)
145
+
146
+
147
+ def mcopy(evm: Evm) -> None:
148
+ """
149
+ Copy the bytes in memory from one location to another.
150
+
151
+ Parameters
152
+ ----------
153
+ evm :
154
+ The current EVM frame.
155
+
156
+ """
157
+ # STACK
158
+ destination = pop(evm.stack)
159
+ source = pop(evm.stack)
160
+ length = pop(evm.stack)
161
+
162
+ # GAS
163
+ words = ceil32(Uint(length)) // Uint(32)
164
+ copy_gas_cost = GAS_COPY * words
165
+
166
+ extend_memory = calculate_gas_extend_memory(
167
+ evm.memory, [(source, length), (destination, length)]
168
+ )
169
+ charge_gas(evm, GAS_VERY_LOW + copy_gas_cost + extend_memory.cost)
170
+
171
+ # OPERATION
172
+ evm.memory += b"\x00" * extend_memory.expand_by
173
+ value = memory_read_bytes(evm.memory, source, length)
174
+ memory_write(evm.memory, destination, value)
175
+
176
+ # PROGRAM COUNTER
177
+ evm.pc += Uint(1)
@@ -0,0 +1,208 @@
1
+ """
2
+ Ethereum Virtual Machine (EVM) Stack Instructions.
3
+
4
+ .. contents:: Table of Contents
5
+ :backlinks: none
6
+ :local:
7
+
8
+ Introduction
9
+ ------------
10
+
11
+ Implementations of the EVM stack related instructions.
12
+ """
13
+
14
+ from functools import partial
15
+
16
+ from ethereum_types.numeric import U256, Uint
17
+
18
+ from .. import Evm, stack
19
+ from ..exceptions import StackUnderflowError
20
+ from ..gas import GAS_BASE, GAS_VERY_LOW, charge_gas
21
+ from ..memory import buffer_read
22
+
23
+
24
+ def pop(evm: Evm) -> None:
25
+ """
26
+ Remove item from stack.
27
+
28
+ Parameters
29
+ ----------
30
+ evm :
31
+ The current EVM frame.
32
+
33
+ """
34
+ # STACK
35
+ stack.pop(evm.stack)
36
+
37
+ # GAS
38
+ charge_gas(evm, GAS_BASE)
39
+
40
+ # OPERATION
41
+ pass
42
+
43
+ # PROGRAM COUNTER
44
+ evm.pc += Uint(1)
45
+
46
+
47
+ def push_n(evm: Evm, num_bytes: int) -> None:
48
+ """
49
+ Pushes a N-byte immediate onto the stack. Push zero if num_bytes is zero.
50
+
51
+ Parameters
52
+ ----------
53
+ evm :
54
+ The current EVM frame.
55
+
56
+ num_bytes :
57
+ The number of immediate bytes to be read from the code and pushed to
58
+ the stack. Push zero if num_bytes is zero.
59
+
60
+ """
61
+ # STACK
62
+ pass
63
+
64
+ # GAS
65
+ if num_bytes == 0:
66
+ charge_gas(evm, GAS_BASE)
67
+ else:
68
+ charge_gas(evm, GAS_VERY_LOW)
69
+
70
+ # OPERATION
71
+ data_to_push = U256.from_be_bytes(
72
+ buffer_read(evm.code, U256(evm.pc + Uint(1)), U256(num_bytes))
73
+ )
74
+ stack.push(evm.stack, data_to_push)
75
+
76
+ # PROGRAM COUNTER
77
+ evm.pc += Uint(1) + Uint(num_bytes)
78
+
79
+
80
+ def dup_n(evm: Evm, item_number: int) -> None:
81
+ """
82
+ Duplicate the Nth stack item (from top of the stack) to the top of stack.
83
+
84
+ Parameters
85
+ ----------
86
+ evm :
87
+ The current EVM frame.
88
+
89
+ item_number :
90
+ The stack item number (0-indexed from top of stack) to be duplicated
91
+ to the top of stack.
92
+
93
+ """
94
+ # STACK
95
+ pass
96
+
97
+ # GAS
98
+ charge_gas(evm, GAS_VERY_LOW)
99
+ if item_number >= len(evm.stack):
100
+ raise StackUnderflowError
101
+ data_to_duplicate = evm.stack[len(evm.stack) - 1 - item_number]
102
+ stack.push(evm.stack, data_to_duplicate)
103
+
104
+ # PROGRAM COUNTER
105
+ evm.pc += Uint(1)
106
+
107
+
108
+ def swap_n(evm: Evm, item_number: int) -> None:
109
+ """
110
+ Swap the top and the `item_number` element of the stack, where
111
+ the top of the stack is position zero.
112
+
113
+ If `item_number` is zero, this function does nothing (which should not be
114
+ possible, since there is no `SWAP0` instruction).
115
+
116
+ Parameters
117
+ ----------
118
+ evm :
119
+ The current EVM frame.
120
+
121
+ item_number :
122
+ The stack item number (0-indexed from top of stack) to be swapped
123
+ with the top of stack element.
124
+
125
+ """
126
+ # STACK
127
+ pass
128
+
129
+ # GAS
130
+ charge_gas(evm, GAS_VERY_LOW)
131
+ if item_number >= len(evm.stack):
132
+ raise StackUnderflowError
133
+ evm.stack[-1], evm.stack[-1 - item_number] = (
134
+ evm.stack[-1 - item_number],
135
+ evm.stack[-1],
136
+ )
137
+
138
+ # PROGRAM COUNTER
139
+ evm.pc += Uint(1)
140
+
141
+
142
+ push0 = partial(push_n, num_bytes=0)
143
+ push1 = partial(push_n, num_bytes=1)
144
+ push2 = partial(push_n, num_bytes=2)
145
+ push3 = partial(push_n, num_bytes=3)
146
+ push4 = partial(push_n, num_bytes=4)
147
+ push5 = partial(push_n, num_bytes=5)
148
+ push6 = partial(push_n, num_bytes=6)
149
+ push7 = partial(push_n, num_bytes=7)
150
+ push8 = partial(push_n, num_bytes=8)
151
+ push9 = partial(push_n, num_bytes=9)
152
+ push10 = partial(push_n, num_bytes=10)
153
+ push11 = partial(push_n, num_bytes=11)
154
+ push12 = partial(push_n, num_bytes=12)
155
+ push13 = partial(push_n, num_bytes=13)
156
+ push14 = partial(push_n, num_bytes=14)
157
+ push15 = partial(push_n, num_bytes=15)
158
+ push16 = partial(push_n, num_bytes=16)
159
+ push17 = partial(push_n, num_bytes=17)
160
+ push18 = partial(push_n, num_bytes=18)
161
+ push19 = partial(push_n, num_bytes=19)
162
+ push20 = partial(push_n, num_bytes=20)
163
+ push21 = partial(push_n, num_bytes=21)
164
+ push22 = partial(push_n, num_bytes=22)
165
+ push23 = partial(push_n, num_bytes=23)
166
+ push24 = partial(push_n, num_bytes=24)
167
+ push25 = partial(push_n, num_bytes=25)
168
+ push26 = partial(push_n, num_bytes=26)
169
+ push27 = partial(push_n, num_bytes=27)
170
+ push28 = partial(push_n, num_bytes=28)
171
+ push29 = partial(push_n, num_bytes=29)
172
+ push30 = partial(push_n, num_bytes=30)
173
+ push31 = partial(push_n, num_bytes=31)
174
+ push32 = partial(push_n, num_bytes=32)
175
+
176
+ dup1 = partial(dup_n, item_number=0)
177
+ dup2 = partial(dup_n, item_number=1)
178
+ dup3 = partial(dup_n, item_number=2)
179
+ dup4 = partial(dup_n, item_number=3)
180
+ dup5 = partial(dup_n, item_number=4)
181
+ dup6 = partial(dup_n, item_number=5)
182
+ dup7 = partial(dup_n, item_number=6)
183
+ dup8 = partial(dup_n, item_number=7)
184
+ dup9 = partial(dup_n, item_number=8)
185
+ dup10 = partial(dup_n, item_number=9)
186
+ dup11 = partial(dup_n, item_number=10)
187
+ dup12 = partial(dup_n, item_number=11)
188
+ dup13 = partial(dup_n, item_number=12)
189
+ dup14 = partial(dup_n, item_number=13)
190
+ dup15 = partial(dup_n, item_number=14)
191
+ dup16 = partial(dup_n, item_number=15)
192
+
193
+ swap1 = partial(swap_n, item_number=1)
194
+ swap2 = partial(swap_n, item_number=2)
195
+ swap3 = partial(swap_n, item_number=3)
196
+ swap4 = partial(swap_n, item_number=4)
197
+ swap5 = partial(swap_n, item_number=5)
198
+ swap6 = partial(swap_n, item_number=6)
199
+ swap7 = partial(swap_n, item_number=7)
200
+ swap8 = partial(swap_n, item_number=8)
201
+ swap9 = partial(swap_n, item_number=9)
202
+ swap10 = partial(swap_n, item_number=10)
203
+ swap11 = partial(swap_n, item_number=11)
204
+ swap12 = partial(swap_n, item_number=12)
205
+ swap13 = partial(swap_n, item_number=13)
206
+ swap14 = partial(swap_n, item_number=14)
207
+ swap15 = partial(swap_n, item_number=15)
208
+ swap16 = partial(swap_n, item_number=16)
@@ -0,0 +1,188 @@
1
+ """
2
+ Ethereum Virtual Machine (EVM) Storage Instructions.
3
+
4
+ .. contents:: Table of Contents
5
+ :backlinks: none
6
+ :local:
7
+
8
+ Introduction
9
+ ------------
10
+
11
+ Implementations of the EVM storage related instructions.
12
+ """
13
+
14
+ from ethereum_types.numeric import Uint
15
+
16
+ from ...state import (
17
+ get_storage,
18
+ get_storage_original,
19
+ get_transient_storage,
20
+ set_storage,
21
+ set_transient_storage,
22
+ )
23
+ from .. import Evm
24
+ from ..exceptions import OutOfGasError, WriteInStaticContext
25
+ from ..gas import (
26
+ GAS_CALL_STIPEND,
27
+ GAS_COLD_SLOAD,
28
+ GAS_STORAGE_CLEAR_REFUND,
29
+ GAS_STORAGE_SET,
30
+ GAS_STORAGE_UPDATE,
31
+ GAS_WARM_ACCESS,
32
+ charge_gas,
33
+ )
34
+ from ..stack import pop, push
35
+
36
+
37
+ def sload(evm: Evm) -> None:
38
+ """
39
+ Loads to the stack, the value corresponding to a certain key from the
40
+ storage of the current account.
41
+
42
+ Parameters
43
+ ----------
44
+ evm :
45
+ The current EVM frame.
46
+
47
+ """
48
+ # STACK
49
+ key = pop(evm.stack).to_be_bytes32()
50
+
51
+ # GAS
52
+ if (evm.message.current_target, key) in evm.accessed_storage_keys:
53
+ charge_gas(evm, GAS_WARM_ACCESS)
54
+ else:
55
+ evm.accessed_storage_keys.add((evm.message.current_target, key))
56
+ charge_gas(evm, GAS_COLD_SLOAD)
57
+
58
+ # OPERATION
59
+ value = get_storage(
60
+ evm.message.block_env.state, evm.message.current_target, key
61
+ )
62
+
63
+ push(evm.stack, value)
64
+
65
+ # PROGRAM COUNTER
66
+ evm.pc += Uint(1)
67
+
68
+
69
+ def sstore(evm: Evm) -> None:
70
+ """
71
+ Stores a value at a certain key in the current context's storage.
72
+
73
+ Parameters
74
+ ----------
75
+ evm :
76
+ The current EVM frame.
77
+
78
+ """
79
+ # STACK
80
+ key = pop(evm.stack).to_be_bytes32()
81
+ new_value = pop(evm.stack)
82
+ if evm.gas_left <= GAS_CALL_STIPEND:
83
+ raise OutOfGasError
84
+
85
+ state = evm.message.block_env.state
86
+ original_value = get_storage_original(
87
+ state, evm.message.current_target, key
88
+ )
89
+ current_value = get_storage(state, evm.message.current_target, key)
90
+
91
+ gas_cost = Uint(0)
92
+
93
+ if (evm.message.current_target, key) not in evm.accessed_storage_keys:
94
+ evm.accessed_storage_keys.add((evm.message.current_target, key))
95
+ gas_cost += GAS_COLD_SLOAD
96
+
97
+ if original_value == current_value and current_value != new_value:
98
+ if original_value == 0:
99
+ gas_cost += GAS_STORAGE_SET
100
+ else:
101
+ gas_cost += GAS_STORAGE_UPDATE - GAS_COLD_SLOAD
102
+ else:
103
+ gas_cost += GAS_WARM_ACCESS
104
+
105
+ # Refund Counter Calculation
106
+ if current_value != new_value:
107
+ if original_value != 0 and current_value != 0 and new_value == 0:
108
+ # Storage is cleared for the first time in the transaction
109
+ evm.refund_counter += int(GAS_STORAGE_CLEAR_REFUND)
110
+
111
+ if original_value != 0 and current_value == 0:
112
+ # Gas refund issued earlier to be reversed
113
+ evm.refund_counter -= int(GAS_STORAGE_CLEAR_REFUND)
114
+
115
+ if original_value == new_value:
116
+ # Storage slot being restored to its original value
117
+ if original_value == 0:
118
+ # Slot was originally empty and was SET earlier
119
+ evm.refund_counter += int(GAS_STORAGE_SET - GAS_WARM_ACCESS)
120
+ else:
121
+ # Slot was originally non-empty and was UPDATED earlier
122
+ evm.refund_counter += int(
123
+ GAS_STORAGE_UPDATE - GAS_COLD_SLOAD - GAS_WARM_ACCESS
124
+ )
125
+
126
+ charge_gas(evm, gas_cost)
127
+ if evm.message.is_static:
128
+ raise WriteInStaticContext
129
+ set_storage(state, evm.message.current_target, key, new_value)
130
+
131
+ # PROGRAM COUNTER
132
+ evm.pc += Uint(1)
133
+
134
+
135
+ def tload(evm: Evm) -> None:
136
+ """
137
+ Loads to the stack, the value corresponding to a certain key from the
138
+ transient storage of the current account.
139
+
140
+ Parameters
141
+ ----------
142
+ evm :
143
+ The current EVM frame.
144
+
145
+ """
146
+ # STACK
147
+ key = pop(evm.stack).to_be_bytes32()
148
+
149
+ # GAS
150
+ charge_gas(evm, GAS_WARM_ACCESS)
151
+
152
+ # OPERATION
153
+ value = get_transient_storage(
154
+ evm.message.tx_env.transient_storage, evm.message.current_target, key
155
+ )
156
+ push(evm.stack, value)
157
+
158
+ # PROGRAM COUNTER
159
+ evm.pc += Uint(1)
160
+
161
+
162
+ def tstore(evm: Evm) -> None:
163
+ """
164
+ Stores a value at a certain key in the current context's transient storage.
165
+
166
+ Parameters
167
+ ----------
168
+ evm :
169
+ The current EVM frame.
170
+
171
+ """
172
+ # STACK
173
+ key = pop(evm.stack).to_be_bytes32()
174
+ new_value = pop(evm.stack)
175
+
176
+ # GAS
177
+ charge_gas(evm, GAS_WARM_ACCESS)
178
+ if evm.message.is_static:
179
+ raise WriteInStaticContext
180
+ set_transient_storage(
181
+ evm.message.tx_env.transient_storage,
182
+ evm.message.current_target,
183
+ key,
184
+ new_value,
185
+ )
186
+
187
+ # PROGRAM COUNTER
188
+ evm.pc += Uint(1)