Skip to content

Commit

Permalink
feat: evm-version local network
Browse files Browse the repository at this point in the history
  • Loading branch information
antazoey committed Jul 26, 2024
1 parent bbf676b commit c91c783
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 1 deletion.
21 changes: 20 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ foundry:
priority_fee: 0
```
# Auto-mining
## Auto-mining
Anvil nodes by default auto-mine.
However, you can disable auto-mining on startup by configuring the foundry plugin like so:
Expand Down Expand Up @@ -169,3 +169,22 @@ To mine on an interval instead, set the `block_time` config:
foundry:
block_time: 10 # mine a new block every 10 seconds
```
## EVM Version (hardfork)
To change the EVM version for local foundry networks, use the `evm_version` config:

```yaml
foundry:
evm_version: shanghai
```

To change the EVM version for forked networks, set it the specific forked-network config(s):

```yaml
foundry:
fork:
ethereum:
mainnet:
evm_version: shanghai
```
13 changes: 13 additions & 0 deletions ape_foundry/provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import random
import shutil
from bisect import bisect_right
from collections.abc import Iterable
from copy import copy
from subprocess import PIPE, call
from typing import Literal, Optional, Union, cast
Expand Down Expand Up @@ -70,6 +71,9 @@ class FoundryNetworkConfig(PluginConfig):
Defaults to ``True``. If ``host`` is remote, will not be able to start.
"""

evm_version: Optional[str] = None
"""The EVM hardfork to use, e.g. `shanghai`."""

# Retry strategy configs, try increasing these if you're getting FoundrySubprocessError
request_timeout: int = 30
fork_request_timeout: int = 300
Expand Down Expand Up @@ -419,6 +423,15 @@ def disconnect(self):
super().disconnect()

def build_command(self) -> list[str]:
cmd = self._build_command()

if evm_version := self.settings.evm_version:
cmd.extend(("--hardfork", evm_version))

return cmd

def _build_command(self) -> list[str]:
# All shared between forks and local.
cmd = [
self.anvil_bin,
"--port",
Expand Down
9 changes: 9 additions & 0 deletions tests/test_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -467,3 +467,12 @@ def test_initial_balance(accounts):
# just showing we were able to increase it.
acct = accounts[9]
assert convert("10_000 ETH", int) < acct.balance <= convert("100_000 ETH", int)


@pytest.mark.parametrize("host", ("https://example.com", "example.com"))
def test_evm_version(project, local_network, host):
with project.temp_config(foundry={"evm_version": "shanghai"}):
provider = local_network.get_provider("foundry")
cmd = provider.build_command()
assert "--hardfork" in cmd
assert "shanghai" in cmd

0 comments on commit c91c783

Please sign in to comment.