diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b18e189..6094909 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.4.0 + rev: v4.5.0 hooks: - id: check-yaml @@ -10,7 +10,7 @@ repos: - id: isort - repo: https://github.com/psf/black - rev: 23.7.0 + rev: 23.10.1 hooks: - id: black name: black @@ -21,7 +21,7 @@ repos: - id: flake8 - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.5.1 + rev: v1.6.1 hooks: - id: mypy additional_dependencies: [types-PyYAML, types-requests, types-setuptools, pydantic] diff --git a/ape_foundry/provider.py b/ape_foundry/provider.py index 24009d6..53c3db4 100644 --- a/ape_foundry/provider.py +++ b/ape_foundry/provider.py @@ -10,6 +10,7 @@ from ape.api import ( BlockAPI, + ForkedNetworkAPI, PluginConfig, ReceiptAPI, SubprocessProvider, @@ -911,32 +912,31 @@ def _fork_config(self) -> FoundryForkConfig: return self.settings.fork[ecosystem_name][network_name] - @cached_property - def _upstream_provider(self) -> UpstreamProvider: - upstream_network = self.network.ecosystem.networks[self._upstream_network_name] - upstream_provider_name = self._fork_config.upstream_provider - # NOTE: if 'upstream_provider_name' is 'None', this gets the default upstream provider. - return upstream_network.get_provider(provider_name=upstream_provider_name) + @property + def forked_network(self) -> ForkedNetworkAPI: + return cast(ForkedNetworkAPI, self.network) def connect(self): super().connect() - # Verify that we're connected to a Foundry node with fork mode. - upstream_provider = self._upstream_provider - upstream_provider.connect() - try: - upstream_genesis_block_hash = upstream_provider.get_block(0).hash - except ExtraDataLengthError as err: - if isinstance(upstream_provider, Web3Provider): - logger.error( - f"Upstream provider '{upstream_provider.name}' missing Geth PoA middleware." - ) - upstream_provider.web3.middleware_onion.inject(geth_poa_middleware, layer=0) + # If using the provider config for upstream_provider, + # set the network one in this session, so other features work in core. + if upstream_name := self._fork_config.upstream_provider: + self.forked_network.network_config.upstream_provider = upstream_name + + with self.forked_network.use_upstream_provider() as upstream_provider: + try: upstream_genesis_block_hash = upstream_provider.get_block(0).hash - else: - raise FoundryProviderError(f"Unable to get genesis block: {err}.") from err + except ExtraDataLengthError as err: + if isinstance(upstream_provider, Web3Provider): + logger.error( + f"Upstream provider '{upstream_provider.name}' missing Geth PoA middleware." + ) + upstream_provider.web3.middleware_onion.inject(geth_poa_middleware, layer=0) + upstream_genesis_block_hash = upstream_provider.get_block(0).hash + else: + raise FoundryProviderError(f"Unable to get genesis block: {err}.") from err - upstream_provider.disconnect() if self.get_block(0).hash != upstream_genesis_block_hash: logger.warning( "Upstream network has mismatching genesis block. " diff --git a/setup.py b/setup.py index c72e2ef..721c1cc 100644 --- a/setup.py +++ b/setup.py @@ -13,8 +13,8 @@ "ape-polygon", # For running polygon fork tests ], "lint": [ - "black>=23.7.0,<24", # auto-formatter and linter - "mypy>=1.5.1,<2", # Static type analyzer + "black>=23.10.1,<24", # auto-formatter and linter + "mypy>=1.6.1,<2", # Static type analyzer "types-requests", # Needed due to mypy typeshed "types-setuptools", # Needed due to mypy typeshed "types-PyYAML", # Needed due to mypy typeshed @@ -69,7 +69,7 @@ url="https://github.com/ApeWorX/ape-foundry", include_package_data=True, install_requires=[ - "eth-ape>=0.6.12,<0.7", + "eth-ape>=0.6.23,<0.7", "evm-trace", # Use same version as ape "hexbytes", # Use same version as ape "web3", # Use same version as ape