web3 7.0.0b2__py3-none-any.whl → 7.7.0__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 (144) hide show
  1. ens/__init__.py +13 -2
  2. ens/_normalization.py +4 -4
  3. ens/async_ens.py +27 -15
  4. ens/base_ens.py +3 -1
  5. ens/contract_data.py +2 -2
  6. ens/ens.py +10 -7
  7. ens/exceptions.py +16 -29
  8. ens/specs/nf.json +1 -1
  9. ens/specs/normalization_spec.json +1 -1
  10. ens/utils.py +24 -32
  11. web3/__init__.py +23 -12
  12. web3/_utils/abi.py +157 -263
  13. web3/_utils/async_transactions.py +34 -20
  14. web3/_utils/batching.py +217 -0
  15. web3/_utils/blocks.py +6 -2
  16. web3/_utils/caching/__init__.py +12 -0
  17. web3/_utils/caching/caching_utils.py +433 -0
  18. web3/_utils/caching/request_caching_validation.py +287 -0
  19. web3/_utils/compat/__init__.py +2 -3
  20. web3/_utils/contract_sources/compile_contracts.py +1 -1
  21. web3/_utils/contract_sources/contract_data/ambiguous_function_contract.py +42 -0
  22. web3/_utils/contract_sources/contract_data/arrays_contract.py +3 -3
  23. web3/_utils/contract_sources/contract_data/bytes_contracts.py +5 -5
  24. web3/_utils/contract_sources/contract_data/constructor_contracts.py +7 -7
  25. web3/_utils/contract_sources/contract_data/contract_caller_tester.py +3 -3
  26. web3/_utils/contract_sources/contract_data/emitter_contract.py +3 -3
  27. web3/_utils/contract_sources/contract_data/event_contracts.py +50 -5
  28. web3/_utils/contract_sources/contract_data/extended_resolver.py +3 -3
  29. web3/_utils/contract_sources/contract_data/fallback_function_contract.py +3 -3
  30. web3/_utils/contract_sources/contract_data/function_name_tester_contract.py +3 -3
  31. web3/_utils/contract_sources/contract_data/math_contract.py +3 -3
  32. web3/_utils/contract_sources/contract_data/offchain_lookup.py +3 -3
  33. web3/_utils/contract_sources/contract_data/offchain_resolver.py +3 -3
  34. web3/_utils/contract_sources/contract_data/panic_errors_contract.py +3 -3
  35. web3/_utils/contract_sources/contract_data/payable_tester.py +3 -3
  36. web3/_utils/contract_sources/contract_data/receive_function_contracts.py +5 -5
  37. web3/_utils/contract_sources/contract_data/reflector_contracts.py +3 -3
  38. web3/_utils/contract_sources/contract_data/revert_contract.py +3 -3
  39. web3/_utils/contract_sources/contract_data/simple_resolver.py +3 -3
  40. web3/_utils/contract_sources/contract_data/storage_contract.py +3 -3
  41. web3/_utils/contract_sources/contract_data/string_contract.py +3 -3
  42. web3/_utils/contract_sources/contract_data/tuple_contracts.py +5 -5
  43. web3/_utils/contracts.py +172 -220
  44. web3/_utils/datatypes.py +5 -1
  45. web3/_utils/decorators.py +6 -1
  46. web3/_utils/empty.py +1 -1
  47. web3/_utils/encoding.py +16 -12
  48. web3/_utils/error_formatters_utils.py +5 -3
  49. web3/_utils/events.py +78 -72
  50. web3/_utils/fee_utils.py +1 -3
  51. web3/_utils/filters.py +24 -22
  52. web3/_utils/formatters.py +2 -2
  53. web3/_utils/http.py +8 -2
  54. web3/_utils/http_session_manager.py +314 -0
  55. web3/_utils/math.py +14 -15
  56. web3/_utils/method_formatters.py +161 -34
  57. web3/_utils/module.py +2 -1
  58. web3/_utils/module_testing/__init__.py +3 -2
  59. web3/_utils/module_testing/eth_module.py +736 -583
  60. web3/_utils/module_testing/go_ethereum_debug_module.py +128 -0
  61. web3/_utils/module_testing/module_testing_utils.py +81 -24
  62. web3/_utils/module_testing/persistent_connection_provider.py +702 -220
  63. web3/_utils/module_testing/utils.py +114 -33
  64. web3/_utils/module_testing/web3_module.py +438 -17
  65. web3/_utils/normalizers.py +13 -11
  66. web3/_utils/rpc_abi.py +10 -22
  67. web3/_utils/threads.py +8 -7
  68. web3/_utils/transactions.py +32 -25
  69. web3/_utils/type_conversion.py +5 -1
  70. web3/_utils/validation.py +20 -17
  71. web3/beacon/__init__.py +5 -0
  72. web3/beacon/api_endpoints.py +3 -0
  73. web3/beacon/async_beacon.py +29 -6
  74. web3/beacon/beacon.py +24 -6
  75. web3/contract/__init__.py +7 -0
  76. web3/contract/async_contract.py +285 -82
  77. web3/contract/base_contract.py +556 -258
  78. web3/contract/contract.py +295 -84
  79. web3/contract/utils.py +251 -55
  80. web3/datastructures.py +49 -34
  81. web3/eth/__init__.py +7 -0
  82. web3/eth/async_eth.py +89 -69
  83. web3/eth/base_eth.py +7 -3
  84. web3/eth/eth.py +43 -66
  85. web3/exceptions.py +158 -83
  86. web3/gas_strategies/time_based.py +8 -6
  87. web3/geth.py +53 -184
  88. web3/main.py +77 -17
  89. web3/manager.py +362 -95
  90. web3/method.py +43 -15
  91. web3/middleware/__init__.py +17 -0
  92. web3/middleware/attrdict.py +12 -22
  93. web3/middleware/base.py +55 -2
  94. web3/middleware/filter.py +45 -23
  95. web3/middleware/formatting.py +6 -3
  96. web3/middleware/names.py +4 -1
  97. web3/middleware/signing.py +15 -6
  98. web3/middleware/stalecheck.py +2 -1
  99. web3/module.py +61 -25
  100. web3/providers/__init__.py +21 -0
  101. web3/providers/async_base.py +87 -32
  102. web3/providers/base.py +77 -32
  103. web3/providers/eth_tester/__init__.py +5 -0
  104. web3/providers/eth_tester/defaults.py +2 -55
  105. web3/providers/eth_tester/main.py +41 -15
  106. web3/providers/eth_tester/middleware.py +16 -17
  107. web3/providers/ipc.py +41 -17
  108. web3/providers/legacy_websocket.py +26 -1
  109. web3/providers/persistent/__init__.py +7 -0
  110. web3/providers/persistent/async_ipc.py +61 -121
  111. web3/providers/persistent/persistent.py +323 -16
  112. web3/providers/persistent/persistent_connection.py +54 -5
  113. web3/providers/persistent/request_processor.py +136 -56
  114. web3/providers/persistent/subscription_container.py +56 -0
  115. web3/providers/persistent/subscription_manager.py +233 -0
  116. web3/providers/persistent/websocket.py +29 -92
  117. web3/providers/rpc/__init__.py +5 -0
  118. web3/providers/rpc/async_rpc.py +73 -18
  119. web3/providers/rpc/rpc.py +73 -30
  120. web3/providers/rpc/utils.py +1 -13
  121. web3/scripts/install_pre_releases.py +33 -0
  122. web3/scripts/parse_pygeth_version.py +16 -0
  123. web3/testing.py +4 -4
  124. web3/tracing.py +9 -5
  125. web3/types.py +141 -74
  126. web3/utils/__init__.py +64 -5
  127. web3/utils/abi.py +790 -10
  128. web3/utils/address.py +8 -0
  129. web3/utils/async_exception_handling.py +20 -11
  130. web3/utils/caching.py +34 -4
  131. web3/utils/exception_handling.py +9 -12
  132. web3/utils/subscriptions.py +285 -0
  133. {web3-7.0.0b2.dist-info → web3-7.7.0.dist-info}/LICENSE +1 -1
  134. web3-7.7.0.dist-info/METADATA +130 -0
  135. web3-7.7.0.dist-info/RECORD +171 -0
  136. {web3-7.0.0b2.dist-info → web3-7.7.0.dist-info}/WHEEL +1 -1
  137. web3/_utils/caching.py +0 -155
  138. web3/_utils/contract_sources/contract_data/address_reflector.py +0 -29
  139. web3/_utils/module_testing/go_ethereum_personal_module.py +0 -300
  140. web3/_utils/request.py +0 -265
  141. web3-7.0.0b2.dist-info/METADATA +0 -106
  142. web3-7.0.0b2.dist-info/RECORD +0 -163
  143. /web3/_utils/{function_identifiers.py → abi_element_identifiers.py} +0 -0
  144. {web3-7.0.0b2.dist-info → web3-7.7.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,171 @@
1
+ ens/__init__.py,sha256=BtOyGF_JrIpWFTr_T1GCJuUtmZI-Qf-v560uzTWp18E,471
2
+ ens/_normalization.py,sha256=t_abmu3z2QcTcX6gVaSfdUzz0_E5aGCPvuj0Hftd-Kg,16900
3
+ ens/abis.py,sha256=0Ec_lqe7HBsVpQrID3ccFMhx8Vb7S0TGFbeuRdXhuCE,34745
4
+ ens/async_ens.py,sha256=o-1m6dMC9Wcq9lXxJJ2UzcJZpMTeNBD82dnpvUFja3k,22669
5
+ ens/auto.py,sha256=w_E6Ua5ZmJVxfdii2aG5I_kQG5B9U5Y2qIFKVNhXo98,41
6
+ ens/base_ens.py,sha256=zn3lIV5-vkBEvdOAIVkE78wwTdJx7VG_fXqQmLJ_j7w,3507
7
+ ens/constants.py,sha256=XCO4Pntwdnw10K_AZ86V0cqcvdUoOkEZvRqoDdFPE_w,913
8
+ ens/contract_data.py,sha256=CZa7Uxzq6rT-KonwHHM_wo-5ry0j1DMbikgEaP27Uy8,148602
9
+ ens/ens.py,sha256=4LLQ_XDHhlPlG0-RGAErGZ9ltybg4yKyftdW84AeldE,21718
10
+ ens/exceptions.py,sha256=FVnGiWkt1IcAATfSxoWz9hwrlVG_-WCpraTo8nSHCxA,2441
11
+ ens/utils.py,sha256=Ro2-kcowwIgNExxNDQ1CpSFiGL9WSP_NCxp_qLzGWHw,8985
12
+ ens/specs/nf.json,sha256=tPXKzdhgu9gqNi0UhKC1kzPqSBgy4yHm5TL19RQHBqU,49038
13
+ ens/specs/normalization_spec.json,sha256=8mmjBj4OoYCn7pD4P7hqKP_qy6rpYzpyRinSH3CCP9M,3171499
14
+ web3/__init__.py,sha256=P11QAEV_GYoZq9ij8gDzFx5tKzJY2aMXG-keg2Lg1xs,1277
15
+ web3/constants.py,sha256=eQLRQVMFPbgpOjjkPTMHkY-syncJuO-sPX5UrCSRjzQ,564
16
+ web3/datastructures.py,sha256=clLaeQ3n8bThC4l0ByTzkplOkfJSfokRMROdPaGUIek,11414
17
+ web3/exceptions.py,sha256=GMIrWTkYDR0jtvtdOlgl_s6fctTibW4Ytw4So5BY4uE,9584
18
+ web3/geth.py,sha256=xVBZWSksBo2ipesAN9V5hzDc_te7kU8ueicFdvpkSO4,7370
19
+ web3/logs.py,sha256=ROs-mDMH_ZOecE7hfbWA5yp27G38FbLjX4lO_WtlZxQ,198
20
+ web3/main.py,sha256=eVdSh7m_iBMf3au0Aj49TZ7NSaRbN1Ccsng9Fuu8dME,16162
21
+ web3/manager.py,sha256=lbMe9ZJRe3LJjXice1yNHMHyOEHIIqLtgPLDrZ5fzYc,25185
22
+ web3/method.py,sha256=Q7EWTwI4TxqAbJ3mZrdvLc9wfV-8o8sOzS_pbsRgAP0,8601
23
+ web3/module.py,sha256=CDlnDrrWzkCJtd3gzHZ972l-6En6IyFEWwB7TXkHHLM,5617
24
+ web3/net.py,sha256=Y3vPzHWVFkfHEZoJxjDOt4tp5ERmZrMuyi4ZFOLmIeA,1562
25
+ web3/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
+ web3/testing.py,sha256=Ury_-7XSstJ8bkCfdGEi4Cr76QzSfW7v_zfPlDlLJj0,923
27
+ web3/tracing.py,sha256=ZcOam7t-uEZXyui6Cndv6RYeCZP5jh1TBn2hG8sv17Q,3098
28
+ web3/types.py,sha256=Nkck9FvREuCvhAeg0OyQv2zg1YTAXNWcvgMyFnWLNi4,13975
29
+ web3/_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ web3/_utils/abi.py,sha256=Y0vIFLEKwiMTdedxRPxVMQ1l-GbRRJia1AP1DqLBvjU,27430
31
+ web3/_utils/abi_element_identifiers.py,sha256=m305lsvUZk-jkPixT0IJd9P5sXqMvmwlwlLeBgEAnBQ,55
32
+ web3/_utils/async_caching.py,sha256=2XnaKCHBTTDK6B2R_YZvjJqIRUpbMDIU1uYrq-Lcyp8,486
33
+ web3/_utils/async_transactions.py,sha256=fodlTP7zpoFhFycWQszJWN0UUAfu5neQTCYJ3eGRCA0,5581
34
+ web3/_utils/batching.py,sha256=SbFKYFCRTrkFMFNa4HA4DkD_Qbjc6atnebMObyuQeHE,6316
35
+ web3/_utils/blocks.py,sha256=SZ17qSJuPAH5Dz-eQPGOsZw_QtkG19zvpSYMv6mEDok,2138
36
+ web3/_utils/contracts.py,sha256=YXErvYsi7OQ9S3KCjSv7nPbxj9DDTmixP8NYmv9GOmY,12091
37
+ web3/_utils/datatypes.py,sha256=nI0C9XWl46gFj1RpwuoHfVqb4e73wlaerE1LNyMg3oo,1701
38
+ web3/_utils/decorators.py,sha256=bYIoVL0DjHWU2-KOmg-UYg6rICeThlLVZpH9yM2NT8s,1825
39
+ web3/_utils/empty.py,sha256=ccgxFk5qm2x2ZeD8b17wX5cCAJPkPFuHrNQNMDslytY,132
40
+ web3/_utils/encoding.py,sha256=yS3awPQshfqMqEgiZWWU2AG8Kq_mrCH9VwHvlMhrGw4,9282
41
+ web3/_utils/ens.py,sha256=2BvzfegBkR7vH3Fq7lo_LsgfT912Zj-mR8eUt6o_lBA,2434
42
+ web3/_utils/error_formatters_utils.py,sha256=uRXm6P6z4cUTTlQRLFLtuC3FYOjR0lrIlQToR5f_gzI,6868
43
+ web3/_utils/events.py,sha256=sVAXWUMmWKwYguWzk_jqra3rI6NZ55T3XfDp4_aDa-8,17044
44
+ web3/_utils/fee_utils.py,sha256=MFt27R9E3qFP-Hf87-Lzv0JAiuYRE_qqafyTmzctAYA,2145
45
+ web3/_utils/filters.py,sha256=1WX2Vgmat8QKj0WNm_GoRcVp4iJ0BhaIpM_RbcZlBzs,11860
46
+ web3/_utils/formatters.py,sha256=RfRZU0aXC99s6OoLMY7D-fcYJyVAYBEwdbw-JIDjbZE,3067
47
+ web3/_utils/http.py,sha256=2R3UOeZmwiQGc3ladf78R9AnufbGaTXAntqf-ZQlZPI,230
48
+ web3/_utils/http_session_manager.py,sha256=oc4PTIQAFu2jBxa1OJqPajNxsan95U2JId7J_RFWdXY,11928
49
+ web3/_utils/hypothesis.py,sha256=4Cm4iOWv-uP9irg_Pv63kYNDYUAGhnUH6fOPWRw3A0g,209
50
+ web3/_utils/math.py,sha256=4oU5YdbQBXElxK00CxmUZ94ApXFu9QT_TrO0Kho1HTs,1083
51
+ web3/_utils/method_formatters.py,sha256=a9VxHy9KnraxT7EddFd_CIS82SIOXKoZ_SmdxGE4K-Y,36902
52
+ web3/_utils/module.py,sha256=GuVePloTlIBZwFDOjg0zasp53HSJ32umxN1nQhqW-8Y,3175
53
+ web3/_utils/normalizers.py,sha256=uOaGGgkFXTa5gg6mHgPhP8n035WYpo96xtrvpRPnfNk,7455
54
+ web3/_utils/rpc_abi.py,sha256=zsavkWny01UC8DI_DOVWZc7XcHtlmB9XL97sL0ZcIcs,8525
55
+ web3/_utils/threads.py,sha256=hNlSd_zheQYN0vC1faWWb9_UQxp_UzaM2fI5C8y0kB0,4245
56
+ web3/_utils/transactions.py,sha256=aWMYWiCM_Qs6kFIRWwLGRqAAwCz5fXU8uXcsFGi_Xqo,9044
57
+ web3/_utils/type_conversion.py,sha256=s6cg3WDCQIarQLWw_GfctaJjXhS_EcokUNO-S_ccvng,873
58
+ web3/_utils/utility_methods.py,sha256=7VCpo5ysvPoGjFuDj5gT1Niva2l3BADUvNeJFlL3Yvg,2559
59
+ web3/_utils/validation.py,sha256=VGRvM6P2um2bmGP8AgIg3WTXCynyOFIXSIxCo4opL5I,6481
60
+ web3/_utils/windows.py,sha256=IlFUtqYSbUUfFRx60zvEwpiZd080WpOrA4ojm4tmSEE,994
61
+ web3/_utils/caching/__init__.py,sha256=ri-5UGz5PPuYW9W1c2BX5lUJn1oZuvErbDz5NweiveA,284
62
+ web3/_utils/caching/caching_utils.py,sha256=Big2HcJ9_CgIGNq59yGihheLOct-FlArpreBxcfjYUk,14281
63
+ web3/_utils/caching/request_caching_validation.py,sha256=SBiOYtzfe_xxmTixxKxxNgmVQ7GLfQshYQwAxNh7yQM,9877
64
+ web3/_utils/compat/__init__.py,sha256=RUD0S8wzEv2a9o1UhJD0SIECjzatjJl7vc6RCM2d1Fs,571
65
+ web3/_utils/contract_sources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
+ web3/_utils/contract_sources/compile_contracts.py,sha256=C3eLY6gJ4xj9FunNwn4YPb9c8ElORkN8O4ddBa_kKqI,6486
67
+ web3/_utils/contract_sources/contract_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
+ web3/_utils/contract_sources/contract_data/_custom_contract_data.py,sha256=nxpN2uS1T338Tp5uVhwY9U1C2m2pdDz7kZv3LoZ0hpo,552
69
+ web3/_utils/contract_sources/contract_data/ambiguous_function_contract.py,sha256=-hyMlpYL-QQgwcqRoMRXkKPOAKO6isOPlcGRdoaYsWM,5980
70
+ web3/_utils/contract_sources/contract_data/arrays_contract.py,sha256=DDAwvEhOFNLVDxq73Vg3mCVBfpl9laGCGsFGHqsVCH8,18626
71
+ web3/_utils/contract_sources/contract_data/bytes_contracts.py,sha256=jx2zkR9yqRniBWRTP-wg7I7tvWkYqTuMLveFBomThpE,14351
72
+ web3/_utils/contract_sources/contract_data/constructor_contracts.py,sha256=Z0meZqRuvc2eNO_K1OMruRdfMO2Wavf8KE-NSnKtjtQ,6051
73
+ web3/_utils/contract_sources/contract_data/contract_caller_tester.py,sha256=9oeRnNpdbh2M8hNJTuqcxC3dTs3g-MWOz05fgPuB7dk,6228
74
+ web3/_utils/contract_sources/contract_data/emitter_contract.py,sha256=skuuQAXTO57HNERqf2FYwyzoL6_1JOjwx0Z2cvdVopc,40861
75
+ web3/_utils/contract_sources/contract_data/event_contracts.py,sha256=Sy8gg4GIAcYa41dOfl34fM47YLNKA74C3Ongx-pBAzg,9405
76
+ web3/_utils/contract_sources/contract_data/extended_resolver.py,sha256=Jq9S24aNGhLaGXXRrcwW6fC9RwthHDcHg_4YDebAwSo,15720
77
+ web3/_utils/contract_sources/contract_data/fallback_function_contract.py,sha256=W3bnypanJDHbPaxvAglMJb3apK3RAMlU0TtPT5Gqxyg,1649
78
+ web3/_utils/contract_sources/contract_data/function_name_tester_contract.py,sha256=kshI47e64GdSTV2nLmhkGgeZrH0cbjobs1bekEXdYdE,1894
79
+ web3/_utils/contract_sources/contract_data/math_contract.py,sha256=MFLcndXyQ7efzFY-7hZeJWU7CW4D2ZlQEucskiEtBMA,7635
80
+ web3/_utils/contract_sources/contract_data/offchain_lookup.py,sha256=bxVOCrEAGchwQQt0Rib2GZ5-ma18EDA0eUyodM5vkLk,16424
81
+ web3/_utils/contract_sources/contract_data/offchain_resolver.py,sha256=FbO7-eOK-uU0W24QxrCP28kJe7CJpRne0wiQYWwe0jc,31829
82
+ web3/_utils/contract_sources/contract_data/panic_errors_contract.py,sha256=FTUaxUTDVl6RcmNIIStjTr1JZLePwCKt29skBXS5hME,15263
83
+ web3/_utils/contract_sources/contract_data/payable_tester.py,sha256=jgoCGPfQAhd90EwgUUq1rKeaSA2P1ncHb3vmS4XHcys,1827
84
+ web3/_utils/contract_sources/contract_data/receive_function_contracts.py,sha256=3Z7ZSaXqFKCStbA25u263agoXuv0rRfVSYYPn-Ipar4,17102
85
+ web3/_utils/contract_sources/contract_data/reflector_contracts.py,sha256=51U32alPSlc6x4pbo55Mno-g4yn3FfePh7j6ISNLWz0,5262
86
+ web3/_utils/contract_sources/contract_data/revert_contract.py,sha256=LIaJ0V3oT4tX94dtsSDnvhrPPWb2t9zROERiz-hamfo,4262
87
+ web3/_utils/contract_sources/contract_data/simple_resolver.py,sha256=ysj1_yzT54eXO0nNaNfo7lsDL3eObIDOeCK5_lxOpFQ,3553
88
+ web3/_utils/contract_sources/contract_data/storage_contract.py,sha256=fZ-4ho-fbVgPvFP_wpwHeoz8G45tqpqo1RZvntudqHI,7938
89
+ web3/_utils/contract_sources/contract_data/string_contract.py,sha256=fJHQg_CxzOt7Ojp5Af067M46tyY6CARkzycS0fL6reQ,11228
90
+ web3/_utils/contract_sources/contract_data/tuple_contracts.py,sha256=PPzVF67kRpeNLXGjUGjpIowGyD3F6fMzqYLuOwXRZbE,23176
91
+ web3/_utils/module_testing/__init__.py,sha256=Xr_S46cjr0mypD_Y4ZbeF1EJ-XWfNxWUks5ykhzN10c,485
92
+ web3/_utils/module_testing/eth_module.py,sha256=_6pTHSKt3IzWdFe8gYGC1Hv56VJaVXaaRYouv-BM4hQ,187454
93
+ web3/_utils/module_testing/go_ethereum_admin_module.py,sha256=_c-6SyzZkfAJ-7ySXUpw9FEr4cg-ShRdAGSAHWanCtY,3406
94
+ web3/_utils/module_testing/go_ethereum_debug_module.py,sha256=BP1UjK-5ewkYMilvW9jtZX5Mc9BGh3QlJWPXqDNWizU,4144
95
+ web3/_utils/module_testing/go_ethereum_txpool_module.py,sha256=5f8XL8-2x3keyGRaITxMQYl9oQzjgqGn8zobB-j9BPs,1176
96
+ web3/_utils/module_testing/module_testing_utils.py,sha256=TiGZNipE1uBRKagnrxmID8coBuNjoy-XNSL2ZWWITks,7303
97
+ web3/_utils/module_testing/net_module.py,sha256=ifUTC-5fTcQbwpm0X09OdD5RSPnn00T8klFeYe8tTm4,1272
98
+ web3/_utils/module_testing/persistent_connection_provider.py,sha256=cmwgngYi-2zKPRljUOY-QG_Ra_T9vDMzHVa68HFKMn0,29247
99
+ web3/_utils/module_testing/utils.py,sha256=bvF57wKVbfnXGRM4kqEZpysPrr9LvAQy-E-huk1HpxM,13561
100
+ web3/_utils/module_testing/web3_module.py,sha256=7c6penGbHn381fPTYY6DsXKv56xGQpYkHljOsr2gbaw,25413
101
+ web3/auto/__init__.py,sha256=ZbzAiCZMdt_tCTTPvH6t8NCVNroKKkt7TSVBBNR74Is,44
102
+ web3/auto/gethdev.py,sha256=MuWD2gxv0xDv_SzPsp9mSkS1oG4P54xFK83qw9NvswA,438
103
+ web3/beacon/__init__.py,sha256=Ac6YiNgU8D8Ynnh5RwSCx2NwPyjnpFjpXeHuSssFbaU,113
104
+ web3/beacon/api_endpoints.py,sha256=0mHrYFYAWHfF9OGzrFdg012L_ocU2nGDXUTU1isOo7o,2272
105
+ web3/beacon/async_beacon.py,sha256=CPzvyZnMibSYsoIJVrjd3XvZ9aB0bgQRtCP0X0Ekp0o,8156
106
+ web3/beacon/beacon.py,sha256=tPA9ABPm6MyzbzutiphkhFzOAxLresmftG5UjWkuNyY,7236
107
+ web3/contract/__init__.py,sha256=qeZRtTw9xriwoD82w6vePDuPBZ35-CMVdkzViBSH3Qs,293
108
+ web3/contract/async_contract.py,sha256=VOh1CbOKQicpgGxtppZMGCLzI9zkOK6tg-hH6f1oP7Q,28123
109
+ web3/contract/base_contract.py,sha256=KeIf1eowua36dLuEpi2xnt6Bqh3eH2BuNJGtB8wa7j8,47021
110
+ web3/contract/contract.py,sha256=ShsgOBYaQdCw6GwlgmjYWLXd9i_6hwDVyzzmkYBXOVc,28092
111
+ web3/contract/utils.py,sha256=mrW3WIxki6EJ1kNqyGp20SMJIu4GqAzOFgMuzpsHB2M,19363
112
+ web3/eth/__init__.py,sha256=qDLxOcHHIzzPD7xzwy6Wcs0lLPQieB7WN0Ax25ctit8,197
113
+ web3/eth/async_eth.py,sha256=Wqm03xSbSmPDxar3echSZGpiexTNk6yjeAaHKn971A8,24138
114
+ web3/eth/base_eth.py,sha256=UUH0Fw0HVa_mBEQ_CbCDO01yCVDsj33d8yOv7Oe-QD0,6905
115
+ web3/eth/eth.py,sha256=T-YwH-Kks4cPothiR9GyOqMh6MeMTFRmfI7M2TL4NkY,19940
116
+ web3/gas_strategies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
+ web3/gas_strategies/rpc.py,sha256=3Va-32jdmHkX7tzQCmh17ms2D6te5zZcqHP1326BdpY,352
118
+ web3/gas_strategies/time_based.py,sha256=oGk6nBUD4iMC8wl1vzf-nhURaqyPWYdPvNU0C3RIs8g,9071
119
+ web3/middleware/__init__.py,sha256=fSmPCYJOO8Qp5p-Vm_Z4XPJATu2qN7KJRypYNSO6_uM,2830
120
+ web3/middleware/attrdict.py,sha256=tIoMEZ3BkmEafnwitGY70o0GS9ShfwReDMxkHuvcOwI,2092
121
+ web3/middleware/base.py,sha256=aHBUWc5pSohLUZ7zcCgrVqp_H_1PTqh31x2n6vWqzuY,5376
122
+ web3/middleware/buffered_gas_estimate.py,sha256=EmxUd-uO959UVroPsPKkl7oDa8Tw6N8BQLB6Urng5Eo,1647
123
+ web3/middleware/filter.py,sha256=I09sSE_q_dhWX5_24KVWhVXZNevwViI7wucJBP4TZl4,22221
124
+ web3/middleware/formatting.py,sha256=hqe5XQE1n5Fmj6riJp7i3oIoZkd-4ChQc7UK8f3HB6I,7567
125
+ web3/middleware/gas_price_strategy.py,sha256=ZjZ6pe3z0mDGLZHYoFXp4_fZIePqukljEh9f4mZUyIA,3779
126
+ web3/middleware/names.py,sha256=OBpsvCmcTItth4TcvUNUvcYmINnudtCHq3n6YO_BkNs,4309
127
+ web3/middleware/proof_of_authority.py,sha256=0AT4jr5CmTdrvl8Jiy-WYy8IFDYBOEaesgHDwpn0c7M,1429
128
+ web3/middleware/pythonic.py,sha256=awc8I6lLzVc2Iv138sps2uf6dMQipskLRBTdvTEEIgQ,348
129
+ web3/middleware/signing.py,sha256=1DOYxpmCra-Qq5r42237q3b54uDO-QHjMVMulxVpLVQ,5899
130
+ web3/middleware/stalecheck.py,sha256=oWRA69BGIbNGjHSnUVOBnoxOYJZYjzRzlqqL5RRlnzk,2680
131
+ web3/middleware/validation.py,sha256=QxActrJk_zsXXiwpadP2MUjZBS5E50OJOtUwVrm9XVo,4280
132
+ web3/providers/__init__.py,sha256=YkcSzE9AubvSp-UfvJjyCrdepvziysbqeq2LT0ImDoc,936
133
+ web3/providers/async_base.py,sha256=A-irjLM6aogj1B1YLM4_wz35iuqr91k_FJ7nD82qv9I,7625
134
+ web3/providers/auto.py,sha256=Zx3CHKoRkmiw3Jte2BLNPiJAFd8rDXNGfA3XtxZvHgc,3465
135
+ web3/providers/base.py,sha256=4bJTniP-k4FmF23gBUq6YSQkC04qc5LgH6HoJ38a_xE,6380
136
+ web3/providers/ipc.py,sha256=19jm5e-mytwx_s-s8hGMCK9sfOCgwwr_1hHcHQyB_7o,6514
137
+ web3/providers/legacy_websocket.py,sha256=goS-ww86ijftbYs7QiqvrZZFycHBd5BD6U18yVQ7lF8,4767
138
+ web3/providers/eth_tester/__init__.py,sha256=UggyBQdeAyjy1awATW1933jkJcpqqaUYUQEFAQnA2o0,163
139
+ web3/providers/eth_tester/defaults.py,sha256=QQUdqqrkcN1AKW7WEY1A5RiPc_fmlHCLmdgB-5iY7Dc,12622
140
+ web3/providers/eth_tester/main.py,sha256=U19sNDeHs36A4IYQ0HFGyXdZvuXiYvoSMNWVuki0WwI,7807
141
+ web3/providers/eth_tester/middleware.py,sha256=3h8q1WBu5CLiBYwonWFeAR_5pUy_vqgiDmi7wOzuorc,12971
142
+ web3/providers/persistent/__init__.py,sha256=X7tFKJL5BXSwciq5_bRwGRB6bfdWBkIPPWMqCjXIKrA,411
143
+ web3/providers/persistent/async_ipc.py,sha256=dlySmRkVsKWOjb2w08n38PTcoI5MtviwqsRxq3YUg6M,5006
144
+ web3/providers/persistent/persistent.py,sha256=fMVeS-BQ42C8XDH7G_N4WWdlUInmNhnU2S8UBfqcKeI,15072
145
+ web3/providers/persistent/persistent_connection.py,sha256=NxxS-KeJhV07agg8CtJvmE-Ff-wLggQYpz4gdgVRDNU,3011
146
+ web3/providers/persistent/request_processor.py,sha256=JLVDc75E9U1s7DA9coqxDRMtYthWHS5D-cpxxH1Gmnc,14390
147
+ web3/providers/persistent/subscription_container.py,sha256=yd5pjjz_YnRLuUoxZUxt29Md1VUTemdUIBq8PCJre6Y,1734
148
+ web3/providers/persistent/subscription_manager.py,sha256=N7XMhscjD5-gQT4begUlwDizrloXL6uGYIIzi_eo-jA,8810
149
+ web3/providers/persistent/utils.py,sha256=gfY7w1HB8xuE7OujSrbwWYjQuQ8nzRBoxoL8ESinqWM,1140
150
+ web3/providers/persistent/websocket.py,sha256=d-IZNPfT6RGChTLDjHR4dH2y02U9KJoWpZlfxpiG1so,4353
151
+ web3/providers/rpc/__init__.py,sha256=mObsuwjr7xyHnnRlwzsmbp2JgZdn2NXSSctvpye4AuQ,149
152
+ web3/providers/rpc/async_rpc.py,sha256=lhLiTi3zX6nzAO7T6TsF3-u_d6GmVTe5cuhw4OZb7zw,6104
153
+ web3/providers/rpc/rpc.py,sha256=3gV7IhpBbaHv8VdoBs7AV4oWtGthoA5pGa35twhaynw,5865
154
+ web3/providers/rpc/utils.py,sha256=_mtoZMMIoZpPA8J8U5DfRxaNQmi8bw0ZVUiqn1Nz4co,2154
155
+ web3/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
156
+ web3/scripts/install_pre_releases.py,sha256=uVxsZk239640yxiqlPhfXxZKSsh3858pURKppi9kM5U,821
157
+ web3/scripts/parse_pygeth_version.py,sha256=BZjWOsJmYuFbAnFuB1jec9Rl6z0tJJNFFV38sJvDfGo,416
158
+ web3/scripts/release/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
159
+ web3/scripts/release/test_package.py,sha256=DH0AryllcF4zfpWSd0NLPSQGHNoC-Qng5WYYbS5_4c8,1534
160
+ web3/utils/__init__.py,sha256=FpwKsCqPgsv64PFSaFuFYmseadMfQj78quw_6Vgq0VQ,1932
161
+ web3/utils/abi.py,sha256=zH54xZMXGL9nqVUavNhSZ4ZsMJM3ALdDZwBD0zgrfWU,26318
162
+ web3/utils/address.py,sha256=nzPLiWWCG9BqstDeDOcDwEpteJ8im6ywjLHKpd5akhw,1186
163
+ web3/utils/async_exception_handling.py,sha256=OoKbLNwWcY9dxLCbOfxcQPSB1OxWraNqcw8V0ZX-JaQ,3173
164
+ web3/utils/caching.py,sha256=Rkt5IN8A7YBZYXlCRaWa64FiDhTXsxzTGGQdGBB4Nzw,2514
165
+ web3/utils/exception_handling.py,sha256=n-MtO5LNzJDVzHTzO6olzfb2_qEVtVRvink0ixswg-Y,2917
166
+ web3/utils/subscriptions.py,sha256=IDjk08ZQM6cOI3MdFN-d27m90Ml_P0GQcWMKRfUiRzg,8491
167
+ web3-7.7.0.dist-info/LICENSE,sha256=ScEyLx1vWrB0ybKiZKKTXm5QhVksHCEUtTp4lwYV45I,1095
168
+ web3-7.7.0.dist-info/METADATA,sha256=Tn2QT-_nIcEicSSuwLEfGdo4ZvohbuWaa69CN4-vCKQ,5541
169
+ web3-7.7.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
170
+ web3-7.7.0.dist-info/top_level.txt,sha256=iwupuJh7wgypXrpk_awszyri3TahRr5vxSphNyvt1bU,9
171
+ web3-7.7.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
web3/_utils/caching.py DELETED
@@ -1,155 +0,0 @@
1
- import collections
2
- import hashlib
3
- import threading
4
- from typing import (
5
- TYPE_CHECKING,
6
- Any,
7
- Callable,
8
- Coroutine,
9
- List,
10
- Tuple,
11
- TypeVar,
12
- Union,
13
- )
14
-
15
- from eth_utils import (
16
- is_boolean,
17
- is_bytes,
18
- is_dict,
19
- is_list_like,
20
- is_null,
21
- is_number,
22
- is_text,
23
- to_bytes,
24
- )
25
-
26
- if TYPE_CHECKING:
27
- from web3.providers import ( # noqa: F401
28
- AsyncBaseProvider,
29
- BaseProvider,
30
- )
31
- from web3.types import ( # noqa: F401
32
- AsyncMakeRequestFn,
33
- MakeRequestFn,
34
- RPCEndpoint,
35
- RPCResponse,
36
- )
37
-
38
-
39
- SYNC_PROVIDER_TYPE = TypeVar("SYNC_PROVIDER_TYPE", bound="BaseProvider")
40
- ASYNC_PROVIDER_TYPE = TypeVar("ASYNC_PROVIDER_TYPE", bound="AsyncBaseProvider")
41
-
42
-
43
- def generate_cache_key(value: Any) -> str:
44
- """
45
- Generates a cache key for the *args and **kwargs
46
- """
47
- if is_bytes(value):
48
- return hashlib.md5(value).hexdigest()
49
- elif is_text(value):
50
- return generate_cache_key(to_bytes(text=value))
51
- elif is_boolean(value) or is_null(value) or is_number(value):
52
- return generate_cache_key(repr(value))
53
- elif is_dict(value):
54
- return generate_cache_key(((key, value[key]) for key in sorted(value.keys())))
55
- elif is_list_like(value) or isinstance(value, collections.abc.Generator):
56
- return generate_cache_key("".join((generate_cache_key(item) for item in value)))
57
- else:
58
- raise TypeError(
59
- f"Cannot generate cache key for value {value} of type {type(value)}"
60
- )
61
-
62
-
63
- class RequestInformation:
64
- def __init__(
65
- self,
66
- method: "RPCEndpoint",
67
- params: Any,
68
- response_formatters: Tuple[Callable[..., Any], ...],
69
- subscription_id: str = None,
70
- ):
71
- self.method = method
72
- self.params = params
73
- self.response_formatters = response_formatters
74
- self.subscription_id = subscription_id
75
- self.middleware_response_processors: List[Callable[..., Any]] = []
76
-
77
-
78
- def is_cacheable_request(
79
- provider: Union[ASYNC_PROVIDER_TYPE, SYNC_PROVIDER_TYPE], method: "RPCEndpoint"
80
- ) -> bool:
81
- if provider.cache_allowed_requests and method in provider.cacheable_requests:
82
- return True
83
- return False
84
-
85
-
86
- # -- request caching decorators -- #
87
-
88
-
89
- def _should_cache_response(response: "RPCResponse") -> bool:
90
- return (
91
- "error" not in response
92
- and "result" in response
93
- and not is_null(response["result"])
94
- )
95
-
96
-
97
- def handle_request_caching(
98
- func: Callable[[SYNC_PROVIDER_TYPE, "RPCEndpoint", Any], "RPCResponse"]
99
- ) -> Callable[..., "RPCResponse"]:
100
- def wrapper(
101
- provider: SYNC_PROVIDER_TYPE, method: "RPCEndpoint", params: Any
102
- ) -> "RPCResponse":
103
- if is_cacheable_request(provider, method):
104
- request_cache = provider._request_cache
105
- cache_key = generate_cache_key(
106
- f"{threading.get_ident()}:{(method, params)}"
107
- )
108
- cache_result = request_cache.get_cache_entry(cache_key)
109
- if cache_result is not None:
110
- return cache_result
111
- else:
112
- response = func(provider, method, params)
113
- if _should_cache_response(response):
114
- with provider._request_cache_lock:
115
- request_cache.cache(cache_key, response)
116
- return response
117
- else:
118
- return func(provider, method, params)
119
-
120
- # save a reference to the decorator on the wrapped function
121
- wrapper._decorator = handle_request_caching # type: ignore
122
- return wrapper
123
-
124
-
125
- # -- async -- #
126
-
127
-
128
- def async_handle_request_caching(
129
- func: Callable[
130
- [ASYNC_PROVIDER_TYPE, "RPCEndpoint", Any], Coroutine[Any, Any, "RPCResponse"]
131
- ],
132
- ) -> Callable[..., Coroutine[Any, Any, "RPCResponse"]]:
133
- async def wrapper(
134
- provider: ASYNC_PROVIDER_TYPE, method: "RPCEndpoint", params: Any
135
- ) -> "RPCResponse":
136
- if is_cacheable_request(provider, method):
137
- request_cache = provider._request_cache
138
- cache_key = generate_cache_key(
139
- f"{threading.get_ident()}:{(method, params)}"
140
- )
141
- cache_result = request_cache.get_cache_entry(cache_key)
142
- if cache_result is not None:
143
- return cache_result
144
- else:
145
- response = await func(provider, method, params)
146
- if _should_cache_response(response):
147
- async with provider._request_cache_lock:
148
- request_cache.cache(cache_key, response)
149
- return response
150
- else:
151
- return await func(provider, method, params)
152
-
153
- # save a reference to the decorator on the wrapped function
154
- wrapper._decorator = async_handle_request_caching # type: ignore
155
- return wrapper
@@ -1,29 +0,0 @@
1
- """
2
- Generated by `compile_contract_sources.py` script.
3
- Compiled with Solidity v0.8.17.
4
- """
5
-
6
- # source: web3/_utils/contract_sources/AddressReflector.sol:AddressReflector
7
- ADDRESS_REFLECTOR_BYTECODE = "0x608060405234801561001057600080fd5b50610430806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80630b816c161461003b578063c04d11fc1461006b575b600080fd5b61005560048036038101906100509190610121565b61009b565b604051610062919061015d565b60405180910390f35b610085600480360381019061008091906102d1565b6100a5565b60405161009291906103d8565b60405180910390f35b6000819050919050565b6060819050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100ee826100c3565b9050919050565b6100fe816100e3565b811461010957600080fd5b50565b60008135905061011b816100f5565b92915050565b600060208284031215610137576101366100b9565b5b60006101458482850161010c565b91505092915050565b610157816100e3565b82525050565b6000602082019050610172600083018461014e565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6101c68261017d565b810181811067ffffffffffffffff821117156101e5576101e461018e565b5b80604052505050565b60006101f86100af565b905061020482826101bd565b919050565b600067ffffffffffffffff8211156102245761022361018e565b5b602082029050602081019050919050565b600080fd5b600061024d61024884610209565b6101ee565b905080838252602082019050602084028301858111156102705761026f610235565b5b835b818110156102995780610285888261010c565b845260208401935050602081019050610272565b5050509392505050565b600082601f8301126102b8576102b7610178565b5b81356102c884826020860161023a565b91505092915050565b6000602082840312156102e7576102e66100b9565b5b600082013567ffffffffffffffff811115610305576103046100be565b5b610311848285016102a3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61034f816100e3565b82525050565b60006103618383610346565b60208301905092915050565b6000602082019050919050565b60006103858261031a565b61038f8185610325565b935061039a83610336565b8060005b838110156103cb5781516103b28882610355565b97506103bd8361036d565b92505060018101905061039e565b5085935050505092915050565b600060208201905081810360008301526103f2818461037a565b90509291505056fea264697066735822122035083763a0f4c4f5a71055f0da2f3d4f78e64159a8f3bc215c430daec7ac5e2064736f6c63430008110033" # noqa: E501
8
- ADDRESS_REFLECTOR_RUNTIME = "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80630b816c161461003b578063c04d11fc1461006b575b600080fd5b61005560048036038101906100509190610121565b61009b565b604051610062919061015d565b60405180910390f35b610085600480360381019061008091906102d1565b6100a5565b60405161009291906103d8565b60405180910390f35b6000819050919050565b6060819050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100ee826100c3565b9050919050565b6100fe816100e3565b811461010957600080fd5b50565b60008135905061011b816100f5565b92915050565b600060208284031215610137576101366100b9565b5b60006101458482850161010c565b91505092915050565b610157816100e3565b82525050565b6000602082019050610172600083018461014e565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6101c68261017d565b810181811067ffffffffffffffff821117156101e5576101e461018e565b5b80604052505050565b60006101f86100af565b905061020482826101bd565b919050565b600067ffffffffffffffff8211156102245761022361018e565b5b602082029050602081019050919050565b600080fd5b600061024d61024884610209565b6101ee565b905080838252602082019050602084028301858111156102705761026f610235565b5b835b818110156102995780610285888261010c565b845260208401935050602081019050610272565b5050509392505050565b600082601f8301126102b8576102b7610178565b5b81356102c884826020860161023a565b91505092915050565b6000602082840312156102e7576102e66100b9565b5b600082013567ffffffffffffffff811115610305576103046100be565b5b610311848285016102a3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61034f816100e3565b82525050565b60006103618383610346565b60208301905092915050565b6000602082019050919050565b60006103858261031a565b61038f8185610325565b935061039a83610336565b8060005b838110156103cb5781516103b28882610355565b97506103bd8361036d565b92505060018101905061039e565b5085935050505092915050565b600060208201905081810360008301526103f2818461037a565b90509291505056fea264697066735822122035083763a0f4c4f5a71055f0da2f3d4f78e64159a8f3bc215c430daec7ac5e2064736f6c63430008110033" # noqa: E501
9
- ADDRESS_REFLECTOR_ABI = [
10
- {
11
- "inputs": [{"internalType": "address", "name": "arg", "type": "address"}],
12
- "name": "reflect",
13
- "outputs": [{"internalType": "address", "name": "", "type": "address"}],
14
- "stateMutability": "pure",
15
- "type": "function",
16
- },
17
- {
18
- "inputs": [{"internalType": "address[]", "name": "arg", "type": "address[]"}],
19
- "name": "reflect",
20
- "outputs": [{"internalType": "address[]", "name": "", "type": "address[]"}],
21
- "stateMutability": "pure",
22
- "type": "function",
23
- },
24
- ]
25
- ADDRESS_REFLECTOR_DATA = {
26
- "bytecode": ADDRESS_REFLECTOR_BYTECODE,
27
- "bytecode_runtime": ADDRESS_REFLECTOR_RUNTIME,
28
- "abi": ADDRESS_REFLECTOR_ABI,
29
- }
@@ -1,300 +0,0 @@
1
- import json
2
- import pytest
3
- from typing import (
4
- TYPE_CHECKING,
5
- cast,
6
- )
7
-
8
- from eth_typing import (
9
- ChecksumAddress,
10
- )
11
- from eth_utils import (
12
- is_checksum_address,
13
- is_list_like,
14
- is_same_address,
15
- is_string,
16
- )
17
- from hexbytes import (
18
- HexBytes,
19
- )
20
-
21
- from web3 import (
22
- constants,
23
- )
24
- from web3.datastructures import (
25
- AttributeDict,
26
- )
27
- from web3.types import (
28
- TxParams,
29
- Wei,
30
- )
31
-
32
- if TYPE_CHECKING:
33
- from web3 import ( # noqa: F401
34
- AsyncWeb3,
35
- Web3,
36
- )
37
-
38
- PRIVATE_KEY_HEX = "0x56ebb41875ceedd42e395f730e03b5c44989393c9f0484ee6bc05f933673458f"
39
- SECOND_PRIVATE_KEY_HEX = (
40
- "0x56ebb41875ceedd42e395f730e03b5c44989393c9f0484ee6bc05f9336712345"
41
- )
42
- THIRD_PRIVATE_KEY_HEX = (
43
- "0x56ebb41875ceedd42e395f730e03b5c44989393c9f0484ee6bc05f9336754321"
44
- )
45
- PASSWORD = "web3-testing"
46
- ADDRESS = "0x844B417c0C58B02c2224306047B9fb0D3264fE8c"
47
- SECOND_ADDRESS = "0xB96b6B21053e67BA59907E252D990C71742c41B8"
48
-
49
-
50
- PRIVATE_KEY_FOR_UNLOCK = (
51
- "0x392f63a79b1ff8774845f3fa69de4a13800a59e7083f5187f1558f0797ad0f01"
52
- )
53
- ACCOUNT_FOR_UNLOCK = "0x12efDc31B1a8FA1A1e756DFD8A1601055C971E13"
54
-
55
-
56
- class GoEthereumPersonalModuleTest:
57
- def test_personal_import_raw_key(self, w3: "Web3") -> None:
58
- actual = w3.geth.personal.import_raw_key(PRIVATE_KEY_HEX, PASSWORD)
59
- assert actual == ADDRESS
60
-
61
- def test_personal_list_accounts(self, w3: "Web3") -> None:
62
- accounts = w3.geth.personal.list_accounts()
63
- assert is_list_like(accounts)
64
- assert len(accounts) > 0
65
- assert all((is_checksum_address(item) for item in accounts))
66
-
67
- def test_personal_list_wallets(self, w3: "Web3") -> None:
68
- wallets = w3.geth.personal.list_wallets()
69
- assert is_list_like(wallets)
70
- assert len(wallets) > 0
71
- assert is_checksum_address(wallets[0]["accounts"][0]["address"])
72
- assert is_string(wallets[0]["accounts"][0]["url"])
73
- assert is_string(wallets[0]["status"])
74
- assert is_string(wallets[0]["url"])
75
-
76
- def test_personal_lock_account(
77
- self, w3: "Web3", unlockable_account_dual_type: ChecksumAddress
78
- ) -> None:
79
- # TODO: how do we test this better?
80
- w3.geth.personal.lock_account(unlockable_account_dual_type)
81
-
82
- def test_personal_unlock_account_success(
83
- self,
84
- w3: "Web3",
85
- unlockable_account_dual_type: ChecksumAddress,
86
- unlockable_account_pw: str,
87
- ) -> None:
88
- result = w3.geth.personal.unlock_account(
89
- unlockable_account_dual_type, unlockable_account_pw
90
- )
91
- assert result is True
92
-
93
- def test_personal_unlock_account_failure(
94
- self, w3: "Web3", unlockable_account_dual_type: ChecksumAddress
95
- ) -> None:
96
- with pytest.raises(ValueError):
97
- w3.geth.personal.unlock_account(
98
- unlockable_account_dual_type, "bad-password"
99
- )
100
-
101
- def test_personal_new_account(self, w3: "Web3") -> None:
102
- new_account = w3.geth.personal.new_account(PASSWORD)
103
- assert is_checksum_address(new_account)
104
-
105
- def test_personal_send_transaction(
106
- self,
107
- w3: "Web3",
108
- unlockable_account_dual_type: ChecksumAddress,
109
- unlockable_account_pw: str,
110
- ) -> None:
111
- assert (
112
- w3.eth.get_balance(unlockable_account_dual_type) > constants.WEI_PER_ETHER
113
- )
114
- txn_params: TxParams = {
115
- "from": unlockable_account_dual_type,
116
- "to": unlockable_account_dual_type,
117
- "gas": 21000,
118
- "value": Wei(1),
119
- "gasPrice": w3.to_wei(1, "gwei"),
120
- }
121
- txn_hash = w3.geth.personal.send_transaction(txn_params, unlockable_account_pw)
122
- assert txn_hash
123
- transaction = w3.eth.get_transaction(txn_hash)
124
-
125
- assert is_same_address(
126
- transaction["from"], cast(ChecksumAddress, txn_params["from"])
127
- )
128
- assert is_same_address(
129
- transaction["to"], cast(ChecksumAddress, txn_params["to"])
130
- )
131
- assert transaction["gas"] == txn_params["gas"]
132
- assert transaction["value"] == txn_params["value"]
133
- assert transaction["gasPrice"] == txn_params["gasPrice"]
134
-
135
- def test_personal_sign_and_ecrecover(
136
- self,
137
- w3: "Web3",
138
- unlockable_account_dual_type: ChecksumAddress,
139
- unlockable_account_pw: str,
140
- ) -> None:
141
- message = "test-web3-geth-personal-sign"
142
- signature = w3.geth.personal.sign(
143
- message, unlockable_account_dual_type, unlockable_account_pw
144
- )
145
- signer = w3.geth.personal.ec_recover(message, signature)
146
- assert is_same_address(signer, unlockable_account_dual_type)
147
-
148
- @pytest.mark.xfail(
149
- reason="personal_sign_typed_data JSON RPC call has not been released in geth"
150
- )
151
- def test_personal_sign_typed_data(
152
- self,
153
- w3: "Web3",
154
- unlockable_account_dual_type: ChecksumAddress,
155
- unlockable_account_pw: str,
156
- ) -> None:
157
- typed_message = """
158
- {
159
- "types": {
160
- "EIP712Domain": [
161
- {"name": "name", "type": "string"},
162
- {"name": "version", "type": "string"},
163
- {"name": "chainId", "type": "uint256"},
164
- {"name": "verifyingContract", "type": "address"}
165
- ],
166
- "Person": [
167
- {"name": "name", "type": "string"},
168
- {"name": "wallet", "type": "address"}
169
- ],
170
- "Mail": [
171
- {"name": "from", "type": "Person"},
172
- {"name": "to", "type": "Person"},
173
- {"name": "contents", "type": "string"}
174
- ]
175
- },
176
- "primaryType": "Mail",
177
- "domain": {
178
- "name": "Ether Mail",
179
- "version": "1",
180
- "chainId": "0x01",
181
- "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
182
- },
183
- "message": {
184
- "from": {
185
- "name": "Cow",
186
- "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826"
187
- },
188
- "to": {
189
- "name": "Bob",
190
- "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB"
191
- },
192
- "contents": "Hello, Bob!"
193
- }
194
- }
195
- """
196
- signature = HexBytes(
197
- w3.geth.personal.sign_typed_data(
198
- json.loads(typed_message),
199
- unlockable_account_dual_type,
200
- unlockable_account_pw,
201
- )
202
- )
203
-
204
- expected_signature = HexBytes(
205
- "0xc8b56aaeefd10ab4005c2455daf28d9082af661ac347cd"
206
- "b612d5b5e11f339f2055be831bf57a6e6cb5f6d93448fa35"
207
- "c1bd56fe1d745ffa101e74697108668c401c"
208
- )
209
- assert signature == expected_signature
210
- assert len(signature) == 32 + 32 + 1
211
-
212
-
213
- class GoEthereumAsyncPersonalModuleTest:
214
- @pytest.mark.asyncio
215
- async def test_async_sign_and_ec_recover(
216
- self,
217
- async_w3: "AsyncWeb3",
218
- async_unlockable_account_dual_type: ChecksumAddress,
219
- unlockable_account_pw: str,
220
- ) -> None:
221
- message = "This is a test"
222
- signature = await async_w3.geth.personal.sign(
223
- message, async_unlockable_account_dual_type, unlockable_account_pw
224
- )
225
- address = await async_w3.geth.personal.ec_recover(message, signature)
226
- assert is_same_address(async_unlockable_account_dual_type, address)
227
-
228
- @pytest.mark.asyncio
229
- async def test_async_import_key(self, async_w3: "AsyncWeb3") -> None:
230
- address = await async_w3.geth.personal.import_raw_key(
231
- THIRD_PRIVATE_KEY_HEX, "Testing"
232
- )
233
- assert address is not None
234
-
235
- @pytest.mark.asyncio
236
- async def test_async_list_accounts(self, async_w3: "AsyncWeb3") -> None:
237
- accounts = await async_w3.geth.personal.list_accounts()
238
- assert len(accounts) > 0
239
-
240
- @pytest.mark.asyncio
241
- async def test_async_list_wallets(self, async_w3: "AsyncWeb3") -> None:
242
- wallets = await async_w3.geth.personal.list_wallets()
243
- assert isinstance(wallets[0], AttributeDict)
244
-
245
- @pytest.mark.asyncio
246
- async def test_async_new_account(self, async_w3: "AsyncWeb3") -> None:
247
- passphrase = "Create New Account"
248
- account = await async_w3.geth.personal.new_account(passphrase)
249
- assert is_checksum_address(account)
250
-
251
- @pytest.mark.asyncio
252
- async def test_async_unlock_lock_account(
253
- self,
254
- async_w3: "AsyncWeb3",
255
- async_unlockable_account_dual_type: ChecksumAddress,
256
- unlockable_account_pw: str,
257
- ) -> None:
258
- unlocked = await async_w3.geth.personal.unlock_account(
259
- async_unlockable_account_dual_type, unlockable_account_pw
260
- )
261
- assert unlocked is True
262
- locked = await async_w3.geth.personal.lock_account(
263
- async_unlockable_account_dual_type
264
- )
265
- assert locked is True
266
-
267
- @pytest.mark.asyncio
268
- async def test_async_send_transaction(
269
- self,
270
- async_w3: "AsyncWeb3",
271
- async_unlockable_account_dual_type: ChecksumAddress,
272
- unlockable_account_pw: str,
273
- ) -> None:
274
- tx_params = TxParams()
275
- tx_params["to"] = async_unlockable_account_dual_type
276
- tx_params["from"] = async_unlockable_account_dual_type
277
- tx_params["value"] = Wei(123)
278
- response = await async_w3.geth.personal.send_transaction(
279
- tx_params, unlockable_account_pw
280
- )
281
- assert response is not None
282
-
283
- @pytest.mark.xfail(
284
- reason="personal_signTypedData JSON RPC call has not been released in geth"
285
- )
286
- @pytest.mark.asyncio
287
- async def test_async_sign_typed_data(
288
- self,
289
- async_w3: "AsyncWeb3",
290
- async_unlockable_account_dual_type: ChecksumAddress,
291
- unlockable_account_pw: str,
292
- ) -> None:
293
- message = {"message": "This is a test"}
294
- signature = await async_w3.geth.personal.sign_typed_data(
295
- message, async_unlockable_account_dual_type, unlockable_account_pw
296
- )
297
- address = await async_w3.geth.personal.ec_recover(
298
- json.dumps(message), signature
299
- )
300
- assert is_same_address(async_unlockable_account_dual_type, address)