web3 7.0.0b9__tar.gz → 7.1.0__tar.gz
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.
- {web3-7.0.0b9/web3.egg-info → web3-7.1.0}/PKG-INFO +6 -8
- {web3-7.0.0b9 → web3-7.1.0}/setup.py +9 -8
- web3-7.1.0/tests/.DS_Store +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/beacon/test_async_beacon.py +13 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/beacon/test_beacon.py +12 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_build_transaction.py +29 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_call_interface.py +10 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_estimate_gas.py +31 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_transact_interface.py +30 -0
- web3-7.1.0/tests/core/middleware/test_middleware.py +81 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/test_library_files.py +1 -3
- web3-7.1.0/tests/integration/.DS_Store +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/generate_fixtures/go_ethereum.py +29 -3
- {web3-7.0.0b9 → web3-7.1.0}/web3/beacon/api_endpoints.py +3 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/beacon/async_beacon.py +18 -2
- {web3-7.0.0b9 → web3-7.1.0}/web3/beacon/beacon.py +18 -2
- {web3-7.0.0b9 → web3-7.1.0}/web3/contract/async_contract.py +8 -8
- {web3-7.0.0b9 → web3-7.1.0}/web3/contract/contract.py +10 -8
- {web3-7.0.0b9 → web3-7.1.0}/web3/datastructures.py +21 -11
- {web3-7.0.0b9 → web3-7.1.0}/web3/middleware/base.py +8 -0
- web3-7.1.0/web3/scripts/install_pre_releases.py +33 -0
- web3-7.1.0/web3/scripts/parse_pygeth_version.py +16 -0
- web3-7.1.0/web3/tools/benchmark/__init__.py +0 -0
- web3-7.1.0/web3/tools/benchmark/main.py +190 -0
- web3-7.1.0/web3/tools/benchmark/node.py +120 -0
- web3-7.1.0/web3/tools/benchmark/reporting.py +39 -0
- web3-7.1.0/web3/tools/benchmark/utils.py +69 -0
- {web3-7.0.0b9 → web3-7.1.0/web3.egg-info}/PKG-INFO +6 -8
- {web3-7.0.0b9 → web3-7.1.0}/web3.egg-info/SOURCES.txt +10 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3.egg-info/requires.txt +5 -7
- {web3-7.0.0b9 → web3-7.1.0}/LICENSE +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/MANIFEST.in +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/README.md +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/ens/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/ens/_normalization.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/ens/abis.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/ens/async_ens.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/ens/auto.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/ens/base_ens.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/ens/constants.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/ens/contract_data.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/ens/ens.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/ens/exceptions.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/ens/specs/nf.json +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/ens/specs/normalization_spec.json +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/ens/utils.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/pyproject.toml +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/setup.cfg +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/conftest.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/admin-module/test_admin_addPeer.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/admin-module/test_admin_nodeInfo.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/admin-module/test_admin_peers.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/block-utils/test_select_method_for_block_identifier.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/caching-utils/test_generate_cache_key.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/caching-utils/test_request_caching.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/conftest.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/conftest.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_ambiguous_functions.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_attributes.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_caller_interface.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_class_construction.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_constructor.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_constructor_encoding.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_deployment.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_events_build_filter.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_example.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_init.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_method_abi_decoding.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_method_abi_encoding.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_method_to_argument_matching.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_panic_errors.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_contract_util_functions.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_extracting_event_data.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_extracting_event_data_old.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/test_offchain_lookup.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/contracts/utils.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/datastructures/test_datastructures.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/empty-object/test_empty_object_is_falsy.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/eth-module/conftest.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/eth-module/test_accounts.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/eth-module/test_block_api.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/eth-module/test_default_account_api.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/eth-module/test_eth_contract.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/eth-module/test_eth_fee_history.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/eth-module/test_eth_filter.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/eth-module/test_eth_properties.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/eth-module/test_gas_pricing.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/eth-module/test_poa.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/eth-module/test_transactions.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/eth-tester-api/test_withdrawals.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/exceptions/test_exceptions.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/filtering/conftest.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/filtering/test_basic_filter_tests.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/filtering/test_contract_create_filter_topic_merging.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/filtering/test_contract_data_filters.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/filtering/test_contract_get_logs.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/filtering/test_contract_on_event_filtering.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/filtering/test_contract_past_event_filtering.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/filtering/test_contract_topic_filters.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/filtering/test_existing_filter_instance.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/filtering/test_filter_against_latest_blocks.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/filtering/test_filter_against_pending_transactions.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/filtering/test_filter_against_transaction_logs.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/filtering/test_filters_against_many_blocks.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/filtering/test_utils_functions.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/filtering/utils.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/gas-strategies/test_rpc_gas_pricing_strategies.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/gas-strategies/test_time_based_gas_price_strategy.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/manager/conftest.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/manager/test_default_middlewares.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/manager/test_middleware_can_be_stateful.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/manager/test_middleware_onion_api.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/manager/test_provider_property.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/manager/test_provider_request_wrapping.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/manager/test_response_formatters.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/method-class/test_method.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/method-class/test_result_formatters.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/middleware/test_attrdict_middleware.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/middleware/test_eth_tester_middleware.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/middleware/test_filter_middleware.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/middleware/test_formatting_middleware.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/middleware/test_gas_price_strategy.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/middleware/test_name_to_address_middleware.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/middleware/test_stalecheck.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/middleware/test_transaction_signing.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/module-class/test_module.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/providers/test_async_http_provider.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/providers/test_async_ipc_provider.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/providers/test_async_tester_provider.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/providers/test_auto_provider.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/providers/test_base_provider.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/providers/test_http_provider.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/providers/test_http_request_retry.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/providers/test_ipc_provider.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/providers/test_legacy_websocket_provider.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/providers/test_tester_provider.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/providers/test_websocket_provider.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/testing-module/test_testing_mine.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/testing-module/test_testing_snapshot_and_revert.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/testing-module/test_testing_timeTravel.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/conftest.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_abi.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_abi_filtering_by_argument_name.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_abi_is_encodable.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_abi_named_tree.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_address.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_async_transaction.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_attach_modules.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_attributedict.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_caching_utils.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_construct_event_data_set.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_construct_event_filter_params.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_construct_event_topics.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_datatypes.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_decorators.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_encoding.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_event_filter_builder.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_event_interface.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_fee_utils.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_formatters.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_http_session_manager.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_is_predefined_block_number.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_is_probably_enum.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_is_recognized_type.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_math.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_method_formatters.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_prepare_transaction_replacement.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_select_filter_method.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_threads.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_valid_transaction_params.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/utilities/test_validation.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/web3-module/test_api.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/web3-module/test_attach_modules.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/web3-module/test_client_version.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/web3-module/test_conversions.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/web3-module/test_import_and_version.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/web3-module/test_keccak.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/web3-module/test_providers.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/web3-module/test_strict_bytes_type_checking.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/core/web3-module/test_web3_inheritance.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/ens/conftest.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/ens/normalization/normalization_tests.json +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/ens/normalization/test_normalize_name_ensip15.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/ens/test_ens.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/ens/test_get_registry.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/ens/test_get_text.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/ens/test_nameprep.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/ens/test_offchain_resolution.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/ens/test_setup_address.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/ens/test_setup_name.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/ens/test_utils.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/ens/test_wildcard_resolution.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/README.md +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/common.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/conftest.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/generate_fixtures/common.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/geth-1.14.5-fixture.zip +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/go_ethereum/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/go_ethereum/common.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/go_ethereum/conftest.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/go_ethereum/test_goethereum_http.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/go_ethereum/test_goethereum_ipc.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/go_ethereum/test_goethereum_legacy_ws.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/go_ethereum/test_goethereum_ws/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/go_ethereum/test_goethereum_ws/conftest.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/go_ethereum/test_goethereum_ws/test_async_await_w3.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/go_ethereum/test_goethereum_ws/test_async_ctx_manager_w3.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/go_ethereum/test_goethereum_ws/test_async_iterator_w3.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/go_ethereum/utils.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/integration/test_ethereum_tester.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/tests/utils.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/abi.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/abi_element_identifiers.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/async_caching.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/async_transactions.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/batching.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/blocks.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/caching.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/compat/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/compile_contracts.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/_custom_contract_data.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/arrays_contract.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/bytes_contracts.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/constructor_contracts.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/contract_caller_tester.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/emitter_contract.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/event_contracts.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/extended_resolver.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/fallback_function_contract.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/function_name_tester_contract.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/math_contract.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/offchain_lookup.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/offchain_resolver.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/panic_errors_contract.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/payable_tester.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/receive_function_contracts.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/reflector_contracts.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/revert_contract.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/simple_resolver.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/storage_contract.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/string_contract.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contract_sources/contract_data/tuple_contracts.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/contracts.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/datatypes.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/decorators.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/empty.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/encoding.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/ens.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/error_formatters_utils.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/events.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/fee_utils.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/filters.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/formatters.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/http.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/http_session_manager.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/hypothesis.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/math.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/method_formatters.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/module.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/module_testing/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/module_testing/eth_module.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/module_testing/go_ethereum_admin_module.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/module_testing/go_ethereum_txpool_module.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/module_testing/module_testing_utils.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/module_testing/net_module.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/module_testing/persistent_connection_provider.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/module_testing/utils.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/module_testing/web3_module.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/normalizers.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/rpc_abi.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/threads.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/transactions.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/type_conversion.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/utility_methods.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/validation.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/_utils/windows.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/auto/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/auto/gethdev.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/beacon/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/constants.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/contract/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/contract/base_contract.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/contract/utils.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/eth/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/eth/async_eth.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/eth/base_eth.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/eth/eth.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/exceptions.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/gas_strategies/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/gas_strategies/rpc.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/gas_strategies/time_based.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/geth.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/logs.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/main.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/manager.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/method.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/middleware/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/middleware/attrdict.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/middleware/buffered_gas_estimate.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/middleware/filter.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/middleware/formatting.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/middleware/gas_price_strategy.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/middleware/names.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/middleware/proof_of_authority.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/middleware/pythonic.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/middleware/signing.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/middleware/stalecheck.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/middleware/validation.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/module.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/net.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/async_base.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/auto.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/base.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/eth_tester/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/eth_tester/defaults.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/eth_tester/main.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/eth_tester/middleware.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/ipc.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/legacy_websocket.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/persistent/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/persistent/async_ipc.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/persistent/persistent.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/persistent/persistent_connection.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/persistent/request_processor.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/persistent/utils.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/persistent/websocket.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/rpc/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/rpc/async_rpc.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/rpc/rpc.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/providers/rpc/utils.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/py.typed +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/scripts/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/scripts/release/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/scripts/release/test_package.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/testing.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/tracing.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/types.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/utils/__init__.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/utils/abi.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/utils/address.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/utils/async_exception_handling.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/utils/caching.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3/utils/exception_handling.py +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3.egg-info/dependency_links.txt +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3.egg-info/not-zip-safe +0 -0
- {web3-7.0.0b9 → web3-7.1.0}/web3.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: web3
|
|
3
|
-
Version: 7.0
|
|
3
|
+
Version: 7.1.0
|
|
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
|
|
@@ -20,13 +20,13 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
20
20
|
Requires-Python: >=3.8, <4
|
|
21
21
|
Description-Content-Type: text/markdown
|
|
22
22
|
License-File: LICENSE
|
|
23
|
-
Requires-Dist: aiohttp>=3.7.4.post0
|
|
24
23
|
Requires-Dist: eth-abi>=5.0.1
|
|
25
24
|
Requires-Dist: eth-account>=0.13.1
|
|
26
25
|
Requires-Dist: eth-hash[pycryptodome]>=0.5.1
|
|
27
|
-
Requires-Dist: eth-typing>=5.0.
|
|
28
|
-
Requires-Dist: eth-utils>=5.0.
|
|
26
|
+
Requires-Dist: eth-typing>=5.0.0
|
|
27
|
+
Requires-Dist: eth-utils>=5.0.0
|
|
29
28
|
Requires-Dist: hexbytes>=1.2.0
|
|
29
|
+
Requires-Dist: aiohttp>=3.7.4.post0
|
|
30
30
|
Requires-Dist: pydantic>=2.4.0
|
|
31
31
|
Requires-Dist: pywin32>=223; platform_system == "Windows"
|
|
32
32
|
Requires-Dist: requests>=2.23.0
|
|
@@ -53,9 +53,8 @@ Requires-Dist: sphinx>=6.0.0; extra == "dev"
|
|
|
53
53
|
Requires-Dist: sphinx-autobuild>=2021.3.14; extra == "dev"
|
|
54
54
|
Requires-Dist: sphinx_rtd_theme>=1.0.0; extra == "dev"
|
|
55
55
|
Requires-Dist: towncrier<22,>=21; extra == "dev"
|
|
56
|
-
Requires-Dist: eth-account>=0.13.0; extra == "dev"
|
|
57
56
|
Requires-Dist: eth-tester[py-evm]<0.13.0b1,>=0.11.0b1; extra == "dev"
|
|
58
|
-
Requires-Dist: py-geth>=5.0.
|
|
57
|
+
Requires-Dist: py-geth>=5.0.0; extra == "dev"
|
|
59
58
|
Requires-Dist: pytest-asyncio<0.23,>=0.18.1; extra == "dev"
|
|
60
59
|
Requires-Dist: pytest-mock>=1.10; extra == "dev"
|
|
61
60
|
Requires-Dist: pytest-xdist>=2.4.0; extra == "dev"
|
|
@@ -65,10 +64,9 @@ Requires-Dist: sphinx>=6.0.0; extra == "docs"
|
|
|
65
64
|
Requires-Dist: sphinx-autobuild>=2021.3.14; extra == "docs"
|
|
66
65
|
Requires-Dist: sphinx_rtd_theme>=1.0.0; extra == "docs"
|
|
67
66
|
Requires-Dist: towncrier<22,>=21; extra == "docs"
|
|
68
|
-
Requires-Dist: eth-account>=0.13.0; extra == "docs"
|
|
69
67
|
Provides-Extra: test
|
|
70
68
|
Requires-Dist: eth-tester[py-evm]<0.13.0b1,>=0.11.0b1; extra == "test"
|
|
71
|
-
Requires-Dist: py-geth>=5.0.
|
|
69
|
+
Requires-Dist: py-geth>=5.0.0; extra == "test"
|
|
72
70
|
Requires-Dist: pytest-asyncio<0.23,>=0.18.1; extra == "test"
|
|
73
71
|
Requires-Dist: pytest-mock>=1.10; extra == "test"
|
|
74
72
|
Requires-Dist: pytest-xdist>=2.4.0; extra == "test"
|
|
@@ -26,13 +26,12 @@ extras_require = {
|
|
|
26
26
|
"sphinx-autobuild>=2021.3.14",
|
|
27
27
|
"sphinx_rtd_theme>=1.0.0",
|
|
28
28
|
"towncrier>=21,<22",
|
|
29
|
-
# web3 will work but emit warnings with eth-account>=0.12.2,
|
|
30
|
-
# but doctests fail between 0.12.2 and 0.13.0
|
|
31
|
-
"eth-account>=0.13.0",
|
|
32
29
|
],
|
|
33
30
|
"test": [
|
|
31
|
+
# Note: ethereum-maintained libraries in this list should be added to the
|
|
32
|
+
# `install_pre_releases.py` script.
|
|
34
33
|
"eth-tester[py-evm]>=0.11.0b1,<0.13.0b1",
|
|
35
|
-
"py-geth>=5.0.
|
|
34
|
+
"py-geth>=5.0.0",
|
|
36
35
|
"pytest-asyncio>=0.18.1,<0.23",
|
|
37
36
|
"pytest-mock>=1.10",
|
|
38
37
|
"pytest-xdist>=2.4.0",
|
|
@@ -52,7 +51,7 @@ with open("./README.md") as readme:
|
|
|
52
51
|
setup(
|
|
53
52
|
name="web3",
|
|
54
53
|
# *IMPORTANT*: Don't manually change the version here. Use `make bump`, as described in readme
|
|
55
|
-
version="7.
|
|
54
|
+
version="7.1.0",
|
|
56
55
|
description="""web3: A Python library for interacting with Ethereum""",
|
|
57
56
|
long_description=long_description,
|
|
58
57
|
long_description_content_type="text/markdown",
|
|
@@ -61,13 +60,15 @@ setup(
|
|
|
61
60
|
url="https://github.com/ethereum/web3.py",
|
|
62
61
|
include_package_data=True,
|
|
63
62
|
install_requires=[
|
|
64
|
-
|
|
63
|
+
# Note: ethereum-maintained libraries in this list should be added to the
|
|
64
|
+
# `install_pre_releases.py` script.
|
|
65
65
|
"eth-abi>=5.0.1",
|
|
66
66
|
"eth-account>=0.13.1",
|
|
67
67
|
"eth-hash[pycryptodome]>=0.5.1",
|
|
68
|
-
"eth-typing>=5.0.
|
|
69
|
-
"eth-utils>=5.0.
|
|
68
|
+
"eth-typing>=5.0.0",
|
|
69
|
+
"eth-utils>=5.0.0",
|
|
70
70
|
"hexbytes>=1.2.0",
|
|
71
|
+
"aiohttp>=3.7.4.post0",
|
|
71
72
|
"pydantic>=2.4.0",
|
|
72
73
|
"pywin32>=223;platform_system=='Windows'",
|
|
73
74
|
"requests>=2.23.0",
|
|
Binary file
|
|
@@ -267,3 +267,16 @@ async def test_async_cl_node_get_version(async_beacon):
|
|
|
267
267
|
async def test_async_cl_node_get_syncing(async_beacon):
|
|
268
268
|
response = await async_beacon.get_syncing()
|
|
269
269
|
_assert_valid_response(response)
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
# Blob endpoint tests
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
@pytest.mark.asyncio
|
|
276
|
+
async def test_async_cl_node_get_blob_sidecars(async_beacon):
|
|
277
|
+
response = await async_beacon.get_blob_sidecars("head")
|
|
278
|
+
_assert_valid_response(response)
|
|
279
|
+
|
|
280
|
+
# test with indices
|
|
281
|
+
with_indices = await async_beacon.get_blob_sidecars("head", [0, 1])
|
|
282
|
+
_assert_valid_response(with_indices)
|
|
@@ -223,3 +223,15 @@ def test_cl_node_get_version(beacon):
|
|
|
223
223
|
def test_cl_node_get_syncing(beacon):
|
|
224
224
|
response = beacon.get_syncing()
|
|
225
225
|
_assert_valid_response(response)
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
# Blob endpoint tests
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
def test_cl_node_get_blob_sidecars(beacon):
|
|
232
|
+
response = beacon.get_blob_sidecars("head")
|
|
233
|
+
_assert_valid_response(response)
|
|
234
|
+
|
|
235
|
+
# test with indices
|
|
236
|
+
with_indices = beacon.get_blob_sidecars("head", [0, 1])
|
|
237
|
+
_assert_valid_response(with_indices)
|
|
@@ -53,6 +53,20 @@ def test_build_transaction_with_contract_no_arguments(
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
|
|
56
|
+
def test_build_transaction_with_contract_no_arguments_no_parens(
|
|
57
|
+
w3, math_contract, build_transaction
|
|
58
|
+
):
|
|
59
|
+
txn = math_contract.functions.incrementCounter.build_transaction()
|
|
60
|
+
assert dissoc(txn, "gas") == {
|
|
61
|
+
"to": math_contract.address,
|
|
62
|
+
"data": "0x5b34b966",
|
|
63
|
+
"value": 0,
|
|
64
|
+
"maxFeePerGas": 2750000000,
|
|
65
|
+
"maxPriorityFeePerGas": 10**9,
|
|
66
|
+
"chainId": 131277322940537,
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
56
70
|
def test_build_transaction_with_contract_fallback_function(
|
|
57
71
|
w3, fallback_function_contract
|
|
58
72
|
):
|
|
@@ -309,6 +323,21 @@ async def test_async_build_transaction_with_contract_no_arguments(
|
|
|
309
323
|
}
|
|
310
324
|
|
|
311
325
|
|
|
326
|
+
@pytest.mark.asyncio
|
|
327
|
+
async def test_async_build_transaction_with_contract_no_arguments_no_parens(
|
|
328
|
+
async_w3, async_math_contract, async_build_transaction
|
|
329
|
+
):
|
|
330
|
+
txn = await async_math_contract.functions.incrementCounter.build_transaction()
|
|
331
|
+
assert dissoc(txn, "gas") == {
|
|
332
|
+
"to": async_math_contract.address,
|
|
333
|
+
"data": "0x5b34b966",
|
|
334
|
+
"value": 0,
|
|
335
|
+
"maxFeePerGas": 2750000000,
|
|
336
|
+
"maxPriorityFeePerGas": 10**9,
|
|
337
|
+
"chainId": 131277322940537,
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
|
|
312
341
|
@pytest.mark.asyncio
|
|
313
342
|
async def test_async_build_transaction_with_contract_fallback_function(
|
|
314
343
|
async_w3, async_fallback_function_contract
|
|
@@ -145,6 +145,10 @@ def test_call_with_no_arguments(math_contract, call):
|
|
|
145
145
|
assert result == 13
|
|
146
146
|
|
|
147
147
|
|
|
148
|
+
def test_call_no_arguments_no_parens(math_contract):
|
|
149
|
+
assert math_contract.functions.return13.call() == 13
|
|
150
|
+
|
|
151
|
+
|
|
148
152
|
def test_call_with_one_argument(math_contract, call):
|
|
149
153
|
result = call(contract=math_contract, contract_function="multiply7", func_args=[3])
|
|
150
154
|
assert result == 21
|
|
@@ -2287,6 +2291,12 @@ async def test_async_call_with_no_arguments(async_math_contract, call):
|
|
|
2287
2291
|
assert result == 13
|
|
2288
2292
|
|
|
2289
2293
|
|
|
2294
|
+
@pytest.mark.asyncio
|
|
2295
|
+
async def test_async_call_with_no_arguments_no_parens(async_math_contract, call):
|
|
2296
|
+
result = await async_math_contract.functions.return13.call()
|
|
2297
|
+
assert result == 13
|
|
2298
|
+
|
|
2299
|
+
|
|
2290
2300
|
@pytest.mark.asyncio
|
|
2291
2301
|
async def test_async_call_with_one_argument(async_math_contract, call):
|
|
2292
2302
|
result = await async_math_contract.functions.multiply7(3).call()
|
|
@@ -18,6 +18,19 @@ def test_contract_estimate_gas(w3, math_contract, estimate_gas, transact):
|
|
|
18
18
|
assert abs(gas_estimate - gas_used) < 21000
|
|
19
19
|
|
|
20
20
|
|
|
21
|
+
def test_estimate_gas_can_be_called_without_parens(
|
|
22
|
+
w3, math_contract, estimate_gas, transact
|
|
23
|
+
):
|
|
24
|
+
gas_estimate = math_contract.functions.incrementCounter.estimate_gas()
|
|
25
|
+
|
|
26
|
+
txn_hash = transact(contract=math_contract, contract_function="incrementCounter")
|
|
27
|
+
|
|
28
|
+
txn_receipt = w3.eth.wait_for_transaction_receipt(txn_hash)
|
|
29
|
+
gas_used = txn_receipt.get("gasUsed")
|
|
30
|
+
|
|
31
|
+
assert abs(gas_estimate - gas_used) < 21000
|
|
32
|
+
|
|
33
|
+
|
|
21
34
|
def test_contract_fallback_estimate_gas(w3, fallback_function_contract):
|
|
22
35
|
gas_estimate = fallback_function_contract.fallback.estimate_gas()
|
|
23
36
|
|
|
@@ -197,6 +210,24 @@ async def test_async_estimate_gas_accepts_latest_block(
|
|
|
197
210
|
assert abs(gas_estimate - gas_used) < 21000
|
|
198
211
|
|
|
199
212
|
|
|
213
|
+
@pytest.mark.asyncio
|
|
214
|
+
async def test_async_estimate_gas_can_be_called_without_parens(
|
|
215
|
+
async_w3, async_math_contract, async_transact
|
|
216
|
+
):
|
|
217
|
+
gas_estimate = await async_math_contract.functions.counter.estimate_gas(
|
|
218
|
+
block_identifier="latest"
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
txn_hash = await async_transact(
|
|
222
|
+
contract=async_math_contract, contract_function="incrementCounter"
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
txn_receipt = await async_w3.eth.wait_for_transaction_receipt(txn_hash)
|
|
226
|
+
gas_used = txn_receipt.get("gasUsed")
|
|
227
|
+
|
|
228
|
+
assert abs(gas_estimate - gas_used) < 21000
|
|
229
|
+
|
|
230
|
+
|
|
200
231
|
@pytest.mark.asyncio
|
|
201
232
|
async def test_async_estimate_gas_block_identifier_unique_estimates(
|
|
202
233
|
async_w3, async_math_contract, async_transact
|
|
@@ -285,6 +285,17 @@ def test_receive_contract_with_fallback_function(receive_function_contract, call
|
|
|
285
285
|
assert final_value == "receive"
|
|
286
286
|
|
|
287
287
|
|
|
288
|
+
def test_contract_can_transact_without_fn_parens(w3, math_contract, call):
|
|
289
|
+
initial_value = call(contract=math_contract, contract_function="counter")
|
|
290
|
+
txn_hash = math_contract.functions.incrementCounter.transact()
|
|
291
|
+
txn_receipt = w3.eth.wait_for_transaction_receipt(txn_hash)
|
|
292
|
+
assert txn_receipt is not None
|
|
293
|
+
|
|
294
|
+
final_value = call(contract=math_contract, contract_function="counter")
|
|
295
|
+
|
|
296
|
+
assert final_value - initial_value == 1
|
|
297
|
+
|
|
298
|
+
|
|
288
299
|
@pytest.mark.asyncio
|
|
289
300
|
async def test_async_transacting_with_contract_no_arguments(
|
|
290
301
|
async_w3, async_math_contract, async_transact, async_call
|
|
@@ -306,6 +317,25 @@ async def test_async_transacting_with_contract_no_arguments(
|
|
|
306
317
|
assert final_value - initial_value == 1
|
|
307
318
|
|
|
308
319
|
|
|
320
|
+
@pytest.mark.asyncio
|
|
321
|
+
async def test_async_transacting_with_contract_no_arguments_no_parens(
|
|
322
|
+
async_w3, async_math_contract, async_transact, async_call
|
|
323
|
+
):
|
|
324
|
+
initial_value = await async_call(
|
|
325
|
+
contract=async_math_contract, contract_function="counter"
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
txn_hash = await async_math_contract.functions.incrementCounter.transact()
|
|
329
|
+
txn_receipt = await async_w3.eth.wait_for_transaction_receipt(txn_hash)
|
|
330
|
+
assert txn_receipt is not None
|
|
331
|
+
|
|
332
|
+
final_value = await async_call(
|
|
333
|
+
contract=async_math_contract, contract_function="counter"
|
|
334
|
+
)
|
|
335
|
+
|
|
336
|
+
assert final_value - initial_value == 1
|
|
337
|
+
|
|
338
|
+
|
|
309
339
|
@pytest.mark.asyncio
|
|
310
340
|
async def test_async_transact_not_sending_ether_to_nonpayable_function(
|
|
311
341
|
async_w3, async_payable_tester_contract, async_transact, async_call
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
3
|
+
from web3 import (
|
|
4
|
+
Web3,
|
|
5
|
+
)
|
|
6
|
+
from web3.exceptions import (
|
|
7
|
+
Web3ValueError,
|
|
8
|
+
)
|
|
9
|
+
from web3.middleware import (
|
|
10
|
+
FormattingMiddlewareBuilder,
|
|
11
|
+
Web3Middleware,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class TestMiddleware(Web3Middleware):
|
|
16
|
+
def response_processor(self, method, response):
|
|
17
|
+
if method == "eth_blockNumber":
|
|
18
|
+
response["result"] = 1234
|
|
19
|
+
|
|
20
|
+
return response
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class TestMiddleware2(Web3Middleware):
|
|
24
|
+
def response_processor(self, method, response):
|
|
25
|
+
if method == "eth_blockNumber":
|
|
26
|
+
response["result"] = 4321
|
|
27
|
+
|
|
28
|
+
return response
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def test_middleware_class_eq_magic_method():
|
|
32
|
+
w3_a = Web3()
|
|
33
|
+
w3_b = Web3()
|
|
34
|
+
|
|
35
|
+
mw1w3_a = TestMiddleware(w3_a)
|
|
36
|
+
assert mw1w3_a is not None
|
|
37
|
+
assert mw1w3_a != ""
|
|
38
|
+
|
|
39
|
+
mw1w3_a_equal = TestMiddleware(w3_a)
|
|
40
|
+
assert mw1w3_a == mw1w3_a_equal
|
|
41
|
+
|
|
42
|
+
mw2w3_a = TestMiddleware2(w3_a)
|
|
43
|
+
mw1w3_b = TestMiddleware(w3_b)
|
|
44
|
+
assert mw1w3_a != mw2w3_a
|
|
45
|
+
assert mw1w3_a != mw1w3_b
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_unnamed_middleware_are_given_unique_keys(w3):
|
|
49
|
+
request_formatting_middleware = FormattingMiddlewareBuilder.build(
|
|
50
|
+
request_formatters={lambda x: x}
|
|
51
|
+
)
|
|
52
|
+
request_formatting_middleware2 = FormattingMiddlewareBuilder.build(
|
|
53
|
+
request_formatters={lambda x: x if x else None}
|
|
54
|
+
)
|
|
55
|
+
result_formatting_middleware = FormattingMiddlewareBuilder.build(
|
|
56
|
+
result_formatters={lambda x: x}
|
|
57
|
+
)
|
|
58
|
+
error_formatting_middleware = FormattingMiddlewareBuilder.build(
|
|
59
|
+
error_formatters={lambda x: x}
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
# adding different middleware should not cause an error
|
|
63
|
+
w3.middleware_onion.add(request_formatting_middleware)
|
|
64
|
+
w3.middleware_onion.add(request_formatting_middleware2)
|
|
65
|
+
w3.middleware_onion.add(result_formatting_middleware)
|
|
66
|
+
w3.middleware_onion.add(error_formatting_middleware)
|
|
67
|
+
assert isinstance(w3.eth.block_number, int)
|
|
68
|
+
|
|
69
|
+
with pytest.raises(Web3ValueError):
|
|
70
|
+
# adding the same middleware again should cause an error
|
|
71
|
+
w3.middleware_onion.add(request_formatting_middleware)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def test_unnamed_class_middleware_are_given_unique_keys(w3):
|
|
75
|
+
w3.middleware_onion.add(TestMiddleware)
|
|
76
|
+
w3.middleware_onion.add(TestMiddleware2)
|
|
77
|
+
assert isinstance(w3.eth.block_number, int)
|
|
78
|
+
|
|
79
|
+
with pytest.raises(Web3ValueError):
|
|
80
|
+
# adding the same middleware again should cause an error
|
|
81
|
+
w3.middleware_onion.add(TestMiddleware)
|
|
@@ -11,9 +11,7 @@ DEFAULT_EXCEPTIONS = (
|
|
|
11
11
|
|
|
12
12
|
def test_no_default_exceptions_are_raised_within_web3py():
|
|
13
13
|
for root, dirs, files in os.walk(WEB3_PATH):
|
|
14
|
-
if "module_testing"
|
|
15
|
-
dirs.remove("module_testing")
|
|
16
|
-
continue
|
|
14
|
+
[dirs.remove(dir_) for dir_ in dirs if dir_ in ("scripts", "module_testing")]
|
|
17
15
|
for file in files:
|
|
18
16
|
if file.endswith(".py"):
|
|
19
17
|
file_path = os.path.join(root, file)
|
|
Binary file
|
|
@@ -2,10 +2,10 @@ import contextlib
|
|
|
2
2
|
import json
|
|
3
3
|
import os
|
|
4
4
|
import pprint
|
|
5
|
+
import re
|
|
5
6
|
import shutil
|
|
6
7
|
import socket
|
|
7
8
|
import subprocess
|
|
8
|
-
import sys
|
|
9
9
|
import time
|
|
10
10
|
|
|
11
11
|
import common
|
|
@@ -361,6 +361,32 @@ def setup_chain_state(w3):
|
|
|
361
361
|
return geth_fixture
|
|
362
362
|
|
|
363
363
|
|
|
364
|
+
def update_circleci_geth_version(new_version):
|
|
365
|
+
file_path = "./.circleci/config.yml"
|
|
366
|
+
with open(file_path) as file:
|
|
367
|
+
lines = file.readlines()
|
|
368
|
+
|
|
369
|
+
replaced = False
|
|
370
|
+
for i, line in enumerate(lines):
|
|
371
|
+
if "geth_version:" in line:
|
|
372
|
+
if "default:" in lines[i + 1]:
|
|
373
|
+
lines[i + 1] = f' default: "{new_version}"\n'
|
|
374
|
+
replaced = True
|
|
375
|
+
break
|
|
376
|
+
|
|
377
|
+
if not replaced:
|
|
378
|
+
raise ValueError("`geth_version` for circleci not found / replaced.")
|
|
379
|
+
|
|
380
|
+
with open(file_path, "w") as file:
|
|
381
|
+
file.writelines(lines)
|
|
382
|
+
print(f"Updated geth_version to {new_version}")
|
|
383
|
+
|
|
384
|
+
|
|
364
385
|
if __name__ == "__main__":
|
|
365
|
-
|
|
366
|
-
|
|
386
|
+
geth_binary = os.environ.get("GETH_BINARY", None)
|
|
387
|
+
if not geth_binary:
|
|
388
|
+
raise ValueError("GETH_BINARY not set. Cannot generate geth fixture.")
|
|
389
|
+
|
|
390
|
+
geth_version = re.search(r"geth-v([\d.]+)/", geth_binary).group(1)
|
|
391
|
+
generate_go_ethereum_fixture(f"./tests/integration/geth-{geth_version}-fixture")
|
|
392
|
+
update_circleci_geth_version(geth_version)
|
|
@@ -26,6 +26,9 @@ GET_BLINDED_BLOCKS = "/eth/v1/beacon/blinded_blocks/{0}"
|
|
|
26
26
|
# rewards
|
|
27
27
|
GET_REWARDS = "/eth/v1/beacon/rewards/blocks/{0}"
|
|
28
28
|
|
|
29
|
+
# blobs
|
|
30
|
+
GET_BLOB_SIDECARS = "/eth/v1/beacon/blob_sidecars/{0}"
|
|
31
|
+
|
|
29
32
|
# light client
|
|
30
33
|
GET_LIGHT_CLIENT_BOOTSTRAP_STRUCTURE = "/eth/v1/beacon/light_client/bootstrap/{0}"
|
|
31
34
|
GET_LIGHT_CLIENT_UPDATES = "/eth/v1/beacon/light_client/updates"
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
from typing import (
|
|
2
2
|
Any,
|
|
3
3
|
Dict,
|
|
4
|
+
List,
|
|
5
|
+
Optional,
|
|
4
6
|
)
|
|
5
7
|
|
|
6
8
|
from eth_typing import (
|
|
@@ -17,6 +19,7 @@ from web3.beacon.api_endpoints import (
|
|
|
17
19
|
GET_BEACON_HEADS,
|
|
18
20
|
GET_BEACON_STATE,
|
|
19
21
|
GET_BLINDED_BLOCKS,
|
|
22
|
+
GET_BLOB_SIDECARS,
|
|
20
23
|
GET_BLOCK,
|
|
21
24
|
GET_BLOCK_ATTESTATIONS,
|
|
22
25
|
GET_BLOCK_HEADER,
|
|
@@ -64,10 +67,12 @@ class AsyncBeacon:
|
|
|
64
67
|
self.request_timeout = request_timeout
|
|
65
68
|
self._request_session_manager = HTTPSessionManager()
|
|
66
69
|
|
|
67
|
-
async def _async_make_get_request(
|
|
70
|
+
async def _async_make_get_request(
|
|
71
|
+
self, endpoint_uri: str, params: Optional[Dict[str, str]] = None
|
|
72
|
+
) -> Dict[str, Any]:
|
|
68
73
|
uri = URI(self.base_url + endpoint_uri)
|
|
69
74
|
return await self._request_session_manager.async_json_make_get_request(
|
|
70
|
-
uri, timeout=self.request_timeout
|
|
75
|
+
uri, params=params, timeout=self.request_timeout
|
|
71
76
|
)
|
|
72
77
|
|
|
73
78
|
# [ BEACON endpoints ]
|
|
@@ -220,3 +225,14 @@ class AsyncBeacon:
|
|
|
220
225
|
|
|
221
226
|
async def get_syncing(self) -> Dict[str, Any]:
|
|
222
227
|
return await self._async_make_get_request(GET_SYNCING)
|
|
228
|
+
|
|
229
|
+
# [ BLOB endpoints ]
|
|
230
|
+
|
|
231
|
+
async def get_blob_sidecars(
|
|
232
|
+
self, block_id: str, indices: Optional[List[int]] = None
|
|
233
|
+
) -> Dict[str, Any]:
|
|
234
|
+
indices_param = {"indices": ",".join(map(str, indices))} if indices else None
|
|
235
|
+
return await self._async_make_get_request(
|
|
236
|
+
GET_BLOB_SIDECARS.format(block_id),
|
|
237
|
+
params=indices_param,
|
|
238
|
+
)
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
from typing import (
|
|
2
2
|
Any,
|
|
3
3
|
Dict,
|
|
4
|
+
List,
|
|
5
|
+
Optional,
|
|
4
6
|
)
|
|
5
7
|
|
|
6
8
|
from eth_typing import (
|
|
@@ -17,6 +19,7 @@ from web3.beacon.api_endpoints import (
|
|
|
17
19
|
GET_BEACON_HEADS,
|
|
18
20
|
GET_BEACON_STATE,
|
|
19
21
|
GET_BLINDED_BLOCKS,
|
|
22
|
+
GET_BLOB_SIDECARS,
|
|
20
23
|
GET_BLOCK,
|
|
21
24
|
GET_BLOCK_ATTESTATIONS,
|
|
22
25
|
GET_BLOCK_HEADER,
|
|
@@ -62,10 +65,12 @@ class Beacon:
|
|
|
62
65
|
self.request_timeout = request_timeout
|
|
63
66
|
self._request_session_manager = HTTPSessionManager()
|
|
64
67
|
|
|
65
|
-
def _make_get_request(
|
|
68
|
+
def _make_get_request(
|
|
69
|
+
self, endpoint_url: str, params: Optional[Dict[str, str]] = None
|
|
70
|
+
) -> Dict[str, Any]:
|
|
66
71
|
uri = URI(self.base_url + endpoint_url)
|
|
67
72
|
return self._request_session_manager.json_make_get_request(
|
|
68
|
-
uri, timeout=self.request_timeout
|
|
73
|
+
uri, params=params, timeout=self.request_timeout
|
|
69
74
|
)
|
|
70
75
|
|
|
71
76
|
# [ BEACON endpoints ]
|
|
@@ -206,3 +211,14 @@ class Beacon:
|
|
|
206
211
|
|
|
207
212
|
def get_syncing(self) -> Dict[str, Any]:
|
|
208
213
|
return self._make_get_request(GET_SYNCING)
|
|
214
|
+
|
|
215
|
+
# [ BLOB endpoints ]
|
|
216
|
+
|
|
217
|
+
def get_blob_sidecars(
|
|
218
|
+
self, block_id: str, indices: Optional[List[int]] = None
|
|
219
|
+
) -> Dict[str, Any]:
|
|
220
|
+
indices_param = {"indices": ",".join(map(str, indices))} if indices else None
|
|
221
|
+
return self._make_get_request(
|
|
222
|
+
GET_BLOB_SIDECARS.format(block_id),
|
|
223
|
+
params=indices_param,
|
|
224
|
+
)
|
|
@@ -319,8 +319,8 @@ class AsyncContractFunction(BaseContractFunction):
|
|
|
319
319
|
state_override,
|
|
320
320
|
ccip_read_enabled,
|
|
321
321
|
self.decode_tuples,
|
|
322
|
-
*self.args,
|
|
323
|
-
**self.kwargs,
|
|
322
|
+
*self.args or (),
|
|
323
|
+
**self.kwargs or {},
|
|
324
324
|
)
|
|
325
325
|
|
|
326
326
|
async def transact(self, transaction: Optional[TxParams] = None) -> HexBytes:
|
|
@@ -332,8 +332,8 @@ class AsyncContractFunction(BaseContractFunction):
|
|
|
332
332
|
setup_transaction,
|
|
333
333
|
self.contract_abi,
|
|
334
334
|
self.abi,
|
|
335
|
-
*self.args,
|
|
336
|
-
**self.kwargs,
|
|
335
|
+
*self.args or (),
|
|
336
|
+
**self.kwargs or {},
|
|
337
337
|
)
|
|
338
338
|
|
|
339
339
|
async def estimate_gas(
|
|
@@ -352,8 +352,8 @@ class AsyncContractFunction(BaseContractFunction):
|
|
|
352
352
|
self.abi,
|
|
353
353
|
block_identifier,
|
|
354
354
|
state_override,
|
|
355
|
-
*self.args,
|
|
356
|
-
**self.kwargs,
|
|
355
|
+
*self.args or (),
|
|
356
|
+
**self.kwargs or {},
|
|
357
357
|
)
|
|
358
358
|
|
|
359
359
|
async def build_transaction(
|
|
@@ -367,8 +367,8 @@ class AsyncContractFunction(BaseContractFunction):
|
|
|
367
367
|
built_transaction,
|
|
368
368
|
self.contract_abi,
|
|
369
369
|
self.abi,
|
|
370
|
-
*self.args,
|
|
371
|
-
**self.kwargs,
|
|
370
|
+
*self.args or (),
|
|
371
|
+
**self.kwargs or {},
|
|
372
372
|
)
|
|
373
373
|
|
|
374
374
|
@staticmethod
|
|
@@ -318,12 +318,13 @@ class ContractFunction(BaseContractFunction):
|
|
|
318
318
|
state_override,
|
|
319
319
|
ccip_read_enabled,
|
|
320
320
|
self.decode_tuples,
|
|
321
|
-
*self.args,
|
|
322
|
-
**self.kwargs,
|
|
321
|
+
*self.args or (),
|
|
322
|
+
**self.kwargs or {},
|
|
323
323
|
)
|
|
324
324
|
|
|
325
325
|
def transact(self, transaction: Optional[TxParams] = None) -> HexBytes:
|
|
326
326
|
setup_transaction = self._transact(transaction)
|
|
327
|
+
|
|
327
328
|
return transact_with_contract_function(
|
|
328
329
|
self.address,
|
|
329
330
|
self.w3,
|
|
@@ -331,8 +332,8 @@ class ContractFunction(BaseContractFunction):
|
|
|
331
332
|
setup_transaction,
|
|
332
333
|
self.contract_abi,
|
|
333
334
|
self.abi,
|
|
334
|
-
*self.args,
|
|
335
|
-
**self.kwargs,
|
|
335
|
+
*self.args or (),
|
|
336
|
+
**self.kwargs or {},
|
|
336
337
|
)
|
|
337
338
|
|
|
338
339
|
def estimate_gas(
|
|
@@ -351,12 +352,13 @@ class ContractFunction(BaseContractFunction):
|
|
|
351
352
|
self.abi,
|
|
352
353
|
block_identifier,
|
|
353
354
|
state_override,
|
|
354
|
-
*self.args,
|
|
355
|
-
**self.kwargs,
|
|
355
|
+
*self.args or (),
|
|
356
|
+
**self.kwargs or {},
|
|
356
357
|
)
|
|
357
358
|
|
|
358
359
|
def build_transaction(self, transaction: Optional[TxParams] = None) -> TxParams:
|
|
359
360
|
built_transaction = self._build_transaction(transaction)
|
|
361
|
+
|
|
360
362
|
return build_transaction_for_function(
|
|
361
363
|
self.address,
|
|
362
364
|
self.w3,
|
|
@@ -364,8 +366,8 @@ class ContractFunction(BaseContractFunction):
|
|
|
364
366
|
built_transaction,
|
|
365
367
|
self.contract_abi,
|
|
366
368
|
self.abi,
|
|
367
|
-
*self.args,
|
|
368
|
-
**self.kwargs,
|
|
369
|
+
*self.args or (),
|
|
370
|
+
**self.kwargs or {},
|
|
369
371
|
)
|
|
370
372
|
|
|
371
373
|
@staticmethod
|