web3 7.2.0__py3-none-any.whl → 7.3.1__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 (45) hide show
  1. ens/_normalization.py +3 -1
  2. ens/specs/nf.json +1 -1
  3. ens/specs/normalization_spec.json +1 -1
  4. web3/_utils/abi.py +3 -11
  5. web3/_utils/async_transactions.py +27 -16
  6. web3/_utils/caching/__init__.py +12 -0
  7. web3/_utils/{caching.py → caching/caching_utils.py} +121 -36
  8. web3/_utils/caching/request_caching_validation.py +129 -0
  9. web3/_utils/contract_sources/contract_data/arrays_contract.py +3 -3
  10. web3/_utils/contract_sources/contract_data/bytes_contracts.py +5 -5
  11. web3/_utils/contract_sources/contract_data/constructor_contracts.py +7 -7
  12. web3/_utils/contract_sources/contract_data/contract_caller_tester.py +3 -3
  13. web3/_utils/contract_sources/contract_data/emitter_contract.py +3 -3
  14. web3/_utils/contract_sources/contract_data/event_contracts.py +5 -5
  15. web3/_utils/contract_sources/contract_data/extended_resolver.py +3 -3
  16. web3/_utils/contract_sources/contract_data/fallback_function_contract.py +3 -3
  17. web3/_utils/contract_sources/contract_data/function_name_tester_contract.py +3 -3
  18. web3/_utils/contract_sources/contract_data/math_contract.py +3 -3
  19. web3/_utils/contract_sources/contract_data/offchain_lookup.py +3 -3
  20. web3/_utils/contract_sources/contract_data/offchain_resolver.py +3 -3
  21. web3/_utils/contract_sources/contract_data/panic_errors_contract.py +3 -3
  22. web3/_utils/contract_sources/contract_data/payable_tester.py +3 -3
  23. web3/_utils/contract_sources/contract_data/receive_function_contracts.py +5 -5
  24. web3/_utils/contract_sources/contract_data/reflector_contracts.py +3 -3
  25. web3/_utils/contract_sources/contract_data/revert_contract.py +3 -3
  26. web3/_utils/contract_sources/contract_data/simple_resolver.py +3 -3
  27. web3/_utils/contract_sources/contract_data/storage_contract.py +3 -3
  28. web3/_utils/contract_sources/contract_data/string_contract.py +3 -3
  29. web3/_utils/contract_sources/contract_data/tuple_contracts.py +5 -5
  30. web3/_utils/module_testing/eth_module.py +4 -4
  31. web3/_utils/transactions.py +14 -13
  32. web3/beacon/async_beacon.py +4 -1
  33. web3/contract/base_contract.py +1 -2
  34. web3/exceptions.py +14 -1
  35. web3/main.py +23 -0
  36. web3/providers/async_base.py +12 -0
  37. web3/providers/base.py +11 -0
  38. web3/providers/persistent/async_ipc.py +26 -26
  39. web3/utils/__init__.py +2 -0
  40. web3/utils/caching.py +8 -0
  41. {web3-7.2.0.dist-info → web3-7.3.1.dist-info}/METADATA +19 -12
  42. {web3-7.2.0.dist-info → web3-7.3.1.dist-info}/RECORD +45 -43
  43. {web3-7.2.0.dist-info → web3-7.3.1.dist-info}/WHEEL +1 -1
  44. {web3-7.2.0.dist-info → web3-7.3.1.dist-info}/LICENSE +0 -0
  45. {web3-7.2.0.dist-info → web3-7.3.1.dist-info}/top_level.txt +0 -0
@@ -1,11 +1,11 @@
1
1
  """
2
2
  Generated by `compile_contracts.py` script.
3
- Compiled with Solidity v0.8.26.
3
+ Compiled with Solidity v0.8.27.
4
4
  """
5
5
 
6
6
  # source: web3/_utils/contract_sources/TupleContracts.sol:TupleContract
