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,292 @@
1
+ """
2
+ Ethereum Virtual Machine (EVM) Interpreter.
3
+
4
+ .. contents:: Table of Contents
5
+ :backlinks: none
6
+ :local:
7
+
8
+ Introduction
9
+ ------------
10
+
11
+ A straightforward interpreter that executes EVM code.
12
+ """
13
+
14
+ from dataclasses import dataclass
15
+ from typing import Optional, Set, Tuple
16
+
17
+ from ethereum_types.bytes import Bytes0
18
+ from ethereum_types.numeric import U256, Uint, ulen
19
+
20
+ from ethereum.exceptions import EthereumException
21
+ from ethereum.trace import (
22
+ EvmStop,
23
+ OpEnd,
24
+ OpException,
25
+ OpStart,
26
+ PrecompileEnd,
27
+ PrecompileStart,
28
+ TransactionEnd,
29
+ evm_trace,
30
+ )
31
+
32
+ from ..blocks import Log
33
+ from ..fork_types import Address
34
+ from ..state import (
35
+ account_exists_and_is_empty,
36
+ account_has_code_or_nonce,
37
+ account_has_storage,
38
+ begin_transaction,
39
+ commit_transaction,
40
+ destroy_storage,
41
+ increment_nonce,
42
+ move_ether,
43
+ rollback_transaction,
44
+ set_code,
45
+ touch_account,
46
+ )
47
+ from ..vm import Message
48
+ from ..vm.gas import GAS_CODE_DEPOSIT, charge_gas
49
+ from ..vm.precompiled_contracts.mapping import PRE_COMPILED_CONTRACTS
50
+ from . import Evm
51
+ from .exceptions import (
52
+ AddressCollision,
53
+ ExceptionalHalt,
54
+ InvalidOpcode,
55
+ OutOfGasError,
56
+ StackDepthLimitError,
57
+ )
58
+ from .instructions import Ops, op_implementation
59
+ from .runtime import get_valid_jump_destinations
60
+
61
+ STACK_DEPTH_LIMIT = Uint(1024)
62
+ MAX_CODE_SIZE = 0x6000
63
+
64
+
65
+ @dataclass
66
+ class MessageCallOutput:
67
+ """
68
+ Output of a particular message call.
69
+
70
+ Contains the following:
71
+
72
+ 1. `gas_left`: remaining gas after execution.
73
+ 2. `refund_counter`: gas to refund after execution.
74
+ 3. `logs`: list of `Log` generated during execution.
75
+ 4. `accounts_to_delete`: Contracts which have self-destructed.
76
+ 5. `touched_accounts`: Accounts that have been touched.
77
+ 6. `error`: The error from the execution if any.
78
+ """
79
+
80
+ gas_left: Uint
81
+ refund_counter: U256
82
+ logs: Tuple[Log, ...]
83
+ accounts_to_delete: Set[Address]
84
+ touched_accounts: Set[Address]
85
+ error: Optional[EthereumException]
86
+
87
+
88
+ def process_message_call(message: Message) -> MessageCallOutput:
89
+ """
90
+ If `message.target` is empty then it creates a smart contract
91
+ else it executes a call from the `message.caller` to the `message.target`.
92
+
93
+ Parameters
94
+ ----------
95
+ message :
96
+ Transaction specific items.
97
+
98
+ Returns
99
+ -------
100
+ output : `MessageCallOutput`
101
+ Output of the message call
102
+
103
+ """
104
+ block_env = message.block_env
105
+ refund_counter = U256(0)
106
+ if message.target == Bytes0(b""):
107
+ is_collision = account_has_code_or_nonce(
108
+ block_env.state, message.current_target
109
+ ) or account_has_storage(block_env.state, message.current_target)
110
+ if is_collision:
111
+ return MessageCallOutput(
112
+ Uint(0), U256(0), tuple(), set(), set(), AddressCollision()
113
+ )
114
+ else:
115
+ evm = process_create_message(message)
116
+ else:
117
+ evm = process_message(message)
118
+ if account_exists_and_is_empty(
119
+ block_env.state, Address(message.target)
120
+ ):
121
+ evm.touched_accounts.add(Address(message.target))
122
+
123
+ if evm.error:
124
+ logs: Tuple[Log, ...] = ()
125
+ accounts_to_delete = set()
126
+ touched_accounts = set()
127
+ else:
128
+ logs = evm.logs
129
+ accounts_to_delete = evm.accounts_to_delete
130
+ touched_accounts = evm.touched_accounts
131
+ refund_counter += U256(evm.refund_counter)
132
+
133
+ tx_end = TransactionEnd(
134
+ int(message.gas) - int(evm.gas_left), evm.output, evm.error
135
+ )
136
+ evm_trace(evm, tx_end)
137
+
138
+ return MessageCallOutput(
139
+ gas_left=evm.gas_left,
140
+ refund_counter=refund_counter,
141
+ logs=logs,
142
+ accounts_to_delete=accounts_to_delete,
143
+ touched_accounts=touched_accounts,
144
+ error=evm.error,
145
+ )
146
+
147
+
148
+ def process_create_message(message: Message) -> Evm:
149
+ """
150
+ Executes a call to create a smart contract.
151
+
152
+ Parameters
153
+ ----------
154
+ message :
155
+ Transaction specific items.
156
+
157
+ Returns
158
+ -------
159
+ evm: :py:class:`~ethereum.forks.spurious_dragon.vm.Evm`
160
+ Items containing execution specific objects.
161
+
162
+ """
163
+ state = message.block_env.state
164
+ # take snapshot of state before processing the message
165
+ begin_transaction(state)
166
+
167
+ # If the address where the account is being created has storage, it is
168
+ # destroyed. This can only happen in the following highly unlikely
169
+ # circumstances:
170
+ # * The address created by two `CREATE` calls collide.
171
+ # * The first `CREATE` happened before Spurious Dragon and left empty
172
+ # code.
173
+ destroy_storage(state, message.current_target)
174
+
175
+ increment_nonce(state, message.current_target)
176
+ evm = process_message(message)
177
+ if not evm.error:
178
+ contract_code = evm.output
179
+ contract_code_gas = Uint(len(contract_code)) * GAS_CODE_DEPOSIT
180
+ try:
181
+ charge_gas(evm, contract_code_gas)
182
+ if len(contract_code) > MAX_CODE_SIZE:
183
+ raise OutOfGasError
184
+ except ExceptionalHalt as error:
185
+ rollback_transaction(state)
186
+ evm.gas_left = Uint(0)
187
+ evm.error = error
188
+ else:
189
+ set_code(state, message.current_target, contract_code)
190
+ commit_transaction(state)
191
+ else:
192
+ rollback_transaction(state)
193
+ return evm
194
+
195
+
196
+ def process_message(message: Message) -> Evm:
197
+ """
198
+ Move ether and execute the relevant code.
199
+
200
+ Parameters
201
+ ----------
202
+ message :
203
+ Transaction specific items.
204
+
205
+ Returns
206
+ -------
207
+ evm: :py:class:`~ethereum.forks.spurious_dragon.vm.Evm`
208
+ Items containing execution specific objects
209
+
210
+ """
211
+ state = message.block_env.state
212
+ if message.depth > STACK_DEPTH_LIMIT:
213
+ raise StackDepthLimitError("Stack depth limit reached")
214
+
215
+ # take snapshot of state before processing the message
216
+ begin_transaction(state)
217
+
218
+ touch_account(state, message.current_target)
219
+
220
+ if message.should_transfer_value and message.value != 0:
221
+ move_ether(
222
+ state, message.caller, message.current_target, message.value
223
+ )
224
+
225
+ evm = execute_code(message)
226
+ if evm.error:
227
+ # revert state to the last saved checkpoint
228
+ # since the message call resulted in an error
229
+ rollback_transaction(state)
230
+ else:
231
+ commit_transaction(state)
232
+ return evm
233
+
234
+
235
+ def execute_code(message: Message) -> Evm:
236
+ """
237
+ Executes bytecode present in the `message`.
238
+
239
+ Parameters
240
+ ----------
241
+ message :
242
+ Transaction specific items.
243
+
244
+ Returns
245
+ -------
246
+ evm: `ethereum.vm.EVM`
247
+ Items containing execution specific objects
248
+
249
+ """
250
+ code = message.code
251
+ valid_jump_destinations = get_valid_jump_destinations(code)
252
+
253
+ evm = Evm(
254
+ pc=Uint(0),
255
+ stack=[],
256
+ memory=bytearray(),
257
+ code=code,
258
+ gas_left=message.gas,
259
+ valid_jump_destinations=valid_jump_destinations,
260
+ logs=(),
261
+ refund_counter=0,
262
+ running=True,
263
+ message=message,
264
+ output=b"",
265
+ accounts_to_delete=set(),
266
+ touched_accounts=set(),
267
+ error=None,
268
+ )
269
+ try:
270
+ if evm.message.code_address in PRE_COMPILED_CONTRACTS:
271
+ evm_trace(evm, PrecompileStart(evm.message.code_address))
272
+ PRE_COMPILED_CONTRACTS[evm.message.code_address](evm)
273
+ evm_trace(evm, PrecompileEnd())
274
+ return evm
275
+
276
+ while evm.running and evm.pc < ulen(evm.code):
277
+ try:
278
+ op = Ops(evm.code[evm.pc])
279
+ except ValueError as e:
280
+ raise InvalidOpcode(evm.code[evm.pc]) from e
281
+
282
+ evm_trace(evm, OpStart(op))
283
+ op_implementation[op](evm)
284
+ evm_trace(evm, OpEnd())
285
+
286
+ evm_trace(evm, EvmStop(Ops.STOP))
287
+
288
+ except ExceptionalHalt as error:
289
+ evm_trace(evm, OpException(error))
290
+ evm.gas_left = Uint(0)
291
+ evm.error = error
292
+ return evm
@@ -0,0 +1,84 @@
1
+ """
2
+ Ethereum Virtual Machine (EVM) Memory.
3
+
4
+ .. contents:: Table of Contents
5
+ :backlinks: none
6
+ :local:
7
+
8
+ Introduction
9
+ ------------
10
+
11
+ EVM memory operations.
12
+ """
13
+
14
+ from ethereum_types.bytes import Bytes
15
+ from ethereum_types.numeric import U256, Uint
16
+
17
+ from ethereum.utils.byte import right_pad_zero_bytes
18
+
19
+
20
+ def memory_write(
21
+ memory: bytearray, start_position: U256, value: Bytes
22
+ ) -> None:
23
+ """
24
+ Writes to memory.
25
+
26
+ Parameters
27
+ ----------
28
+ memory :
29
+ Memory contents of the EVM.
30
+ start_position :
31
+ Starting pointer to the memory.
32
+ value :
33
+ Data to write to memory.
34
+
35
+ """
36
+ memory[start_position : int(start_position) + len(value)] = value
37
+
38
+
39
+ def memory_read_bytes(
40
+ memory: bytearray, start_position: U256, size: U256
41
+ ) -> Bytes:
42
+ """
43
+ Read bytes from memory.
44
+
45
+ Parameters
46
+ ----------
47
+ memory :
48
+ Memory contents of the EVM.
49
+ start_position :
50
+ Starting pointer to the memory.
51
+ size :
52
+ Size of the data that needs to be read from `start_position`.
53
+
54
+ Returns
55
+ -------
56
+ data_bytes :
57
+ Data read from memory.
58
+
59
+ """
60
+ return Bytes(memory[start_position : Uint(start_position) + Uint(size)])
61
+
62
+
63
+ def buffer_read(buffer: Bytes, start_position: U256, size: U256) -> Bytes:
64
+ """
65
+ Read bytes from a buffer. Padding with zeros if necessary.
66
+
67
+ Parameters
68
+ ----------
69
+ buffer :
70
+ Memory contents of the EVM.
71
+ start_position :
72
+ Starting pointer to the memory.
73
+ size :
74
+ Size of the data that needs to be read from `start_position`.
75
+
76
+ Returns
77
+ -------
78
+ data_bytes :
79
+ Data read from memory.
80
+
81
+ """
82
+ return right_pad_zero_bytes(
83
+ buffer[start_position : Uint(start_position) + Uint(size)], size
84
+ )
@@ -0,0 +1,27 @@
1
+ """
2
+ Precompiled Contract Addresses.
3
+
4
+ .. contents:: Table of Contents
5
+ :backlinks: none
6
+ :local:
7
+
8
+ Introduction
9
+ ------------
10
+
11
+ Addresses of precompiled contracts and mappings to their
12
+ implementations.
13
+ """
14
+
15
+ from ...utils.hexadecimal import hex_to_address
16
+
17
+ __all__ = (
18
+ "ECRECOVER_ADDRESS",
19
+ "SHA256_ADDRESS",
20
+ "RIPEMD160_ADDRESS",
21
+ "IDENTITY_ADDRESS",
22
+ )
23
+
24
+ ECRECOVER_ADDRESS = hex_to_address("0x01")
25
+ SHA256_ADDRESS = hex_to_address("0x02")
26
+ RIPEMD160_ADDRESS = hex_to_address("0x03")
27
+ IDENTITY_ADDRESS = hex_to_address("0x04")
@@ -0,0 +1,64 @@
1
+ """
2
+ Ethereum Virtual Machine (EVM) ECRECOVER PRECOMPILED CONTRACT.
3
+
4
+ .. contents:: Table of Contents
5
+ :backlinks: none
6
+ :local:
7
+
8
+ Introduction
9
+ ------------
10
+
11
+ Implementation of the ECRECOVER precompiled contract.
12
+ """
13
+
14
+ from ethereum_types.numeric import U256
15
+
16
+ from ethereum.crypto.elliptic_curve import SECP256K1N, secp256k1_recover
17
+ from ethereum.crypto.hash import Hash32, keccak256
18
+ from ethereum.exceptions import InvalidSignatureError
19
+ from ethereum.utils.byte import left_pad_zero_bytes
20
+
21
+ from ...vm import Evm
22
+ from ...vm.gas import GAS_ECRECOVER, charge_gas
23
+ from ...vm.memory import buffer_read
24
+
25
+
26
+ def ecrecover(evm: Evm) -> None:
27
+ """
28
+ Decrypts the address using elliptic curve DSA recovery mechanism and writes
29
+ the address to output.
30
+
31
+ Parameters
32
+ ----------
33
+ evm :
34
+ The current EVM frame.
35
+
36
+ """
37
+ data = evm.message.data
38
+
39
+ # GAS
40
+ charge_gas(evm, GAS_ECRECOVER)
41
+
42
+ # OPERATION
43
+ message_hash_bytes = buffer_read(data, U256(0), U256(32))
44
+ message_hash = Hash32(message_hash_bytes)
45
+ v = U256.from_be_bytes(buffer_read(data, U256(32), U256(32)))
46
+ r = U256.from_be_bytes(buffer_read(data, U256(64), U256(32)))
47
+ s = U256.from_be_bytes(buffer_read(data, U256(96), U256(32)))
48
+
49
+ if v != U256(27) and v != U256(28):
50
+ return
51
+ if U256(0) >= r or r >= SECP256K1N:
52
+ return
53
+ if U256(0) >= s or s >= SECP256K1N:
54
+ return
55
+
56
+ try:
57
+ public_key = secp256k1_recover(r, s, v - U256(27), message_hash)
58
+ except InvalidSignatureError:
59
+ # unable to extract public key
60
+ return
61
+
62
+ address = keccak256(public_key)[12:32]
63
+ padded_address = left_pad_zero_bytes(address, 32)
64
+ evm.output = padded_address
@@ -0,0 +1,39 @@
1
+ """
2
+ Ethereum Virtual Machine (EVM) IDENTITY PRECOMPILED CONTRACT.
3
+
4
+ .. contents:: Table of Contents
5
+ :backlinks: none
6
+ :local:
7
+
8
+ Introduction
9
+ ------------
10
+
11
+ Implementation of the `IDENTITY` precompiled contract.
12
+ """
13
+
14
+ from ethereum_types.numeric import Uint
15
+
16
+ from ethereum.utils.numeric import ceil32
17
+
18
+ from ...vm import Evm
19
+ from ...vm.gas import GAS_IDENTITY, GAS_IDENTITY_WORD, charge_gas
20
+
21
+
22
+ def identity(evm: Evm) -> None:
23
+ """
24
+ Writes the message data to output.
25
+
26
+ Parameters
27
+ ----------
28
+ evm :
29
+ The current EVM frame.
30
+
31
+ """
32
+ data = evm.message.data
33
+
34
+ # GAS
35
+ word_count = ceil32(Uint(len(data))) // Uint(32)
36
+ charge_gas(evm, GAS_IDENTITY + GAS_IDENTITY_WORD * word_count)
37
+
38
+ # OPERATION
39
+ evm.output = data
@@ -0,0 +1,33 @@
1
+ """
2
+ Precompiled Contract Addresses.
3
+
4
+ .. contents:: Table of Contents
5
+ :backlinks: none
6
+ :local:
7
+
8
+ Introduction
9
+ ------------
10
+
11
+ Mapping of precompiled contracts their implementations.
12
+ """
13
+
14
+ from typing import Callable, Dict
15
+
16
+ from ...fork_types import Address
17
+ from . import (
18
+ ECRECOVER_ADDRESS,
19
+ IDENTITY_ADDRESS,
20
+ RIPEMD160_ADDRESS,
21
+ SHA256_ADDRESS,
22
+ )
23
+ from .ecrecover import ecrecover
24
+ from .identity import identity
25
+ from .ripemd160 import ripemd160
26
+ from .sha256 import sha256
27
+
28
+ PRE_COMPILED_CONTRACTS: Dict[Address, Callable] = {
29
+ ECRECOVER_ADDRESS: ecrecover,
30
+ SHA256_ADDRESS: sha256,
31
+ RIPEMD160_ADDRESS: ripemd160,
32
+ IDENTITY_ADDRESS: identity,
33
+ }
@@ -0,0 +1,44 @@
1
+ """
2
+ Ethereum Virtual Machine (EVM) RIPEMD160 PRECOMPILED CONTRACT.
3
+
4
+ .. contents:: Table of Contents
5
+ :backlinks: none
6
+ :local:
7
+
8
+ Introduction
9
+ ------------
10
+
11
+ Implementation of the `RIPEMD160` precompiled contract.
12
+ """
13
+
14
+ import hashlib
15
+
16
+ from ethereum_types.numeric import Uint
17
+
18
+ from ethereum.utils.byte import left_pad_zero_bytes
19
+ from ethereum.utils.numeric import ceil32
20
+
21
+ from ...vm import Evm
22
+ from ...vm.gas import GAS_RIPEMD160, GAS_RIPEMD160_WORD, charge_gas
23
+
24
+
25
+ def ripemd160(evm: Evm) -> None:
26
+ """
27
+ Writes the ripemd160 hash to output.
28
+
29
+ Parameters
30
+ ----------
31
+ evm :
32
+ The current EVM frame.
33
+
34
+ """
35
+ data = evm.message.data
36
+
37
+ # GAS
38
+ word_count = ceil32(Uint(len(data))) // Uint(32)
39
+ charge_gas(evm, GAS_RIPEMD160 + GAS_RIPEMD160_WORD * word_count)
40
+
41
+ # OPERATION
42
+ hash_bytes = hashlib.new("ripemd160", data).digest()
43
+ padded_hash = left_pad_zero_bytes(hash_bytes, 32)
44
+ evm.output = padded_hash
@@ -0,0 +1,41 @@
1
+ """
2
+ Ethereum Virtual Machine (EVM) SHA256 PRECOMPILED CONTRACT.
3
+
4
+ .. contents:: Table of Contents
5
+ :backlinks: none
6
+ :local:
7
+
8
+ Introduction
9
+ ------------
10
+
11
+ Implementation of the `SHA256` precompiled contract.
12
+ """
13
+
14
+ import hashlib
15
+
16
+ from ethereum_types.numeric import Uint
17
+
18
+ from ethereum.utils.numeric import ceil32
19
+
20
+ from ...vm import Evm
21
+ from ...vm.gas import GAS_SHA256, GAS_SHA256_WORD, charge_gas
22
+
23
+
24
+ def sha256(evm: Evm) -> None:
25
+ """
26
+ Writes the sha256 hash to output.
27
+
28
+ Parameters
29
+ ----------
30
+ evm :
31
+ The current EVM frame.
32
+
33
+ """
34
+ data = evm.message.data
35
+
36
+ # GAS
37
+ word_count = ceil32(Uint(len(data))) // Uint(32)
38
+ charge_gas(evm, GAS_SHA256 + GAS_SHA256_WORD * word_count)
39
+
40
+ # OPERATION
41
+ evm.output = hashlib.sha256(data).digest()
@@ -0,0 +1,69 @@
1
+ """
2
+ Ethereum Virtual Machine (EVM) Runtime Operations.
3
+
4
+ .. contents:: Table of Contents
5
+ :backlinks: none
6
+ :local:
7
+
8
+ Introduction
9
+ ------------
10
+
11
+ Runtime related operations used while executing EVM code.
12
+ """
13
+
14
+ from typing import Set
15
+
16
+ from ethereum_types.bytes import Bytes
17
+ from ethereum_types.numeric import Uint, ulen
18
+
19
+ from .instructions import Ops
20
+
21
+
22
+ def get_valid_jump_destinations(code: Bytes) -> Set[Uint]:
23
+ """
24
+ Analyze the evm code to obtain the set of valid jump destinations.
25
+
26
+ Valid jump destinations are defined as follows:
27
+ * The jump destination is less than the length of the code.
28
+ * The jump destination should have the `JUMPDEST` opcode (0x5B).
29
+ * The jump destination shouldn't be part of the data corresponding to
30
+ `PUSH-N` opcodes.
31
+
32
+ Note - Jump destinations are 0-indexed.
33
+
34
+ Parameters
35
+ ----------
36
+ code :
37
+ The EVM code which is to be executed.
38
+
39
+ Returns
40
+ -------
41
+ valid_jump_destinations: `Set[Uint]`
42
+ The set of valid jump destinations in the code.
43
+
44
+ """
45
+ valid_jump_destinations = set()
46
+ pc = Uint(0)
47
+
48
+ while pc < ulen(code):
49
+ try:
50
+ current_opcode = Ops(code[pc])
51
+ except ValueError:
52
+ # Skip invalid opcodes, as they don't affect the jumpdest
53
+ # analysis. Nevertheless, such invalid opcodes would be caught
54
+ # and raised when the interpreter runs.
55
+ pc += Uint(1)
56
+ continue
57
+
58
+ if current_opcode == Ops.JUMPDEST:
59
+ valid_jump_destinations.add(pc)
60
+ elif Ops.PUSH1.value <= current_opcode.value <= Ops.PUSH32.value:
61
+ # If PUSH-N opcodes are encountered, skip the current opcode along
62
+ # with the trailing data segment corresponding to the PUSH-N
63
+ # opcodes.
64
+ push_data_size = current_opcode.value - Ops.PUSH1.value + 1
65
+ pc += Uint(push_data_size)
66
+
67
+ pc += Uint(1)
68
+
69
+ return valid_jump_destinations