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,405 @@
1
+ """
2
+ A `Block` is a single link in the chain that is Ethereum. Each `Block` contains
3
+ a `Header` and zero or more transactions. Each `Header` contains associated
4
+ metadata like the block number, parent block hash, and how much gas was
5
+ consumed by its transactions.
6
+
7
+ Together, these blocks form a cryptographically secure journal recording the
8
+ history of all state transitions that have happened since the genesis of the
9
+ chain.
10
+ """
11
+
12
+ from dataclasses import dataclass
13
+ from typing import Tuple
14
+
15
+ from ethereum_rlp import rlp
16
+ from ethereum_types.bytes import Bytes, Bytes8, Bytes32
17
+ from ethereum_types.frozen import slotted_freezable
18
+ from ethereum_types.numeric import U64, U256, Uint
19
+
20
+ from ethereum.crypto.hash import Hash32
21
+
22
+ from .fork_types import Address, Bloom, Root
23
+ from .transactions import (
24
+ AccessListTransaction,
25
+ BlobTransaction,
26
+ FeeMarketTransaction,
27
+ LegacyTransaction,
28
+ SetCodeTransaction,
29
+ Transaction,
30
+ )
31
+
32
+
33
+ @slotted_freezable
34
+ @dataclass
35
+ class Withdrawal:
36
+ """
37
+ Withdrawals represent a transfer of ETH from the consensus layer (beacon
38
+ chain) to the execution layer, as validated by the consensus layer. Each
39
+ withdrawal is listed in the block's list of withdrawals. See [`block`].
40
+
41
+ [`block`]: ref:ethereum.forks.prague.blocks.Block.withdrawals
42
+ """
43
+
44
+ index: U64
45
+ """
46
+ The unique index of the withdrawal, incremented for each withdrawal
47
+ processed.
48
+ """
49
+
50
+ validator_index: U64
51
+ """
52
+ The index of the validator on the consensus layer that is withdrawing.
53
+ """
54
+
55
+ address: Address
56
+ """
57
+ The execution-layer address receiving the withdrawn ETH.
58
+ """
59
+
60
+ amount: U256
61
+ """
62
+ The amount of ETH being withdrawn.
63
+ """
64
+
65
+
66
+ @slotted_freezable
67
+ @dataclass
68
+ class Header:
69
+ """
70
+ Header portion of a block on the chain, containing metadata and
71
+ cryptographic commitments to the block's contents.
72
+ """
73
+
74
+ parent_hash: Hash32
75
+ """
76
+ Hash ([`keccak256`]) of the parent block's header, encoded with [RLP].
77
+
78
+ [`keccak256`]: ref:ethereum.crypto.hash.keccak256
79
+ [RLP]: https://ethereum.github.io/ethereum-rlp/src/ethereum_rlp/rlp.py.html
80
+ """
81
+
82
+ ommers_hash: Hash32
83
+ """
84
+ Hash ([`keccak256`]) of the ommers (uncle blocks) in this block, encoded
85
+ with [RLP]. However, in post merge forks `ommers_hash` is always
86
+ [`EMPTY_OMMER_HASH`].
87
+
88
+ [`keccak256`]: ref:ethereum.crypto.hash.keccak256
89
+ [RLP]: https://ethereum.github.io/ethereum-rlp/src/ethereum_rlp/rlp.py.html
90
+ [`EMPTY_OMMER_HASH`]: ref:ethereum.forks.prague.fork.EMPTY_OMMER_HASH
91
+ """
92
+
93
+ coinbase: Address
94
+ """
95
+ Address of the miner (or validator) who mined this block.
96
+
97
+ The coinbase address receives the block reward and the priority fees (tips)
98
+ from included transactions. Base fees (introduced in [EIP-1559]) are burned
99
+ and do not go to the coinbase.
100
+
101
+ [EIP-1559]: https://eips.ethereum.org/EIPS/eip-1559
102
+ """
103
+
104
+ state_root: Root
105
+ """
106
+ Root hash ([`keccak256`]) of the state trie after executing all
107
+ transactions in this block. It represents the state of the Ethereum Virtual
108
+ Machine (EVM) after all transactions in this block have been processed. It
109
+ is computed using the [`state_root()`] function, which computes the root
110
+ of the Merkle-Patricia [Trie] representing the Ethereum world state.
111
+
112
+ [`keccak256`]: ref:ethereum.crypto.hash.keccak256
113
+ [`state_root()`]: ref:ethereum.forks.prague.state.state_root
114
+ [Trie]: ref:ethereum.forks.prague.trie.Trie
115
+ """
116
+
117
+ transactions_root: Root
118
+ """
119
+ Root hash ([`keccak256`]) of the transactions trie, which contains all
120
+ transactions included in this block in their original order. It is computed
121
+ using the [`root()`] function over the Merkle-Patricia [trie] of
122
+ transactions as the parameter.
123
+
124
+ [`keccak256`]: ref:ethereum.crypto.hash.keccak256
125
+ [`root()`]: ref:ethereum.forks.prague.trie.root
126
+ [Trie]: ref:ethereum.forks.prague.trie.Trie
127
+ """
128
+
129
+ receipt_root: Root
130
+ """
131
+ Root hash ([`keccak256`]) of the receipts trie, which contains all receipts
132
+ for transactions in this block. It is computed using the [`root()`]
133
+ function over the Merkle-Patricia [trie] constructed from the receipts.
134
+
135
+ [`keccak256`]: ref:ethereum.crypto.hash.keccak256
136
+ [`root()`]: ref:ethereum.forks.prague.trie.root
137
+ [Trie]: ref:ethereum.forks.prague.trie.Trie
138
+ """
139
+
140
+ bloom: Bloom
141
+ """
142
+ Bloom filter for logs generated by transactions in this block.
143
+ Constructed from all logs in the block using the [logs bloom] mechanism.
144
+
145
+ [logs bloom]: ref:ethereum.forks.prague.bloom.logs_bloom
146
+ """
147
+
148
+ difficulty: Uint
149
+ """
150
+ Difficulty of the block (pre-PoS), or a constant in PoS.
151
+ """
152
+
153
+ number: Uint
154
+ """
155
+ Block number, (height) in the chain.
156
+ """
157
+
158
+ gas_limit: Uint
159
+ """
160
+ Maximum gas allowed in this block. Pre [EIP-1559], this was the maximum
161
+ gas that could be consumed by all transactions in the block. Post
162
+ [EIP-1559], this is still the maximum gas limit, but the base fee per gas
163
+ is also considered when calculating the effective gas limit. This can be
164
+ [adjusted by a factor of 1/1024] from the previous block's gas limit, up
165
+ until a maximum of 30 million gas.
166
+
167
+ [EIP-1559]: https://eips.ethereum.org/EIPS/eip-1559
168
+ [adjusted by a factor of 1/1024]:
169
+ https://ethereum.org/en/developers/docs/blocks/
170
+ """
171
+
172
+ gas_used: Uint
173
+ """
174
+ Total gas used by all transactions in this block.
175
+ """
176
+
177
+ timestamp: U256
178
+ """
179
+ Timestamp of when the block was mined, in seconds since the unix epoch.
180
+ """
181
+
182
+ extra_data: Bytes
183
+ """
184
+ Arbitrary data included by the miner.
185
+ """
186
+
187
+ prev_randao: Bytes32
188
+ """
189
+ Output of the RANDAO beacon for random validator selection.
190
+ """
191
+
192
+ nonce: Bytes8
193
+ """
194
+ Nonce used in the mining process (pre-PoS), set to zero in PoS.
195
+ """
196
+
197
+ base_fee_per_gas: Uint
198
+ """
199
+ Base fee per gas for transactions in this block, introduced in
200
+ [EIP-1559]. This is the minimum fee per gas that must be paid for a
201
+ transaction to be included in this block.
202
+
203
+ [EIP-1559]: https://eips.ethereum.org/EIPS/eip-1559
204
+ """
205
+
206
+ withdrawals_root: Root
207
+ """
208
+ Root hash of the withdrawals trie, which contains all withdrawals in this
209
+ block.
210
+ """
211
+
212
+ blob_gas_used: U64
213
+ """
214
+ Total blob gas consumed by the transactions within this block. Introduced
215
+ in [EIP-4844].
216
+
217
+ [EIP-4844]: https://eips.ethereum.org/EIPS/eip-4844
218
+ """
219
+
220
+ excess_blob_gas: U64
221
+ """
222
+ Running total of blob gas consumed in excess of the target, prior to this
223
+ block. Blocks with above-target blob gas consumption increase this value,
224
+ while blocks with below-target blob gas consumption decrease it (to a
225
+ minimum of zero). Introduced in [EIP-4844].
226
+
227
+ [EIP-4844]: https://eips.ethereum.org/EIPS/eip-4844
228
+ """
229
+
230
+ parent_beacon_block_root: Root
231
+ """
232
+ Root hash of the corresponding beacon chain block.
233
+ """
234
+
235
+ requests_hash: Hash32
236
+ """
237
+ [SHA2-256] hash of all the collected requests in this block. Introduced in
238
+ [EIP-7685]. See [`compute_requests_hash`][crh] for more details.
239
+
240
+ [EIP-7685]: https://eips.ethereum.org/EIPS/eip-7685
241
+ [crh]: ref:ethereum.forks.prague.requests.compute_requests_hash
242
+ [SHA2-256]: https://en.wikipedia.org/wiki/SHA-2
243
+ """
244
+
245
+
246
+ @slotted_freezable
247
+ @dataclass
248
+ class Block:
249
+ """
250
+ A complete block on Ethereum, which is composed of a block [`header`],
251
+ a list of transactions, a list of ommers (deprecated), and a list of
252
+ validator [withdrawals].
253
+
254
+ The block [`header`] includes fields relevant to the Proof-of-Stake
255
+ consensus, with deprecated Proof-of-Work fields such as `difficulty`,
256
+ `nonce`, and `ommersHash` set to constants. The `coinbase` field
257
+ denotes the address receiving priority fees from the block.
258
+
259
+ The header also contains commitments to the current state (`stateRoot`),
260
+ the transactions (`transactionsRoot`), the transaction receipts
261
+ (`receiptsRoot`), and `withdrawalsRoot` committing to the validator
262
+ withdrawals included in this block. It also includes a bloom filter which
263
+ summarizes log data from the transactions.
264
+
265
+ Withdrawals represent ETH transfers from validators to their recipients,
266
+ introduced by the consensus layer. Ommers remain deprecated and empty.
267
+
268
+ [`header`]: ref:ethereum.forks.prague.blocks.Header
269
+ [withdrawals]: ref:ethereum.forks.prague.blocks.Withdrawal
270
+ """
271
+
272
+ header: Header
273
+ """
274
+ The block header containing metadata and cryptographic commitments. Refer
275
+ [headers] for more details on the fields included in the header.
276
+
277
+ [headers]: ref:ethereum.forks.prague.blocks.Header
278
+ """
279
+
280
+ transactions: Tuple[Bytes | LegacyTransaction, ...]
281
+ """
282
+ A tuple of transactions included in this block. Each transaction can be
283
+ any of a legacy transaction, an access list transaction, a fee market
284
+ transaction, a blob transaction, or a set code transaction.
285
+ """
286
+
287
+ ommers: Tuple[Header, ...]
288
+ """
289
+ A tuple of ommers (uncle blocks) included in this block. Always empty in
290
+ Proof-of-Stake forks.
291
+ """
292
+
293
+ withdrawals: Tuple[Withdrawal, ...]
294
+ """
295
+ A tuple of withdrawals processed in this block.
296
+ """
297
+
298
+
299
+ @slotted_freezable
300
+ @dataclass
301
+ class Log:
302
+ """
303
+ Data record produced during the execution of a transaction. Logs are used
304
+ by smart contracts to emit events (using the EVM log opcodes ([`LOG0`],
305
+ [`LOG1`], [`LOG2`], [`LOG3`] and [`LOG4`]), which can be efficiently
306
+ searched using the bloom filter in the block header.
307
+
308
+ [`LOG0`]: ref:ethereum.forks.prague.vm.instructions.log.log0
309
+ [`LOG1`]: ref:ethereum.forks.prague.vm.instructions.log.log1
310
+ [`LOG2`]: ref:ethereum.forks.prague.vm.instructions.log.log2
311
+ [`LOG3`]: ref:ethereum.forks.prague.vm.instructions.log.log3
312
+ [`LOG4`]: ref:ethereum.forks.prague.vm.instructions.log.log4
313
+ """
314
+
315
+ address: Address
316
+ """
317
+ The address of the contract that emitted the log.
318
+ """
319
+
320
+ topics: Tuple[Hash32, ...]
321
+ """
322
+ A tuple of up to four topics associated with the log, used for filtering.
323
+ """
324
+
325
+ data: Bytes
326
+ """
327
+ The data payload of the log, which can contain any arbitrary data.
328
+ """
329
+
330
+
331
+ @slotted_freezable
332
+ @dataclass
333
+ class Receipt:
334
+ """
335
+ Result of a transaction execution. Receipts are included in the receipts
336
+ trie.
337
+ """
338
+
339
+ succeeded: bool
340
+ """
341
+ Whether the transaction execution was successful.
342
+ """
343
+
344
+ cumulative_gas_used: Uint
345
+ """
346
+ Total gas used in the block up to and including this transaction.
347
+ """
348
+
349
+ bloom: Bloom
350
+ """
351
+ Bloom filter for logs generated by this transaction. This is a 2048-byte
352
+ bit array that allows for efficient filtering of logs.
353
+ """
354
+
355
+ logs: Tuple[Log, ...]
356
+ """
357
+ A tuple of logs generated by this transaction. Each log contains the
358
+ address of the contract that emitted it, a tuple of topics, and the data
359
+ payload.
360
+ """
361
+
362
+
363
+ def encode_receipt(tx: Transaction, receipt: Receipt) -> Bytes | Receipt:
364
+ r"""
365
+ Encodes a transaction receipt based on the transaction type.
366
+
367
+ The encoding follows the same format as transactions encoding, where:
368
+ - AccessListTransaction receipts are prefixed with `b"\x01"`.
369
+ - FeeMarketTransaction receipts are prefixed with `b"\x02"`.
370
+ - BlobTransaction receipts are prefixed with `b"\x03"`.
371
+ - SetCodeTransaction receipts are prefixed with `b"\x04"`.
372
+ - LegacyTransaction receipts are returned as is.
373
+ """
374
+ if isinstance(tx, AccessListTransaction):
375
+ return b"\x01" + rlp.encode(receipt)
376
+ elif isinstance(tx, FeeMarketTransaction):
377
+ return b"\x02" + rlp.encode(receipt)
378
+ elif isinstance(tx, BlobTransaction):
379
+ return b"\x03" + rlp.encode(receipt)
380
+ elif isinstance(tx, SetCodeTransaction):
381
+ return b"\x04" + rlp.encode(receipt)
382
+ else:
383
+ return receipt
384
+
385
+
386
+ def decode_receipt(receipt: Bytes | Receipt) -> Receipt:
387
+ r"""
388
+ Decodes a receipt from its serialized form.
389
+
390
+ The decoding follows the same format as transactions decoding, where:
391
+ - Receipts prefixed with `b"\x01"` are decoded as AccessListTransaction
392
+ receipts.
393
+ - Receipts prefixed with `b"\x02"` are decoded as FeeMarketTransaction
394
+ receipts.
395
+ - Receipts prefixed with `b"\x03"` are decoded as BlobTransaction
396
+ receipts.
397
+ - Receipts prefixed with `b"\x04"` are decoded as SetCodeTransaction
398
+ receipts.
399
+ - LegacyTransaction receipts are returned as is.
400
+ """
401
+ if isinstance(receipt, Bytes):
402
+ assert receipt[0] in (1, 2, 3, 4)
403
+ return rlp.decode_to(Receipt, receipt[1:])
404
+ else:
405
+ return receipt
@@ -0,0 +1,87 @@
1
+ """
2
+ Ethereum Logs Bloom.
3
+
4
+ .. contents:: Table of Contents
5
+ :backlinks: none
6
+ :local:
7
+
8
+ Introduction
9
+ ------------
10
+
11
+ This modules defines functions for calculating bloom filters of logs. For the
12
+ general theory of bloom filters see e.g. `Wikipedia
13
+ <https://en.wikipedia.org/wiki/Bloom_filter>`_. Bloom filters are used to allow
14
+ for efficient searching of logs by address and/or topic, by rapidly
15
+ eliminating blocks and receipts from their search.
16
+ """
17
+
18
+ from typing import Tuple
19
+
20
+ from ethereum_types.bytes import Bytes
21
+ from ethereum_types.numeric import Uint
22
+
23
+ from ethereum.crypto.hash import keccak256
24
+
25
+ from .blocks import Log
26
+ from .fork_types import Bloom
27
+
28
+
29
+ def add_to_bloom(bloom: bytearray, bloom_entry: Bytes) -> None:
30
+ """
31
+ Add a bloom entry to the bloom filter (`bloom`).
32
+
33
+ The number of hash functions used is 3. They are calculated by taking the
34
+ least significant 11 bits from the first 3 16-bit words of the
35
+ `keccak_256()` hash of `bloom_entry`.
36
+
37
+ Parameters
38
+ ----------
39
+ bloom :
40
+ The bloom filter.
41
+ bloom_entry :
42
+ An entry which is to be added to bloom filter.
43
+
44
+ """
45
+ hashed = keccak256(bloom_entry)
46
+
47
+ for idx in (0, 2, 4):
48
+ # Obtain the least significant 11 bits from the pair of bytes
49
+ # (16 bits), and set this bit in bloom bytearray.
50
+ # The obtained bit is 0-indexed in the bloom filter from the least
51
+ # significant bit to the most significant bit.
52
+ bit_to_set = Uint.from_be_bytes(hashed[idx : idx + 2]) & Uint(0x07FF)
53
+ # Below is the index of the bit in the bytearray (where 0-indexed
54
+ # byte is the most significant byte)
55
+ bit_index = 0x07FF - int(bit_to_set)
56
+
57
+ byte_index = bit_index // 8
58
+ bit_value = 1 << (7 - (bit_index % 8))
59
+ bloom[byte_index] = bloom[byte_index] | bit_value
60
+
61
+
62
+ def logs_bloom(logs: Tuple[Log, ...]) -> Bloom:
63
+ """
64
+ Obtain the logs bloom from a list of log entries.
65
+
66
+ The address and each topic of a log are added to the bloom filter.
67
+
68
+ Parameters
69
+ ----------
70
+ logs :
71
+ List of logs for which the logs bloom is to be obtained.
72
+
73
+ Returns
74
+ -------
75
+ logs_bloom : `Bloom`
76
+ The logs bloom obtained which is 256 bytes with some bits set as per
77
+ the caller address and the log topics.
78
+
79
+ """
80
+ bloom: bytearray = bytearray(b"\x00" * 256)
81
+
82
+ for log in logs:
83
+ add_to_bloom(bloom, log.address)
84
+ for topic in log.topics:
85
+ add_to_bloom(bloom, topic)
86
+
87
+ return Bloom(bloom)
@@ -0,0 +1,115 @@
1
+ """
2
+ Exceptions specific to this fork.
3
+ """
4
+
5
+ from typing import TYPE_CHECKING, Final
6
+
7
+ from ethereum_types.numeric import Uint
8
+
9
+ from ethereum.exceptions import InvalidTransaction
10
+
11
+ if TYPE_CHECKING:
12
+ from .transactions import Transaction
13
+
14
+
15
+ class TransactionTypeError(InvalidTransaction):
16
+ """
17
+ Unknown [EIP-2718] transaction type byte.
18
+
19
+ [EIP-2718]: https://eips.ethereum.org/EIPS/eip-2718
20
+ """
21
+
22
+ transaction_type: Final[int]
23
+ """
24
+ The type byte of the transaction that caused the error.
25
+ """
26
+
27
+ def __init__(self, transaction_type: int):
28
+ super().__init__(f"unknown transaction type `{transaction_type}`")
29
+ self.transaction_type = transaction_type
30
+
31
+
32
+ class TransactionTypeContractCreationError(InvalidTransaction):
33
+ """
34
+ Contract creation is not allowed for a transaction type.
35
+ """
36
+
37
+ transaction: "Transaction"
38
+ """
39
+ The transaction that caused the error.
40
+ """
41
+
42
+ def __init__(self, transaction: "Transaction"):
43
+ super().__init__(
44
+ f"transaction type `{type(transaction).__name__}` not allowed to "
45
+ "create contracts"
46
+ )
47
+ self.transaction = transaction
48
+
49
+
50
+ class BlobGasLimitExceededError(InvalidTransaction):
51
+ """
52
+ The blob gas limit for the transaction exceeds the maximum allowed.
53
+ """
54
+
55
+
56
+ class InsufficientMaxFeePerBlobGasError(InvalidTransaction):
57
+ """
58
+ The maximum fee per blob gas is insufficient for the transaction.
59
+ """
60
+
61
+
62
+ class InsufficientMaxFeePerGasError(InvalidTransaction):
63
+ """
64
+ The maximum fee per gas is insufficient for the transaction.
65
+ """
66
+
67
+ transaction_max_fee_per_gas: Final[Uint]
68
+ """
69
+ The maximum fee per gas specified in the transaction.
70
+ """
71
+
72
+ block_base_fee_per_gas: Final[Uint]
73
+ """
74
+ The base fee per gas of the block in which the transaction is included.
75
+ """
76
+
77
+ def __init__(
78
+ self, transaction_max_fee_per_gas: Uint, block_base_fee_per_gas: Uint
79
+ ):
80
+ super().__init__(
81
+ f"Insufficient max fee per gas "
82
+ f"({transaction_max_fee_per_gas} < {block_base_fee_per_gas})"
83
+ )
84
+ self.transaction_max_fee_per_gas = transaction_max_fee_per_gas
85
+ self.block_base_fee_per_gas = block_base_fee_per_gas
86
+
87
+
88
+ class InvalidBlobVersionedHashError(InvalidTransaction):
89
+ """
90
+ The versioned hash of the blob is invalid.
91
+ """
92
+
93
+
94
+ class NoBlobDataError(InvalidTransaction):
95
+ """
96
+ The transaction does not contain any blob data.
97
+ """
98
+
99
+
100
+ class PriorityFeeGreaterThanMaxFeeError(InvalidTransaction):
101
+ """
102
+ The priority fee is greater than the maximum fee per gas.
103
+ """
104
+
105
+
106
+ class EmptyAuthorizationListError(InvalidTransaction):
107
+ """
108
+ The authorization list in the transaction is empty.
109
+ """
110
+
111
+
112
+ class InitCodeTooLargeError(InvalidTransaction):
113
+ """
114
+ The init code of the transaction is too large.
115
+ """