7
- TUPLE_CONTRACT_BYTECODE = "0x6080604052348015600e575f80fd5b50610a688061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80638e1ae3c71461002d575b5f80fd5b6100476004803603810190610042919061064d565b61005d565b6040516100549190610a12565b60405180910390f35b61006561006d565b819050919050565b60405180606001604052805f815260200160608152602001606081525090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6100e8826100a2565b810181811067ffffffffffffffff82111715610107576101066100b2565b5b80604052505050565b5f61011961008d565b905061012582826100df565b919050565b5f80fd5b5f819050919050565b6101408161012e565b811461014a575f80fd5b50565b5f8135905061015b81610137565b92915050565b5f80fd5b5f67ffffffffffffffff82111561017f5761017e6100b2565b5b602082029050602081019050919050565b5f80fd5b5f6101a66101a184610165565b610110565b905080838252602082019050602084028301858111156101c9576101c8610190565b5b835b818110156101f257806101de888261014d565b8452602084019350506020810190506101cb565b5050509392505050565b5f82601f8301126102105761020f610161565b5b8135610220848260208601610194565b91505092915050565b5f67ffffffffffffffff821115610243576102426100b2565b5b602082029050602081019050919050565b5f819050919050565b61026681610254565b8114610270575f80fd5b50565b5f813590506102818161025d565b92915050565b5f67ffffffffffffffff8211156102a1576102a06100b2565b5b602082029050919050565b5f8115159050919050565b6102c0816102ac565b81146102ca575f80fd5b50565b5f813590506102db816102b7565b92915050565b5f6102f36102ee84610287565b610110565b9050806020840283018581111561030d5761030c610190565b5b835b81811015610336578061032288826102cd565b84526020840193505060208101905061030f565b5050509392505050565b5f82601f83011261035457610353610161565b5b60026103618482856102e1565b91505092915050565b5f67ffffffffffffffff821115610384576103836100b2565b5b602082029050602081019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103be82610395565b9050919050565b6103ce816103b4565b81146103d8575f80fd5b50565b5f813590506103e9816103c5565b92915050565b5f6104016103fc8461036a565b610110565b9050808382526020820190506020840283018581111561042457610423610190565b5b835b8181101561044d578061043988826103db565b845260208401935050602081019050610426565b5050509392505050565b5f82601f83011261046b5761046a610161565b5b813561047b8482602086016103ef565b91505092915050565b5f608082840312156104995761049861009e565b5b6104a36060610110565b90505f6104b284828501610273565b5f8301525060206104c584828501610340565b602083015250606082013567ffffffffffffffff8111156104e9576104e861012a565b5b6104f584828501610457565b60408301525092915050565b5f61051361050e84610229565b610110565b9050808382526020820190506020840283018581111561053657610535610190565b5b835b8181101561057d57803567ffffffffffffffff81111561055b5761055a610161565b5b8086016105688982610484565b85526020850194505050602081019050610538565b5050509392505050565b5f82601f83011261059b5761059a610161565b5b81356105ab848260208601610501565b91505092915050565b5f606082840312156105c9576105c861009e565b5b6105d36060610110565b90505f6105e28482850161014d565b5f83015250602082013567ffffffffffffffff8111156106055761060461012a565b5b610611848285016101fc565b602083015250604082013567ffffffffffffffff8111156106355761063461012a565b5b61064184828501610587565b60408301525092915050565b5f6020828403121561066257610661610096565b5b5f82013567ffffffffffffffff81111561067f5761067e61009a565b5b61068b848285016105b4565b91505092915050565b61069d8161012e565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6106d78383610694565b60208301905092915050565b5f602082019050919050565b5f6106f9826106a3565b61070381856106ad565b935061070e836106bd565b805f5b8381101561073e57815161072588826106cc565b9750610730836106e3565b925050600181019050610711565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61077d81610254565b82525050565b5f60029050919050565b5f81905092915050565b5f819050919050565b6107a9816102ac565b82525050565b5f6107ba83836107a0565b60208301905092915050565b5f602082019050919050565b6107db81610783565b6107e5818461078d565b92506107f082610797565b805f5b8381101561082057815161080787826107af565b9650610812836107c6565b9250506001810190506107f3565b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61085a816103b4565b82525050565b5f61086b8383610851565b60208301905092915050565b5f602082019050919050565b5f61088d82610828565b6108978185610832565b93506108a283610842565b805f5b838110156108d25781516108b98882610860565b97506108c483610877565b9250506001810190506108a5565b5085935050505092915050565b5f608083015f8301516108f45f860182610774565b50602083015161090760208601826107d2565b506040830151848203606086015261091f8282610883565b9150508091505092915050565b5f61093783836108df565b905092915050565b5f602082019050919050565b5f6109558261074b565b61095f8185610755565b93508360208202850161097185610765565b805f5b858110156109ac578484038952815161098d858261092c565b94506109988361093f565b925060208a01995050600181019050610974565b50829750879550505050505092915050565b5f606083015f8301516109d35f860182610694565b50602083015184820360208601526109eb82826106ef565b91505060408301518482036040860152610a05828261094b565b9150508091505092915050565b5f6020820190508181035f830152610a2a81846109be565b90509291505056fea2646970667358221220eceacc6d446397857f304b1ffd0804c4e890c35adcb55b79fc6febb1bba2f5e664736f6c634300081a0033" # noqa: E501
8
- TUPLE_CONTRACT_RUNTIME = "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c80638e1ae3c71461002d575b5f80fd5b6100476004803603810190610042919061064d565b61005d565b6040516100549190610a12565b60405180910390f35b61006561006d565b819050919050565b60405180606001604052805f815260200160608152602001606081525090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6100e8826100a2565b810181811067ffffffffffffffff82111715610107576101066100b2565b5b80604052505050565b5f61011961008d565b905061012582826100df565b919050565b5f80fd5b5f819050919050565b6101408161012e565b811461014a575f80fd5b50565b5f8135905061015b81610137565b92915050565b5f80fd5b5f67ffffffffffffffff82111561017f5761017e6100b2565b5b602082029050602081019050919050565b5f80fd5b5f6101a66101a184610165565b610110565b905080838252602082019050602084028301858111156101c9576101c8610190565b5b835b818110156101f257806101de888261014d565b8452602084019350506020810190506101cb565b5050509392505050565b5f82601f8301126102105761020f610161565b5b8135610220848260208601610194565b91505092915050565b5f67ffffffffffffffff821115610243576102426100b2565b5b602082029050602081019050919050565b5f819050919050565b61026681610254565b8114610270575f80fd5b50565b5f813590506102818161025d565b92915050565b5f67ffffffffffffffff8211156102a1576102a06100b2565b5b602082029050919050565b5f8115159050919050565b6102c0816102ac565b81146102ca575f80fd5b50565b5f813590506102db816102b7565b92915050565b5f6102f36102ee84610287565b610110565b9050806020840283018581111561030d5761030c610190565b5b835b81811015610336578061032288826102cd565b84526020840193505060208101905061030f565b5050509392505050565b5f82601f83011261035457610353610161565b5b60026103618482856102e1565b91505092915050565b5f67ffffffffffffffff821115610384576103836100b2565b5b602082029050602081019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103be82610395565b9050919050565b6103ce816103b4565b81146103d8575f80fd5b50565b5f813590506103e9816103c5565b92915050565b5f6104016103fc8461036a565b610110565b9050808382526020820190506020840283018581111561042457610423610190565b5b835b8181101561044d578061043988826103db565b845260208401935050602081019050610426565b5050509392505050565b5f82601f83011261046b5761046a610161565b5b813561047b8482602086016103ef565b91505092915050565b5f608082840312156104995761049861009e565b5b6104a36060610110565b90505f6104b284828501610273565b5f8301525060206104c584828501610340565b602083015250606082013567ffffffffffffffff8111156104e9576104e861012a565b5b6104f584828501610457565b60408301525092915050565b5f61051361050e84610229565b610110565b9050808382526020820190506020840283018581111561053657610535610190565b5b835b8181101561057d57803567ffffffffffffffff81111561055b5761055a610161565b5b8086016105688982610484565b85526020850194505050602081019050610538565b5050509392505050565b5f82601f83011261059b5761059a610161565b5b81356105ab848260208601610501565b91505092915050565b5f606082840312156105c9576105c861009e565b5b6105d36060610110565b90505f6105e28482850161014d565b5f83015250602082013567ffffffffffffffff8111156106055761060461012a565b5b610611848285016101fc565b602083015250604082013567ffffffffffffffff8111156106355761063461012a565b5b61064184828501610587565b60408301525092915050565b5f6020828403121561066257610661610096565b5b5f82013567ffffffffffffffff81111561067f5761067e61009a565b5b61068b848285016105b4565b91505092915050565b61069d8161012e565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6106d78383610694565b60208301905092915050565b5f602082019050919050565b5f6106f9826106a3565b61070381856106ad565b935061070e836106bd565b805f5b8381101561073e57815161072588826106cc565b9750610730836106e3565b925050600181019050610711565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61077d81610254565b82525050565b5f60029050919050565b5f81905092915050565b5f819050919050565b6107a9816102ac565b82525050565b5f6107ba83836107a0565b60208301905092915050565b5f602082019050919050565b6107db81610783565b6107e5818461078d565b92506107f082610797565b805f5b8381101561082057815161080787826107af565b9650610812836107c6565b9250506001810190506107f3565b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61085a816103b4565b82525050565b5f61086b8383610851565b60208301905092915050565b5f602082019050919050565b5f61088d82610828565b6108978185610832565b93506108a283610842565b805f5b838110156108d25781516108b98882610860565b97506108c483610877565b9250506001810190506108a5565b5085935050505092915050565b5f608083015f8301516108f45f860182610774565b50602083015161090760208601826107d2565b506040830151848203606086015261091f8282610883565b9150508091505092915050565b5f61093783836108df565b905092915050565b5f602082019050919050565b5f6109558261074b565b61095f8185610755565b93508360208202850161097185610765565b805f5b858110156109ac578484038952815161098d858261092c565b94506109988361093f565b925060208a01995050600181019050610974565b50829750879550505050505092915050565b5f606083015f8301516109d35f860182610694565b50602083015184820360208601526109eb82826106ef565b91505060408301518482036040860152610a05828261094b565b9150508091505092915050565b5f6020820190508181035f830152610a2a81846109be565b90509291505056fea2646970667358221220eceacc6d446397857f304b1ffd0804c4e890c35adcb55b79fc6febb1bba2f5e664736f6c634300081a0033" # noqa: E501
7
+ TUPLE_CONTRACT_BYTECODE = "0x6080604052348015600e575f5ffd5b50610a688061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c80638e1ae3c71461002d575b5f5ffd5b6100476004803603810190610042919061064d565b61005d565b6040516100549190610a12565b60405180910390f35b61006561006d565b819050919050565b60405180606001604052805f815260200160608152602001606081525090565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6100e8826100a2565b810181811067ffffffffffffffff82111715610107576101066100b2565b5b80604052505050565b5f61011961008d565b905061012582826100df565b919050565b5f5ffd5b5f819050919050565b6101408161012e565b811461014a575f5ffd5b50565b5f8135905061015b81610137565b92915050565b5f5ffd5b5f67ffffffffffffffff82111561017f5761017e6100b2565b5b602082029050602081019050919050565b5f5ffd5b5f6101a66101a184610165565b610110565b905080838252602082019050602084028301858111156101c9576101c8610190565b5b835b818110156101f257806101de888261014d565b8452602084019350506020810190506101cb565b5050509392505050565b5f82601f8301126102105761020f610161565b5b8135610220848260208601610194565b91505092915050565b5f67ffffffffffffffff821115610243576102426100b2565b5b602082029050602081019050919050565b5f819050919050565b61026681610254565b8114610270575f5ffd5b50565b5f813590506102818161025d565b92915050565b5f67ffffffffffffffff8211156102a1576102a06100b2565b5b602082029050919050565b5f8115159050919050565b6102c0816102ac565b81146102ca575f5ffd5b50565b5f813590506102db816102b7565b92915050565b5f6102f36102ee84610287565b610110565b9050806020840283018581111561030d5761030c610190565b5b835b81811015610336578061032288826102cd565b84526020840193505060208101905061030f565b5050509392505050565b5f82601f83011261035457610353610161565b5b60026103618482856102e1565b91505092915050565b5f67ffffffffffffffff821115610384576103836100b2565b5b602082029050602081019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103be82610395565b9050919050565b6103ce816103b4565b81146103d8575f5ffd5b50565b5f813590506103e9816103c5565b92915050565b5f6104016103fc8461036a565b610110565b9050808382526020820190506020840283018581111561042457610423610190565b5b835b8181101561044d578061043988826103db565b845260208401935050602081019050610426565b5050509392505050565b5f82601f83011261046b5761046a610161565b5b813561047b8482602086016103ef565b91505092915050565b5f608082840312156104995761049861009e565b5b6104a36060610110565b90505f6104b284828501610273565b5f8301525060206104c584828501610340565b602083015250606082013567ffffffffffffffff8111156104e9576104e861012a565b5b6104f584828501610457565b60408301525092915050565b5f61051361050e84610229565b610110565b9050808382526020820190506020840283018581111561053657610535610190565b5b835b8181101561057d57803567ffffffffffffffff81111561055b5761055a610161565b5b8086016105688982610484565b85526020850194505050602081019050610538565b5050509392505050565b5f82601f83011261059b5761059a610161565b5b81356105ab848260208601610501565b91505092915050565b5f606082840312156105c9576105c861009e565b5b6105d36060610110565b90505f6105e28482850161014d565b5f83015250602082013567ffffffffffffffff8111156106055761060461012a565b5b610611848285016101fc565b602083015250604082013567ffffffffffffffff8111156106355761063461012a565b5b61064184828501610587565b60408301525092915050565b5f6020828403121561066257610661610096565b5b5f82013567ffffffffffffffff81111561067f5761067e61009a565b5b61068b848285016105b4565b91505092915050565b61069d8161012e565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6106d78383610694565b60208301905092915050565b5f602082019050919050565b5f6106f9826106a3565b61070381856106ad565b935061070e836106bd565b805f5b8381101561073e57815161072588826106cc565b9750610730836106e3565b925050600181019050610711565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61077d81610254565b82525050565b5f60029050919050565b5f81905092915050565b5f819050919050565b6107a9816102ac565b82525050565b5f6107ba83836107a0565b60208301905092915050565b5f602082019050919050565b6107db81610783565b6107e5818461078d565b92506107f082610797565b805f5b8381101561082057815161080787826107af565b9650610812836107c6565b9250506001810190506107f3565b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61085a816103b4565b82525050565b5f61086b8383610851565b60208301905092915050565b5f602082019050919050565b5f61088d82610828565b6108978185610832565b93506108a283610842565b805f5b838110156108d25781516108b98882610860565b97506108c483610877565b9250506001810190506108a5565b5085935050505092915050565b5f608083015f8301516108f45f860182610774565b50602083015161090760208601826107d2565b506040830151848203606086015261091f8282610883565b9150508091505092915050565b5f61093783836108df565b905092915050565b5f602082019050919050565b5f6109558261074b565b61095f8185610755565b93508360208202850161097185610765565b805f5b858110156109ac578484038952815161098d858261092c565b94506109988361093f565b925060208a01995050600181019050610974565b50829750879550505050505092915050565b5f606083015f8301516109d35f860182610694565b50602083015184820360208601526109eb82826106ef565b91505060408301518482036040860152610a05828261094b565b9150508091505092915050565b5f6020820190508181035f830152610a2a81846109be565b90509291505056fea26469706673582212207adaf59879d665fddbe536da6fd004def309fc6d78a3a894ecf546ec9fea5e1564736f6c634300081b0033" # noqa: E501
8
+ TUPLE_CONTRACT_RUNTIME = "0x608060405234801561000f575f5ffd5b5060043610610029575f3560e01c80638e1ae3c71461002d575b5f5ffd5b6100476004803603810190610042919061064d565b61005d565b6040516100549190610a12565b60405180910390f35b61006561006d565b819050919050565b60405180606001604052805f815260200160608152602001606081525090565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6100e8826100a2565b810181811067ffffffffffffffff82111715610107576101066100b2565b5b80604052505050565b5f61011961008d565b905061012582826100df565b919050565b5f5ffd5b5f819050919050565b6101408161012e565b811461014a575f5ffd5b50565b5f8135905061015b81610137565b92915050565b5f5ffd5b5f67ffffffffffffffff82111561017f5761017e6100b2565b5b602082029050602081019050919050565b5f5ffd5b5f6101a66101a184610165565b610110565b905080838252602082019050602084028301858111156101c9576101c8610190565b5b835b818110156101f257806101de888261014d565b8452602084019350506020810190506101cb565b5050509392505050565b5f82601f8301126102105761020f610161565b5b8135610220848260208601610194565b91505092915050565b5f67ffffffffffffffff821115610243576102426100b2565b5b602082029050602081019050919050565b5f819050919050565b61026681610254565b8114610270575f5ffd5b50565b5f813590506102818161025d565b92915050565b5f67ffffffffffffffff8211156102a1576102a06100b2565b5b602082029050919050565b5f8115159050919050565b6102c0816102ac565b81146102ca575f5ffd5b50565b5f813590506102db816102b7565b92915050565b5f6102f36102ee84610287565b610110565b9050806020840283018581111561030d5761030c610190565b5b835b81811015610336578061032288826102cd565b84526020840193505060208101905061030f565b5050509392505050565b5f82601f83011261035457610353610161565b5b60026103618482856102e1565b91505092915050565b5f67ffffffffffffffff821115610384576103836100b2565b5b602082029050602081019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103be82610395565b9050919050565b6103ce816103b4565b81146103d8575f5ffd5b50565b5f813590506103e9816103c5565b92915050565b5f6104016103fc8461036a565b610110565b9050808382526020820190506020840283018581111561042457610423610190565b5b835b8181101561044d578061043988826103db565b845260208401935050602081019050610426565b5050509392505050565b5f82601f83011261046b5761046a610161565b5b813561047b8482602086016103ef565b91505092915050565b5f608082840312156104995761049861009e565b5b6104a36060610110565b90505f6104b284828501610273565b5f8301525060206104c584828501610340565b602083015250606082013567ffffffffffffffff8111156104e9576104e861012a565b5b6104f584828501610457565b60408301525092915050565b5f61051361050e84610229565b610110565b9050808382526020820190506020840283018581111561053657610535610190565b5b835b8181101561057d57803567ffffffffffffffff81111561055b5761055a610161565b5b8086016105688982610484565b85526020850194505050602081019050610538565b5050509392505050565b5f82601f83011261059b5761059a610161565b5b81356105ab848260208601610501565b91505092915050565b5f606082840312156105c9576105c861009e565b5b6105d36060610110565b90505f6105e28482850161014d565b5f83015250602082013567ffffffffffffffff8111156106055761060461012a565b5b610611848285016101fc565b602083015250604082013567ffffffffffffffff8111156106355761063461012a565b5b61064184828501610587565b60408301525092915050565b5f6020828403121561066257610661610096565b5b5f82013567ffffffffffffffff81111561067f5761067e61009a565b5b61068b848285016105b4565b91505092915050565b61069d8161012e565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6106d78383610694565b60208301905092915050565b5f602082019050919050565b5f6106f9826106a3565b61070381856106ad565b935061070e836106bd565b805f5b8381101561073e57815161072588826106cc565b9750610730836106e3565b925050600181019050610711565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61077d81610254565b82525050565b5f60029050919050565b5f81905092915050565b5f819050919050565b6107a9816102ac565b82525050565b5f6107ba83836107a0565b60208301905092915050565b5f602082019050919050565b6107db81610783565b6107e5818461078d565b92506107f082610797565b805f5b8381101561082057815161080787826107af565b9650610812836107c6565b9250506001810190506107f3565b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61085a816103b4565b82525050565b5f61086b8383610851565b60208301905092915050565b5f602082019050919050565b5f61088d82610828565b6108978185610832565b93506108a283610842565b805f5b838110156108d25781516108b98882610860565b97506108c483610877565b9250506001810190506108a5565b5085935050505092915050565b5f608083015f8301516108f45f860182610774565b50602083015161090760208601826107d2565b506040830151848203606086015261091f8282610883565b9150508091505092915050565b5f61093783836108df565b905092915050565b5f602082019050919050565b5f6109558261074b565b61095f8185610755565b93508360208202850161097185610765565b805f5b858110156109ac578484038952815161098d858261092c565b94506109988361093f565b925060208a01995050600181019050610974565b50829750879550505050505092915050565b5f606083015f8301516109d35f860182610694565b50602083015184820360208601526109eb82826106ef565b91505060408301518482036040860152610a05828261094b565b9150508091505092915050565b5f6020820190508181035f830152610a2a81846109be565b90509291505056fea26469706673582212207adaf59879d665fddbe536da6fd004def309fc6d78a3a894ecf546ec9fea5e1564736f6c634300081b0033" # noqa: E501
9
9
  TUPLE_CONTRACT_ABI = [
10
10
  {
11
11
  "inputs": [
@@ -71,8 +71,8 @@ TUPLE_CONTRACT_DATA = {
71
71
 
72
72
 
73
73
  # source: web3/_utils/contract_sources/TupleContracts.sol:NestedTupleContract
74
- NESTED_TUPLE_CONTRACT_BYTECODE = "0x6080604052348015600e575f80fd5b5061067b8061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80632655aef11461002d575b5f80fd5b610047600480360381019061004291906103f1565b61005d565b6040516100549190610625565b60405180910390f35b61006561006d565b819050919050565b6040518060200160405280606081525090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6100db82610095565b810181811067ffffffffffffffff821117156100fa576100f96100a5565b5b80604052505050565b5f61010c610080565b905061011882826100d2565b919050565b5f80fd5b5f80fd5b5f67ffffffffffffffff82111561013f5761013e6100a5565b5b602082029050602081019050919050565b5f80fd5b5f67ffffffffffffffff82111561016e5761016d6100a5565b5b602082029050602081019050919050565b5f819050919050565b6101918161017f565b811461019b575f80fd5b50565b5f813590506101ac81610188565b92915050565b5f604082840312156101c7576101c6610091565b5b6101d16040610103565b90505f6101e08482850161019e565b5f8301525060206101f38482850161019e565b60208301525092915050565b5f61021161020c84610154565b610103565b9050808382526020820190506040840283018581111561023457610233610150565b5b835b8181101561025d578061024988826101b2565b845260208401935050604081019050610236565b5050509392505050565b5f82601f83011261027b5761027a610121565b5b813561028b8482602086016101ff565b91505092915050565b5f602082840312156102a9576102a8610091565b5b6102b36020610103565b90505f82013567ffffffffffffffff8111156102d2576102d161011d565b5b6102de84828501610267565b5f8301525092915050565b5f6102fb6102f684610125565b610103565b9050808382526020820190506020840283018581111561031e5761031d610150565b5b835b8181101561036557803567ffffffffffffffff81111561034357610342610121565b5b8086016103508982610294565b85526020850194505050602081019050610320565b5050509392505050565b5f82601f83011261038357610382610121565b5b81356103938482602086016102e9565b91505092915050565b5f602082840312156103b1576103b0610091565b5b6103bb6020610103565b90505f82013567ffffffffffffffff8111156103da576103d961011d565b5b6103e68482850161036f565b5f8301525092915050565b5f6020828403121561040657610405610089565b5b5f82013567ffffffffffffffff8111156104235761042261008d565b5b61042f8482850161039c565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6104938161017f565b82525050565b604082015f8201516104ad5f85018261048a565b5060208201516104c0602085018261048a565b50505050565b5f6104d18383610499565b60408301905092915050565b5f602082019050919050565b5f6104f382610461565b6104fd818561046b565b93506105088361047b565b805f5b8381101561053857815161051f88826104c6565b975061052a836104dd565b92505060018101905061050b565b5085935050505092915050565b5f602083015f8301518482035f86015261055f82826104e9565b9150508091505092915050565b5f6105778383610545565b905092915050565b5f602082019050919050565b5f61059582610438565b61059f8185610442565b9350836020820285016105b185610452565b805f5b858110156105ec57848403895281516105cd858261056c565b94506105d88361057f565b925060208a019950506001810190506105b4565b50829750879550505050505092915050565b5f602083015f8301518482035f860152610618828261058b565b9150508091505092915050565b5f6020820190508181035f83015261063d81846105fe565b90509291505056fea26469706673582212201f383cb73e1121ed7db5fc14b5624427a5a50460d2ff05356c6640fb19fc3c4764736f6c634300081a0033" # noqa: E501
75
- NESTED_TUPLE_CONTRACT_RUNTIME = "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c80632655aef11461002d575b5f80fd5b610047600480360381019061004291906103f1565b61005d565b6040516100549190610625565b60405180910390f35b61006561006d565b819050919050565b6040518060200160405280606081525090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6100db82610095565b810181811067ffffffffffffffff821117156100fa576100f96100a5565b5b80604052505050565b5f61010c610080565b905061011882826100d2565b919050565b5f80fd5b5f80fd5b5f67ffffffffffffffff82111561013f5761013e6100a5565b5b602082029050602081019050919050565b5f80fd5b5f67ffffffffffffffff82111561016e5761016d6100a5565b5b602082029050602081019050919050565b5f819050919050565b6101918161017f565b811461019b575f80fd5b50565b5f813590506101ac81610188565b92915050565b5f604082840312156101c7576101c6610091565b5b6101d16040610103565b90505f6101e08482850161019e565b5f8301525060206101f38482850161019e565b60208301525092915050565b5f61021161020c84610154565b610103565b9050808382526020820190506040840283018581111561023457610233610150565b5b835b8181101561025d578061024988826101b2565b845260208401935050604081019050610236565b5050509392505050565b5f82601f83011261027b5761027a610121565b5b813561028b8482602086016101ff565b91505092915050565b5f602082840312156102a9576102a8610091565b5b6102b36020610103565b90505f82013567ffffffffffffffff8111156102d2576102d161011d565b5b6102de84828501610267565b5f8301525092915050565b5f6102fb6102f684610125565b610103565b9050808382526020820190506020840283018581111561031e5761031d610150565b5b835b8181101561036557803567ffffffffffffffff81111561034357610342610121565b5b8086016103508982610294565b85526020850194505050602081019050610320565b5050509392505050565b5f82601f83011261038357610382610121565b5b81356103938482602086016102e9565b91505092915050565b5f602082840312156103b1576103b0610091565b5b6103bb6020610103565b90505f82013567ffffffffffffffff8111156103da576103d961011d565b5b6103e68482850161036f565b5f8301525092915050565b5f6020828403121561040657610405610089565b5b5f82013567ffffffffffffffff8111156104235761042261008d565b5b61042f8482850161039c565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6104938161017f565b82525050565b604082015f8201516104ad5f85018261048a565b5060208201516104c0602085018261048a565b50505050565b5f6104d18383610499565b60408301905092915050565b5f602082019050919050565b5f6104f382610461565b6104fd818561046b565b93506105088361047b565b805f5b8381101561053857815161051f88826104c6565b975061052a836104dd565b92505060018101905061050b565b5085935050505092915050565b5f602083015f8301518482035f86015261055f82826104e9565b9150508091505092915050565b5f6105778383610545565b905092915050565b5f602082019050919050565b5f61059582610438565b61059f8185610442565b9350836020820285016105b185610452565b805f5b858110156105ec57848403895281516105cd858261056c565b94506105d88361057f565b925060208a019950506001810190506105b4565b50829750879550505050505092915050565b5f602083015f8301518482035f860152610618828261058b565b9150508091505092915050565b5f6020820190508181035f83015261063d81846105fe565b90509291505056fea26469706673582212201f383cb73e1121ed7db5fc14b5624427a5a50460d2ff05356c6640fb19fc3c4764736f6c634300081a0033" # noqa: E501
74
+ NESTED_TUPLE_CONTRACT_BYTECODE = "0x6080604052348015600e575f5ffd5b5061067b8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c80632655aef11461002d575b5f5ffd5b610047600480360381019061004291906103f1565b61005d565b6040516100549190610625565b60405180910390f35b61006561006d565b819050919050565b6040518060200160405280606081525090565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6100db82610095565b810181811067ffffffffffffffff821117156100fa576100f96100a5565b5b80604052505050565b5f61010c610080565b905061011882826100d2565b919050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82111561013f5761013e6100a5565b5b602082029050602081019050919050565b5f5ffd5b5f67ffffffffffffffff82111561016e5761016d6100a5565b5b602082029050602081019050919050565b5f819050919050565b6101918161017f565b811461019b575f5ffd5b50565b5f813590506101ac81610188565b92915050565b5f604082840312156101c7576101c6610091565b5b6101d16040610103565b90505f6101e08482850161019e565b5f8301525060206101f38482850161019e565b60208301525092915050565b5f61021161020c84610154565b610103565b9050808382526020820190506040840283018581111561023457610233610150565b5b835b8181101561025d578061024988826101b2565b845260208401935050604081019050610236565b5050509392505050565b5f82601f83011261027b5761027a610121565b5b813561028b8482602086016101ff565b91505092915050565b5f602082840312156102a9576102a8610091565b5b6102b36020610103565b90505f82013567ffffffffffffffff8111156102d2576102d161011d565b5b6102de84828501610267565b5f8301525092915050565b5f6102fb6102f684610125565b610103565b9050808382526020820190506020840283018581111561031e5761031d610150565b5b835b8181101561036557803567ffffffffffffffff81111561034357610342610121565b5b8086016103508982610294565b85526020850194505050602081019050610320565b5050509392505050565b5f82601f83011261038357610382610121565b5b81356103938482602086016102e9565b91505092915050565b5f602082840312156103b1576103b0610091565b5b6103bb6020610103565b90505f82013567ffffffffffffffff8111156103da576103d961011d565b5b6103e68482850161036f565b5f8301525092915050565b5f6020828403121561040657610405610089565b5b5f82013567ffffffffffffffff8111156104235761042261008d565b5b61042f8482850161039c565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6104938161017f565b82525050565b604082015f8201516104ad5f85018261048a565b5060208201516104c0602085018261048a565b50505050565b5f6104d18383610499565b60408301905092915050565b5f602082019050919050565b5f6104f382610461565b6104fd818561046b565b93506105088361047b565b805f5b8381101561053857815161051f88826104c6565b975061052a836104dd565b92505060018101905061050b565b5085935050505092915050565b5f602083015f8301518482035f86015261055f82826104e9565b9150508091505092915050565b5f6105778383610545565b905092915050565b5f602082019050919050565b5f61059582610438565b61059f8185610442565b9350836020820285016105b185610452565b805f5b858110156105ec57848403895281516105cd858261056c565b94506105d88361057f565b925060208a019950506001810190506105b4565b50829750879550505050505092915050565b5f602083015f8301518482035f860152610618828261058b565b9150508091505092915050565b5f6020820190508181035f83015261063d81846105fe565b90509291505056fea2646970667358221220b10a40d79c5187ac06501cc4ac82657a3a637162a094a455f80d765c59f270a964736f6c634300081b0033" # noqa: E501
75
+ NESTED_TUPLE_CONTRACT_RUNTIME = "0x608060405234801561000f575f5ffd5b5060043610610029575f3560e01c80632655aef11461002d575b5f5ffd5b610047600480360381019061004291906103f1565b61005d565b6040516100549190610625565b60405180910390f35b61006561006d565b819050919050565b6040518060200160405280606081525090565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6100db82610095565b810181811067ffffffffffffffff821117156100fa576100f96100a5565b5b80604052505050565b5f61010c610080565b905061011882826100d2565b919050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82111561013f5761013e6100a5565b5b602082029050602081019050919050565b5f5ffd5b5f67ffffffffffffffff82111561016e5761016d6100a5565b5b602082029050602081019050919050565b5f819050919050565b6101918161017f565b811461019b575f5ffd5b50565b5f813590506101ac81610188565b92915050565b5f604082840312156101c7576101c6610091565b5b6101d16040610103565b90505f6101e08482850161019e565b5f8301525060206101f38482850161019e565b60208301525092915050565b5f61021161020c84610154565b610103565b9050808382526020820190506040840283018581111561023457610233610150565b5b835b8181101561025d578061024988826101b2565b845260208401935050604081019050610236565b5050509392505050565b5f82601f83011261027b5761027a610121565b5b813561028b8482602086016101ff565b91505092915050565b5f602082840312156102a9576102a8610091565b5b6102b36020610103565b90505f82013567ffffffffffffffff8111156102d2576102d161011d565b5b6102de84828501610267565b5f8301525092915050565b5f6102fb6102f684610125565b610103565b9050808382526020820190506020840283018581111561031e5761031d610150565b5b835b8181101561036557803567ffffffffffffffff81111561034357610342610121565b5b8086016103508982610294565b85526020850194505050602081019050610320565b5050509392505050565b5f82601f83011261038357610382610121565b5b81356103938482602086016102e9565b91505092915050565b5f602082840312156103b1576103b0610091565b5b6103bb6020610103565b90505f82013567ffffffffffffffff8111156103da576103d961011d565b5b6103e68482850161036f565b5f8301525092915050565b5f6020828403121561040657610405610089565b5b5f82013567ffffffffffffffff8111156104235761042261008d565b5b61042f8482850161039c565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6104938161017f565b82525050565b604082015f8201516104ad5f85018261048a565b5060208201516104c0602085018261048a565b50505050565b5f6104d18383610499565b60408301905092915050565b5f602082019050919050565b5f6104f382610461565b6104fd818561046b565b93506105088361047b565b805f5b8381101561053857815161051f88826104c6565b975061052a836104dd565b92505060018101905061050b565b5085935050505092915050565b5f602083015f8301518482035f86015261055f82826104e9565b9150508091505092915050565b5f6105778383610545565b905092915050565b5f602082019050919050565b5f61059582610438565b61059f8185610442565b9350836020820285016105b185610452565b805f5b858110156105ec57848403895281516105cd858261056c565b94506105d88361057f565b925060208a019950506001810190506105b4565b50829750879550505050505092915050565b5f602083015f8301518482035f860152610618828261058b565b9150508091505092915050565b5f6020820190508181035f83015261063d81846105fe565b90509291505056fea2646970667358221220b10a40d79c5187ac06501cc4ac82657a3a637162a094a455f80d765c59f270a964736f6c634300081b0033" # noqa: E501
76
76
  NESTED_TUPLE_CONTRACT_ABI = [
77
77
  {
78
78
  "inputs": [
@@ -737,8 +737,8 @@ class AsyncEthModuleTest:
737
737
  "value": Wei(0),
738
738
  "gas": 21000,
739
739
  }
740
- async_w3.middleware_onion.add(
741
- SignAndSendRawMiddlewareBuilder.build(keyfile_account), "signing"
740
+ async_w3.middleware_onion.inject(
741
+ SignAndSendRawMiddlewareBuilder.build(keyfile_account), "signing", layer=0
742
742
  )
743
743
  txn_hash = await async_w3.eth.send_transaction(txn)
744
744
  assert isinstance(txn_hash, HexBytes)
@@ -3747,8 +3747,8 @@ class EthModuleTest:
3747
3747
  "value": Wei(0),
3748
3748
  "gas": 21000,
3749
3749
  }
3750
- w3.middleware_onion.add(
3751
- SignAndSendRawMiddlewareBuilder.build(keyfile_account), "signing"
3750
+ w3.middleware_onion.inject(
3751
+ SignAndSendRawMiddlewareBuilder.build(keyfile_account), "signing", layer=0
3752
3752
  )
3753
3753
  txn_hash = w3.eth.send_transaction(txn)
3754
3754
  assert isinstance(txn_hash, HexBytes)
@@ -1,6 +1,7 @@
1
1
  import math
2
2
  from typing import (
3
3
  TYPE_CHECKING,
4
+ Dict,
4
5
  List,
5
6
  Literal,
6
7
  Optional,
@@ -75,14 +76,16 @@ VALID_TRANSACTION_PARAMS: List[TX_PARAM_LITERALS] = [
75
76
  TRANSACTION_DEFAULTS = {
76
77
  "value": 0,
77
78
  "data": b"",
78
- "gas": lambda w3, tx: w3.eth.estimate_gas(tx),
79
- "gasPrice": lambda w3, tx: w3.eth.generate_gas_price(tx),
79
+ "gas": lambda w3, tx, _defaults: w3.eth.estimate_gas(tx),
80
+ "gasPrice": lambda w3, tx, _defaults: w3.eth.generate_gas_price(tx),
81
+ "maxPriorityFeePerGas": lambda w3, _tx, _defaults: w3.eth.max_priority_fee,
80
82
  "maxFeePerGas": (
81
- lambda w3, tx: w3.eth.max_priority_fee
82
- + (2 * w3.eth.get_block("latest")["baseFeePerGas"])
83
+ lambda w3, tx, defaults: (
84
+ tx.get("maxPriorityFeePerGas", defaults.get("maxPriorityFeePerGas"))
85
+ + (2 * w3.eth.get_block("latest")["baseFeePerGas"])
86
+ )
83
87
  ),
84
- "maxPriorityFeePerGas": lambda w3, tx: w3.eth.max_priority_fee,
85
- "chainId": lambda w3, tx: w3.eth.chain_id,
88
+ "chainId": lambda w3, _tx, _defaults: w3.eth.chain_id,
86
89
  }
87
90
 
88
91
  if TYPE_CHECKING:
@@ -117,7 +120,7 @@ def fill_transaction_defaults(w3: "Web3", transaction: TxParams) -> TxParams:
117
120
  or any_in_dict(DYNAMIC_FEE_TXN_PARAMS, transaction)
118
121
  )
119
122
 
120
- defaults = {}
123
+ defaults: Dict[str, Union[bytes, int]] = {}
121
124
  for key, default_getter in TRANSACTION_DEFAULTS.items():
122
125
  if key not in transaction:
123
126
  if (
@@ -135,7 +138,7 @@ def fill_transaction_defaults(w3: "Web3", transaction: TxParams) -> TxParams:
135
138
  raise Web3ValueError(
136
139
  f"You must specify a '{key}' value in the transaction"
137
140
  )
138
- default_val = default_getter(w3, transaction)
141
+ default_val = default_getter(w3, transaction, defaults)
139
142
  else:
140
143
  default_val = default_getter
141
144
 
@@ -146,9 +149,7 @@ def fill_transaction_defaults(w3: "Web3", transaction: TxParams) -> TxParams:
146
149
  def get_block_gas_limit(
147
150
  w3: "Web3", block_identifier: Optional[BlockIdentifier] = None
148
151
  ) -> int:
149
- if block_identifier is None:
150
- block_identifier = w3.eth.block_number
151
- block = w3.eth.get_block(block_identifier)
152
+ block = w3.eth.get_block(block_identifier or "latest")
152
153
  return block["gasLimit"]
153
154
 
154
155
 
@@ -163,8 +164,8 @@ def get_buffered_gas_estimate(
163
164
 
164
165
  if gas_estimate > gas_limit:
165
166
  raise Web3ValueError(
166
- "Contract does not appear to be deployable within the "
167
- f"current network gas limits. Estimated: {gas_estimate}. "
167
+ "Gas estimate for transaction is higher than current network gas limits. "
168
+ f"Transaction could not be sent. Estimated: {gas_estimate}. "
168
169
  f"Current gas limit: {gas_limit}"
169
170
  )
170
171
 
@@ -5,6 +5,9 @@ from typing import (
5
5
  Optional,
6
6
  )
7
7
 
8
+ from aiohttp import (
9
+ ClientTimeout,
10
+ )
8
11
  from eth_typing import (
9
12
  URI,
10
13
  HexStr,
@@ -72,7 +75,7 @@ class AsyncBeacon:
72
75
  ) -> Dict[str, Any]:
73
76
  uri = URI(self.base_url + endpoint_uri)
74
77
  return await self._request_session_manager.async_json_make_get_request(
75
- uri, params=params, timeout=self.request_timeout
78
+ uri, params=params, timeout=ClientTimeout(self.request_timeout)
76
79
  )
77
80
 
78
81
  # [ BEACON endpoints ]
@@ -21,7 +21,6 @@ from eth_abi.exceptions import (
21
21
  )
22
22
  from eth_typing import (
23
23
  ABI,
24
- ABIComponentIndexed,
25
24
  ABIElement,
26
25
  ABIEvent,
27
26
  ABIFunction,
@@ -295,7 +294,7 @@ class BaseContractEvent:
295
294
  # if no non-indexed args in argument filters, since indexed args are
296
295
  # filtered pre-call to ``eth_getLogs`` by building specific ``topics``.
297
296
  not any(
298
- not cast(ABIComponentIndexed, arg)["indexed"]
297
+ not arg["indexed"]
299
298
  for arg in event_abi["inputs"]
300
299
  if arg["name"] in argument_filters
301
300
  )
web3/exceptions.py CHANGED
@@ -334,7 +334,20 @@ class TaskNotRunning(Web3Exception):
334
334
  super().__init__(message)
335
335
 
336
336
 
337
- class PersistentConnectionClosedOK(Web3Exception):
337
+ class PersistentConnectionError(Web3Exception):
338
+ """
339
+ Raised when a persistent connection encounters an error.
340
+ """
341
+
342
+
343
+ class ReadBufferLimitReached(PersistentConnectionError, Web3ValueError):
344
+ """
345
+ Raised when the read buffer limit is reached while reading data from a persistent
346
+ connection.
347
+ """
348
+
349
+
350
+ class PersistentConnectionClosedOK(PersistentConnectionError):
338
351
  """
339
352
  Raised when a persistent connection is closed gracefully by the server.
340
353
  """
web3/main.py CHANGED
@@ -87,6 +87,7 @@ from web3.eth import (
87
87
  )
88
88
  from web3.exceptions import (
89
89
  Web3TypeError,
90
+ Web3ValidationError,
90
91
  Web3ValueError,
91
92
  )
92
93
  from web3.geth import (
@@ -350,6 +351,24 @@ class BaseWeb3:
350
351
  return self.manager._batch_requests()
351
352
 
352
353
 
354
+ def _validate_provider(
355
+ w3: Union["Web3", "AsyncWeb3"],
356
+ provider: Optional[Union[BaseProvider, AsyncBaseProvider]],
357
+ ) -> None:
358
+ if provider is not None:
359
+ if isinstance(w3, AsyncWeb3) and not isinstance(provider, AsyncBaseProvider):
360
+ raise Web3ValidationError(
361
+ "Provider must be an instance of `AsyncBaseProvider` for "
362
+ f"`AsyncWeb3`, got {type(provider)}."
363
+ )
364
+
365
+ if isinstance(w3, Web3) and not isinstance(provider, BaseProvider):
366
+ raise Web3ValidationError(
367
+ "Provider must be an instance of `BaseProvider` for `Web3`, "
368
+ f"got {type(provider)}."
369
+ )
370
+
371
+
353
372
  class Web3(BaseWeb3):
354
373
  # mypy types
355
374
  eth: Eth
@@ -372,6 +391,8 @@ class Web3(BaseWeb3):
372
391
  ] = None,
373
392
  ens: Union[ENS, "Empty"] = empty,
374
393
  ) -> None:
394
+ _validate_provider(self, provider)
395
+
375
396
  self.manager = self.RequestManager(self, provider, middleware)
376
397
  self.codec = ABICodec(build_strict_registry())
377
398
 
@@ -440,6 +461,8 @@ class AsyncWeb3(BaseWeb3):
440
461
  ] = None,
441
462
  ens: Union[AsyncENS, "Empty"] = empty,
442
463
  ) -> None:
464
+ _validate_provider(self, provider)
465
+
443
466
  self.manager = self.RequestManager(self, provider, middleware)
444
467
  self.codec = ABICodec(build_strict_registry())
445
468
 
@@ -1,5 +1,6 @@
1
1
  import asyncio
2
2
  import itertools
3
+ import logging
3
4
  from typing import (
4
5
  TYPE_CHECKING,
5
6
  Any,
@@ -41,6 +42,7 @@ from web3.types import (
41
42
  RPCResponse,
42
43
  )
43
44
  from web3.utils import (
45
+ RequestCacheValidationThreshold,
44
46
  SimpleCache,
45
47
  )
46
48
 
@@ -59,6 +61,10 @@ if TYPE_CHECKING:
59
61
 
60
62
 
61
63
  class AsyncBaseProvider:
64
+ # Set generic logger for the provider. Override in subclasses for more specificity.
65
+ logger: logging.Logger = logging.getLogger(
66
+ "web3.providers.async_base.AsyncBaseProvider"
67
+ )
62
68
  _request_func_cache: Tuple[
63
69
  Tuple[Middleware, ...], Callable[..., Coroutine[Any, Any, RPCResponse]]
64
70
  ] = (None, None)
@@ -81,10 +87,14 @@ class AsyncBaseProvider:
81
87
  self,
82
88
  cache_allowed_requests: bool = False,
83
89
  cacheable_requests: Set[RPCEndpoint] = None,
90
+ request_cache_validation_threshold: Optional[
91
+ RequestCacheValidationThreshold
92
+ ] = RequestCacheValidationThreshold.FINALIZED,
84
93
  ) -> None:
85
94
  self._request_cache = SimpleCache(1000)
86
95
  self.cache_allowed_requests = cache_allowed_requests
87
96
  self.cacheable_requests = cacheable_requests or CACHEABLE_REQUESTS
97
+ self.request_cache_validation_threshold = request_cache_validation_threshold
88
98
 
89
99
  async def request_func(
90
100
  self, async_w3: "AsyncWeb3", middleware_onion: MiddlewareOnion
@@ -159,6 +169,8 @@ class AsyncBaseProvider:
159
169
 
160
170
 
161
171
  class AsyncJSONBaseProvider(AsyncBaseProvider):
172
+ logger = logging.getLogger("web3.providers.async_base.AsyncJSONBaseProvider")
173
+
162
174
  def __init__(self, **kwargs: Any) -> None:
163
175
  self.request_counter = itertools.count()
164
176
  super().__init__(**kwargs)
web3/providers/base.py CHANGED
@@ -1,10 +1,12 @@
1
1
  import itertools
2
+ import logging
2
3
  import threading
3
4
  from typing import (
4
5
  TYPE_CHECKING,
5
6
  Any,
6
7
  Callable,
7
8
  List,
9
+ Optional,
8
10
  Set,
9
11
  Tuple,
10
12
  cast,
@@ -38,6 +40,7 @@ from web3.types import (
38
40
  RPCResponse,
39
41
  )
40
42
  from web3.utils import (
43
+ RequestCacheValidationThreshold,
41
44
  SimpleCache,
42
45
  )
43
46
 
@@ -46,6 +49,8 @@ if TYPE_CHECKING:
46
49
 
47
50
 
48
51
  class BaseProvider:
52
+ # Set generic logger for the provider. Override in subclasses for more specificity.
53
+ logger: logging.Logger = logging.getLogger("web3.providers.base.BaseProvider")
49
54
  # a tuple of (middleware, request_func)
50
55
  _request_func_cache: Tuple[Tuple[Middleware, ...], Callable[..., RPCResponse]] = (
51
56
  None,
@@ -65,10 +70,14 @@ class BaseProvider:
65
70
  self,
66
71
  cache_allowed_requests: bool = False,
67
72
  cacheable_requests: Set[RPCEndpoint] = None,
73
+ request_cache_validation_threshold: Optional[
74
+ RequestCacheValidationThreshold
75
+ ] = RequestCacheValidationThreshold.FINALIZED,
68
76
  ) -> None:
69
77
  self._request_cache = SimpleCache(1000)
70
78
  self.cache_allowed_requests = cache_allowed_requests
71
79
  self.cacheable_requests = cacheable_requests or CACHEABLE_REQUESTS
80
+ self.request_cache_validation_threshold = request_cache_validation_threshold
72
81
 
73
82
  def request_func(
74
83
  self, w3: "Web3", middleware_onion: MiddlewareOnion
@@ -104,6 +113,8 @@ class BaseProvider:
104
113
 
105
114
 
106
115
  class JSONBaseProvider(BaseProvider):
116
+ logger = logging.getLogger("web3.providers.base.JSONBaseProvider")
117
+
107
118
  _is_batching: bool = False
108
119
  _batch_request_func_cache: Tuple[
109
120
  Tuple[Middleware, ...], Callable[..., List[RPCResponse]]
@@ -1,9 +1,6 @@
1
1
  import asyncio
2
2
  import errno
3
3
  import json
4
- from json import (
5
- JSONDecodeError,
6
- )
7
4
  import logging
8
5
  from pathlib import (
9
6
  Path,
@@ -16,10 +13,6 @@ from typing import (
16
13
  Union,
17
14
  )
18
15
 
19
- from eth_utils import (
20
- to_text,
21
- )
22
-
23
16
  from web3.types import (
24
17
  RPCResponse,
25
18
  )
@@ -28,7 +21,9 @@ from . import (
28
21
  PersistentConnectionProvider,
29
22
  )
30
23
  from ...exceptions import (
24
+ PersistentConnectionClosedOK,
31
25
  ProviderConnectionError,
26
+ ReadBufferLimitReached,
32
27
  Web3TypeError,
33
28
  )
34
29
  from ..ipc import (
@@ -37,7 +32,7 @@ from ..ipc import (
37
32
 
38
33
 
39
34
  async def async_get_ipc_socket(
40
- ipc_path: str,
35
+ ipc_path: str, read_buffer_limit: int
41
36
  ) -> Tuple[asyncio.StreamReader, asyncio.StreamWriter]:
42
37
  if sys.platform == "win32":
43
38
  # On Windows named pipe is used. Simulate socket with it.
@@ -47,7 +42,7 @@ async def async_get_ipc_socket(
47
42
 
48
43
  return NamedPipe(ipc_path)
49
44
  else:
50
- return await asyncio.open_unix_connection(ipc_path)
45
+ return await asyncio.open_unix_connection(ipc_path, limit=read_buffer_limit)
51
46
 
52
47
 
53
48
  class AsyncIPCProvider(PersistentConnectionProvider):
@@ -56,11 +51,11 @@ class AsyncIPCProvider(PersistentConnectionProvider):
56
51
  _reader: Optional[asyncio.StreamReader] = None
57
52
  _writer: Optional[asyncio.StreamWriter] = None
58
53
  _decoder: json.JSONDecoder = json.JSONDecoder()
59
- _raw_message: str = ""
60
54
 
61
55
  def __init__(
62
56
  self,
63
57
  ipc_path: Optional[Union[str, Path]] = None,
58
+ read_buffer_limit: int = 20 * 1024 * 1024, # 20 MB
64
59
  # `PersistentConnectionProvider` kwargs can be passed through
65
60
  **kwargs: Any,
66
61
  ) -> None:
@@ -71,6 +66,7 @@ class AsyncIPCProvider(PersistentConnectionProvider):
71
66
  else:
72
67
  raise Web3TypeError("ipc_path must be of type string or pathlib.Path")
73
68
 
69
+ self.read_buffer_limit = read_buffer_limit
74
70
  super().__init__(**kwargs)
75
71
 
76
72
  def __str__(self) -> str:
@@ -101,18 +97,20 @@ class AsyncIPCProvider(PersistentConnectionProvider):
101
97
  )
102
98
 
103
99
  async def socket_recv(self) -> RPCResponse:
104
- while True:
105
- # yield to the event loop to allow other tasks to run
106
- await asyncio.sleep(0)
107
-
108
- try:
109
- response, pos = self._decoder.raw_decode(self._raw_message)
110
- self._raw_message = self._raw_message[pos:].lstrip()
111
- return response
112
- except JSONDecodeError:
113
- # read more data from the socket if the current raw message is
114
- # incomplete
115
- self._raw_message += to_text(await self._reader.read(4096)).lstrip()
100
+ try:
101
+ data = await self._reader.readline()
102
+ except ValueError as e:
103
+ if all(kw in str(e) for kw in ("limit", "chunk")):
104
+ raise ReadBufferLimitReached(
105
+ f"Read buffer limit of `{self.read_buffer_limit}` bytes was "
106
+ "reached. Consider increasing the ``read_buffer_limit`` on the "
107
+ "AsyncIPCProvider."
108
+ ) from e
109
+ raise
110
+
111
+ if not data:
112
+ raise PersistentConnectionClosedOK("Socket reader received end of stream.")
113
+ return self.decode_rpc_response(data)
116
114
 
117
115
  # -- private methods -- #
118
116
 
@@ -131,10 +129,14 @@ class AsyncIPCProvider(PersistentConnectionProvider):
131
129
  async def _reset_socket(self) -> None:
132
130
  self._writer.close()
133
131
  await self._writer.wait_closed()
134
- self._reader, self._writer = await async_get_ipc_socket(self.ipc_path)
132
+ self._reader, self._writer = await async_get_ipc_socket(
133
+ self.ipc_path, self.read_buffer_limit
134
+ )
135
135
 
136
136
  async def _provider_specific_connect(self) -> None:
137
- self._reader, self._writer = await async_get_ipc_socket(self.ipc_path)
137
+ self._reader, self._writer = await async_get_ipc_socket(
138
+ self.ipc_path, self.read_buffer_limit
139
+ )
138
140
 
139
141
  async def _provider_specific_disconnect(self) -> None:
140
142
  if self._writer and not self._writer.is_closing():
@@ -149,5 +151,3 @@ class AsyncIPCProvider(PersistentConnectionProvider):
149
151
 
150
152
  def _error_log_listener_task_exception(self, e: Exception) -> None:
151
153
  super()._error_log_listener_task_exception(e)
152
- # reset the raw message buffer on exception when error logging
153
- self._raw_message = ""
web3/utils/__init__.py CHANGED
@@ -36,6 +36,7 @@ from .async_exception_handling import (
36
36
  async_handle_offchain_lookup,
37
37
  )
38
38
  from .caching import (
39
+ RequestCacheValidationThreshold,
39
40
  SimpleCache,
40
41
  )
41
42
  from .exception_handling import (
@@ -67,6 +68,7 @@ __all__ = [
67
68
  "log_topic_to_bytes",
68
69
  "get_create_address",
69
70
  "async_handle_offchain_lookup",
71
+ "RequestCacheValidationThreshold",
70
72
  "SimpleCache",
71
73
  "handle_offchain_lookup",
72
74
  ]
web3/utils/caching.py CHANGED
@@ -2,6 +2,9 @@ import asyncio
2
2
  from collections import (
3
3
  OrderedDict,
4
4
  )
5
+ from enum import (
6
+ Enum,
7
+ )
5
8
  import time
6
9
  from typing import (
7
10
  Any,
@@ -12,6 +15,11 @@ from typing import (
12
15
  )
13
16
 
14
17
 
18
+ class RequestCacheValidationThreshold(Enum):
19
+ FINALIZED = "finalized"
20
+ SAFE = "safe"
21
+
22
+
15
23
  class SimpleCache:
16
24
  def __init__(self, size: int = 100):
17
25
  self._size = size
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: web3
3
- Version: 7.2.0
3
+ Version: 7.3.1
4
4
  Summary: web3: A Python library for interacting with Ethereum
5
5
  Home-page: https://github.com/ethereum/web3.py
6
6
  Author: The Ethereum Foundation
@@ -37,15 +37,8 @@ Requires-Dist: pywin32 >=223 ; platform_system == "Windows"
37
37
  Provides-Extra: dev
38
38
  Requires-Dist: build >=0.9.0 ; extra == 'dev'
39
39
  Requires-Dist: bumpversion >=0.5.3 ; extra == 'dev'
40
- Requires-Dist: flaky >=3.7.0 ; extra == 'dev'
41
- Requires-Dist: hypothesis >=3.31.2 ; extra == 'dev'
42
40
  Requires-Dist: ipython ; extra == 'dev'
43
- Requires-Dist: mypy ==1.10.0 ; extra == 'dev'
44
- Requires-Dist: pre-commit >=3.4.0 ; extra == 'dev'
45
- Requires-Dist: pytest-asyncio <0.23,>=0.21.2 ; extra == 'dev'
46
- Requires-Dist: pytest-mock >=1.10 ; extra == 'dev'
47
41
  Requires-Dist: setuptools >=38.6.0 ; extra == 'dev'
48
- Requires-Dist: tox >=4.0.0 ; extra == 'dev'
49
42
  Requires-Dist: tqdm >4.32 ; extra == 'dev'
50
43
  Requires-Dist: twine >=1.13 ; extra == 'dev'
51
44
  Requires-Dist: wheel ; extra == 'dev'
@@ -53,23 +46,37 @@ Requires-Dist: sphinx >=6.0.0 ; extra == 'dev'
53
46
  Requires-Dist: sphinx-autobuild >=2021.3.14 ; extra == 'dev'
54
47
  Requires-Dist: sphinx-rtd-theme >=1.0.0 ; extra == 'dev'
55
48
  Requires-Dist: towncrier <22,>=21 ; extra == 'dev'
56
- Requires-Dist: eth-tester[py-evm] <0.13.0b1,>=0.11.0b1 ; extra == 'dev'
57
- Requires-Dist: py-geth >=5.0.0 ; extra == 'dev'
58
49
  Requires-Dist: pytest-asyncio <0.23,>=0.18.1 ; extra == 'dev'
50
+ Requires-Dist: pytest-mock >=1.10 ; extra == 'dev'
59
51
  Requires-Dist: pytest-xdist >=2.4.0 ; extra == 'dev'
60
52
  Requires-Dist: pytest >=7.0.0 ; extra == 'dev'
53
+ Requires-Dist: flaky >=3.7.0 ; extra == 'dev'
54
+ Requires-Dist: hypothesis >=3.31.2 ; extra == 'dev'
55
+ Requires-Dist: tox >=4.0.0 ; extra == 'dev'
56
+ Requires-Dist: mypy ==1.10.0 ; extra == 'dev'
57
+ Requires-Dist: pre-commit >=3.4.0 ; extra == 'dev'
58
+ Requires-Dist: eth-tester[py-evm] <0.13.0b1,>=0.11.0b1 ; extra == 'dev'
59
+ Requires-Dist: py-geth >=5.0.0 ; extra == 'dev'
61
60
  Provides-Extra: docs
62
61
  Requires-Dist: sphinx >=6.0.0 ; extra == 'docs'
63
62
  Requires-Dist: sphinx-autobuild >=2021.3.14 ; extra == 'docs'
64
63
  Requires-Dist: sphinx-rtd-theme >=1.0.0 ; extra == 'docs'
65
64
  Requires-Dist: towncrier <22,>=21 ; extra == 'docs'
66
65
  Provides-Extra: test
67
- Requires-Dist: eth-tester[py-evm] <0.13.0b1,>=0.11.0b1 ; extra == 'test'
68
- Requires-Dist: py-geth >=5.0.0 ; extra == 'test'
69
66
  Requires-Dist: pytest-asyncio <0.23,>=0.18.1 ; extra == 'test'
70
67
  Requires-Dist: pytest-mock >=1.10 ; extra == 'test'
71
68
  Requires-Dist: pytest-xdist >=2.4.0 ; extra == 'test'
72
69
  Requires-Dist: pytest >=7.0.0 ; extra == 'test'
70
+ Requires-Dist: flaky >=3.7.0 ; extra == 'test'
71
+ Requires-Dist: hypothesis >=3.31.2 ; extra == 'test'
72
+ Requires-Dist: tox >=4.0.0 ; extra == 'test'
73
+ Requires-Dist: mypy ==1.10.0 ; extra == 'test'
74
+ Requires-Dist: pre-commit >=3.4.0 ; extra == 'test'
75
+ Requires-Dist: eth-tester[py-evm] <0.13.0b1,>=0.11.0b1 ; extra == 'test'
76
+ Requires-Dist: py-geth >=5.0.0 ; extra == 'test'
77
+ Provides-Extra: tester
78
+ Requires-Dist: eth-tester[py-evm] <0.13.0b1,>=0.11.0b1 ; extra == 'tester'
79
+ Requires-Dist: py-geth >=5.0.0 ; extra == 'tester'
73
80
 
74
81
  # web3.py
75
82