Package: ape-foundry
Quick StartFoundry network provider plugin for Ape.
Foundry is a development framework written in Rust for Ethereum that includes a local network implementation.Dependenciespython3version 3.8 up to 3.11.Foundry. See Foundry'sInstallationdocumentation for steps.InstallationviapipYou can install the latest release viapip:pipinstallape-foundryviasetuptoolsYou can clone the repository and usesetuptoolsfor the most up-to-date version:gitclonehttps://github.com/ApeWorX/ape-foundry.gitcdape-foundry
python3setup.pyinstallQuick UsageUse the--network ethereum:local:foundrycommand line flag to use the foundry network (if it's not already configured as the default).This network provider takes additional Foundry-specific configuration options. To use them, add these configs in your project'sape-config.yaml:foundry:host:https://127.0.0.1:8555To select a random port, use a value of "auto":foundry:host:autoThis is useful for multiprocessing and starting up multiple providers.You can also adjust the request timeout setting:foundry:request_timeout:20# Defaults to 30fork_request_timeout:600# Defaults to 300Mainnet ForkTheape-foundryplugin also includes a mainnet fork provider.
It requires using another provider that has access to mainnet.Use it in most commands like this:apeconsole--network:mainnet-fork:foundrySpecify the upstream archive-data provider in yourape-config.yaml:foundry:fork:ethereum:mainnet:upstream_provider:alchemyOtherwise, it defaults to the default mainnet provider plugin.
You can also specify ablock_numberandevm_version.If the block number is specified, but no EVM version is specified, it is automatically set based on the block height for known networks.NOTE: Make sure you have the upstream provider plugin installed for ape.apepluginsinstallalchemyRemote Anvil NodeTo connect to a remote anvil node, set up your config like this:foundry:host:https://anvil.example.comNow, instead of launching a local process, it will attempt to connect to the remote anvil node and use this plugin as the ape interface.To connect to a remote anvil node using an environment variable, setAPE_FOUNDRY_HOST:exportAPE_FOUNDRY_HOST=https://your-anvil.example.com`Impersonate AccountsYou can impersonate accounts using theape-foundryplugin.
To impersonate an account, do the following:importpytest@pytest.fixturedefwhale(accounts):returnaccounts["example.eth"]To transact, your impersonated account must have a balance.
You can achieve this by using a forked network and impersonating an account with a balance.
Alternatively, you can set your node's base fee and priority fee to0.To programtically set an account's balance, do the following:fromapeimportaccountsaccount=accounts["example.eth"]account.balance="1000 ETH"# This calls `anvil_setBalance` under-the-hood.Base Fee and Priority FeeConfigure your node's base fee and priority fee using theape-config.yamlfile.foundry:base_fee:0priority_fee:0Auto-miningAnvil nodes by default auto-mine.
However, you can disable auto-mining on startup by configuring the foundry plugin like so:foundry:auto_mine:falseElse, you can disable auto-mining using the provider instance:fromapeimportchainanvil=chain.provideranvil.auto_mine=False# calls `anvil_setAutomine` RPC.Mine on an intervalBy default, Anvil will mine a new block every time a transaction is submitted.
To mine on an interval instead, set theblock_timeconfig:foundry:block_time:10# mine a new block every 10 seconds