From 226d7669ec9446524e7bd510fdd4823b5e2342be Mon Sep 17 00:00:00 2001 From: NotPeopling2day <32708219+NotPeopling2day@users.noreply.github.com> Date: Wed, 22 Nov 2023 15:01:38 +0100 Subject: [PATCH 01/10] chore: update versions --- .mdformat.toml | 1 - .pre-commit-config.yaml | 4 ++-- pyproject.toml | 3 +++ setup.py | 17 +++++++++-------- tests/test_provider.py | 2 +- 5 files changed, 15 insertions(+), 12 deletions(-) delete mode 100644 .mdformat.toml diff --git a/.mdformat.toml b/.mdformat.toml deleted file mode 100644 index 01b2fb0..0000000 --- a/.mdformat.toml +++ /dev/null @@ -1 +0,0 @@ -number = true diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6094909..e9b019a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -10,7 +10,7 @@ repos: - id: isort - repo: https://github.com/psf/black - rev: 23.10.1 + rev: 23.11.0 hooks: - id: black name: black @@ -21,7 +21,7 @@ repos: - id: flake8 - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.6.1 + rev: v1.7.0 hooks: - id: mypy additional_dependencies: [types-PyYAML, types-requests, types-setuptools, pydantic] diff --git a/pyproject.toml b/pyproject.toml index ad09a3b..dc6543e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,3 +41,6 @@ force_grid_wrap = 0 include_trailing_comma = true multi_line_output = 3 use_parentheses = true + +[tool.mdformat] +number = true diff --git a/setup.py b/setup.py index 662c648..38515cb 100644 --- a/setup.py +++ b/setup.py @@ -13,16 +13,17 @@ "ape-polygon", # For running polygon fork tests ], "lint": [ - "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 - "flake8>=6.0.1,<7", # Style linter + "black>=23.11.0,<24", # Auto-formatter and linter + "mypy>=1.7.0,<2", # Static type analyzer + "types-requests", # Needed for mypy type shed + "types-setuptools", # Needed for mypy type shed + "types-PyYAML", # Needed for mypy type shed + "flake8>=6.1.0,<7", # Style linter "isort>=5.10.1,<6", # Import sorting linter "mdformat>=0.7.17", # Auto-formatter for markdown "mdformat-gfm>=0.3.5", # Needed for formatting GitHub-flavored markdown "mdformat-frontmatter>=0.4.1", # Needed for frontmatters-style headers in issue templates + "mdformat-pyproject>=0.0.1", # Allows configuring in pyproject.toml ], "doc": [ "Sphinx>=6.1.3,<7", # Documentation generator @@ -69,9 +70,9 @@ url="https://github.com/ApeWorX/ape-foundry", include_package_data=True, install_requires=[ - "eth-ape>=0.6.24,<0.7", + "eth-ape>=0.7.0,<0.8", + "ethpm-types", # Use same version as eth-ape "evm-trace", # Use same version as ape - "hexbytes", # Use same version as ape "web3", # Use same version as ape "yarl", # Use same version as ape ], diff --git a/tests/test_provider.py b/tests/test_provider.py index 8cb125c..df9bb46 100644 --- a/tests/test_provider.py +++ b/tests/test_provider.py @@ -8,7 +8,7 @@ from ape.types import CallTreeNode, TraceFrame from eth_utils import to_int from evm_trace import CallType -from hexbytes import HexBytes +from ethpm_types import HexBytes from ape_foundry import FoundryProviderError from ape_foundry.provider import FOUNDRY_CHAIN_ID From e67a0c22988bbf7948262465a74bead4eb6ec383 Mon Sep 17 00:00:00 2001 From: NotPeopling2day <32708219+NotPeopling2day@users.noreply.github.com> Date: Mon, 11 Dec 2023 20:17:35 -0600 Subject: [PATCH 02/10] chore: more updates --- .pre-commit-config.yaml | 2 +- ape_foundry/provider.py | 19 +++++++++---------- ape_foundry/utils.py | 2 +- setup.py | 10 +++++++--- tests/test_provider.py | 2 +- 5 files changed, 19 insertions(+), 16 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e9b019a..a7a4502 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,7 +21,7 @@ repos: - id: flake8 - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.7.0 + rev: v1.7.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 b60f46a..7473b88 100644 --- a/ape_foundry/provider.py +++ b/ape_foundry/provider.py @@ -8,7 +8,6 @@ from subprocess import PIPE, call from typing import Any, Dict, Iterator, List, Literal, Optional, Tuple, Union, cast -from ape._pydantic_compat import root_validator from ape.api import ( BlockAPI, ForkedNetworkAPI, @@ -17,7 +16,6 @@ SubprocessProvider, TestProviderAPI, TransactionAPI, - Web3Provider, ) from ape.exceptions import ( APINotImplementedError, @@ -38,13 +36,15 @@ TraceFrame, ) from ape.utils import cached_property +from ape_ethereum.provider import Web3Provider from ape_test import Config as TestConfig +from eth_pydantic_types import HexBytes from eth_typing import HexStr from eth_utils import add_0x_prefix, is_0x_prefixed, is_hex, to_hex -from ethpm_types import HexBytes from evm_trace import CallType, ParityTraceList from evm_trace import TraceFrame as EvmTraceFrame from evm_trace import get_calltree_from_geth_trace, get_calltree_from_parity_trace +from pydantic import ConfigDict, model_validator from web3 import HTTPProvider, Web3 from web3.exceptions import ContractCustomError from web3.exceptions import ContractLogicError as Web3ContractLogicError @@ -109,9 +109,7 @@ class FoundryNetworkConfig(PluginConfig): Set a block time to allow mining to happen on an interval rather than only when a new transaction is submitted. """ - - class Config: - extra = "allow" + model_config = ConfigDict(extra="allow") def _call(*args): @@ -532,7 +530,7 @@ def send_transaction(self, txn: TransactionAPI) -> ReceiptAPI: if original_code: self.set_code(sender, "") - txn_dict = txn.dict() + txn_dict = txn.model_dump(mode="json", by_alias=True) if isinstance(txn_dict.get("type"), int): txn_dict["type"] = HexBytes(txn_dict["type"]).hex() @@ -576,7 +574,7 @@ def send_transaction(self, txn: TransactionAPI) -> ReceiptAPI: ) if receipt.failed: - txn_dict = receipt.transaction.dict() + txn_dict = receipt.transaction.model_dump(mode="json", by_alias=True) if isinstance(txn_dict.get("type"), int): txn_dict["type"] = HexBytes(txn_dict["type"]).hex() @@ -708,7 +706,7 @@ def _get_transaction_trace(self, txn_hash: str) -> Iterator[EvmTraceFrame]: def get_call_tree(self, txn_hash: str) -> CallTreeNode: raw_trace_list = self._make_request("trace_transaction", [txn_hash]) - trace_list = ParityTraceList.parse_obj(raw_trace_list) + trace_list = ParityTraceList.model_validate(raw_trace_list) if not trace_list: raise FoundryProviderError(f"No trace found for transaction '{txn_hash}'") @@ -859,7 +857,8 @@ class FoundryForkProvider(FoundryProvider): to use as your archive node. """ - @root_validator() + @model_validator(mode="before") + @classmethod def set_upstream_provider(cls, value): network = value["network"] adhoc_settings = value.get("provider_settings", {}).get("fork", {}) diff --git a/ape_foundry/utils.py b/ape_foundry/utils.py index 5ccbc8b..c4d12c5 100644 --- a/ape_foundry/utils.py +++ b/ape_foundry/utils.py @@ -1,7 +1,7 @@ from typing import Union +from eth_pydantic_types import HexBytes from eth_utils import to_bytes, to_hex -from ethpm_types import HexBytes # TODO: Upstream to ape core diff --git a/setup.py b/setup.py index 38515cb..45072ac 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ extras_require = { "test": [ # `test` GitHub Action jobs uses this "pytest>=6.0", # Core testing package - "pytest-xdist", # multi-process runner + "pytest-xdist", # Multi-process runner "pytest-cov", # Coverage analyzer plugin "hypothesis>=6.2.0,<7.0", # Strategy-based fuzzer "ape-alchemy", # For running fork tests @@ -14,11 +14,13 @@ ], "lint": [ "black>=23.11.0,<24", # Auto-formatter and linter - "mypy>=1.7.0,<2", # Static type analyzer - "types-requests", # Needed for mypy type shed + "mypy>=1.7.1,<2", # Static type analyzer "types-setuptools", # Needed for mypy type shed + "types-requests", # Needed for mypy type shed "types-PyYAML", # Needed for mypy type shed "flake8>=6.1.0,<7", # Style linter + "flake8-breakpoint>=1.1.0,<2", # Detect breakpoints left in code + "flake8-print>=5.0.0,<6", # Detect print statements left in code "isort>=5.10.1,<6", # Import sorting linter "mdformat>=0.7.17", # Auto-formatter for markdown "mdformat-gfm>=0.3.5", # Needed for formatting GitHub-flavored markdown @@ -72,9 +74,11 @@ install_requires=[ "eth-ape>=0.7.0,<0.8", "ethpm-types", # Use same version as eth-ape + "eth-pydantic-types", # Use same version as eth-ape "evm-trace", # Use same version as ape "web3", # Use same version as ape "yarl", # Use same version as ape + "hexbytes", # Use same version as ape ], python_requires=">=3.8,<4", extras_require=extras_require, diff --git a/tests/test_provider.py b/tests/test_provider.py index df9bb46..8cb125c 100644 --- a/tests/test_provider.py +++ b/tests/test_provider.py @@ -8,7 +8,7 @@ from ape.types import CallTreeNode, TraceFrame from eth_utils import to_int from evm_trace import CallType -from ethpm_types import HexBytes +from hexbytes import HexBytes from ape_foundry import FoundryProviderError from ape_foundry.provider import FOUNDRY_CHAIN_ID From 1dc4e788c5a3c3533772d803a004e0e056e5427f Mon Sep 17 00:00:00 2001 From: NotPeopling2day <32708219+NotPeopling2day@users.noreply.github.com> Date: Tue, 12 Dec 2023 11:56:04 -0600 Subject: [PATCH 03/10] refactor: v2 updates --- .pre-commit-config.yaml | 2 +- ape_foundry/provider.py | 17 ++++++++++++----- tests/conftest.py | 3 ++- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a7a4502..dccf3e6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -10,7 +10,7 @@ repos: - id: isort - repo: https://github.com/psf/black - rev: 23.11.0 + rev: 23.12.0 hooks: - id: black name: black diff --git a/ape_foundry/provider.py b/ape_foundry/provider.py index 7473b88..f3f2569 100644 --- a/ape_foundry/provider.py +++ b/ape_foundry/provider.py @@ -44,7 +44,8 @@ from evm_trace import CallType, ParityTraceList from evm_trace import TraceFrame as EvmTraceFrame from evm_trace import get_calltree_from_geth_trace, get_calltree_from_parity_trace -from pydantic import ConfigDict, model_validator +from pydantic import model_validator +from pydantic_settings import SettingsConfigDict from web3 import HTTPProvider, Web3 from web3.exceptions import ContractCustomError from web3.exceptions import ContractLogicError as Web3ContractLogicError @@ -109,7 +110,7 @@ class FoundryNetworkConfig(PluginConfig): Set a block time to allow mining to happen on an interval rather than only when a new transaction is submitted. """ - model_config = ConfigDict(extra="allow") + model_config = SettingsConfigDict(extra="allow") def _call(*args): @@ -595,7 +596,13 @@ def send_transaction(self, txn: TransactionAPI) -> ReceiptAPI: self.chain_manager.history.append(receipt) return receipt - def send_call(self, txn: TransactionAPI, **kwargs: Any) -> bytes: + def send_call( + self, + txn: TransactionAPI, + block_id: Optional[BlockID] = None, + state: Optional[Dict] = None, + **kwargs, + ) -> HexBytes: skip_trace = kwargs.pop("skip_trace", False) arguments = self._prepare_call(txn, **kwargs) @@ -682,7 +689,7 @@ def _trace_call(self, arguments: List[Any]) -> Tuple[Dict, Iterator[EvmTraceFram trace_data = result.get("structLogs", []) return result, (EvmTraceFrame(**f) for f in trace_data) - def get_balance(self, address: str) -> int: + def get_balance(self, address: AddressType, block_id: Optional[BlockID] = None) -> int: if hasattr(address, "address"): address = address.address @@ -806,7 +813,7 @@ def set_storage(self, address: AddressType, slot: int, value: HexBytes): [address, to_bytes32(slot).hex(), to_bytes32(value).hex()], ) - def _eth_call(self, arguments: List) -> bytes: + def _eth_call(self, arguments: List) -> HexBytes: # Override from Web3Provider because foundry is pickier. txn_dict = copy(arguments[0]) diff --git a/tests/conftest.py b/tests/conftest.py index 84ce1a1..b72fd0e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -116,7 +116,8 @@ def networks(): @pytest.fixture def get_contract_type(): def fn(name: str) -> ContractType: - return ContractType.parse_file(LOCAL_CONTRACTS_PATH / f"{name}.json") + json_file = json.loads((LOCAL_CONTRACTS_PATH / f"{name}.json").read_text()) + return ContractType.model_validate(json_file) return fn From 9ad2bdf1e933c7f74d42e0313209a49cb1fd4198 Mon Sep 17 00:00:00 2001 From: NotPeopling2day <32708219+NotPeopling2day@users.noreply.github.com> Date: Tue, 12 Dec 2023 14:58:55 -0600 Subject: [PATCH 04/10] refactor: v2 updates --- ape_foundry/provider.py | 4 ++++ setup.py | 2 +- tests/conftest.py | 4 ++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ape_foundry/provider.py b/ape_foundry/provider.py index f3f2569..f6ddb1f 100644 --- a/ape_foundry/provider.py +++ b/ape_foundry/provider.py @@ -603,6 +603,10 @@ def send_call( state: Optional[Dict] = None, **kwargs, ) -> HexBytes: + if block_id is not None: + kwargs["block_identifier"] = block_id + if state is not None: + kwargs["state_override"] = state skip_trace = kwargs.pop("skip_trace", False) arguments = self._prepare_call(txn, **kwargs) diff --git a/setup.py b/setup.py index 45072ac..667b361 100644 --- a/setup.py +++ b/setup.py @@ -13,7 +13,7 @@ "ape-polygon", # For running polygon fork tests ], "lint": [ - "black>=23.11.0,<24", # Auto-formatter and linter + "black>=23.12.0,<24", # Auto-formatter and linter "mypy>=1.7.1,<2", # Static type analyzer "types-setuptools", # Needed for mypy type shed "types-requests", # Needed for mypy type shed diff --git a/tests/conftest.py b/tests/conftest.py index b72fd0e..df61a78 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -116,8 +116,8 @@ def networks(): @pytest.fixture def get_contract_type(): def fn(name: str) -> ContractType: - json_file = json.loads((LOCAL_CONTRACTS_PATH / f"{name}.json").read_text()) - return ContractType.model_validate(json_file) + json_path = LOCAL_CONTRACTS_PATH / f"{name}.json" + return ContractType.model_validate_json(json_path.read_text()) return fn From 569811be68ae9f1a9b9bc9864d57a0bb5b0b1948 Mon Sep 17 00:00:00 2001 From: Juliya Smith Date: Wed, 13 Dec 2023 08:34:27 -0600 Subject: [PATCH 05/10] chore: del deprecated part --- ape_foundry/provider.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/ape_foundry/provider.py b/ape_foundry/provider.py index f6ddb1f..3091698 100644 --- a/ape_foundry/provider.py +++ b/ape_foundry/provider.py @@ -246,15 +246,6 @@ def _test_config(self) -> TestConfig: def auto_mine(self) -> bool: return self._make_request("anvil_getAutomine", []) - @property - def gas_price(self) -> int: - # TODO: Remove this once Ape > 0.6.13 - result = super().gas_price - if isinstance(result, str) and is_0x_prefixed(result): - return int(result, 16) - - return result - @property def settings(self) -> FoundryNetworkConfig: return cast(FoundryNetworkConfig, super().settings) From e0e9c96e61fbf0117c3615be60c0287a48ffe293 Mon Sep 17 00:00:00 2001 From: Juliya Smith Date: Wed, 13 Dec 2023 08:37:39 -0600 Subject: [PATCH 06/10] chore: rm deprecated port --- README.md | 4 ++-- ape_foundry/provider.py | 21 --------------------- 2 files changed, 2 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 8f60a78..f4f5401 100644 --- a/README.md +++ b/README.md @@ -36,14 +36,14 @@ This network provider takes additional Foundry-specific configuration options. T ```yaml foundry: - port: 8555 + host: https://127.0.0.1:8555 ``` To select a random port, use a value of "auto": ```yaml foundry: - port: auto + host: auto ``` This is useful for multiprocessing and starting up multiple providers. diff --git a/ape_foundry/provider.py b/ape_foundry/provider.py index 3091698..7cd114d 100644 --- a/ape_foundry/provider.py +++ b/ape_foundry/provider.py @@ -74,9 +74,6 @@ class FoundryForkConfig(PluginConfig): class FoundryNetworkConfig(PluginConfig): - port: Optional[Union[int, Literal["auto"]]] = DEFAULT_PORT - """Deprecated. Use ``host`` config.""" - host: Optional[Union[str, Literal["auto"]]] = None """The host address or ``"auto"`` to use localhost with a random port (with attempts).""" @@ -264,24 +261,6 @@ def connect(self): **NOTE**: Must set port before calling 'super().connect()'. """ - warning = "`port` setting is deprecated. Please use `host` key that includes the port." - - if self.settings.port != DEFAULT_PORT and self.settings.host is not None: - raise FoundryProviderError( - "Cannot use deprecated `port` field with `host`. " - "Place `port` at end of `host` instead." - ) - - elif self.settings.port != DEFAULT_PORT: - # We only get here if the user configured a port without a host, - # the old way of doing it. TODO: Can remove after 0.7. - logger.warning(warning) - if self.settings.port not in (None, "auto"): - self._host = f"http://127.0.0.1:{self.settings.port}" - else: - # This will trigger selecting a random port on localhost and trying. - self._host = "auto" - if "APE_FOUNDRY_HOST" in os.environ: self._host = os.environ["APE_FOUNDRY_HOST"] From af21203b83f589286b7ee9fe462d344ee2c72be0 Mon Sep 17 00:00:00 2001 From: Juliya Smith Date: Wed, 13 Dec 2023 08:50:07 -0600 Subject: [PATCH 07/10] chore: more upgrade --- ape_foundry/provider.py | 9 ++++++--- ape_foundry/utils.py | 24 ------------------------ tests/test_provider.py | 4 ++-- 3 files changed, 8 insertions(+), 29 deletions(-) delete mode 100644 ape_foundry/utils.py diff --git a/ape_foundry/provider.py b/ape_foundry/provider.py index 7cd114d..684d3ef 100644 --- a/ape_foundry/provider.py +++ b/ape_foundry/provider.py @@ -38,7 +38,7 @@ from ape.utils import cached_property from ape_ethereum.provider import Web3Provider from ape_test import Config as TestConfig -from eth_pydantic_types import HexBytes +from eth_pydantic_types import HashBytes32, HexBytes from eth_typing import HexStr from eth_utils import add_0x_prefix, is_0x_prefixed, is_hex, to_hex from evm_trace import CallType, ParityTraceList @@ -59,7 +59,6 @@ from ape_foundry.constants import EVM_VERSION_BY_NETWORK from .exceptions import FoundryNotInstalledError, FoundryProviderError, FoundrySubprocessError -from .utils import to_bytes32 EPHEMERAL_PORTS_START = 49152 EPHEMERAL_PORTS_END = 60999 @@ -784,7 +783,11 @@ def set_code(self, address: AddressType, code: ContractCode) -> bool: def set_storage(self, address: AddressType, slot: int, value: HexBytes): self._make_request( "anvil_setStorageAt", - [address, to_bytes32(slot).hex(), to_bytes32(value).hex()], + [ + address, + HashBytes32.__eth_pydantic_validate__(slot).hex(), + HashBytes32.__eth_pydantic_validate__(value).hex(), + ], ) def _eth_call(self, arguments: List) -> HexBytes: diff --git a/ape_foundry/utils.py b/ape_foundry/utils.py deleted file mode 100644 index c4d12c5..0000000 --- a/ape_foundry/utils.py +++ /dev/null @@ -1,24 +0,0 @@ -from typing import Union - -from eth_pydantic_types import HexBytes -from eth_utils import to_bytes, to_hex - - -# TODO: Upstream to ape core -def to_bytes32(value: Union[int, str, bytes, HexBytes]) -> HexBytes: - if isinstance(value, int): - value = to_bytes(value) - - elif isinstance(value, str): - if set(value.lower().replace("0x", "")) > set("0123456789abcdef"): - raise TypeError(f"'{value}' not valid hexstr") - - value = to_bytes(hexstr=value) - - elif not isinstance(value, bytes): - raise TypeError(f"Cannot convert type '{type(value)}' to 'bytes'") - - if len(value) > 32: - raise ValueError(f"Value '{to_hex(value)}' must be <= 32 bytes") - - return HexBytes(value.rjust(32, b"\x00")) diff --git a/tests/test_provider.py b/tests/test_provider.py index 8cb125c..66bc3b0 100644 --- a/tests/test_provider.py +++ b/tests/test_provider.py @@ -190,9 +190,9 @@ def test_set_code(connected_provider, contract_container, owner): def test_set_storage(connected_provider, contract_container, owner): contract = contract_container.deploy(sender=owner) - assert to_int(connected_provider.get_storage_at(contract.address, "0x2b5e3af16b1880000")) == 0 + assert to_int(connected_provider.get_storage(contract.address, "0x2b5e3af16b1880000")) == 0 connected_provider.set_storage(contract.address, "0x2b5e3af16b1880000", "0x1") - assert to_int(connected_provider.get_storage_at(contract.address, "0x2b5e3af16b1880000")) == 1 + assert to_int(connected_provider.get_storage(contract.address, "0x2b5e3af16b1880000")) == 1 def test_return_value(connected_provider, contract_instance, owner): From 780822a6b00e0d911cb848a51ef230f10c7171e9 Mon Sep 17 00:00:00 2001 From: Juliya Smith Date: Fri, 15 Dec 2023 11:22:58 -0600 Subject: [PATCH 08/10] fix: default arg mutation --- ape_foundry/provider.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ape_foundry/provider.py b/ape_foundry/provider.py index 684d3ef..38c51e3 100644 --- a/ape_foundry/provider.py +++ b/ape_foundry/provider.py @@ -37,7 +37,7 @@ ) from ape.utils import cached_property from ape_ethereum.provider import Web3Provider -from ape_test import Config as TestConfig +from ape_test import ApeTestConfig from eth_pydantic_types import HashBytes32, HexBytes from eth_typing import HexStr from eth_utils import add_0x_prefix, is_0x_prefixed, is_hex, to_hex @@ -235,8 +235,8 @@ def is_connected(self) -> bool: return self._web3 is not None @cached_property - def _test_config(self) -> TestConfig: - return cast(TestConfig, self.config_manager.get_config("test")) + def _test_config(self) -> ApeTestConfig: + return cast(ApeTestConfig, self.config_manager.get_config("test")) @property def auto_mine(self) -> bool: @@ -423,7 +423,7 @@ def build_command(self) -> List[str]: "--accounts", f"{self.number_of_accounts}", "--derivation-path", - "m/44'/60'/0'", + f"{self.test_config.hd_path.replace('{}', '0')}", "--steps-tracing", "--block-base-fee-per-gas", f"{self.settings.base_fee}", From 1e21db05f89d534ec63f96da129e430ebaef8afb Mon Sep 17 00:00:00 2001 From: Juliya Smith Date: Fri, 15 Dec 2023 12:26:25 -0600 Subject: [PATCH 09/10] fix: hd path --- ape_foundry/provider.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ape_foundry/provider.py b/ape_foundry/provider.py index 38c51e3..08dad7c 100644 --- a/ape_foundry/provider.py +++ b/ape_foundry/provider.py @@ -423,7 +423,7 @@ def build_command(self) -> List[str]: "--accounts", f"{self.number_of_accounts}", "--derivation-path", - f"{self.test_config.hd_path.replace('{}', '0')}", + f"{self.test_config.hd_path}", "--steps-tracing", "--block-base-fee-per-gas", f"{self.settings.base_fee}", From f7d9442f0a82d4bb2403ea65f2435d231b857bcb Mon Sep 17 00:00:00 2001 From: Juliya Smith Date: Fri, 15 Dec 2023 13:30:13 -0600 Subject: [PATCH 10/10] test: fix tests --- tests/expected_traces.py | 2 +- tests/test_provider.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/expected_traces.py b/tests/expected_traces.py index bc403b5..2bf1a3d 100644 --- a/tests/expected_traces.py +++ b/tests/expected_traces.py @@ -1,7 +1,7 @@ LOCAL_TRACE = r""" Call trace for '0x([A-Fa-f0-9]{64})' tx\.origin=0x[a-fA-F0-9]{40} -ContractA\.methodWithoutArguments\(\) -> 0x00\.\.5174 \[\d+ gas\] +ContractA\.methodWithoutArguments\(\) -> 0x00\.\.93bc \[\d+ gas\] ├── SYMBOL\.supercluster\(x=234444\) -> \[ │ \[23523523235235, 11111111111, 234444\], │ \[ diff --git a/tests/test_provider.py b/tests/test_provider.py index 66bc3b0..5675d35 100644 --- a/tests/test_provider.py +++ b/tests/test_provider.py @@ -124,7 +124,7 @@ def test_get_call_tree(connected_provider, sender, receiver): call_tree = connected_provider.get_call_tree(transfer.txn_hash) assert isinstance(call_tree, CallTreeNode) assert call_tree.call_type == CallType.CALL.value - assert repr(call_tree) == "0xc89D42189f0450C2b2c3c61f58Ec5d628176A1E7.0x()" + assert repr(call_tree) == "0x70997970C51812dc3A010C7d01b50e0d17dc79C8.0x()" def test_request_timeout(connected_provider, config):